yzc 2 жил өмнө
parent
commit
5575e3635e

+ 15 - 7
sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/SckwSms.java

@@ -1,15 +1,23 @@
 package com.sckw.stream.model;
 
 import com.sckw.stream.enums.SmsCodeEnum;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import java.util.Map;
+import lombok.*;
+import lombok.experimental.Accessors;
 
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
+import java.util.Map;
+/**
+ * @desc: 发送短信对象
+ * @author: yzc
+ * @date: 2023-06-16 14:04
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
 public class SckwSms {
+    public SckwSms(){
+        this.signName = "矿拉拉";
+    }
 
     /**
      * 短信模板code

+ 37 - 11
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/KwmMessageUserService.java

@@ -25,25 +25,36 @@ public class KwmMessageUserService {
     private final KwmMessageUserMapper kwmMessageUserMapper;
 
     /**
+     * @param userId
+     * @return java.lang.Long
      * @desc: 获取用户未删除消息ids
      * @author: yzc
      * @date: 2023-06-09 14:24
-     * @param userId
-     * @return java.lang.Long
      */
     public List<Long> getMsgIdsByUserId(Long userId) {
+        List<KwmMessageUser> list = getByUserId(userId);
+        return list.stream().map(KwmMessageUser::getMsgId).toList();
+    }
+
+    /**
+     * @desc: 根据用户id获取
+     * @author: yzc
+     * @date: 2023-06-16 11:18
+     * @Param userId:
+     * @return: java.util.List<com.sckw.message.model.KwmMessageUser>
+     */
+    public List<KwmMessageUser> getByUserId(Long userId) {
         LambdaQueryWrapper<KwmMessageUser> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(KwmMessageUser::getUserId, userId).eq(KwmMessageUser::getDelFlag, 0);
-        List<KwmMessageUser> list = CollectionUtils.emptyIfNull(kwmMessageUserMapper.selectList(wrapper));
-        return list.stream().map(KwmMessageUser::getMsgId).toList();
+        return CollectionUtils.emptyIfNull(kwmMessageUserMapper.selectList(wrapper));
     }
 
     /**
+     * @param userId, msgIds
+     * @return void
      * @desc: 更新为已读根据用户id及消息ids
      * @author: yzc
      * @date: 2023-06-09 14:30
-     * @param userId, msgIds
-     * @return void
      */
     @Transactional(rollbackFor = Exception.class)
     public void readByUserAndMsgIds(Long userId, List<Long> msgIds) {
@@ -54,11 +65,11 @@ public class KwmMessageUserService {
     }
 
     /**
+     * @param userId, msgIds
+     * @return void
      * @desc: 根据用户删除消息
      * @author: yzc
      * @date: 2023-06-09 15:07
-     * @param userId, msgIds
-     * @return void
      */
     @Transactional(rollbackFor = Exception.class)
     public void delByUserAndMsgIds(long userId, List<Long> msgIds) {
@@ -70,14 +81,29 @@ public class KwmMessageUserService {
 
 
     /**
-     * @desc: 批量插入
-     * @author: yzc
-     * @date: 2023-06-09 15:58
      * @param messageUsers
      * @return void
+     * @desc: 批量插入(不直接批量插入,防止daoAspect切面失效)
+     * @author: yzc
+     * @date: 2023-06-09 15:58
      */
     @Transactional(rollbackFor = Exception.class)
     public void batchSave(List<KwmMessageUser> messageUsers) {
         messageUsers.forEach(kwmMessageUserMapper::insert);
     }
+
+    /**
+     * @desc: 通过消息id和userId获取
+     * @author: yzc
+     * @date: 2023-06-16 11:09
+     * @Param msgId:
+     * @Param userId:
+     * @return: com.sckw.message.model.KwmMessageUser
+     */
+    public KwmMessageUser getByMsgIdAndUserId(Long msgId, long userId) {
+        LambdaQueryWrapper<KwmMessageUser> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwmMessageUser::getUserId, userId).eq(KwmMessageUser::getMsgId, msgId)
+                .eq(KwmMessageUser::getDelFlag, 0).last("LIMIT 1");
+        return kwmMessageUserMapper.selectOne(wrapper);
+    }
 }

+ 39 - 16
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/MessageService.java

@@ -6,6 +6,7 @@ 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.KwmMessageUser;
 import com.sckw.message.model.vo.req.DeleteMessagesReqVO;
 import com.sckw.message.model.vo.req.FindMessagesReqVO;
 import com.sckw.message.model.vo.req.ReadMessagesReqVO;
@@ -42,11 +43,21 @@ public class MessageService {
      */
     public List<KwmMessage> selectMessages(FindMessagesReqVO params) {
         //TODO 当前线程获取用户id
-        List<Long> msgIds = kwmMessageUserService.getMsgIdsByUserId(1L);
-        if (CollectionUtils.isEmpty(msgIds)) {
+        List<KwmMessageUser> messageUsers = kwmMessageUserService.getByUserId(1L);
+        Map<Long, KwmMessageUser> map = messageUsers.stream().collect(Collectors.toMap(KwmMessageUser::getMsgId, e -> e, (k1, k2) -> k1));
+        if (CollectionUtils.isEmpty(map)) {
             return Collections.emptyList();
         }
-        return kwmMessageService.getList(msgIds, params.getCategory(), params.getType(), null);
+        List<Long> msgIds = map.keySet().stream().toList();
+        List<KwmMessage> list = kwmMessageService.getList(msgIds, params.getCategory(), params.getType(), null);
+        list.forEach(e->{
+            KwmMessageUser messageUser = map.get(e.getId());
+            e.setStatus(messageUser.getStatus());
+            e.setCreateTime(messageUser.getCreateTime());
+            e.setUpdateTime(messageUser.getUpdateTime());
+            e.setUpdateBy(messageUser.getUpdateBy());
+        });
+        return list;
     }
 
     /**
@@ -64,18 +75,18 @@ public class MessageService {
             return;
         }
         List<Long> ids = reqVO.getMsgIds();
+        //msgIds不为空直接更新用户消息为已读
         if (CollectionUtils.isNotEmpty(ids)) {
             List<Long> list = ids.stream().filter(msgIds::contains).toList();
             kwmMessageUserService.readByUserAndMsgIds(1L, list);
-            kwmMessageService.readByMsgIds(list);
         } else {
+            //msgIds为空根据category及type更新用户消息为已读
             List<KwmMessage> messageList = kwmMessageService.getList(msgIds, reqVO.getCategory(), reqVO.getType(), 0);
             if (CollectionUtils.isEmpty(messageList)) {
                 return;
             }
             List<Long> updateMsgIds = messageList.stream().map(KwmMessage::getId).toList();
             kwmMessageUserService.readByUserAndMsgIds(1L, updateMsgIds);
-            kwmMessageService.readByMsgIds(updateMsgIds);
         }
     }
 
@@ -94,18 +105,18 @@ public class MessageService {
             return;
         }
         List<Long> ids = reqVO.getMsgIds();
+        //msgIds不为空直接删除用户消息
         if (CollectionUtils.isNotEmpty(ids)) {
             List<Long> list = ids.stream().filter(msgIds::contains).toList();
             kwmMessageUserService.delByUserAndMsgIds(1L, list);
-            kwmMessageService.delByMsgIds(list);
         } else {
+            //msgIds为空,根据category及type查找删除用户消息
             List<KwmMessage> messageList = kwmMessageService.getList(msgIds, reqVO.getCategory(), reqVO.getType(), null);
             if (CollectionUtils.isEmpty(messageList)) {
                 return;
             }
             List<Long> delMsgIds = messageList.stream().map(KwmMessage::getId).toList();
             kwmMessageUserService.delByUserAndMsgIds(1L, delMsgIds);
-            kwmMessageService.delByMsgIds(delMsgIds);
         }
     }
 
@@ -131,20 +142,34 @@ public class MessageService {
      */
     public List<MessagesStatisticsResVO> statistics(String category) {
         //TODO 当前线程获取用户id
-        List<Long> msgIds = kwmMessageUserService.getMsgIdsByUserId(1L);
-        if (CollectionUtils.isEmpty(msgIds)) {
+        //获取用户未删除消息
+        List<KwmMessageUser> messageUserList = kwmMessageUserService.getByUserId(1L);
+        Map<Long, KwmMessageUser> messageUserMap = messageUserList.stream().collect(Collectors.toMap(KwmMessageUser::getMsgId, e -> e, (k1, k2) -> k1));
+        if (CollectionUtils.isEmpty(messageUserMap)) {
             return Collections.emptyList();
         }
+        List<Long> msgIds = messageUserMap.keySet().stream().toList();
+        //根据消息ids获取message详情
         List<KwmMessage> messages = kwmMessageService.statistics(msgIds, category);
         if (CollectionUtils.isEmpty(messages)) {
             return Collections.emptyList();
         }
+        //设置用户消息状态及创建时间
+        messages.forEach(e->{
+            KwmMessageUser kwmMessageUser = messageUserMap.get(e.getId());
+            e.setStatus(kwmMessageUser.getStatus());
+            e.setCreateTime(kwmMessageUser.getCreateTime());
+        });
+        //消息按状态升序、创建时间降序排序,无category按category分组,有category按type分组
         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));
+            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));
+            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);
@@ -167,11 +192,9 @@ public class MessageService {
     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);
