Преглед изворни кода

消息分类统计查询接口

15902849627 пре 2 година
родитељ
комит
02805f9bec

+ 3 - 12
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/base/BaseModel.java

@@ -1,5 +1,6 @@
 package com.sckw.core.model.base;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -34,15 +35,10 @@ public class BaseModel implements Serializable {
 	 */
 	private Long createBy;
 
-	/**
-	 * 创建人姓名
-	 */
-	private String createByName;
-
 	/**
 	 * 创建时间
 	 */
-	//@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
 	private Date createTime;
 
 	/**
@@ -50,15 +46,10 @@ public class BaseModel implements Serializable {
 	 */
 	private Long updateBy;
 
-	/**
-	 * 跟新人姓名
-	 */
-	private String updateByName;
-
 	/**
 	 * 更新时间
 	 */
-	//@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
 	private Date updateTime;
 
 	/**

+ 4 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java

@@ -213,5 +213,9 @@ public class Global {
     public static final String CYCLE_YEAR = "年";
 
 
+    /**未读*/
+    public static final Integer UN_READ = 0;
 
+    /**已读*/
+    public static final Integer READ = 1;
 }

+ 10 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/page/PageHelperUtil.java

@@ -73,4 +73,14 @@ public class PageHelperUtil {
         return pageResult;
     }
 
+    public static <T> PageResult build(PageRequest pageInfo, Long totalCount, List<T> records) {
+        PageResult pageResult = new PageResult();
+        pageResult.setPageNum(pageInfo.getPageNum());
+        pageResult.setPageSize(pageInfo.getPageSize());
+        pageResult.setSize(totalCount);
+        pageResult.setPages((int) ((totalCount + pageInfo.getPageSize() - 1) / pageInfo.getPageSize()));
+        pageResult.setList(records);
+        return pageResult;
+    }
+
 }

+ 42 - 31
sckw-modules/sckw-message/src/main/java/com/sckw/message/controller/MessageController.java

@@ -12,18 +12,15 @@ import com.sckw.message.service.MessageService;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
 /**
+ * @param
  * @desc: 消息相关接口
  * @author: yzc
  * @date: 2023-06-09 15:13
- * @param
  * @return
  */
 @RestController
