Просмотр исходного кода

增加用户消息中心接口

yzc 2 лет назад
Родитель
Сommit
8fe6d91457

+ 6 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/vo/TableStatisticRes.java

@@ -5,6 +5,8 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -16,7 +18,10 @@ import java.util.List;
 @Setter
 @ToString
 @Accessors(chain = true)
-public class TableStatisticRes {
+public class TableStatisticRes implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1699225803039367149L;
 
     /**
      * 表格顶部对象

+ 7 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/vo/TableTop.java

@@ -5,6 +5,9 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.io.Serial;
+import java.io.Serializable;
+
 /**
  * @desc: 表格顶部对象
  * @author: yzc
@@ -14,7 +17,10 @@ import lombok.experimental.Accessors;
 @Setter
 @ToString
 @Accessors(chain = true)
-public class TableTop {
+public class TableTop implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -2419518869931408146L;
 
     /**
      * tab名称

+ 10 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/controller/MessageController.java

@@ -96,4 +96,14 @@ public class MessageController {
         return HttpResult.ok("删除消息成功");
     }
 
+    /**
+     * @desc: 用户消息中心
+     * @author: yzc
+     * @date: 2023-09-07 14:57
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @GetMapping("/userMsgCenter")
+    public HttpResult userMsgCenter() {
+        return HttpResult.ok("获取用户消息中心成功", messageService.userMsgCenter());
+    }
 }

+ 20 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/dao/KwmMessageUserMapper.java

@@ -2,6 +2,9 @@ package com.sckw.message.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.message.model.KwmMessageUser;
+import com.sckw.message.model.dto.UserMsgCenterLatestMsgDTO;
+import com.sckw.message.model.dto.UserMsgCenterReqDTO;
+import com.sckw.message.model.vo.res.UserMsgCenterResVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -24,4 +27,21 @@ public interface KwmMessageUserMapper extends BaseMapper<KwmMessageUser> {
      */
     void insertBatch(@Param(value = "list") List<KwmMessageUser> list);
 
+    /**
+     * @desc: 根据用户或企业,状态升序,type分组统计消息数量,查找前五条
+     * @author: yzc
+     * @date: 2023-09-07 15:38
+     * @Param item:
+     * @return: java.util.List<com.sckw.message.model.vo.res.UserMsgCenterResVO>
+     */
+    List<UserMsgCenterResVO> userMsgCenter(@Param(value = "item") UserMsgCenterReqDTO item);
+
+    /**
+     * @desc: 获取用户最新消息
+     * @author: yzc
+     * @date: 2023-09-07 17:43
+     * @Param item:
+     * @return: com.sckw.message.model.dto.UserMsgCenterLatestMsgDTO
+     */
+    UserMsgCenterLatestMsgDTO getLatestMsg(@Param(value = "item") UserMsgCenterReqDTO item);
 }

+ 6 - 1
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/dto/SelectMessagesDTO.java

@@ -6,6 +6,8 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.Date;
 
 /**
@@ -17,7 +19,10 @@ import java.util.Date;
 @Setter
 @ToString
 @Builder
-public class SelectMessagesDTO {
+public class SelectMessagesDTO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -6087719092255350917L;
 
     /**
      * 一级企业id

+ 58 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/dto/UserMsgCenterLatestMsgDTO.java

@@ -0,0 +1,58 @@
+package com.sckw.message.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @desc: 用户消息中心最新消息dto
+ * @author: yzc
+ * @date: 2023-09-07 16:22
+ */
+@Getter
+@Setter
+@ToString
+public class UserMsgCenterLatestMsgDTO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -1102829961881130675L;
+
+    private Long id;
+
+    /**
+     * 状态:0未读/1已读
+     */
+    private Integer status;
+
+    /**
+     * 消息分类
+     */
+    private String type;
+
+    /**
+     * 消息标题
+     */
+    private String title;
+
+    /**
+     * 消息内容
+     */
+    private String content;
+
+    /**
+     * 消息跳转url
+     */
+    private String url;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+}

