dongxin 1 год назад
Родитель
Сommit
5e905da62e
36 измененных файлов с 384 добавлено и 546 удалено
  1. 12 15
      commons/src/main/java/com/jzg/commons/entity/dto/MessageAddParam.java
  2. 23 6
      commons/src/main/java/com/jzg/commons/entity/enums/MessageCodeEnum.java
  3. 2 0
      commons/src/main/java/com/jzg/commons/entity/enums/MessageSourceEnum.java
  4. 2 1
      commons/src/main/java/com/jzg/commons/entity/enums/MessageTopicEnum.java
  5. 3 1
      commons/src/main/java/com/jzg/commons/entity/enums/MessageTypeEnum.java
  6. 0 4
      commons/src/main/java/com/jzg/commons/entity/po/SysMessage.java
  7. 0 4
      commons/src/main/java/com/jzg/commons/entity/po/SysMessageTemplate.java
  8. 1 1
      commons/src/main/java/com/jzg/commons/util/StringUtils.java
  9. 1 1
      gateway/src/main/resources/application-dev.yml
  10. 2 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java
  11. 0 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerRequestComponent.java
  12. 5 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/listener/enhance/EnhanceOrderMessageListener.java
  13. 25 6
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/message/OrderMessage.java
  14. 16 12
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/template/OrderMessageTemplate.java
  15. 20 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  16. 13 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java
  17. 46 27
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  18. 1 1
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerCarQueryResponse.java
  19. 23 0
      tenant/organization/src/main/java/com/jzg/organization/client/OrgClient.java
  20. 0 59
      tenant/organization/src/main/java/com/jzg/organization/consumer/listener/enhance/EnhanceMemberMessageListener.java
  21. 20 9
      tenant/organization/src/main/java/com/jzg/organization/consumer/listener/enhance/EnhanceUserMessageListener.java
  22. 0 39
      tenant/organization/src/main/java/com/jzg/organization/consumer/listener/normal/NormalConsumer.java
  23. 0 20
      tenant/organization/src/main/java/com/jzg/organization/consumer/listener/normal/NormalConsumerOrderly.java
  24. 0 47
      tenant/organization/src/main/java/com/jzg/organization/consumer/listener/normal/NormalConsumerWithLifeCycle.java
  25. 0 23
      tenant/organization/src/main/java/com/jzg/organization/consumer/message/MemberMessage.java
  26. 0 18
      tenant/organization/src/main/java/com/jzg/organization/consumer/message/NormalMessage.java
  27. 0 25
      tenant/organization/src/main/java/com/jzg/organization/consumer/message/OrderMessage.java
  28. 53 0
      tenant/organization/src/main/java/com/jzg/organization/consumer/message/UserMessage.java
  29. 0 37
      tenant/organization/src/main/java/com/jzg/organization/consumer/templete/OrderMessageTemplate.java
  30. 42 0
      tenant/organization/src/main/java/com/jzg/organization/consumer/templete/UserMessageTemplate.java
  31. 0 65
      tenant/organization/src/main/java/com/jzg/organization/controller/mq/EnhanceProduceController.java
  32. 0 110
      tenant/organization/src/main/java/com/jzg/organization/controller/mq/NormalProduceController.java
  33. 19 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysMessageServiceImpl.java
  34. 2 2
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysMessageTemplateServiceImpl.java
  35. 51 5
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java
  36. 2 3
      tenant/organization/src/main/resources/mapper/SysMessageMapper.xml

+ 12 - 15
commons/src/main/java/com/jzg/commons/entity/dto/MessageAddParam.java

@@ -1,13 +1,16 @@
 package com.jzg.commons.entity.dto;
 
-import com.jzg.commons.entity.po.SysMessageTemplate;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Size;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
 
 @Schema(description = "消息表新增dto")
 @Data