@@ -34,62 +31,76 @@ public class MessageController {
     private final MessageService messageService;
 
     /**
-     * @desc: 查找消息集合
+     * @param id
+     * @return com.sckw.core.web.response.HttpResult
+     * @desc: 获取消息详情
      * @author: yzc
-     * @date: 2023-06-09 15:12
-     * @param findMessagesReqVO
+     * @date: 2023-06-13 16:17
+     */
+    @GetMapping("/detail")
+    public HttpResult detail(@RequestParam Long id) {
+        KwmMessage message = messageService.detail(id);
+        return HttpResult.ok(message);
+    }
+
+    /**
+     * @param params
      * @return com.sckw.core.web.response.HttpResult
+     * @desc: 分页查询消息
+     * @author: yzc
+     * @date: 2023-06-09 15:12
      */
-    @PostMapping(value = "/findList", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult findList(@RequestBody @Valid FindMessagesReqVO findMessagesReqVO) {
-        return HttpResult.ok(messageService.selectMessages(findMessagesReqVO));
+    @PostMapping(value = "/select", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult select(@RequestBody @Valid SelectMessagesReqVO params) {
+        PageHelper.startPage(params.getPageNum(), params.getPageSize());
+        List<KwmMessage> list = messageService.select(params);
+        PageInfo<KwmMessage> page = new PageInfo<>(list);
+        PageResult result = PageHelperUtil.build(params, page.getTotal(), list);
+        return HttpResult.ok(result);
     }
 
     /**
+     * @param readMessagesReqVO
+     * @return com.sckw.core.web.response.HttpResult
      * @desc: 消息已读
      * @author: yzc
      * @date: 2023-06-09 14:21
-     * @param readMessagesReqVO
-     * @return com.sckw.core.web.response.HttpResult
      */
     @PostMapping(value = "/read", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult read(@RequestBody @Valid ReadMessagesReqVO readMessagesReqVO) {
+    public HttpResult read(@RequestBody ReadMessagesReqVO readMessagesReqVO) {
         messageService.read(readMessagesReqVO);
         return HttpResult.ok();
     }
 
     /**
+     * @param deleteMessagesReqVO
+     * @return com.sckw.core.web.response.HttpResult
      * @desc: 删除消息
      * @author: yzc
      * @date: 2023-06-09 14:21
-     * @param deleteMessagesReqVO
-     * @return com.sckw.core.web.response.HttpResult
      */
     @PostMapping(value = "/delete", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult delete(@RequestBody @Valid DeleteMessagesReqVO deleteMessagesReqVO) {
+    public HttpResult delete(@RequestBody DeleteMessagesReqVO deleteMessagesReqVO) {
         messageService.delete(deleteMessagesReqVO);
         return HttpResult.ok();
     }
 
+    @GetMapping(value = "/statistics")
+    public HttpResult statistics(@RequestParam(required = false) String category) {
+        List<MessagesStatisticsResVO> result = messageService.statistics(category);
+        return HttpResult.ok(result);
+    }
+
     /**
+     * @param findMessagesReqVO
+     * @return com.sckw.core.web.response.HttpResult
      * @desc: 查找消息集合
      * @author: yzc
      * @date: 2023-06-09 15:12
-     * @param params
-     * @return com.sckw.core.web.response.HttpResult
      */
-    @PostMapping(value = "/select", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult select(@RequestBody @Valid SelectMessagesReqVO params) {
-        PageHelper.startPage(params.getPageNum(),params.getPageSize());
-        List<KwmMessage> list = messageService.select(params);
-        PageResult result = PageHelperUtil.getPageResult(new PageInfo<>(list));
-        return HttpResult.ok(result);
-    }
-
-    @PostMapping(value = "/statistics", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult statistics(@RequestBody MessagesStatisticsReqVO params) {
-        MessagesStatisticsResVO result = messageService.statistics(params.getCategory());
-        return HttpResult.ok(result);
+    @PostMapping(value = "/findList", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult findList(@RequestBody FindMessagesReqVO findMessagesReqVO) {
+        return HttpResult.ok(messageService.selectMessages(findMessagesReqVO));
     }
 
 }

+ 3 - 2
sckw-modules/sckw-message/src/main/java/com/sckw/message/dao/KwmMessageMapper.java

@@ -1,6 +1,7 @@
 package com.sckw.message.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.message.model.FindMessagePageParam;
 import com.sckw.message.model.KwmMessage;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -18,8 +19,8 @@ public interface KwmMessageMapper extends BaseMapper<KwmMessage> {
      * @desc: 分页查询
      * @author: yzc
      * @date: 2023-06-13 9:11
-     * @param userId, category, type
+     * @param item
      * @return java.util.List<com.sckw.message.model.KwmMessage>
      */
-    List<KwmMessage> findPage(@Param("userId") long userId, @Param("category") String category, @Param("type") String type);
+    List<KwmMessage> findPage(@Param("item") FindMessagePageParam item);
 }

+ 33 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/FindMessagePageParam.java

@@ -0,0 +1,33 @@
+package com.sckw.message.model;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: 获取消息分页参数
+ * @author: yzc
+ * @date: 2023-06-13 16:30
+ */
+@Getter
+@Setter
+@ToString
+@Builder
+public class FindMessagePageParam {
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 消息分类
+     */
+    private String category;
+
+    /**
+     * 消息类型
+     */
+    private String type;
+}

+ 12 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/res/MessagesStatisticsResVO.java

@@ -1,6 +1,7 @@
 package com.sckw.message.model.vo.res;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Builder;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -15,6 +16,7 @@ import java.util.Date;
 @Getter
 @Setter
 @ToString
+@Builder
 public class MessagesStatisticsResVO {
 
     /**
@@ -42,6 +44,16 @@ public class MessagesStatisticsResVO {
      */
     private String content;
 
+    /**
+     * 消息跳转url
+     */
+    private String url;
+
+    /**
+     * 状态0未读1已读
+     */
+    private Integer status;
+
     /**
      * 创建时间
      */

+ 30 - 3
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/KwmMessageService.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.message.dao.KwmMessageMapper;
+import com.sckw.message.model.FindMessagePageParam;
 import com.sckw.message.model.KwmMessage;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -89,13 +90,39 @@ public class KwmMessageService {
     }
 
     /**
+     * @param findMessagePageParam
+     * @return java.util.List<com.sckw.message.model.KwmMessage>
      * @desc: 分页查询
      * @author: yzc
      * @date: 2023-06-13 9:08
-     * @param userId, category, type
+     */
+    public List<KwmMessage> findPage(FindMessagePageParam findMessagePageParam) {
+        return kwmMessageMapper.findPage(findMessagePageParam);
+    }
+
+    /**
+     * @param id
+     * @return com.sckw.message.model.KwmMessage
+     * @desc: 根据id获取详情
+     * @author: yzc
+     * @date: 2023-06-13 15:15
+     */
+    public KwmMessage getById(Long id) {
+        return kwmMessageMapper.selectById(id);
+    }
+
+    /**
+     * @param msgIds, category
      * @return java.util.List<com.sckw.message.model.KwmMessage>
+     * @desc: 消息统计
+     * @author: yzc
+     * @date: 2023-06-14 9:21
      */
-    public List<KwmMessage> findPage(Long userId,String category, String type) {
-        return kwmMessageMapper.findPage(userId,category, type);
+    public List<KwmMessage> statistics(List<Long> msgIds, String category) {
+        LambdaQueryWrapper<KwmMessage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(KwmMessage::getId, msgIds).eq(KwmMessage::getDelFlag, 0)
+                .eq(StringUtils.isNotBlank(category), KwmMessage::getCategory, category)
+                .orderByAsc(KwmMessage::getStatus).orderByDesc(KwmMessage::getCreateTime);
+        return CollectionUtil.emptyIfNull(kwmMessageMapper.selectList(wrapper));
     }
 }

+ 57 - 8
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/MessageService.java

@@ -1,6 +1,14 @@
 package com.sckw.message.service;
 
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.page.PageHelperUtil;
+import com.sckw.core.model.page.PageResult;
+import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.StringUtils;
+import com.sckw.message.model.FindMessagePageParam;
 import com.sckw.message.model.KwmMessage;
 import com.sckw.message.model.vo.req.DeleteMessagesReqVO;
 import com.sckw.message.model.vo.req.FindMessagesReqVO;
@@ -12,8 +20,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @desc: 消息相关service
@@ -114,19 +122,60 @@ public class MessageService {
      */
     public List<KwmMessage> select(SelectMessagesReqVO reqVO) {
         //TODO 当前线程获取用户id
-        return kwmMessageService.findPage(1L, reqVO.getCategory(), reqVO.getType());
+        FindMessagePageParam findMessagePageParam = FindMessagePageParam.builder().userId(1L).category(reqVO.getCategory()).type(reqVO.getType()).build();
+        return kwmMessageService.findPage(findMessagePageParam);
     }
 
     /**
+     * @param category
+     * @return com.sckw.message.model.vo.res.MessagesStatisticsResVO
      * @desc: 消息统计
      * @author: yzc
      * @date: 2023-06-13 10:19
-     * @param category
-     * @return com.sckw.message.model.vo.res.MessagesStatisticsResVO
      */
-    public MessagesStatisticsResVO statistics(String category) {
-
+    public List<MessagesStatisticsResVO> statistics(String category) {
+        //TODO 当前线程获取用户id
+        List<Long> msgIds = kwmMessageUserService.getMsgIdsByUserId(1L);
+        if (CollectionUtils.isEmpty(msgIds)) {
+            return Collections.emptyList();
+        }
+        List<KwmMessage> messages = kwmMessageService.statistics(msgIds, category);
+        if (CollectionUtils.isEmpty(messages)) {
+            return Collections.emptyList();
+        }
+        Map<String, List<KwmMessage>> collect;
+        if (StringUtils.isNotBlank(category)) {
+            collect = messages.stream().sorted(Comparator.comparingInt(KwmMessage::getStatus).thenComparing(KwmMessage::getCreateTime,Comparator.reverseOrder())).collect(Collectors.groupingBy(KwmMessage::getType));
+        } else {
+            collect = messages.stream().sorted(Comparator.comparingInt(KwmMessage::getStatus).thenComparing(KwmMessage::getCreateTime,Comparator.reverseOrder())).collect(Collectors.groupingBy(KwmMessage::getCategory));
+        }
+        List<MessagesStatisticsResVO> list = new ArrayList<>(collect.size());
+        collect.values().forEach(e -> {
+            KwmMessage message = e.get(0);
+            long count = e.stream().filter(m -> Global.UN_READ.equals(m.getStatus())).count();
+            MessagesStatisticsResVO messagesStatistics = BeanUtils.copyProperties(message, MessagesStatisticsResVO.class);
+            messagesStatistics.setUnReadNum((int) count);
+            list.add(messagesStatistics);
+        });
+        return list;
+    }
 
-        return null;
+    /**
+     * @param id
+     * @return com.sckw.message.model.KwmMessage
+     * @desc: 获取消息详情
+     * @author: yzc
+     * @date: 2023-06-13 15:19
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public KwmMessage detail(Long id) {
+        //TODO 当前线程获取用户id
+        KwmMessage message = kwmMessageService.getById(id);
+        if (Global.UN_READ.equals(message.getStatus())) {
+            List<Long> ids = Collections.singletonList(id);
+            kwmMessageService.readByMsgIds(ids);
+            kwmMessageUserService.readByUserAndMsgIds(1L, ids);
+        }
+        return message;
     }
 }

+ 12 - 2
sckw-modules/sckw-message/src/main/resources/mapper/KwmMessageMapper.xml

@@ -9,8 +9,18 @@
     from kwm_message m
     left join kwm_message_user mu
     on m.id = mu.msg_id
-    where m.del_flag = 0 and mu.del_flag = 0 and mu.user_id = #{userId}
-      and m.category = #{category} and m.type = #{type}
+    <where>
+        m.del_flag = 0 and mu.del_flag = 0
+        <if test="item.userId != null">
+          and mu.user_id = #{item.userId}
+        </if>
+        <if test="item.category != null and item.category != ''">
+          and m.category = #{item.category}
+        </if>
+        <if test="item.type != null and item.type != ''">
+          and m.type = #{item.type}
+        </if>
+    </where>
     ORDER BY m.status, m.create_time desc
   </select>
 </mapper>