refactor: 修复消息接受内容

This commit is contained in:
Bunny 2024-11-03 21:33:44 +08:00
parent 02321fbcb2
commit 7b265657b6
12 changed files with 281 additions and 146 deletions

View File

@ -0,0 +1,72 @@
package cn.bunny.dao.vo.system.message;
import cn.bunny.dao.common.vo.BaseUserVo;
import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Schema(name = "MessageReceivedWithMessageVo对象", title = "用户消息接收", description = "用户消息接收")
public class MessageReceivedWithMessageVo extends BaseUserVo {
@Schema(name = "id", title = "消息接受id")
@JsonFormat(shape = JsonFormat.Shape.STRING)
@JSONField(serializeUsing = ToStringSerializer.class)
private Long id;
@Schema(name = "messageId", title = "消息id")
@JsonFormat(shape = JsonFormat.Shape.STRING)
@JSONField(serializeUsing = ToStringSerializer.class)
private Long messageId;
@Schema(name = "receivedUserId", title = "接收人用户ID")
private String receivedUserId;
@Schema(name = "receivedUserNickname", title = "接收人用户昵称")
private String receivedUserNickname;
@Schema(name = "messageTypeId", title = "消息类型id")
private String messageTypeId;
@Schema(name = "messageType", title = "消息类型")
private String messageType;
@Schema(name = "title", title = "消息标题")
private String title;
@Schema(name = "sendUserId", title = "发送人用户ID")
@JsonFormat(shape = JsonFormat.Shape.STRING)
@JSONField(serializeUsing = ToStringSerializer.class)
private Long sendUserId;
@Schema(name = "sendNickname", title = "发送人昵称")
private String sendNickname;
@Schema(name = "cover", title = "封面")
private String cover;
@Schema(name = "summary", title = "消息简介")
private String summary;
@Schema(name = "content", title = "消息内容")
private String content;
@Schema(name = "editorType", title = "编辑器类型")
private String editorType;
@Schema(name = "status", title = "0:未读 1:已读")
private Boolean status;
@Schema(name = "level", title = "消息等级")
private String level;
@Schema(name = "extra", title = "消息等级详情")
private String extra;
}

View File

@ -66,4 +66,5 @@ public class MessageVo extends BaseUserVo {
@Schema(name = "extra", title = "消息等级详情")
private String extra;
}
}

View File

