소스 검색

消息模块调整

1811872455@163.com 1 주 전
부모
커밋
7819955e04

+ 1 - 1
java/storlead-system/storlead-system-api/src/main/java/com/storlead/system/controller/CorpWeChatController.java → java/storlead-api/src/main/java/com/storlead/system/CorpWeChatController.java

@@ -1,4 +1,4 @@
-package com.storlead.system.controller;
+package com.storlead.system;
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.SecureUtil;

+ 40 - 16
java/storlead-message/storlead-message-api/src/main/java/com/storlead/message/controller/MessageApiController.java

@@ -10,6 +10,7 @@ import com.storlead.message.enums.MessageTypeEnum;
 import com.storlead.message.pojo.dto.MessageDTO;
 import com.storlead.message.pojo.dto.MessageTestDTO;
 import com.storlead.message.pojo.entity.InsideMessageSendLogEntity;
+import com.storlead.message.pojo.vo.MessageAppNoReadVO;
 import com.storlead.message.pojo.vo.MessageDetailVO;
 import com.storlead.message.pojo.vo.MessageNoReadTotalVO;
 import com.storlead.message.pojo.vo.MessageTypeReadStateVO;
@@ -97,37 +98,60 @@ public class MessageApiController {
     @PostMapping(value = "/getMessageCount")
     @ApiOperation(value = "获取未读消息数" )
     public Result<?> getMessageCount(MessageDTO dto) {
-        QueryWrapper<InsideMessageSendLogEntity> queryWrapper = new QueryWrapper();
-        queryWrapper.eq("mlog.receiver_user_id", LoginUserUtil.getCurrentUserId());
-        queryWrapper.eq("mlog.is_read",0);
-        if (Objects.nonNull(dto.getMessageType())) {
-            queryWrapper.eq("mr.message_type",dto.getMessageType());
-        }
-        queryWrapper.eq("mlog.is_delete",Integer.valueOf(0));
-        MessageNoReadTotalVO countMap = messageSendLogService.countNoReadtotal(queryWrapper);
+        MessageNoReadTotalVO countMap = messageSendLogService.countNoReadtotal(buildUnreadQueryWrapper(dto));
         return Result.ok(countMap);
     }
 
     @PostMapping(value = "/getNoReadCount")
-    @ApiOperation(value = "获取未读消息数" )
+    @ApiOperation(value = "按消息类型统计未读数(可按应用过滤)")
     public Result<?> getNoReadCount(MessageDTO dto) {
-        QueryWrapper<InsideMessageSendLogEntity> queryWrapper = new QueryWrapper();
-        queryWrapper.eq("mlog.receiver_user_id", LoginUserUtil.getCurrentUserId());
-        queryWrapper.eq("mlog.is_read",0);
+        if (dto == null) {
+            dto = new MessageDTO();
+        }
         List<String> types = new ArrayList<>();
         if (Objects.nonNull(dto.getMessageType())) {
-            queryWrapper.eq("mlog.message_type",dto.getMessageType());
             types.add(dto.getMessageType());
         }
-        queryWrapper.eq("mlog.is_delete",Integer.valueOf(0));
-        List<MessageTypeReadStateVO> statuVOS = messageSendLogService.getCountNoReadCount(queryWrapper);
+        List<MessageTypeReadStateVO> statuVOS = messageSendLogService.getCountNoReadCount(buildUnreadQueryWrapper(dto));
 
         List<MessageTypeReadStateVO> readStatels = MessageTypeEnum.getMessageTypeReadStatels(types);
         Map<Integer, Integer> statuMap = statuVOS.stream()
                 .collect(Collectors.toMap(MessageTypeReadStateVO::getMessageType, MessageTypeReadStateVO::getStateNumber));
         for (MessageTypeReadStateVO readState : readStatels) {
-            readState.setStateNumber(statuMap.getOrDefault(readState.getMessageType(),0));
+            readState.setStateNumber(statuMap.getOrDefault(readState.getMessageType(), 0));
+            readState.setAppId(dto.getAppId());
         }
         return Result.ok(readStatels);
     }
+
+    @PostMapping(value = "/getNoReadCountByApp")
+    @ApiOperation(value = "按应用统计未读消息数")
+    public Result<?> getNoReadCountByApp(MessageDTO dto) {
+        if (dto == null) {
+            dto = new MessageDTO();
+        }
+        QueryWrapper<InsideMessageSendLogEntity> queryWrapper = buildUnreadQueryWrapper(dto);
+        queryWrapper.isNotNull("mr.app_id");
+        List<MessageAppNoReadVO> list = messageSendLogService.getCountNoReadCountByApp(queryWrapper);
+        return Result.ok(list);
+    }
+
+    /**
+     * 未读统计通用条件:当前用户、未读、未删除;可选 messageType / appId(关联 inside_message_record)。
+     */
+    private QueryWrapper<InsideMessageSendLogEntity> buildUnreadQueryWrapper(MessageDTO dto) {
+        QueryWrapper<InsideMessageSendLogEntity> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("mlog.receiver_user_id", LoginUserUtil.getCurrentUserId());
+        queryWrapper.eq("mlog.is_read", 0);
+        queryWrapper.eq("mlog.is_delete", 0);
+        if (dto != null) {
+            if (Objects.nonNull(dto.getMessageType())) {
+                queryWrapper.eq("mr.message_type", dto.getMessageType());
+            }
+            if (Objects.nonNull(dto.getAppId())) {
+                queryWrapper.eq("mr.app_id", dto.getAppId());
+            }
+        }
+        return queryWrapper;
+    }
 }

+ 3 - 0
java/storlead-message/storlead-message-biz/src/main/java/com/storlead/message/mapper/InsideMessageSendLogMapper.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.storlead.framework.mybatis.mapper.MyBaseMapper;
 import com.storlead.message.pojo.entity.InsideMessageSendLogEntity;
