From 7477a16a47418dec9a04848096be91a3920878e9 Mon Sep 17 00:00:00 2001 From: Mzaxd Date: Wed, 24 May 2023 14:50:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E7=AB=99=E5=86=85=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/adc/da/report/TestMessage.java | 46 ++++++++ .../da/report/constant/MessageConstants.java | 23 ++++ .../da/report/constant/MessageTypeEnum.java | 40 +++++++ .../report/controller/MessageController.java | 49 ++++++++ .../adc/da/report/dao/mysql/MessageDao.java | 30 +++++ .../da/report/dao/mysql/UserMessageDao.java | 18 +++ .../com/adc/da/report/eo/MessageEntity.java | 70 ++++++++++++ .../adc/da/report/eo/UserMessageEntity.java | 56 +++++++++ .../da/report/service/IMessageService.java | 36 ++++++ .../report/service/IUserMessageService.java | 13 +++ .../service/impl/IMessageServiceImpl.java | 108 ++++++++++++++++++ .../service/impl/IUserMessageServiceImpl.java | 22 ++++ .../com/adc/da/report/vo/MessageQueryVo.java | 41 +++++++ .../java/com/adc/da/report/vo/MessageVo.java | 79 +++++++++++++ .../mybatis/mapper/mysql/MessageDao.xml | 48 ++++++++ 15 files changed, 679 insertions(+) create mode 100644 adc-da-main/src/test/java/com/adc/da/report/TestMessage.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/constant/MessageConstants.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/constant/MessageTypeEnum.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/controller/MessageController.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/dao/mysql/MessageDao.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/dao/mysql/UserMessageDao.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/eo/MessageEntity.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/eo/UserMessageEntity.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/service/IMessageService.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/service/IUserMessageService.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/service/impl/IMessageServiceImpl.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/service/impl/IUserMessageServiceImpl.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/vo/MessageQueryVo.java create mode 100644 adc-da-report/src/main/java/com/adc/da/report/vo/MessageVo.java create mode 100644 adc-da-report/src/main/resources/mybatis/mapper/mysql/MessageDao.xml diff --git a/adc-da-main/src/test/java/com/adc/da/report/TestMessage.java b/adc-da-main/src/test/java/com/adc/da/report/TestMessage.java new file mode 100644 index 0000000..7a79029 --- /dev/null +++ b/adc-da-main/src/test/java/com/adc/da/report/TestMessage.java @@ -0,0 +1,46 @@ +package com.adc.da.report; + +import com.adc.da.report.constant.MessageTypeEnum; +import com.adc.da.report.eo.MessageEntity; +import com.adc.da.report.service.IMessageService; +import com.adc.da.util.utils.UUID; +import io.github.swagger2markup.GroupBy; +import io.github.swagger2markup.Language; +import io.github.swagger2markup.Swagger2MarkupConfig; +import io.github.swagger2markup.Swagger2MarkupConverter; +import io.github.swagger2markup.builder.Swagger2MarkupConfigBuilder; +import io.github.swagger2markup.markup.builder.MarkupLanguage; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; +import java.net.URL; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) +public class TestMessage { + + @Resource + private IMessageService messageService; + + @Test + public void testMessagePublish() { + MessageEntity messageEntity = new MessageEntity(); + messageEntity.setMessageTitle("测试批量发送标题") + .setMessageType(MessageTypeEnum.SYSTEM_MESSAGE.getValue()) + .setId(UUID.randomUUID10()) + .setContent("测试测试最后一次") + .setDelFlag(0) + .setCreateUser("ZGGJP3N7FT") + .setCreateDate(new Date()); + List userIds = new ArrayList<>(); + userIds.add("ZGGJP3N7FT"); + messageService.publishMessage(messageEntity, false, userIds); + } +} \ No newline at end of file diff --git a/adc-da-report/src/main/java/com/adc/da/report/constant/MessageConstants.java b/adc-da-report/src/main/java/com/adc/da/report/constant/MessageConstants.java new file mode 100644 index 0000000..7902caf --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/constant/MessageConstants.java @@ -0,0 +1,23 @@ +package com.adc.da.report.constant; + +import io.swagger.models.auth.In; + +/** + * @author: CaiHaohan + * @Date: 2023/5/23 15:17 + * @Description: + */ +public class MessageConstants { + + /** + * 消息状态 未读 + */ + public static final Integer UNREAD = 0; + + + /** + * 消息状态 已读 + */ + public static final Integer READ = 1; + +} diff --git a/adc-da-report/src/main/java/com/adc/da/report/constant/MessageTypeEnum.java b/adc-da-report/src/main/java/com/adc/da/report/constant/MessageTypeEnum.java new file mode 100644 index 0000000..b8cda0e --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/constant/MessageTypeEnum.java @@ -0,0 +1,40 @@ +package com.adc.da.report.constant; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * @author: CaiHaohan + * @Date: 2023/5/24 10:44 + * @Description: + */ +public enum MessageTypeEnum { + + /** + * 系统消息 + */ + SYSTEM_MESSAGE(0, "系统消息"); + + /** + * 对应值 + */ + private Integer code; + + /** + * 描述 + */ + private String desc; + + MessageTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getValue() { + return code; + } + + public String getDesc() { + return desc; + } +} diff --git a/adc-da-report/src/main/java/com/adc/da/report/controller/MessageController.java b/adc-da-report/src/main/java/com/adc/da/report/controller/MessageController.java new file mode 100644 index 0000000..79c80a7 --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/controller/MessageController.java @@ -0,0 +1,49 @@ +package com.adc.da.report.controller; + +import com.adc.da.report.service.IMessageService; +import com.adc.da.report.vo.MessageQueryVo; +import com.adc.da.report.vo.MessageVo; +import com.adc.da.util.http.ResponseMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +/** + * @Author caihaohan + * @Date 2021/11/9 13:46 + */ +@Slf4j +@Api(tags = "站内信") +@RestController +@RequestMapping("/${restPath}/message") +public class MessageController { + + + @Resource + private IMessageService messageEntityService; + + /** + * 站内信消息列表 + * @return + */ + @ApiOperation("站内信消息列表") + @GetMapping("/list") + public ResponseMessage list(@Valid MessageQueryVo messageQueryVo) { + return messageEntityService.listByCurrentUser(messageQueryVo); + } + + /** + * 全部已读 + * @return + */ + @ApiOperation("全部已读接口") + @GetMapping("/allRead") + public ResponseMessage allRead() { + return messageEntityService.allRead(); + } + +} diff --git a/adc-da-report/src/main/java/com/adc/da/report/dao/mysql/MessageDao.java b/adc-da-report/src/main/java/com/adc/da/report/dao/mysql/MessageDao.java new file mode 100644 index 0000000..c0ad01a --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/dao/mysql/MessageDao.java @@ -0,0 +1,30 @@ +package com.adc.da.report.dao.mysql; + +import com.adc.da.report.eo.MessageEntity; +import com.adc.da.report.vo.MessageQueryVo; +import com.adc.da.report.vo.MessageVo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Param; + +/** +* @author ThinkBook +* @description 针对表【ts_message】的数据库操作Mapper +* @createDate 2023-05-23 11:22:15 +* @Entity com.adc.da.report.eo.MessageEntityEntity +*/ +public interface MessageDao extends BaseMapper { + + /** + * 根据当前用户展示站内信列表 + * @param page + * @param messageVo + * @param userId + * @return + */ + IPage listByUser(IPage page, @Param("vo") MessageQueryVo messageVo, @Param("userId") String userId); +} + + + + diff --git a/adc-da-report/src/main/java/com/adc/da/report/dao/mysql/UserMessageDao.java b/adc-da-report/src/main/java/com/adc/da/report/dao/mysql/UserMessageDao.java new file mode 100644 index 0000000..fc37a79 --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/dao/mysql/UserMessageDao.java @@ -0,0 +1,18 @@ +package com.adc.da.report.dao.mysql; + +import com.adc.da.report.eo.UserMessageEntity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author ThinkBook +* @description 针对表【ts_user_message】的数据库操作Mapper +* @createDate 2023-05-23 11:30:04 +* @Entity com.adc.da.report.eo.UserMessage +*/ +public interface UserMessageDao extends BaseMapper { + +} + + + + diff --git a/adc-da-report/src/main/java/com/adc/da/report/eo/MessageEntity.java b/adc-da-report/src/main/java/com/adc/da/report/eo/MessageEntity.java new file mode 100644 index 0000000..cce9217 --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/eo/MessageEntity.java @@ -0,0 +1,70 @@ +package com.adc.da.report.eo; + +import com.adc.da.report.constant.MessageTypeEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * + * @author Caihaohan + * @TableName ts_message + */ +@TableName(value ="ts_message") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class MessageEntity implements Serializable { + /** + * 主键id + */ + @TableId(value = "id") + private String id; + + /** + * 标题 + */ + @TableField(value = "message_title") + private String messageTitle; + + /** + * 内容 + */ + @TableField(value = "content") + private String content; + + /** + * 消息类型 + */ + @TableField(value = "message_type") + private Integer messageType; + + /** + * 发布人 + */ + @TableField(value = "createUser") + private String createUser; + + /** + * 发布时间 + */ + @TableField(value = "createDate") + private Date createDate; + + /** + * 删除标记(0未删除 1已删除) + */ + @TableField(value = "del_flag") + private Integer delFlag; + + @TableField(exist = false) + private static final long serialVersionUID = 1314298673425876932L; +} \ No newline at end of file diff --git a/adc-da-report/src/main/java/com/adc/da/report/eo/UserMessageEntity.java b/adc-da-report/src/main/java/com/adc/da/report/eo/UserMessageEntity.java new file mode 100644 index 0000000..76131e3 --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/eo/UserMessageEntity.java @@ -0,0 +1,56 @@ +package com.adc.da.report.eo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * + * @author ThinkBook + * @TableName ts_user_message + */ +@TableName(value ="ts_user_message") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class UserMessageEntity implements Serializable { + /** + * 主键id + */ + @TableId(value = "id") + private String id; + + /** + * 用户id + */ + @TableField(value = "user_id") + private String userId; + + /** + * 站内信id + */ + @TableField(value = "message_id") + private String messageId; + + /** + * 阅读状态(0代表未读,1代表已读) + */ + @TableField(value = "read_type") + private Integer readType; + + /** + * 删除标记(0未删除 1已删除) + */ + @TableField(value = "del_flag") + private Integer delFlag; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/adc-da-report/src/main/java/com/adc/da/report/service/IMessageService.java b/adc-da-report/src/main/java/com/adc/da/report/service/IMessageService.java new file mode 100644 index 0000000..fe1016c --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/service/IMessageService.java @@ -0,0 +1,36 @@ +package com.adc.da.report.service; + +import com.adc.da.report.eo.MessageEntity; +import com.adc.da.report.vo.MessageQueryVo; +import com.adc.da.util.http.ResponseMessage; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** +* @author ThinkBook +* @description 针对表【ts_message】的数据库操作Service +* @createDate 2023-05-23 11:22:15 +*/ +public interface IMessageService extends IService { + + /** + * 返回当前用户的消息列表 + * @return + */ + ResponseMessage listByCurrentUser(MessageQueryVo messageVo); + + /** + * 全部已读接口 + * @return + */ + ResponseMessage allRead(); + + /** + * 发布站内信(当用户数过多的时候谨慎使用发送给全部用户) + * @param message + * @param toAllUser + * @param userIds + */ + void publishMessage(MessageEntity message, boolean toAllUser, List userIds); +} diff --git a/adc-da-report/src/main/java/com/adc/da/report/service/IUserMessageService.java b/adc-da-report/src/main/java/com/adc/da/report/service/IUserMessageService.java new file mode 100644 index 0000000..53500ef --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/service/IUserMessageService.java @@ -0,0 +1,13 @@ +package com.adc.da.report.service; + +import com.adc.da.report.eo.UserMessageEntity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author ThinkBook +* @description 针对表【ts_user_message】的数据库操作Service +* @createDate 2023-05-23 11:30:04 +*/ +public interface IUserMessageService extends IService { + +} diff --git a/adc-da-report/src/main/java/com/adc/da/report/service/impl/IMessageServiceImpl.java b/adc-da-report/src/main/java/com/adc/da/report/service/impl/IMessageServiceImpl.java new file mode 100644 index 0000000..a8987b9 --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/service/impl/IMessageServiceImpl.java @@ -0,0 +1,108 @@ +package com.adc.da.report.service.impl; + +import com.adc.da.login.util.UserUtils; +import com.adc.da.report.constant.MessageConstants; +import com.adc.da.report.constant.MessageTypeEnum; +import com.adc.da.report.constant.ReportConstants; +import com.adc.da.report.dao.mysql.UserMessageDao; +import com.adc.da.report.eo.UserMessageEntity; +import com.adc.da.report.service.IUserMessageService; +import com.adc.da.report.vo.MessageQueryVo; +import com.adc.da.report.vo.MessageVo; +import com.adc.da.sys.dao.mysql.UserEODao; +import com.adc.da.sys.entity.UserEO; +import com.adc.da.sys.service.iservice.IUserEoService; +import com.adc.da.util.exception.AdcDaBaseException; +import com.adc.da.util.http.ResponseMessage; +import com.adc.da.util.http.Result; +import com.adc.da.util.utils.UUID; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.adc.da.report.eo.MessageEntity; +import com.adc.da.report.service.IMessageService; +import com.adc.da.report.dao.mysql.MessageDao; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** +* @author ThinkBook +* @description 针对表【ts_message】的数据库操作Service实现 +* @createDate 2023-05-23 11:22:15 +*/ +@Service +public class IMessageServiceImpl extends ServiceImpl + implements IMessageService { + + @Resource + private MessageDao messageDao; + + @Resource + private IUserMessageService userMessageService; + + @Resource + private UserEODao userEODao; + + @Override + public ResponseMessage listByCurrentUser(MessageQueryVo messageVo) { + IPage page = new Page<>(); + page.setCurrent(messageVo.getPageNo()); + page.setSize(messageVo.getPageSize()); + IPage list = messageDao.listByUser(page, messageVo, UserUtils.getUserId()); + return Result.success(list); + } + + @Override + public ResponseMessage allRead() { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(UserMessageEntity::getReadType, MessageConstants.UNREAD); + wrapper.eq(UserMessageEntity::getUserId, UserUtils.getUserId()); + wrapper.set(UserMessageEntity::getReadType, MessageConstants.READ); + userMessageService.update(wrapper); + return Result.success("全部已读"); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void publishMessage(MessageEntity message, boolean toAllUser, List userIds) { + List userEoIds = new ArrayList<>(); + if (toAllUser) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(UserEO::getDelFlag, 0); + List userEOS = userEODao.selectList(lambdaQueryWrapper); + if (userEOS != null) { + userEoIds = userEOS.stream().map(UserEO::getUsid).collect(Collectors.toList()); + } + } else { + userEoIds = userIds; + if (userEoIds.isEmpty()) { + throw new AdcDaBaseException("无指定发送的用户,无法发送站内信"); + } + } + //保存消息信息 + save(message); + List userMessageEntities = new ArrayList<>(); + userEoIds.forEach(userId -> { + UserMessageEntity userMessageEntity = new UserMessageEntity(); + userMessageEntity.setId(UUID.randomUUID10()) + .setUserId(userId) + .setMessageId(message.getId()) + .setReadType(MessageConstants.UNREAD) + .setDelFlag(0); + userMessageEntities.add(userMessageEntity); + }); + userMessageService.saveBatch(userMessageEntities); + } +} + + + + diff --git a/adc-da-report/src/main/java/com/adc/da/report/service/impl/IUserMessageServiceImpl.java b/adc-da-report/src/main/java/com/adc/da/report/service/impl/IUserMessageServiceImpl.java new file mode 100644 index 0000000..1d02f07 --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/service/impl/IUserMessageServiceImpl.java @@ -0,0 +1,22 @@ +package com.adc.da.report.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.adc.da.report.eo.UserMessageEntity; +import com.adc.da.report.service.IUserMessageService; +import com.adc.da.report.dao.mysql.UserMessageDao; +import org.springframework.stereotype.Service; + +/** +* @author ThinkBook +* @description 针对表【ts_user_message】的数据库操作Service实现 +* @createDate 2023-05-23 11:30:04 +*/ +@Service +public class IUserMessageServiceImpl extends ServiceImpl + implements IUserMessageService { + +} + + + + diff --git a/adc-da-report/src/main/java/com/adc/da/report/vo/MessageQueryVo.java b/adc-da-report/src/main/java/com/adc/da/report/vo/MessageQueryVo.java new file mode 100644 index 0000000..29052a0 --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/vo/MessageQueryVo.java @@ -0,0 +1,41 @@ +package com.adc.da.report.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +/** + * @author: CaiHaohan + * @Date: 2023/5/23 14:14 + * @Description: + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MessageQueryVo { + + /** + * 标题 + */ + private String messageTitle; + + /** + * 发布人姓名 + */ + private String createUserName; + + /** + * 页数 + */ + @Min(1) + private int pageNo; + + /** + * 每页数量 + */ + @NotNull + private int pageSize; +} diff --git a/adc-da-report/src/main/java/com/adc/da/report/vo/MessageVo.java b/adc-da-report/src/main/java/com/adc/da/report/vo/MessageVo.java new file mode 100644 index 0000000..0f0b3d8 --- /dev/null +++ b/adc-da-report/src/main/java/com/adc/da/report/vo/MessageVo.java @@ -0,0 +1,79 @@ +package com.adc.da.report.vo; + +import com.adc.da.report.constant.MessageTypeEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * @author: CaiHaohan + * @Date: 2023/5/23 11:54 + * @Description: + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class MessageVo { + + /** + * 关系表的id + */ + private String id; + + /** + * 标题 + */ + private String messageTitle; + + /** + * 内容 + */ + private String content; + + /** + * 消息类型 + */ + private Integer messageType; + + /** + * 消息类型 + */ + private String messageTypeDesc; + + /** + * 发布时间 + */ + private Date createDate; + + /** + * 创建用户id + */ + private String createUser; + + /** + * 消息id + */ + private String messageId; + + /** + * 阅读状态(0未读 1已读) + */ + private Integer readType; + + public void setMessageType(Integer messageType) { + this.messageType = messageType; + switch (messageType) { + case 0: + this.messageTypeDesc = MessageTypeEnum.SYSTEM_MESSAGE.getDesc(); + break; + default: + this.messageTypeDesc = "未知"; + } + } +} diff --git a/adc-da-report/src/main/resources/mybatis/mapper/mysql/MessageDao.xml b/adc-da-report/src/main/resources/mybatis/mapper/mysql/MessageDao.xml new file mode 100644 index 0000000..abe682f --- /dev/null +++ b/adc-da-report/src/main/resources/mybatis/mapper/mysql/MessageDao.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + id,content,message_type, + createDate,del_flag + + +