@ -1,6 +1,5 @@
package cn.bunny.services.controller;
import cn.bunny.dao.dto.system.message.MessageDto;
import cn.bunny.dao.dto.system.message.MessageUserDto;
import cn.bunny.dao.entity.system.Message;
import cn.bunny.dao.pojo.result.PageResult;
@ -35,19 +34,6 @@ public class MessageController {
@Autowired
private MessageService messageService;
@Operation(summary = "分页查询消息", description = "分页查询消息")
@GetMapping("getMessageList/{page}/{limit}")
public Mono<Result<PageResult<MessageVo>>> getMessageList(
@Parameter(name = "page", description = "当前页", required = true)
@PathVariable("page") Integer page,
@Parameter(name = "limit", description = "每页记录数", required = true)
@PathVariable("limit") Integer limit,
MessageDto dto) {
Page<Message> pageParams = new Page<>(page, limit);
PageResult<MessageVo> pageResult = messageService.getMessageList(pageParams, dto);
return Mono.just(Result.success(pageResult));
}
@Operation(summary = "分页查询用户消息", description = "分页查询用户消息")
@GetMapping("noManage/getUserMessageList/{page}/{limit}")
public Mono<Result<PageResult<MessageUserVo>>> getUserMessageList(

View File

@ -1,12 +1,18 @@
package cn.bunny.services.controller;
import cn.bunny.dao.dto.system.message.MessageAddDto;
import cn.bunny.dao.dto.system.message.MessageDto;
import cn.bunny.dao.dto.system.message.MessageUpdateDto;
import cn.bunny.dao.entity.system.Message;
import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.pojo.result.Result;
import cn.bunny.dao.pojo.result.ResultCodeEnum;
import cn.bunny.dao.vo.system.message.MessageReceivedWithMessageVo;
import cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo;
import cn.bunny.services.service.MessageReceivedService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
@ -31,6 +37,33 @@ public class MessageReceivedController {
@Autowired
private MessageReceivedService messageReceivedService;
@Operation(summary = "管理员管理用户消息接收分页查询", description = "管理员管理用户消息接收分页查询")
@GetMapping("getMessageReceivedList/{page}/{limit}")
public Mono<Result<PageResult<MessageReceivedWithMessageVo>>> getMessageReceivedList(
@Parameter(name = "page", description = "当前页", required = true)
@PathVariable("page") Integer page,
@Parameter(name = "limit", description = "每页记录数", required = true)
@PathVariable("limit") Integer limit,
MessageDto dto) {
Page<Message> pageParams = new Page<>(page, limit);
PageResult<MessageReceivedWithMessageVo> pageResult = messageReceivedService.getMessageReceivedList(pageParams, dto);
return Mono.just(Result.success(pageResult));
}
@Operation(summary = "管理员将用户接受消息标为已读", description = "管理员将用户接受消息标为已读")
@PutMapping("markMessageReceivedAsRead")
public Mono<Result<String>> markMessageReceivedAsRead(@RequestBody List<Long> ids) {
messageReceivedService.markMessageReceivedAsRead(ids);
return Mono.just(Result.success());
}
@Operation(summary = "管理删除用户接受的消息", description = "管理删除用户接受的消息")
@DeleteMapping("deleteMessageReceivedByIds")
public Mono<Result<String>> deleteMessageReceivedByIds(@RequestBody List<Long> ids) {
messageReceivedService.deleteMessageReceivedByIds(ids);
return Mono.just(Result.success(ResultCodeEnum.DELETE_SUCCESS));
}
@Operation(summary = "根据消息id获取接收人信息", description = "根据消息id获取接收人信息")
@GetMapping("noManage/getReceivedUserinfoByMessageId")
public Mono<Result<List<MessageReceivedWithUserVo>>> getReceivedUserinfoByMessageId(Long messageId) {
@ -38,6 +71,13 @@ public class MessageReceivedController {
return Mono.just(Result.success(voList));
}
@Operation(summary = "用户将消息标为已读", description = "用户将消息标为已读")
@PutMapping("noManage/updateUserMarkAsRead")
public Mono<Result<String>> updateUserMarkAsRead(@Valid @RequestBody List<Long> ids) {
messageReceivedService.updateUserMarkAsRead(ids);
return Mono.just(Result.success(ResultCodeEnum.UPDATE_SUCCESS));
}
@Operation(summary = "添加系统消息", description = "添加系统消息")
@PostMapping("addMessage")
public Mono<Result<String>> addMessage(@Valid @RequestBody MessageAddDto dto) {
@ -52,10 +92,4 @@ public class MessageReceivedController {
return Mono.just(Result.success(ResultCodeEnum.UPDATE_SUCCESS));
}
@Operation(summary = "用户将消息标为已读", description = "用户将消息标为已读")
@PutMapping("noManage/updateUserMarkAsRead")
public Mono<Result<String>> updateUserMarkAsRead(@Valid @RequestBody List<Long> ids) {
messageReceivedService.updateUserMarkAsRead(ids);
return Mono.just(Result.success(ResultCodeEnum.UPDATE_SUCCESS));
}
}

View File

@ -1,6 +1,5 @@
package cn.bunny.services.mapper;
import cn.bunny.dao.dto.system.message.MessageDto;
import cn.bunny.dao.dto.system.message.MessageUserDto;
import cn.bunny.dao.entity.system.Message;
import cn.bunny.dao.vo.system.message.MessageVo;
@ -23,14 +22,6 @@ import java.util.List;
@Mapper
public interface MessageMapper extends BaseMapper<Message> {
/**
* * 分页查询系统消息内容
*
* @param pageParams 系统消息分页参数
* @param dto 系统消息查询表单
* @return 系统消息分页结果
*/
IPage<MessageVo> selectListByPage(@Param("page") Page<Message> pageParams, @Param("dto") MessageDto dto);
/**
* 物理删除系统消息

View File

@ -1,9 +1,15 @@
package cn.bunny.services.mapper;
import cn.bunny.dao.dto.system.message.MessageDto;
import cn.bunny.dao.entity.system.Message;
import cn.bunny.dao.entity.system.MessageReceived;
import cn.bunny.dao.vo.system.message.MessageReceivedWithMessageVo;
import cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -18,12 +24,21 @@ import java.util.List;
@Mapper
public interface MessageReceivedMapper extends BaseMapper<MessageReceived> {
/**
* * 用户消息接收管理分页查询
*
* @param pageParams 系统消息分页参数
* @param dto 系统消息查询表单
* @return 系统消息分页结果
*/
IPage<MessageReceivedWithMessageVo> selectListByMessageReceivedPage(@Param("page") Page<Message> pageParams, @Param("dto") MessageDto dto);
/**
* 根据id批量删除
*
* @param userIds 发送用户ID
* @param ids 消息接受ids
*/
void deleteBatchIdsWithPhysics(List<Long> userIds);
void deleteBatchIdsWithPhysics(List<Long> ids);
/**
* 根据消息Id物理删除
@ -33,7 +48,7 @@ public interface MessageReceivedMapper extends BaseMapper<MessageReceived> {
void deleteBatchIdsByMessageIdsWithPhysics(List<Long> ids);
/**
* 根据发送者id批量删除
* 根据消息id获取接收人信息
*
* @param messageId 消息id
* @return 消息接收人用户名等信息

View File

@ -1,9 +1,14 @@
package cn.bunny.services.service;
import cn.bunny.dao.dto.system.message.MessageAddDto;
import cn.bunny.dao.dto.system.message.MessageDto;
import cn.bunny.dao.dto.system.message.MessageUpdateDto;
import cn.bunny.dao.entity.system.Message;
import cn.bunny.dao.entity.system.MessageReceived;
import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.vo.system.message.MessageReceivedWithMessageVo;
import cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.validation.Valid;
@ -20,11 +25,25 @@ import java.util.List;
public interface MessageReceivedService extends IService<MessageReceived> {
/**
* 根据发送者id批量删除消息接受者
* 管理员管理用户消息接收分页查询
*
* @param sendUserIds 发送用户ID
* @return 系统消息返回列表
*/
void deleteBatchIdsWithPhysics(List<Long> sendUserIds);
PageResult<MessageReceivedWithMessageVo> getMessageReceivedList(Page<Message> pageParams, MessageDto dto);
/**
* 管理员将用户接受消息标为已读
*
* @param ids 用户消息表id
*/
void markMessageReceivedAsRead(List<Long> ids);
/**
* 管理删除用户接受的消息
*
* @param ids 用户消息Id列表
*/
void deleteMessageReceivedByIds(List<Long> ids);
/**
* 根据消息id获取接收人信息
@ -54,4 +73,5 @@ public interface MessageReceivedService extends IService<MessageReceived> {
* @param dto 更新表单
*/
void updateMessage(@Valid MessageUpdateDto dto);
}

View File

@ -1,6 +1,5 @@
package cn.bunny.services.service;
import cn.bunny.dao.dto.system.message.MessageDto;
import cn.bunny.dao.dto.system.message.MessageUserDto;
import cn.bunny.dao.entity.system.Message;
import cn.bunny.dao.pojo.result.PageResult;
@ -21,12 +20,6 @@ import java.util.List;
*/
public interface MessageService extends IService<Message> {
/**
* * 获取系统消息列表
*
* @return 系统消息返回列表
*/
PageResult<MessageVo> getMessageList(Page<Message> pageParams, MessageDto dto);
/**
* * 删除|批量删除系统消息类型

View File

@ -4,16 +4,21 @@ import cn.bunny.common.service.context.BaseContext;
import cn.bunny.common.service.exception.BunnyException;
import cn.bunny.dao.common.entity.BaseEntity;
import cn.bunny.dao.dto.system.message.MessageAddDto;
import cn.bunny.dao.dto.system.message.MessageDto;
import cn.bunny.dao.dto.system.message.MessageUpdateDto;
import cn.bunny.dao.entity.system.Message;
import cn.bunny.dao.entity.system.MessageReceived;
import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.pojo.result.ResultCodeEnum;
import cn.bunny.dao.vo.system.message.MessageReceivedWithMessageVo;
import cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo;
import cn.bunny.services.factory.UserFactory;
import cn.bunny.services.mapper.MessageMapper;
import cn.bunny.services.mapper.MessageReceivedMapper;
import cn.bunny.services.mapper.UserMapper;
import cn.bunny.services.service.MessageReceivedService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.validation.Valid;
import org.springframework.beans.BeanUtils;
@ -40,9 +45,62 @@ public class MessageReceivedServiceImpl extends ServiceImpl<MessageReceivedMappe
@Autowired
private MessageMapper messageMapper;
@Autowired
private UserFactory userFactory;
/**
* 管理员管理用户消息接收分页查询
*
* @param pageParams 系统消息分页查询page对象
* @param dto 系统消息分页查询对象
* @return 查询分页系统消息返回对象
*/
@Override
public PageResult<MessageReceivedWithMessageVo> getMessageReceivedList(Page<Message> pageParams, MessageDto dto) {
// 分页查询消息数据
IPage<MessageReceivedWithMessageVo> page = baseMapper.selectListByMessageReceivedPage(pageParams, dto);
List<MessageReceivedWithMessageVo> voList = page.getRecords().stream().map(messageVo -> {
MessageReceivedWithMessageVo vo = new MessageReceivedWithMessageVo();
BeanUtils.copyProperties(messageVo, vo);
// 设置封面返回内容
String cover = vo.getCover();
cover = userFactory.checkGetUserAvatar(cover);
vo.setCover(cover);
return vo;
}).toList();
return PageResult.<MessageReceivedWithMessageVo>builder().list(voList).pageNo(page.getCurrent())
.pageSize(page.getSize()).total(page.getTotal())
.build();
}
/**
* 管理员将用户接受消息标为已读
*
* @param ids 用户消息表id
*/
@Override
public void markMessageReceivedAsRead(List<Long> ids) {
List<MessageReceived> messageReceivedList = ids.stream().map(id -> {
MessageReceived messageReceived = new MessageReceived();
messageReceived.setId(id);
messageReceived.setStatus(true);
return messageReceived;
}).toList();
updateBatchById(messageReceivedList);
}
/**
* 管理删除用户接受的消息
*
* @param ids 用户消息Id列表
*/
@Override
public void deleteMessageReceivedByIds(List<Long> ids) {
baseMapper.deleteBatchIdsWithPhysics(ids);
}
/**
* 根据消息id获取接收人信息
*
@ -171,13 +229,4 @@ public class MessageReceivedServiceImpl extends ServiceImpl<MessageReceivedMappe
updateBatchById(messageList);
}
/**
* 根据发送者id批量删除消息接受者
*
* @param sendUserIds 发送用户ID
*/
@Override
public void deleteBatchIdsWithPhysics(List<Long> sendUserIds) {
baseMapper.deleteBatchIdsWithPhysics(sendUserIds);
}
}

View File

@ -2,7 +2,6 @@ package cn.bunny.services.service.impl;
import cn.bunny.common.service.context.BaseContext;
import cn.bunny.common.service.exception.BunnyException;
import cn.bunny.dao.dto.system.message.MessageDto;
import cn.bunny.dao.dto.system.message.MessageUserDto;
import cn.bunny.dao.entity.system.Message;
import cn.bunny.dao.entity.system.MessageReceived;
@ -44,32 +43,6 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
@Autowired
private MessageReceivedMapper messageReceivedMapper;
/**
* * 系统消息 服务实现类
*
* @param pageParams 系统消息分页查询page对象
* @param dto 系统消息分页查询对象
* @return 查询分页系统消息返回对象
*/
@Override
public PageResult<MessageVo> getMessageList(Page<Message> pageParams, MessageDto dto) {
// 分页查询消息数据
IPage<MessageVo> page = baseMapper.selectListByPage(pageParams, dto);
List<MessageVo> voList = page.getRecords().stream().map(messageVo -> {
MessageVo vo = new MessageVo();
BeanUtils.copyProperties(messageVo, vo);
// 设置封面返回内容
String cover = vo.getCover();
cover = userFactory.checkGetUserAvatar(cover);
vo.setCover(cover);
return vo;
}).toList();
return PageResult.<MessageVo>builder().list(voList).pageNo(page.getCurrent())
.pageSize(page.getSize()).total(page.getTotal())
.build();
}
/**
* 分页查询用户消息
* 查询用户消息关系表找到当前用户所有的消息

View File

@ -26,69 +26,6 @@
id, create_time, update_time, create_user, update_user, is_deleted, title, send_user_id, message_type, content, cover, summary, editor_type, level,extra
</sql>
<!-- 分页查询系统消息内容 -->
<select id="selectListByPage" resultType="cn.bunny.dao.vo.system.message.MessageVo">
SELECT
message.id,
message.create_time,
message.update_time,
message.create_user,
message.update_user,
message.is_deleted,
message.title,
message.send_user_id,
message.content,
message.cover,
message.summary,
message.editor_type,
message.level,
message.extra,
message_received.status AS status,
message_received.received_user_id AS received_user_id,
message_received.id AS message_received_id,
message_type.message_name AS message_type,
message_type.id AS message_type_id,
received_user.nickname received_user_nickname,
create_user.username AS create_username,
update_user.username AS update_username,
send_user.nickname AS send_nickname
FROM
sys_message message
LEFT JOIN sys_user create_user ON create_user.id = message.create_user
LEFT JOIN sys_user update_user ON update_user.id = message.update_user
LEFT JOIN sys_user send_user ON send_user.id = message.send_user_id
LEFT JOIN sys_message_received message_received ON message_received.message_id = message.id
LEFT JOIN sys_user received_user ON message_received.received_user_id = received_user.id
LEFT JOIN sys_message_type message_type ON message_type.id = message.message_type
<where>
message.is_deleted = 0
<if test="dto.title != null and dto.title != ''">
and message.title like CONCAT('%',#{dto.title},'%')
</if>
<if test="dto.sendNickname != null and dto.sendNickname != ''">
and send_user.nickname like CONCAT('%',#{dto.sendNickname},'%')
</if>
<if test="dto.messageType != null and dto.messageType != ''">
and message_type.message_type like CONCAT('%',#{dto.messageType},'%')
</if>
<if test="dto.content != null and dto.content != ''">
and message.content like CONCAT('%',#{dto.content},'%')
</if>
<if test="dto.editorType != null and dto.editorType != ''">
and message.editor_type = #{dto.editorType}
</if>
<if test="dto.level != null and dto.level != ''">
and message.level = #{dto.level}
</if>
<if test="dto.extra != null and dto.extra != ''">
and message.extra like CONCAT('%',#{dto.extra},'%')
</if>
<if test="dto.status != null">
and message_received.status = #{dto.status}
</if>
</where>
</select>
<!-- 根据消息所有包含匹配当前消息Id的列表 -->
<select id="selectListByPageWithMessageUserDto" resultType="cn.bunny.dao.vo.system.message.MessageVo">
SELECT

View File

@ -14,12 +14,76 @@
id, received_user_id, message_id
</sql>
<!-- 根据发送者id批量删除 -->
<!-- 用户消息接收管理分页查询 -->
<select id="selectListByMessageReceivedPage"
resultType="cn.bunny.dao.vo.system.message.MessageReceivedWithMessageVo">
SELECT
message_received.status AS status,
message_received.received_user_id AS received_user_id,
message_received.id AS id,
message.id as message_id,
message.create_time,
message.update_time,
message.create_user,
message.update_user,
message.is_deleted,
message.title,
message.send_user_id,
message.content,
message.cover,
message.summary,
message.editor_type,
message.level,
message.extra,
message_type.message_name AS message_type,
message_type.id AS message_type_id,
received_user.nickname received_user_nickname,
create_user.username AS create_username,
update_user.username AS update_username,
send_user.nickname AS send_nickname
FROM
sys_message_received message_received
LEFT JOIN sys_user create_user ON create_user.id = message_received.create_user
LEFT JOIN sys_user update_user ON update_user.id = message_received.update_user
LEFT JOIN sys_user received_user ON message_received.received_user_id = received_user.id
LEFT JOIN sys_message message ON message_received.message_id = message.id
LEFT JOIN sys_user send_user ON send_user.id = message.send_user_id
LEFT JOIN sys_message_type message_type ON message_type.id = message.message_type
<where>
message.is_deleted = 0
<if test="dto.title != null and dto.title != ''">
and message.title like CONCAT('%',#{dto.title},'%')
</if>
<if test="dto.sendNickname != null and dto.sendNickname != ''">
and send_user.nickname like CONCAT('%',#{dto.sendNickname},'%')
</if>
<if test="dto.messageType != null and dto.messageType != ''">
and message_type.message_type like CONCAT('%',#{dto.messageType},'%')
</if>
<if test="dto.content != null and dto.content != ''">
and message.content like CONCAT('%',#{dto.content},'%')
</if>
<if test="dto.editorType != null and dto.editorType != ''">
and message.editor_type = #{dto.editorType}
</if>
<if test="dto.level != null and dto.level != ''">
and message.level = #{dto.level}
</if>
<if test="dto.extra != null and dto.extra != ''">
and message.extra like CONCAT('%',#{dto.extra},'%')
</if>
<if test="dto.status != null">
and message_received.status = #{dto.status}
</if>
</where>
</select>
<!-- 根据id批量删除 -->
<delete id="deleteBatchIdsWithPhysics">
delete
from sys_message_received
where id in
<foreach collection="userIds" item="id" open="(" close=")" separator=",">
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
@ -34,7 +98,7 @@
</foreach>
</delete>
<!-- 根据发送者id批量删除消息接受者 -->
<!-- 根据消息id获取接收人信息 -->
<select id="selectUserinfoListByMessageId"
resultType="cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo">
SELECT message_received.message_id,
@ -42,7 +106,7 @@
USER.nickname,
USER.username
FROM sys_message_received message_received
LEFT JOIN sys_user USER ON USER.id = message_received.received_user_id
LEFT JOIN sys_user user ON user.id = message_received.received_user_id
where message_received.message_id = #{messageId}
</select>