+ 32 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/dto/UserMsgCenterReqDTO.java

@@ -0,0 +1,32 @@
+package com.sckw.message.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+/**
+ * @desc: 消息中心请求dto
+ * @author: yzc
+ * @date: 2023-09-07 15:01
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class UserMsgCenterReqDTO {
+
+    /**
+     * 一级企业id
+     */
+    private Long entId;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    private Integer status;
+
+    private String type;
+}

+ 6 - 1
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/res/KwmMessageListResVO.java

@@ -5,6 +5,8 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.Date;
 
 /**
@@ -15,7 +17,10 @@ import java.util.Date;
 @Getter
 @Setter
 @ToString
-public class KwmMessageListResVO {
+public class KwmMessageListResVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -5549538304400226372L;
 
     private Long id;
 

+ 6 - 1
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/res/MessagesStatisticsResVO.java

@@ -6,6 +6,8 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.Date;
 
 /**
@@ -17,7 +19,10 @@ import java.util.Date;
 @Setter
 @ToString
 @Builder
-public class MessagesStatisticsResVO {
+public class MessagesStatisticsResVO  implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 4758956841872315397L;
 
     /**
      * 消息分类

+ 67 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/res/UserMsgCenterResVO.java

@@ -0,0 +1,67 @@
+package com.sckw.message.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @desc: 用户消息中心响应vo
+ * @author: yzc
+ * @date: 2023-09-07 14:53
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class UserMsgCenterResVO implements Serializable {
+
+
+    @Serial
+    private static final long serialVersionUID = -3285612805457269859L;
+
+
+    private Long id;
+
+    /**
+     * 状态:0未读/1已读
+     */
+    private Integer status;
+
+    /**
+     * 消息分类
+     */
+    private String type;
+
+    /**
+     * 消息标题
+     */
+    private String title;
+
+    /**
+     * 未读数量
+     */
+    private Integer num;
+
+    /**
+     * 消息内容
+     */
+    private String content;
+
+    /**
+     * 消息跳转url
+     */
+    private String url;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+}

+ 25 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/KwmMessageUserService.java

@@ -7,6 +7,9 @@ import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.message.dao.KwmMessageUserMapper;
 import com.sckw.message.model.KwmMessageUser;
+import com.sckw.message.model.dto.UserMsgCenterLatestMsgDTO;
+import com.sckw.message.model.dto.UserMsgCenterReqDTO;
+import com.sckw.message.model.vo.res.UserMsgCenterResVO;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -150,4 +153,26 @@ public class KwmMessageUserService {
         }
         kwmMessageUserMapper.update(null, wrapper);
     }
+
+    /**
+     * @desc: 根据用户或企业,状态升序,type分组统计消息数量,查找前五条
+     * @author: yzc
+     * @date: 2023-09-07 15:40
+     * @Param dto:
+     * @return: java.util.List<com.sckw.message.model.vo.res.UserMsgCenterResVO>
+     */
+    public List<UserMsgCenterResVO> userMsgCenter(UserMsgCenterReqDTO dto) {
+        return kwmMessageUserMapper.userMsgCenter(dto);
+    }
+
+    /**
+     * @desc: 获取最新消息
+     * @author: yzc
+     * @date: 2023-09-07 17:42
+     * @Param dto:
+     * @return: com.sckw.message.model.dto.UserMsgCenterLatestMsgDTO
+     */
+    public UserMsgCenterLatestMsgDTO getLatestMsg(UserMsgCenterReqDTO dto) {
+        return  kwmMessageUserMapper.getLatestMsg(dto);
+    }
 }

+ 33 - 1
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/MessageService.java

@@ -16,9 +16,15 @@ import com.sckw.message.model.KwmMessage;
 import com.sckw.message.model.KwmMessageUser;
 import com.sckw.message.model.dto.MessageListDTO;
 import com.sckw.message.model.dto.SelectMessagesDTO;
