15902849627 2 лет назад
Родитель
Сommit
0e4a28d8a2
19 измененных файлов с 669 добавлено и 17 удалено
  1. 1 1
      sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/SckwMessage.java
  2. 14 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/constant/RedisConstant.java
  3. 17 2
      sckw-modules/sckw-message/src/main/java/com/sckw/message/consumer/SckwMessageConsumer.java
  4. 7 3
      sckw-modules/sckw-message/src/main/java/com/sckw/message/consumer/SckwSmsConsumer.java
  5. 61 2
      sckw-modules/sckw-message/src/main/java/com/sckw/message/controller/MessageController.java
  6. 14 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/dao/KwmMessageMapper.java
  7. 15 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/dao/KwmMessageUserMapper.java
  8. 57 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/KwmMessage.java
  9. 32 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/KwmMessageUser.java
  10. 36 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/DeleteMessagesReqVO.java
  11. 30 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/FindMessagesReqVO.java
  12. 38 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/ReadMessagesReqVO.java
  13. 0 2
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/SendSmsVerifyCoderReqVO.java
  14. 90 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/KwmMessageService.java
  15. 83 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/KwmMessageUserService.java
  16. 106 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/MessageService.java
  17. 63 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwMessageHandlerService.java
  18. 3 4
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwSmsHandlerService.java
  19. 2 3
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SmsService.java

+ 1 - 1
sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/SckwMessage.java

