Răsfoiți Sursa

1.消息列表、统计、已读接口调整
2.订单下单、驳回订单发送提醒消息

yzc 2 ani în urmă
părinte
comite
d39ea89318
22 a modificat fișierele cu 502 adăugiri și 242 ștergeri
  1. 2 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java
  2. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java
  3. 34 79
      sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/enums/MessageEnum.java
  4. 6 2
      sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/SckwMessage.java
  5. 22 0
      sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/UserInfo.java
  6. 3 29
      sckw-modules/sckw-message/src/main/java/com/sckw/message/controller/MessageController.java
  7. 4 3
      sckw-modules/sckw-message/src/main/java/com/sckw/message/dao/KwmMessageMapper.java
  8. 5 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/KwmMessageUser.java
  9. 91 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/dto/MessageListDTO.java
  10. 7 2
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/dto/SelectMessagesDTO.java
  11. 4 13
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/ReadMessagesReqVO.java
  12. 6 3
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/SelectMessagesReqVO.java
  13. 0 5
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/StatisticsMessagesReqVO.java
  14. 10 14
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/res/KwmMessageListResVO.java
  15. 4 3
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/KwmMessageService.java
  16. 44 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/KwmMessageUserService.java
  17. 44 51
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/MessageService.java
  18. 13 11
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwMessageHandlerService.java
  19. 18 11
      sckw-modules/sckw-message/src/main/resources/mapper/KwmMessageMapper.xml
  20. 2 0
      sckw-modules/sckw-message/src/main/resources/mapper/KwmMessageUserMapper.xml
  21. 22 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/OrderCheckDTO.java
  22. 160 16
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

+ 2 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java

