785834757 11 месяцев назад
Родитель
Сommit
a9450cee9a
49 измененных файлов с 1631 добавлено и 39 удалено
  1. 22 0
      commons/src/main/java/com/jzg/commons/entity/action/base/ActionHandler.java
  2. 34 0
      commons/src/main/java/com/jzg/commons/entity/action/enums/ActionEnum.java
  3. 40 0
      commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatch.java
  4. 35 0
      commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatchAction.java
  5. 37 0
      commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatchAfterAction.java
  6. 57 0
      commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatchRulesAttrLink.java
  7. 20 0
      commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/vo/PtlAgreementDispatchQuery.java
  8. 87 0
      commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/vo/PtlAgreementDispatchVo.java
  9. 106 0
      commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/vo/ValidateDispatchRuleVo.java
  10. 6 0
      commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrders.java
  11. 11 1
      commons/src/main/java/com/jzg/commons/entity/quote/vo/QuoteVo.java
  12. 10 0
      commons/src/main/java/com/jzg/commons/entity/quote/vo/base/OrderBase.java
  13. 6 0
      commons/src/main/java/com/jzg/commons/entity/scheme/po/PtlSchemeRulesAttrLink.java
  14. 6 0
      commons/src/main/java/com/jzg/commons/entity/scheme/vo/PtlAgreementInsCompanyVo.java
  15. 11 8
      commons/src/main/java/com/jzg/commons/entity/scheme/vo/PtlSchemeSaveVo.java
  16. 46 1
      tenant/costsorrule/src/main/java/com/jzg/costsorrule/controller/RuleController.java
  17. 9 0
      tenant/costsorrule/src/main/java/com/jzg/costsorrule/service/RuleService.java
  18. 35 9
      tenant/costsorrule/src/main/java/com/jzg/costsorrule/service/impl/RuleServiceImpl.java
  19. 24 5
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java
  20. 50 3
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java
  21. 7 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrdersController.java
  22. 3 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  23. 9 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java
  24. 10 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  25. 53 0
      tenant/organization/src/main/java/com/jzg/organization/action/ActionExecutor.java
  26. 29 0
      tenant/organization/src/main/java/com/jzg/organization/action/service/CancelQuoteHandler.java
  27. 28 0
      tenant/organization/src/main/java/com/jzg/organization/action/service/ChangeBsAccountHandler.java
  28. 34 0
      tenant/organization/src/main/java/com/jzg/organization/action/service/ChangePocHandler.java
  29. 62 0
      tenant/organization/src/main/java/com/jzg/organization/action/service/SendNotifyMsgHandler.java
  30. 27 0
      tenant/organization/src/main/java/com/jzg/organization/action/service/SpecifyAgreementHandler.java
  31. 23 0
      tenant/organization/src/main/java/com/jzg/organization/action/service/SupplementaryOrderHandler.java
  32. 11 0
      tenant/organization/src/main/java/com/jzg/organization/client/CostsRuleClient.java
  33. 10 1
      tenant/organization/src/main/java/com/jzg/organization/client/EsmInsCompanyClient.java
  34. 18 0
      tenant/organization/src/main/java/com/jzg/organization/client/OrgClient.java
  35. 15 0
      tenant/organization/src/main/java/com/jzg/organization/client/QuoteClient.java
  36. 90 0
      tenant/organization/src/main/java/com/jzg/organization/controller/PtlAgreementDispatchController.java
  37. 15 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementDispatchActionMapper.java
  38. 15 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementDispatchAfterActionMapper.java
  39. 11 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementDispatchMapper.java
  40. 12 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementDispatchRulesAttrLinkMapper.java
  41. 75 0
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementDispatchService.java
  42. 2 0
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementUndwrtRulesAttrService.java
  43. 3 1
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementUndwrtRulesDictLabalService.java
  44. 278 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementDispatchServiceImpl.java
  45. 7 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesAttrServiceImpl.java
  46. 8 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesDictLabalServiceImpl.java
  47. 77 8
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java
  48. 25 0
      tenant/organization/src/main/resources/mapper/PtlAgreementDispatchActionMapper.xml
  49. 22 0
      tenant/organization/src/main/resources/mapper/PtlAgreementDispatchAfterActionMapper.xml

+ 22 - 0
commons/src/main/java/com/jzg/commons/entity/action/base/ActionHandler.java

@@ -0,0 +1,22 @@
+package com.jzg.commons.entity.action.base;
+
+import com.jzg.commons.entity.action.enums.ActionEnum;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import org.springframework.stereotype.Component;
+
+// 动作处理
+
+@Component
+public interface ActionHandler {
+
+    /**
+    获取动作枚举
+     */
+    ActionEnum getActionEnum();
+
+    /**
+     * 执行动作逻辑
+     * @param params
+     */
+    QuoteVo execute(String orderNo, QuoteVo quoteVo, Object params);
+}

+ 34 - 0
commons/src/main/java/com/jzg/commons/entity/action/enums/ActionEnum.java

@@ -0,0 +1,34 @@
+package com.jzg.commons.entity.action.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum ActionEnum {
+    SPECIFY_AGREEMENT("specify_agreement","指定协议"),
+    CANCEL_QUOTE("cancel_quote","终止报价"),
+    SEND_NOTIFY_MSG("send_notify_msg","发送通知消息"),
+    SUPPLEMENTARY_ORDER ("supplementary_order","补录订单"),
+    CHANGE_POC("change_poc","更换对接人"),
+    CHANGE_BS_ACCOUNT("change_bs_account","更换保司账号")
+    ;
+
+    private final String code;
+
+    private final String desc;
+
+    /**
+     * 根据code 获取动作枚举
+     * @param code
+     * @return
+     */
+    public static ActionEnum getByCode(String code){
+        for (ActionEnum action : ActionEnum.values()) {
+            if (action.getCode().equals(code)) {
+                return action;
+            }
+        }
+        return null;
+    }
+}

+ 40 - 0
commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatch.java

@@ -0,0 +1,40 @@
+package com.jzg.commons.entity.agreement.dispatch.dto;
+
+import com.jzg.commons.core.base.BaseModel;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchVo;
+import com.jzg.commons.util.idgen.IdGenerate;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(description = "协议调度实体")
+public class PtlAgreementDispatch extends BaseModel {
+
+    @Schema(description = "id")
+    private String id;
+
+    @Schema(description = "保司id")
+    private String companyId;
+
+    @Schema(description = "调度名称")
+    private String dispatchName;
+
+    public PtlAgreementDispatch(PtlAgreementDispatchVo.DispatchVo vo){
+        if (vo.getDispatchId() == null || vo.getDispatchId().isEmpty()) {
+            this.id = IdGenerate.nextId();
+        }
+        this.companyId = vo.getCompanyId();
+        if(vo.getDispatchName() == null || vo.getDispatchName().isEmpty()) {
+            this.dispatchName = "";
+        }else {
+            this.dispatchName = vo.getDispatchName();
+        }
+    }
+
+}

+ 35 - 0
commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatchAction.java

@@ -0,0 +1,35 @@
+package com.jzg.commons.entity.agreement.dispatch.dto;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Map;
+
+@Data
+@Schema(description = "协议调度动作实体")
+public class PtlAgreementDispatchAction implements Serializable {
+
+    private static final long serialVersionUID = 1000183859846970741L;
+
+    @Schema(description = "id")
+    private String id;
+
+    @Schema(description = "调度id")
+    private String dispatchId;
+
+    @Schema(description = "动作code")
+    private String actionCode;
+
+    @Schema(description = "动作json")
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private JSONObject actionJson;
+
+    @Schema(description = "动作名称")
+    @TableField(exist = false)
+    private String actionName;
+
+}

+ 37 - 0
commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatchAfterAction.java

@@ -0,0 +1,37 @@
+package com.jzg.commons.entity.agreement.dispatch.dto;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@Schema(description = "协议调度之后动作实体")
+public class PtlAgreementDispatchAfterAction implements Serializable {
+
+    private static final long serialVersionUID = 1000183859846970741L;
+
+    @Schema(description = "id")
+    private String id;
+
+    @Schema(description = "保司id")
+    private String companyId;
+
+    @Schema(description = "动作code")
+    private String actionCode;
+
+    @Schema(description = "动作json")
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private JSONObject actionJson;
+
+    @Schema(description = "系统code")
+    private String systemCode;
+
+    @Schema(description = "动作名称")
+    @TableField(exist = false)
+    private String actionName;
+
+}

+ 57 - 0
commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatchRulesAttrLink.java

@@ -0,0 +1,57 @@
+package com.jzg.commons.entity.agreement.dispatch.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+@Schema(description = "协议调度规则属性关联实体")
+public class PtlAgreementDispatchRulesAttrLink implements Serializable {
+
+    private static final long serialVersionUID = 1000183859846970741L;
+
+    @Schema(description = "id")
+    private String id;
+
+    @Schema(description = "调度id")
+    private String dispatchId;
+
+    @Schema(description = "规则属性id")
+    private String attrId;
+
+    @Schema(description = "规则code")
+    private String attrCode;
+
+    @Schema(description = "左操作符")
+    private String min;
+
+    @Schema(description = "操作符")
+    private String operator;
+
+    @Schema(description = "右操作符")
+    private String max;
+
+    @TableField(exist = false)
+    private List<String> minArray = new ArrayList<>();
+
+    @Schema(description = "分组")
+    private String section;
+
+    @Schema(description = "操作符描述")
+    @TableField(exist = false)
+    private String operatorDesc;
+
+    @Schema(description = "规则描述")
+    @TableField(exist = false)
+    private List<String> attrDesc;
+
+    @Schema(description = "规则code名称")
+    @TableField(exist = false)
+    private String attrCodeName;
+
+
+}

+ 20 - 0
commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/vo/PtlAgreementDispatchQuery.java

@@ -0,0 +1,20 @@
+package com.jzg.commons.entity.agreement.dispatch.vo;
+
+import lombok.Data;
+
+/**
+ * 协议调度查询实体
+ */
+@Data
+public class PtlAgreementDispatchQuery {
+
+    /**
+     * 调度id
+     */
+    private String dispatchId;
+
+    /**
+     * 保险公司id
+     */
+    private String companyId;
+}