@@ -41,7 +41,7 @@ public class SckwMessage {
     /**
      * 创建人
      */
-    private String createBy;
+    private Long createBy;
 
     /**
      * 推送用户

+ 14 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/constant/RedisConstant.java

@@ -0,0 +1,14 @@
+package com.sckw.message.constant;
+
+/**
+ * @desc: redis常量
+ * @author: yzc
+ * @date: 2023-06-09 11:27
+ */
+public class RedisConstant {
+
+    /**
+     * 短信验证码key
+     */
+    public static final String MESSAGE_SMS_VERIFY_CODE_KEY = "sckw:message:sms:verifyCode:%s";
+}

+ 17 - 2
sckw-modules/sckw-message/src/main/java/com/sckw/message/consumer/SckwMessageConsumer.java

@@ -1,19 +1,34 @@
 package com.sckw.message.consumer;
 
+import com.alibaba.fastjson.JSON;
+import com.sckw.message.service.SckwMessageHandlerService;
 import com.sckw.stream.model.SckwMessage;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 import java.util.function.Consumer;
 
+/**
+ * @desc: message消费相关
+ * @author: yzc
+ * @date: 2023-06-09 15:32
+ */
 @Configuration
+@RequiredArgsConstructor
 @Slf4j
 public class SckwMessageConsumer {
+    private final SckwMessageHandlerService sckwMessageHandlerService;
+
     @Bean
     public Consumer<SckwMessage> sckwMessage() {
-        return person -> {
-            System.out.println("sckwMessage: " + person);
+        return sckwMessage -> {
+            try {
+                sckwMessageHandlerService.handler(sckwMessage);
+            } catch (Exception e) {
+                log.error("处理message消息:{}异常", JSON.toJSONString(sckwMessage), e);
+            }
         };
     }
 }

+ 7 - 3
sckw-modules/sckw-message/src/main/java/com/sckw/message/consumer/SckwSmsConsumer.java

@@ -6,12 +6,16 @@ import com.sckw.stream.model.SckwSms;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Bean;
-import org.springframework.stereotype.Component;
+import org.springframework.context.annotation.Configuration;
 
 import java.util.function.Consumer;
 
-
-@Component
+/**
+ * @desc: 短信消息消费
+ * @author: yzc
+ * @date: 2023-06-09 15:29
+ */
+@Configuration
 @RequiredArgsConstructor
 @Slf4j
 public class SckwSmsConsumer {

+ 61 - 2
sckw-modules/sckw-message/src/main/java/com/sckw/message/controller/MessageController.java

@@ -1,9 +1,68 @@
 package com.sckw.message.controller;
 
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.message.model.vo.req.DeleteMessagesReqVO;
+import com.sckw.message.model.vo.req.FindMessagesReqVO;
+import com.sckw.message.model.vo.req.ReadMessagesReqVO;
+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;
+
 /**
+ * @desc: 消息相关接口
  * @author: yzc
- * @date: 2023-06-08 10:58
- * @description:
+ * @date: 2023-06-09 15:13
+ * @param
+ * @return
  */
+@RestController
+@RequestMapping(value = "/kwmMessage")
+@RequiredArgsConstructor
 public class MessageController {
+
+    private final MessageService messageService;
+
+    /**
+     * @desc: 查找消息集合
+     * @author: yzc
+     * @date: 2023-06-09 15:12
+     * @param findMessagesReqVO
+     * @return com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/selectList", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult selectList(@RequestBody @Valid FindMessagesReqVO findMessagesReqVO) {
+        return HttpResult.ok(messageService.selectMessages(findMessagesReqVO));
+    }
+
+    /**
+     * @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) {
+        messageService.read(readMessagesReqVO);
+        return HttpResult.ok();
+    }
+
+    /**
+     * @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) {
+        messageService.delete(deleteMessagesReqVO);
+        return HttpResult.ok();
+    }
+
 }

+ 14 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/dao/KwmMessageMapper.java

@@ -0,0 +1,14 @@
+package com.sckw.message.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.message.model.KwmMessage;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @desc: 消息mapper
+ * @author: yzc
+ * @date: 2023-06-09 11:08
+ */
+@Mapper
+public interface KwmMessageMapper extends BaseMapper<KwmMessage> {
+}

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

@@ -0,0 +1,15 @@
+package com.sckw.message.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.message.model.KwmMessageUser;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @desc: 用户消息mapper
+ * @author: yzc
+ * @date: 2023-06-09 11:08
+ */
+@Mapper
+public interface KwmMessageUserMapper extends BaseMapper<KwmMessageUser> {
+
+}

+ 57 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/KwmMessage.java

@@ -0,0 +1,57 @@
+package com.sckw.message.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.sckw.core.model.base.BaseModel;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @author: yzc
+ * @date: 2023-06-08 15:44
+ * @description: 消息发送记录
+ */
+@Getter
+@Setter
+@ToString
+@Builder
+@TableName("kwm_message")
+public class KwmMessage extends BaseModel {
+    /**
+     * 消息分类
+     */
+    private String category;
+
+    /**
+     * 消息类型
+     */
+    private String type;
+
+    /**
+     * 消息标题
+     */
+    private String title;
+
+    /**
+     * 消息内容
+     */
+    private String content;
+
+    /**
+     * 消息跳转url
+     */
+    private String url;
+
+    /**
+     * 消息跳转参数
+     */
+    private String params;
+
+    /**
+     * 推送设备类型
+     */
+    private String clientType;
+
+
+}

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

@@ -0,0 +1,32 @@
+package com.sckw.message.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.sckw.core.model.base.BaseModel;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @author: yzc
+ * @date: 2023-06-08 15:44
+ * @description: 用户消息推送记录
+ */
+@Getter
+@Setter
+@ToString
+@Builder
+@TableName("kwm_message_user")
+public class KwmMessageUser extends BaseModel {
+    /**
+     * 消息id
+     */
+    private Long msgId;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+
+}

+ 36 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/DeleteMessagesReqVO.java

@@ -0,0 +1,36 @@
+package com.sckw.message.model.vo.req;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
+
+import java.util.List;
+
+/**
+ * @desc: 删除消息请求参数
+ * @author: yzc
+ * @date: 2023-06-09 11:34
+ */
+@Getter
+@Setter
+@ToString
+public class DeleteMessagesReqVO {
+
+    /**
+     * 消息分类
+     */
+    @NotBlank(message = "消息分类不能为空")
+    private String category;
+
+    /**
+     * 消息类型
+     */
+    @NotBlank(message = "消息类型不能为空")
+    private String type;
+
+    /**
+     * 消息ids,不传则删除全部
+     */
+    private List<Long> msgIds;
+}

+ 30 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/FindMessagesReqVO.java

@@ -0,0 +1,30 @@
+package com.sckw.message.model.vo.req;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
+
+/**
+ * @desc: 查找消息列表请求参数
+ * @author: yzc
+ * @date: 2023-06-09 11:34
+ */
+@Getter
+@Setter
+@ToString
+public class FindMessagesReqVO {
+
+    /**
+     * 消息分类
+     */
+    @NotBlank(message = "消息分类不能为空")
+    private String category;
+
+    /**
+     * 消息类型
+     */
+    private String type;
+
+
+}

+ 38 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/ReadMessagesReqVO.java

@@ -0,0 +1,38 @@
+package com.sckw.message.model.vo.req;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
+
+import java.util.List;
+
+/**
+ * @desc: 读取消息请求参数
+ * @author: yzc
+ * @date: 2023-06-09 11:34
+ */
+@Getter
+@Setter
+@ToString
+public class ReadMessagesReqVO {
+
+    /**
+     * 消息分类
+     */
+    @NotBlank(message = "消息分类不能为空")
+    private String category;
+
+    /**
+     * 消息类型
+     */
+    @NotBlank(message = "消息类型不能为空")
+    private String type;
+
+    /**
+     * 消息id集合 不传则更新全部为已读
+     */
+    private List<Long> msgIds;
+
+
+}

+ 0 - 2
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/SendSmsVerifyCoderReqVO.java

@@ -6,7 +6,6 @@ import jakarta.validation.constraints.Pattern;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import lombok.experimental.Accessors;
 
 /**
  * @author: yzc
@@ -17,7 +16,6 @@ import lombok.experimental.Accessors;
 @Getter
 @Setter
 @ToString
-@Accessors(chain = true)
 public class SendSmsVerifyCoderReqVO {
 
     @NotBlank(message = "手机号不能为空!")

+ 90 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/KwmMessageService.java

@@ -0,0 +1,90 @@
+package com.sckw.message.service;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.KwmMessage;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @desc: 消息相关service
+ * @author: yzc
+ * @date: 2023-06-09 10:58
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class KwmMessageService {
+
+    private final KwmMessageMapper kwmMessageMapper;
+
+
+    /**
+     * @desc: 根据条件获取消息列表
+     * @author: yzc
+     * @date: 2023-06-09 14:27
+     * @param msgIds, category, type, status
+     * @return java.util.List<com.sckw.message.model.KwmMessage>
+     */
+    public List<KwmMessage> getList(List<Long> msgIds, String category, String type, Integer status) {
+        LambdaQueryWrapper<KwmMessage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(CollectionUtils.isNotEmpty(msgIds), KwmMessage::getId, msgIds)
+                .eq(StringUtils.isNotBlank(category), KwmMessage::getCategory, category)
+                .eq(StringUtils.isNotBlank(type), KwmMessage::getType, type)
+                .eq(Objects.nonNull(status), KwmMessage::getStatus, status)
+                .eq(KwmMessage::getDelFlag, 0).orderByAsc(KwmMessage::getStatus).orderByDesc(KwmMessage::getCreateTime);
+
+        return CollectionUtil.emptyIfNull(kwmMessageMapper.selectList(wrapper));
+    }
+
+
+    /**
+     * @desc: 更新已读根据消息ids
+     * @author: yzc
+     * @date: 2023-06-09 14:36
+     * @param msgIds
+     * @return void
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void readByMsgIds(List<Long> msgIds) {
+        LambdaUpdateWrapper<KwmMessage> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(KwmMessage::getStatus, 1).in(KwmMessage::getId, msgIds);
+        kwmMessageMapper.update(null, wrapper);
+    }
+
+    /**
+     * @desc: 根据ids删除
+     * @author: yzc
+     * @date: 2023-06-09 15:08
+     * @param ids
+     * @return void
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void delByMsgIds(List<Long> ids) {
+        LambdaUpdateWrapper<KwmMessage> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(KwmMessage::getDelFlag, 1).in(KwmMessage::getId, ids);
+        kwmMessageMapper.update(null, wrapper);
+    }
+
+    /**
+     * @desc: 插入消息
+     * @author: yzc
+     * @date: 2023-06-09 15:49
+     * @param kwmMessage
+     * @return java.lang.Long
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Long insert(KwmMessage kwmMessage) {
+        kwmMessageMapper.insert(kwmMessage);
+        return kwmMessage.getId();
+    }
+}

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

@@ -0,0 +1,83 @@
+package com.sckw.message.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.message.dao.KwmMessageUserMapper;
+import com.sckw.message.model.KwmMessageUser;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @desc: 用户消息相关service
+ * @author: yzc
+ * @date: 2023-06-09 10:58
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class KwmMessageUserService {
+
+    private final KwmMessageUserMapper kwmMessageUserMapper;
+
+    /**
+     * @desc: 获取用户未删除消息ids
+     * @author: yzc
+     * @date: 2023-06-09 14:24
+     * @param userId
+     * @return java.lang.Long
+     */
+    public List<Long> getMsgIdsByUserId(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();
+    }
+
+    /**
+     * @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) {
+        LambdaUpdateWrapper<KwmMessageUser> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(KwmMessageUser::getStatus, 1)
+                .eq(KwmMessageUser::getUserId, userId).in(KwmMessageUser::getMsgId, msgIds);
+        kwmMessageUserMapper.update(null, wrapper);
+    }
+
+    /**
+     * @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) {
+        LambdaUpdateWrapper<KwmMessageUser> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(KwmMessageUser::getDelFlag, 1)
+                .eq(KwmMessageUser::getUserId, userId).in(KwmMessageUser::getMsgId, msgIds);
+        kwmMessageUserMapper.update(null, wrapper);
+    }
+
+
+    /**
+     * @desc: 批量插入
+     * @author: yzc
+     * @date: 2023-06-09 15:58
+     * @param messageUsers
+     * @return void
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void batchSave(List<KwmMessageUser> messageUsers) {
+        messageUsers.forEach(kwmMessageUserMapper::insert);
+    }
+}

+ 106 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/MessageService.java

@@ -0,0 +1,106 @@
+package com.sckw.message.service;
+
+import com.sckw.core.utils.CollectionUtils;
+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;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @desc: 消息相关service
+ * @author: yzc
+ * @date: 2023-06-09 10:58
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class MessageService {
+
+    private final KwmMessageService kwmMessageService;
+    private final KwmMessageUserService kwmMessageUserService;
+
+
+    /**
+     * @desc: 查询消息列表
+     * @author: yzc
+     * @date: 2023-06-09 14:21
+     * @param params
+     * @return java.util.List<com.sckw.message.model.KwmMessage>
+     */
+    public List<KwmMessage> selectMessages(FindMessagesReqVO params) {
+        //TODO 当前线程获取用户id
+        List<Long> msgIds = kwmMessageUserService.getMsgIdsByUserId(1L);
+        if (CollectionUtils.isEmpty(msgIds)) {
+            return Collections.emptyList();
+        }
+        return kwmMessageService.getList(msgIds, params.getCategory(), params.getType(), null);
+    }
+
+    /**
+     * @desc: 更新消息已读
+     * @author: yzc
+     * @date: 2023-06-09 14:20
+     * @param reqVO
+     * @return void
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void read(ReadMessagesReqVO reqVO) {
+        //TODO 当前线程获取用户id
+        List<Long> msgIds = kwmMessageUserService.getMsgIdsByUserId(1L);
+        if (CollectionUtils.isEmpty(msgIds)){
+            return;
+        }
+        List<Long> ids = reqVO.getMsgIds();
+        if (CollectionUtils.isNotEmpty(ids)) {
+            List<Long> list = ids.stream().filter(msgIds::contains).toList();
+            kwmMessageUserService.readByUserAndMsgIds(1L, list);
+            kwmMessageService.readByMsgIds(list);
+        } else {
+            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);
+        }
+    }
+
+    /**
+     * @desc: 删除消息
+     * @author: yzc
+     * @date: 2023-06-09 14:20
+     * @param reqVO
+     * @return void
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void delete(DeleteMessagesReqVO reqVO) {
+        //TODO 当前线程获取用户id
+        List<Long> msgIds = kwmMessageUserService.getMsgIdsByUserId(1L);
+        if (CollectionUtils.isEmpty(msgIds)){
+            return;
+        }
+        List<Long> ids = reqVO.getMsgIds();
+        if (CollectionUtils.isNotEmpty(ids)) {
+            List<Long> list = ids.stream().filter(msgIds::contains).toList();
+            kwmMessageUserService.delByUserAndMsgIds(1L, list);
+            kwmMessageService.delByMsgIds(list);
+        }else {
+            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);
+        }
+    }
+}

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

@@ -0,0 +1,63 @@
+package com.sckw.message.service;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
+import com.sckw.core.utils.StringUtils;
+import com.sckw.message.model.KwmMessage;
+import com.sckw.message.model.KwmMessageUser;
+import com.sckw.stream.enums.MessageEnum;
+import com.sckw.stream.model.SckwMessage;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @desc: message消息处理service
+ * @author: yzc
+ * @date: 2023-06-09 11:01
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class SckwMessageHandlerService {
+
+    private final KwmMessageService kwmMessageService;
+    private final KwmMessageUserService kwmMessageUserService;
+
+
+    /**
+     * @param sckwMessage
+     * @return void
+     * @desc: message消息处理
+     * @author: yzc
+     * @date: 2023-06-09 15:33
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void handler(SckwMessage sckwMessage) {
+        String userIds = sckwMessage.getUserIds();
+        if (StringUtils.isBlank(userIds)) {
+            log.error("message消息处理用户id为空,不处理");
+            return;
+        }
+        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())
+                .params(JSON.toJSONString(sckwMessage.getParams())).build();
+        kwmMessage.setStatus(0);
+        kwmMessage.setCreateBy(sckwMessage.getCreateBy());
+        Long msgId = kwmMessageService.insert(kwmMessage);
+        List<String> userIdList = Arrays.asList(userIds.split(","));
+        List<KwmMessageUser> messageUsers = Lists.newArrayList();
+        userIdList.forEach(e -> {
+            KwmMessageUser messageUser = KwmMessageUser.builder().userId(Long.valueOf(e)).msgId(msgId).build();
+            messageUser.setStatus(0);
+            messageUser.setCreateBy(sckwMessage.getCreateBy());
+            messageUsers.add(messageUser);
+        });
+        kwmMessageUserService.batchSave(messageUsers);
+    }
+}

+ 3 - 4
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwSmsHandlerService.java

@@ -1,6 +1,7 @@
 package com.sckw.message.service;
 
 import com.alibaba.fastjson2.JSON;
+import com.sckw.message.constant.RedisConstant;
 import com.sckw.message.model.KwmSms;
 import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.stream.enums.SmsCodeEnum;
@@ -22,13 +23,11 @@ public class SckwSmsHandlerService {
 
     private final KwmSmsService kwmSmsService;
 
-    private static final String MESSAGE_SMS_VERIFY_CODE_KEY = "sckw:message:sms:verifyCode:%s";
-
     public void handler(SckwSms sckwSms) {
         log.info("接收到发送短信消息:{},开始处理", JSON.toJSONString(sckwSms));
         String key = getMessageSmsVerifyCodeKey(sckwSms.getTelephone());
         Long effectiveTime = sckwSms.getEffectiveTime();
-        if (Boolean.FALSE.equals(RedissonUtils.tryLock(key, 10L, effectiveTime))){
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(key, 10L, effectiveTime))) {
             log.info("重复发送短信消息,不处理");
             return;
         }
@@ -44,6 +43,6 @@ public class SckwSmsHandlerService {
     }
 
     private String getMessageSmsVerifyCodeKey(String phone) {
-        return String.format(MESSAGE_SMS_VERIFY_CODE_KEY, phone);
+        return String.format(RedisConstant.MESSAGE_SMS_VERIFY_CODE_KEY, phone);
     }
 }

+ 2 - 3
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SmsService.java

@@ -3,6 +3,7 @@ package com.sckw.message.service;
 import com.alibaba.fastjson2.JSON;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.utils.NumberUtils;
+import com.sckw.message.constant.RedisConstant;
 import com.sckw.message.model.vo.req.SendSmsVerifyCoderReqVO;
 import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.stream.enums.SmsCodeEnum;
@@ -27,8 +28,6 @@ public class SmsService {
 
     private final StreamBridge streamBridge;
 
-    private static final String MESSAGE_SMS_VERIFY_CODE_KEY = "sckw:message:sms:verifyCode:%s";
-
     public void sendVerifyCode(SendSmsVerifyCoderReqVO param) {
         String phone = param.getPhone();
         // 防重攻击
@@ -53,6 +52,6 @@ public class SmsService {
     }
 
     private String getMessageSmsVerifyCodeKey(String phone) {
-        return String.format(MESSAGE_SMS_VERIFY_CODE_KEY, phone);
+        return String.format(RedisConstant.MESSAGE_SMS_VERIFY_CODE_KEY, phone);
     }
 }