@@ -18,6 +18,8 @@ public enum DictEnum {
     /**
      *
      */
+    SYSTEM_MSG("msg_category", "SYSTEM", "系统消息"),
+    BUSINESS_MSG("msg_category", "BUSINESS", "业务消息"),
     SMS_REGISTER("send_sms_type", "register", "短信注册"),
     SMS_LOGIN("send_sms_type", "login", "短信登录"),
     SMS_UPDATE_PASSWORD("send_sms_type", "updatePassword", "短信修改密码"),

+ 1 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java

@@ -11,6 +11,7 @@ import lombok.Getter;
 @Getter
 @AllArgsConstructor
 public enum DictTypeEnum {
+    MSG_CATEGORY("msg_category", "消息分类"),
     SEND_SMS_TYPE("send_sms_type", "发送短信类型"),
     INTEGRAL_TYPE("integral_type", "积分类型"),
     UNIT_TYPE("unit_type", "商品单位类型"),

+ 34 - 79
sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/enums/MessageEnum.java

@@ -1,78 +1,73 @@
 package com.sckw.stream.enums;
 
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
 /**
  * @author zk
  * @description 短信模板
  * @date 2020/06/16 08:37:44
  */
+@AllArgsConstructor
+@Getter
 public enum MessageEnum {
-    /**SYSTEM 系统消息、BUSINESS业务消息、INDUSTRY行业消息**/
-    XXXXXX("SYSTEM", "xxxxx", "xxxx", "xxxxxx","terminal"),
-    XXXXXX1("BUSINESS", "xxxxx", "xxxx", "xxxxxx","terminal"),
-
-    //认证通过
-    AUDIT_PASS("SYSTEM","SYSTEM_ENT_APPR","认证通过通知","审核通过!您的资质已认证成功,危品汇欢迎您的入驻!","terminal,ios,android"),
-    //委托单-指派成功
-    RECEIVE_ASSIGN_ENTRUST("BUSINESS", "BUSINESS_RECEIVE_ASSIGN_ENTRUST", "新委托单通知",
-            "${firmName}委托承运:从${loadAddress}至${unloadAddress},承运${supplyName},委托量${weight}吨,运价${price}!","terminal,ios,android"),
-
     /**
-     * 新销售订单(有新的待受理订单)
+     * 采发起采购下单
      */
-    NEW_SALE_ORDER("BUSINESS", "BUSINESS_TORDER_NEW_SALE", "有新的待受理订单",
-                                   "${firmName}发起采购,请及时进行受理;订单号:${orderNo}","terminal,ios,android"),
-
+    ORDER_INITIATE_PURCHASE("BUSINESS", "BUSINESS_ORDER_INITIATE_PURCHASE", "发起采购下单",
+            "贵司发起了对【${firmName}】的商品采购申请,请留意后续消息;订单号:${orderNo}","terminal,ios,android"),
+    /**
+     * 有新的待受理订单
+     */
+    ORDER_NEW_PENDING("BUSINESS", "BUSINESS_TORDER_NEW_PENDING", "有新的待受理订单",
+                                   "【${firmName}】发起采购申请,请及时进行受理;订单号:${orderNo}","terminal,ios,android"),
+    /**
+     * 发起代客下单
+     */
+    ORDER_INITIATE_SALE("BUSINESS", "BUSINESS_TORDER_INITIATE_SALE", "发起代客下单",
+                           "贵司已代【${firmName}】发起了商品采购,请及时联系往来单位;订单号:${orderNo}","terminal,ios,android"),
     /**
-     * 新采购订单(有新的代客下单信息)
+     * 有新的代客下单信息
      */
-    NEW_PURCHASE_ORDER("BUSINESS", "BUSINESS_TORDER_NEW_PURCHASE", "有新的代客下单信息",
-                           "${firmName}代您发起了商品采购,请确认;订单号:${orderNo}","terminal,ios,android"),
+    ORDER_NEW_VALET_MSG("BUSINESS", "BUSINESS_TORDER_NEW_VALET_MSG", "有新的代客下单信息",
+            "【${firmName}】代您发起了商品采购,请确认;订单号:${orderNo}","terminal,ios,android"),
+    /**
+     * 驳回采购订单
+     */
+    ORDER_REJECT_VALET("BUSINESS", "BUSINESS_TORDER_REJECT_VALET", "驳回采购订单",
+            "贵司驳回了【${firmName}】的采购申请,请及时通知采购单位;订单号:${orderNo}","terminal,ios,android"),
     /**
      * 采购订单被驳回
      */
-    REJECT_PURCHASE_ORDER("BUSINESS", "BUSINESS_TORDER_REJECT_PURCHASE", "采购订单被驳回",
-            "您的采购申请被${firmName}驳回,请及时查看;订单号:${orderNo}","terminal,ios,android"),
+    ORDER_REJECT_PURCHASE("BUSINESS", "BUSINESS_TORDER_REJECT_PURCHASE", "采购订单被驳回",
+            "您的采购申请被${firmName}驳回,请及时查看;订单号:${orderNo}","terminal,ios,android"),
     ;
 
     /**
-     * 消息分类
+     * 消息分类:BUSINESS业务消息,SYSTEM系统消息
      */
-    private String category;
+    private final String category;
 
     /**
      * 消息类型
      */
-    private String type;
+    private final String type;
 
     /**
      * 消息标题
      */
-    private String title;
+    private final String title;
 
     /**
      * 消息内容
      */
-    private String content;
+    private final String content;
 
     /**
      * 显示终端 terminal ios android
      */
-    private String pushType;
+    private final String pushType;
 
-    /**
-     * @description 构造方法
-     * @author zk
-     * @date 2020/6/08 11:28
-     * @param category 消息分类, type 消息类型, title 消息标题, content 消息内容
-     * @return
-     **/
-    private MessageEnum(String category, String type, String title, String content, String pushType) {
-        this.category = category;
-        this.type = type;
-        this.title = title;
-        this.content = content;
-        this.pushType = pushType;
-    }
 
     public static String getCategoryByType(String type) {
         for (MessageEnum entityEnum : MessageEnum.values()) {
@@ -100,44 +95,4 @@ public enum MessageEnum {
         }
         return null;
     }
-
-    public String getCategory() {
-        return category;
-    }
-
-    public void setCategory(String category) {
-        this.category = category;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getContent() {
-        return content;
-    }
-
-    public void setContent(String content) {
-        this.content = content;
-    }
-
-    public String getPushType() {
-        return pushType;
-    }
-
-    public void setPushType(String pushType) {
-        this.pushType = pushType;
-    }
 }

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

@@ -4,9 +4,12 @@ import com.sckw.stream.enums.MessageEnum;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
+
 /**
  * @desc: message消费对象
  * @author: yzc
@@ -15,6 +18,7 @@ import java.util.Map;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
+@Accessors(chain = true)
 public class SckwMessage {
 
     /**
@@ -53,9 +57,9 @@ public class SckwMessage {
     private Long createBy;
 
     /**
-     * 推送用户
+     * 推送用户信息
      */
-    private String userIds;
+    private List<UserInfo> userInfos;
 
     /**
      * 移动端推送

+ 22 - 0
sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/UserInfo.java

@@ -0,0 +1,22 @@
+package com.sckw.stream.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+/**
+ * @desc: 用户信息
+ * @author: yzc
+ * @date: 2023-09-01 16:59
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+public class UserInfo {
+
+    private Long userId;
+
+    private Long entId;
+}

+ 3 - 29
sckw-modules/sckw-message/src/main/java/com/sckw/message/controller/MessageController.java

@@ -8,7 +8,6 @@ import com.sckw.core.web.response.HttpResult;
 import com.sckw.message.model.KwmMessage;
 import com.sckw.message.model.vo.req.*;
 import com.sckw.message.model.vo.res.KwmMessageListResVO;
-import com.sckw.message.model.vo.res.MessagesStatisticsResVO;
 import com.sckw.message.service.MessageService;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
@@ -66,9 +65,9 @@ public class MessageController {
      * @Param params:
      * @return: com.sckw.core.web.response.HttpResult
      */
-    @PostMapping(value = "/statisticsList", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult statisticsList(@RequestBody @Valid StatisticsMessagesReqVO params) {
-        return HttpResult.ok("消息列表统计查询成功", messageService.statisticsList(params));
+    @PostMapping(value = "/statistic", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult statistic(@RequestBody @Valid StatisticsMessagesReqVO params) {
+        return HttpResult.ok("消息列表统计查询成功", messageService.statistics(params));
     }
 
     /**
@@ -97,29 +96,4 @@ public class MessageController {
         return HttpResult.ok("删除消息成功");
     }
 
-    /**
-     * @param category
-     * @return com.sckw.core.web.response.HttpResult
-     * @desc: 消息统计查询
-     * @author: yzc
-     * @date: 2023-06-14 10:54
-     */
-    @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
-     */
-    @PostMapping(value = "/findList", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult findList(@RequestBody FindMessagesReqVO findMessagesReqVO) {
-        return HttpResult.ok("查找消息集合", messageService.selectMessages(findMessagesReqVO));
-    }
-
 }

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

@@ -1,8 +1,9 @@
 package com.sckw.message.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.sckw.message.model.dto.SelectMessagesDTO;
 import com.sckw.message.model.KwmMessage;
+import com.sckw.message.model.dto.MessageListDTO;
+import com.sckw.message.model.dto.SelectMessagesDTO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -20,7 +21,7 @@ public interface KwmMessageMapper extends BaseMapper<KwmMessage> {
      * @author: yzc
      * @date: 2023-06-13 9:11
      * @param item
-     * @return java.util.List<com.sckw.message.model.KwmMessage>
+     * @return java.util.List<com.sckw.message.model.dto.MessageListDTO>
      */
-    List<KwmMessage> findPage(@Param("item") SelectMessagesDTO item);
+    List<MessageListDTO> findPage(@Param("item") SelectMessagesDTO item);
 }

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

@@ -28,6 +28,11 @@ public class KwmMessageUser extends BaseModel {
      */
     private Long msgId;
 
+    /**
+     * 一级企业id
+     */
+    private Long entId;
+
     /**
      * 用户id
      */

+ 91 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/dto/MessageListDTO.java

@@ -0,0 +1,91 @@
+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;
+
+/**
+ * @author: yzc
+ * @date: 2023-06-08 15:44
+ * @description: 消息列表dto
+ */
+@Getter
+@Setter
+@ToString
+public class MessageListDTO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 4676530802038232669L;
+
+    /**
+     * kwm_message_user id
+     */
+    private Long id;
+
+    private Long entId;
+
+    private Long userId;
+
+    private Integer status;
+
+    private String remark;
+
+    private Long createBy;
+
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    private Long updateBy;
+
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     * kwm_message id
+     */
+    private Long msgId;
+
+    /**
+     * 消息分类
+     */
+    private String category;
+
+    /**
+     * 消息类型
+     */
+    private String type;
+
+    /**
+     * 消息标题
+     */
+    private String title;
+
+    /**
+     * 消息内容
+     */
+    private String content;
+
+    /**
+     * 消息跳转url
+     */
+    private String url;
+
+    /**
+     * 消息跳转参数
+     */
+    private String params;
+
+    /**
+     * 推送设备类型
+     */
+    private String clientType;
+
+    private String msgRemark;
+
+
+}

+ 7 - 2
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/dto/SelectMessagesDTO.java

@@ -19,6 +19,11 @@ import java.util.Date;
 @Builder
 public class SelectMessagesDTO {
 
+    /**
+     * 一级企业id
+     */
+    private Long entId;
+
     /**
      * 用户id
      */
@@ -30,9 +35,9 @@ public class SelectMessagesDTO {
     private String category;
 
     /**
-     * 消息类型
+     * 消息状态(0未读,1已读)
      */
-    private String type;
+    private Integer status;
 
     /**
      * 创建时间开始(yyyy-MM-dd HH:mm:ss)

+ 4 - 13
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/ReadMessagesReqVO.java

@@ -1,11 +1,10 @@
 package com.sckw.message.model.vo.req;
 
+import jakarta.validation.constraints.NotBlank;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
-import java.util.List;
-
 /**
  * @desc: 读取消息请求参数
  * @author: yzc
@@ -16,20 +15,12 @@ import java.util.List;
 @ToString
 public class ReadMessagesReqVO {
 
-    /**
-     * 消息分类
-     */
-    private String category;
-
-    /**
-     * 消息类型
-     */
-    private String type;
 
     /**
-     * 消息id集合 不传则更新全部为已读
+     * 消息ids
      */
-    private List<Long> msgIds;
+    @NotBlank(message = "消息ids不能为空")
+    private String ids;
 
 
 }

+ 6 - 3
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/SelectMessagesReqVO.java

@@ -1,5 +1,6 @@
 package com.sckw.message.model.vo.req;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.sckw.core.model.page.PageRequest;
 import lombok.Getter;
 import lombok.Setter;
@@ -18,23 +19,25 @@ import java.util.Date;
 public class SelectMessagesReqVO extends PageRequest {
 
     /**
-     * 消息
+     * 消息类
      */
     private String category;
 
     /**
-     * 消息类型
+     * 消息状态(0未读,1已读)
      */
-    private String type;
+    private Integer status;
 
     /**
      * 创建时间开始(yyyy-MM-dd HH:mm:ss)
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date startCreateTime;
 
     /**
      * 创建时间结束(yyyy-MM-dd HH:mm:ss)
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endCreateTime;
 
 

+ 0 - 5
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/StatisticsMessagesReqVO.java

@@ -21,11 +21,6 @@ public class StatisticsMessagesReqVO {
      */
     private String category;
 
-    /**
-     * 消息类型
-     */
-    private String type;
-
     /**
      * 创建时间开始(yyyy-MM-dd HH:mm:ss)
      */

+ 10 - 14
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/res/KwmMessageListResVO.java

@@ -28,10 +28,7 @@ public class KwmMessageListResVO {
      */
     private String category;
 
-    /**
-     * 消息类型
-     */
-    private String type;
+    private String categoryLabel;
 
     /**
      * 消息标题
@@ -49,25 +46,24 @@ public class KwmMessageListResVO {
     private String url;
 
     /**
-     * 消息跳转参数
+     * 创建时间
      */
-    private String params;
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
 
     /**
-     * 推送设备类型
+     * 提交人
      */
-    private String clientType;
+    private Long creatBy;
 
     /**
-     * 创建时间
+     * 提交人姓名
      */
-    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private Date createTime;
+    private String createByName;
 
     /**
-     * 更新时间
+     * 提交人部门
      */
-    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private Date updateTime;
+    private String createByDept;
 
 }

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

@@ -6,8 +6,9 @@ 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.dto.SelectMessagesDTO;
 import com.sckw.message.model.KwmMessage;
+import com.sckw.message.model.dto.MessageListDTO;
+import com.sckw.message.model.dto.SelectMessagesDTO;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -91,12 +92,12 @@ public class KwmMessageService {
 
     /**
      * @param dto
-     * @return java.util.List<com.sckw.message.model.KwmMessage>
+     * @return java.util.List<com.sckw.message.model.dto.MessageListDTO>
      * @desc: 分页查询
      * @author: yzc
      * @date: 2023-06-13 9:08
      */
-    public List<KwmMessage> findPage(SelectMessagesDTO dto) {
+    public List<MessageListDTO> findPage(SelectMessagesDTO dto) {
         return kwmMessageMapper.findPage(dto);
     }
 

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

@@ -2,7 +2,9 @@ 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.model.constant.Global;
 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 lombok.RequiredArgsConstructor;
@@ -11,6 +13,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @desc: 用户消息相关service
@@ -106,4 +109,45 @@ public class KwmMessageUserService {
                 .eq(KwmMessageUser::getDelFlag, 0).last("LIMIT 1");
         return kwmMessageUserMapper.selectOne(wrapper);
     }
+
+    /**
+     * @desc: 根据msgIds获取
+     * @author: yzc
+     * @date: 2023-09-04 11:50
+     * @Param ids:
+     * @return: java.util.List<com.sckw.message.model.KwmMessageUser>
+     */
+    public List<KwmMessageUser> getByMsgIds(List<Long> ids) {
+        LambdaQueryWrapper<KwmMessageUser> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(KwmMessageUser::getId, ids)
+                .eq(KwmMessageUser::getDelFlag, Global.NO);
+        Integer isMain = LoginUserHolder.getIsMain();
+        if (Objects.equals(isMain, 1)) {
+            wrapper.eq(KwmMessageUser::getEntId, LoginUserHolder.getEntId());
+        } else {
+            wrapper.eq(KwmMessageUser::getUserId, LoginUserHolder.getUserId());
+        }
+        List<KwmMessageUser> list = kwmMessageUserMapper.selectList(wrapper);
+        return CollectionUtils.emptyIfNull(list);
+    }
+
+    /**
+     * @desc: 根据msgIds更新状态
+     * @author: yzc
+     * @date: 2023-09-04 11:56
+     * @Param ids:
+     * @return: void
+     */
+    public void readByMsgIds(List<Long> ids) {
+        LambdaUpdateWrapper<KwmMessageUser> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(KwmMessageUser::getStatus, Global.YES)
+                .in(KwmMessageUser::getId, ids);
+        Integer isMain = LoginUserHolder.getIsMain();
+        if (Objects.equals(isMain, 1)) {
+            wrapper.eq(KwmMessageUser::getEntId, LoginUserHolder.getEntId());
+        } else {
+            wrapper.eq(KwmMessageUser::getUserId, LoginUserHolder.getUserId());
+        }
+        kwmMessageUserMapper.update(null, wrapper);
+    }
 }

+ 44 - 51
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/MessageService.java

@@ -1,5 +1,8 @@
 package com.sckw.message.service;
 
+import com.sckw.core.common.enums.enums.DictEnum;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.vo.TableBottom;
 import com.sckw.core.model.vo.TableStatisticRes;
@@ -11,12 +14,18 @@ import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.message.enums.MsgStatusEnum;
 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.vo.res.KwmMessageListResVO;
 import com.sckw.message.model.vo.res.MessagesStatisticsResVO;
+import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import com.sckw.system.api.model.pojo.DeptInfoPojo;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -36,31 +45,9 @@ public class MessageService {
     private final KwmMessageService kwmMessageService;
     private final KwmMessageUserService kwmMessageUserService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
 
-    /**
-     * @param params
-     * @return java.util.List<com.sckw.message.model.KwmMessage>
-     * @desc: 查询消息列表
-     * @author: yzc
-     * @date: 2023-06-09 14:21
-     */
-    public List<KwmMessage> selectMessages(FindMessagesReqVO params) {
-        List<KwmMessageUser> messageUsers = kwmMessageUserService.getByUserId(LoginUserHolder.getUserId());
-        Map<Long, KwmMessageUser> map = messageUsers.stream().collect(Collectors.toMap(KwmMessageUser::getMsgId, e -> e, (k1, k2) -> k1));
-        if (CollectionUtils.isEmpty(map)) {
-            return Collections.emptyList();
-        }
-        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;
-    }
 
     /**
      * @param reqVO
@@ -71,25 +58,12 @@ public class MessageService {
      */
     @Transactional(rollbackFor = Exception.class)
     public void read(ReadMessagesReqVO reqVO) {
-        Long userId = LoginUserHolder.getUserId();
-        List<Long> msgIds = kwmMessageUserService.getMsgIdsByUserId(userId);
-        if (CollectionUtils.isEmpty(msgIds)) {
-            return;
-        }
-        List<Long> ids = reqVO.getMsgIds();
-        //msgIds不为空直接更新用户消息为已读
-        if (CollectionUtils.isNotEmpty(ids)) {
-            List<Long> list = ids.stream().filter(msgIds::contains).toList();
-            kwmMessageUserService.readByUserAndMsgIds(userId, 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(userId, updateMsgIds);
+        List<Long> ids = StringUtils.splitStrToList(reqVO.toString(), Long.class);
+        List<KwmMessageUser> msgList = kwmMessageUserService.getByMsgIds(ids);
+        if (!Objects.equals(ids.size(), msgList.size())) {
+            throw new BusinessException("无权限读取消息!");
         }
+        kwmMessageUserService.readByMsgIds(ids);
     }
 
     /**
@@ -131,15 +105,34 @@ public class MessageService {
      */
     public List<KwmMessageListResVO> select(SelectMessagesReqVO reqVO) {
         SelectMessagesDTO dto = BeanUtils.copyProperties(reqVO, SelectMessagesDTO.class);
-        dto.setUserId(LoginUserHolder.getUserId());
-        List<KwmMessage> list = kwmMessageService.findPage(dto);
+        //当前登录人是企业管理员则查看全部消息,否则只查看对应用户消息
+        Integer isMain = LoginUserHolder.getIsMain();
+        if (Objects.equals(isMain, 1)) {
+            dto.setEntId(LoginUserHolder.getEntId());
+        } else {
+            dto.setUserId(LoginUserHolder.getUserId());
+        }
+        List<MessageListDTO> list = kwmMessageService.findPage(dto);
         if (CollectionUtils.isEmpty(list)) {
             return Collections.emptyList();
         }
+        List<Long> userIds = list.stream().map(MessageListDTO::getCreateBy).toList();
+        Map<Long, UserCacheResDto> map = remoteSystemService.queryUserCacheMapByIds(userIds);
         List<KwmMessageListResVO> result = new ArrayList<>(list.size());
         list.forEach(e -> {
+            UserCacheResDto user = map.get(e.getCreateBy());
             KwmMessageListResVO res = BeanUtils.copyProperties(e, KwmMessageListResVO.class);
             res.setStatusLabel(MsgStatusEnum.getNameByCode(res.getStatus()));
+            res.setCategoryLabel(DictEnum.getLabel(DictTypeEnum.MSG_CATEGORY.getType(), e.getCategory()));
+            if (Objects.nonNull(user)) {
+                res.setCreateByName(user.getName());
+                EntCacheResDto entInfo = user.getEntInfo();
+                if (Objects.nonNull(entInfo)) {
+                    //司机有企业信息,没有部门信息
+                    List<DeptInfoPojo> deptInfo = entInfo.getDeptInfo();
+                    res.setCreateByDept(CollectionUtils.isEmpty(deptInfo) ? "司机" : deptInfo.get(0).getName());
+                }
+            }
             result.add(res);
         });
         return result;
@@ -201,15 +194,15 @@ public class MessageService {
      */
     @Transactional(rollbackFor = Exception.class)
     public KwmMessage detail(Long id) {
-        Long userId = LoginUserHolder.getUserId();
-        KwmMessageUser messageUser = kwmMessageUserService.getByMsgIdAndUserId(id, userId);
-        if (Objects.isNull(messageUser)) {
+        List<Long> ids = Collections.singletonList(id);
+        List<KwmMessageUser> msgList = kwmMessageUserService.getByMsgIds(ids);
+        if (CollectionUtils.isEmpty(msgList)) {
             return KwmMessage.builder().build();
         }
-        KwmMessage message = kwmMessageService.getById(id);
-        List<Long> ids = Collections.singletonList(id);
+        KwmMessageUser kwmMessageUser = msgList.get(0);
+        KwmMessage message = kwmMessageService.getById(kwmMessageUser.getMsgId());
         //更新用户消息为已读状态
-        kwmMessageUserService.readByUserAndMsgIds(userId, ids);
+        kwmMessageUserService.readByMsgIds(ids);
         return message;
     }
 
@@ -220,7 +213,7 @@ public class MessageService {
      * @Param params:
      * @return: com.sckw.core.model.vo.TableStatisticRes
      */
-    public TableStatisticRes statisticsList(StatisticsMessagesReqVO params) {
+    public TableStatisticRes statistics(StatisticsMessagesReqVO params) {
         TableStatisticRes res = new TableStatisticRes();
         List<KwmMessageListResVO> messages = this.select(BeanUtils.copyProperties(params, SelectMessagesReqVO.class));
         Map<Integer, List<KwmMessageListResVO>> map = messages.stream().collect(Collectors.groupingBy(KwmMessageListResVO::getStatus));

+ 13 - 11
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwMessageHandlerService.java

@@ -2,6 +2,7 @@ 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.CollectionUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.message.model.KwmMessage;
 import com.sckw.message.model.KwmMessageUser;
@@ -9,12 +10,12 @@ import com.sckw.redis.constant.RedisConstant;
 import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.stream.enums.MessageEnum;
 import com.sckw.stream.model.SckwMessage;
+import com.sckw.stream.model.UserInfo;
 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;
 
 /**
@@ -45,13 +46,14 @@ public class SckwMessageHandlerService {
             log.info("重复message消息:{},不处理", sckwMessage.getRequestId());
             return;
         }
-        String userIds = sckwMessage.getUserIds();
-        if (StringUtils.isBlank(userIds)) {
-            log.error("message消息处理用户id为空,不处理");
+        List<UserInfo> userInfos = sckwMessage.getUserInfos();
+        if (CollectionUtils.isEmpty(userInfos)) {
+            log.error("message消息处理用户信息为空,不处理");
             return;
         }
         //构建message对象
         MessageEnum messageEnum = sckwMessage.getMessageEnum();
+        Long createBy = sckwMessage.getCreateBy();
         String content = StringUtils.replaceTextVar(messageEnum.getContent(), sckwMessage.getParams());
         KwmMessage kwmMessage = KwmMessage.builder()
                 .category(messageEnum.getCategory())
@@ -62,19 +64,19 @@ public class SckwMessageHandlerService {
                 .url(sckwMessage.getMsgUrl())
                 .params(JSON.toJSONString(sckwMessage.getParams()))
                 .build();
-        kwmMessage.setCreateBy(sckwMessage.getCreateBy());
-        kwmMessage.setUpdateBy(sckwMessage.getCreateBy());
+        kwmMessage.setCreateBy(createBy);
+        kwmMessage.setUpdateBy(createBy);
         Long msgId = kwmMessageService.insert(kwmMessage);
         //多个用户id,构建多个KwmMessageUser对象保存
-        List<String> userIdList = Arrays.asList(userIds.split(","));
         List<KwmMessageUser> messageUsers = Lists.newArrayList();
-        userIdList.forEach(e -> {
+        userInfos.forEach(e -> {
             KwmMessageUser messageUser = KwmMessageUser.builder()
-                    .userId(Long.valueOf(e))
+                    .userId(e.getUserId())
+                    .entId(e.getEntId())
                     .msgId(msgId)
                     .build();
-            messageUser.setCreateBy(sckwMessage.getCreateBy());
-            messageUser.setUpdateBy(sckwMessage.getCreateBy());
+            messageUser.setCreateBy(createBy);
+            messageUser.setUpdateBy(createBy);
             messageUsers.add(messageUser);
         });
         kwmMessageUserService.batchSave(messageUsers);

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

@@ -2,21 +2,28 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.sckw.message.dao.KwmMessageMapper">
 
-  <select id="findPage" resultType="com.sckw.message.model.KwmMessage" >
+  <select id="findPage" resultType="com.sckw.message.model.dto.MessageListDTO" >
     select
-      m.id, m.category, m.type, m.title, m.content, m.url, m.params, m.client_type clientType, m.remark,
-      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
+      mu.id, mu.ent_id entId, mu.user_id userId, mu.status, mu.reamrk, mu.create_by createBy, mu.create_time createTime,
+      mu.update_by updateBy, mu.update_time updateTime, m.id as msgId, m.category, m.type, m.title, m.content, m.url,
+      m.params, m.client_type clientType, m.remark as msgRemark
+    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 and mu.user_id = #{item.userId}
+        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>
+        <if test="item.status != null">
+            and mu.status = #{item.status}
+        </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>
         <if test="item.startCreateTime != null">
             and m.create_time &gt;= #{item.startCreateTime,jdbcType=TIMESTAMP}
         </if>
@@ -24,6 +31,6 @@
             and m.create_time &lt;= #{item.endCreateTime,jdbcType=TIMESTAMP}
         </if>
     </where>
-    ORDER BY m.status, m.create_time desc
+    ORDER BY m.create_time desc
   </select>
 </mapper>

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

@@ -7,6 +7,7 @@
         <trim prefix="(" suffix=")" suffixOverrides=",">
             id,
             msg_id,
+            ent_id,
             user_id,
             remark,
             status,
@@ -21,6 +22,7 @@
             <trim prefix="(" suffix=")" suffixOverrides=",">
                 #{item.id,jdbcType=BIGINT},
                 #{item.msgId,jdbcType=BIGINT},
+                #{item.entId,jdbcType=BIGINT},
                 #{item.userId,jdbcType=VARCHAR},
                 #{item.remark,jdbcType=VARCHAR},
                 #{item.status,jdbcType=INTEGER},

+ 22 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/OrderCheckDTO.java

@@ -1,11 +1,13 @@
 package com.sckw.order.model.dto;
 
+import com.sckw.stream.model.UserInfo;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @desc: 订单校验参数dto
@@ -53,6 +55,16 @@ public class OrderCheckDTO {
      */
     private Long procureEntId;
 
+    /**
+     * 采购企业名称
+     */
+    private String procureFireName;
+
+    /**
+     * 采购企业联系人集合
+     */
+    private List<UserInfo> procureUsers;
+
     /**
      * 供应一级企业id
      */
@@ -62,6 +74,16 @@ public class OrderCheckDTO {
      */
     private Long supplyEntId;
 
+    /**
+     * 供应企业名称
+     */
+    private String supplyFireName;
+
+    /**
+     * 供应企业联系人集合
+     */
+    private List<UserInfo> supplyUsers;
+
     /**
      * 订单来源 1采购下单2代客下单
      */

+ 160 - 16
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -35,7 +35,10 @@ import com.sckw.product.api.model.GoodsDetail;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.redis.constant.RedisConstant;
 import com.sckw.redis.utils.RedissonUtils;
+import com.sckw.stream.enums.MessageEnum;
 import com.sckw.stream.model.SckwBusSum;
+import com.sckw.stream.model.SckwMessage;
+import com.sckw.stream.model.UserInfo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.AreaTreeFrontResDto;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
@@ -45,11 +48,13 @@ import com.sckw.transport.api.dubbo.TransportDubboService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -88,6 +93,12 @@ public class KwoTradeOrderService {
     private final KwoTradeOrderContractService kwoTradeOrderContractService;
     private final KwoTradeOrderTrackService kwoTradeOrderTrackService;
 
+    @Value("${valet.order.list.url}")
+    private String valetOrderListUrl;
+
+    @Value("${purchase.order.list.url}")
+    private String purchaseOrderListUrl;
+
     /**
      * @desc: 采购下单草稿
      * @author: yzc
@@ -250,11 +261,11 @@ public class KwoTradeOrderService {
         if (Objects.isNull(goodsInfo.getPriceRangeId())) {
             throw new BusinessException("采购下单价格梯度信息不能为空!");
         }
-        OrderCheckDTO orderCheckDTO = BeanUtils.copyProperties(param, OrderCheckDTO.class);
-        getTopEnt(orderCheckDTO, param.getUnitInfo());
-        orderCheckDTO.setGoodsId(goodsInfo.getGoodsId()).setUnitPrice(goodsInfo.getUnitPrice())
+        OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
+        getTopEnt(orderCheck, param.getUnitInfo());
+        orderCheck.setGoodsId(goodsInfo.getGoodsId()).setUnitPrice(goodsInfo.getUnitPrice())
                 .setOrderSource(DictEnum.TORDER_SOURCE_1.getValue());
-        orderCheck(orderCheckDTO, false);
+//        orderCheck(orderCheck, false);
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(getOrderNo())
                 .setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_1.getValue())
@@ -265,21 +276,94 @@ public class KwoTradeOrderService {
         if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
             throw new BusinessException(updateResult.getMsg());
         }
+        //添加订单其他信息
         addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
-        //TODO:发送提醒消息
+        //发送消息提醒
+        submitOrderSendMsg(orderCheck, order.getTOrderNo());
+    }
+
+    /**
+     * @desc: 提交订单发送message
+     * @author: yzc
+     * @date: 2023-09-01 14:35
+     * @Param orderCheck:
+     * @Param orderNo:
+     * @return: void
+     */
+    private void submitOrderSendMsg(OrderCheckDTO orderCheck, String orderNo) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("orderNo", orderNo);
+        //提交人信息
+        List<UserInfo> userInfos = new ArrayList<>();
+        UserInfo createUser = new UserInfo();
+        createUser.setUserId(LoginUserHolder.getUserId()).setEntId(LoginUserHolder.getEntId());
+        userInfos.add(createUser);
+
+        boolean flag = Objects.equals(orderCheck.getOrderSource(), DictEnum.TORDER_SOURCE_1.getValue());
+        //采购下单
+        if (flag) {
+            //给创建人发消息
+            map.put("firmName", orderCheck.getSupplyFireName());
+            SckwMessage msg = new SckwMessage();
+            msg.setRequestId(UUIDUtils.get32UUID())
+                    .setMessageEnum(MessageEnum.ORDER_INITIATE_PURCHASE)
+                    .setParams(map)
+                    .setMsgUrl(purchaseOrderListUrl)
+                    .setUserInfos(userInfos)
+                    .setCreateBy(LoginUserHolder.getUserId());
+            log.info("发起采购下单消息:{}", JSON.toJSONString(msg));
+            streamBridge.send("sckw-message", JSON.toJSONString(msg));
+            //给供应企业联系人发消息
+            map.put("firmName", orderCheck.getProcureFireName());
+            SckwMessage contactsMsg = new SckwMessage();
+            contactsMsg.setRequestId(UUIDUtils.get32UUID())
+                    .setMessageEnum(MessageEnum.ORDER_NEW_PENDING)
+                    .setParams(map)
+                    .setMsgUrl(valetOrderListUrl)
+                    .setUserInfos(orderCheck.getSupplyUsers())
+                    .setCreateBy(LoginUserHolder.getUserId());
+            log.info("有新的待受理订单消息:{}", JSON.toJSONString(contactsMsg));
+            streamBridge.send("sckw-message", JSON.toJSONString(contactsMsg));
+        } else {
+            //代客下单
+            //给创建人发消息
+            map.put("firmName", orderCheck.getProcureFireName());
+            SckwMessage msg = new SckwMessage();
+            msg.setRequestId(UUIDUtils.get32UUID())
+                    .setMessageEnum(MessageEnum.ORDER_INITIATE_SALE)
+                    .setParams(map)
+                    .setMsgUrl(valetOrderListUrl)
+                    .setUserInfos(userInfos)
+                    .setCreateBy(LoginUserHolder.getUserId());
+            log.info("发起代客下单消息:{}", JSON.toJSONString(msg));
+            streamBridge.send("sckw-message", JSON.toJSONString(msg));
+            //给采购企业联系人发消息
+            map.put("firmName", orderCheck.getSupplyFireName());
+            SckwMessage contactsMsg = new SckwMessage();
+            contactsMsg.setRequestId(UUIDUtils.get32UUID())
+                    .setMessageEnum(MessageEnum.ORDER_NEW_VALET_MSG)
+                    .setParams(map)
+                    .setMsgUrl(purchaseOrderListUrl)
+                    .setUserInfos(orderCheck.getSupplyUsers())
+                    .setCreateBy(LoginUserHolder.getUserId());
+            log.info("有新的代客下单消息:{}", JSON.toJSONString(contactsMsg));
+            streamBridge.send("sckw-message", JSON.toJSONString(contactsMsg));
+        }
     }
 
     /**
      * @desc: 获取采购销售顶级企业id
      * @author: yzc
      * @date: 2023-07-25 10:03
-     * @Param orderCheckDTO:
+     * @Param orderCheck:
      * @Param unitInfo:
      * @return: void
      */
-    private void getTopEnt(OrderCheckDTO orderCheckDTO, List<UnitInfo> unitInfo) {
+    private void getTopEnt(OrderCheckDTO orderCheck, List<UnitInfo> unitInfo) {
         List<Long> entIds = unitInfo.stream().map(UnitInfo::getEntId).toList();
         Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
+        List<UserInfo> procureUsers = new ArrayList<>();
+        List<UserInfo> supplyUsers = new ArrayList<>();
         unitInfo.forEach(e -> {
             Long entId = e.getEntId();
             EntCacheResDto ent = entMap.get(entId);
@@ -288,13 +372,22 @@ public class KwoTradeOrderService {
                 throw new BusinessException("一级企业信息不存在!");
             }
             if (Objects.equals(e.getUnitType(), DictEnum.TORDER_UNIT_TYPE_1.getValue())) {
-                orderCheckDTO.setProcureTopEntId(ent.getId());
-                orderCheckDTO.setProcureEntId(entId);
+                UserInfo procureUser = new UserInfo();
+                orderCheck.setProcureTopEntId(ent.getId());
+                orderCheck.setProcureEntId(entId);
+                orderCheck.setProcureFireName(e.getFirmName());
+                procureUser.setUserId(e.getContactsId()).setEntId(ent.getId());
+                procureUsers.add(procureUser);
             } else {
-                orderCheckDTO.setSupplyTopEntId(ent.getId());
-                orderCheckDTO.setSupplyEntId(entId);
+                UserInfo supplyUser = new UserInfo();
+                orderCheck.setSupplyTopEntId(ent.getId());
+                orderCheck.setSupplyEntId(entId);
+                orderCheck.setSupplyFireName(e.getFirmName());
+                supplyUser.setUserId(e.getContactsId()).setEntId(ent.getId());
+                supplyUsers.add(supplyUser);
             }
         });
+        orderCheck.setProcureUsers(procureUsers).setSupplyUsers(supplyUsers);
     }
 
     /**
@@ -388,7 +481,8 @@ public class KwoTradeOrderService {
             throw new BusinessException(updateResult.getMsg());
         }
         addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
-        //TODO:发送提醒消息
+        //发送消息提醒
+        submitOrderSendMsg(orderCheck, order.getTOrderNo());
     }
 
 
@@ -580,6 +674,7 @@ public class KwoTradeOrderService {
                 && kwoTradeOrderUnitService.entMatch(param.getId(), LoginUserHolder.getEntId(), source)) {
             throw new BusinessException("无权限修改此订单!");
         }
+        OrderCheckDTO orderCheck = new OrderCheckDTO();
         if (Objects.equals(param.getOperateType(), 1)) {
             checkParams(param, source);
             if (Objects.equals(source, DictEnum.TORDER_SOURCE_1.getValue())) {
@@ -597,7 +692,7 @@ public class KwoTradeOrderService {
                     throw new BusinessException("Invalid contract status");
                 }
             }
-            OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
+            orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
             getTopEnt(orderCheck, param.getUnitInfo());
             orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice())
                     .setOrderSource(source);
@@ -616,9 +711,9 @@ public class KwoTradeOrderService {
         ValetOrderParam valetOrderParam = BeanUtils.copyProperties(param, ValetOrderParam.class);
 
         addOtherOrderInfo(order, valetOrderParam, true);
-        //TODO:发送提醒消息
+        //订单提交发送提醒消息
         if (Objects.equals(param.getOperateType(), 1)) {
-
+            submitOrderSendMsg(orderCheck, order.getTOrderNo());
         }
     }
 
@@ -843,7 +938,56 @@ public class KwoTradeOrderService {
         updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(LoginUserHolder.getUserId())
                 .setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
         saveMongoDb(3, updateParam);
-        //TODO:发送提醒消息
+        //发送提醒消息
+        List<KwoTradeOrderUnit> units = kwoTradeOrderUnitService.getByOrderId(order.getId());
+        rejectOrderSendMsg(units, order);
+    }
+
+    /**
+     * @desc: 驳回订单发送消息
+     * @author: yzc
+     * @date: 2023-09-04 16:44
+     * @Param units:
+     * @Param order:
+     * @return: void
+     */
+    private void rejectOrderSendMsg(List<KwoTradeOrderUnit> units, KwoTradeOrder order) {
+        Map<String, KwoTradeOrderUnit> unitMap = units.stream().collect
+                (Collectors.toMap(KwoTradeOrderUnit::getUnitType, Function.identity()));
+        Map<String, Object> map = new HashMap<>();
+        map.put("orderNo", order.getTOrderNo());
+
+        //给供应企业联系人发消息
+        List<UserInfo> purchaseUsers = new ArrayList<>();
+        UserInfo purchaseUser = new UserInfo();
+        KwoTradeOrderUnit purchase = unitMap.get(DictEnum.TORDER_UNIT_TYPE_1.getValue());
+        purchaseUser.setUserId(purchase.getContactsId()).setEntId(purchase.getTopEntId());
+        purchaseUsers.add(purchaseUser);
+        SckwMessage contactsMsg = new SckwMessage();
+        map.put("firmName", purchase.getFirmName());
+        contactsMsg.setRequestId(UUIDUtils.get32UUID())
+                .setMessageEnum(MessageEnum.ORDER_REJECT_VALET)
+                .setParams(map)
+                .setMsgUrl(valetOrderListUrl)
+                .setUserInfos(purchaseUsers)
+                .setCreateBy(LoginUserHolder.getUserId());
+        log.info("驳回采购订单消息:{}", JSON.toJSONString(contactsMsg));
+        streamBridge.send("sckw-message", JSON.toJSONString(contactsMsg));
+        //给订单创建人发消息
+        List<UserInfo> userInfos = new ArrayList<>();
+        UserInfo createUser = new UserInfo();
+        createUser.setUserId(order.getCreateBy()).setEntId(order.getEntId());
+        userInfos.add(createUser);
+        map.put("firmName", unitMap.get(DictEnum.TORDER_UNIT_TYPE_2.getValue()).getFirmName());
+        SckwMessage msg = new SckwMessage();
+        msg.setRequestId(UUIDUtils.get32UUID())
+                .setMessageEnum(MessageEnum.ORDER_REJECT_PURCHASE)
+                .setParams(map)
+                .setMsgUrl(purchaseOrderListUrl)
+                .setUserInfos(userInfos)
+                .setCreateBy(LoginUserHolder.getUserId());
+        log.info("采购订单被驳回消息:{}", JSON.toJSONString(msg));
+        streamBridge.send("sckw-message", JSON.toJSONString(msg));
     }
 
     /**