+ 87 - 0
commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/vo/PtlAgreementDispatchVo.java

@@ -0,0 +1,87 @@
+package com.jzg.commons.entity.agreement.dispatch.vo;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatch;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAction;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAfterAction;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchRulesAttrLink;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+@Data
+@Schema(description = "协议调度VO")
+public class PtlAgreementDispatchVo {
+
+    /**
+     * 调度信息
+     */
+    private List<DispatchVo> dispatchVos;
+
+    /**
+     * 报价之后的动作列表
+     */
+    private List<PtlAgreementDispatchAfterAction> afterActions;
+
+    public PtlAgreementDispatchVo(){
+        if(this.dispatchVos == null){
+            this.dispatchVos = new ArrayList<>();
+        }
+        if(this.afterActions == null){
+            this.afterActions = new ArrayList<>();
+        }
+    }
+
+    public PtlAgreementDispatchVo(PtlAgreementDispatch dispatch,List<PtlAgreementDispatchRulesAttrLink> attrLinks,List<PtlAgreementDispatchAction> actions){
+        if(this.dispatchVos == null){
+            this.dispatchVos = new ArrayList<>();
+        }
+        if(this.afterActions == null){
+            this.afterActions = new ArrayList<>();
+        }
+    }
+
+
+    @Data
+    public static class DispatchVo{
+        /**
+         * 调度id
+         */
+        private String dispatchId;
+
+        /**
+         * 保险公司id
+         */
+        private String companyId;
+
+        /**
+         * 调度名称
+         */
+        private String dispatchName;
+
+        /**
+         * 规则列表
+         */
+        private List<PtlAgreementDispatchRulesAttrLink> attrLinks;
+
+        /**
+         * 动作列表
+         */
+        private List<PtlAgreementDispatchAction> actions;
+
+        public DispatchVo(){
+
+        }
+
+        public DispatchVo(PtlAgreementDispatch dispatch,List<PtlAgreementDispatchRulesAttrLink> attrLinks,List<PtlAgreementDispatchAction> actions){
+            this.dispatchId = dispatch.getId();
+            this.companyId = dispatch.getCompanyId();
+            this.dispatchName = dispatch.getDispatchName();
+            this.attrLinks = attrLinks;
+            this.actions = actions;
+        }
+    }
+}

+ 106 - 0
commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/vo/ValidateDispatchRuleVo.java

@@ -0,0 +1,106 @@
+package com.jzg.commons.entity.agreement.dispatch.vo;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchRulesAttrLink;
+import com.jzg.commons.entity.po.SysDict;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.entity.scheme.po.PtlSchemeRulesAttrLink;
+import com.jzg.commons.entity.scheme.vo.SchemeRuleFilterVo;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.redisson.api.RList;
+import org.redisson.api.RedissonClient;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import static com.jzg.commons.constants.RedisKeyConstants.DICT_REDIS_KEY;
+
+@AllArgsConstructor
+@Data
+public class ValidateDispatchRuleVo {
+    private QuoteVo quoteVo;
+
+    private List<DispatchAttrVo> dispatchAttrVos;
+
+    @Data
+    public static class DispatchAttrVo {
+
+        /**
+         * 调度id
+         */
+        private String dispatchId;
+
+        /**
+         * 保险公司id
+         */
+        private String companyId;
+
+        /**
+         * 调度名称
+         */
+        private String dispatchName;
+
+        /**
+         * 分组
+         */
+        private List<Section> sections;
+
+        public void setSectionGroups(Map<String, List<PtlAgreementDispatchRulesAttrLink>> grouped){
+            List<Section> nSections = new ArrayList<>();
+            grouped.forEach((key,value)->{
+                Section section = new Section();
+                section.section = key;
+                section.attrLinks = value;
+                nSections.add(section);
+            });
+            this.sections =  nSections;
+        }
+
+    }
+
+    @Data
+    public static class Section{
+        /**
+         * 分组
+         */
+        private String section;
+        /**
+         * 规则列表
+         */
+        private List<PtlAgreementDispatchRulesAttrLink> attrLinks;
+    }
+
+    public void builderQuoteVo(SchemeRuleFilterVo schemeRuleFilterVo, RedissonClient redissonClient){
+        if(Objects.isNull(quoteVo)){
+            quoteVo = new QuoteVo();
+        }
+        this.quoteVo.setCarInfoVo(schemeRuleFilterVo.getCarInfo());
+        this.quoteVo.setOwnersInfo(schemeRuleFilterVo.getOwnerInfo());
+        this.quoteVo.setPolicyHolderInfo(schemeRuleFilterVo.getApplyInfo());
+        this.quoteVo.setInsuredPersonInfo(schemeRuleFilterVo.getInsureInfo());
+
+        //转换字典value转成label
+        //车辆性质
+        RList<SysDict> carNatureCode = redissonClient.getList(DICT_REDIS_KEY + "car_nature_code");
+        this.quoteVo.getCarInfoVo().setCarNatureCode(
+                carNatureCode.stream().filter(x -> x.getValue().equals(this.quoteVo.getCarInfoVo().getCarNatureCode())).findFirst().get().getValue());
+        //能源类型
+        RList<SysDict> energyTypeCode = redissonClient.getList(DICT_REDIS_KEY + "energy_type_code");
+        this.quoteVo.getCarInfoVo().setEnergyTypeCode(
+                energyTypeCode.stream().filter(x->x.getValue().equals(this.quoteVo.getCarInfoVo().getEnergyTypeCode())).findFirst().get().getValue()
+        );
+
+        RList<SysDict> vehicleUseCode = redissonClient.getList(DICT_REDIS_KEY + "car_kind_code");
+        this.quoteVo.getCarInfoVo().setCarKindCode(
+                vehicleUseCode.stream().filter(x->x.getValue().equals(this.quoteVo.getCarInfoVo().getCarKindCode())).findFirst().get().getValue()
+        );
+    }
+
+    public ValidateDispatchRuleVo(){
+        this.dispatchAttrVos = new ArrayList<>();
+    }
+}

+ 6 - 0
commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrders.java

@@ -98,4 +98,10 @@ public class InsOrders extends BaseModel {
     @Schema(description = "报价失败信息")
     private String errorMessage;
 
+    @Schema(description = "对接人姓名")
+    private String dockingPerson;
+
+    @Schema(description = "对接人电话")
+    private String dockingPersonPhone;
+
 }

+ 11 - 1
commons/src/main/java/com/jzg/commons/entity/quote/vo/QuoteVo.java

@@ -3,6 +3,7 @@ package com.jzg.commons.entity.quote.vo;
 
 import com.jzg.commons.entity.orders.po.InsOrdersCarUserInfo;
 import com.jzg.commons.entity.po.InsCompanyClause;
+import com.jzg.commons.entity.scheme.vo.SchemeRuleFilterVo;
 import com.jzg.commons.entity.vo.CompanyClauseVo;
 import com.jzg.commons.entity.vo.InsOrdersOtherInfoVo;
 import com.jzg.commons.util.IDCardUtils;
@@ -180,5 +181,14 @@ public class QuoteVo implements Serializable {
         return List.of(this.ownersInfo, this.insuredPersonInfo, this.policyHolderInfo);
     }
 
-
+    public SchemeRuleFilterVo toSchemeRuleFilterVo(){
+        SchemeRuleFilterVo vo = new SchemeRuleFilterVo();
+        vo.setCarInfo(this.carInfoVo);
+        vo.setApplyInfo(this.policyHolderInfo);
+        vo.setInsureInfo(this.insuredPersonInfo);
+        vo.setOwnerInfo(this.ownersInfo);
+        vo.setProductId(this.order.getProductId());
+        vo.setUserId(this.order.getRealQuoteUserId());
+        return vo;
+    }
 }

+ 10 - 0
commons/src/main/java/com/jzg/commons/entity/quote/vo/base/OrderBase.java

@@ -75,6 +75,16 @@ public class OrderBase implements Serializable {
      */
     private String agreementId;
 
+    /**
+     * 判断是否是调度
+     */
+    private String isDispatch;
+
+    /**
+     * 调度id
+     */
+    private String dispatchId;
+
     /**
      * 获取保险公司编码
      */

+ 6 - 0
commons/src/main/java/com/jzg/commons/entity/scheme/po/PtlSchemeRulesAttrLink.java

@@ -33,6 +33,12 @@ public class PtlSchemeRulesAttrLink extends BaseModel {
 
     @TableField(exist = false)
     private List<String> minArray = new ArrayList<>();
+
+    /**
+     * 调度进行分组 加或的条件
+     */
+    @TableField(exist = false)
+    private String group;
 }
 
 

+ 6 - 0
commons/src/main/java/com/jzg/commons/entity/scheme/vo/PtlAgreementInsCompanyVo.java

@@ -24,6 +24,12 @@ public class PtlAgreementInsCompanyVo extends EsmInsCompany implements Serializa
 //    @Schema(description = "税源协议id")
 //    private String TaxSourceAgreementId;
 
+    @Schema(description = "是否调度")
+    private Integer isDispatch;
+
+    @Schema(description = "调度id")
+    private String dispatchId;
+
     @Schema(description = "协议信息")
     private List<PtlAgreement> agreement;
 

+ 11 - 8
commons/src/main/java/com/jzg/commons/entity/scheme/vo/PtlSchemeSaveVo.java

@@ -134,24 +134,27 @@ public class PtlSchemeSaveVo {
             }
         });
 
-        ptlScheme.setCarnature(
-                collect.stream()
+        String carNatureCode = collect.stream()
                 .filter(x -> "CarNatureCode".equals(x.getAttrCode()))
                 .findFirst()
                 .map(x -> x.getDictLabal().stream()
-                        .filter(label -> Arrays.asList(x.getMinArray()).contains(label.getName()))
+                        .filter(label -> Arrays.asList(x.getMinArray()).contains(label.getCode()))
                         .map(label -> label.getCode())
                         .collect(Collectors.joining(",")))
-                .orElse(""));
-        ptlScheme.setVehicleType(
-                collect.stream()
+                .orElse("");
+
+        ptlScheme.setCarnature(carNatureCode);
+
+        String carKindCode = collect.stream()
                 .filter(x -> "CarKindCode".equals(x.getAttrCode()))
                 .findFirst()
                 .map(x -> x.getDictLabal().stream()
-                        .filter(label -> Arrays.asList(x.getMinArray()).contains(label.getName()))
+                        .filter(label -> Arrays.asList(x.getMinArray()).contains(label.getCode()))
                         .map(label -> label.getCode())
                         .collect(Collectors.joining(",")))
-                .orElse(""));
+                .orElse("");
+        ptlScheme.setVehicleType(carKindCode);
+
         ptlScheme.setRuleDesc(buildDesc(this.getRuleAttrs(), undwrtRulesAttrList));
 
         return ptlScheme;