+import com.storlead.message.pojo.vo.MessageAppNoReadVO;
 import com.storlead.message.pojo.vo.MessageDetailVO;
 import com.storlead.message.pojo.vo.MessageNoReadTotalVO;
 import com.storlead.message.pojo.vo.MessageTypeReadStateVO;
@@ -29,4 +30,6 @@ public interface InsideMessageSendLogMapper extends MyBaseMapper<InsideMessageSe
 
     List<MessageTypeReadStateVO> countNoReadCount(@Param(Constants.WRAPPER) Wrapper<InsideMessageSendLogEntity> wrapper);
 
+    List<MessageAppNoReadVO> countNoReadCountByApp(@Param(Constants.WRAPPER) Wrapper<InsideMessageSendLogEntity> wrapper);
+
 }

+ 3 - 0
java/storlead-message/storlead-message-biz/src/main/java/com/storlead/message/service/InsideMessageSendLogService.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.storlead.framework.mybatis.service.MyBaseService;
 import com.storlead.message.pojo.dto.MessageDTO;
 import com.storlead.message.pojo.entity.InsideMessageSendLogEntity;
+import com.storlead.message.pojo.vo.MessageAppNoReadVO;
 import com.storlead.message.pojo.vo.MessageDetailVO;
 import com.storlead.message.pojo.vo.MessageNoReadTotalVO;
 import com.storlead.message.pojo.vo.MessageTypeReadStateVO;
@@ -27,4 +28,6 @@ public interface InsideMessageSendLogService extends MyBaseService<InsideMessage
     MessageNoReadTotalVO countNoReadtotal(Wrapper<InsideMessageSendLogEntity> wrapper);
 
     List<MessageTypeReadStateVO> getCountNoReadCount(Wrapper<InsideMessageSendLogEntity> wrapper);
+
+    List<MessageAppNoReadVO> getCountNoReadCountByApp(Wrapper<InsideMessageSendLogEntity> wrapper);
 }

+ 9 - 0
java/storlead-message/storlead-message-biz/src/main/java/com/storlead/message/service/impl/InsideMessageSendLogServiceImpl.java

@@ -8,6 +8,7 @@ import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
 import com.storlead.framework.util.LoginUserUtil;
 import com.storlead.message.pojo.dto.MessageDTO;
 import com.storlead.message.pojo.entity.InsideMessageSendLogEntity;
+import com.storlead.message.pojo.vo.MessageAppNoReadVO;
 import com.storlead.message.pojo.vo.MessageDetailVO;
 import com.storlead.message.pojo.vo.MessageNoReadTotalVO;
 import com.storlead.message.mapper.InsideMessageSendLogMapper;
@@ -43,6 +44,9 @@ public class InsideMessageSendLogServiceImpl extends MyBaseServiceImpl<InsideMes
         if (Objects.nonNull(dto.getMessageType())) {
             queryWrapper.eq("mr.message_type",dto.getMessageType());
         }
+        if (Objects.nonNull(dto.getAppId())) {
+            queryWrapper.eq("mr.app_id", dto.getAppId());
+        }
         if (Objects.nonNull(dto.getIsRead())) {
             queryWrapper.eq("mlog.is_read",dto.getIsRead());
             queryWrapper.eq("mlog.is_read",dto.getIsRead());
@@ -64,4 +68,9 @@ public class InsideMessageSendLogServiceImpl extends MyBaseServiceImpl<InsideMes
         return this.baseMapper.countNoReadCount(wrapper);
     }
 
+    @Override
+    public List<MessageAppNoReadVO> getCountNoReadCountByApp(Wrapper<InsideMessageSendLogEntity> wrapper) {
+        return this.baseMapper.countNoReadCountByApp(wrapper);
+    }
+
 }

+ 12 - 0
java/storlead-message/storlead-message-biz/src/main/resources/mapper/InsideMessageSendLogMapper.xml

@@ -56,4 +56,16 @@
             ${ew.customSqlSegment}
         group by mr.message_type
     </select>
+
+    <select id="countNoReadCountByApp" resultType="com.storlead.message.pojo.vo.MessageAppNoReadVO">
+        SELECT
+            mr.app_id AS appId,
+            ifnull(sum(case when mlog.is_read = 0 then 1 else 0 end), 0) AS stateNumber
+        FROM
+            inside_message_send_log AS mlog
+                LEFT JOIN inside_message_record AS mr ON mlog.message_id = mr.id
+                LEFT JOIN `user` AS us ON us.id = mr.send_user_id
+            ${ew.customSqlSegment}
+        GROUP BY mr.app_id
+    </select>
 </mapper>

+ 17 - 0
java/storlead-message/storlead-message-core/src/main/java/com/storlead/message/pojo/vo/MessageAppNoReadVO.java

@@ -0,0 +1,17 @@
+package com.storlead.message.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 按应用维度统计的未读消息数
+ */
+@Data
+public class MessageAppNoReadVO {
+
+    @ApiModelProperty(value = "应用 ID,对应 inside_message_record.app_id / sys_app.id")
+    private Long appId;
+
+    @ApiModelProperty(value = "未读数量")
+    private Integer stateNumber;
+}

+ 2 - 2
java/storlead-message/storlead-message-core/src/main/java/com/storlead/message/pojo/vo/MessageTypeReadStateVO.java

@@ -12,8 +12,8 @@ import lombok.Data;
 @Data
 public class MessageTypeReadStateVO {
 
-    @ApiModelProperty(value = "appId")
-    private Integer appId;
+    @ApiModelProperty(value = "应用 ID")
+    private Long appId;
 
     @ApiModelProperty(value = "应用名称")
     private String appName;