+@NoArgsConstructor
 public class MessageAddParam {
 
     /** 消息标题 */
@@ -21,14 +24,9 @@ public class MessageAddParam {
     @NotNull(message = "消息内容不能为空")
     private String content;
 
-    /** 模版编号 */
-    @Schema(description = "模版id")
-    @NotNull(message = "模版id不能为空")
-    private String tplId;
-
-    /** 模版编号 */
-    @Schema(description = "模版编号")
-    @NotNull(message = "模版编号不能为空")
+    /** 消息内容 */
+    @Schema(description = "模板code")
+    @NotNull(message = "模板code不能为空")
     private String tplCode;
 
     /**
@@ -36,13 +34,12 @@ public class MessageAddParam {
      */
     @Schema(description = "接收方")
     @NotNull(message = "接收方不能为空")
-    private String receive;
+    private List<String> receive;
 
-    public MessageAddParam(String content, SysMessageTemplate template) {
+    public MessageAddParam(String title, String content, List<String> receive,String tplCode) {
+        this.title = title;
         this.content = content;
-        this.tplCode = template.getTplCode();
-        this.title = template.getTplName();
-        this.tplId = template.getId();
-        this.receive = template.getReceive();
+        this.receive = receive;
+        this.tplCode = tplCode;
     }
 }

+ 23 - 6
commons/src/main/java/com/jzg/commons/entity/enums/MessageCodeEnum.java

@@ -10,12 +10,29 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum MessageCodeEnum {
 
-    /**测试模板1提醒*/
-    TEMPLATE_1("template_1","测试模板1"),
-    /**测试模板2提醒*/
-    TEMPLATE_2("template_2","测试模板2"),
-    /**补录订单提交审核提醒*/
-    TEMPLATE_3("template_3","补录订单提交审核");
+    /**待核保消息*/
+    TEMPLATE_1("template_1","待核保消息"),
+    /**核保中消息*/
+    TEMPLATE_2("template_2","核保中消息"),
+    /**人工处理中消息*/
+    TEMPLATE_3("template_3","人工处理中消息"),
+    /**核保失败消息*/
+    TEMPLATE_4("template_4","核保失败消息"),
+    /**待缴费消息*/
+    TEMPLATE_5("template_5","待缴费消息"),
+    /**已承保 & 未下载电子保单 消息*/
+    TEMPLATE_6("template_6","已承保 & 未下载电子保单 消息"),
+    /**已承保 & 已下载电子保单 消息*/
+    TEMPLATE_7("template_7","已承保 & 已下载电子保单 消息"),
+    /**订单已关闭 消息*/
+    TEMPLATE_8("template_8","订单已关闭 消息"),
+    /**补录订单待审核 消息*/
+    TEMPLATE_9("template_9","补录订单待审核 消息"),
+    /**补录订单审核通过 消息*/
+    TEMPLATE_10("template_10","补录订单审核通过 消息"),
+    /**发布通知消息(新增业务员) 消息*/
+    TEMPLATE_11("template_11","发布通知消息(新增业务员) 消息"),
+    ;
 
     private final String code;
 

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/enums/MessageSourceEnum.java

@@ -10,6 +10,8 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum MessageSourceEnum {
 
+    ORDERSTATUS("orderStatus", "订单状态变更"),
+    ADDISSUEUSER("addIssueUser", "业务员新增"),
     ORDERREVIEW("orderReview", "补录订单审核");
 
     private final String code;

+ 2 - 1
commons/src/main/java/com/jzg/commons/entity/enums/MessageTopicEnum.java

@@ -10,7 +10,8 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum MessageTopicEnum {
 
-    ROCKET_ORDER("rocket_order", "订单主题");
+    ROCKET_ORDER("rocket_order", "订单主题"),
+    ROCKET_USER("rocket_user", "用户主题");
 
     private final String code;
 

+ 3 - 1
commons/src/main/java/com/jzg/commons/entity/enums/MessageTypeEnum.java

@@ -10,7 +10,9 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum MessageTypeEnum {
 
-    ORDER("ORDER", "订单类型");
+    ORDER("ORDER", "订单类型"),
+    USER("USER", "用户类型"),
+    ;
 
     private final String code;
 

+ 0 - 4
commons/src/main/java/com/jzg/commons/entity/po/SysMessage.java

@@ -28,10 +28,6 @@ public class SysMessage extends BaseModel {
     @Schema(description = "消息内容")
     private String content;
 
-    /** 模版编号 */
-    @Schema(description = "模版id")
-    private String tplId;
-
     /** 模版编号 */
     @Schema(description = "模版编号")
     private String tplCode;

+ 0 - 4
commons/src/main/java/com/jzg/commons/entity/po/SysMessageTemplate.java

@@ -53,10 +53,6 @@ public class SysMessageTemplate extends BaseModel {
     @Schema(description = "跳转页面")
     private String linkUrl;
 
-    /** 接收方 */
-    @Schema(description = "接收方")
-    private String receive;
-
     /** 是否启用 0 启用 1禁用 */
     @Schema(description = "是否启用 0 启用 1禁用")
     private Integer isEnable;

+ 1 - 1
commons/src/main/java/com/jzg/commons/util/StringUtils.java

@@ -780,7 +780,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils
      * @return
      */
     public static String replaceContent(String content, Map<String, Object> valuesMap) {
-        StrSubstitutor strSubstitutor = new StrSubstitutor(valuesMap);
+        StrSubstitutor strSubstitutor = new StrSubstitutor(valuesMap, "%", "%");
         return strSubstitutor.replace(content);
     }
 }

+ 1 - 1
gateway/src/main/resources/application-dev.yml

@@ -28,7 +28,7 @@ spring:
         - id: tenant_route
           uri: http://localhost:8084/
           predicates:
-            - Path=/tenant/**,/dept/**,/area/**,/dict/**,/userInfo/**,/sysOrganization/**,/activity/**,/message/**,/messageNotice/**,/poster/**,/agreement/**,/pltAgreement/**,/agreementRules/**,/plt/areaLicense/**,/scheme/**,/schemeRules/**,/schemeRulesAttrLink/**,/schemeRulesAttr/**,/schemeRulesDictLable/**,/schemeRulesUndwrt/**,/schemeRulesUndwrtAttrLink/**,/schemeRulesUndwrtAttr/**,/schemeRulesUndwrtDictLable/**,/schemeRulesUndwrtRules/**,/schemeRulesUndwrtRulesAttrLink/**,/schemeRules,/ptlAgreementCost/**,/ptlAgreementCost/**,/ptlAgreementCostExternal/**,/operatorTrajectory/**
+            - Path=/tenant/**,/dept/**,/area/**,/dict/**,/userInfo/**,/sysOrganization/**,/activity/**,/message/**,/messageNotice/**,/poster/**,/agreement/**,/pltAgreement/**,/agreementRules/**,/plt/areaLicense/**,/scheme/**,/schemeRules/**,/schemeRulesAttrLink/**,/schemeRulesAttr/**,/schemeRulesDictLable/**,/schemeRulesUndwrt/**,/schemeRulesUndwrtAttrLink/**,/schemeRulesUndwrtAttr/**,/schemeRulesUndwrtDictLable/**,/schemeRulesUndwrtRules/**,/schemeRulesUndwrtRulesAttrLink/**,/schemeRules,/ptlAgreementCost/**,/ptlAgreementCost/**,/ptlAgreementCostExternal/**,/operatorTrajectory/**,/messageTemplate/**,/message/**
 
         - id: summary_route
           uri: http://localhost:9898/

+ 2 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.commons.client;
 
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.MessageAddParam;
+import com.jzg.commons.entity.enums.MessageCodeEnum;
 import com.jzg.commons.entity.po.PtlAgreement;
 import com.jzg.commons.entity.po.SysMessageTemplate;
 import com.jzg.commons.entity.vo.AgreementInfoVo;
@@ -31,7 +32,7 @@ public interface OrgClient {
                                                          @RequestHeader("system_code")String systemCode);
 
     @GetMapping(value = "/messageTemplate/templateGet")
-    public HttpResult<SysMessageTemplate> templateGet(@RequestParam String messageCodeEnum,
+    public HttpResult<SysMessageTemplate> templateGet(@RequestParam MessageCodeEnum messageCodeEnum,
                                                       @RequestHeader("Authorization") String authToken);
 
     @PostMapping(value = "/message/messageAdd")

+ 0 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerRequestComponent.java

@@ -1,7 +1,6 @@
 package com.jzg.quotation.dajia.crawler.component;
 
 
-import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson2.JSON;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.AssertionUtils;

+ 5 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/listener/enhance/EnhanceOrderMessageListener.java

@@ -25,12 +25,16 @@ import org.springframework.stereotype.Component;
 public class EnhanceOrderMessageListener extends EnhanceMessageHandler<OrderMessage> implements RocketMQListener<OrderMessage> {
 
     private final OrgClient orgClient;
+
     @Override
     protected void handleMessage(OrderMessage message) throws Exception {
         // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试
         System.out.println("业务消息处理:"+message.getBody());
         // 保存消息
-        MessageAddParam param = new MessageAddParam(message.getBody(),message.getTemplate());
+        MessageAddParam param = new MessageAddParam(message.getTitle(),
+                message.getBody(),
+                message.getReceiverUser(),
+                message.getTplCode());
         orgClient.messageAdd(param,message.getToken());
     }
 

+ 25 - 6
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/message/OrderMessage.java

@@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 订单消息模板
@@ -18,15 +19,16 @@ import java.time.LocalDateTime;
 @NoArgsConstructor
 public class OrderMessage extends BaseMessage {
 
+
     /**
-     * 鉴权
+     * 发送时间
      */
-    private String token;
+    private LocalDateTime sendTime;
 
     /**
-     * 发送时间
+     * 发送标题
      */
-    private LocalDateTime tradeTime;
+    private String title;
 
     /**
      * 发送内容
@@ -34,7 +36,24 @@ public class OrderMessage extends BaseMessage {
     private String body;
 
     /**
-     * 模板
+     * 接收用户
+     */
+    private List<String> receiverUser;
+
+    /**
+     * 跳转链接
+     */
+    private String linkUrl;
+
+    /**
+     * token鉴权
+     */
+    private String token;
+
+    /**
+     * 模板code
      */
-    private SysMessageTemplate template;
+    private String tplCode;
+
+
 }

+ 16 - 12
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/template/OrderMessageTemplate.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.summary.consumer.template;
 
+import com.jzg.commons.entity.enums.MessageCodeEnum;
 import com.jzg.commons.entity.enums.MessageSourceEnum;
 import com.jzg.commons.entity.enums.MessageTopicEnum;
 import com.jzg.commons.entity.enums.MessageTypeEnum;
@@ -12,6 +13,7 @@ import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.springframework.stereotype.Component;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * @author dongxin
@@ -25,23 +27,25 @@ public class OrderMessageTemplate extends RocketMQEnhanceTemplate {
     }
 
     /**
-     * 发送补录订单审核消息
+     * 订单状态变更消息发送
      *
-     * @param orderNo 订单号
-     * @param body    消息内容
+     * @param tplName
+     * @param content
+     * @param userList
      * @param token
-     * @return
+     * @param tplCode
      */
-    public SendResult SendOrderReview(@NotNull String orderNo, String body, SysMessageTemplate template, String token) {
+    public SendResult SendOrderStatus(String orderNo, String tplName, String content, List<String> userList, String token, MessageCodeEnum tplCode) {
         OrderMessage message = new OrderMessage();
         message.setKey(orderNo);
-        message.setSource(MessageSourceEnum.ORDERREVIEW.getCode());
-        message.setBody(body);
-        message.setTemplate(template);
+        message.setSource(MessageSourceEnum.ORDERSTATUS.getCode());
+        message.setTitle(tplName);
+        message.setBody(content);
+        message.setReceiverUser(userList);
+        message.setSendTime(LocalDateTime.now());
         message.setToken(token);
-        // 这两个字段只是为了测试
-        message.setTradeTime(LocalDateTime.now());
-        return send(MessageTopicEnum.ROCKET_ORDER.getCode(), MessageTypeEnum.ORDER.getCode(), message);
+        message.setTplCode(tplCode.getCode());
+        SendResult result = send(MessageTopicEnum.ROCKET_ORDER.getCode(), MessageTypeEnum.ORDER.getCode(), message);
+        return result;
     }
-
 }

+ 20 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -9,6 +9,7 @@ import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.base.StateResult;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.enums.MessageCodeEnum;
 import com.jzg.commons.entity.orders.po.*;
 import com.jzg.commons.entity.po.EsmInsCompany;
 import com.jzg.commons.entity.po.PtlAgreement;
@@ -226,7 +227,7 @@ public class UnifyOrderManager {
         // 报价轨迹
         String optContent = baseController.getUserName() + "提交了报价";
         InsOrdersTrack track = new InsOrdersTrack(ordersNo,
-                companyName,
+                esmInsCompanyHttpResult.getData().getCompanyCode(),
                 quoteVo.getCarInfoVo().getLicenseNo(),
                 quoteResultsVo.getQuoteStatus().equals(InsOrderStatusEnum.WAIT_AUDIT.getCode())
                         ? QuoteNumberConstant.QuoteResult.SUCCESS.getCode()
@@ -263,7 +264,10 @@ public class UnifyOrderManager {
         StateResult stateResult = orderStateListener.statusChange(InsOrderStatusEnum.AUDIT_ING, insOrders.getOrderStatus());
         insOrders.setOrderStatus(String.valueOf(stateResult.getCurrentState()));
         insOrdersService.updateById(insOrders);
-
+        // 发送订单状态变更消息
+        insOrdersService.orderStatusMessage(insOrders,
+                insOrdersCarInfo,insOrdersCosts,
+                baseController.getToken(), MessageCodeEnum.TEMPLATE_2);
         //拼装参数
         underwritingVo.setInsOrders(insOrders);
         underwritingVo.setInsOrdersCarInfo(insOrdersCarInfo);
@@ -289,6 +293,10 @@ public class UnifyOrderManager {
                     optContent,null
             );
             insOrdersTrackService.save(track);
+            // 发送订单状态变更消息
+            insOrdersService.orderStatusMessage(insOrders,
+                    insOrdersCarInfo,insOrdersCosts,
+                    baseController.getToken(), MessageCodeEnum.TEMPLATE_5);
             return HttpResult.ok("核保成功");
         } else {
             if (underwritingResultsVo.getUnderwritingStatus().equals(InsOrderStatusEnum.AUDIT_FAIL)) {
@@ -296,6 +304,10 @@ public class UnifyOrderManager {
                 StateResult stateFailResult = orderStateListener.statusChange(InsOrderStatusEnum.AUDIT_FAIL, insOrders.getOrderStatus());
                 insOrders.setOrderStatus(String.valueOf(stateFailResult.getCurrentState()));
                 insOrdersService.updateById(insOrders);
+                // 发送订单状态变更消息
+                insOrdersService.orderStatusMessage(insOrders,
+                        insOrdersCarInfo,insOrdersCosts,
+                        baseController.getToken(), MessageCodeEnum.TEMPLATE_4);
             }
             // 核保轨迹
             String optContent = baseController.getUserName() + "提交了核保";
@@ -415,6 +427,7 @@ public class UnifyOrderManager {
         //获取保司实体
         InsOrders insOrders = insOrdersService.getById(downloadPolicyVo.getOrder().getOrdersNo());
         InsOrdersCarInfo carInfo = insOrdersCarInfoService.getByOrderId(insOrders.getId());
+        InsOrdersCosts costs = insOrdersCostsService.getById(insOrders.getId());
         InsOrdersPdfUrl insOrdersPdfUrl = insOrdersPdfUrlService.getPdfUrlByOrderNo(insOrders.getId());
         AssertionUtils.isFail(Objects.isNull(insOrders), "订单不存在");
         QuotationBaseService downloadPolicyService = companyFactory.getDownloadPolicyService(downloadPolicyVo, insOrders);
@@ -464,6 +477,11 @@ public class UnifyOrderManager {
             }
             insOrdersPdfUrlService.save(insOrdersPdfUrl);
         }
+
+        // 发送订单状态变更消息
+        insOrdersService.orderStatusMessage(insOrders,
+                carInfo,costs,
+                baseController.getToken(), MessageCodeEnum.TEMPLATE_7);
         // 下载保单轨迹
         String optContent = baseController.getUserName() + "请求下载电子保单";
         InsOrdersTrack track = new InsOrdersTrack(insOrders.getId(),

+ 13 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java

@@ -5,7 +5,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.InsOrdersParam;
+import com.jzg.commons.entity.enums.MessageCodeEnum;
 import com.jzg.commons.entity.orders.po.InsOrders;
+import com.jzg.commons.entity.orders.po.InsOrdersCarInfo;
+import com.jzg.commons.entity.orders.po.InsOrdersCosts;
 import com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo;
 import com.jzg.commons.entity.orders.vo.OrderListVo;
 import com.jzg.commons.entity.po.EsmInsCompany;
@@ -61,6 +64,16 @@ public interface InsOrdersService extends IService<InsOrders> {
      */
     void orderAfterUpdateQuote(String ordersNo, QuoteResultsVo quoteResponse);
 
+    /**
+     * 发送订单状态变更消息
+     * @param insOrders 订单信息
+     * @param carInfo 订单车辆信息
+     * @param ordersCosts 订单费用信息
+     * @param token 授权token
+     * @param tplCode 模板code
+     */
+    void orderStatusMessage(InsOrders insOrders, InsOrdersCarInfo carInfo, InsOrdersCosts ordersCosts, String token, MessageCodeEnum tplCode);
+
     /**
      * 订单核保更新后处理
      */

+ 46 - 27
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -202,8 +202,10 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             ordersExternalPolicy.setOrderNo(String.valueOf(quoteNo));
             policyService.save(ordersExternalPolicy);
 
-            /** 补录订单发送订单审核消息 */
-            this.sendOrderMessage(insOrders,insOrdersCosts,baseController.getToken());
+            // 发送订单状态变更消息
+            this.orderStatusMessage(insOrders,
+                    insOrdersCarInfo,insOrdersCosts,
+                    baseController.getToken(), MessageCodeEnum.TEMPLATE_9);
 
             // 返回成功信息,表示订单、车辆和用户信息保存成功
             return HttpResult.ok("保存成功");
@@ -215,29 +217,6 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
     }
 
-    /**
-     * 补录订单发送审核消息
-     *
-     * @param insOrders      订单信息
-     * @param insOrdersCosts 费用信息
-     * @param token
-     */
-    private void sendOrderMessage(InsOrders insOrders, InsOrdersCosts insOrdersCosts, String token) {
-        // 获取消息模板 并替换内容
-        HttpResult<SysMessageTemplate>  result = orgClient.templateGet(MessageCodeEnum.TEMPLATE_3.getCode(),
-                baseController.getToken());
-        SysMessageTemplate template = result.getData();
-        AssertionUtils.isFail(Objects.isNull(template),"获取模板失败!");
-        Map<String, Object> valuesMap = new HashMap<>();
-        valuesMap.put("addUser",insOrders.getCreateBy());               // 添加人员姓名
-        valuesMap.put("orderNo",insOrders.getId());                     // 订单号
-        valuesMap.put("businessUser",insOrders.getAuditName());         // 业务员 核保人
-        valuesMap.put("totalPremium",insOrdersCosts.getSumPremium());   // 总保费
-        String content = StringUtils.replaceContent(template.getContent(),valuesMap);
-        orderMessageTemplate.SendOrderReview(insOrders.getId(),content,template,token);
-    }
-
-
     @Override
     public HttpResult updateOrders(InsOrdersEnd ordersEnd) {
         try {
@@ -497,6 +476,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         InsOrders insOrders = insOrdersMapper.selectOne(new LambdaQueryWrapper<InsOrders>().eq(InsOrders::getId,ordersNo));
         AssertionUtils.isFail(Objects.isNull(insOrders),"订单不存在");
 
+        InsOrdersCarInfo carInfo = ordersCarInfoService.getByOrderId(insOrders.getId());
         //设置订单状态
         StateResult stateResult = orderStateListener.statusChange(quoteResponse.getQuoteStatusEnum(), insOrders.getOrderStatus());
         insOrders.setOrderStatus(String.valueOf(stateResult.getCurrentState()));
@@ -578,10 +558,39 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 });
             }
             insOrdersKindService.updateBatchById(kindList);
+
+            // 发送订单状态变更消息
+            this.orderStatusMessage(insOrders,carInfo,ordersCosts,
+                    baseController.getToken(),
+                    MessageCodeEnum.TEMPLATE_1);
         }
 
     }
 
+    @Override
+    public void orderStatusMessage(InsOrders insOrders, InsOrdersCarInfo carInfo, InsOrdersCosts ordersCosts, String token, MessageCodeEnum tplCode) {
+        // 获取消息模板 并替换内容
+        HttpResult<SysMessageTemplate>  result = orgClient.templateGet(tplCode,
+                baseController.getToken());
+        SysMessageTemplate template = result.getData();
+        AssertionUtils.isFail(Objects.isNull(template),"获取模板失败!");
+        Map<String, Object> valuesMap = new HashMap<>();
+        valuesMap.put("licenseNo",carInfo.getLicenseNo());
+        valuesMap.put("orderStatus",InsOrderStatusEnum.matchKey(insOrders.getOrderStatus()).getDesc());
+        valuesMap.put("amount",Objects.isNull(ordersCosts.getSumPremium())? new BigDecimal(0) : ordersCosts.getSumPremium());
+        String content = StringUtils.replaceContent(template.getContent(),valuesMap);
+        // 获取接收用户
+        Set<String> userList = new HashSet<>();
+        if(StringUtils.isNotBlank(insOrders.getRealQuoteUserId())){
+            userList.add(insOrders.getRealQuoteUserId());
+        }
+        userList.add(insOrders.getCreateBy());
+        List<String> recerveLsit = new ArrayList<>(userList);
+        orderMessageTemplate.SendOrderStatus(insOrders.getId(),template.getTplName(),content,
+                recerveLsit,
+                token,tplCode);
+    }
+
     @Override
     public void orderAfterUpdateUnderwriting(UnderwritingResultsVo underwritingResultsVo) {
         // 检测主订单是否存在
@@ -773,7 +782,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         // 检测主订单是否存在
         InsOrders insOrders = insOrdersMapper.selectOne(new LambdaQueryWrapper<InsOrders>().eq(InsOrders::getId,orderNo));
         AssertionUtils.isFail(Objects.isNull(insOrders),"订单不存在");
-        InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoService.getById(insOrders.getId());
+        InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoMapper.selectById(insOrders.getId());
+        InsOrdersCosts costs = insOrdersCostsService.getById(insOrders.getId());
         //设置订单状态
         StateResult stateResult = orderStateListener.statusChange(orderStatusResultVo.getOrderStatus(), insOrders.getOrderStatus());
         // 同步订单轨迹
@@ -802,7 +812,16 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         if(orderStatusResultVo.getOrderStatus().equals(InsOrderStatusEnum.PAY_PENDING)) {
             insOrders.setPayLink(orderStatusResultVo.getPaymentLink());
             insOrders.setPayTime(LocalDateTime.now());
-        }else{
+            // 发送订单状态变更消息
+            this.orderStatusMessage(insOrders,
+                    insOrdersCarInfo,costs,
+                    baseController.getToken(), MessageCodeEnum.TEMPLATE_5);
+        } else if(orderStatusResultVo.getOrderStatus().equals(InsOrderStatusEnum.UNDERWRITED)){
+            // 发送订单状态变更消息
+            this.orderStatusMessage(insOrders,
+                    insOrdersCarInfo,costs,
+                    baseController.getToken(), MessageCodeEnum.TEMPLATE_6);
+        } else{
             insOrders.setErrorMessage(orderStatusResultVo.getErrorMsg());
         }
         this.updateById(insOrders);

+ 1 - 1
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerCarQueryResponse.java

@@ -88,7 +88,7 @@ public class ZhongAnCrawlerCarQueryResponse extends ZhongAnCrawlerBaseResponse {
 
                     private String vehicleImport;
 
-                    private Integer purchasePrice;
+                    private String purchasePrice;
 
                     private Integer purchasePriceTax;
 

+ 23 - 0
tenant/organization/src/main/java/com/jzg/organization/client/OrgClient.java

@@ -0,0 +1,23 @@
+package com.jzg.organization.client;
+
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.dto.MessageAddParam;
+import com.jzg.commons.entity.enums.MessageCodeEnum;
+import com.jzg.commons.entity.po.PtlAgreement;
+import com.jzg.commons.entity.po.SysMessageTemplate;
+import com.jzg.commons.entity.vo.AgreementInfoVo;
+import com.jzg.commons.entity.vo.PersonAreaVo;
+import com.jzg.commons.entity.vo.PtlAgreementCostVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@FeignClient(name="jzg-organization",url = "http://localhost:8084/")
+public interface OrgClient {
+
+    @GetMapping(value = "/messageTemplate/templateGet")
+    public HttpResult<SysMessageTemplate> templateGet(@RequestParam MessageCodeEnum messageCodeEnum,
+                                                      @RequestHeader("Authorization") String authToken);
+
+}

+ 0 - 59
tenant/organization/src/main/java/com/jzg/organization/consumer/listener/enhance/EnhanceMemberMessageListener.java

@@ -1,59 +0,0 @@
-package com.jzg.organization.consumer.listener.enhance;
-
-import com.jzg.handler.EnhanceMessageHandler;
-import com.jzg.organization.consumer.message.MemberMessage;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
-import org.apache.rocketmq.spring.core.RocketMQListener;
-
-/**
- * @author dongxin
- */
-@Slf4j
-//@Component
-@RocketMQMessageListener(
-        consumerGroup = "enhance_consumer_group",
-        topic = "rocket_enhance",
-        selectorExpression = "*",
-        consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够
-)
-public class EnhanceMemberMessageListener extends EnhanceMessageHandler<MemberMessage> implements RocketMQListener<MemberMessage> {
-
-    @Override
-    protected void handleMessage(MemberMessage message) throws Exception {
-        // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试
-        System.out.println("业务消息处理:"+message.getUserName());
-    }
-
-    @Override
-    protected void handleMaxRetriesExceeded(MemberMessage message) {
-        // 当超过指定重试次数消息时此处方法会被调用
-        // 生产中可以进行回退或其他业务操作
-        log.error("消息消费失败,请执行后续处理");
-    }
-
-
-    /**
-     * 是否执行重试机制
-     */
-    @Override
-    protected boolean isRetry() {
-        return true;
-    }
-
-    @Override
-    protected boolean throwException() {
-        // 是否抛出异常,false搭配retry自行处理异常
-        return false;
-    }
-
-    /**
-     * 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型
-     */
-    @Override
-    public void onMessage(MemberMessage rocketMqEntityMessage) {
-        super.dispatchMessage(rocketMqEntityMessage);
-    }
-
-
-}

+ 20 - 9
tenant/organization/src/main/java/com/jzg/organization/consumer/listener/enhance/EnhanceOrderMessageListener.java → tenant/organization/src/main/java/com/jzg/organization/consumer/listener/enhance/EnhanceUserMessageListener.java

@@ -1,34 +1,45 @@
 package com.jzg.organization.consumer.listener.enhance;
 
+import com.jzg.commons.entity.dto.MessageAddParam;
 import com.jzg.handler.EnhanceMessageHandler;
-import com.jzg.organization.consumer.message.OrderMessage;
+import com.jzg.organization.consumer.message.UserMessage;
+import com.jzg.organization.service.SysMessageService;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
 import org.apache.rocketmq.spring.core.RocketMQListener;
 import org.springframework.stereotype.Component;
 
 /**
- * @author dongxin
+ * 增强用户类消息消费者
  */
 @Slf4j
 @Component
 @RocketMQMessageListener(
         consumerGroup = "enhance_consumer_group",
-        topic = "rocket_enhance",
+        topic = "rocket_user",
         selectorExpression = "*",
         consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够
 )
-public class EnhanceOrderMessageListener extends EnhanceMessageHandler<OrderMessage> implements RocketMQListener<OrderMessage> {
+@RequiredArgsConstructor
+public class EnhanceUserMessageListener extends EnhanceMessageHandler<UserMessage> implements RocketMQListener<UserMessage> {
+
+    private final SysMessageService messageService;
 
     @Override
-    protected void handleMessage(OrderMessage message) throws Exception {
+    protected void handleMessage(UserMessage message) throws Exception {
         // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试
         System.out.println("业务消息处理:"+message.getBody());
-        int a = 10 /0;
+        // 保存消息
+        MessageAddParam param = new MessageAddParam(message.getTitle(),
+                message.getBody(),
+                message.getReceiverUser(),
+                message.getTplCode());
+        messageService.messageAdd(param);
     }
 
     @Override
-    protected void handleMaxRetriesExceeded(OrderMessage message) {
+    protected void handleMaxRetriesExceeded(UserMessage message) {
         // 当超过指定重试次数消息时此处方法会被调用
         // 生产中可以进行回退或其他业务操作
         log.error("消息消费失败,请执行后续处理");
@@ -53,7 +64,7 @@ public class EnhanceOrderMessageListener extends EnhanceMessageHandler<OrderMess
      * 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型
      */
     @Override
-    public void onMessage(OrderMessage orderMessage) {
-        super.dispatchMessage(orderMessage);
+    public void onMessage(UserMessage userMessage) {
+        super.dispatchMessage(userMessage);
     }
 }

+ 0 - 39
tenant/organization/src/main/java/com/jzg/organization/consumer/listener/normal/NormalConsumer.java

@@ -1,39 +0,0 @@
-package com.jzg.organization.consumer.listener.normal;
-
-import com.alibaba.fastjson.JSONObject;
-import com.jzg.organization.consumer.message.NormalMessage;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
-import org.apache.rocketmq.spring.core.RocketMQListener;
-import org.springframework.stereotype.Component;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * @author dongxin
- * 普通消息监听器
- */
-
-@Component
-@RocketMQMessageListener(
-        consumerGroup = "springboot_consumer_group",
-        topic = "rocket_normal",
-        selectorExpression = "*",
-        consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够
-)
-@Slf4j
-public class NormalConsumer implements RocketMQListener<NormalMessage> {
-    @Override
-    public void onMessage(NormalMessage message) {
-        log.info("消费者收到消息[{}]", JSONObject.toJSON(message));
-        // 方法执行完成之后会自动进行进行ack ,如果方法出现异常,将会进入重试队列
-        try {
-            TimeUnit.SECONDS.sleep(3);
-//            int a = 10 / 0;
-        }catch (InterruptedException e) {
-            log.error(e.getMessage());
-        }
-        log.info("Message {} 休眠了3s后消费完成",message.getKey());
-    }
-
-}

+ 0 - 20
tenant/organization/src/main/java/com/jzg/organization/consumer/listener/normal/NormalConsumerOrderly.java

@@ -1,20 +0,0 @@
-package com.jzg.organization.consumer.listener.normal;
-
-import com.jzg.organization.consumer.message.NormalMessage;
-import org.apache.rocketmq.spring.annotation.ConsumeMode;
-import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
-import org.apache.rocketmq.spring.core.RocketMQListener;
-
-/**
- * @author dongxin
- * 顺序消息
- */
-
-//@Component
-@RocketMQMessageListener(consumerGroup = "springboot_consumer_group",topic = "consumer_topic",consumeMode = ConsumeMode.ORDERLY)
-public class NormalConsumerOrderly implements RocketMQListener<NormalMessage> {
-    @Override
-    public void onMessage(NormalMessage normalMessage) {
-        System.out.println("消费消息-" + normalMessage);
-    }
-}

+ 0 - 47
tenant/organization/src/main/java/com/jzg/organization/consumer/listener/normal/NormalConsumerWithLifeCycle.java

@@ -1,47 +0,0 @@
-package com.jzg.organization.consumer.listener.normal;
-
-import com.jzg.organization.consumer.message.NormalMessage;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
-import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
-import org.apache.rocketmq.spring.core.RocketMQListener;
-import org.apache.rocketmq.spring.core.RocketMQPushConsumerLifecycleListener;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * @author dongxin
- * 普通消息监听器
- */
-
-//@Component
-@RocketMQMessageListener(
-        consumerGroup = "springboot_consumer_group",
-        topic = "consumer_topic",
-        selectorExpression = "*",
-        consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够
-)
-@Slf4j
-public class NormalConsumerWithLifeCycle implements RocketMQListener<NormalMessage>, RocketMQPushConsumerLifecycleListener {
-    @Override
-    public void onMessage(NormalMessage message) {
-        // 方法执行完成之后会自动进行进行ack ,如果方法出现异常,将会进入重试队列
-        System.out.println("received message -" + message);
-        try {
-            TimeUnit.SECONDS.sleep(3);
-        }catch (InterruptedException e) {
-            log.error(e.getMessage());
-        }
-        log.info("休眠了3s后消费完成");
-
-    }
-
-    /**
-     * 当普通的RocketMQListener提供的功能无法满足时可通过实现RocketMQPushConsumerLifecycleListener进行增强
-     */
-    @Override
-    public void prepareStart(DefaultMQPushConsumer consumer) {
-        //设置最大重试次数
-        consumer.setMaxReconsumeTimes(3);
-    }
-}

+ 0 - 23
tenant/organization/src/main/java/com/jzg/organization/consumer/message/MemberMessage.java

@@ -1,23 +0,0 @@
-package com.jzg.organization.consumer.message;
-
-import com.jzg.domain.BaseMessage;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-import java.time.LocalDate;
-
-/**
- * @author dongxin
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@AllArgsConstructor
-@NoArgsConstructor
-public class MemberMessage extends BaseMessage {
-
-    private String userName;
-
-    private LocalDate birthday;
-}

+ 0 - 18
tenant/organization/src/main/java/com/jzg/organization/consumer/message/NormalMessage.java

@@ -1,18 +0,0 @@
-package com.jzg.organization.consumer.message;
-
-import com.jzg.domain.BaseMessage;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-/**
- * @author dongxin
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@AllArgsConstructor
-@NoArgsConstructor
-public class NormalMessage extends BaseMessage {
-    private String message;
-}

+ 0 - 25
tenant/organization/src/main/java/com/jzg/organization/consumer/message/OrderMessage.java

@@ -1,25 +0,0 @@
-package com.jzg.organization.consumer.message;
-
-import com.jzg.domain.BaseMessage;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-import java.time.LocalDateTime;
-
-/**
- * @author jam
- * 公众号:JAVA日知录
- * @date 2023/3/30 11:32
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@AllArgsConstructor
-@NoArgsConstructor
-public class OrderMessage extends BaseMessage {
-
-    private LocalDateTime tradeTime;
-
-    private String body;
-}

+ 53 - 0
tenant/organization/src/main/java/com/jzg/organization/consumer/message/UserMessage.java

@@ -0,0 +1,53 @@
+package com.jzg.organization.consumer.message;
+
+import com.jzg.domain.BaseMessage;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 订单消息模板
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserMessage extends BaseMessage {
+
+
+    /**
+     * 发送时间
+     */
+    private LocalDateTime sendTime;
+
+    /**
+     * 发送标题
+     */
+    private String title;
+
+    /**
+     * 发送内容
+     */
+    private String body;
+
+    /**
+     * 接收用户
+     */
+    private List<String> receiverUser;
+
+    /**
+     * 跳转链接
+     */
+    private String linkUrl;
+
+    /**
+     * 模板code
+     */
+    private String tplCode;
+
+
+}

+ 0 - 37
tenant/organization/src/main/java/com/jzg/organization/consumer/templete/OrderMessageTemplate.java

@@ -1,37 +0,0 @@
-package com.jzg.organization.consumer.templete;
-
-import com.jzg.organization.consumer.message.OrderMessage;
-import com.jzg.templete.RocketMQEnhanceTemplate;
-import jakarta.validation.constraints.NotNull;
-import org.apache.rocketmq.client.producer.SendResult;
-import org.apache.rocketmq.spring.core.RocketMQTemplate;
-import org.springframework.stereotype.Component;
-
-import java.time.LocalDateTime;
-
-/**
- * @author dongxin
- * 订单类发送消息模板工具类
- */
-@Component
-public class OrderMessageTemplate extends RocketMQEnhanceTemplate {
-
-    public OrderMessageTemplate(RocketMQTemplate template) {
-        super(template);
-    }
-
-    /**
-     * 入参只需要传入是哪个订单号和业务体消息即可,其他操作根据需要处理
-     * 这样对于调用者而言,可以更加简化调用
-     */
-    public SendResult sendOrderPaid(@NotNull String orderId, String body) {
-        OrderMessage message = new OrderMessage();
-        message.setKey(orderId);
-        message.setSource("ORDER");
-        message.setBody(body);
-        // 这两个字段只是为了测试
-        message.setTradeTime(LocalDateTime.now());
-        return send("rocket_enhance", "CREATE", message);
-    }
-
-}

+ 42 - 0
tenant/organization/src/main/java/com/jzg/organization/consumer/templete/UserMessageTemplate.java

@@ -0,0 +1,42 @@
+package com.jzg.organization.consumer.templete;
+
+import com.jzg.commons.entity.enums.MessageCodeEnum;
+import com.jzg.commons.entity.enums.MessageSourceEnum;
+import com.jzg.commons.entity.enums.MessageTopicEnum;
+import com.jzg.commons.entity.enums.MessageTypeEnum;
+import com.jzg.organization.consumer.message.UserMessage;
+import com.jzg.templete.RocketMQEnhanceTemplate;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author dongxin
+ * 用户类发送消息模板工具类
+ */
+@Component
+public class UserMessageTemplate extends RocketMQEnhanceTemplate {
+
+
+    public UserMessageTemplate(RocketMQTemplate template) {
+        super(template);
+    }
+
+
+    public SendResult sendAddUser(String id, String tplName, String content, MessageCodeEnum tplCode, List<String> recerveList) {
+        UserMessage message = new UserMessage();
+        message.setKey(id);
+        message.setSource(MessageSourceEnum.ADDISSUEUSER.getCode());
+        message.setTitle(tplName);
+        message.setBody(content);
+        message.setReceiverUser(recerveList);
+        message.setSendTime(LocalDateTime.now());
+        message.setTplCode(tplCode.getCode());
+        SendResult result = send(MessageTopicEnum.ROCKET_USER.getCode(), MessageTypeEnum.USER.getCode(), message);
+        return result;
+
+    }
+}

+ 0 - 65
tenant/organization/src/main/java/com/jzg/organization/controller/mq/EnhanceProduceController.java

@@ -1,65 +0,0 @@
-package com.jzg.organization.controller.mq;
-
-import com.jzg.organization.consumer.message.MemberMessage;
-import com.jzg.organization.consumer.templete.OrderMessageTemplate;
-import com.jzg.templete.RocketMQEnhanceTemplate;
-import lombok.Setter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.rocketmq.client.producer.SendResult;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.time.LocalDate;
-import java.util.UUID;
-
-/**
- * @author dongxin
- * 使用增强类发送消息
- */
-@RestController
-@RequestMapping("enhance")
-@Slf4j
-public class EnhanceProduceController {
-
-    @Setter(onMethod_ = @Autowired)
-    private RocketMQEnhanceTemplate rocketMQEnhanceTemplate;
-
-    @Setter(onMethod_ = @Autowired)
-    private OrderMessageTemplate orderMessageTemplate;
-
-    private static final String topic = "rocket_enhance";
-    private static final String tag = "member";
-
-    /**
-     * 发送实体消息
-     */
-    @GetMapping("/member")
-    public SendResult member() {
-        String key = UUID.randomUUID().toString();
-        MemberMessage message = new MemberMessage();
-        // 设置业务key
-        message.setKey(key);
-        // 设置消息来源,便于查询
-        message.setSource("MEMBER");
-        // 业务消息内容
-        message.setUserName("dongxin");
-        message.setBirthday(LocalDate.now());
-
-
-        return rocketMQEnhanceTemplate.send(topic, tag, message);
-    }
-
-
-//    /**
-//     * 定制模板消息
-//     */
-//    @GetMapping("/order")
-//    public SendResult order() {
-//        String key = "ORDER:"+ UUID.randomUUID();
-//        return orderMessageTemplate.sendOrderPaid(key, "客户下单了,请备货");
-//    }
-
-
-}

+ 0 - 110
tenant/organization/src/main/java/com/jzg/organization/controller/mq/NormalProduceController.java

@@ -1,110 +0,0 @@
-package com.jzg.organization.controller.mq;
-
-import com.jzg.organization.consumer.message.NormalMessage;
-import com.jzg.templete.RocketMQEnhanceTemplate;
-import lombok.Setter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.rocketmq.client.producer.SendResult;
-import org.apache.rocketmq.spring.core.RocketMQTemplate;
-import org.apache.rocketmq.spring.support.RocketMQHeaders;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.messaging.Message;
-import org.springframework.messaging.support.MessageBuilder;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.UUID;
-
-/**
- * @author dongxin
- */
-@RestController
-@RequestMapping("normal")
-@Slf4j
-public class NormalProduceController {
-    @Setter(onMethod_ = @Autowired)
-    private RocketMQTemplate rocketmqTemplate;
-
-    @Setter(onMethod_ = @Autowired)
-    private RocketMQEnhanceTemplate rocketMQEnhanceTemplate;
-    private static final String topic = "rocket_normal";
-    private static final String tag = "test";
-
-    /**
-     * 发送实体消息
-     */
-    @GetMapping("/test")
-    public void test() {
-        String key = UUID.randomUUID().toString();
-        NormalMessage message = new NormalMessage();
-        // 设置业务key
-        message.setKey(key);
-        // 设置消息来源,便于查询
-        message.setSource("NORMAL");
-        // 业务消息内容
-        message.setMessage("Hello,RocketMQ");
-
-
-        Message<NormalMessage> buildMessage = MessageBuilder.withPayload(message)
-                .setHeader(RocketMQHeaders.KEYS, message.getKey()) // 业务Keys
-                .build();
-
-        //构建topic + tag 的格式
-        String destination = topic + ":" + tag;
-
-        //1. 发送同步消息
-        SendResult sendResult = rocketmqTemplate.syncSend(destination, buildMessage);
-        log.info("发送结果:" + sendResult.toString());
-
-        //2. 发送延时消息
-//        SendResult sendResult = rocketmqTemplate.syncSend(destination, buildMessage, 10000, EnhanceMessageConstant.FIVE_SECOND);
-//        log.info("[{}]延迟等级[{}]消息[{}]发送结果[{}]", destination, EnhanceMessageConstant.FIVE_SECOND, JSONObject.toJSON(message), JSONObject.toJSON(sendResult));
-        //3. 发送同步顺序消息
-        //发送同步有序消息,需要指定hashKey,可以用业务唯一键
-        //rocketmqTemplate.syncSendOrderly(destination,buildMessage,rocketMessage.getId().toString());
-
-        //4. 发送异步消息
-//        rocketmqTemplate.asyncSend(destination, buildMessage, new SendCallback() {
-//            @Override
-//            public void onSuccess(SendResult sendResult) {
-//                log.info("消息发送成功:{}",sendResult.getMsgId());
-//            }
-//
-//            @Override
-//            public void onException(Throwable throwable) {
-//                log.error("消息发送异常:{}",throwable.getMessage());
-//            }
-//        });
-
-        //5. 发送单向消息
-//        rocketmqTemplate.sendOneWay(destination,buildMessage);
-
-        // 6. 发送批量消息
-//        List<Message<RocketMessage>> messageList = new ArrayList<>();
-//        messageList.add(buildMessage);
-//
-//        rocketmqTemplate.syncSend(destination,messageList);
-    }
-
-
-    /**
-     * 发送普通消息如何实现自动隔离呢?
-     * 需要重新构建destination
-     */
-    @RequestMapping("/message")
-    public SendResult convertAndSend() {
-        String key = UUID.randomUUID().toString();
-        NormalMessage message = new NormalMessage();
-        // 设置业务key
-        message.setKey(key);
-        // 设置消息来源,便于查询
-        message.setSource("NORMAL");
-        // 业务消息内容
-        message.setMessage("Hello,world");
-        //生成环境隔离后的目的地
-        String destination = rocketMQEnhanceTemplate.buildDestination(topic, tag);
-        // 如果要走内部方法发送则必须要按照标准来,否则就使用原生的消息发送
-        return rocketmqTemplate.syncSend(destination, message);
-    }
-}

+ 19 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysMessageServiceImpl.java

@@ -7,14 +7,19 @@ import com.jzg.commons.entity.dto.MessageAddParam;
 import com.jzg.commons.entity.dto.MessageParam;
 import com.jzg.commons.entity.po.SysMessage;
 import com.jzg.commons.entity.po.SysMessageNotice;
+import com.jzg.commons.entity.po.SysMessageUser;
 import com.jzg.commons.entity.vo.MessageVo;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.organization.mapper.SysMessageMapper;
+import com.jzg.organization.mapper.SysMessageUserMapper;
 import com.jzg.organization.service.SysMessageService;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -29,6 +34,9 @@ import java.util.stream.Stream;
 public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMessage>
     implements SysMessageService {
 
+    @Autowired
+    private SysMessageUserMapper messageUserMapper;
+
     @Override
     public Page<MessageVo> queryPage(MessageParam param) {
         return baseMapper.queryPage(param.getPage(), param);
@@ -49,11 +57,22 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void messageAdd(MessageAddParam param) {
         SysMessage message = new SysMessage();
         BeanUtils.copyProperties(param, message);
         this.save(message);
         // 新增接收信息
+        List<String> receiveList = param.getReceive();
+        List<SysMessageUser> sysMessageUsers = new ArrayList<>();
+        for (String userId : receiveList) {
+            SysMessageUser sysMessageUser = new SysMessageUser();
+            sysMessageUser.setMessageId(message.getId());
+            sysMessageUser.setUserId(userId);
+            sysMessageUser.setIsRead(0);
+            sysMessageUsers.add(sysMessageUser);
+        }
+        messageUserMapper.insert(sysMessageUsers);
     }
 }
 

+ 2 - 2
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysMessageTemplateServiceImpl.java

@@ -27,8 +27,8 @@ public class SysMessageTemplateServiceImpl extends ServiceImpl<SysMessageTemplat
     public SysMessageTemplate getModel(MessageCodeEnum messageCodeEnum) {
         LambdaQueryWrapper<SysMessageTemplate> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(SysMessageTemplate::getTplCode, messageCodeEnum.getCode())
-                .eq(SysMessageTemplate::getIsEnable, true)
-                .eq(SysMessageTemplate::getIsDelete, true);
+                .eq(SysMessageTemplate::getIsEnable, 0)
+                .eq(SysMessageTemplate::getIsDelete, 0);
         return baseMapper.selectOne(wrapper);
     }
 }

+ 51 - 5
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java

@@ -3,20 +3,26 @@ package com.jzg.organization.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzg.commons.constants.dict.InsOrderStatusEnum;
+import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.base.HistoryDataService;
 import com.jzg.commons.core.base.StateResult;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.SysUserInfoParam;
 import com.jzg.commons.entity.dto.SysUserJzgInfoBankCardDto;
 import com.jzg.commons.entity.dto.SysUserJzgInfoDto;
+import com.jzg.commons.entity.enums.MessageCodeEnum;
 import com.jzg.commons.entity.po.*;
 import com.jzg.commons.entity.user.vo.SysTennatVo;
 import com.jzg.commons.entity.vo.*;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.exception.ValidateException;
+import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.MinioUtils;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.commons.util.idgen.IdGenerate;
+import com.jzg.organization.client.OrgClient;
+import com.jzg.organization.consumer.templete.UserMessageTemplate;
 import com.jzg.organization.mapper.SysUploadFilesMapper;
 import com.jzg.organization.mapper.SysUserJzgInfoMapper;
 import com.jzg.organization.mapper.SysUserMapper;
@@ -24,16 +30,18 @@ import com.jzg.organization.service.*;
 import com.jzg.organization.state.UserState;
 import com.jzg.organization.state.listener.UserStateListener;
 import jakarta.annotation.Resource;
+import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.statemachine.StateMachine;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.math.BigDecimal;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -80,6 +88,16 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Autowired
     private SysUserRoleService sysUserRoleService;
 
+    @Qualifier("baseController")
+    @Autowired
+    private BaseController baseController;
+
+    @Autowired
+    private OrgClient orgClient;
+
+    @Setter(onMethod_ = @Autowired)
+    private UserMessageTemplate userMessageTemplate;
+
     private String getCurrentAreaCode(String province,String city,String area){
         String userWorkNumber = "";
         if (!area.isEmpty()) {
@@ -270,9 +288,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public HttpResult addUserInfo(SysUserVo sysUserVo) {
         SysUser sysUser = baseMapper.getUserByMobile(sysUserVo.getMobile());
         String sysUserJzgInfoId = "",sysUserId = "";
+        SysUserJzgInfo sysUserJzgInfo = new SysUserJzgInfo();
         if (!Objects.isNull(sysUser)) {
             verifyUser(sysUserVo.getTypeAttr(),sysUserVo.getDeptId(),sysUserVo.getIdentity(),sysUser.getId(),sysUserVo.getLeaderId(),sysUserVo.getReferrerId(),sysUserVo.getMobile());
-            SysUserJzgInfo sysUserJzgInfo = new SysUserJzgInfo();
             BeanUtils.copyProperties(sysUserVo, sysUserJzgInfo);
             sysUserJzgInfo.setUserId(sysUser.getId());
             sysUserJzgInfoService.save(sysUserJzgInfo);
@@ -288,7 +306,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             // 如果手机号为新号 重新生成SysUser 设置默认密码
             SysUser sysUser1 = new SysUser(sysUserVo.getMobile(),sysUserVo.getMobile());
             this.save(sysUser1);
-            SysUserJzgInfo sysUserJzgInfo = new SysUserJzgInfo();
             BeanUtils.copyProperties(sysUserVo, sysUserJzgInfo);
             sysUserJzgInfo.setId(IdGenerate.nextId());
             sysUserJzgInfo.setUserId(sysUser1.getId());
@@ -323,9 +340,38 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         }else{
             resultMsg = "添加业务员成功";
         }
+
+        // 发送新增业务员消息
+        this.addUserMessage(baseController.getUserName(), sysUserJzgInfo, MessageCodeEnum.TEMPLATE_11);
         return HttpResult.ok(resultMsg);
     }
 
+    /**
+     * 新增业务员消息
+     * @param userName
+     * @param sysUserJzgInfo
+     * @param tplCode
+     */
+    private void addUserMessage(String userName, SysUserJzgInfo sysUserJzgInfo, MessageCodeEnum tplCode) {
+        // 获取消息模板 并替换内容
+        HttpResult<SysMessageTemplate>  result = orgClient.templateGet(tplCode,
+                baseController.getToken());
+        SysMessageTemplate template = result.getData();
+        AssertionUtils.isFail(Objects.isNull(template),"获取模板失败!");
+        Map<String, Object> valuesMap = new HashMap<>();
+        valuesMap.put("addUser",sysUserJzgInfo.getName());
+        valuesMap.put("createBy", userName);
+        valuesMap.put("issueName","");
+        valuesMap.put("issueNumber","");
+        String content = StringUtils.replaceContent(template.getContent(),valuesMap);
+        // 获取出单员
+        String operatorCode = sysUserJzgInfo.getOperatorCode();
+        // 获取接收用户
+        List<String> recerveList = new ArrayList<>();
+        userMessageTemplate.sendAddUser(sysUserJzgInfo.getId(), template.getTplName(),
+                content, tplCode,recerveList);
+    }
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)

+ 2 - 3
tenant/organization/src/main/resources/mapper/SysMessageMapper.xml

@@ -8,7 +8,6 @@
             <id property="id" column="id" jdbcType="VARCHAR"/>
             <result property="title" column="title" jdbcType="VARCHAR"/>
             <result property="content" column="content" jdbcType="VARCHAR"/>
-            <result property="tplId" column="tpl_id" jdbcType="VARCHAR"/>
             <result property="tplCode" column="tpl_code" jdbcType="VARCHAR"/>
             <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
             <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
@@ -23,13 +22,13 @@
         update_by,update_time,is_delete
     </sql>
     <select id="queryPage" resultType="com.jzg.commons.entity.vo.MessageVo">
-        SELECT sm.id, sm.title, sm.content, sm.tpl_id AS tplId,
+        SELECT sm.id, sm.title, sm.content, smt.id AS tplId,
         sm.tpl_code AS tplCode,sm.create_by as createBy,sm.create_time as createTime,
         sm.update_by as updateBy,sm.update_time as updateTime,sm.is_delete as isDelete,sm.system_code as systemCode,
         smu.user_id as userId, smu.is_read as isRead ,smt.type as tplType
         FROM sys_message_user smu
         LEFT JOIN sys_message sm on smu.message_id = sm.id
-        LEFT JOIN sys_message_template smt on sm.tpl_id = smt.id
+        LEFT JOIN sys_message_template smt on sm.tpl_code = smt.tpl_code
         <where>
             <if test="param.type != null">
                 and smt.type = #{param.type}