+ 46 - 1
tenant/costsorrule/src/main/java/com/jzg/costsorrule/controller/RuleController.java

@@ -1,9 +1,13 @@
 package com.jzg.costsorrule.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchRulesAttrLink;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchVo;
+import com.jzg.commons.entity.agreement.dispatch.vo.ValidateDispatchRuleVo;
 import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttr;
 import com.jzg.commons.entity.scheme.po.PtlSchemeRulesAttrLink;
 import com.jzg.costsorrule.mapper.PtlAgreementUndwrtRulesAttrMapper;
@@ -39,7 +43,11 @@ public class RuleController extends BaseController {
     @Autowired
     private PtlAgreementUndwrtRulesAttrMapper ptlAgreementUndwrtRulesAttrMapper;
 
-
+    /**
+     * 校验方案规则
+     * @param validateSchemeRuleVo
+     * @return
+     */
     @PostMapping(value = "/validateSchemeRule")
     public HttpResult validateSchemeRule(@RequestBody ValidateSchemeRuleVo validateSchemeRuleVo){
         Map<String, List<PtlSchemeRulesAttrLink>> maps = validateSchemeRuleVo.getAttrLinks().stream().collect(Collectors.groupingBy(PtlSchemeRulesAttrLink::getSchemeId));
@@ -65,4 +73,41 @@ public class RuleController extends BaseController {
 
         return HttpResult.ok(schemeIds);
     }
+
+    /**
+     * 校验调度规则
+     * @param
+     * @return
+     */
+    @PostMapping(value = "/validateDispatchRule")
+    public HttpResult validateSchemeRule(@RequestBody ValidateDispatchRuleVo validateDispatchRuleVo){
+        Map<String, List<PtlAgreementDispatchRulesAttrLink>> maps = new HashMap<>();
+        for (ValidateDispatchRuleVo.DispatchAttrVo dispatchAttrVo : validateDispatchRuleVo.getDispatchAttrVos()){
+            for (ValidateDispatchRuleVo.Section section : dispatchAttrVo.getSections()) {
+                maps.put(dispatchAttrVo.getDispatchId() + "-" + section.getSection(), section.getAttrLinks());
+            }
+        }
+        HashMap<String,String> attrMap = new HashMap<>();
+
+        //将传入的对象转换成Map对象用于校验因子
+        ruleService.traverseJsonObject(JSON.parseObject(JSON.toJSONString(validateDispatchRuleVo.getQuoteVo())),attrMap);
+        List<PtlAgreementUndwrtRulesAttr> rulesAttrs = ptlAgreementUndwrtRulesAttrMapper.selectList(new LambdaQueryWrapper<>());
+
+        //转换对象 将List<PtlSchemeRulesAttrLink>转换为List<RuleAttrLinkVo>
+        Map<String, List<RuleAttrLinkVo>> converMaps = ruleService.convertDispatchRule(maps);
+
+        //规则过滤 获取满足规则的方案id
+        List<String> dispatchIds = new ArrayList<>();
+        StringBuilder logs = new StringBuilder();
+        for (Map.Entry<String, List<RuleAttrLinkVo>> entry : converMaps.entrySet()) {
+            String key = entry.getKey();
+            List<RuleAttrLinkVo> vos = entry.getValue();
+            if(ruleService.verificationRule(attrMap,vos,rulesAttrs,logs)){
+                String[] keys = key.split("-");
+                dispatchIds.add(keys[0]);
+            }
+        }
+
+        return HttpResult.ok(dispatchIds);
+    }
 }

+ 9 - 0
tenant/costsorrule/src/main/java/com/jzg/costsorrule/service/RuleService.java

@@ -1,6 +1,8 @@
 package com.jzg.costsorrule.service;
 
 import com.alibaba.fastjson.JSONObject;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchRulesAttrLink;
+import com.jzg.commons.entity.agreement.dispatch.vo.ValidateDispatchRuleVo;
 import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttr;
 import com.jzg.commons.entity.scheme.po.PtlSchemeRulesAttrLink;
 import com.jzg.costsorrule.model.RuleAttrLinkVo;
@@ -34,4 +36,11 @@ public interface RuleService {
      * @return
      */
     public Map<String, List<RuleAttrLinkVo>> convertSchemeRule(Map<String, List<PtlSchemeRulesAttrLink>> schemeRules);
+
+    /**
+     * 将调度规则转换成通用规则实体
+     * @param dispatchRules
+     * @return
+     */
+    public Map<String, List<RuleAttrLinkVo>> convertDispatchRule(Map<String, List<PtlAgreementDispatchRulesAttrLink>> dispatchRules);
 }

+ 35 - 9
tenant/costsorrule/src/main/java/com/jzg/costsorrule/service/impl/RuleServiceImpl.java

@@ -2,6 +2,8 @@ package com.jzg.costsorrule.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchRulesAttrLink;
+import com.jzg.commons.entity.agreement.dispatch.vo.ValidateDispatchRuleVo;
 import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttr;
 import com.jzg.commons.entity.scheme.po.PtlSchemeRulesAttrLink;
 import com.jzg.costsorrule.constants.AttrTypeConstant;
@@ -62,15 +64,17 @@ public class RuleServiceImpl implements RuleService {
 //            logs.append("费用id:" + agreementProductCosts.get(i).getId() + "\n");
 //            logs.append("费用因子描述:" + agreementProductCosts.get(i).getCostsDescription() + "\n");
 //            String attrCode = linkVos.get(i).getAttrCode();
-            String attrValue = maps.get(linkVos.get(i).getAttrCode().toLowerCase());
-            int finalI = i;
-            PtlAgreementUndwrtRulesAttr rulesAttr = rulesAttrs.stream().filter(value -> value.getAttrCode().toLowerCase().equals(linkVos.get(finalI).getAttrCode().toLowerCase())).findFirst().orElse(null);
-            if(Objects.isNull(attrValue) || Objects.isNull(rulesAttr)){
-                return false;
-            }
-            if (!judgements(attrValue, linkVos.get(i),rulesAttr, logs)) {
-                //返回 费用id   如果需要匹配非车的情况  将返回值返回list 后赛选
-                return false;
+            if(linkVos.get(i).getAttrCode() != null) {
+                String attrValue = maps.get(linkVos.get(i).getAttrCode().toLowerCase());
+                int finalI = i;
+                PtlAgreementUndwrtRulesAttr rulesAttr = rulesAttrs.stream().filter(value -> value.getAttrCode().toLowerCase().equals(linkVos.get(finalI).getAttrCode().toLowerCase())).findFirst().orElse(null);
+                if (Objects.isNull(attrValue) || Objects.isNull(rulesAttr)) {
+                    return false;
+                }
+                if (!judgements(attrValue, linkVos.get(i), rulesAttr, logs)) {
+                    //返回 费用id   如果需要匹配非车的情况  将返回值返回list 后赛选
+                    return false;
+                }
             }
 //            log.debug("当前费用因子匹配结束\n");
         }
@@ -372,4 +376,26 @@ public class RuleServiceImpl implements RuleService {
         }
         return convertMaps;
     }
+
+    @Override
+    public Map<String, List<RuleAttrLinkVo>> convertDispatchRule(Map<String, List<PtlAgreementDispatchRulesAttrLink>> dispatchRules) {
+        Map<String, List<RuleAttrLinkVo>> convertMaps = new HashMap<>();
+        for (Map.Entry<String, List<PtlAgreementDispatchRulesAttrLink>> entry : dispatchRules.entrySet()) {
+            String key = entry.getKey();
+            List<RuleAttrLinkVo> vos = new ArrayList<>();
+            List<PtlAgreementDispatchRulesAttrLink> values = entry.getValue();
+
+            values.forEach(value->{
+                RuleAttrLinkVo vo = new RuleAttrLinkVo();
+                vo.setMin(value.getMin());
+                vo.setMax(value.getMax());
+                vo.setAttrCode(value.getAttrCode());
+                vo.setOperator(value.getOperator());
+                vo.setMinArray(value.getMinArray().toArray(new String[0]));
+                vos.add(vo);
+            });
+            convertMaps.put(key,vos);
+        }
+        return convertMaps;
+    }
 }

+ 24 - 5
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java