-import com.sckw.message.model.vo.req.*;
+import com.sckw.message.model.dto.UserMsgCenterLatestMsgDTO;
+import com.sckw.message.model.dto.UserMsgCenterReqDTO;
+import com.sckw.message.model.vo.req.DeleteMessagesReqVO;
+import com.sckw.message.model.vo.req.ReadMessagesReqVO;
+import com.sckw.message.model.vo.req.SelectMessagesReqVO;
+import com.sckw.message.model.vo.req.StatisticsMessagesReqVO;
 import com.sckw.message.model.vo.res.KwmMessageListResVO;
 import com.sckw.message.model.vo.res.MessagesStatisticsResVO;
+import com.sckw.message.model.vo.res.UserMsgCenterResVO;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
@@ -244,4 +250,30 @@ public class MessageService {
         res.setTableTops(tableTops).setTableBottom(tableBottom);
         return res;
     }
+
+    /**
+     * @desc: 用户消息中心获取
+     * @author: yzc
+     * @date: 2023-09-07 17:41
+     * @return: java.util.List<com.sckw.message.model.vo.res.UserMsgCenterResVO>
+     */
+    public List<UserMsgCenterResVO> userMsgCenter() {
+        UserMsgCenterReqDTO dto = new UserMsgCenterReqDTO();
+        if (Objects.equals(LoginUserHolder.getIsMain(), 1)) {
+            dto.setEntId(LoginUserHolder.getEntId());
+        } else {
+            dto.setUserId(LoginUserHolder.getUserId());
+        }
+        List<UserMsgCenterResVO> result = kwmMessageUserService.userMsgCenter(dto);
+        if (CollectionUtils.isEmpty(result)) {
+            return Collections.emptyList();
+        }
+        result.forEach(e -> {
+            dto.setStatus(e.getStatus()).setType(e.getType());
+            UserMsgCenterLatestMsgDTO msg = kwmMessageUserService.getLatestMsg(dto);
+            e.setId(msg.getId()).setTitle(msg.getTitle()).setContent(msg.getContent())
+                    .setUrl(msg.getUrl()).setCreateTime(msg.getCreateTime());
+        });
+        return result;
+    }
 }

+ 46 - 0
sckw-modules/sckw-message/src/main/resources/mapper/KwmMessageUserMapper.xml

@@ -34,4 +34,50 @@
             </trim>
         </foreach>
     </insert>
+    <select id="userMsgCenter" resultType="com.sckw.message.model.vo.res.UserMsgCenterResVO">
+        SELECT
+        mu.status as status,
+        m.type as type,
+        count(*) as num
+        FROM
+        kwm_message_user mu
+        LEFT JOIN kwm_message m ON mu.msg_id = m.id
+        <where>
+            m.del_flag = 0 and mu.del_flag = 0
+            <if test="item.entId != null">
+                and mu.ent_id = #{item.entId}
+            </if>
+            <if test="item.userId != null">
+                and mu.user_id = #{item.userId}
+            </if>
+        </where>
+        GROUP BY m.type, mu.status
+        ORDER BY mu.status ASC
+        LIMIT 5;
+    </select>
+    <select id="getLatestMsg" resultType="com.sckw.message.model.dto.UserMsgCenterLatestMsgDTO">
+        SELECT
+        mu.id, mu.status, mu.create_time as createTime,
+        m.type, m.title, m.content, m.url
+        FROM
+        kwm_message_user mu
+        LEFT JOIN kwm_message m ON mu.msg_id = m.id
+        <where>
+            m.del_flag = 0 and mu.del_flag = 0
+            <if test="item.status != null">
+                and mu.status = #{item.status}
+            </if>
+            <if test="item.type != null and item.type != ''">
+                and m.type = #{item.type}
+            </if>
+            <if test="item.entId != null">
+                and mu.ent_id = #{item.entId}
+            </if>
+            <if test="item.userId != null">
+                and mu.user_id = #{item.userId}
+            </if>
+        </where>
+        order by mu.create_time desc limit 1;
+
+    </select>
 </mapper>