-        }
+        List<Long> ids = Collections.singletonList(id);
+        //更新用户消息为已读状态
+        kwmMessageUserService.readByUserAndMsgIds(1L, ids);
         return message;
     }
 }

+ 2 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwMessageHandlerService.java

@@ -43,6 +43,7 @@ public class SckwMessageHandlerService {
             log.error("message消息处理用户id为空,不处理");
             return;
         }
+        //构建message对象
         MessageEnum messageEnum = sckwMessage.getMessageEnum();
         KwmMessage kwmMessage = KwmMessage.builder().category(messageEnum.getCategory()).type(messageEnum.getType()).title(messageEnum.getTitle())
                 .content(messageEnum.getContent()).clientType(messageEnum.getPushType()).url(sckwMessage.getMsgUrl())
@@ -50,6 +51,7 @@ public class SckwMessageHandlerService {
         kwmMessage.setStatus(0);
         kwmMessage.setCreateBy(sckwMessage.getCreateBy());
         Long msgId = kwmMessageService.insert(kwmMessage);
+        //多个用户id,构建多个KwmMessageUser对象保存
         List<String> userIdList = Arrays.asList(userIds.split(","));
         List<KwmMessageUser> messageUsers = Lists.newArrayList();
         userIdList.forEach(e -> {

+ 0 - 1
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SmsService.java

@@ -44,7 +44,6 @@ public class SmsService {
         }
         SckwSms sckwSms = new SckwSms();
         sckwSms.setTelephone(param.getPhone());
-        sckwSms.setSignName("矿拉拉");
         sckwSms.setTemplateCode(SmsCodeEnum.VERIFICATION_CODE);
         Map<String, Object> params = new HashMap<>();
         params.put("code", NumberUtils.createRandomVcode());

+ 0 - 57
sckw-modules/sckw-message/src/main/resources/bootstrap-dev.yml

@@ -17,64 +17,7 @@ spring:
         namespace: sckw-service-platform-dev
         # 共享配置
         group: sckw-service-platform
-    function:
-      definition: sckwSms;sckwMessage
-    stream:
-      binders:
-        defaultRabbit:
-          type: rabbit
-          environment:
-            spring:
-              rabbitmq:
-                virtual-host: /
-                host: 10.10.10.230
-                port: 5672
-                username: sckw
-                password: Yy123...
-      bindings:
-        sckwSms-in-0:
-          destination: sckw-sms
-          content-type: application/json
-          binder: defaultRabbit
-          group: sckw
-        sckwSms-out-0:
-          destination: sckw-sms
-          content-type: application/json
-          default-binder: defaultRabbit
-          group: sckw
-        sckwMessage-in-0:
-          destination: sckw-message
-          content-type: application/json
-          binder: defaultRabbit
-          group: sckw
-        sckwMessage-out-0:
-          destination: sckw-message
-          content-type: application/json
-          binder: defaultRabbit
-          group: sckw
-  rabbitmq:
-    username: sckw
-    password: Yy123...
-    host: 10.10.10.230
-    port: 5672
-    virtual-host: /
 
 
-# dubbo
-dubbo:
-  application:
-    # 此处没有延用spring.application.name是因为当前项目本身也会注册到nacos中,如果dubbo也延用相同的名称,在nacos服务里会看到注册的producer-server服务数为2
-    name: message-dubbo-server
-  protocol:
-    name: dubbo
-    port: -1
-  registry:
-    # 配置dubbo的注册中心为nacos
-    address: nacos://${spring.cloud.nacos.discovery.server-addr}
-    group: ${spring.cloud.nacos.config.group}
-    protocol: nacos
-    #use-as-config-center: false
-    #use-as-metadata-center: false
-
 
 

+ 5 - 7
sckw-modules/sckw-message/src/main/resources/bootstrap.yml

@@ -11,17 +11,15 @@ spring:
 # Spring
 dubbo:
   application:
-    name: auth-dubbo-server
-    # 该配置在producer-server中是没有的,但是在consumer这里要配置一下
-    # 如果不配置这个QOS的端口,它会延用dubbo自动生成的端口,在启动的时候,QOS注册就会提示该端口已经被使用的错误
-    # 虽然启动时有打印端口已经被使用的错误,但是依旧可以正常启动服务,并且dubbo也可以正常调用,但是为了解决启动报错还是加上这个端口
-    # 这个也是apache官方给出的解决方案,这个端口不能给-1,它不会自动找到一个可用的端口,给-1会报错,端口1-65535自己选择一个
-    qos-port: 3334
+    # 此处没有延用spring.application.name是因为当前项目本身也会注册到nacos中,如果dubbo也延用相同的名称,在nacos服务里会看到注册的producer-server服务数为2
+    name: message-dubbo-server
   protocol:
     name: dubbo
-    # port为-1表示自动找一个可用的端口
     port: -1
   registry:
+    # 配置dubbo的注册中心为nacos
     address: nacos://${spring.cloud.nacos.discovery.server-addr}
     group: ${spring.cloud.nacos.config.group}
     protocol: nacos
+    #use-as-config-center: false
+    #use-as-metadata-center: false

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

@@ -5,7 +5,7 @@
   <select id="findPage" resultType="com.sckw.message.model.KwmMessage" >
     select
       m.id, m.category, m.type, m.title, m.content, m.url, m.params, m.client_type clientType, m.remark,
-      m.status, m.create_by createBy, m.create_time createTime, m.update_by updateBy, m.update_time updateTime
+      mu.status, m.create_by createBy, m.create_time createTime, m.update_by updateBy, m.update_time updateTime
     from kwm_message m
     left join kwm_message_user mu
     on m.id = mu.msg_id