@@ -1,16 +1,21 @@
 package com.jzg.quotation.commons.client;
 
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.action.enums.ActionEnum;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAfterAction;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchVo;
 import com.jzg.commons.entity.dto.CostAgreementParam;
 import com.jzg.commons.entity.dto.MessageAddParam;
 import com.jzg.commons.entity.enums.MessageCodeEnum;
 import com.jzg.commons.entity.orders.po.InsOrderAdjust;
 import com.jzg.commons.entity.po.*;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.vo.*;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 @FeignClient(name="jzg-organization",url = "http://localhost:8084/")
 public interface OrgClient {
@@ -118,11 +123,25 @@ public interface OrgClient {
      * 获取租户用户
      */
     @GetMapping(value = "userInfo/getUserInfo")
-    public HttpResult<SysUserJzgInfo> getUserInfo(String userId);
+    public HttpResult<SysUserJzgInfo> getUserInfo(String id);
 
-    @GetMapping(value = "userInfo/getUserInfoById")
-    public HttpResult<SysUserJzgInfo> getUserInfoById(String id);
+    /**
+     * 获取调度动作
+     */
+    @PostMapping(value = "/ptlAgreementDispatch/getAgreementDispatchAction")
+    public HttpResult<List<PtlAgreementDispatchVo.DispatchVo>> getAgreementDispatchAction(List<String> dispatchIds);
+
+    /**
+     * 获取报价之后的调度动作
+     * @param companyId
+     * @return
+     */
+    @PostMapping(value = "/ptlAgreementDispatch/getAgreementDispatchAfterAction")
+    public HttpResult<List<PtlAgreementDispatchAfterAction>> getAgreementDispatchAfterAction(String companyId);
 
-    @PostMapping(value = "receivable/restockInsPlyIncome")
-    public void restockInsPlyIncome(@RequestBody InsOrderAdjust insOrderAdjust);
+    /**
+     * 执行调度动作
+     */
+    @PostMapping(value = "executeActions")
+    public HttpResult executeActions(@RequestParam("orderNo") String orderNo,@RequestParam("quoteVo") QuoteVo quoteVo,@RequestParam("actionMap") Map<String, Object> actionMap);
 }

+ 50 - 3
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.summary.aop.aspect;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.jzg.commons.constants.ProductsType;
 import com.jzg.commons.constants.quote.enums.quote.CarKindCode;
@@ -7,18 +8,27 @@ import com.jzg.commons.constants.quote.enums.quote.CarNatureCode;
 import com.jzg.commons.constants.quote.enums.quote.EnergyTypeCode;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.action.enums.ActionEnum;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAction;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchVo;
 import com.jzg.commons.entity.dto.CostAgreementParam;
 import com.jzg.commons.entity.orders.po.*;
 import com.jzg.commons.entity.po.*;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.entity.vo.*;
 import com.jzg.quotation.commons.client.OrgClient;
 import com.jzg.quotation.summary.service.*;
 import lombok.RequiredArgsConstructor;
+import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.AfterReturning;
 import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
@@ -62,6 +72,10 @@ public class QuoteVerificationAspect {
 
     private final BaseController baseController;
 
+    @Autowired
+    private RedissonClient redissonClient;
+
+
     @AfterReturning(pointcut = "@annotation(com.jzg.quotation.summary.aop.QuoteVerification)", returning = "result")
     public void doAfter(HttpResult<QuoteResultsVo> result) {
         if (result.getCode() == 200) {
@@ -198,7 +212,6 @@ public class QuoteVerificationAspect {
                 log.debug("传入的值找不到该属性:" + ptlAgreementProductCostsAttrLink.getAttrCode());
                 log.debug("规则匹配失败:" + ptlAgreementProductCostsAttrLink.getAttrCode());
 
-
                 List<PtlAgreementUndwrtRulesAttr> collect = undwrtRulesAttrList.stream()
                         .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
                         .toList();
@@ -720,8 +733,6 @@ public class QuoteVerificationAspect {
         // 7. 计算总应收、总应付、保存费用比例 入库
         saveRatio(insFeeOrders, agreementInfoVo, jqCostType, syCostType, jyCostType);
         calculateTotalPremium(insFeeOrders);
-        // 8. 计算分销费用
-        calculateDistributionFee(insOrdersCosts,insFeeOrders, insOrders);
         insFeeOrdersService.save(insFeeOrders);
     }
 
@@ -961,4 +972,40 @@ public class QuoteVerificationAspect {
             }
         }
     }
+
+    @Before("@annotation(com.jzg.quotation.summary.aop.QuoteVerification)")
+    public void doBefore(JoinPoint point) {
+        Object[] args = point.getArgs();
+        for (Object arg : args) {
+            if (arg instanceof QuoteVo) {
+                // 1.根据参数判断是否存在调度信息
+                QuoteVo quoteVo = (QuoteVo)arg;
+                // 判断是否匹配到调度
+                if(quoteVo.getOrder().getIsDispatch() != null && quoteVo.getOrder().getIsDispatch().equals("1")){
+                    // 获取调度动作
+                    String dispatchId = quoteVo.getOrder().getDispatchId();
+                    List<String> dispatchIds = new ArrayList<>();
+                    dispatchIds.add(dispatchId);
+                    HttpResult<List<PtlAgreementDispatchVo.DispatchVo>> agreementDispatchActionResult = orgClient.getAgreementDispatchAction(dispatchIds);
+                    if(agreementDispatchActionResult.getCode() == 200){
+                        Map<String, Object> actionMap = new HashMap<>();
+                        // 处理动作的参数
+                        List<PtlAgreementDispatchVo.DispatchVo> agreementDispatch = agreementDispatchActionResult.getData();
+                        List<PtlAgreementDispatchAction> actions = agreementDispatch.get(0).getActions();
+                        actions.forEach(action->{
+                            ActionEnum byCode = ActionEnum.getByCode(action.getActionCode());
+                            JSONObject actionJson = action.getActionJson();
+                            actionMap.put(byCode.getCode(),actionJson);
+                        });
+                        HttpResult httpResult = orgClient.executeActions(quoteVo.getOrder().getOrdersNo(), quoteVo, actionMap);
+                        if(httpResult.getCode() == 200){
+                            // 拷贝处理处理完动作之后的报价参数
+                            QuoteVo updateQuoteVo = (QuoteVo)httpResult.getData();
+                            BeanUtils.copyProperties(updateQuoteVo, quoteVo);
+                        }
+                    }
+                }
+            }
+        }
+    }
 }

+ 7 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrdersController.java

@@ -121,4 +121,11 @@ public class InsOrdersController {
         return HttpResult.ok(insFeeOrdersService.calcCosts(ptlAgreementCostRatioVo));
     }
 
+    @GetMapping("/changePerson")
+    @Operation(summary = "更改对接人")
+    public HttpResult changePerson(String orderNo,String name,String phone){
+        return insOrdersService.changePerson(orderNo,name,phone) ? HttpResult.ok("更改对接人成功") : HttpResult.error("更改对接人失败");
+    }
+
+
 }

+ 3 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -209,11 +209,13 @@ public class UnifyOrderManager {
     @PostMapping("/quote")
     @QuoteVerification
     public HttpResult<QuoteResultsVo> quote(@RequestBody QuoteVo quoteVo) throws Exception {
-         HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findById(quoteVo.getOrder()
+        HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findById(quoteVo.getOrder()
                 .getInsuranceCompanyCode(), baseController.getToken());
         AssertionUtils.isFail(esmInsCompanyHttpResult.getCode() != 200, esmInsCompanyHttpResult.getMsg());
         String systemCode = getSystemCode();
         String companyName = CompanyConstants.getCompanyNameByCode(esmInsCompanyHttpResult.getData().getCompanyCode());
+
+
         //先默认第一个协议
         HttpResult<List<PtlAgreement>> byCompanyId = orgClient.getByCompanyId(esmInsCompanyHttpResult.getData()
                 .getId(), baseController.getToken(), systemCode);

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

@@ -127,4 +127,13 @@ public interface InsOrdersService extends IService<InsOrders> {
      */
     void orderAfterUpdateOrderStatus(String orderNo, OrderStatusResultVo orderStatusResultVo);
 
+    /**
+     * 更改对接人
+     * @param orderNo
+     * @param name
+     * @param phone
+     * @return
+     */
+    boolean changePerson(String orderNo,String name,String phone);
+
 }

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

@@ -106,7 +106,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
     @Autowired
     @Lazy
-    private InsFeeAuditService insFeeAuditService; // ✅ 改为字段注入 + 延迟加载
+    private InsFeeAuditService insFeeAuditService;
 
     @Setter(onMethod_ = @Autowired)
     private OrderMessageTemplate orderMessageTemplate;
@@ -1078,5 +1078,14 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         this.updateById(insOrders);
     }
 
+    @Override
+    public boolean changePerson(String orderNo, String name, String phone) {
+        InsOrders byId = baseMapper.selectById(Long.parseLong(orderNo));
+        byId.setDockingPerson(name);
+        byId.setDockingPersonPhone(phone);
+        baseMapper.updateById(byId);
+        return false;
+    }
+
 
 }

+ 53 - 0
tenant/organization/src/main/java/com/jzg/organization/action/ActionExecutor.java

@@ -0,0 +1,53 @@
+package com.jzg.organization.action;
+
+import com.jzg.commons.entity.action.base.ActionHandler;
+import com.jzg.commons.entity.action.enums.ActionEnum;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.organization.action.service.CancelQuoteHandler;
+import com.jzg.organization.action.service.SendNotifyMsgHandler;
+import com.jzg.organization.action.service.SpecifyAgreementHandler;
+import com.jzg.organization.action.service.SupplementaryOrderHandler;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.EnumMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+@Component
+public class ActionExecutor {
+
+    private final Map<ActionEnum, ActionHandler> handlerMap = new EnumMap<>(ActionEnum.class);
+
+    /**
+     * 注册动作
+     * @param handlers
+     */
+    @Autowired
+    public ActionExecutor(List<ActionHandler> handlers){
+        for (ActionHandler handler : handlers) {
+            //注册动作
+            handlerMap.put(handler.getActionEnum(), handler);
+        }
+    }
+
+    /**
+     * 执行动作
+     * @param actionMap
+     */
+    public QuoteVo executeActions(String orderNo, QuoteVo quoteVo, Map<ActionEnum, Object> actionMap){
+        try {
+            for (Map.Entry<ActionEnum, Object> entry : actionMap.entrySet()) {
+                ActionHandler handler = handlerMap.get(entry.getKey());
+                if (handler != null) {
+                    quoteVo = handler.execute(orderNo, quoteVo, entry.getValue());
+                }
+            }
+            return quoteVo;
+        }catch(Exception e){
+            throw new SystemException("动作执行失败");
+        }
+    }
+}

+ 29 - 0
tenant/organization/src/main/java/com/jzg/organization/action/service/CancelQuoteHandler.java

@@ -0,0 +1,29 @@
+package com.jzg.organization.action.service;
+
+import com.jzg.commons.entity.action.base.ActionHandler;
+import com.jzg.commons.entity.action.enums.ActionEnum;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.exception.SystemException;
+import org.springframework.stereotype.Component;
+
+/**
+ * 终止报价动作
+ */
+
+@Component
+public class CancelQuoteHandler implements ActionHandler {
+    @Override
+    public ActionEnum getActionEnum() {
+        return ActionEnum.CANCEL_QUOTE;
+    }
+
+    @Override
+    public QuoteVo execute(String orderNo, QuoteVo quoteVo, Object param) {
+        // 传入的值为String
+        String message = param.toString();
+        return quoteVo;
+        // 直接抛出错误提示的异常
+//        throw new SystemException(message);
+
+    }
+}

+ 28 - 0
tenant/organization/src/main/java/com/jzg/organization/action/service/ChangeBsAccountHandler.java

@@ -0,0 +1,28 @@
+package com.jzg.organization.action.service;
+
+import com.jzg.commons.entity.action.base.ActionHandler;
+import com.jzg.commons.entity.action.enums.ActionEnum;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.exception.SystemException;
+import org.springframework.stereotype.Component;
+
+/**
+ * 更改保司账号
+ */
+
+@Component
+public class ChangeBsAccountHandler implements ActionHandler {
+    @Override
+    public ActionEnum getActionEnum() {
+        return ActionEnum.CHANGE_BS_ACCOUNT;
+    }
+
+    @Override
+    public QuoteVo execute(String orderNo, QuoteVo quoteVo, Object param) {
+        // 传入的值为String
+        String message = param.toString();
+        return quoteVo;
+        // 直接抛出错误提示的异常
+//        throw new SystemException(message);
+    }
+}

+ 34 - 0
tenant/organization/src/main/java/com/jzg/organization/action/service/ChangePocHandler.java

@@ -0,0 +1,34 @@
+package com.jzg.organization.action.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.action.base.ActionHandler;
+import com.jzg.commons.entity.action.enums.ActionEnum;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.organization.client.QuoteClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 更改对接人
+ */
+
+@Component
+public class ChangePocHandler implements ActionHandler {
+
+    @Autowired
+    QuoteClient quoteClient;
+
+    @Override
+    public ActionEnum getActionEnum() {
+        return ActionEnum.CHANGE_POC;
+    }
+
+    @Override
+    public QuoteVo execute(String orderNo,QuoteVo quoteVo, Object param) {
+        JSONObject params = (JSONObject)param;
+        HttpResult changePersonResult = quoteClient.changePerson(orderNo,params.getString("name"), params.getString("phone"));
+        return quoteVo;
+    }
+}

+ 62 - 0
tenant/organization/src/main/java/com/jzg/organization/action/service/SendNotifyMsgHandler.java

@@ -0,0 +1,62 @@
+package com.jzg.organization.action.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.action.base.ActionHandler;
+import com.jzg.commons.entity.action.enums.ActionEnum;
+import com.jzg.commons.entity.enums.MessageCodeEnum;
+import com.jzg.commons.entity.orders.po.InsOrders;
+import com.jzg.commons.entity.po.SysUserJzgInfo;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.organization.client.QuoteClient;
+import com.jzg.organization.consumer.templete.UserMessageTemplate;
+import com.jzg.organization.service.SysUserJzgInfoService;
+import lombok.Setter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 发送通知消息动作
+ */
+
+@Component
+public class SendNotifyMsgHandler implements ActionHandler {
+
+    @Setter(onMethod_ = @Autowired)
+    private UserMessageTemplate userMessageTemplate;
+
+    @Autowired
+    private QuoteClient quoteClient;
+
+    @Autowired
+    private SysUserJzgInfoService sysUserJzgInfoService;
+
+    @Override
+    public ActionEnum getActionEnum() {
+        return ActionEnum.SEND_NOTIFY_MSG;
+    }
+
+    @Override
+    public QuoteVo execute(String orderNo, QuoteVo quoteVo, Object param) {
+        JSONObject params = (JSONObject)param;
+        String userId = "";
+        // 如果是查找管理的话
+        if(params.getString("is_manager").equals("1")){
+            //查找管理员id
+            userId = "";
+            HttpResult ordersByIdHttp = quoteClient.getOrdersById(orderNo);
+            if(ordersByIdHttp.getCode() == 200){
+                InsOrders ordersById = (InsOrders) ordersByIdHttp.getData();
+                SysUserJzgInfo userByUserId = sysUserJzgInfoService.getUserByUserId(ordersById.getRealQuoteUserId());
+                userId = userByUserId.getId();
+            }
+        }else{
+            userId = params.getString("user_id");
+        }
+        // 发送消息
+        userMessageTemplate.sendAddUser(userId,params.getString("title"),params.getString("content"), MessageCodeEnum.TEMPLATE_11,null);
+        return quoteVo;
+    }
+}

+ 27 - 0
tenant/organization/src/main/java/com/jzg/organization/action/service/SpecifyAgreementHandler.java

@@ -0,0 +1,27 @@
+package com.jzg.organization.action.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jzg.commons.entity.action.base.ActionHandler;
+import com.jzg.commons.entity.action.enums.ActionEnum;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import org.springframework.stereotype.Component;
+
+/**
+ * 指定协议动作
+ */
+
+@Component
+public class SpecifyAgreementHandler implements ActionHandler {
+    @Override
+    public ActionEnum getActionEnum() {
+        return ActionEnum.SPECIFY_AGREEMENT;
+    }
+
+    @Override
+    public QuoteVo execute(String orderNo, QuoteVo quoteVo, Object param) {
+        JSONObject params = (JSONObject) param;
+        quoteVo.getOrder().setAgreementId(params.getString("agreementId"));
+        return quoteVo;
+
+    }
+}

+ 23 - 0
tenant/organization/src/main/java/com/jzg/organization/action/service/SupplementaryOrderHandler.java

@@ -0,0 +1,23 @@
+package com.jzg.organization.action.service;
+
+import com.jzg.commons.entity.action.base.ActionHandler;
+import com.jzg.commons.entity.action.enums.ActionEnum;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import org.springframework.stereotype.Component;
+
+/**
+ * 补录订单动作
+ */
+
+@Component
+public class SupplementaryOrderHandler implements ActionHandler {
+    @Override
+    public ActionEnum getActionEnum() {
+        return ActionEnum.SUPPLEMENTARY_ORDER;
+    }
+
+    @Override
+    public QuoteVo execute(String orderNo, QuoteVo quoteVo, Object param) {
+        return quoteVo;
+    }
+}

+ 11 - 0
tenant/organization/src/main/java/com/jzg/organization/client/CostsRuleClient.java

@@ -1,11 +1,18 @@
 package com.jzg.organization.client;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchRulesAttrLink;
+import com.jzg.commons.entity.agreement.dispatch.vo.ValidateDispatchRuleVo;
 import com.jzg.commons.entity.costs.vo.ValidateSchemeRuleVo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.util.List;
+import java.util.Map;
+
 @FeignClient(name="jzg-costsorrule",url = "http://localhost:8001/")
 public interface CostsRuleClient {
 
@@ -13,4 +20,8 @@ public interface CostsRuleClient {
     public HttpResult validateSchemeRule(@RequestBody ValidateSchemeRuleVo validateSchemeRuleVo);
 
 
+    @PostMapping("/validate/rule/validateDispatchRule")
+    public HttpResult validateDispatchRule(@RequestBody ValidateDispatchRuleVo dispatchRuleVo);
+
+
 }

+ 10 - 1
tenant/organization/src/main/java/com/jzg/organization/client/EsmInsCompanyClient.java

@@ -1,6 +1,7 @@
 package com.jzg.organization.client;
 
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.agreement.po.PtlAgreementAttribution;
 import com.jzg.commons.entity.po.EsmInsCompany;
 import com.jzg.commons.entity.system.vo.SysSystemBusPermsVo;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -41,6 +42,14 @@ public interface EsmInsCompanyClient {
     public HttpResult<List<EsmInsCompany>> getUserCompany(@RequestParam String systemCode,
                                                           @RequestHeader("Authorization") String token);
 
-
+    /**
+     * 获取保司账号信息
+     * @param id
+     * @return
+     */
+    @GetMapping("/manager/attributionTemplate/getAgreementAttribution")
+    public HttpResult<PtlAgreementAttribution> getAgreementAttribution(            @RequestParam("agreementId") String agreementId,
+                                                                                   @RequestHeader("Authorization") String authToken,
+                                                                                   @RequestHeader("system_code") String systemCode);
 
 }

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

@@ -0,0 +1,18 @@
+package com.jzg.organization.client;
+
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchQuery;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+
+@FeignClient(name="jzg-org",url = "http://192.168.0.253:8084/")
+public interface OrgClient {
+
+    @PostMapping("/ptlAgreementDispatch/getAgreementDispatch")
+    public HttpResult getAgreementDispatch(@RequestBody PtlAgreementDispatchQuery ptlAgreementDispatchQuery,
+                                           @RequestHeader("Authorization") String token);
+
+
+}

+ 15 - 0
tenant/organization/src/main/java/com/jzg/organization/client/QuoteClient.java

@@ -1,6 +1,8 @@
 package com.jzg.organization.client;
 
+import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.InsFeeOrdersParam;
+import com.jzg.commons.entity.orders.po.InsOrders;
 import com.jzg.commons.entity.po.InsFeeOrders;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;
@@ -9,6 +11,10 @@ import java.util.List;
 
 @FeignClient(name="jzg-insurance",url = "http://localhost:9898/")
 public interface QuoteClient {
+
+    @GetMapping(value = "/supplementOrder/selectById")
+    public HttpResult getOrdersById(String id);
+
     @PostMapping(value = "/insFeeOrder/getInsFeeOrdersList")
     public List<InsFeeOrders> getInsFeeOrdersList(@RequestBody InsFeeOrdersParam param);
 
@@ -24,6 +30,15 @@ public interface QuoteClient {
     @GetMapping(value = "/insFeeOrder/getInsFeeOrderByOrderNo")
     public List<InsFeeOrders> getInsFeeOrderByOrderNo(@RequestParam("orderNo") String orderNo);
 
+    /**
+     * 更改对接人
+     * @param orderNo
+     * @param name
+     * @param phone
+     * @return
+     */
+    @GetMapping(value = "/supplementOrder/changePerson")
+    public HttpResult changePerson(@RequestParam("orderNo") String orderNo, @RequestParam("name") String name,@RequestParam("phone") String phone);
 
 
 

+ 90 - 0
tenant/organization/src/main/java/com/jzg/organization/controller/PtlAgreementDispatchController.java

@@ -0,0 +1,90 @@
+package com.jzg.organization.controller;
+
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.action.enums.ActionEnum;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAction;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAfterAction;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchQuery;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchVo;
+import com.jzg.commons.entity.dto.CostExternalParam;
+import com.jzg.commons.entity.orders.po.InsOrders;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.entity.vo.CostExternalListVo;
+import com.jzg.commons.request.RequestSingleParam;
+import com.jzg.organization.action.ActionExecutor;
+import com.jzg.organization.service.PtlAgreementDispatchService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 协议调度
+ */
+
+@Tag(name="协议调度管理")
+@Validated
+@RestController
+@RequestMapping("/ptlAgreementDispatch")
+public class PtlAgreementDispatchController {
+
+    @Autowired
+    PtlAgreementDispatchService ptlAgreementDispatchService;
+
+    @Autowired
+    ActionExecutor actionExecutor;
+
+    @PostMapping("getAgreementDispatch")
+    @Operation(summary= "获取协议调度")
+    public HttpResult<PtlAgreementDispatchVo> getAgreementDispatch(@RequestBody PtlAgreementDispatchQuery ptlAgreementDispatchQuery){
+        return HttpResult.ok(ptlAgreementDispatchService.getAgreementDispatch(ptlAgreementDispatchQuery));
+    }
+
+    @PostMapping("addAgreementDispatch")
+    @Operation(summary = "添加协议调度")
+    public HttpResult addAgreementDispatch(@RequestBody PtlAgreementDispatchVo.DispatchVo ptlAgreementDispatchVo){
+        String dispatchId = ptlAgreementDispatchService.addAgreementDispatch(ptlAgreementDispatchVo);
+        return HttpResult.ok("添加协议调度成功",dispatchId);
+    }
+
+    @PostMapping("addAgreementDispatchAction")
+    @Operation(summary = "添加协议调度动作")
+    public HttpResult addAgreementDispatch(@RequestBody List<PtlAgreementDispatchAfterAction> ptlAgreementDispatchVo){
+        return ptlAgreementDispatchService.addAgreementDispatchAction(ptlAgreementDispatchVo) ? HttpResult.ok("添加调度动作成功") : HttpResult.error("添加调度动作失败");
+    }
+
+    @PostMapping("updateAgreementDispatch")
+    @Operation(summary = "修改协议调度")
+    public HttpResult updateAgreementDispatch(@RequestBody PtlAgreementDispatchVo.DispatchVo ptlAgreementDispatchVo){
+        return ptlAgreementDispatchService.updateAgreementDispatch(ptlAgreementDispatchVo) ? HttpResult.ok("修改协议调度成功") : HttpResult.error("修改协议调度失败");
+    }
+
+    @GetMapping("deleteAgreementDispatch")
+    @Operation(summary = "删除协议调度")
+    public HttpResult deleteAgreementDispatch(String dispatchId){
+        return ptlAgreementDispatchService.deleteAgreementDispatch(dispatchId) ? HttpResult.ok("删除协议调度成功") : HttpResult.error("删除协议调度失败");
+    }
+
+    @GetMapping("getAgreementDispatchAction")
+    @Operation(summary = "获取调度动作")
+    public  HttpResult getAgreementDispatchAction(List<String> dispatchIds){
+        return HttpResult.ok(ptlAgreementDispatchService.getAgreementDispatchAction(dispatchIds));
+    }
+
+    @PostMapping("executeActions")
+    @Operation(summary = "执行动作")
+    public HttpResult executeActions(@RequestSingleParam("orderNo") String orderNo, @RequestSingleParam("quoteVo") QuoteVo quoteVo, @RequestSingleParam("actionMap") Map<ActionEnum, Object> actionMap){
+        quoteVo = actionExecutor.executeActions(orderNo, quoteVo, actionMap);
+        return HttpResult.ok(quoteVo);
+    }
+
+    @GetMapping("updateDispatchName")
+    @Operation(summary = "修改调度名称")
+    public HttpResult updateDispatchName(String dispatchId,String name){
+        return ptlAgreementDispatchService.updateDispatchName(dispatchId, name) ? HttpResult.ok("修改调度名称成功") : HttpResult.error("修改调度名称失败");
+    }
+}

+ 15 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementDispatchActionMapper.java

@@ -0,0 +1,15 @@
+package com.jzg.organization.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatch;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAction;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface PtlAgreementDispatchActionMapper extends BaseMapper<PtlAgreementDispatchAction> {
+
+    public List<PtlAgreementDispatchAction> getActions(List<String> dispatchIds);
+}

+ 15 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementDispatchAfterActionMapper.java

@@ -0,0 +1,15 @@
+package com.jzg.organization.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAction;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAfterAction;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface PtlAgreementDispatchAfterActionMapper extends BaseMapper<PtlAgreementDispatchAfterAction> {
+
+    public List<PtlAgreementDispatchAfterAction> getAfterActions(String companyId);
+}

+ 11 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementDispatchMapper.java

@@ -0,0 +1,11 @@
+package com.jzg.organization.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatch;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PtlAgreementDispatchMapper extends BaseMapper<PtlAgreementDispatch> {
+
+}

+ 12 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementDispatchRulesAttrLinkMapper.java

@@ -0,0 +1,12 @@
+package com.jzg.organization.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAction;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchRulesAttrLink;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PtlAgreementDispatchRulesAttrLinkMapper extends BaseMapper<PtlAgreementDispatchRulesAttrLink> {
+
+}

+ 75 - 0
tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementDispatchService.java

@@ -0,0 +1,75 @@
+package com.jzg.organization.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatch;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAction;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAfterAction;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchQuery;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchVo;
+import com.jzg.commons.entity.dto.*;
+import com.jzg.commons.entity.po.PtlAgreement;
+import com.jzg.commons.entity.po.PtlAgreementCost;
+import com.jzg.commons.entity.vo.AgreementInfoVo;
+import com.jzg.commons.entity.vo.AgreementUserVo;
+import com.jzg.commons.entity.vo.AgreementVo;
+import com.jzg.commons.entity.vo.UpAndDownVo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* 协议调度service层
+*/
+public interface PtlAgreementDispatchService extends IService<PtlAgreementDispatch> {
+
+    /**
+     * 添加协议调度
+     * @param ptlAgreementDispatchVo
+     * @return
+     */
+    public String addAgreementDispatch(PtlAgreementDispatchVo.DispatchVo ptlAgreementDispatchVo);
+
+    /**
+     * 添加协议调度动作
+     * @param ptlAgreementDispatchVo
+     * @return
+     */
+    public boolean addAgreementDispatchAction(List<PtlAgreementDispatchAfterAction> ptlAgreementDispatchVo);
+
+
+    /**
+     * 修改协议调度
+     * @param ptlAgreementDispatchVo
+     * @return
+     */
+    public boolean updateAgreementDispatch(PtlAgreementDispatchVo.DispatchVo ptlAgreementDispatchVo);
+
+    /**
+     * 删除协议调度
+     * @param dispatchId
+     * @return
+     */
+    public boolean deleteAgreementDispatch(String dispatchId);
+
+    /**
+     * 获取协议调度信息
+     * @param ptlAgreementDispatchQuery
+     */
+    public PtlAgreementDispatchVo getAgreementDispatch(PtlAgreementDispatchQuery ptlAgreementDispatchQuery);
+
+    /**
+     * 根据调度id 获取调度动作
+     * @param dispatchIds
+     * @return
+     */
+    public List<PtlAgreementDispatchVo.DispatchVo> getAgreementDispatchAction(List<String> dispatchIds);
+
+    /**
+     * 更新调度名称
+     * @param dispatchId
+     * @param name
+     * @return
+     */
+    public boolean updateDispatchName(String dispatchId,String name);
+}

+ 2 - 0
tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementUndwrtRulesAttrService.java

@@ -17,5 +17,7 @@ public interface PtlAgreementUndwrtRulesAttrService extends IService<PtlAgreemen
 
     Map<String, List<PtlAgreementUndwrtRulesAttr>> attrGroup(RulesAttParam param);
 
+    PtlAgreementUndwrtRulesAttr getUndwrtRuleAttrByAttrCode(String attrCode);
+
 
 }

+ 3 - 1
tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementUndwrtRulesDictLabalService.java

@@ -3,7 +3,9 @@ package com.jzg.organization.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesDictLabal;
 
-public interface PtlAgreementUndwrtRulesDictLabalService extends IService<PtlAgreementUndwrtRulesDictLabal> {
+import java.util.List;
 
+public interface PtlAgreementUndwrtRulesDictLabalService extends IService<PtlAgreementUndwrtRulesDictLabal> {
 
+    public List<PtlAgreementUndwrtRulesDictLabal> getDictLabelsByTypeCode(Integer typeCode);
 }

+ 278 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementDispatchServiceImpl.java

@@ -0,0 +1,278 @@
+package com.jzg.organization.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzg.commons.core.base.BaseController;
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatch;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAction;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAfterAction;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchRulesAttrLink;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchQuery;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchVo;
+import com.jzg.commons.entity.agreement.po.PtlAgreementAttribution;
+import com.jzg.commons.entity.po.PtlAgreement;
+import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttr;
+import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesDictLabal;
+import com.jzg.commons.entity.po.SysDict;
+import com.jzg.commons.util.idgen.IdGenerate;
+import com.jzg.organization.client.EsmInsCompanyClient;
+import com.jzg.organization.mapper.PtlAgreementDispatchActionMapper;
+import com.jzg.organization.mapper.PtlAgreementDispatchAfterActionMapper;
+import com.jzg.organization.mapper.PtlAgreementDispatchMapper;
+import com.jzg.organization.mapper.PtlAgreementDispatchRulesAttrLinkMapper;
+import com.jzg.organization.service.*;
+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;
+
+/**
+* @author dongxin
+* @description 针对表【ptl_agreement_dept(协议授权部门表)】的数据库操作Service实现
+* @createDate 2025-02-18 17:58:58
+*/
+@Service
+public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDispatchMapper, PtlAgreementDispatch>
+    implements PtlAgreementDispatchService {
+
+    @Autowired
+    PtlAgreementDispatchRulesAttrLinkMapper rulesAttrLinkMapper;
+
+    @Autowired
+    PtlAgreementDispatchActionMapper actionMapper;
+
+    @Autowired
+    PtlAgreementUndwrtRulesAttrService ptlAgreementUndwrtRulesAttrService;
+
+    @Autowired
+    PtlAgreementUndwrtRulesDictLabalService ptlAgreementUndwrtRulesDictLabalService;
+
+    @Autowired
+    SysDictService sysDictService;
+
+    @Autowired
+    PtlAgreementService ptlAgreementService;
+
+    @Autowired
+    EsmInsCompanyClient esmInsCompanyClient;
+
+    @Autowired
+    PtlAgreementDispatchAfterActionMapper afterActionMapper;
+
+    @Autowired
+    BaseController baseController;
+
+    @Override
+    @Transactional
+    public String addAgreementDispatch(PtlAgreementDispatchVo.DispatchVo ptlAgreementDispatchVo) {
+        PtlAgreementDispatch dispatch = new PtlAgreementDispatch(ptlAgreementDispatchVo);
+        baseMapper.insert(dispatch);
+
+        for (PtlAgreementDispatchRulesAttrLink link : ptlAgreementDispatchVo.getAttrLinks()){
+            link.setDispatchId(dispatch.getId());
+        }
+        rulesAttrLinkMapper.insert(ptlAgreementDispatchVo.getAttrLinks());
+
+        for (PtlAgreementDispatchAction action  : ptlAgreementDispatchVo.getActions()){
+            action.setId(IdGenerate.nextId());
+            action.setDispatchId(dispatch.getId());
+        }
+        actionMapper.insert(ptlAgreementDispatchVo.getActions());
+
+        return dispatch.getId();
+    }
+
+    @Override
+    public boolean addAgreementDispatchAction(List<PtlAgreementDispatchAfterAction> ptlAgreementDispatchVo) {
+        for (PtlAgreementDispatchAfterAction action  : ptlAgreementDispatchVo){
+            action.setId(IdGenerate.nextId());
+        }
+        afterActionMapper.insert(ptlAgreementDispatchVo);
+        return true;
+    }
+
+    @Override
+    @Transactional
+    public boolean updateAgreementDispatch(PtlAgreementDispatchVo.DispatchVo ptlAgreementDispatchVo) {
+        this.deleteAgreementDispatch(ptlAgreementDispatchVo.getDispatchId());
+        this.addAgreementDispatch(ptlAgreementDispatchVo);
+        return true;
+    }
+
+    @Override
+    @Transactional
+    public boolean deleteAgreementDispatch(String dispatchId) {
+        baseMapper.deleteById(dispatchId);
+        rulesAttrLinkMapper.delete(new LambdaQueryWrapper<PtlAgreementDispatchRulesAttrLink>()
+                .eq(PtlAgreementDispatchRulesAttrLink::getDispatchId,dispatchId));
+        actionMapper.delete(new LambdaQueryWrapper<PtlAgreementDispatchAction>()
+                .eq(PtlAgreementDispatchAction::getDispatchId,dispatchId));
+        return true;
+    }
+
+    @Override
+    public PtlAgreementDispatchVo getAgreementDispatch(PtlAgreementDispatchQuery ptlAgreementDispatchQuery) {
+        List<PtlAgreementDispatch> ptlAgreementDispatches = baseMapper.selectList(new LambdaQueryWrapper<PtlAgreementDispatch>()
+                .eq(PtlAgreementDispatch::getCompanyId, ptlAgreementDispatchQuery.getCompanyId()));
+        PtlAgreementDispatchVo dispatchVos = new PtlAgreementDispatchVo();
+        List<String> dispatchIds = ptlAgreementDispatches.stream().map(x -> x.getId()).collect(Collectors.toList());
+        if (dispatchIds.size() > 0) {
+            List<SysDict> dispatchBeforeActionDict = sysDictService.getByTypeCode("dispatch_before_action");
+            List<SysDict> dispatchAfterActionDict = sysDictService.getByTypeCode("dispatch_after_action");
+
+            // 查询保司所有的规则属性 然后进行分组
+            List<PtlAgreementDispatchRulesAttrLink> ptlAgreementDispatchRulesAttrLinks = rulesAttrLinkMapper.selectList(new LambdaQueryWrapper<PtlAgreementDispatchRulesAttrLink>()
+                    .in(PtlAgreementDispatchRulesAttrLink::getDispatchId, dispatchIds));
+
+            // 获取所有保司的动作
+            List<PtlAgreementDispatchAction> ptlAgreementDispatchActions = actionMapper.getActions(dispatchIds);
+
+            // 获取保司的报价失败之后的动作
+            List<PtlAgreementDispatchAfterAction> ptlAgreementDispatchAfterActions = afterActionMapper.getAfterActions(ptlAgreementDispatchQuery.getCompanyId());
+            int index = 1;
+            for(PtlAgreementDispatch dispatch : ptlAgreementDispatches){
+                if(dispatch.getDispatchName().equals("")){
+                    dispatch.setDispatchName("规则" + index);
+                    index++;
+                }
+                List<PtlAgreementDispatchRulesAttrLink> attrLinks = ptlAgreementDispatchRulesAttrLinks.stream().filter(x -> x.getDispatchId().equals(dispatch.getId())).collect(Collectors.toList());
+                List<PtlAgreementDispatchAction> actions = ptlAgreementDispatchActions.stream().filter(x -> x.getDispatchId().equals(dispatch.getId())).collect(Collectors.toList());
+                for(PtlAgreementDispatchRulesAttrLink attrlink : attrLinks){
+                    if (attrlink.getOperator() != null) {
+                        if (attrlink.getOperator().equals("1")) {
+                            attrlink.setOperatorDesc("包含");
+                        }
+                        if (attrlink.getOperator().equals("2")) {
+                            attrlink.setOperatorDesc("小于");
+                        }
+                        if (attrlink.getOperator().equals("3")) {
+                            attrlink.setOperatorDesc("小于等于");
+                        }
+                        if (attrlink.getOperator().equals("4")) {
+                            attrlink.setOperatorDesc("大于");
+                        }
+                        if (attrlink.getOperator().equals("5")) {
+                            attrlink.setOperatorDesc("大于等于");
+                        }
+                    }else{
+                        attrlink.setOperatorDesc("未知");
+                    }
+                    PtlAgreementUndwrtRulesAttr undwrtRuleAttrByAttrCode = ptlAgreementUndwrtRulesAttrService.getUndwrtRuleAttrByAttrCode(attrlink.getAttrCode());
+                    if(undwrtRuleAttrByAttrCode != null && undwrtRuleAttrByAttrCode.getDictId() != null){
+                        attrlink.setAttrCodeName(undwrtRuleAttrByAttrCode.getAttrName());
+                        List<PtlAgreementUndwrtRulesDictLabal> dictLabelsByTypeCode = ptlAgreementUndwrtRulesDictLabalService.getDictLabelsByTypeCode(undwrtRuleAttrByAttrCode.getDictId());
+                        PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = dictLabelsByTypeCode.stream().filter(x -> x.getCode().equals(attrlink.getMin())).findFirst().orElse(null);
+                        if(ptlAgreementUndwrtRulesDictLabal != null){
+                            if(attrlink.getAttrDesc() == null){
+                                attrlink.setAttrDesc(new ArrayList<>());
+                            }
+                            attrlink.getAttrDesc().add(ptlAgreementUndwrtRulesDictLabal.getName());
+                        }
+                    }
+                }
+
+                for(PtlAgreementDispatchAction action : actions){
+                    SysDict sysDict = dispatchBeforeActionDict.stream().filter(x -> x.getValue().equals(action.getActionCode())).findFirst().orElse(null);
+                    if(sysDict == null){
+                        action.setActionName("未知动作");
+                    }else{
+                        action.setActionName(sysDict.getLabel());
+                        if("specify_agreement".equals(action.getActionCode())){
+                            if(action.getActionJson() != null) {
+                                PtlAgreement byId = ptlAgreementService.getById(action.getActionJson().get("agreementId").toString());
+                                if(byId != null) {
+                                    action.getActionJson().put("agreementName", byId.getAgreementName());
+                                }
+                            }
+                        }else if("change_bs_account".equals(action.getActionCode())){
+                            HttpResult<PtlAgreementAttribution> agreementAttribution = esmInsCompanyClient.getAgreementAttribution(action.getActionJson().get("accountId").toString(), baseController.getToken(), baseController.getUserSystemCode());
+                            if(agreementAttribution.getCode() == 200){
+                                PtlAgreementAttribution data = agreementAttribution.getData();
+                                action.getActionJson().put("userName",data.getUsername());
+                                action.getActionJson().put("companyName",data.getInsCompanyName());
+                            }
+                        }
+                    }
+                }
+
+                PtlAgreementDispatchVo.DispatchVo vo = new PtlAgreementDispatchVo.DispatchVo(dispatch,attrLinks,actions);
+                dispatchVos.getDispatchVos().add(vo);
+            }
+
+            for(PtlAgreementDispatchAfterAction afterAction : ptlAgreementDispatchAfterActions){
+                SysDict sysDict = dispatchBeforeActionDict.stream().filter(x -> x.getValue().equals(afterAction.getActionCode())).findFirst().orElse(null);
+                if(sysDict == null){
+                    afterAction.setActionName("未知动作");
+                }else{
+                    afterAction.setActionName(sysDict.getLabel());
+                    if("specify_agreement".equals(afterAction.getActionCode())){
+                        if(afterAction.getActionJson() != null) {
+                            PtlAgreement byId = ptlAgreementService.getById(afterAction.getActionJson().get("agreementId").toString());
+                            if(byId != null) {
+                                afterAction.getActionJson().put("agreementName", byId.getAgreementName());
+                            }
+                        }
+                    }else if("change_bs_account".equals(afterAction.getActionCode())){
+                        HttpResult<PtlAgreementAttribution> agreementAttribution = esmInsCompanyClient.getAgreementAttribution(afterAction.getActionJson().get("accountId").toString(), baseController.getToken(), baseController.getUserSystemCode());
+                        if(agreementAttribution.getCode() == 200){
+                            PtlAgreementAttribution data = agreementAttribution.getData();
+                            afterAction.getActionJson().put("userName",data.getUsername());
+                            afterAction.getActionJson().put("companyName",data.getInsCompanyName());
+                        }
+                    }
+                }
+            }
+            dispatchVos.setAfterActions(ptlAgreementDispatchAfterActions);
+        }
+
+
+        return dispatchVos;
+    }
+
+    @Override
+    public List<PtlAgreementDispatchVo.DispatchVo> getAgreementDispatchAction(List<String> dispatchIds) {
+        List<PtlAgreementDispatchVo.DispatchVo> dispatchVos = new ArrayList<>();
+
+        if (!dispatchIds.isEmpty()) {
+            List<PtlAgreementDispatchAction> ptlAgreementDispatchActions = actionMapper.selectList(new LambdaQueryWrapper<PtlAgreementDispatchAction>()
+                    .in(PtlAgreementDispatchAction::getDispatchId, dispatchIds));
+
+            // 进行分组
+            Map<String, List<PtlAgreementDispatchAction>> groupedByDispatchId = ptlAgreementDispatchActions.stream()
+                    .collect(Collectors.groupingBy(PtlAgreementDispatchAction::getDispatchId));
+
+            // 遍历示例
+            groupedByDispatchId.forEach((dispatchId, actions) -> {
+                PtlAgreementDispatch byId = this.getById(dispatchId);
+                PtlAgreementDispatchVo.DispatchVo vo = new PtlAgreementDispatchVo.DispatchVo();
+                vo.setDispatchId(dispatchId);
+                vo.setCompanyId(byId.getCompanyId());
+                vo.setActions(actions);
+                dispatchVos.add(vo);
+            });
+        }
+        return dispatchVos;
+    }
+
+    @Override
+    public boolean updateDispatchName(String dispatchId, String name) {
+        PtlAgreementDispatch dispatch = baseMapper.selectById(dispatchId);
+        if(dispatch != null) {
+            dispatch.setDispatchName(name);
+            baseMapper.updateById(dispatch);
+            return true;
+        }
+        return false;
+    }
+
+
+}
+
+
+
+

+ 7 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesAttrServiceImpl.java

@@ -93,5 +93,12 @@ public class PtlAgreementUndwrtRulesAttrServiceImpl extends ServiceImpl<PtlAgree
         }
     }
 
+    @Override
+    public PtlAgreementUndwrtRulesAttr getUndwrtRuleAttrByAttrCode(String attrCode) {
+        PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttr>()
+                .eq(PtlAgreementUndwrtRulesAttr::getAttrCode, attrCode));
+        return ptlAgreementUndwrtRulesAttr;
+    }
+
 
 }

+ 8 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesDictLabalServiceImpl.java

@@ -1,14 +1,22 @@
 package com.jzg.organization.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesDictLabal;
 import com.jzg.organization.mapper.PtlAgreementUndwrtRulesDictLabalMapper;
 import com.jzg.organization.service.PtlAgreementUndwrtRulesDictLabalService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class PtlAgreementUndwrtRulesDictLabalServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesDictLabalMapper, PtlAgreementUndwrtRulesDictLabal>
         implements PtlAgreementUndwrtRulesDictLabalService {
 
 
+    @Override
+    public List<PtlAgreementUndwrtRulesDictLabal> getDictLabelsByTypeCode(Integer typeCode) {
+        return baseMapper.selectList(new LambdaQueryWrapper<PtlAgreementUndwrtRulesDictLabal>()
+                .eq(PtlAgreementUndwrtRulesDictLabal::getDictId,typeCode));
+    }
 }

+ 77 - 8
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java

@@ -1,11 +1,21 @@
 package com.jzg.organization.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 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.fasterxml.jackson.databind.ObjectMapper;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.action.enums.ActionEnum;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAction;
+import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchRulesAttrLink;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchQuery;
+import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchVo;
+import com.jzg.commons.entity.agreement.dispatch.vo.ValidateDispatchRuleVo;
 import com.jzg.commons.entity.po.EsmInsCompany;
 import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttr;
 import com.jzg.commons.entity.scheme.po.*;
@@ -17,11 +27,9 @@ import com.jzg.commons.util.MinioUtils;
 import com.jzg.commons.entity.costs.vo.ValidateSchemeRuleVo;
 import com.jzg.organization.client.CostsRuleClient;
 import com.jzg.organization.client.EsmInsCompanyClient;
+import com.jzg.organization.client.OrgClient;
 import com.jzg.organization.mapper.*;
-import com.jzg.organization.service.PtlAgreementDeptService;
-import com.jzg.organization.service.PtlAgreementService;
-import com.jzg.organization.service.PtlAgreementUndwrtRulesAttrService;
-import com.jzg.organization.service.PtlSchemeService;
+import com.jzg.organization.service.*;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -69,6 +77,12 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
     @Autowired
     private PtlAgreementService agreementService;
 
+    @Autowired
+    PtlAgreementDispatchService ptlAgreementDispatchService;
+
+    @Autowired
+    OrgClient orgClient;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean saveScheme(PtlSchemeSaveVo ptlSchemeSaveVo) {
@@ -363,13 +377,68 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
             vo.setCnName(vo.getCode());
             vo.setLogo(MinioUtils.getPresignedObjectUrl(bucketName,company.getLogo()));
             resVo.add(vo);
-
         });
 
