diff --git a/common/common-generator/src/main/java/cn/bunny/common/generator/generator/AdminCodeGenerator.java b/common/common-generator/src/main/java/cn/bunny/common/generator/generator/AdminCodeGenerator.java index b03e1d7..88afe38 100644 --- a/common/common-generator/src/main/java/cn/bunny/common/generator/generator/AdminCodeGenerator.java +++ b/common/common-generator/src/main/java/cn/bunny/common/generator/generator/AdminCodeGenerator.java @@ -14,13 +14,13 @@ public class AdminCodeGenerator { // 作者名称 public static final String author = "Bunny"; // 公共路径 - public static final String outputDir = "D:\\MyFolder\\auth-admin\\auth-server-java\\service"; - // public static final String outputDir = "D:\\Project\\web\\PC\\auth\\auth-server-java\\service"; + // public static final String outputDir = "D:\\MyFolder\\auth-admin\\auth-server-java\\service"; + public static final String outputDir = "D:\\Project\\web\\PC\\auth\\auth-server-java\\service"; // 实体类名称 public static final String entity = "Bunny"; public static void main(String[] args) { - Generation("sys_message", "sys_message_type"); + Generation("sys_message_received"); } /** diff --git a/dao/src/main/java/cn/bunny/dao/dto/system/message/MessageAddDto.java b/dao/src/main/java/cn/bunny/dao/dto/system/message/MessageAddDto.java index 5f716d9..e13d73b 100644 --- a/dao/src/main/java/cn/bunny/dao/dto/system/message/MessageAddDto.java +++ b/dao/src/main/java/cn/bunny/dao/dto/system/message/MessageAddDto.java @@ -54,4 +54,12 @@ public class MessageAddDto { @Schema(name = "status", title = "0:未读 1:已读") private Boolean status = false; + + @Schema(name = "level", title = "消息等级") + private String level; + + @Schema(name = "extra", title = "消息等级详情") + private String extra; + + } \ No newline at end of file diff --git a/dao/src/main/java/cn/bunny/dao/dto/system/message/MessageDto.java b/dao/src/main/java/cn/bunny/dao/dto/system/message/MessageDto.java index bb24bf6..a2dd14a 100644 --- a/dao/src/main/java/cn/bunny/dao/dto/system/message/MessageDto.java +++ b/dao/src/main/java/cn/bunny/dao/dto/system/message/MessageDto.java @@ -31,4 +31,10 @@ public class MessageDto { @Schema(name = "status", title = "0:未读 1:已读") private Boolean status; + @Schema(name = "level", title = "消息等级") + private String level; + + @Schema(name = "extra", title = "消息等级详情") + private String extra; + } diff --git a/dao/src/main/java/cn/bunny/dao/dto/system/message/MessageUpdateDto.java b/dao/src/main/java/cn/bunny/dao/dto/system/message/MessageUpdateDto.java index 983ffc0..48a858e 100644 --- a/dao/src/main/java/cn/bunny/dao/dto/system/message/MessageUpdateDto.java +++ b/dao/src/main/java/cn/bunny/dao/dto/system/message/MessageUpdateDto.java @@ -59,5 +59,11 @@ public class MessageUpdateDto { @Schema(name = "status", title = "0:未读 1:已读") private Boolean status; + @Schema(name = "level", title = "消息等级") + private String level; + + @Schema(name = "extra", title = "消息等级详情") + private String extra; + } diff --git a/dao/src/main/java/cn/bunny/dao/entity/system/Message.java b/dao/src/main/java/cn/bunny/dao/entity/system/Message.java index e5f27ed..ad351a4 100644 --- a/dao/src/main/java/cn/bunny/dao/entity/system/Message.java +++ b/dao/src/main/java/cn/bunny/dao/entity/system/Message.java @@ -25,9 +25,6 @@ public class Message extends BaseEntity { @Schema(name = "title", title = "消息标题") private String title; - @Schema(name = "receivedUserIds", title = "接收人用户ID") - private String receivedUserIds; - @Schema(name = "sendUserId", title = "发送人用户ID") private Long sendUserId; @@ -39,7 +36,7 @@ public class Message extends BaseEntity { @Schema(name = "summary", title = "消息简介") private String summary; - + @Schema(name = "content", title = "消息内容") private String content; @@ -49,6 +46,12 @@ public class Message extends BaseEntity { @Schema(name = "status", title = "0:未读 1:已读") private Boolean status; + @Schema(name = "level", title = "消息等级") + private String level; + + @Schema(name = "extra", title = "消息等级详情") + private String extra; + } diff --git a/dao/src/main/java/cn/bunny/dao/entity/system/MessageReceived.java b/dao/src/main/java/cn/bunny/dao/entity/system/MessageReceived.java new file mode 100644 index 0000000..5e4f078 --- /dev/null +++ b/dao/src/main/java/cn/bunny/dao/entity/system/MessageReceived.java @@ -0,0 +1,31 @@ +package cn.bunny.dao.entity.system; + +import cn.bunny.dao.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author Bunny + * @since 2024-10-31 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("sys_message_received") +@Schema(name = "MessageReceived对象", title = "系统消息接受用户", description = "系统消息接受用户") +public class MessageReceived extends BaseEntity { + + @Schema(name = "receivedUserId", title = "接受者id") + private Long receivedUserId; + + @Schema(name = "messageId", title = "消息ID") + private Long messageId; + +} diff --git a/dao/src/main/java/cn/bunny/dao/vo/system/message/MessageUserVo.java b/dao/src/main/java/cn/bunny/dao/vo/system/message/MessageUserVo.java new file mode 100644 index 0000000..8d5d857 --- /dev/null +++ b/dao/src/main/java/cn/bunny/dao/vo/system/message/MessageUserVo.java @@ -0,0 +1,34 @@ +package cn.bunny.dao.vo.system.message; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Schema(name = "MessageVo对象", title = "系统消息返回内容", description = "系统消息返回内容") +public class MessageUserVo { + + @Schema(name = "title", title = "消息标题") + private String title; + + @Schema(name = "messageType", title = "sys:系统消息,user用户消息") + private String messageType; + + @Schema(name = "cover", title = "封面") + private String cover; + + @Schema(name = "summary", title = "消息简介") + private String summary; + + @Schema(name = "level", title = "消息等级") + private String level; + + @Schema(name = "extra", title = "消息等级详情") + private String extra; + +} diff --git a/dao/src/main/java/cn/bunny/dao/vo/system/message/MessageVo.java b/dao/src/main/java/cn/bunny/dao/vo/system/message/MessageVo.java index 071cbce..ab60851 100644 --- a/dao/src/main/java/cn/bunny/dao/vo/system/message/MessageVo.java +++ b/dao/src/main/java/cn/bunny/dao/vo/system/message/MessageVo.java @@ -7,6 +7,8 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; +import java.util.List; + @EqualsAndHashCode(callSuper = true) @Data @AllArgsConstructor @@ -27,7 +29,7 @@ public class MessageVo extends BaseUserVo { private String sendNickname; @Schema(name = "receivedUserIds", title = "接收人用户ID") - private String receivedUserIds; + private List receivedUserIds; @Schema(name = "messageType", title = "sys:系统消息,user用户消息") private String messageType; @@ -47,4 +49,10 @@ public class MessageVo extends BaseUserVo { @Schema(name = "status", title = "0:未读 1:已读") private Boolean status; + @Schema(name = "level", title = "消息等级") + private String level; + + @Schema(name = "extra", title = "消息等级详情") + private String extra; + } \ No newline at end of file diff --git a/service/src/main/java/cn/bunny/services/controller/MessageController.java b/service/src/main/java/cn/bunny/services/controller/MessageController.java index 9f6cbae..da14c4b 100644 --- a/service/src/main/java/cn/bunny/services/controller/MessageController.java +++ b/service/src/main/java/cn/bunny/services/controller/MessageController.java @@ -7,6 +7,7 @@ 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.MessageUserVo; import cn.bunny.dao.vo.system.message.MessageVo; import cn.bunny.services.service.MessageService; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -36,7 +37,7 @@ public class MessageController { @Autowired private MessageService messageService; - @Operation(summary = "分页查询系统消息", description = "分页查询系统消息") + @Operation(summary = "分页查询消息", description = "分页查询消息") @GetMapping("getMessageList/{page}/{limit}") public Mono>> getMessageList( @Parameter(name = "page", description = "当前页", required = true) @@ -49,6 +50,18 @@ public class MessageController { return Mono.just(Result.success(pageResult)); } + @Operation(summary = "分页查询用户消息", description = "分页查询用户消息") + @GetMapping("getUserMessageList/{page}/{limit}") + public Mono>> getUserMessageList( + @Parameter(name = "page", description = "当前页", required = true) + @PathVariable("page") Integer page, + @Parameter(name = "limit", description = "每页记录数", required = true) + @PathVariable("limit") Integer limit) { + Page pageParams = new Page<>(page, limit); + PageResult pageResult = messageService.getUserMessageList(pageParams); + return Mono.just(Result.success(pageResult)); + } + @Operation(summary = "添加系统消息", description = "添加系统消息") @PostMapping("addMessage") public Mono> addMessage(@Valid @RequestBody MessageAddDto dto) { diff --git a/service/src/main/java/cn/bunny/services/controller/MessageReceivedController.java b/service/src/main/java/cn/bunny/services/controller/MessageReceivedController.java new file mode 100644 index 0000000..a7c93fd --- /dev/null +++ b/service/src/main/java/cn/bunny/services/controller/MessageReceivedController.java @@ -0,0 +1,18 @@ +package cn.bunny.services.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author Bunny + * @since 2024-10-31 + */ +@RestController +@RequestMapping("/messageReceived") +public class MessageReceivedController { + +} diff --git a/service/src/main/java/cn/bunny/services/mapper/MessageMapper.java b/service/src/main/java/cn/bunny/services/mapper/MessageMapper.java index 5f88d66..426204a 100644 --- a/service/src/main/java/cn/bunny/services/mapper/MessageMapper.java +++ b/service/src/main/java/cn/bunny/services/mapper/MessageMapper.java @@ -2,6 +2,7 @@ package cn.bunny.services.mapper; import cn.bunny.dao.dto.system.message.MessageDto; import cn.bunny.dao.entity.system.Message; +import cn.bunny.dao.vo.system.message.MessageUserVo; import cn.bunny.dao.vo.system.message.MessageVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -37,4 +38,12 @@ public interface MessageMapper extends BaseMapper { * @param ids 删除 id 列表 */ void deleteBatchIdsWithPhysics(List ids); + + /** + * 分页查询用户消息 + * + * @param pageParams 系统消息返回列表 + * @return 分页结果 + */ + IPage selectUserMessageList(@Param("page") Page pageParams, Long userId); } diff --git a/service/src/main/java/cn/bunny/services/mapper/MessageReceivedMapper.java b/service/src/main/java/cn/bunny/services/mapper/MessageReceivedMapper.java new file mode 100644 index 0000000..c6f9b78 --- /dev/null +++ b/service/src/main/java/cn/bunny/services/mapper/MessageReceivedMapper.java @@ -0,0 +1,33 @@ +package cn.bunny.services.mapper; + +import cn.bunny.dao.entity.system.MessageReceived; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author Bunny + * @since 2024-10-31 + */ +@Mapper +public interface MessageReceivedMapper extends BaseMapper { + + /** + * 根据发送者id批量删除消息接受者 + * + * @param userIds 发送用户ID + */ + void deleteBatchIdsWithPhysics(List userIds); + + /** + * 根据消息Id物理删除接受者消息 + * + * @param ids 消息id + */ + void deleteBatchIdsByMessageIdsWithPhysics(List ids); +} diff --git a/service/src/main/java/cn/bunny/services/service/MessageReceivedService.java b/service/src/main/java/cn/bunny/services/service/MessageReceivedService.java new file mode 100644 index 0000000..5ee9f3e --- /dev/null +++ b/service/src/main/java/cn/bunny/services/service/MessageReceivedService.java @@ -0,0 +1,24 @@ +package cn.bunny.services.service; + +import cn.bunny.dao.entity.system.MessageReceived; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author Bunny + * @since 2024-10-31 + */ +public interface MessageReceivedService extends IService { + + /** + * 根据发送者id批量删除消息接受者 + * + * @param sendUserIds 发送用户ID + */ + void deleteBatchIdsWithPhysics(List sendUserIds); +} diff --git a/service/src/main/java/cn/bunny/services/service/MessageService.java b/service/src/main/java/cn/bunny/services/service/MessageService.java index dfed33f..9cd4751 100644 --- a/service/src/main/java/cn/bunny/services/service/MessageService.java +++ b/service/src/main/java/cn/bunny/services/service/MessageService.java @@ -5,6 +5,7 @@ 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.vo.system.message.MessageUserVo; import cn.bunny.dao.vo.system.message.MessageVo; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -49,4 +50,12 @@ public interface MessageService extends IService { * @param ids 删除id列表 */ void deleteMessage(List ids); + + /** + * 分页查询用户消息 + * + * @param pageParams 系统消息返回列表 + * @return 分页结果 + */ + PageResult getUserMessageList(Page pageParams); } diff --git a/service/src/main/java/cn/bunny/services/service/impl/MessageReceivedServiceImpl.java b/service/src/main/java/cn/bunny/services/service/impl/MessageReceivedServiceImpl.java new file mode 100644 index 0000000..d33c225 --- /dev/null +++ b/service/src/main/java/cn/bunny/services/service/impl/MessageReceivedServiceImpl.java @@ -0,0 +1,31 @@ +package cn.bunny.services.service.impl; + +import cn.bunny.dao.entity.system.MessageReceived; +import cn.bunny.services.mapper.MessageReceivedMapper; +import cn.bunny.services.service.MessageReceivedService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author Bunny + * @since 2024-10-31 + */ +@Service +public class MessageReceivedServiceImpl extends ServiceImpl implements MessageReceivedService { + + /** + * 根据发送者id批量删除消息接受者 + * + * @param sendUserIds 发送用户ID + */ + @Override + public void deleteBatchIdsWithPhysics(List sendUserIds) { + baseMapper.deleteBatchIdsWithPhysics(sendUserIds); + } +} diff --git a/service/src/main/java/cn/bunny/services/service/impl/MessageServiceImpl.java b/service/src/main/java/cn/bunny/services/service/impl/MessageServiceImpl.java index 1bd699e..edc2451 100644 --- a/service/src/main/java/cn/bunny/services/service/impl/MessageServiceImpl.java +++ b/service/src/main/java/cn/bunny/services/service/impl/MessageServiceImpl.java @@ -6,20 +6,25 @@ 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.MessageUserVo; import cn.bunny.dao.vo.system.message.MessageVo; 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 cn.bunny.services.service.MessageService; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.validation.Valid; -import jodd.util.StringUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -32,6 +37,7 @@ import java.util.List; * @since 2024-10-30 15:19:56 */ @Service +@Transactional public class MessageServiceImpl extends ServiceImpl implements MessageService { @Autowired @@ -40,6 +46,12 @@ public class MessageServiceImpl extends ServiceImpl impl @Autowired private UserFactory userFactory; + @Autowired + private MessageReceivedService messageReceivedService; + + @Autowired + private MessageReceivedMapper messageReceivedMapper; + /** * * 系统消息 服务实现类 * @@ -80,20 +92,28 @@ public class MessageServiceImpl extends ServiceImpl impl Long sendUserId = dto.getSendUserId(); if (sendUserId == null) dto.setSendUserId(BaseContext.getUserId()); + // 接受人id列表 + List receivedUserIds = dto.getReceivedUserIds(); + // 如果接收人为空默认接收全部人 - if (dto.getReceivedUserIds().isEmpty()) { + if (receivedUserIds.isEmpty()) { List userIds = userMapper.selectList(null).stream().map(BaseEntity::getId).toList(); dto.setReceivedUserIds(userIds); } - // 保存数据 + // 保存消息数据 Message message = new Message(); BeanUtils.copyProperties(dto, message); - - // 将发送用户逗号分隔 - String receivedUserIds = StringUtil.join(dto.getReceivedUserIds(), ","); - message.setReceivedUserIds(receivedUserIds); save(message); + + // 保存消息和用户之间关联数据 + List receivedList = receivedUserIds.stream().map(id -> { + MessageReceived messageReceived = new MessageReceived(); + messageReceived.setMessageId(dto.getSendUserId()); + messageReceived.setReceivedUserId(id); + return messageReceived; + }).toList(); + messageReceivedService.saveBatch(receivedList); } /** @@ -103,14 +123,37 @@ public class MessageServiceImpl extends ServiceImpl impl */ @Override public void updateMessage(@Valid MessageUpdateDto dto) { + // 如果发送人为空设置当前登录的人的ID + Long sendUserId = dto.getSendUserId(); + if (sendUserId == null) dto.setSendUserId(BaseContext.getUserId()); + + // 接受人id列表 + List receivedUserIds = dto.getReceivedUserIds(); + + // 如果接收人为空默认接收全部人 + if (receivedUserIds.isEmpty()) { + List userIds = userMapper.selectList(null).stream().map(BaseEntity::getId).toList(); + dto.setReceivedUserIds(userIds); + } + // 更新内容 Message message = new Message(); BeanUtils.copyProperties(dto, message); - - // 将发送用户逗号分隔 - String receivedUserIds = StringUtil.join(dto.getReceivedUserIds(), ","); - message.setReceivedUserIds(receivedUserIds); updateById(message); + + // 删除这个消息接受下所有发送者 + if (sendUserId != null) { + messageReceivedMapper.deleteBatchIdsWithPhysics(List.of(sendUserId)); + } + + // 保存消息和用户之间关联数据 + List receivedList = receivedUserIds.stream().map(id -> { + MessageReceived messageReceived = new MessageReceived(); + messageReceived.setMessageId(dto.getSendUserId()); + messageReceived.setReceivedUserId(id); + return messageReceived; + }).toList(); + messageReceivedService.saveBatch(receivedList); } /** @@ -121,5 +164,40 @@ public class MessageServiceImpl extends ServiceImpl impl @Override public void deleteMessage(List ids) { baseMapper.deleteBatchIdsWithPhysics(ids); + + // 根据消息Id物理删除接受者消息 + messageReceivedMapper.deleteBatchIdsByMessageIdsWithPhysics(ids); + } + + /** + * 分页查询用户消息 + * + * @param pageParams 系统消息返回列表 + * @return 分页结果 + */ + @Override + public PageResult getUserMessageList(Page pageParams) { + // 查询当前用户接收的消息的接收者关系表 + List messageReceivedList = messageReceivedMapper.selectList(Wrappers.lambdaQuery().eq(MessageReceived::getReceivedUserId, BaseContext.getUserId())); + List messageIds = messageReceivedList.stream().map(MessageReceived::getMessageId).toList(); + + // 根据消息所有包含匹配当前消息Id的列表 + Page page = page(pageParams, Wrappers.lambdaQuery().in(Message::getId, messageIds)); + List voList = page.getRecords().stream().map(messageVo -> { + MessageUserVo vo = new MessageUserVo(); + BeanUtils.copyProperties(messageVo, vo); + + // 设置封面返回内容 + String cover = vo.getCover(); + cover = userFactory.checkGetUserAvatar(cover); + vo.setCover(cover); + return vo; + }).toList(); + return PageResult.builder() + .list(voList) + .pageNo(page.getCurrent()) + .pageSize(page.getSize()) + .total(page.getTotal()) + .build(); } } diff --git a/service/src/main/resources/mapper/MessageMapper.xml b/service/src/main/resources/mapper/MessageMapper.xml index 5b84af0..a21eeec 100644 --- a/service/src/main/resources/mapper/MessageMapper.xml +++ b/service/src/main/resources/mapper/MessageMapper.xml @@ -19,11 +19,13 @@ + + - id, create_time, update_time, create_user, update_user, is_deleted, title, received_user_ids, send_user_id, send_nick_name, message_type, content, editor_type, status + id, create_time, update_time, create_user, update_user, is_deleted, title, received_user_ids, send_user_id, send_nick_name, message_type, content, editor_type, status, level, extra @@ -32,11 +34,13 @@ message.*, create_user.username as create_username, update_user.username as update_username, - send_user.nickname as send_nickname + send_user.nickname as send_nickname, + message_recived.received_user_id as message_recivedids 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_recived message_recived on message_recived.message_id = message.id message.is_deleted = 0 @@ -54,12 +58,27 @@ and message.editor_type = #{dto.editorType} + + and message.editor_type = #{dto.editorType} + + + and message.level = #{dto.level} + + + and message.extra = #{dto.extra} + and message.status = #{dto.status} + + + + delete diff --git a/service/src/main/resources/mapper/MessageReceivedMapper.xml b/service/src/main/resources/mapper/MessageReceivedMapper.xml new file mode 100644 index 0000000..fc668c0 --- /dev/null +++ b/service/src/main/resources/mapper/MessageReceivedMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + id, received_user_id, message_id + + + + + delete + from sys_message_recived + where received_user_id in + + #{id} + + + + + + delete + from sys_message_recived + where message_id in + + #{id} + + + +