-//        AgreementParam param = new AgreementParam();
-//        param.setCompanyIds(companyIds);
-//        Page<AgreementVo> agreementVoPage = agreementService.queryPage(param);
+        ValidateDispatchRuleVo dispatchRuleVos = new ValidateDispatchRuleVo();
+        dispatchRuleVos.setQuoteVo(validateSchemeRuleVo.getQuoteVo());
+        //2.协议调度规则数据拼接
+        companyList.forEach(company->{
+            PtlAgreementDispatchQuery query = new PtlAgreementDispatchQuery();
+            query.setCompanyId(company.getId());
+            HttpResult agreementDispatch = orgClient.getAgreementDispatch(query,baseController.getToken());
+            if(agreementDispatch.getCode() == 200){
+                ObjectMapper mapper = new ObjectMapper();
+                List<PtlAgreementDispatchVo.DispatchVo> vos = new ArrayList<>();
+                Map<String, Object> data = (Map<String, Object>)agreementDispatch.getData();
+
+                Object dispatchVosObj = data.get("dispatchVos");
+                if (dispatchVosObj instanceof List) {
+                    List<Map<String, Object>> dispatchVos = (List<Map<String, Object>>) dispatchVosObj;
+                    for (Map<String, Object> map : dispatchVos) {
+                        PtlAgreementDispatchVo.DispatchVo obj = mapper.convertValue(map, PtlAgreementDispatchVo.DispatchVo.class);
+                        vos.add(obj);
+                    }
+                }
 
+                // 根据section 分组 进行拆分 规则
+                for (PtlAgreementDispatchVo.DispatchVo vo : vos){
+                    List<PtlAgreementDispatchRulesAttrLink> attrLinks = vo.getAttrLinks();
+                    Map<String, List<PtlAgreementDispatchRulesAttrLink>> grouped =
+                            attrLinks.stream()
+                                    .collect(Collectors.groupingBy(
+                                                    PtlAgreementDispatchRulesAttrLink::getSection,
+                                                    LinkedHashMap::new,
+                                                    Collectors.toList()
+                                    ));
+                    ValidateDispatchRuleVo.DispatchAttrVo dispatchAttrVo = new ValidateDispatchRuleVo.DispatchAttrVo();
+                    dispatchAttrVo.setDispatchId(vo.getDispatchId());
+                    dispatchAttrVo.setDispatchName(vo.getDispatchName());
+                    dispatchAttrVo.setCompanyId(vo.getCompanyId());
+                    dispatchAttrVo.setSectionGroups(grouped);
+                    dispatchRuleVos.getDispatchAttrVos().add(dispatchAttrVo);
+                }
+            }
+        });
+//
+        // 3. 校验调度数据
+        HttpResult httpResult = costsRuleClient.validateDispatchRule(dispatchRuleVos);
+        if(httpResult.getCode() == 200){
+            // 返回了调度id  通过调度id 查询动作
+            List<PtlAgreementDispatchVo.DispatchVo> agreementDispatchAction = ptlAgreementDispatchService.getAgreementDispatchAction((List<String>) httpResult.getData());
+            // 如果动作中存在替换协议则 保司标志置为调度
+            resVo.forEach(company->{
+                company.setIsDispatch(0);
+                PtlAgreementDispatchVo.DispatchVo ptlAgreementDispatchVo = agreementDispatchAction.stream().filter(x -> x.getCompanyId().contains(company.getId())).findFirst().orElse(null);
+                if(ptlAgreementDispatchVo != null){
+                    PtlAgreementDispatchAction action1 = ptlAgreementDispatchVo.getActions().stream().filter(action -> action.getActionCode().equals(ActionEnum.SPECIFY_AGREEMENT.getCode())).findFirst().orElse(null);
+                    if(action1 != null){
+                        //将调度字段设为1
+                        company.setIsDispatch(1);
+                        company.setDispatchId(ptlAgreementDispatchVo.getDispatchId());
+                    }
+                }
+            });
+        }
         return resVo;
     }
 

+ 25 - 0
tenant/organization/src/main/resources/mapper/PtlAgreementDispatchActionMapper.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jzg.organization.mapper.PtlAgreementDispatchActionMapper">
+
+    <resultMap id="ActionMap" type="com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAction">
+        <id property="id" column="id"/>
+        <result property="dispatchId" column="dispatch_id"/>
+        <result property="actionCode" column="action_code"/>
+        <result property="actionJson" column="action_json"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
+    </resultMap>
+
+    <select id="getActions" resultMap="ActionMap">
+        select *
+        from
+            ptl_agreement_dispatch_action
+        where 1=1
+          and dispatch_id in
+        <foreach collection="dispatchIds" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+</mapper>

+ 22 - 0
tenant/organization/src/main/resources/mapper/PtlAgreementDispatchAfterActionMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jzg.organization.mapper.PtlAgreementDispatchAfterActionMapper">
+
+    <resultMap id="ActionMap" type="com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAfterAction">
+        <id property="id" column="id"/>
+        <result property="companyId" column="companyId"/>
+        <result property="actionCode" column="action_code"/>
+        <result property="actionJson" column="action_json"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
+    </resultMap>
+
+    <select id="getAfterActions" resultMap="ActionMap">
+        select *
+        from
+            ptl_agreement_dispatch_after_action
+        where 1=1
+          and company_id = #{id}
+    </select>
+</mapper>