Browse Source

Merge branch 'test' into test-xq1

# Conflicts:
#	src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java
xuqiang 1 year ago
parent
commit
9b2ea890eb
100 changed files with 2997 additions and 318 deletions
  1. 25 0
      sql/Online.sql
  2. 45 0
      src/main/java/com/ydtech/constants/enums/dict/ZmTransferType.java
  3. 4 2
      src/main/java/com/ydtech/modules/admin/controller/SysMenuController.java
  4. 7 0
      src/main/java/com/ydtech/modules/admin/controller/SysSwitchConfigController.java
  5. 16 0
      src/main/java/com/ydtech/modules/admin/model/dto/BusinessAgentExcel.java
  6. 5 5
      src/main/java/com/ydtech/modules/admin/model/dto/GetChannelExcel.java
  7. 3 0
      src/main/java/com/ydtech/modules/admin/model/dto/QuotationDetailsExcel.java
  8. 0 16
      src/main/java/com/ydtech/modules/admin/model/po/SysWechatCustomer.java
  9. 13 9
      src/main/java/com/ydtech/modules/admin/model/po/SysWechatCustomerDuty.java
  10. 6 5
      src/main/java/com/ydtech/modules/admin/model/vo/BusinessAgentData.java
  11. 35 3
      src/main/java/com/ydtech/modules/admin/model/vo/wechat/SysWechatCustomerDutyRulesVo.java
  12. 25 3
      src/main/java/com/ydtech/modules/admin/model/vo/wechat/SysWechatCustomerVo.java
  13. 8 0
      src/main/java/com/ydtech/modules/admin/service/SysWechatCustomerDutyService.java
  14. 1 7
      src/main/java/com/ydtech/modules/admin/service/SysWechatCustomerService.java
  15. 7 1
      src/main/java/com/ydtech/modules/admin/service/impl/CompanyDataReportServiceImpl.java
  16. 42 19
      src/main/java/com/ydtech/modules/admin/service/impl/SysWechatCustomerBusinessServiceImpl.java
  17. 50 31
      src/main/java/com/ydtech/modules/admin/service/impl/SysWechatCustomerServiceImpl.java
  18. 17 0
      src/main/java/com/ydtech/modules/equity/components/EquityApiConfigurationProperties.java
  19. 132 0
      src/main/java/com/ydtech/modules/equity/components/EquityRequestApiComponents.java
  20. 126 0
      src/main/java/com/ydtech/modules/equity/controller/EquityController.java
  21. 18 0
      src/main/java/com/ydtech/modules/equity/dao/InsAreaCompanyEquityMapper.java
  22. 103 0
      src/main/java/com/ydtech/modules/equity/model/InsAreaCompanyEquity.java
  23. 17 0
      src/main/java/com/ydtech/modules/equity/model/request/BaseRequest.java
  24. 23 0
      src/main/java/com/ydtech/modules/equity/model/request/ThreeOrderVo.java
  25. 21 0
      src/main/java/com/ydtech/modules/equity/model/request/ThreePointVo.java
  26. 54 0
      src/main/java/com/ydtech/modules/equity/model/request/ThreeRightsInfoPageVo.java
  27. 36 0
      src/main/java/com/ydtech/modules/equity/model/request/ThreeUserOrderListVo.java
  28. 231 0
      src/main/java/com/ydtech/modules/equity/model/request/ThreeUserOrderVo.java
  29. 24 0
      src/main/java/com/ydtech/modules/equity/model/response/BaseResponse.java
  30. 164 0
      src/main/java/com/ydtech/modules/equity/model/response/LocalEquityPackageAssociation.java
  31. 127 0
      src/main/java/com/ydtech/modules/equity/model/response/LocalEquityPackagePage.java
  32. 25 0
      src/main/java/com/ydtech/modules/equity/model/response/PageResultResponse.java
  33. 31 0
      src/main/java/com/ydtech/modules/equity/model/response/PointRatioDto.java
  34. 23 0
      src/main/java/com/ydtech/modules/equity/model/vo/AddEquityPageQueryVo.java
  35. 53 0
      src/main/java/com/ydtech/modules/equity/model/vo/EquityPackageVo.java
  36. 40 0
      src/main/java/com/ydtech/modules/equity/model/vo/EquityPageQueryVo.java
  37. 81 0
      src/main/java/com/ydtech/modules/equity/model/vo/EquitySaveVo.java
  38. 70 0
      src/main/java/com/ydtech/modules/equity/service/EquityService.java
  39. 13 0
      src/main/java/com/ydtech/modules/equity/service/InsAreaCompanyEquityService.java
  40. 334 0
      src/main/java/com/ydtech/modules/equity/service/impl/EquityServiceImpl.java
  41. 22 0
      src/main/java/com/ydtech/modules/equity/service/impl/InsAreaCompanyEquityServiceImpl.java
  42. 92 0
      src/main/java/com/ydtech/modules/equity/utils/SMCheckDataUtils.java
  43. 12 1
      src/main/java/com/ydtech/modules/fee/dto/vo/RuleAttrMappingVo.java
  44. 2 1
      src/main/java/com/ydtech/modules/fee/service/FeeRuleSchemeNewService.java
  45. 39 24
      src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java
  46. 81 6
      src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java
  47. 23 2
      src/main/java/com/ydtech/modules/fnc/service/impl/InsPlyIncomeServiceImpl.java
  48. 3 0
      src/main/java/com/ydtech/modules/ins/model/vo/CarInfoVo.java
  49. 6 0
      src/main/java/com/ydtech/modules/ins/model/vo/QuoteRespVo.java
  50. 1 1
      src/main/java/com/ydtech/modules/lg/PushLgLogUtils.java
  51. 8 2
      src/main/java/com/ydtech/modules/order/aop/aspect/QuoteVerificationAspect.java
  52. 1 0
      src/main/java/com/ydtech/modules/order/components/dajia/DaJiaRequestApiComponents.java
  53. 2 2
      src/main/java/com/ydtech/modules/order/components/yangguang/YangGuangEncryption.java
  54. 1 1
      src/main/java/com/ydtech/modules/order/components/yangguang/YangGuangRequestApiComponents.java
  55. 6 0
      src/main/java/com/ydtech/modules/order/constants/InsuranceTypeCorrespondence.java
  56. 11 2
      src/main/java/com/ydtech/modules/order/controller/ExternalOrderController.java
  57. 26 0
      src/main/java/com/ydtech/modules/order/controller/InsCrawlerOrderController.java
  58. 66 0
      src/main/java/com/ydtech/modules/order/controller/QuoteController.java
  59. 3 2
      src/main/java/com/ydtech/modules/order/controller/YongChengOrderApiController.java
  60. 2 0
      src/main/java/com/ydtech/modules/order/dao/InsTaskImagesMapper.java
  61. 1 1
      src/main/java/com/ydtech/modules/order/dao/SysQuoteRecordMapper.java
  62. 6 0
      src/main/java/com/ydtech/modules/order/entity/InsOrders.java
  63. 44 19
      src/main/java/com/ydtech/modules/order/entity/api/yangguang/request/YangGuangAccuracyCalculateRequest.java
  64. 16 0
      src/main/java/com/ydtech/modules/order/entity/crawler/request/CrawlerQuoteRequest.java
  65. 4 0
      src/main/java/com/ydtech/modules/order/entity/crawler/request/TsCrawlerLoginRequest.java
  66. 5 0
      src/main/java/com/ydtech/modules/order/entity/crawler/response/CrawlerQuoteResponse.java
  67. 5 0
      src/main/java/com/ydtech/modules/order/entity/dto/InsAreaCompanyQueryDto.java
  68. 3 0
      src/main/java/com/ydtech/modules/order/entity/vo/BaseQuoteVo.java
  69. 3 0
      src/main/java/com/ydtech/modules/order/entity/vo/InsOrdersEditingVo.java
  70. 3 0
      src/main/java/com/ydtech/modules/order/entity/vo/OrderQueryVo.java
  71. 8 0
      src/main/java/com/ydtech/modules/order/entity/vo/OrderVo.java
  72. 1 1
      src/main/java/com/ydtech/modules/order/service/InsAreaCompanyService.java
  73. 14 0
      src/main/java/com/ydtech/modules/order/service/InsCrawlerOrderService.java
  74. 2 0
      src/main/java/com/ydtech/modules/order/service/InsTaskImagesService.java
  75. 1 0
      src/main/java/com/ydtech/modules/order/service/impl/GuorenOrderApiServiceImpl.java
  76. 8 5
      src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java
  77. 69 10
      src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java
  78. 6 0
      src/main/java/com/ydtech/modules/order/service/impl/InsOrderPdfUrlServiceImpl.java
  79. 47 0
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  80. 38 0
      src/main/java/com/ydtech/modules/order/service/impl/InsTaskImagesServiceImpl.java
  81. 7 2
      src/main/java/com/ydtech/modules/order/service/impl/SysQuoteRedisServiceImpl.java
  82. 11 6
      src/main/java/com/ydtech/modules/order/service/impl/YangGuangOrderApiServiceImpl.java
  83. 1 1
      src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementGroupLinkDeptMapper.java
  84. 3 0
      src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementSaveDto.java
  85. 1 1
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementDeptService.java
  86. 4 4
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementDeptServiceImpl.java
  87. 10 1
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java
  88. 4 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNew.java
  89. 3 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductCosts.java
  90. 3 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductCostsSave.java
  91. 6 5
      src/main/java/com/ydtech/modules/scheme/entity/po/PtlScheme.java
  92. 4 0
      src/main/java/com/ydtech/modules/scheme/entity/vo/SchemeResultVo.java
  93. 3 0
      src/main/java/com/ydtech/modules/scheme/entity/vo/SchemeSaveVo.java
  94. 22 5
      src/main/java/com/ydtech/modules/scheme/service/impl/PtlSchemeRulesServiceImpl.java
  95. 12 1
      src/main/java/com/ydtech/modules/scheme/service/impl/PtlSchemeServiceImpl.java
  96. 8 0
      src/main/resources/application-prod.yml
  97. 13 4
      src/main/resources/application-test.yml
  98. 1 3
      src/main/resources/mapper/modules/admin/SysWechatCustomerMapper.xml
  99. 0 0
      src/main/resources/mapper/modules/admin/SysWechatCustomerRecordingMapper.xml
  100. 135 104
      src/main/resources/mapper/modules/admin/TaskStatisticsMapper.xml

+ 25 - 0
sql/Online.sql

@@ -9,3 +9,28 @@ INSERT INTO `agent`.`ins_driving_intention_insurance` ( `parent_id`, `type`, `co
 INSERT INTO `agent`.`ins_driving_intention_insurance` ( `parent_id`, `type`, `company_id`, `project_name`, `project_code`, `alias`, `risk_code`, `seat_num`, `sum_amount`, `sum_premium`, `request_data`, `api_type`, `relate_code`) VALUES ( 0, 2, 'PICC1000000', '“如意行”非营运客车方案C款(升级版)(1至1年)', 'EAD0000041', NULL, NULL, NULL, 0.00, 0.00, NULL, 2, NULL);
 
 INSERT INTO `agent`.`ins_driving_intention_insurance_type_company` ( `company_id`, `type_id`, `is_multiple`, `is_enable`, `create_time`) VALUES ( 'PICC1000000', 2, 0, 1, '2025-04-17 16:29:17');
+
+
+
+ALTER TABLE `agent`.`ptl_agreement_product_costs_new`
+    ADD COLUMN `ld_proportion` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '代理人留点比例' AFTER `valid_status`;
+CREATE TABLE `ins_area_company_equity`  (
+                                            `sub_order_no` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '订单号',
+                                            `type` tinyint NULL DEFAULT NULL COMMENT '权益类型0.现金权益 1.权益包',
+                                            `status` tinyint NULL DEFAULT 0 COMMENT '0.未下单1.已下单2.已确认',
+                                            `equity_id` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权益包id',
+                                            `equity_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权益包名称',
+                                            `equity_info` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '权益包明细json',
+                                            `receive_type` tinyint NULL DEFAULT NULL COMMENT '接收人类型0.投保人 1.被保人 2.车主',
+                                            `receive_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '接收人名字',
+                                            `receive_phone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '接收人电话',
+                                            `receive_identify` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '接收人身份证号',
+                                            `order_money` decimal(10, 2) NULL DEFAULT NULL COMMENT '返佣金额',
+                                            `point` decimal(10, 2) NULL DEFAULT NULL COMMENT '兑换积分',
+                                            PRIMARY KEY (`sub_order_no`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单权益包下单表' ROW_FORMAT = Dynamic;
+
+SET FOREIGN_KEY_CHECKS = 1;
+
+INSERT INTO `agent`.`sys_switch_config` ( `project`, `function_name`, `keyword`, `enabled`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('权益包', '权益包开关', 'equityFlag', 1, 'admin', '2025-05-08 10:35:43', 'admin', '2025-05-19 09:15:06');
+

+ 45 - 0
src/main/java/com/ydtech/constants/enums/dict/ZmTransferType.java

@@ -0,0 +1,45 @@
+package com.ydtech.constants.enums.dict;
+
+import com.ydtech.aop.request.DictEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@AllArgsConstructor
+@Getter
+@DictEnum(key = "zmTransferType", desc = "中煤过户类型")
+public enum ZmTransferType implements IBaseEnum {
+
+    ZMTR00("0", "费率浮动", 1, 0),
+    ZMTR01("01", "新车,不浮动", 2, 0),
+    ZMTR02("02", "首次投保,不浮动", 3, 0),
+    ZMTR03("03", "车辆所有权转移,不浮动", 4, 0),
+    ZMTR04("04", "临时上道或临时入境,不浮动", 5, 0),
+    ZMTR05("05", "为摩托车、拖拉机、变拖类、低速载货汽车、三轮汽车,不浮动", 6, 0),
+    ZMTR06("06", "未如实告知平台车辆信息,无法确定浮动比率,不浮动", 7, 0),
+    ZMTR07("07", "非重复投保退保的保单续保,不浮动", 8, 0),
+    ZMTR08("08", "短期保单续保不下浮", 9, 0),
+    ZMTR09("09", "短期单投保不浮动", 10, 0),
+    ZMTR10("10", "脱保,不下浮", 11, 0),
+    ZMTR11("99", "不在浮动时间范围内,不浮动", 12, 0);
+
+    // 编号
+    private final String code;
+    // 说明
+    private final String desc;
+    // 排序
+    private final Integer sort;
+    // 状态  0 启用  1 不启用
+    private final Integer status;
+
+    public static String getByCode(String code) {
+        for (ZmTransferType value : ZmTransferType.values()) {
+            if (value.getCode().equals(code)) {
+                return value.desc;
+            }
+        }
+        return null;
+    }
+}

+ 4 - 2
src/main/java/com/ydtech/modules/admin/controller/SysMenuController.java

@@ -5,6 +5,7 @@ import com.ydtech.modules.admin.model.SysMenu;
 import com.ydtech.modules.admin.model.SysMenuVo;
 import com.ydtech.modules.admin.model.SysRole;
 import com.ydtech.modules.admin.service.SysMenuService;
+import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.core.page.HttpResult;
 import org.apache.commons.compress.utils.Lists;
@@ -23,7 +24,7 @@ import java.util.stream.Collectors;
  */
 @RestController
 @RequestMapping("menu")
-public class SysMenuController {
+public class SysMenuController extends BaseController {
 
     @Autowired
     private SysMenuService sysMenuService;
@@ -58,7 +59,8 @@ public class SysMenuController {
     //    @PreAuthorize("hasAuthority('sys:menu:view')")
     @GetMapping(value = "/findMenuTree")
     public HttpResult findMenuTree() {
-        return HttpResult.ok(sysMenuService.findTree(null, 0));
+
+        return HttpResult.ok(sysMenuService.findTree(getUserName(), 0));
     }
 
     @GetMapping(value = "v1/findMenuTree")

+ 7 - 0
src/main/java/com/ydtech/modules/admin/controller/SysSwitchConfigController.java

@@ -57,4 +57,11 @@ public class SysSwitchConfigController {
         return HttpResult.ok(display);
     }
 
+    @GetMapping("/isEnabled")
+    @ApiOperation(value = "开关是否开启")
+    public HttpResult<Boolean> isEnabled(String keyWord) {
+        boolean display = sysSwitchConfigService.isEnabled(keyWord);
+        return HttpResult.ok(display);
+    }
+
 }

+ 16 - 0
src/main/java/com/ydtech/modules/admin/model/dto/BusinessAgentExcel.java

@@ -39,4 +39,20 @@ public class BusinessAgentExcel {
 
     @ExcelProperty(value = "非车险保费", index = 9)
     private BigDecimal jypremium;
+
+    @ExcelProperty(value = "单交订单数", index = 10)
+    private Integer riskCodeDj;
+
+    @ExcelProperty(value = "单商订单数", index = 11)
+    private Integer riskCodeDs;
+
+
+    @ExcelProperty(value = "单三订单数", index = 12)
+    private Integer riskCodeDsan;
+
+    @ExcelProperty(value = "交三订单数", index = 13)
+    private Integer riskCodeJs;
+
+    @ExcelProperty(value = "交商订单数", index = 14)
+    private Integer riskCodeJshang;
 }

+ 5 - 5
src/main/java/com/ydtech/modules/admin/model/dto/GetChannelExcel.java

@@ -43,18 +43,18 @@ public class GetChannelExcel {
 
 
     @ExcelProperty(value = "单交订单数", index = 10)
-    private String riskCodeDj;
+    private Integer riskCodeDj;
 
     @ExcelProperty(value = "单商订单数", index = 11)
-    private String riskCodeDs;
+    private Integer riskCodeDs;
 
 
     @ExcelProperty(value = "单三订单数", index = 12)
-    private String riskCodeDsan;
+    private Integer riskCodeDsan;
 
     @ExcelProperty(value = "交三订单数", index = 13)
-    private String riskCodeJs;
+    private Integer riskCodeJs;
 
     @ExcelProperty(value = "交商订单数", index = 14)
-    private String riskCodeJshang;
+    private Integer riskCodeJshang;
 }

+ 3 - 0
src/main/java/com/ydtech/modules/admin/model/dto/QuotationDetailsExcel.java

@@ -71,6 +71,9 @@ public class QuotationDetailsExcel {
     @ExcelProperty(value = "大订单号",index = 20)
     private String bigOrderno;
 
+    @ExcelProperty(value = "险种",index = 21)
+    private String product;
+
     @ExcelIgnore
     private String auditstatus;
 

+ 0 - 16
src/main/java/com/ydtech/modules/admin/model/po/SysWechatCustomer.java

@@ -64,26 +64,10 @@ public class SysWechatCustomer implements Serializable {
      */
     @TableField("open_kf_id")
     private String openKfId;
-    /**
-     * 值班客服
-     */
-    @TableField(value = "duty_customer_id")
-    private long dutyCustomerId;
 
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 
-    public SysWechatCustomer(long id, String nickname, String avatar, String userId, String receptionist, String receptionistId, String openKfId, long dutyCustomerId) {
-        this.id = id;
-        this.nickname = nickname;
-        this.avatar = avatar;
-        this.userId = userId;
-        this.receptionist = receptionist;
-        this.receptionistId = receptionistId;
-        this.openKfId = openKfId;
-        this.dutyCustomerId = dutyCustomerId;
-    }
-
     public SysWechatCustomer(SysWechatCustomerAddVo sysWechatCustomerAddVo) {
         this.nickname = sysWechatCustomerAddVo.getNickname();
         this.avatar = sysWechatCustomerAddVo.getAvatar();

+ 13 - 9
src/main/java/com/ydtech/modules/admin/model/po/SysWechatCustomerDuty.java

@@ -4,21 +4,21 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.time.LocalDateTime;
-import java.util.Date;
-
 import com.ydtech.modules.admin.model.vo.wechat.SysWechatCustomerDutyRulesVo;
 import com.ydtech.utils.DateTimeUtil;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
 /**
  * 微信客服值班时间
+ *
  * @TableName sys_wechat_customer_duty
  */
-@TableName(value ="sys_wechat_customer_duty")
+@TableName(value = "sys_wechat_customer_duty")
 @AllArgsConstructor
 @NoArgsConstructor
 @Data
@@ -28,19 +28,21 @@ public class SysWechatCustomerDuty implements Serializable {
      */
     @TableId(value = "id", type = IdType.AUTO)
     private long id;
-
+    /**
+     * 值班客服
+     */
+    @TableField(value = "duty_customer_id")
+    private long dutyCustomerId;
     /**
      * 值班开始时间
      */
     @TableField(value = "start_time")
     private LocalDateTime startTime;
-
     /**
      * 值班结束时间
      */
     @TableField(value = "end_time")
     private LocalDateTime endTime;
-
     /**
      * 客服id
      */
@@ -51,9 +53,11 @@ public class SysWechatCustomerDuty implements Serializable {
     private static final long serialVersionUID = 1L;
 
 
-    public SysWechatCustomerDuty(long customerId, SysWechatCustomerDutyRulesVo.DutyDateTime dutyDateTime) {
+    public SysWechatCustomerDuty(long customerId, long dutyCustomerId, SysWechatCustomerDutyRulesVo.DutyDateTime dutyDateTime) {
         this.startTime = DateTimeUtil.parseLocalDateTime(dutyDateTime.getStartTime(), DateTimeUtil.DATETIME_PATTERN);
         this.endTime = DateTimeUtil.parseLocalDateTime(dutyDateTime.getEndTime(), DateTimeUtil.DATETIME_PATTERN);
         this.customerId = customerId;
+        this.dutyCustomerId = dutyCustomerId;
     }
+
 }

+ 6 - 5
src/main/java/com/ydtech/modules/admin/model/vo/BusinessAgentData.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -66,19 +67,19 @@ public class BusinessAgentData {
     private String leaderName;
 
     @ApiModelProperty(value = "交三订单数")
-    private String riskCodeJs;
+    private Integer riskCodeJs;
 
     @ApiModelProperty(value = "单交订单数")
-    private String riskCodeDj;
+    private Integer riskCodeDj;
 
     @ApiModelProperty(value = "交商订单数")
-    private String riskCodeJshang;
+    private Integer riskCodeJshang;
 
     @ApiModelProperty(value = "单商订单数")
-    private String riskCodeDs;
+    private Integer riskCodeDs;
 
     @ApiModelProperty(value = "单三订单数")
-    private String riskCodeDsan;
+    private Integer riskCodeDsan;
 
 
     @ApiModelProperty(value = "毛利润")

+ 35 - 3
src/main/java/com/ydtech/modules/admin/model/vo/wechat/SysWechatCustomerDutyRulesVo.java

@@ -1,15 +1,22 @@
 package com.ydtech.modules.admin.model.vo.wechat;
 
+import com.ydtech.modules.admin.model.po.SysWechatCustomerDuty;
+import com.ydtech.utils.DateTimeUtil;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.NotBlank;
 import java.io.Serializable;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Data
 @ApiModel("值班规则配置")
+@AllArgsConstructor
+@NoArgsConstructor
 public class SysWechatCustomerDutyRulesVo implements Serializable {
 
     private static final long serialVersionUID = 5313784741514176124L;
@@ -18,13 +25,34 @@ public class SysWechatCustomerDutyRulesVo implements Serializable {
     private String customerId;
 
     @ApiModelProperty("值班客服")
-    private String dutyCustomerId;
+    private List<DutyCustomerDTO> dutyCustomerDTOS;
 
-    @ApiModelProperty("值班规则列表")
-    private List<DutyDateTime> dutyDateTimeList;
+    @Data
+    @ApiModel("值班客服")
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class DutyCustomerDTO implements Serializable {
+
+        private static final long serialVersionUID = -6002812616686817550L;
+
+        @ApiModelProperty("值班客服")
+        @NotBlank(message = "值班客服不能为空")
+        private String dutyCustomerId;
+
+        @ApiModelProperty("值班规则列表")
+        private List<DutyDateTime> dutyDateTimeList;
+
+        public DutyCustomerDTO(Long dutyCustomerId, List<SysWechatCustomerDuty> sysWechatCustomerDuties) {
+            this.dutyCustomerId = dutyCustomerId.toString();
+            this.dutyDateTimeList = sysWechatCustomerDuties.stream().map(DutyDateTime::new).collect(Collectors.toList());
+        }
+
+    }
 
     @Data
     @ApiModel("值班时间")
+    @AllArgsConstructor
+    @NoArgsConstructor
     public static class DutyDateTime implements Serializable {
 
         private static final long serialVersionUID = -633472086045531848L;
@@ -37,6 +65,10 @@ public class SysWechatCustomerDutyRulesVo implements Serializable {
         @ApiModelProperty("结束时间")
         private String endTime;
 
+        public DutyDateTime(SysWechatCustomerDuty sysWechatCustomerDuty) {
+            this.startTime = DateTimeUtil.localDateTimetoString(sysWechatCustomerDuty.getStartTime());
+            this.endTime = DateTimeUtil.localDateTimetoString(sysWechatCustomerDuty.getEndTime());
+        }
     }
 
 }

+ 25 - 3
src/main/java/com/ydtech/modules/admin/model/vo/wechat/SysWechatCustomerVo.java

@@ -3,8 +3,12 @@ package com.ydtech.modules.admin.model.vo.wechat;
 import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Data
@@ -39,9 +43,27 @@ public class SysWechatCustomerVo {
     private String receptionistId;
 
     @ApiModelProperty("值班客服")
-    private String dutyCustomer;
+    private List<DutyCustomerDTO> dutyCustomerDTO;
 
-    @ApiModelProperty("值班时间")
-    private List<String> dutyDatetime;
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @ApiModel("值班客服")
+    public static class DutyCustomerDTO {
+
+        @ApiModelProperty("值班客服")
+        private String dutyCustomer;
+
+        @ApiModelProperty("值班时间")
+        private List<String> dutyDatetime;
+
+    }
+
+    public List<DutyCustomerDTO> getDutyCustomerDTO() {
+        if(CollectionUtils.isEmpty(dutyCustomerDTO)){
+            dutyCustomerDTO = new ArrayList<>();
+        }
+        return dutyCustomerDTO;
+    }
 
 }

+ 8 - 0
src/main/java/com/ydtech/modules/admin/service/SysWechatCustomerDutyService.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.admin.service;
 
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.po.SysWechatCustomer;
 import com.ydtech.modules.admin.model.po.SysWechatCustomerDuty;
 import com.ydtech.modules.admin.model.vo.wechat.SysWechatCustomerDutyRulesVo;
@@ -32,4 +33,11 @@ public interface SysWechatCustomerDutyService extends IService<SysWechatCustomer
         return list(wr);
     }
 
+    default void isDutyCustomerId(Long customerId) {
+        List<SysWechatCustomerDuty> list = lambdaQuery().eq(SysWechatCustomerDuty::getDutyCustomerId, customerId).list();
+        if (!list.isEmpty()) {
+            throw new SystemException("此客服还在值班客服中配置,请删除后重试");
+        }
+    }
+
 }

+ 1 - 7
src/main/java/com/ydtech/modules/admin/service/SysWechatCustomerService.java

@@ -67,13 +67,7 @@ public interface SysWechatCustomerService extends BaseIService<SysWechatCustomer
         }
     }
 
-    default void isDutyCustomerId(Long customerId) {
-        List<SysWechatCustomer> list = lambdaQuery().eq(SysWechatCustomer::getDutyCustomerId, customerId).list();
-        if (!list.isEmpty()) {
-            throw new SystemException("此客服还在值班客服中配置,请删除后重试");
-        }
-    }
 
-    void getCacheCustomerId(SysWechatCustomer sysWechatCustomer);
+    SysWechatCustomer getCacheCustomerId(SysWechatCustomer sysWechatCustomer);
 
 }

+ 7 - 1
src/main/java/com/ydtech/modules/admin/service/impl/CompanyDataReportServiceImpl.java

@@ -318,7 +318,13 @@ public class CompanyDataReportServiceImpl implements CompanyDataReportService {
                 e.printStackTrace();
             }
         }
-        String fileName = EasyExcelUtils.downExcel(uploadPath, "小定单明细", QuotationDetailsExcel.class, resultSubOrder);
+        String fileName = EasyExcelUtils.downExcel(
+                uploadPath,
+                "1".equals(companyQutationCountDataQueryDto.getManagementSource()) ? "小订单渠道代理人导出" :
+                        "2".equals(companyQutationCountDataQueryDto.getManagementSource()) ? "小订单代理人明细导出" : "小订单明细",
+                QuotationDetailsExcel.class,
+                resultSubOrder
+        );
         return HttpResult.ok("", uploadUrl + "excel/" + fileName);
     }
 

+ 42 - 19
src/main/java/com/ydtech/modules/admin/service/impl/SysWechatCustomerBusinessServiceImpl.java

@@ -26,7 +26,6 @@ import me.chanjar.weixin.cp.bean.WxCpBaseResp;
 import me.chanjar.weixin.cp.bean.WxCpDepart;
 import me.chanjar.weixin.cp.bean.WxCpUser;
 import me.chanjar.weixin.cp.bean.kf.*;
-import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
@@ -65,11 +64,10 @@ public class SysWechatCustomerBusinessServiceImpl implements SysWechatCustomerBu
                 .collect(Collectors.toList());
         Map<String, List<SysWechatCustomerDeptVo>> parentGroup = deptVos.stream()
                 .collect(Collectors.groupingBy(SysWechatCustomerDeptVo::getParentId));
-        Set<String> strings = parentGroup.keySet();
-
+        List<String> collect = deptVos.stream().map(SysWechatCustomerDeptVo::getDeptId).collect(Collectors.toList());
         deptVos.forEach(node -> node.setChildDept(parentGroup.getOrDefault(node.getDeptId(), Collections.emptyList())));
         return deptVos.stream()
-                .filter(node -> node.getParentId() != null && strings.contains(node.getDeptId()))
+                .filter(node -> node.getParentId() != null && !collect.contains(node.getParentId()))
                 .collect(Collectors.toList());
     }
 
@@ -100,12 +98,33 @@ public class SysWechatCustomerBusinessServiceImpl implements SysWechatCustomerBu
             // 设置值班时间
             sysWechatCustomerVoPageInfo.getList().forEach(sysWechatCustomerVo -> {
                 List<SysWechatCustomerDuty> sysWechatCustomerDuties = dutyMap.get(Long.valueOf(sysWechatCustomerVo.getId()));
-                if (!CollectionUtils.isEmpty(sysWechatCustomerDuties)) {
-                    List<String> collect = sysWechatCustomerDuties.stream()
+                if(CollectionUtils.isEmpty(sysWechatCustomerDuties)){
+                    return;
+                }
+
+                Map<Long, List<SysWechatCustomerDuty>> collect = sysWechatCustomerDuties.stream()
+                        .collect(Collectors.groupingBy(SysWechatCustomerDuty::getDutyCustomerId));
+
+                Map<Long, SysWechatCustomer> collect2 = sysWechatCustomerService.lambdaQuery()
+                        .in(SysWechatCustomer::getId, collect.keySet())
+                        .list()
+                        .stream()
+                        .collect(Collectors.toMap(SysWechatCustomer::getId, x -> x));
+
+                collect.keySet().forEach(sysWechatCustomerVoId -> {
+                    SysWechatCustomerVo.DutyCustomerDTO dutyCustomerDTO = new SysWechatCustomerVo.DutyCustomerDTO();
+                    List<SysWechatCustomerDuty> sysWechatCustomerDuties1 = collect.get(sysWechatCustomerVoId);
+                    List<String> collect1 = sysWechatCustomerDuties1.stream()
                             .map(x -> DateTimeUtil.startAndEndTimeFormatting(x.getStartTime(), x.getEndTime()))
                             .collect(Collectors.toList());
-                    sysWechatCustomerVo.setDutyDatetime(collect);
-                }
+                    SysWechatCustomer sysWechatCustomer = collect2.get(sysWechatCustomerVoId);
+                    if(!ObjectUtils.isEmpty(sysWechatCustomer)) {
+                        dutyCustomerDTO.setDutyCustomer(sysWechatCustomer.getNickname());
+                    }
+                    dutyCustomerDTO.setDutyDatetime(collect1);
+                    sysWechatCustomerVo.getDutyCustomerDTO().add(dutyCustomerDTO);
+                });
+
             });
         }
 
@@ -158,7 +177,7 @@ public class SysWechatCustomerBusinessServiceImpl implements SysWechatCustomerBu
     @Override
     public void deleteWechatCustomer(String customerId) throws WxErrorException {
         SysWechatCustomer sysWechatCustomer = sysWechatCustomerService.getByIdExist(customerId, "客服不存在");
-        sysWechatCustomerService.isDutyCustomerId(sysWechatCustomer.getId());
+        sysWechatCustomerDutyService.isDutyCustomerId(sysWechatCustomer.getId());
         WxCpKfAccountDel wxCpKfAccountDel = new WxCpKfAccountDel();
         wxCpKfAccountDel.setOpenKfid(sysWechatCustomer.getOpenKfId());
         WxCpBaseResp wxCpBaseResp;
@@ -172,7 +191,7 @@ public class SysWechatCustomerBusinessServiceImpl implements SysWechatCustomerBu
     @Override
     public void updateWechatCustomer(String customerId, SysWechatCustomerAddVo sysWechatCustomerAddVo) throws WxErrorException {
         SysWechatCustomer sysWechatCustomer = sysWechatCustomerService.getByIdExist(customerId, "客服不存在");
-        if(!sysWechatCustomer.getNickname().equals(sysWechatCustomerAddVo.getNickname())){
+        if (!sysWechatCustomer.getNickname().equals(sysWechatCustomerAddVo.getNickname())) {
             sysWechatCustomerService.isNicknameRepeat(sysWechatCustomerAddVo.getNickname());
         }
         WxCpKfAccountUpd wxCpKfAccountUpd = new WxCpKfAccountUpd();
@@ -221,13 +240,16 @@ public class SysWechatCustomerBusinessServiceImpl implements SysWechatCustomerBu
 
     @Override
     public String getWeChatCustomer(SysUser user) throws WxErrorException {
-        SysWechatCustomer sysWechatCustomer = sysWechatCustomerService.getByUserId(user.getLeaderId());
-        List<SysWechatCustomer> sysWechatCustomerList = sysWechatCustomerService.list();
-        List<Long> sysWechatCustomerIdList = sysWechatCustomerList.stream()
-                .map(SysWechatCustomer::getId)
-                .collect(Collectors.toList());
+        SysWechatCustomer sysWechatCustomer = null;
+        if(!ObjectUtils.isEmpty(user)){
+             sysWechatCustomer = sysWechatCustomerService.getByUserId(user.getLeaderId());
+        }
         if (ObjectUtils.isEmpty(sysWechatCustomer)) {
             // 获取最近一次的客服记录
+            List<SysWechatCustomer> sysWechatCustomerList = sysWechatCustomerService.list();
+            List<Long> sysWechatCustomerIdList = sysWechatCustomerList.stream()
+                    .map(SysWechatCustomer::getId)
+                    .collect(Collectors.toList());
             SysWechatCustomerRecording sysWechatCustomerRecording = sysWechatCustomerRecordingService.lambdaQuery()
                     .in(!sysWechatCustomerIdList.isEmpty(), SysWechatCustomerRecording::getCustomerId, sysWechatCustomerIdList)
                     .eq(SysWechatCustomerRecording::getUserId, user.getId())
@@ -235,14 +257,14 @@ public class SysWechatCustomerBusinessServiceImpl implements SysWechatCustomerBu
                     .last("limit 1")
                     .one();
             if (ObjectUtils.isEmpty(sysWechatCustomerRecording)) {
-                sysWechatCustomerService.getCacheCustomerId(sysWechatCustomer);
+                sysWechatCustomer = sysWechatCustomerService.getCacheCustomerId(sysWechatCustomer);
             } else {
                 // 使用上一次的客服
                 sysWechatCustomer = sysWechatCustomerService.lambdaQuery()
                         .eq(SysWechatCustomer::getId, sysWechatCustomerRecording.getCustomerId())
                         .one();
                 if (ObjectUtils.isEmpty(sysWechatCustomer)) {
-                    sysWechatCustomerService.getCacheCustomerId(sysWechatCustomer);
+                    sysWechatCustomer = sysWechatCustomerService.getCacheCustomerId(sysWechatCustomer);
                 }
             }
             SysWechatCustomerRecording customerRecording = new SysWechatCustomerRecording();
@@ -256,8 +278,9 @@ public class SysWechatCustomerBusinessServiceImpl implements SysWechatCustomerBu
                 .le(SysWechatCustomerDuty::getStartTime, LocalDateTime.now())
                 .ge(SysWechatCustomerDuty::getEndTime, LocalDateTime.now())
                 .list();
-        if (sysWechatCustomer.getDutyCustomerId() > 0 && list != null && !list.isEmpty()) {
-            sysWechatCustomer = sysWechatCustomerService.getById(sysWechatCustomer.getDutyCustomerId());
+        if (list != null && !list.isEmpty()) {
+            SysWechatCustomerDuty sysWechatCustomerDuty = list.get(0);
+            sysWechatCustomer = sysWechatCustomerService.getById(sysWechatCustomerDuty.getDutyCustomerId());
         }
 
         if (ObjectUtils.isEmpty(sysWechatCustomer)) {

+ 50 - 31
src/main/java/com/ydtech/modules/admin/service/impl/SysWechatCustomerServiceImpl.java

@@ -22,6 +22,7 @@ import org.springframework.util.ObjectUtils;
 import org.springframework.util.StringUtils;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
@@ -59,20 +60,15 @@ public class SysWechatCustomerServiceImpl extends ServiceImpl<SysWechatCustomerM
         List<SysWechatCustomerDuty> sysWechatCustomerDuties = sysWechatCustomerDutyService.getByCustomerId(customerId);
         SysWechatCustomerDutyRulesVo sysWechatCustomerDutyRulesVo = new SysWechatCustomerDutyRulesVo();
         sysWechatCustomerDutyRulesVo.setCustomerId(String.valueOf(customer.getId()));
-        if (customer.getDutyCustomerId() > 0) {
-            sysWechatCustomerDutyRulesVo.setDutyCustomerId(String.valueOf(customer.getDutyCustomerId()));
-        }else {
-            sysWechatCustomerDutyRulesVo.setDutyCustomerId(null);
-        }
-        List<SysWechatCustomerDutyRulesVo.DutyDateTime> collect = sysWechatCustomerDuties.stream()
-                .map(sysWechatCustomerDuty -> {
-                    SysWechatCustomerDutyRulesVo.DutyDateTime dutyDateTime = new SysWechatCustomerDutyRulesVo.DutyDateTime();
-                    dutyDateTime.setEndTime(DateTimeUtil.localDateTimetoString(sysWechatCustomerDuty.getEndTime()));
-                    dutyDateTime.setStartTime(DateTimeUtil.localDateTimetoString(sysWechatCustomerDuty.getStartTime()));
-                    return dutyDateTime;
-                })
+
+        Map<Long, List<SysWechatCustomerDuty>> listMap = sysWechatCustomerDuties.stream()
+                .collect(Collectors.groupingBy(SysWechatCustomerDuty::getDutyCustomerId));
+
+        List<SysWechatCustomerDutyRulesVo.DutyCustomerDTO> dutyCustomerDTOS = listMap.keySet()
+                .stream()
+                .map(x -> new SysWechatCustomerDutyRulesVo.DutyCustomerDTO(x, listMap.get(x)))
                 .collect(Collectors.toList());
-        sysWechatCustomerDutyRulesVo.setDutyDateTimeList(collect);
+        sysWechatCustomerDutyRulesVo.setDutyCustomerDTOS(dutyCustomerDTOS);
         return sysWechatCustomerDutyRulesVo;
     }
 
@@ -80,32 +76,54 @@ public class SysWechatCustomerServiceImpl extends ServiceImpl<SysWechatCustomerM
     @Transactional(rollbackFor = Exception.class)
     public void saveOrUpdateCustomerDutyRules(SysWechatCustomerDutyRulesVo sysWechatCustomerDutyRules) {
         SysWechatCustomer customer = getByIdExist(sysWechatCustomerDutyRules.getCustomerId(), "客服不存在");
-        SysWechatCustomer dutyCustomer = getByIdExist(sysWechatCustomerDutyRules.getDutyCustomerId(), "值班客服不存在");
-
-        Optional.ofNullable(sysWechatCustomerDutyRules.getDutyDateTimeList())
-                        .ifPresent(sysWechatCustomerDutyRulesList -> {
-                            sysWechatCustomerDutyRulesList.forEach(sysWechatCustomerDutyRule -> {
-                                if (DateTimeUtil.timeComparison(sysWechatCustomerDutyRule.getStartTime(), sysWechatCustomerDutyRule.getEndTime())) {
-                                    throw new SystemException("结束时间必须晚于开始时间");
-                                }
-                            });
+        // 前端传入的值班客服ID
+        List<String> dutyCustomerIdList = sysWechatCustomerDutyRules.getDutyCustomerDTOS()
+                .stream()
+                .map(SysWechatCustomerDutyRulesVo.DutyCustomerDTO::getDutyCustomerId)
+                .collect(Collectors.toList());
+        // 数据库查出来的客服列表
+        List<SysWechatCustomer> sysWechatCustomerList = lambdaQuery().in(SysWechatCustomer::getId, dutyCustomerIdList)
+                .list();
+        // 过滤不包含的列表
+        List<SysWechatCustomer> sysWechatCustomers = sysWechatCustomerList.stream()
+                .filter(sysWechatCustomer -> !dutyCustomerIdList.contains(String.valueOf(sysWechatCustomer.getId())))
+                .collect(Collectors.toList());
+
+        if (!sysWechatCustomers.isEmpty()) {
+            throw new SystemException("值班客服不存在");
+        }
+
+        sysWechatCustomerDutyRules.getDutyCustomerDTOS().forEach(sysWechatCustomer -> {
+            Optional.ofNullable(sysWechatCustomer.getDutyDateTimeList())
+                    .ifPresent(sysWechatCustomerDutyRulesList -> {
+                        sysWechatCustomerDutyRulesList.forEach(sysWechatCustomerDutyRule -> {
+                            if (DateTimeUtil.timeComparison(sysWechatCustomerDutyRule.getStartTime(), sysWechatCustomerDutyRule.getEndTime())) {
+                                throw new SystemException("结束时间必须晚于开始时间");
+                            }
                         });
+                    });
+        });
 
-        customer.setDutyCustomerId(dutyCustomer.getId());
-        updateById(customer);
-        // 清楚再删除
+        // 清除再删除
         sysWechatCustomerDutyService.clearCustomerDuty(String.valueOf(customer.getId()));
 
-        List<SysWechatCustomerDuty> collect = sysWechatCustomerDutyRules.getDutyDateTimeList()
+        List<SysWechatCustomerDuty> collect = sysWechatCustomerDutyRules.getDutyCustomerDTOS()
                 .stream()
-                .map(x -> new SysWechatCustomerDuty(customer.getId(), x))
+                .flatMap(dutyCustomerDTO -> {
+                    String dutyCustomerId = dutyCustomerDTO.getDutyCustomerId();
+                    return dutyCustomerDTO.getDutyDateTimeList().stream()
+                            .map(dutyDateTime -> new SysWechatCustomerDuty(customer.getId(), Long.parseLong(dutyCustomerId), dutyDateTime));
+
+                })
                 .collect(Collectors.toList());
+
         sysWechatCustomerDutyService.saveBatch(collect);
     }
 
     @Override
-    public void getCacheCustomerId(SysWechatCustomer sysWechatCustomer) {
-        String customerCache = redisTemplate.opsForValue().get("sys:wechat:customer");
+    public SysWechatCustomer getCacheCustomerId(SysWechatCustomer sysWechatCustomer) {
+        final String KEY = "sys:wechat:customer:";
+        String customerCache = redisTemplate.opsForValue().get(KEY);
         String s1 = Optional.ofNullable(customerCache)
                 .orElse("0");
         sysWechatCustomer = lambdaQuery()
@@ -115,12 +133,13 @@ public class SysWechatCustomerServiceImpl extends ServiceImpl<SysWechatCustomerM
                 .one();
 
         if (ObjectUtils.isEmpty(sysWechatCustomer)) {
-            sysWechatCustomer = lambdaQuery()
+             sysWechatCustomer = lambdaQuery()
                     .orderByAsc(SysWechatCustomer::getId)
                     .last("limit 1")
                     .one();
         }
-        redisTemplate.opsForValue().set("sys:wechat:customer", String.valueOf(sysWechatCustomer.getId()));
+        redisTemplate.opsForValue().set(KEY, String.valueOf(sysWechatCustomer.getId()));
+        return sysWechatCustomer;
     }
 }
 

+ 17 - 0
src/main/java/com/ydtech/modules/equity/components/EquityApiConfigurationProperties.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.equity.components;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "equity.api")
+public class EquityApiConfigurationProperties {
+
+    private String url;
+    private String appkey;
+    private String secret;
+    private String publicKey;
+    private String privateKey;
+}

+ 132 - 0
src/main/java/com/ydtech/modules/equity/components/EquityRequestApiComponents.java

@@ -0,0 +1,132 @@
+package com.ydtech.modules.equity.components;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.equity.model.request.*;
+import com.ydtech.modules.equity.model.response.BaseResponse;
+import com.ydtech.modules.equity.model.response.LocalEquityPackagePage;
+import com.ydtech.modules.equity.model.response.PageResultResponse;
+import com.ydtech.modules.equity.model.response.PointRatioDto;
+import com.ydtech.modules.equity.utils.SMCheckDataUtils;
+import com.ydtech.modules.order.utils.InsuranceLog;
+import com.ydtech.utils.HttpUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 权益包接口
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class EquityRequestApiComponents {
+
+    private final EquityApiConfigurationProperties properties;
+
+    public <T extends BaseRequest, B extends BaseResponse> B post(String url, @Nullable T requestBody, Class<B> responseType) {
+
+        String busReqString = JSON.toJSONString(requestBody, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
+
+        InsuranceLog.infoLog("权益包接口", "\n\t---------> URl: {} \n\t---------> 请求参数:{}", url, busReqString);
+        String privateKeyHex = properties.getPrivateKey();
+        String publicKeyHex = properties.getPublicKey();
+        String scret = properties.getSecret();
+        //加签
+        String signStr = SMCheckDataUtils.sm2SignStr(busReqString,privateKeyHex,publicKeyHex);
+        //加密
+        String dataStr = SMCheckDataUtils.sm4EncryptStr(busReqString,scret);
+
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+        Map requetBean = new HashMap();
+        requetBean.put("appKey",properties.getAppkey());
+        requetBean.put("data",dataStr);
+        requetBean.put("sign",signStr);
+        String content = JSON.toJSONString(requetBean);
+        InsuranceLog.infoLog("权益包接口", "\n\t---------> URl: {} \n\t---------> 请求参数: {}", url, content);
+        String postStr = HttpUtil.sendPost(url, content);
+        // 解密参数
+        String decryptStr = SMCheckDataUtils.sm4DecryptStr(postStr,scret);
+        B res = JSON.parseObject(decryptStr).toJavaObject(responseType);
+        if(!"200".equals(res.code)){
+            throw new SystemException(res.message);
+        }
+        System.out.println(res.getResult());
+        return res;
+    }
+
+    public <T extends BaseRequest, B extends BaseResponse> B request(String url, String apiType, T requestBody, Class<B> responseType) {
+        String apiUrl = url + apiType;
+        return this.post(apiUrl, requestBody, responseType);
+    }
+
+
+    /**
+     * 权益包分页列表
+     * @param threeRightsInfoPageVo
+     * @return
+     */
+    public PageResultResponse equityPage(ThreeRightsInfoPageVo threeRightsInfoPageVo) {
+        PageResultResponse response = request(properties.getUrl(), "getPageRightInfoList",threeRightsInfoPageVo ,PageResultResponse.class);
+        if(Objects.nonNull(response.getResult())){
+            PageResultResponse res = JSON.parseObject(response.getResult()).toJavaObject(PageResultResponse.class);
+            return res;
+        }else{
+            return response;
+        }
+    }
+
+    /**
+     * 权益包下单
+     * @param threeUserOrderVo
+     * @return
+     */
+    public BaseResponse createOrder(ThreeUserOrderVo threeUserOrderVo) {
+        BaseResponse response = request(properties.getUrl(), "addThreeUserOrder"
+                ,threeUserOrderVo ,BaseResponse.class);
+        return response;
+    }
+
+    /**
+     * 权益包确认下单
+     * @param threeOrderVo
+     */
+    public BaseResponse confirmOrder(ThreeOrderVo threeOrderVo) {
+        BaseResponse response = request(properties.getUrl(), "updateThreeOrder"
+                ,threeOrderVo ,BaseResponse.class);
+        return response;
+    }
+
+    /**
+     * 获取积分兑换比例
+     * @param threePointVo
+     * @return
+     */
+    public PointRatioDto getPointRatio(ThreePointVo threePointVo) {
+        PointRatioDto response = request(properties.getUrl(), "getPointRatio"
+                ,threePointVo ,PointRatioDto.class);
+        PointRatioDto res = JSON.parseObject(response.getResult()).toJavaObject(PointRatioDto.class);
+        return res;
+    }
+
+    public List<LocalEquityPackagePage> equityList(ThreeUserOrderListVo threeUserOrderListVo) {
+        PageResultResponse response = request(properties.getUrl(), "getRightInfoList",threeUserOrderListVo ,PageResultResponse.class);
+        if(Objects.nonNull(response.getResult())){
+            List<LocalEquityPackagePage> packagePageList = JSON.parseArray(response.getResult()).toJavaList(LocalEquityPackagePage.class);
+            return packagePageList;
+        }else{
+            return null;
+        }
+    }
+}

+ 126 - 0
src/main/java/com/ydtech/modules/equity/controller/EquityController.java

@@ -0,0 +1,126 @@
+package com.ydtech.modules.equity.controller;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.ydtech.aop.request.RequestSingleParam;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageRequest;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.customer.entity.vo.ReturnMessageVo;
+import com.ydtech.modules.equity.model.InsAreaCompanyEquity;
+import com.ydtech.modules.equity.model.response.LocalEquityPackagePage;
+import com.ydtech.modules.equity.model.vo.AddEquityPageQueryVo;
+import com.ydtech.modules.equity.model.vo.EquityPageQueryVo;
+import com.ydtech.modules.equity.model.vo.EquitySaveVo;
+import com.ydtech.modules.equity.service.EquityService;
+import com.ydtech.modules.order.entity.BasePageResult;
+import io.swagger.annotations.Api;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "权益包功能", value = "权益包功能")
+@RequestMapping("/equity")
+@RestController
+@RequiredArgsConstructor
+public class EquityController  extends BaseController {
+
+    private final EquityService equityService;
+
+    /**
+     * 权益包分页列表
+     * @param pageQueryVo
+     * @return
+     */
+    @PostMapping("/equityList")
+    public HttpResult equityList(@Validated @RequestBody EquityPageQueryVo pageQueryVo) {
+        return HttpResult.ok(equityService.equityList(pageQueryVo));
+    }
+
+    /**
+     * 权益包分页列表
+     * @param pageQueryVo
+     * @return
+     */
+    @PostMapping("/equityInfo")
+    public HttpResult equityInfo(@Validated @RequestBody EquityPageQueryVo pageQueryVo) {
+        return HttpResult.ok(equityService.equityInfo(pageQueryVo));
+    }
+
+    /**
+     * 权益包分页列表
+     * @param companyId
+     * @return
+     */
+    @PostMapping("/queryEquityInfo")
+    public HttpResult queryEquityInfo(@RequestParam String companyId) {
+        return HttpResult.ok(equityService.queryEquityInfo(companyId));
+    }
+
+    /**
+     * 补录订单权益包分页列表
+     * @param pageQueryVo
+     * @return
+     */
+    @PostMapping("/addEquityInfo")
+    public HttpResult addEquityInfo(@Validated @RequestBody AddEquityPageQueryVo pageQueryVo) {
+        return HttpResult.ok(equityService.addEquityInfo(pageQueryVo));
+    }
+
+    /**
+     * 选择保存权益类型
+     * @return
+     */
+    @PostMapping("/saveEquityType")
+    public HttpResult saveEquityType(@RequestParam String companyId,@RequestParam Integer type) {
+        equityService.saveEquityType(companyId,type);
+        return HttpResult.ok();
+    }
+
+    /**
+     * 选择保存权益
+     * @param equitySaveVo
+     * @return
+     */
+    @PostMapping("/saveEquity")
+    public HttpResult saveEquity(@Validated @RequestBody EquitySaveVo equitySaveVo) {
+        equityService.saveEquity(equitySaveVo);
+        return HttpResult.ok();
+    }
+
+    /**
+     * 放弃选中权益
+     * @param companyId
+     * @return
+     */
+    @PostMapping("/delEquity")
+    public HttpResult delEquity(@RequestParam String companyId) {
+        equityService.delEquity(companyId);
+        return HttpResult.ok();
+    }
+
+    /**
+     * 权益包下单
+     * @param companyId
+     * @return
+     */
+    @PostMapping("/createEquityOrder")
+    public HttpResult createEquityOrder(@RequestParam String companyId) {
+        InsAreaCompanyEquity equity = equityService.createEquityOrder(companyId);
+        return HttpResult.ok(equity);
+    }
+
+    /**
+     * 权益包确认下单
+     * @param companyId
+     * @return
+     */
+    @PostMapping("/confirmEquityOrder")
+    public HttpResult confirmEquityOrder(@RequestParam String companyId) {
+        equityService.confirmEquityOrder(companyId);
+        return HttpResult.ok();
+    }
+
+
+}

+ 18 - 0
src/main/java/com/ydtech/modules/equity/dao/InsAreaCompanyEquityMapper.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.equity.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.equity.model.InsAreaCompanyEquity;
+
+/**
+* @author dongxin
+* @description 针对表【ins_area_company_equity(订单权益包下单表)】的数据库操作Mapper
+* @createDate 2025-05-07 18:24:28
+* @Entity generator.domain.InsAreaCompanyEquity
+*/
+public interface InsAreaCompanyEquityMapper extends BaseMapper<InsAreaCompanyEquity> {
+
+}
+
+
+
+

+ 103 - 0
src/main/java/com/ydtech/modules/equity/model/InsAreaCompanyEquity.java

@@ -0,0 +1,103 @@
+package com.ydtech.modules.equity.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.modules.equity.model.response.LocalEquityPackagePage;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 订单权益包下单表
+ * @TableName ins_area_company_equity
+ */
+@TableName(value = "ins_area_company_equity")
+@Data
+public class InsAreaCompanyEquity implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 订单号
+     */
+    @TableId(value = "sub_order_no")
+    private String subOrderNo;
+
+    /**
+     * 0.未下单1.已下单2.已确认
+     */
+    @TableField(value = "status")
+    private Integer status;
+
+    /**
+     * 权益包id
+     */
+    @TableField(value = "equity_id")
+    private String equityId;
+
+    /**
+     * 权益包名称
+     */
+    @TableField(value = "equity_name")
+    private String equityName;
+
+    /**
+     * 权益包明细json
+     */
+    @TableField(value = "equity_info")
+    private String equityInfo;
+
+    /**
+     * 接收人类型0.投保人 1.被保人 2.车主
+     */
+    @TableField(value = "receive_type")
+    private Integer receiveType;
+
+    /**
+     * 接收人名字
+     */
+    @TableField(value = "receive_name")
+    private String receiveName;
+
+    /**
+     * 接收人电话
+     */
+    @TableField(value = "receive_phone")
+    private String receivePhone;
+
+    /**
+     * 接收人身份证号
+     */
+    @TableField(value = "receive_identify")
+    private String receiveIdentify;
+
+    /**
+     * 返佣金额
+     */
+    @TableField(value = "order_money")
+    private BigDecimal orderMoney;
+
+    /**
+     * 兑换积分
+     */
+    @TableField(value = "point")
+    private BigDecimal point;
+
+    /**
+     * 权益类型0.现金权益 1.权益包
+     */
+    @TableField(value = "type")
+    private Integer type;
+
+    @TableField(exist = false)
+    private LocalEquityPackagePage equityInfoVo;
+
+
+}

+ 17 - 0
src/main/java/com/ydtech/modules/equity/model/request/BaseRequest.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.equity.model.request;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@NoArgsConstructor
+@Data
+public class BaseRequest implements Serializable {
+
+    private static final long serialVersionUID = 01744654061707132550211L;
+
+    private String appKey;
+    private String data;
+    private String sign;
+}

+ 23 - 0
src/main/java/com/ydtech/modules/equity/model/request/ThreeOrderVo.java

@@ -0,0 +1,23 @@
+package com.ydtech.modules.equity.model.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ThreeOrderVo extends BaseRequest {
+
+    @ApiModelProperty(value = "三方用戶Id")
+    @JsonProperty("threeUserId")
+    private String threeUserId;
+
+    @ApiModelProperty(value = "子订单Id")
+    @JsonProperty("orderId")
+    private String orderId;
+
+    public ThreeOrderVo(String appKey, String orderId) {
+        this.setAppKey(appKey);
+        this.setOrderId(orderId);
+    }
+
+}

+ 21 - 0
src/main/java/com/ydtech/modules/equity/model/request/ThreePointVo.java

@@ -0,0 +1,21 @@
+package com.ydtech.modules.equity.model.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/4/30 14:41
+ *  @Description:  积分比例
+ */
+@Data
+public class ThreePointVo extends BaseRequest {
+
+    @ApiModelProperty(value = "三方用户id")
+    @JsonProperty("threeUserId")
+    private String threeUserId;
+
+
+}

+ 54 - 0
src/main/java/com/ydtech/modules/equity/model/request/ThreeRightsInfoPageVo.java

@@ -0,0 +1,54 @@
+package com.ydtech.modules.equity.model.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.core.page.PageRequest;
+import com.ydtech.modules.equity.model.vo.AddEquityPageQueryVo;
+import com.ydtech.modules.equity.model.vo.EquityPageQueryVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/4/30 14:45
+ *  @Description: 三方权益券
+ */
+@NoArgsConstructor
+@Data
+public class ThreeRightsInfoPageVo extends BaseRequest{
+
+    @ApiModelProperty(value = "三方用戶Id")
+    @JsonProperty("threeUserId")
+    private String threeUserId;
+
+    @ApiModelProperty(value = "页码")
+    @JsonProperty("pageNo")
+    private Integer pageNo;
+
+    @ApiModelProperty(value = "页数")
+    @JsonProperty("pageSize")
+    private Integer pageSize;
+
+    // 新增字段
+    @ApiModelProperty(value = "返佣金额")
+    @JsonProperty("orderMoney")
+    private BigDecimal orderMoney;
+
+
+    public ThreeRightsInfoPageVo(EquityPageQueryVo pageRequest, String threeUserId, BigDecimal orderMoney) {
+        this.pageNo = pageRequest.getPageNum();
+        this.pageSize = pageRequest.getPageSize();
+        this.threeUserId = threeUserId;
+        this.orderMoney = orderMoney;
+    }
+
+    public ThreeRightsInfoPageVo(AddEquityPageQueryVo pageRequest, String threeUserId, BigDecimal orderMoney) {
+        this.pageNo = pageRequest.getPageNum();
+        this.pageSize = pageRequest.getPageSize();
+        this.threeUserId = threeUserId;
+        this.orderMoney = orderMoney;
+    }
+}

+ 36 - 0
src/main/java/com/ydtech/modules/equity/model/request/ThreeUserOrderListVo.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.equity.model.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.equity.model.vo.EquityPageQueryVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/4/30 14:41
+ *  @Description:  三方权益列表请求实体
+ */
+@NoArgsConstructor
+@Data
+public class ThreeUserOrderListVo extends BaseRequest {
+
+    @ApiModelProperty(value = "三方用戶Id")
+    @JsonProperty("threeUserId")
+    private String threeUserId;
+
+    // 新增字段
+    @ApiModelProperty(value = "返佣金额")
+    @JsonProperty("orderMoney")
+    private BigDecimal orderMoney;
+
+
+    public ThreeUserOrderListVo(String appKey,BigDecimal orderMoney){
+        this.threeUserId = appKey;
+        this.orderMoney = orderMoney;
+    }
+}

+ 231 - 0
src/main/java/com/ydtech/modules/equity/model/request/ThreeUserOrderVo.java

@@ -0,0 +1,231 @@
+package com.ydtech.modules.equity.model.request;
+
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.equity.model.InsAreaCompanyEquity;
+import com.ydtech.modules.equity.model.response.LocalEquityPackageAssociation;
+import com.ydtech.modules.equity.model.response.LocalEquityPackagePage;
+import com.ydtech.utils.StringUtils;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/4/30 14:41
+ *  @Description:  三方下单实体
+ */
+@Data
+public class ThreeUserOrderVo extends BaseRequest {
+
+
+    @ApiModelProperty(value = "子订单id")
+    @JsonProperty("orderId")
+    private String orderId;
+
+    @ApiModelProperty(value = "代客下单用户id")
+    @JsonProperty("orderUserId")
+    private String orderUserId;
+
+    @ApiModelProperty(value = "代客下单用户名称")
+    @JsonProperty("orderUserName")
+    private String orderUserName;
+
+    @ApiModelProperty(value = "代客下单类型 1.渠道 2.代理人 3.电销")
+    @JsonProperty("orderUserType")
+    private Integer orderUserType;
+
+    @ApiModelProperty(value = "代客下单手机号")
+    @JsonProperty("orderUserPhone")
+    private String orderUserPhone;
+
+    @ApiModelProperty(value = "代客下单身份证号")
+    @JsonProperty("orderUserIdcard")
+    private String orderUserIdcard;
+
+    @ApiModelProperty(value = "三方用户id")
+    @JsonProperty("threeUserId")
+    private String threeUserId;
+
+    @ApiModelProperty(value = "投保人姓名")
+    @JsonProperty("applyName")
+    private String applyName;
+
+    @ApiModelProperty(value = "投保人身份证号")
+    @JsonProperty("applyIdcard")
+    private String applyIdcard;
+
+    @ApiModelProperty(value = "投保人电话")
+    @JsonProperty("applyIdcard")
+    private String applyPhone;
+
+    @ApiModelProperty(value = "被保人姓名")
+    @JsonProperty("insureName")
+    private String insureName;
+
+    @ApiModelProperty(value = "被保人身份证号")
+    @JsonProperty("insureIdcard")
+    private String insureIdcard;
+
+    @ApiModelProperty(value = "被保人电话")
+    @JsonProperty("insurePhone")
+    private String insurePhone;
+
+    @ApiModelProperty(value = "车主姓名")
+    @JsonProperty("ownerName")
+    private String ownerName;
+
+    @ApiModelProperty(value = "车主身份证号")
+    @JsonProperty("ownerIdcard")
+    private String ownerIdcard;
+
+    @ApiModelProperty(value = "车主电话")
+    @JsonProperty("ownerPhone")
+    private String ownerPhone;
+
+    @ApiModelProperty(value = "返佣金额")
+    @JsonProperty("orderMoney")
+    private BigDecimal orderMoney;
+
+    @ApiModelProperty(value = "剩余金额(抵扣积分)")
+    @JsonProperty("surplusMoney")
+    private BigDecimal surplusMoney;
+
+    // 新增 字段
+    @ApiModelProperty(value = "人员类型(1.代理人 2. 投保人 3.被保人 4.车主)")
+    @JsonProperty("type")
+    private Integer type;
+
+    @ApiModelProperty(value = "权益卷列表")
+    @JsonProperty("rightsInfoVoList")
+    private List<ThreeRightsInfoVo>  rightsInfoVoList;
+    public ThreeUserOrderVo(String companyId, InsAreaCompanyEquity equity, String appkey, SysUser user) {
+        this.orderId = companyId;
+        this.threeUserId = appkey;
+        if(equity.getReceiveType().equals(0)){
+            this.applyName = equity.getReceiveName();
+            this.applyPhone = equity.getReceivePhone();
+            this.applyIdcard = equity.getReceiveIdentify();
+            this.type = 2;
+        }else if(equity.getReceiveType().equals(1)){
+            this.insureName = equity.getReceiveName();
+            this.insurePhone = equity.getReceivePhone();
+            this.insureIdcard = equity.getReceiveIdentify();
+            this.type = 3;
+        }else if(equity.getReceiveType().equals(2)){
+            this.ownerName = equity.getReceiveName();
+            this.ownerPhone = equity.getReceivePhone();
+            this.ownerIdcard = equity.getReceiveIdentify();
+            this.type = 4;
+        }
+        this.orderMoney = equity.getOrderMoney();
+        this.surplusMoney = equity.getPoint();
+        this.rightsInfoVoList = ThreeRightsInfoVo.coverList(equity.getEquityInfo());
+        if(StringUtils.isBlank(user.getDeptType())){
+            this.orderUserType = 0;
+        }else{
+            this.orderUserType = Integer.parseInt(user.getDeptType());
+        }
+
+        this.orderUserId = user.getId();
+        this.orderUserName = user.getName();
+        this.orderUserPhone = user.getMobile();
+        this.orderUserIdcard = user.getIdentity();
+    }
+
+    @Data
+    public static class ThreeRightsInfoVo {
+
+
+        @ApiModelProperty(value = "权益卷Id")
+        @JsonProperty("rightsInfoId")
+        private String rightsInfoId;
+
+        @ApiModelProperty(value = "权益卷套餐Id")
+        @JsonProperty("courseId")
+        private String  courseId;
+
+        @ApiModelProperty(value = "权益卷个数")
+        @JsonProperty("number")
+        private Integer number;
+
+
+        @ApiModelProperty(value = "类型(1.兑换券 2.折扣卷 3.抵现劵)")
+        @JsonProperty("type")
+        private String type;
+
+        @ApiModelProperty(value = "权益名称")
+        @JsonProperty("rightsName")
+        private String rightsName;
+
+        @ApiModelProperty(value = "分类")
+        @JsonProperty("classify")
+        private String classify;
+
+        @ApiModelProperty(value = "折扣值")
+        @JsonProperty("rebate")
+        private String rebate;
+
+        @ApiModelProperty(value = "抵现金额")
+        @JsonProperty("amount")
+        private java.math.BigDecimal amount;
+
+        @ApiModelProperty(value = "权益图片")
+        @JsonProperty("rightsPicture")
+        private String rightsPicture;
+
+        @ApiModelProperty(value = "市场售价")
+        @JsonProperty("marketPrice")
+        private BigDecimal marketPrice;
+
+        @ApiModelProperty(value = "协议价")
+        @JsonProperty("contractRate")
+        private BigDecimal contractRate;
+
+        @ApiModelProperty(value = "三方结算价格")
+        @JsonProperty("settlePrice")
+        private BigDecimal settlePrice;
+
+
+        @ApiModelProperty(value = "使用有限期类型(1.用户领取后生效2.三方用户赠送时间起3.固定时间段4.长期可用)")
+        @JsonProperty("useCondition")
+        private String useCondition;
+
+        @ApiModelProperty(value = "天数")
+        @JsonProperty("dayNum")
+        private Integer dayNum;
+
+        @ApiModelProperty(value = "开始时间")
+        @JsonProperty("startTime")
+        private Date startTime;
+
+        @ApiModelProperty(value = "结束时间")
+        @JsonProperty("endTime")
+        private Date endTime;
+
+
+
+        public static List<ThreeRightsInfoVo> coverList(String equityInfo) {
+            List<ThreeRightsInfoVo> infoVoList = new ArrayList<>();
+            LocalEquityPackagePage packagevo = JSON.parseObject(equityInfo, LocalEquityPackagePage.class);
+            List<LocalEquityPackageAssociation> localEquityPackageAssociationList = packagevo.getLocalEquityPackageAssociationList();
+
+            for (LocalEquityPackageAssociation localEquityPackageAssociation : localEquityPackageAssociationList) {
+                ThreeRightsInfoVo threeRightsInfoVo = new ThreeRightsInfoVo();
+                BeanUtils.copyProperties(localEquityPackageAssociation,threeRightsInfoVo);
+                threeRightsInfoVo.setRightsInfoId(localEquityPackageAssociation.getRightsId());
+                threeRightsInfoVo.setCourseId(localEquityPackageAssociation.getRightsPackageId());
+                infoVoList.add(threeRightsInfoVo);
+            }
+            return infoVoList;
+        }
+    }
+
+}

+ 24 - 0
src/main/java/com/ydtech/modules/equity/model/response/BaseResponse.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.equity.model.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.poi.ss.formula.functions.T;
+
+import java.io.Serializable;
+
+@NoArgsConstructor
+@Data
+public class BaseResponse implements Serializable {
+
+    private static final long serialVersionUID = 01222613534207241613320L;
+
+    @JsonProperty("code")
+    public String code;
+
+    @JsonProperty("message")
+    public String message;
+
+    @JsonProperty("result")
+    private String result;
+}

+ 164 - 0
src/main/java/com/ydtech/modules/equity/model/response/LocalEquityPackageAssociation.java

@@ -0,0 +1,164 @@
+package com.ydtech.modules.equity.model.response;
+
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Description: 权益套餐关联表
+ * @Author: jeecg-boot
+ * @Date:   2025-05-06
+ * @Version: V1.0
+ */
+@Data
+public class LocalEquityPackageAssociation implements Serializable {
+    private static final long serialVersionUID = 1L;
+    
+	/**
+	 * id
+	 */
+	@JsonProperty("id")
+	private String id;
+
+	/**
+	 * 权益id
+	 */
+	@JsonProperty("rightsId")
+	private String rightsId;
+
+	/**
+	 * 权益套餐id
+	 */
+	@JsonProperty("rightsPackageId")
+	private String rightsPackageId;
+
+	/**
+	 * 是否删除(0,:否 1:是)
+	 */
+	@JsonProperty("delFlag")
+	private Integer delFlag;
+
+	/**
+	 * 创建者
+	 */
+	@JsonProperty("createBy")
+	private String createBy;
+
+	/**
+	 * 创建时间
+	 */
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@JsonProperty("createTime")
+	private Date createTime;
+
+	/**
+	 * 修改者
+	 */
+	@JsonProperty("updateBy")
+	private String updateBy;
+
+	/**
+	 * 修改时间
+	 */
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@JsonProperty("updateTime")
+	private Date updateTime;
+
+	/**
+	 * 数量
+	 */
+	@JsonProperty("number")
+	private Integer number;
+
+	/**
+	 * 类型(1.兑换券 2.折扣卷 3.抵现劵)
+	 */
+	@JsonProperty("type")
+	private String type;
+
+	/**
+	 * 权益名称
+	 */
+	@JsonProperty("rightsName")
+	private String rightsName;
+
+	/**
+	 * 分类
+	 */
+	@JsonProperty("classify")
+	private String classify;
+
+	/**
+	 * 折扣值
+	 */
+	@JsonProperty("rebate")
+	private String rebate;
+
+
+	/**
+	 * 抵现金额
+	 */
+	@JsonProperty("amount")
+	private BigDecimal amount;
+
+	/**
+	 * 权益图片
+	 */
+	@JsonProperty("rightsPicture")
+	private String rightsPicture;
+
+	/**
+	 * 市场售价
+	 */
+	@JsonProperty("marketPrice")
+	private BigDecimal marketPrice;
+
+	/**
+	 * 协议价
+	 */
+	@JsonProperty("contractRate")
+	private BigDecimal contractRate;
+
+	/**
+	 * 三方结算价格
+	 */
+	@JsonProperty("settlePrice")
+	private BigDecimal settlePrice;
+
+
+	/**
+	 * 使用有限期类型(1.用户领取后生效2.三方用户赠送时间起3.固定时间段4.长期可用)
+	 */
+	@JsonProperty("useCondition")
+	private String useCondition;
+
+	/**
+	 * 天数
+	 */
+	@JsonProperty("dayNum")
+	private Integer dayNum;
+
+	/**
+	 * 开始时间
+	 */
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern="yyyy-MM-dd")
+	@JsonProperty("startTime")
+	private Date startTime;
+
+	/**
+	 * 结束时间
+	 */
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern="yyyy-MM-dd")
+	@JsonProperty("endTime")
+	private Date endTime;
+
+}

+ 127 - 0
src/main/java/com/ydtech/modules/equity/model/response/LocalEquityPackagePage.java

@@ -0,0 +1,127 @@
+package com.ydtech.modules.equity.model.response;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 权益套餐表
+ * @Author: jeecg-boot
+ * @Date:   2025-05-06
+ * @Version: V1.0
+ */
+@Data
+public class LocalEquityPackagePage{
+	
+	/**id*/
+	@JsonProperty("id")
+	private String id;
+
+	/**
+	 * 权益券套餐名称
+	 */
+	@JsonProperty("equityPackageName")
+	private String equityPackageName;
+
+	/**
+	 * 费用最大值
+	 */
+	@JsonProperty("costPriceMax")
+	private BigDecimal costPriceMax;
+
+	/**
+	 * 费用最小值
+	 */
+	@JsonProperty("costPriceMin")
+	private BigDecimal costPriceMin;
+
+	/**
+	 * 市场价
+	 */
+	@JsonProperty("marketPrice")
+	private BigDecimal marketPrice;
+
+	/**
+	 * 协议价
+	 */
+	@JsonProperty("agreementPrice")
+	private BigDecimal agreementPrice;
+
+	/**
+	 * 三方结算价
+	 */
+	@JsonProperty("threeSettlementPrice")
+	private BigDecimal threeSettlementPrice;
+
+	/**
+	 * 套餐总价
+	 */
+	@JsonProperty("totalPackagePrice")
+	private BigDecimal totalPackagePrice;
+
+	/**
+	 * 套餐售价
+	 */
+	@JsonProperty("packagePrice")
+	private BigDecimal packagePrice;
+
+	/**
+	 * 行业id
+	 */
+	@JsonProperty("industryId")
+	private String industryId;
+
+	/**
+	 * 是否删除(0,:否 1:是)
+	 */
+	@JsonProperty("delFlag")
+	private Integer delFlag;
+
+	/**
+	 * 创建者
+	 */
+	@JsonProperty("createBy")
+	private String createBy;
+
+	/**
+	 * 创建时间
+	 */
+  	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@JsonProperty("createTime")
+	private Date createTime;
+
+	/**
+	 * 修改者
+	 */
+	@JsonProperty("updateBy")
+	private String updateBy;
+
+	/**
+	 * 修改时间
+	 */
+  	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@JsonProperty("updateTime")
+	private Date updateTime;
+
+	/**
+	 * 是否上架(0 未上架  1  上架)
+	 */
+	@JsonProperty("status")
+	private String status;
+
+	/**
+	 * 权益套餐关联表
+	 */
+	@JsonProperty("localEquityPackageAssociationList")
+	private List<LocalEquityPackageAssociation> localEquityPackageAssociationList;
+	
+}

+ 25 - 0
src/main/java/com/ydtech/modules/equity/model/response/PageResultResponse.java

@@ -0,0 +1,25 @@
+package com.ydtech.modules.equity.model.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.equity.model.request.ThreeRightsInfoPageVo;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@NoArgsConstructor
+@Data
+public class PageResultResponse extends BaseResponse {
+
+    @JsonProperty("records")
+    public List<LocalEquityPackagePage> records;
+
+    @JsonProperty("total")
+    public int total;
+
+    @JsonProperty("pages")
+    public int pages;
+
+    @JsonProperty("size")
+    public int size;
+}

+ 31 - 0
src/main/java/com/ydtech/modules/equity/model/response/PointRatioDto.java

@@ -0,0 +1,31 @@
+package com.ydtech.modules.equity.model.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/5/8 15:27
+ *  @Description: 现金兑换积分比例
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "现金兑换积分比例")
+public class PointRatioDto extends BaseResponse{
+
+    @ApiModelProperty("分子")
+    @JsonProperty("numerator")
+    private String  numerator;
+
+    @ApiModelProperty("分母")
+    @JsonProperty("denominator")
+    private String  denominator;
+
+}

+ 23 - 0
src/main/java/com/ydtech/modules/equity/model/vo/AddEquityPageQueryVo.java

@@ -0,0 +1,23 @@
+package com.ydtech.modules.equity.model.vo;
+
+import com.ydtech.core.page.BasePageVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@ApiModel(description = "补录订单权益包列表查询VO")
+@Data
+public class AddEquityPageQueryVo extends BasePageVO {
+
+    @NotBlank(message = "费用id不能为空")
+    @ApiModelProperty(value = "费用id")
+    private String costsId;
+
+    @NotNull(message = "总优惠不能为空")
+    @ApiModelProperty(value = "总优惠")
+    private BigDecimal totalAmount;
+}

+ 53 - 0
src/main/java/com/ydtech/modules/equity/model/vo/EquityPackageVo.java

@@ -0,0 +1,53 @@
+package com.ydtech.modules.equity.model.vo;
+
+import com.ydtech.modules.equity.model.response.LocalEquityPackagePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@ApiModel(description = "权益包信息VO")
+@Data
+public class EquityPackageVo {
+
+
+    @ApiModelProperty(value = "权益包名称")
+    private String packageName;
+
+    @ApiModelProperty(value = "留点比例")
+    private String ldProportion;
+
+    @ApiModelProperty(value = "总费用")
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty(value = "代理人费用")
+    private BigDecimal dlrAmount;
+
+    @ApiModelProperty(value = "客户权益费用")
+    private BigDecimal khAmount;
+
+    @ApiModelProperty(value = "权益包价格")
+    private BigDecimal qybAmount;
+
+    @ApiModelProperty(value = "客户权益明细")
+    private List<EquityPackageInfoVo> infoVoList;
+
+    @Data
+    public static class EquityPackageInfoVo {
+
+        @ApiModelProperty(value = "权益名称")
+        private String equityName;
+
+        @ApiModelProperty(value = "数量")
+        private Integer number;
+
+        @ApiModelProperty(value = "市场价")
+        private BigDecimal marketPrice;
+
+        @ApiModelProperty(value = "权益价")
+        private BigDecimal agreementPrice;
+
+    }
+}

+ 40 - 0
src/main/java/com/ydtech/modules/equity/model/vo/EquityPageQueryVo.java

@@ -0,0 +1,40 @@
+package com.ydtech.modules.equity.model.vo;
+
+import com.ydtech.core.page.BasePageVO;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.equity.model.InsAreaCompanyEquity;
+import com.ydtech.modules.equity.model.response.LocalEquityPackagePage;
+import com.ydtech.modules.order.entity.vo.FeeOrderNewVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@ApiModel(description = "权益包列表查询VO")
+@Data
+public class EquityPageQueryVo extends BasePageVO {
+
+    @NotBlank(message = "订单号不能为空")
+    @ApiModelProperty(value = "订单id")
+    private String companyId;
+
+    private FeeOrderNewVo feeOrderNewVo;
+
+    private PageResult pageResult;
+
+    private BigDecimal pointProportion;
+
+    private BigDecimal amount;
+
+    private BigDecimal maxPackagePrice;
+
+    private LocalEquityPackagePage equityInfoVo;
+
+    private InsAreaCompanyEquity equity;
+
+
+
+}

+ 81 - 0
src/main/java/com/ydtech/modules/equity/model/vo/EquitySaveVo.java

@@ -0,0 +1,81 @@
+package com.ydtech.modules.equity.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.equity.model.response.LocalEquityPackagePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@ApiModel(description = "权益包新增VO")
+@Data
+public class EquitySaveVo {
+
+    @NotBlank(message = "订单号不能为空")
+    @ApiModelProperty(value = "订单id")
+    private String companyId;
+
+    @NotNull(message = "选中权益包不能为空")
+    @ApiModelProperty(value = "权益包列表")
+    private LocalEquityPackagePage equityInfo;
+
+    /**
+     * 接收人类型0.投保人 1.被保人 2.车主
+     */
+    @NotNull(message = "接收人类型不能为空")
+    @ApiModelProperty(value = "接收人类型0.投保人 1.被保人 2.车主")
+    private Integer receiveType;
+
+    /**
+     * 接收人名字
+     */
+    @NotBlank(message = "接收人名字不能为空")
+    @ApiModelProperty(value = "接收人名字")
+    private String receiveName;
+
+    /**
+     * 接收人电话
+     */
+    @NotBlank(message = "接收人电话不能为空")
+    @ApiModelProperty(value = "接收人电话")
+    private String receivePhone;
+
+    /**
+     * 接收人身份证号
+     */
+    @ApiModelProperty(value = "接收人身份证号")
+    @NotBlank(message = "接收人身份证号不能为空")
+    private String receiveIdentify;
+
+    /**
+     * 返佣金额
+     */
+    @NotNull(message = "返佣金额不能为空")
+    @ApiModelProperty(value = "返佣金额")
+    private BigDecimal orderMoney;
+
+    @NotNull(message = "兑换积分不能为空")
+    @ApiModelProperty(value = "兑换积分")
+    private BigDecimal point;
+
+    @ApiModelProperty(value = "代客下单用户id")
+    private String orderUserId;
+
+    @ApiModelProperty(value = "代客下单用户名称")
+    private String orderUserName;
+
+    @ApiModelProperty(value = "代客下单类型 1.渠道 2.代理人 3.电销")
+    private Integer orderUserType;
+
+    @ApiModelProperty(value = "代客下单手机号")
+    private String orderUserPhone;
+
+    @ApiModelProperty(value = "代客下单身份证号")
+    private String orderUserIdcard;
+
+
+}

+ 70 - 0
src/main/java/com/ydtech/modules/equity/service/EquityService.java

@@ -0,0 +1,70 @@
+package com.ydtech.modules.equity.service;
+
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.equity.model.InsAreaCompanyEquity;
+import com.ydtech.modules.equity.model.vo.AddEquityPageQueryVo;
+import com.ydtech.modules.equity.model.vo.EquityPageQueryVo;
+import com.ydtech.modules.equity.model.vo.EquitySaveVo;
+
+public interface EquityService {
+
+    /**
+     * 权益包分页列表
+     * @param pageQueryVo
+     * @return
+     */
+    EquityPageQueryVo equityInfo(EquityPageQueryVo pageQueryVo);
+
+    /**
+     * 补录订单权益包分页列表
+     * @param pageQueryVo
+     * @return
+     */
+    EquityPageQueryVo addEquityInfo(AddEquityPageQueryVo pageQueryVo);
+
+    /**
+     * 保存选中的权益包
+     * @param equitySaveVo
+     */
+    void saveEquity(EquitySaveVo equitySaveVo);
+
+    /**
+     * 权益包下单
+     *
+     * @param companyId
+     */
+    InsAreaCompanyEquity createEquityOrder(String companyId);
+
+    /**
+     * 权益包确认下单
+     * @param companyId
+     */
+    void confirmEquityOrder(String companyId);
+
+    /**
+     * 放弃选中权益
+     * @param companyId
+     */
+    void delEquity(String companyId);
+
+    /**
+     * 保存权益类型
+     * @param companyId
+     * @param type
+     */
+    void saveEquityType(String companyId, Integer type);
+
+    /**
+     * 获取权益金额
+     * @param pageQueryVo
+     * @return
+     */
+    EquityPageQueryVo equityList(EquityPageQueryVo pageQueryVo);
+
+    /**
+     * 通过订单id获取信息
+     * @param companyId
+     * @return
+     */
+    InsAreaCompanyEquity queryEquityInfo(String companyId);
+}

+ 13 - 0
src/main/java/com/ydtech/modules/equity/service/InsAreaCompanyEquityService.java

@@ -0,0 +1,13 @@
+package com.ydtech.modules.equity.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.equity.model.InsAreaCompanyEquity;
+
+/**
+* @author dongxin
+* @description 针对表【ins_area_company_equity(订单权益包下单表)】的数据库操作Service
+* @createDate 2025-05-07 18:24:28
+*/
+public interface InsAreaCompanyEquityService extends IService<InsAreaCompanyEquity> {
+
+}

+ 334 - 0
src/main/java/com/ydtech/modules/equity/service/impl/EquityServiceImpl.java

@@ -0,0 +1,334 @@
+package com.ydtech.modules.equity.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.equity.components.EquityApiConfigurationProperties;
+import com.ydtech.modules.equity.components.EquityRequestApiComponents;
+import com.ydtech.modules.equity.model.InsAreaCompanyEquity;
+import com.ydtech.modules.equity.model.request.*;
+import com.ydtech.modules.equity.model.response.LocalEquityPackagePage;
+import com.ydtech.modules.equity.model.response.PageResultResponse;
+import com.ydtech.modules.equity.model.response.PointRatioDto;
+import com.ydtech.modules.equity.model.vo.AddEquityPageQueryVo;
+import com.ydtech.modules.equity.model.vo.EquityPageQueryVo;
+import com.ydtech.modules.equity.model.vo.EquitySaveVo;
+import com.ydtech.modules.equity.service.EquityService;
+import com.ydtech.modules.equity.service.InsAreaCompanyEquityService;
+import com.ydtech.modules.order.constants.BusinessConstant;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.vo.FeeOrderNewVo;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsNewService;
+import com.ydtech.utils.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+@Service
+public class EquityServiceImpl implements EquityService {
+
+    @Autowired
+    private EquityRequestApiComponents equityRequestApiComponents;
+
+    @Autowired
+    private InsFeeOrderNewService insFeeOrderNewService;
+
+    @Autowired
+    private InsAreaCompanyService insAreaCompanyService;
+
+    @Autowired
+    private InsOrdersService insOrdersService;
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private PtlAgreementProductCostsNewService agreementProductCostsNewService;
+
+    @Autowired
+    private InsAreaCompanyEquityService insAreaCompanyEquityService;
+
+    @Autowired
+    private EquityApiConfigurationProperties properties;
+
+    @Override
+    public EquityPageQueryVo equityList(EquityPageQueryVo pageQueryVo) {
+        // 通过订单号获取优惠信息
+        InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
+                .eq(InsFeeOrderNew::getInsOrderNo, pageQueryVo.getCompanyId()));
+        // 获取费用信息
+        LambdaQueryWrapper<PtlAgreementProductCostsNew> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PtlAgreementProductCostsNew::getId, insFeeOrderNew.getCostsId());
+        PtlAgreementProductCostsNew agreementProductCostsNew = agreementProductCostsNewService.getOne(wrapper);
+        if(Objects.isNull(agreementProductCostsNew)){
+            throw new SystemException("费用信息异常!");
+        }
+        if(StringUtils.isBlank(agreementProductCostsNew.getLdProportion())){
+            throw new SystemException("先去设置代理人的留点比例!");
+        }
+
+        FeeOrderNewVo feeOrderNewVo = this.newConvertOrderFeeVoData(insFeeOrderNew,agreementProductCostsNew);
+        // 获取佣金
+        List<FeeOrderNewVo.ExportFee> feeList = feeOrderNewVo.getExportFee();
+        BigDecimal totalAmount = BigDecimal.valueOf(0);
+        for (FeeOrderNewVo.ExportFee fee : feeList) {
+            if(BusinessConstant.FEE_INSURANCE_TYPE_4.equals(fee.getInsuranceType())){
+                totalAmount = fee.getTotalAmount();
+            }
+        }
+        ThreeUserOrderListVo threeUserOrderListVo = new ThreeUserOrderListVo( properties.getAppkey(), totalAmount);
+        List<LocalEquityPackagePage> packagePageList = equityRequestApiComponents.equityList(threeUserOrderListVo);
+        Optional<LocalEquityPackagePage> oldestPackage = packagePageList.stream().max(Comparator.comparingDouble(p -> p.getTotalPackagePrice().doubleValue()));
+        pageQueryVo.setAmount(totalAmount);
+        oldestPackage.ifPresent(packages -> pageQueryVo.setMaxPackagePrice(packages.getTotalPackagePrice()));
+        return pageQueryVo;
+    }
+
+    @Override
+    public InsAreaCompanyEquity queryEquityInfo(String companyId) {
+        InsAreaCompanyEquity equity = insAreaCompanyEquityService.getById(companyId);
+        return equity;
+    }
+
+    @Override
+    public EquityPageQueryVo equityInfo(EquityPageQueryVo pageQueryVo) {
+
+        // 通过订单号获取优惠信息
+        InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
+                .eq(InsFeeOrderNew::getInsOrderNo, pageQueryVo.getCompanyId()));
+        // 获取费用信息
+        LambdaQueryWrapper<PtlAgreementProductCostsNew> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PtlAgreementProductCostsNew::getId, insFeeOrderNew.getCostsId());
+        PtlAgreementProductCostsNew agreementProductCostsNew = agreementProductCostsNewService.getOne(wrapper);
+        if(Objects.isNull(agreementProductCostsNew)){
+            throw new SystemException("费用信息异常!");
+        }
+        if(StringUtils.isBlank(agreementProductCostsNew.getLdProportion())){
+            throw new SystemException("先去设置代理人的留点比例!");
+        }
+
+        FeeOrderNewVo feeOrderNewVo = this.newConvertOrderFeeVoData(insFeeOrderNew,agreementProductCostsNew);
+        // 获取佣金
+        List<FeeOrderNewVo.ExportFee> feeList = feeOrderNewVo.getExportFee();
+        BigDecimal totalAmount = BigDecimal.valueOf(0);
+        for (FeeOrderNewVo.ExportFee fee : feeList) {
+            if(BusinessConstant.FEE_INSURANCE_TYPE_4.equals(fee.getInsuranceType())){
+                totalAmount = fee.getTotalAmount();
+            }
+        }
+        int pageNum = pageQueryVo.getPageNum();
+        int pageSize = pageQueryVo.getPageSize();
+        PageResult pageResult = new PageResult();
+        ThreeRightsInfoPageVo threeRightsInfoPageVo = new ThreeRightsInfoPageVo(pageQueryVo, properties.getAppkey(), totalAmount);
+        PageResultResponse response = equityRequestApiComponents.equityPage(threeRightsInfoPageVo);
+        pageResult.setPageNum(pageNum);
+        pageResult.setPageSize(pageSize);
+        pageResult.setTotalSize(response.total);
+        pageResult.setContent(response.getRecords());
+        pageQueryVo.setPageResult(pageResult);
+        pageQueryVo.setFeeOrderNewVo(feeOrderNewVo);
+        // 获取积分兑换比例(接口获取)
+        ThreePointVo threePointVo = new ThreePointVo();
+        threePointVo.setThreeUserId(properties.getAppkey());
+        PointRatioDto pointRatioDto = equityRequestApiComponents.getPointRatio(threePointVo);
+        pageQueryVo.setPointProportion(new BigDecimal(pointRatioDto.getDenominator()));
+
+        // 获取权益包
+        InsAreaCompanyEquity equity = insAreaCompanyEquityService.getById(pageQueryVo.getCompanyId());
+        if(Objects.nonNull(equity)){
+            String equityInfo = equity.getEquityInfo();
+            LocalEquityPackagePage packagevo = JSON.parseObject(equityInfo, LocalEquityPackagePage.class);
+            pageQueryVo.setEquityInfoVo(packagevo);
+            pageQueryVo.setEquity(equity);
+        }
+        return pageQueryVo;
+    }
+
+    @Override
+    public EquityPageQueryVo addEquityInfo(AddEquityPageQueryVo pageQueryVo) {
+        EquityPageQueryVo pageQueryDto = new EquityPageQueryVo();
+        // 获取费用信息
+        LambdaQueryWrapper<PtlAgreementProductCostsNew> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PtlAgreementProductCostsNew::getId, pageQueryVo.getCostsId());
+        PtlAgreementProductCostsNew agreementProductCostsNew = agreementProductCostsNewService.getOne(wrapper);
+        if(Objects.isNull(agreementProductCostsNew)){
+            throw new SystemException("费用信息异常!");
+        }
+        if(StringUtils.isBlank(agreementProductCostsNew.getLdProportion())){
+            throw new SystemException("先去设置代理人的留点比例!");
+        }
+        BigDecimal amount = pageQueryVo.getTotalAmount().subtract(pageQueryVo.getTotalAmount().multiply(new BigDecimal(agreementProductCostsNew.getLdProportion()).divide(new BigDecimal(100))));
+        int pageNum = pageQueryVo.getPageNum();
+        int pageSize = pageQueryVo.getPageSize();
+        PageResult pageResult = new PageResult();
+        ThreeRightsInfoPageVo threeRightsInfoPageVo = new ThreeRightsInfoPageVo(pageQueryVo, properties.getAppkey(), amount);
+        PageResultResponse response = equityRequestApiComponents.equityPage(threeRightsInfoPageVo);
+        pageResult.setPageNum(pageNum);
+        pageResult.setPageSize(pageSize);
+        pageResult.setTotalSize(response.total);
+        pageResult.setContent(response.getRecords());
+        pageQueryDto.setPageResult(pageResult);
+        // 获取积分兑换比例(接口获取)
+        ThreePointVo threePointVo = new ThreePointVo();
+        threePointVo.setThreeUserId(properties.getAppkey());
+        PointRatioDto pointRatioDto = equityRequestApiComponents.getPointRatio(threePointVo);
+        pageQueryDto.setPointProportion(new BigDecimal(pointRatioDto.getDenominator()));
+        pageQueryDto.setAmount(amount);
+        return pageQueryDto;
+    }
+
+    @Override
+    public void saveEquity(EquitySaveVo equitySaveVo) {
+
+        InsAreaCompanyEquity equity = insAreaCompanyEquityService.getById(equitySaveVo.getCompanyId());
+        if (Objects.isNull(equity)) {
+            equity = new InsAreaCompanyEquity();
+            equity.setType(1);
+        }
+        BeanUtils.copyProperties(equitySaveVo, equity);
+        equity.setSubOrderNo(equitySaveVo.getCompanyId());
+        equity.setStatus(0);
+        LocalEquityPackagePage packagevo = equitySaveVo.getEquityInfo();
+        equity.setEquityInfo(JSON.toJSONString(packagevo));
+        equity.setEquityId(packagevo.getId());
+        equity.setEquityName(packagevo.getEquityPackageName());
+        insAreaCompanyEquityService.saveOrUpdate(equity);
+    }
+
+    @Override
+    public InsAreaCompanyEquity createEquityOrder(String companyId) {
+        // 获取权益包
+        InsAreaCompanyEquity equity = insAreaCompanyEquityService.getById(companyId);
+        if(Objects.isNull(equity)){
+            throw new SystemException("客户权益未保存成功!");
+        }
+        InsAreaCompany insAreaCompany = insAreaCompanyService.getById(companyId);
+        InsOrders orders = insOrdersService.getById(insAreaCompany.getOrderno());
+        SysUser user = sysUserService.getByUserId(orders.getUserid());
+        if(Objects.isNull(equity)){return null;}
+        if(!equity.getStatus().equals(1)){
+            ThreeUserOrderVo threeUserOrderVo = new ThreeUserOrderVo(companyId, equity,properties.getAppkey(),user);
+            equityRequestApiComponents.createOrder(threeUserOrderVo);
+            equity.setStatus(1);
+            insAreaCompanyEquityService.updateById(equity);
+        }
+        return equity;
+    }
+
+    @Override
+    public void confirmEquityOrder(String companyId) {
+        // 获取权益包
+        InsAreaCompanyEquity equity = insAreaCompanyEquityService.getById(companyId);
+        if(Objects.isNull(equity) || !equity.getStatus().equals(1)){throw new SystemException("权益包订单异常");}
+        ThreeOrderVo threeOrderVo = new ThreeOrderVo(properties.getAppkey(), companyId);
+        equityRequestApiComponents.confirmOrder(threeOrderVo);
+        equity.setStatus(2);
+        insAreaCompanyEquityService.updateById(equity);
+    }
+
+    @Override
+    public void delEquity(String companyId) {
+        insAreaCompanyEquityService.removeById(companyId);
+    }
+
+    @Override
+    public void saveEquityType(String companyId, Integer type) {
+        InsAreaCompanyEquity equity = new InsAreaCompanyEquity();
+        equity.setSubOrderNo(companyId);
+        equity.setType(type);
+        insAreaCompanyEquityService.save(equity);
+    }
+
+
+    /**
+     * 计算费用
+     *
+     * @param insFeeOrderNew
+     * @param agreementProductCostsNew
+     * @return
+     */
+    private FeeOrderNewVo newConvertOrderFeeVoData(InsFeeOrderNew insFeeOrderNew, PtlAgreementProductCostsNew agreementProductCostsNew) {
+
+        FeeOrderNewVo feeOrderNewVo = new FeeOrderNewVo();
+        List<FeeOrderNewVo.ExportFee> exportFeeList = new ArrayList<>();
+        // 出口费用
+        // 交强
+        FeeOrderNewVo.ExportFee jqExportFee = this.assignExportFee(BusinessConstant.FEE_INSURANCE_TYPE_1,
+                insFeeOrderNew.getJqExportSuperviseCostsPremiums(), insFeeOrderNew.getJqExportOtherCostsPremiums(),
+                new BigDecimal(agreementProductCostsNew.getLdProportion())
+        );
+
+        //商业
+        FeeOrderNewVo.ExportFee syExportFee = this.assignExportFee(BusinessConstant.FEE_INSURANCE_TYPE_2,
+                insFeeOrderNew.getSyExportSuperviseCostsPremiums(), insFeeOrderNew.getSyExportOtherCostsPremiums(),
+                new BigDecimal(agreementProductCostsNew.getLdProportion())
+        );
+
+        //非车
+        FeeOrderNewVo.ExportFee noExportFee = this.assignExportFee(BusinessConstant.FEE_INSURANCE_TYPE_3,
+                insFeeOrderNew.getNoExportSuperviseCostsPremiums(), insFeeOrderNew.getNoExportOtherCostsPremiums(),
+                new BigDecimal(agreementProductCostsNew.getLdProportion()));
+
+        exportFeeList.add(jqExportFee);
+        exportFeeList.add(syExportFee);
+        exportFeeList.add(noExportFee);
+        //出口费用合计
+        FeeOrderNewVo.ExportFee exportFeeTotal = assignExportFeeTotal(exportFeeList);
+        exportFeeList.add(exportFeeTotal);
+
+        feeOrderNewVo.setExportFee(exportFeeList);
+        return feeOrderNewVo;
+
+    }
+
+    /**
+     * 费用合计
+     * @param exportFeeList
+     * @return
+     */
+    private FeeOrderNewVo.ExportFee assignExportFeeTotal(List<FeeOrderNewVo.ExportFee> exportFeeList) {
+        FeeOrderNewVo.ExportFee exportFee = new FeeOrderNewVo.ExportFee();
+        exportFee.setInsuranceType(BusinessConstant.FEE_INSURANCE_TYPE_4);
+        //总费用合计
+        BigDecimal totalAmount = exportFeeList.stream().map(FeeOrderNewVo.ExportFee::getTotalAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        exportFee.setTotalAmount(Optional.of(totalAmount).orElse(BigDecimal.ZERO));
+        return exportFee;
+    }
+
+    /**
+     * 费用计算
+     *
+     * @param title
+     * @param superviseCostsPremiums
+     * @param otherCostsPremiums
+     * @param ldProportion
+     * @return
+     */
+    public FeeOrderNewVo.ExportFee assignExportFee(String title,
+                                                   BigDecimal superviseCostsPremiums,
+                                                   BigDecimal otherCostsPremiums,
+                                                   BigDecimal ldProportion) {
+        FeeOrderNewVo.ExportFee exportFee = new FeeOrderNewVo.ExportFee();
+        exportFee.setInsuranceType(title);
+        //手续费
+        exportFee.setSuperviseCostsPremiums(superviseCostsPremiums);
+        //跟单费
+        exportFee.setOtherCostsPremiums(otherCostsPremiums);
+        //总费用
+        BigDecimal totalAmount = superviseCostsPremiums.add(otherCostsPremiums);
+        exportFee.setTotalAmount(totalAmount.subtract(totalAmount.multiply(ldProportion.divide(new BigDecimal(100)))));
+        return exportFee;
+    }
+}

+ 22 - 0
src/main/java/com/ydtech/modules/equity/service/impl/InsAreaCompanyEquityServiceImpl.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.equity.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.equity.dao.InsAreaCompanyEquityMapper;
+import com.ydtech.modules.equity.model.InsAreaCompanyEquity;
+import com.ydtech.modules.equity.service.InsAreaCompanyEquityService;
+import org.springframework.stereotype.Service;
+
+/**
+* @author dongxin
+* @description 针对表【ins_area_company_equity(订单权益包下单表)】的数据库操作Service实现
+* @createDate 2025-05-07 18:24:28
+*/
+@Service
+public class InsAreaCompanyEquityServiceImpl extends ServiceImpl<InsAreaCompanyEquityMapper, InsAreaCompanyEquity>
+    implements InsAreaCompanyEquityService {
+
+}
+
+
+
+

+ 92 - 0
src/main/java/com/ydtech/modules/equity/utils/SMCheckDataUtils.java

@@ -0,0 +1,92 @@
+package com.ydtech.modules.equity.utils;
+
+import cn.hutool.core.util.HexUtil;
+import cn.hutool.crypto.SmUtil;
+import cn.hutool.crypto.asymmetric.SM2;
+import cn.hutool.crypto.symmetric.SM4;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/2/25 10:05
+ *  @Description: 国密算法
+ */
+public class SMCheckDataUtils {
+    public static void main(String[] args) {
+        String privateKeyHex = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgL4JFOA+0iymPbYi9ek5kHJ+BBjkdJV6GERmWnW1pAuugCgYIKoEcz1UBgi2hRANCAASfzrZzeAfaZR5nCLLA28F1sRdhUfyaQMbE+QlK62trsGH9F77GyeF7vFu4fx/BnZaCQQYA2cyBbPLXM1gL9aZV";
+        String publicKeyHex = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEn862c3gH2mUeZwiywNvBdbEXYVH8mkDGxPkJSutra7Bh/Re+xsnhe7xbuH8fwZ2WgkEGANnMgWzy1zNYC/WmVQ==";
+        String scret = "7eb6c2063bb2d2ce3bdacebc6ecad8df";
+//        User user =new User("1","张三");
+//        String userStr = JSON.toJSONString(user);
+        //加签
+//        String signStr =  sm2SignStr(userStr,privateKeyHex,publicKeyHex);
+//        //加密
+//        String dataStr = sm4EncryptStr(userStr,scret);
+//        System.out.println("sm2签名: " + signStr);
+//        System.out.println("sm4加密: " + dataStr);
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/2/25 9:53
+     *  @scret  秘钥
+     *  @plainText   待解密的字符串
+     *  @Description:  sm4 解密
+     */
+    public static String sm4DecryptStr(String plainText,String scret){
+        SM4 sm4 = SmUtil.sm4(HexUtil.decodeHex(scret));
+        String decryptedText = sm4.decryptStr(plainText);
+        System.out.println("解密后的文本: " + decryptedText);
+        return decryptedText;
+    }
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/2/25 9:56
+     *   @scret 秘钥
+     *   @plainText 待加密的字符串
+     *  @Description:加密
+     */
+    public  static String sm4EncryptStr(String plainText,String scret){
+        SM4 sm4 = SmUtil.sm4(HexUtil.decodeHex(scret));
+        String encryptText = sm4.encryptHex(plainText);
+        System.out.println("加密后的文本: " + encryptText);
+        return encryptText;
+    }
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/2/25 9:53
+     *  @privateKeyHex  私钥
+     *  @publicKeyHex  公钥
+     *  @plainText   待加签的字符串
+     *  @Description:  sm2 加签
+     */
+    public static String sm2SignStr(String plainText,String privateKeyHex,String publicKeyHex){
+        SM2 sm2 =  SmUtil.sm2(privateKeyHex,publicKeyHex);
+        //加签
+        String signStr = sm2.signHex(HexUtil.encodeHexStr(plainText));
+        System.out.println("加签后的文本: " + signStr);
+        return signStr;
+    }
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/2/25 9:53
+     *  @privateKeyHex  私钥
+     *  @publicKeyHex  公钥
+     *  @plainText   待验签的字符串
+     *  @signature  签名
+     *  @Description:  sm2 加签
+     */
+    public static boolean sm2VerifyHexStr(String plainText, String signature, String privateKeyHex, String publicKeyHex){
+        SM2 sm2 =  SmUtil.sm2(privateKeyHex,publicKeyHex);
+        //验签
+        boolean flag = sm2.verifyHex(HexUtil.encodeHexStr(plainText), signature);
+        System.out.println("验证是否通过: " + flag);
+        return flag;
+    }
+}

+ 12 - 1
src/main/java/com/ydtech/modules/fee/dto/vo/RuleAttrMappingVo.java

@@ -1,10 +1,12 @@
 package com.ydtech.modules.fee.dto.vo;
 
 import com.ydtech.constants.enums.InsurKind;
+import com.ydtech.constants.enums.dict.ZmTransferType;
 import com.ydtech.constants.enums.dict.insurance.VehicleType;
 import com.ydtech.modules.ins.model.vo.CarInfoVo;
 import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
 import com.ydtech.modules.ins.model.vo.KindInfoVo;
+import com.ydtech.modules.ins.model.vo.QuoteRespVo;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.api.bohai.constants.VehicleUsage;
@@ -21,6 +23,7 @@ import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.regex.Pattern;
 
 /**
@@ -41,7 +44,7 @@ public class RuleAttrMappingVo {
         this.value = value;
     }
 
-    public static List<RuleAttrMappingVo> getRuleAttrMappingVoList(InsAreaCompany insAreaCompany, InsOrders insOrders,
+    public static List<RuleAttrMappingVo> getRuleAttrMappingVoList(QuoteRespVo quoteRespVo, InsAreaCompany insAreaCompany, InsOrders insOrders,
                                                                    List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList,
                                                                    PtlNewCarJudgeRules carJudgeRule) {
         List<RuleAttrMappingVo> ruleAttrMappingVoList = new ArrayList<>();
@@ -77,12 +80,20 @@ public class RuleAttrMappingVo {
         LocalDate registrationDate = LocalDate.parse(carInfo.getRegisterDate());
         LocalDate currentDate = LocalDate.now();
 
+        //特种车判断
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("SpecialVehicle", Objects.nonNull(carInfo.getImportFlag()) && carInfo.getImportFlag().equals("特种车类") ? "1" : "0"));
+
         //交强起保日期
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("JqStartTime", insAreaCompany.getJqStartDate()));
 
         //商业起保日期
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("SyStartTime", insAreaCompany.getSyStartDate()));
 
+        // 中煤不浮动原因
+        if(Objects.nonNull(quoteRespVo)) {
+            ruleAttrMappingVoList.add(new RuleAttrMappingVo("RateFloatFlag", ZmTransferType.getByCode(quoteRespVo.getRateFloatFlag())));
+        }
+
         boolean isNoLicenseFlag = false;
         if (carJudgeRule != null) {
             if (carJudgeRule.getUnitTypeCode().equals("天")) {

+ 2 - 1
src/main/java/com/ydtech/modules/fee/service/FeeRuleSchemeNewService.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.fee.service;
 
 import com.ydtech.modules.fee.dto.vo.ReCalcuLateProportion;
 import com.ydtech.modules.fee.dto.vo.RetailProportion;
+import com.ydtech.modules.ins.model.vo.QuoteRespVo;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.vo.ExternalOrderFeeVo;
@@ -56,7 +57,7 @@ public interface FeeRuleSchemeNewService {
      * @param insAreaCompany
      * @param insOrders
      */
-    void verificationCostFactor(InsAreaCompany insAreaCompany, InsOrders insOrders, StringBuilder logs);
+    void verificationCostFactor(QuoteRespVo quoteRespVo, InsAreaCompany insAreaCompany, InsOrders insOrders, StringBuilder logs);
 
     /**
      * 查找匹配承保规则的因子

+ 39 - 24
src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java

@@ -24,6 +24,7 @@ import com.ydtech.modules.fee.service.FeeRuleSchemeNewService;
 import com.ydtech.modules.fee.service.FeeRuleSchemeService;
 import com.ydtech.modules.fee.service.InsFeeOrderConfigService;
 import com.ydtech.modules.fee.service.InsFeeOrderNewHistoryService;
+import com.ydtech.modules.ins.model.vo.QuoteRespVo;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.api.dajia.constants.TypeVehicleMapping;
@@ -137,7 +138,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
      * 校验费用因子
      */
     @Override
-    public void verificationCostFactor(InsAreaCompany insAreaCompany, InsOrders insOrders, StringBuilder logs) {
+    public void verificationCostFactor(QuoteRespVo quoteRespVo, InsAreaCompany insAreaCompany, InsOrders insOrders, StringBuilder logs) {
 
         List<AgreementProductCosts> agreementProductCostsNoMatched =
                 ptlAgreementProductCostsNewService.costsGetList(insAreaCompany.getAgreementId(), insAreaCompany.getProductid());
@@ -157,7 +158,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
                     }
                 }
 
-                //使用性质 营业  非营业
+                //使用性质 营业 非营业
                 if(attr.getAttrCode().equals("NatureOfUse")){
                     String[] split = attr.getMin().split(",");
                     boolean isPipei = false;
@@ -195,7 +196,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
             //按优先级进行排序
             Collections.sort(agreementProductCosts, Comparator.comparingInt(AgreementProductCosts::getPriorityLevel));
             //遍历费用因子
-            String costsId = verificationCosts(agreementProductCosts, insAreaCompany, insOrders, logs);
+            String costsId = verificationCosts(agreementProductCosts, quoteRespVo, insAreaCompany, insOrders, logs);
             if (costsId != null) {
                 calcCosts(costsId, insAreaCompany);
                 log.debug("费用因子校验通过,子订单id:" + insAreaCompany.getId() + ",费用id:" + costsId);
@@ -2786,7 +2787,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
      * @param insOrders
      * @return
      */
-    private String verificationCosts(List<AgreementProductCosts> agreementProductCosts, InsAreaCompany insAreaCompany,
+    private String verificationCosts(List<AgreementProductCosts> agreementProductCosts, QuoteRespVo quoteRespVo, InsAreaCompany insAreaCompany,
                                      InsOrders insOrders, StringBuilder logs) {
         //匹配费用因子
         //获取所有费用属性
@@ -2794,7 +2795,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         //获取新旧车信息
         PtlNewCarJudgeRules carJudgeRule = getCarJudgeRule(insAreaCompany.getCompanyId());
         //获取所有费用属性关联
-        List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders,
+        List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(quoteRespVo, insAreaCompany, insOrders,
                 undwrtRulesAttrList, carJudgeRule);
 
         for (int i = 0; i < agreementProductCosts.size(); i++) {
@@ -2824,7 +2825,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         //获取所有承保规则属性
         List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
         //获取所有费用属性关联
-        List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders,
+        List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(null,insAreaCompany, insOrders,
                 undwrtRulesAttrList, getCarJudgeRule(insAreaCompany.getCompanyId()));
 
 
@@ -3087,14 +3088,13 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
 //            }
             return inputNumberEqual(ptlAgreementUndwrtRulesAttrLink, value);
         } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("input")) {
-            return inputTextEqual(ptlAgreementUndwrtRulesAttrLink, value);
-        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")) {
-
             //截取身份证号码
             if (ptlAgreementUndwrtRulesAttr.getAttrCode().equals("CarOwnersIDNumber") || ptlAgreementUndwrtRulesAttr.getAttrCode().equals("ApplicantIDNumber") ||
                     ptlAgreementUndwrtRulesAttr.getAttrCode().equals("InsuredIDNumber")) {
-                value = value.substring(0, ptlAgreementUndwrtRulesAttr.getMin().length());
+                value = value.substring(0, ptlAgreementUndwrtRulesAttrLink.getMin().length());
             }
+            return inputTextEqual(ptlAgreementUndwrtRulesAttrLink, value);
+        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")) {
 
             //截取车牌
             if (ptlAgreementUndwrtRulesAttr.getAttrCode().equals("LicenseNo")) {
@@ -3243,21 +3243,36 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
     private boolean inputTextEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value) {
         //将值进行分割
         String[] split = ptlAgreementUndwrtRulesAttrLink.getMin().split(",");
-        AtomicBoolean returnBool = new AtomicBoolean(true);
-        if (ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("NatureOfUse")) {
-            Arrays.stream(split).forEach(x -> {
-                if (!x.equals("") && value.equals(x)) {
-                    returnBool.set(false);
-                }
-            });
-        } else {
-            Arrays.stream(split).forEach(x -> {
-                if (!x.equals("") && value.contains(x)) {
-                    returnBool.set(false);
-                }
-            });
+        AtomicBoolean returnBool = new AtomicBoolean(false);
+
+        List<String> equalsMap = new ArrayList<>();
+        //字符型评分
+        equalsMap.add("CharacterBasedRating");
+        //交强字符型评分
+        equalsMap.add("JqCharacterBasedRating");
+        //商业字符型评分
+        equalsMap.add("SyCharacterBasedRating");
+
+
+
+        //equest 等于判断
+        if(equalsMap.contains(ptlAgreementUndwrtRulesAttrLink.getAttrCode())){
+            boolean b = Arrays.stream(split).anyMatch(value::equals);
+            returnBool.set(b);
+        }else if((ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("BrandandModel") || ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("CarOwnerName")
+                || ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("CarOwnersAddress") || ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("ApplicantAddress")
+                || ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("InsuredAddress"))
+                && ptlAgreementUndwrtRulesAttrLink.getOperator().equals("2")){
+            //处理品牌型号  不包含的情况
+            boolean anyMatch = Arrays.stream(split)
+                    .anyMatch(value::contains);
+            returnBool.set(!anyMatch);
+        }else {
+            boolean anyMatch = Arrays.stream(split)
+                    .anyMatch(value::contains);
+            returnBool.set(anyMatch);
         }
-        return returnBool.get();
+        return !returnBool.get();
     }
 
     /**

+ 81 - 6
src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java

@@ -63,6 +63,7 @@ import org.redisson.Redisson;
 import org.redisson.api.RLock;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -163,6 +164,9 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
     @Autowired
     private PartnerPartnerAccountMapper partnerPartnerAccountMapper;
 
+    @Autowired
+    private RedisTemplate redisTemplate;
+
     public InsFeeAuditServiceImpl(FncInsAreaCompanyMapper insAreaCompanyMapper, InsOrdersMapper insOrdersMapper,
                                   InsDeptFeeService insDeptFeeService, EsmUserReferrerService esmUserReferrerService,
                                   SysUserService sysUserService, InsCommissionService insCommissionService,
@@ -362,17 +366,88 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
                 }
                 sysChannelCostService.updateBatchById(costList);
             }
-            SysUser sysUser = sysUserService.getById(BaseController.getUserId());
-            if (1 == sysUser.getNewApp()){
-                newExtractFee(insAreaCompany);
-            }else {
-                extractFee(insAreaCompany);
+
+            //先把钱加到总账户,再修改抽层状态
+            List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                    .eq(SysPremiumDetails::getCompanyId, insAreaCompany.getId())
+                    .eq(SysPremiumDetails::getType, 2)
+                    .eq(SysPremiumDetails::getStatus, 0));
+
+            if (sysPremiumDetails.isEmpty()) {
+                //已承保记录保费数据
+                com.ydtech.modules.order.entity.InsAreaCompany insAreaCompany1 = new com.ydtech.modules.order.entity.InsAreaCompany();
+                BeanUtils.copyProperties(insAreaCompany, insAreaCompany1);
+                insOrdersService.saveFeeInfo(insAreaCompany1);
+                sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                        .eq(SysPremiumDetails::getCompanyId, insAreaCompany.getId())
+                        .eq(SysPremiumDetails::getType, 2)
+                        .eq(SysPremiumDetails::getStatus, 0));
             }
 
+            Map<String, List<SysPremiumDetails>> listMap = sysPremiumDetails.stream()
+                    .sorted(Comparator.comparing(SysPremiumDetails::getId))
+                    .collect(Collectors.groupingBy(SysPremiumDetails::getUserId));
+
+            for (String key : listMap.keySet()) {
+                List<SysPremiumDetails> sysPremiumDetails1 = listMap.get(key);
+
+                if (sysPremiumDetails1.size() > 1) {
+
+                    SysPremiumDetails sysPremiumDetails2 = sysPremiumDetails1.get(0);
+                    SysPartnerAccount sysPartnerAccount = sysPartnerAccountMapper.selectOne(new LambdaQueryWrapper<SysPartnerAccount>()
+                            .eq(SysPartnerAccount::getUserId, sysPremiumDetails2.getUserId()));
+
+                    BigDecimal extractFee = sysPremiumDetails1.stream()
+                            .map(SysPremiumDetails::getExtractFee)
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
+                    if (sysPartnerAccount == null) {
+                        SysPartnerAccount sysPartnerAccount1 = new SysPartnerAccount();
+
+                        sysPartnerAccount1.setCreateTime(new Date());
+                        sysPartnerAccount1.setSumPremium(sysPremiumDetails2.getSumpremium());
+                        sysPartnerAccount1.setExtractFee(extractFee);
+                        sysPartnerAccount1.setCashFee(extractFee);
+                        sysPartnerAccount1.setUserId(sysPremiumDetails2.getUserId());
+                        sysPartnerAccountMapper.insert(sysPartnerAccount1);
+                    } else {
+                        sysPartnerAccount.setSumPremium(sysPartnerAccount.getSumPremium()
+                                .add(sysPremiumDetails2.getSumpremium()));
+                        sysPartnerAccount.setExtractFee(sysPartnerAccount.getExtractFee().add(extractFee));
+                        sysPartnerAccount.setCashFee(sysPartnerAccount.getCashFee().add(extractFee));
+                        sysPartnerAccountMapper.updateById(sysPartnerAccount);
+                    }
+
+                } else {
+                    for (SysPremiumDetails sysPremiumDetail : sysPremiumDetails1) {
+                        SysPartnerAccount sysPartnerAccount = sysPartnerAccountMapper.selectOne(new LambdaQueryWrapper<SysPartnerAccount>()
+                                .eq(SysPartnerAccount::getUserId, sysPremiumDetail.getUserId()));
+                        if (sysPartnerAccount == null) {
+                            SysPartnerAccount sysPartnerAccount1 = new SysPartnerAccount();
+                            sysPartnerAccount1.setCreateTime(new Date());
+                            sysPartnerAccount1.setSumPremium(sysPremiumDetail.getSumpremium());
+                            sysPartnerAccount1.setExtractFee(sysPremiumDetail.getExtractFee());
+                            sysPartnerAccount1.setCashFee(sysPremiumDetail.getExtractFee());
+                            sysPartnerAccount1.setUserId(sysPremiumDetail.getUserId());
+                            sysPartnerAccountMapper.insert(sysPartnerAccount1);
+                        } else {
+                            sysPartnerAccount.setSumPremium(sysPartnerAccount.getSumPremium()
+                                    .add(sysPremiumDetail.getSumpremium()));
+                            sysPartnerAccount.setExtractFee(sysPartnerAccount.getExtractFee()
+                                    .add(sysPremiumDetail.getExtractFee()));
+                            sysPartnerAccount.setCashFee(sysPartnerAccount.getCashFee()
+                                    .add(sysPremiumDetail.getExtractFee()));
+                            sysPartnerAccountMapper.updateById(sysPartnerAccount);
+                        }
+                    }
+                }
+
+            }
             sysPremiumDetailsMapper.updateStatus(insAreaCompany.getId());
             if (isManagement(order.getUserid()) && sysSwitchConfigService.getBalanceExtractStatus()) {
                 dataServerService.sendLgDataServer(insOrderNo);
             }
+            // 审核完成之后 清空锁
+            redisTemplate.delete("FEE_AUDIT:"+insOrderNo);
         } catch (Exception e) {
             e.printStackTrace();
             throw new SystemException("当前业务繁忙,请稍后重试");
@@ -384,7 +459,6 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         }
     }
 
-
     public void extractFee(InsAreaCompany insAreaCompany) {
         //先把钱加到总账户,再修改抽层状态
         List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
@@ -491,6 +565,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
     }
 
 
+
     public boolean isManagement(String userId) {
         SysUser sysUser = SpringUtil.getBean(SysUserBankCardMapper.class).selectByIdPay(userId);
         if (ManagementSource.MS_02.getCode().equals(sysUser.getManagementSource())) {

+ 23 - 2
src/main/java/com/ydtech/modules/fnc/service/impl/InsPlyIncomeServiceImpl.java

@@ -538,9 +538,17 @@ public class InsPlyIncomeServiceImpl extends ServiceImpl<InsPlyIncomeMapper, Ins
         insPlyIncome.setNoNoTaxPremium(insFeeOrderNew.getNoNoTaxPremium());
         insPlyIncome.setUserId(insFeeOrderNew.getUserId());
         insPlyIncome.setJqStartDate(StringOperations.emptyStringToNull(insAreaCompany.getJqStartDate()));
-        insPlyIncome.setJqEndDate(StringOperations.emptyStringToNull(insAreaCompany.getJqEndDate()));
+        insPlyIncome.setJqEndDate(
+                StringOperations.emptyStringToNull(
+                        fixDateTime(insAreaCompany.getJqEndDate())
+                )
+        );
         insPlyIncome.setSyStartDate(StringOperations.emptyStringToNull(insAreaCompany.getSyStartDate()));
-        insPlyIncome.setSyEndDate(StringOperations.emptyStringToNull(insAreaCompany.getSyEndDate()));
+        insPlyIncome.setSyEndDate(
+                StringOperations.emptyStringToNull(
+                        fixDateTime(insAreaCompany.getSyEndDate())
+                )
+        );
         insPlyIncome.setLeaderId(leaderId);
         insPlyIncome.setLeaderName(leaderName);
         this.getDeptId(insPlyIncome);
@@ -560,6 +568,19 @@ public class InsPlyIncomeServiceImpl extends ServiceImpl<InsPlyIncomeMapper, Ins
 
     }
 
+    public static String fixDateTime(String dateTimeStr) {
+        if (dateTimeStr == null || !dateTimeStr.endsWith("24:00:00")) {
+            return dateTimeStr;
+        }
+        try {
+            String[] parts = dateTimeStr.split(" ");
+            LocalDate date = LocalDate.parse(parts[0]);
+            return date.plusDays(1).toString() + " 00:00:00";
+        } catch (Exception e) {
+            return dateTimeStr; // 异常就原样返回
+        }
+    }
+
     private void getDeptId(InsPlyIncome insPlyIncome) {
         PtlAgreement ptlAgreement = ptlAgreementService.getById(insPlyIncome.getAgreementId());
         String deptId = ptlAgreement.getDeptId();

+ 3 - 0
src/main/java/com/ydtech/modules/ins/model/vo/CarInfoVo.java

@@ -79,6 +79,9 @@ public class CarInfoVo {
     @ApiModelProperty(value = "车辆类型(轿车类,特种车类)")
     private String vehicleclass;
 
+    @ApiModelProperty(value = "车辆类型(轿车类,特种车类)")
+    private String importFlag;
+
 //    @NotNull(message = "车架号不能为空")
     @ApiModelProperty(value = "车架号")
     private String vinNo;

+ 6 - 0
src/main/java/com/ydtech/modules/ins/model/vo/QuoteRespVo.java

@@ -71,6 +71,9 @@ public class QuoteRespVo {
     @ApiModelProperty("订单号")
     private String orderno;
 
+    @ApiModelProperty("订单状态")
+    private String orderstatus;
+
     @ApiModelProperty("是否真单交")
     private String iszdj;
 
@@ -217,6 +220,9 @@ public class QuoteRespVo {
     @TableField(value = "syappoint")
     private String syappoint;
 
+    @ApiModelProperty("中煤浮动")
+    private String rateFloatFlag;
+
     @ApiModelProperty("报价记录")
     private List<SysQuoteRecord> quoteRecords;
 

+ 1 - 1
src/main/java/com/ydtech/modules/lg/PushLgLogUtils.java

@@ -68,7 +68,7 @@ public class PushLgLogUtils {
             return;
         }
         PushLgDataServer lgDataServer = new PushLgDataServer();
-        lgDataServer.setOrderNo(accountingUser.getOrderno());
+        lgDataServer.setOrderNo(accountingUser.getId());
         lgDataServer.setUserName(String.valueOf(accountingUser.getInsureinfo().get("name")));
         lgDataServer.setUserCarNum(String.valueOf(accountingUser.getCarinfo().get("licenseNo")));
         lgDataServer.setUserPhone(String.valueOf(accountingUser.getInsureinfo().get("mobile")));

+ 8 - 2
src/main/java/com/ydtech/modules/order/aop/aspect/QuoteVerificationAspect.java

@@ -132,7 +132,7 @@ public class QuoteVerificationAspect {
             StringBuilder logs = new StringBuilder();
             //再进行费用因子判断
             try {
-                feeRuleSchemeNewService.verificationCostFactor(insAreaCompany, insOrders, logs);
+                feeRuleSchemeNewService.verificationCostFactor(result.getData(), insAreaCompany, insOrders, logs);
                 InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getInsFeeOrderNewByCompanyId(insAreaCompany.getId());
                 if (insFeeOrderNew != null) {
                     //出口
@@ -247,7 +247,13 @@ public class QuoteVerificationAspect {
                 //add by hxl  2024-06-12  改为从主订单表中获取数据用户id和部门id
                 SysUser user = sysUserService.getById(quoteInfo.getUserid());
                 String userId = quoteInfo.getUserid();
+                List<String> deptList = new ArrayList<>();
                 String deptId = user.getDeptId();
+                deptList.add(deptId);
+                // 判断 登录用户是否与报价用户一致  如果不一致则认为是代课录单
+                if (!userId.equals(BaseController.getUserId())) {
+                    deptList.add(BaseController.getDeptId());
+                }
                 List<KindInfoVo> kinds = Objects.isNull(quoteInfo.getKindList()) ? new ArrayList<>() : quoteInfo.getKindList();
                 List<RiskInfoVo> risks = quoteInfo.getRiskList();
 
@@ -309,7 +315,7 @@ public class QuoteVerificationAspect {
                     }
                 }
                 agreementId = ((BaseQuoteVo<?>) arg).getAgreementId();
-                ptlAgreementDeptService.agreementIsAuthorized(deptId, agreementId);
+                ptlAgreementDeptService.agreementIsAuthorized(deptList, agreementId);
 
             }
         }

+ 1 - 0
src/main/java/com/ydtech/modules/order/components/dajia/DaJiaRequestApiComponents.java

@@ -65,6 +65,7 @@ public class DaJiaRequestApiComponents {
 
         InsuranceLog.infoLog(InsuranceEnum.DJPC.getPinyin(), "\n\t---------> URl: {} \n---------> 保险公司:{} {}\n---------> 请求参数:{}", url, InsuranceEnum.DJPC.getName(), tradeCode.getDesc(), JSONObject.toJSONString(q));
         String encrypt = AESEncrypt.encrypt(JSON.toJSONString(q), encryptKey);
+        System.out.println(encrypt);
         HttpEntity<String> httpEntity = new HttpEntity<>(encrypt, httpHeaders);
         ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST,  httpEntity, String.class);
         String body = response.getBody();

+ 2 - 2
src/main/java/com/ydtech/modules/order/components/yangguang/YangGuangEncryption.java

@@ -345,10 +345,10 @@ public class YangGuangEncryption {
             return authcode(source, key, Decode, 0);
         }
 
-    public String encryptRequestBody(Object request, String key) {
+    public String encryptRequestBody(Object request, String key,String url) {
         try {
             String s = JSON.toJSONString(request);
-            InsuranceLog.infoLog(InsuranceEnum.YGBX.getPinyin(), "\n\t---------> URl: {} \n---------> 请求参数:{}", "", s);
+            InsuranceLog.infoLog(InsuranceEnum.YGBX.getPinyin(), "\n\t---------> URl: {} \n---------> 请求参数:{}",url,s);
 
             return authcodeEncode(s, key);
         } catch (Exception e) {

+ 1 - 1
src/main/java/com/ydtech/modules/order/components/yangguang/YangGuangRequestApiComponents.java

@@ -70,7 +70,7 @@ public class YangGuangRequestApiComponents {
         // 发送请求
         String url = yangGuangApiConfigurationProperties.getUrl();
         String encryptRequestBody = yangGuangEncryption.encryptRequestBody
-                (q, yangGuangApiConfigurationProperties.getKey());
+                (q, yangGuangApiConfigurationProperties.getKey(),url);
         //设置请求头类型
         HttpHeaders headers = new HttpHeaders();
         HttpEntity<String> entity = new HttpEntity<>(encryptRequestBody, headers);

+ 6 - 0
src/main/java/com/ydtech/modules/order/constants/InsuranceTypeCorrespondence.java

@@ -57,6 +57,12 @@ public class InsuranceTypeCorrespondence {
     //司机
     protected static final String[] DRIVER = {"D3", "SY_FJ_YBW3"};
 
+    // 诚泰乘客
+    protected static final String[] CT_PASSENGER = {"D12", "YD12"};
+
+    // 诚泰司机
+    protected static final String[] CT_DRIVER = {"D11", "YD11"};
+
     // 绝对免赔
     protected static final String[] ABSOLUTE_DEDUCTIBLE = {"MJ1", "MJ2", "MJ3", "MJ4"};
 

+ 11 - 2
src/main/java/com/ydtech/modules/order/controller/ExternalOrderController.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.order.controller;
 
+import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.constants.enums.InsuranceRisk;
@@ -78,7 +79,7 @@ public class ExternalOrderController {
     @ApiOperation("保存子订单")
     public HttpResult<QuoteRespVo> saveSubOrder(@RequestBody BaseQuoteVo<AccidentalDrivingVo> quoteVo) {
         BaseQuoteInfoVo quoteInfo = this.insOrdersComponents.getQuoteInfo(quoteVo.getOrderNo(), quoteVo.getAgreementId(),quoteVo.getKinds());
-        boolean result = this.insAreaCompanyService.saveSubOrder(quoteInfo, quoteVo);
+        String companyId = this.insAreaCompanyService.saveSubOrder(quoteInfo, quoteVo);
         String successMsg="";
         String errorMsg ="";
         if(quoteVo.getStageFlag()==1){
@@ -88,7 +89,15 @@ public class ExternalOrderController {
             successMsg="暂存订单成功";
             errorMsg="暂存订单失败";
         }
-        return result  ? HttpResult.ok(successMsg) : HttpResult.error(errorMsg);
+        if(StringUtils.isNotBlank(companyId)){
+            HttpResult httpResult = new HttpResult();
+            httpResult.setData(companyId);
+            httpResult.setMsg(successMsg);
+            httpResult.setCode(200);
+            return httpResult;
+        }else{
+            return HttpResult.error(errorMsg);
+        }
     }
     @PostMapping("/updateExternalOrder")
     @ApiOperation("更新外部订单")

+ 26 - 0
src/main/java/com/ydtech/modules/order/controller/InsCrawlerOrderController.java

@@ -14,6 +14,8 @@ import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.QuoteAccidentalDrivingVo;
 import com.ydtech.modules.order.service.InsCrawlerOrderService;
 import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementSaveVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -94,6 +96,18 @@ public class InsCrawlerOrderController extends BaseController {
         return HttpResult.ok("发送成功!");
     }
 
+    /**
+     * 泰山发送验证码
+     * @param attributionDto
+     * @return
+     */
+    @PostMapping(value = "/sendTscode")
+    @ApiOperation(value = "泰山发送验证码")
+    public HttpResult sendTscode(@RequestBody PtlAgreementAttributionDto attributionDto) {
+        insuranceCrawlerOrderService.sendcode(attributionDto);
+        return HttpResult.ok("发送成功!");
+    }
+
     /**
      * 泰山登录
      * @param agreementId
@@ -107,6 +121,18 @@ public class InsCrawlerOrderController extends BaseController {
         return HttpResult.ok("登录成功!");
     }
 
+    /**
+     * 泰山登录
+     * @param agreement
+     * @return
+     */
+    @PostMapping(value = "/loginTs")
+    @ApiOperation(value = "泰山登录")
+    public HttpResult loginTs(@RequestBody PtlAgreementSaveVo agreement) {
+        insuranceCrawlerOrderService.taishanLogin(agreement);
+        return HttpResult.ok("登录成功!");
+    }
+
 
 
 }

+ 66 - 0
src/main/java/com/ydtech/modules/order/controller/QuoteController.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.order.controller;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.ydtech.aop.request.RequestSingleParam;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
@@ -275,9 +276,11 @@ public class QuoteController extends BaseController {
 //            quoteVo1.setAccidentalDrivingVo(javaObject);
 //            return pingAnOrderApiService.quote(quoteInfo, quoteVo1);
         }
+
         PtlAgreementAttribution byId = ptlAgreementAttributionService.getById(quoteVo.getAgreementId());
         if( respVo != null && !ObjectUtils.isEmpty( respVo.getData() )){
             respVo.getData().setApiType(byId.getApiType());
+            respVo.getData().setOrderstatus("0");
         }
         return respVo;
     }
@@ -338,4 +341,67 @@ public class QuoteController extends BaseController {
 
         return httpResult;
     }
+
+
+    @PostMapping(value = "batchOrderStatus")
+    public HttpResult batchOrderStatus(@RequestSingleParam("orderNos") List<String> orderNos) throws Exception {
+        List<InsAreaCompany> list = insAreaCompanyService.list(new LambdaQueryWrapper<InsAreaCompany>()
+                .in(InsAreaCompany::getId, orderNos));
+        list.forEach(item -> {
+            //如果是爬虫的 先调用爬虫的查询订单状态
+            if (Objects.isNull(item.getApiType()) || item.getApiType() == 2) {
+                try {
+                    insCrawlerOrderService.verifyPayment(item.getId());
+                }catch (Exception e){
+
+                }
+            }
+            if (item.getCompanyId().equals("AICS1000000") && item.getApiType() == 1) {
+                try {
+                    yongchengOrderApiService.callbackAnOrder(item.getId());
+                }catch (Exception e){
+
+                }
+            } else if (item.getCompanyId().equals("ZMBX1000000") && item.getApiType() == 1) {
+                try {
+                    zhongMeiOrderApiService.paymentEnquiry(item.getId());
+                }catch (Exception e){}
+            } else if (item.getCompanyId().equals("ZKIC1000000")) {
+                try {
+                    zijinOrderApiService.auditStatusQuery(item.getId());
+                }catch (Exception e){}
+            } else if (item.getCompanyId().equals("XDCX1000000")) {
+                try {
+                    guorenOrderApiService.pay(item.getId());
+                }catch (Exception e){}
+            } else if (item.getCompanyId().equals("YGBX1000000")) {
+                try {
+                    yangGuangOrderApiService.paymentCallback(item.getId());
+                } catch (JsonProcessingException e) {
+                    throw new RuntimeException(e);
+                }
+            } else if (item.getCompanyId().equals("HTIC1000000")) {
+                try {
+                    huaTaiOrderApiService.paymentEnquiry(item.getId());
+                }catch (Exception e){}
+            } else if (item.getCompanyId().equals("DJPC1000000")) {
+                try {
+                    daJiaOrderService.verifyPayment(item.getId());
+                }catch (Exception e){}
+            } else if (item.getCompanyId().equals("CHAC1000000")) {
+                try {
+                    chengTaiOrderApiService.getPayUrl(item.getId());
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            } else if (item.getCompanyId().equals("BPIC1000000")) {
+                try {
+                    boHaiOrderApiService.auditStatusQuery(item.getId());
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        });
+        return HttpResult.ok("查询成功");
+    }
 }

+ 3 - 2
src/main/java/com/ydtech/modules/order/controller/YongChengOrderApiController.java

@@ -63,8 +63,8 @@ public class YongChengOrderApiController {
     @ApiOperation(value = "永诚API方式 - 影像上传")
     @PostMapping(value = "/uploadImage")
     public HttpResult uploadImageApi(@RequestSingleParam(value = "companyId") String companyId) {
-        return yongchengOrderApiService.uploadImageApi(companyId);
-//        return HttpResult.ok("ok");
+//        return yongchengOrderApiService.uploadImageApi(companyId);
+        return HttpResult.ok("ok");
     }
 
     @ApiOperation(value = "永诚API方式 -电子保单")
@@ -115,6 +115,7 @@ public class YongChengOrderApiController {
 
         lqw.eq(InsAreaCompany::getOrderstatus, InsOrderStatusEnum.WAIT_PAY.getCode());
         lqw.gt(InsAreaCompany::getAudittime, LocalDate.now());
+        lqw.eq(InsAreaCompany::getId,suborderId);
         List<InsAreaCompany> list = insAreaCompanyService.list(lqw);
 
         list.forEach(yongchengOrderApiService::getPayUrlApi);

+ 2 - 0
src/main/java/com/ydtech/modules/order/dao/InsTaskImagesMapper.java

@@ -18,6 +18,8 @@ public interface InsTaskImagesMapper extends BaseMapper<InsTaskImages> {
 
     List<InsTaskImagesDto> getByQuoteNoInsTaskImagesDtoList(String quoteNo);
 
+    List<InsUploadImagesDto> getByQuoteNoToBase64List(String quoteNo);
+
     List<InsUploadImagesDto> getByOrderNoInsUploadImagesDtoList(String orderNo);
     /**
      *  @version

+ 1 - 1
src/main/java/com/ydtech/modules/order/dao/SysQuoteRecordMapper.java

@@ -26,5 +26,5 @@ public interface SysQuoteRecordMapper extends BaseMapper<SysQuoteRecord> {
 
     public Page<QuoteDetailsVo> getQuoteDetails(Page page, @Param("param") QuoteDetailsQueryVo quoteDetailsQueryVo);
 
-    public BigDecimal getQuoteRatio(@Param("userId") String userId, @Param("companyId") String companyId);
+    public BigDecimal getQuoteRatio(@Param("userId") String userId, @Param("companyId") String companyId, String startTime,String endTime);
 }

+ 6 - 0
src/main/java/com/ydtech/modules/order/entity/InsOrders.java

@@ -382,6 +382,12 @@ public class InsOrders implements Serializable {
     @ApiModelProperty("更新时间")
     @TableField(exist = false)
     private String updateStatusTime;
+
+    @ApiModelProperty("权益类型 0.现金券 1.权益包")
+    @TableField(exist = false)
+    private Integer type;
+
+
     public InsOrders(SysUser user, SysDept dept, BaseQuoteInfoVo quoteInfoVo) {
         // 2. 组装订单
         this.setQuoteno(String.valueOf(quoteInfoVo.getQuoteno()));

+ 44 - 19
src/main/java/com/ydtech/modules/order/entity/api/yangguang/request/YangGuangAccuracyCalculateRequest.java

@@ -28,6 +28,8 @@ import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 @EqualsAndHashCode(callSuper = true)
@@ -225,7 +227,7 @@ public class YangGuangAccuracyCalculateRequest extends YangGuangBaseRequest{
                                              YangGuangQueryVehicleModelResponse.carmodellist carmodellist,
                                              RiskInfoVo riskInfoVo, String startDate,
                                              YangGuangConfigureParameters ygConfigureParameters,
-                                             BaseQuoteVo<List<YgQuoteAccidentVo>> quoteVo,boolean isRepeat) {
+                                             BaseQuoteVo<List<YgQuoteAccidentVo>> quoteVo,boolean isRepeat,String remarkCi,String remarkBi) {
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         this.RequestNo = "accuracyCalculate";
         this.UnderWritingRate = quoteVo.getCoefficient();
@@ -236,31 +238,54 @@ public class YangGuangAccuracyCalculateRequest extends YangGuangBaseRequest{
         this.Modelinfoid = carmodellist.getModelinfoid();
         List<RiskInfoVo> riskList = quoteInfoVo.getRiskList();
         for (RiskInfoVo riskInfo : riskList) {
+            // 商业险起保终保计算
             if(InsuranceRisk.BUSINESS_CODE.equals(riskInfo.getRiskCode())) {
-                LocalDateTime biStartTime = LocalDateTime.parse(riskInfo.getStartDate(), formatter);
-                LocalDateTime biEndTime = biStartTime.plusYears(1).with(LocalTime.MIDNIGHT).minusSeconds(1);
+                LocalDateTime biStartTime;
+                LocalDateTime biEndTime;
+                if (riskInfo.getStartDate().endsWith("00:00")) {
+                    biStartTime = LocalDateTime.parse(riskInfo.getStartDate(), formatter);
+                    biEndTime = biStartTime.plusYears(1).minusSeconds(1);
+                } else {
+                    biStartTime = LocalDateTime.parse(riskInfo.getStartDate(), formatter);
+                    biEndTime = biStartTime.plusYears(1).minusDays(1).minusSeconds(1);
+                }
+                // 商业重复投保
+                if (remarkBi != null && !remarkBi.isEmpty()) {
+                    Pattern pattern = Pattern.compile("终保日期:(\\d{12})",Pattern.DOTALL);
+                    Matcher matcher = pattern.matcher(remarkBi);
+                    if (matcher.find()) {
+                        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmm");
+                        String endDateStr = matcher.group(1);
+                        biStartTime = LocalDateTime.parse(endDateStr, inputFormatter);
+                        biEndTime = endDateStr.endsWith("0000") ? biStartTime.plusYears(1).minusSeconds(1)
+                            : biStartTime.plusYears(1).minusDays(1).minusSeconds(1);
+                    }
+                }
                 this.BiStartDate = biStartTime.format(formatter);
                 this.BiEndDate = biEndTime.format(formatter);
-                // 重复投保
-                if (isRepeat) {
-                    LocalDateTime biStartTime1 = LocalDateTime.parse(startDate, formatter);
-                    LocalDateTime biEndTime1 = biStartTime.plusYears(1).with(LocalTime.MIDNIGHT).minusSeconds(1);
-                    this.BiStartDate = biStartTime1.format(formatter);
-                    this.BiEndDate = biEndTime1.format(formatter);
-                }
             }
+            //交强险起保终保计算
             if (InsuranceRisk.TRAFFIC_CODE.equals(riskInfo.getRiskCode())) {
-                LocalDateTime ciStartTime = LocalDateTime.parse(riskInfo.getStartDate(), formatter);
-                LocalDateTime ciEndTime = ciStartTime.plusYears(1).with(LocalTime.MIDNIGHT).minusSeconds(1);
-                this.CiStartDate = ciStartTime.format(formatter);
-                this.CiEndDate = ciEndTime.format(formatter);
-                // 重复投保
+                // 基础保险期限计算
+                LocalDateTime ciStartTime;
+                LocalDateTime ciEndTime;
+                if (riskInfo.getStartDate().endsWith("00:00:00")) {
+                    ciStartTime = LocalDateTime.parse(riskInfo.getStartDate(), formatter);
+                    ciEndTime = ciStartTime.plusYears(1).minusSeconds(1);
+                } else {
+                    ciStartTime = LocalDateTime.parse(riskInfo.getStartDate(), formatter);
+                    ciEndTime = ciStartTime.plusYears(1).minusDays(1).minusSeconds(1);
+                }
+                // 如果是重复投保,根据startDate调整保险期限
                 if (isRepeat) {
-                    LocalDateTime ciStartTime1 = LocalDateTime.parse(startDate, formatter);
-                    LocalDateTime ciEndTime1 = ciStartTime1.plusYears(1).with(LocalTime.MIDNIGHT).minusSeconds(1);
-                    this.CiStartDate = ciStartTime1.format(formatter);
-                    this.CiEndDate = ciEndTime1.format(formatter);
+                    ciStartTime = LocalDateTime.parse(startDate, formatter);
+                    ciEndTime = startDate.endsWith("00:00:00")
+                            ? ciStartTime.plusYears(1).minusSeconds(1)
+                            : ciStartTime.plusYears(1).minusDays(1).minusSeconds(1);
                 }
+                // 设置最终的保险期限
+                this.CiStartDate = ciStartTime.format(formatter);
+                this.CiEndDate = ciEndTime.format(formatter);
             }
         }
         if (riskInfoVo.getInstantFlag().equals("1")) {

+ 16 - 0
src/main/java/com/ydtech/modules/order/entity/crawler/request/CrawlerQuoteRequest.java

@@ -5,6 +5,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -55,4 +56,19 @@ public class CrawlerQuoteRequest extends BaseQuoteInfoVo {
      */
     private Integer maxQuoteNum;
 
+    /**
+     * 人保图片信息
+     */
+    List<CrawlerImageRequest.B64phoListDTO> b64pho_list;
+
+    /**
+     * 人保车损保额折扣
+     */
+    private String pricecoefficient;
+
+    /**
+     * 中煤网点代码
+     */
+    private String netpointcode;
+
 }

+ 4 - 0
src/main/java/com/ydtech/modules/order/entity/crawler/request/TsCrawlerLoginRequest.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.order.entity.crawler.request;
 import cn.hutool.core.collection.CollUtil;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
+import com.ydtech.utils.StringUtils;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -69,6 +70,9 @@ public class TsCrawlerLoginRequest  implements Serializable {
         this.username = attribution.getUsername();
         this.pwd = attribution.getPassword();
         this.smscode = sendcode;
+        if(StringUtils.isBlank(sendcode)){
+            this.smscode = "save";
+        }
         this.token = request.getToken();
         this.secretKey = request.getSecretKey();
         this.pointJson = request.getPointJson();

+ 5 - 0
src/main/java/com/ydtech/modules/order/entity/crawler/response/CrawlerQuoteResponse.java

@@ -329,6 +329,11 @@ public class CrawlerQuoteResponse extends CrawlerBaseResponse {
         @JsonProperty("maxQuoteNum")
         private String maxQuoteNum;
 
+        @JsonProperty("rateFloatFlag")
+        private String rateFloatFlag;
+
+
+
         public String getDiscount() {
             return StringUtils.isEmpty(discount) ? "0" : discount;
         }

+ 5 - 0
src/main/java/com/ydtech/modules/order/entity/dto/InsAreaCompanyQueryDto.java

@@ -21,4 +21,9 @@ public class InsAreaCompanyQueryDto extends InsAreaCompany {
      */
     private String fileStatus;
 
+    /**
+     * 权益类型
+     */
+    private Integer equityType;
+
 }

+ 3 - 0
src/main/java/com/ydtech/modules/order/entity/vo/BaseQuoteVo.java

@@ -179,4 +179,7 @@ public class BaseQuoteVo<T> {
     @ApiModelProperty("是否现询 1.是 2.否")
     private String costFlag;
 
+    // 人保车损保额折扣
+    private String priceCoefficient;
+
 }

+ 3 - 0
src/main/java/com/ydtech/modules/order/entity/vo/InsOrdersEditingVo.java

@@ -287,6 +287,8 @@ public class InsOrdersEditingVo extends InsOrders implements Serializable {
         @ApiModelProperty("接口类型")
         private String apiType;
 
+        @ApiModelProperty("权益类型")
+        private Integer equityType;
 
 
         public void feeVacant() {
@@ -339,6 +341,7 @@ public class InsOrdersEditingVo extends InsOrders implements Serializable {
             if(!Objects.isNull(insAreaCompany.getApiType())) {
                 this.apiType = insAreaCompany.getApiType().toString();
             }
+            this.equityType = insAreaCompany.getEquityType();
         }
     }
 

+ 3 - 0
src/main/java/com/ydtech/modules/order/entity/vo/OrderQueryVo.java

@@ -196,6 +196,9 @@ public class OrderQueryVo {
     @ApiModelProperty("合作公司编号")
     private String partnerCompaniesId;
 
+    @ApiModelProperty("费用类型 0.现金 1.权益包")
+    private String type;
+
 
 
     public LocalDate getEndDatePlusOneDay() {

+ 8 - 0
src/main/java/com/ydtech/modules/order/entity/vo/OrderVo.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ydtech.modules.equity.model.vo.EquityPackageVo;
 import com.ydtech.modules.protocol.entity.po.PtlAgreement;
 import com.ydtech.modules.protocols.entity.vo.AgreementProductCostsSave;
 import io.swagger.annotations.ApiModelProperty;
@@ -536,4 +537,11 @@ public class OrderVo implements Serializable {
     @ApiModelProperty("录入来源")
     private String entryStatus;
 
+    @ApiModelProperty("权益包信息")
+    private EquityPackageVo equityPackageVo;
+
+    @ApiModelProperty("权益类型")
+    private Integer equityType;
+
+
 }

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/InsAreaCompanyService.java

@@ -160,7 +160,7 @@ public interface InsAreaCompanyService extends IService<InsAreaCompany> {
      *
      * @return
      */
-    boolean saveSubOrder(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<AccidentalDrivingVo> quoteVo);
+    String saveSubOrder(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<AccidentalDrivingVo> quoteVo);
 
     /**
      * 根据订单id 获取已承保的子订单信息

+ 14 - 0
src/main/java/com/ydtech/modules/order/service/InsCrawlerOrderService.java

@@ -6,6 +6,7 @@ import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
 import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementSaveVo;
 
 public interface InsCrawlerOrderService extends BaseOrderService<Object> {
 
@@ -99,6 +100,19 @@ public interface InsCrawlerOrderService extends BaseOrderService<Object> {
      */
     void sendcode(String agreementId);
 
+    /**
+     * 泰山发送验证码
+     * @param attributionDto
+     */
+    void sendcode(PtlAgreementAttributionDto attributionDto);
+
+    /**
+     * 泰山登录
+     *
+     * @param agreement
+     */
+    void taishanLogin(PtlAgreementSaveVo agreement);
+
     /**
      * 泰山登录
      * @param agreementId

+ 2 - 0
src/main/java/com/ydtech/modules/order/service/InsTaskImagesService.java

@@ -36,6 +36,8 @@ public interface InsTaskImagesService extends IService<InsTaskImages> {
      */
     HttpResult<Map<String, InsTaskImagesDto>> findByQuoteNo(String quoteNo);
 
+    List<InsTaskImagesBase64> findByQuoteNoToBase64(String orderNo, String companyId);
+
 
 
     List<InsTaskImagesBase64> findByOrderNo(String orderNo, String companyId, boolean b);

+ 1 - 0
src/main/java/com/ydtech/modules/order/service/impl/GuorenOrderApiServiceImpl.java

@@ -1163,6 +1163,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
             //2、 转保
             boo = GuorenDuplicateInsuranceComponent.buildCheckCodeParam(resp, requestInfoList, req);
             if (boo) {
+                a++;
                 SysQuoteRecord sysQuoteRecord = new SysQuoteRecord(yaQuoteInfoVo.getUserid(),companyId,yaQuoteInfoVo.getCarInfo().getLicenseNo(),
                         QuoteNumberConstant.QuoteAction.TRANSFER_INSRUANCE.getCode().toString(),QuoteNumberConstant.QuoteResult.FAIL.getCode().toString());
                 sysQuoteRecords.add(sysQuoteRecord);

+ 8 - 5
src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java

@@ -588,7 +588,7 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
 
     @Override
     @Transactional
-    public boolean saveSubOrder(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<AccidentalDrivingVo> quoteVo) {
+    public String saveSubOrder(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<AccidentalDrivingVo> quoteVo) {
         //添加暂存标志   add by  hxl  2024-07-10  0 暂存 1 保存
         if (quoteVo.getStageFlag() == null) {
             throw new SystemException("暂存标志为空");
@@ -615,9 +615,12 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
         InsOrdersEditingVo insOrdersEditingVo = new InsOrdersEditingVo();
         insOrdersEditingVo.setJqpolicyno(quoteVo.getJqpolicyno());
         insOrdersEditingVo.setSypolicyno(quoteVo.getSypolicyno());
-        InsOrders externalOrder = insOrdersService.getExternalOrder(insOrdersEditingVo);
-        if (!Objects.isNull(externalOrder)) {
-            throw new SystemException("已存在订单");
+        // 处理单独驾意险
+        if(quoteVo.getJqpolicyno() != null || quoteVo.getSypolicyno() != null) {
+            InsOrders externalOrder = insOrdersService.getExternalOrder(insOrdersEditingVo);
+            if (!Objects.isNull(externalOrder)) {
+                throw new SystemException("已存在订单");
+            }
         }
 
         InsOrders insOrders = insOrdersService.getById(quoteInfo.getOrderNo());
@@ -829,7 +832,7 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
         if(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode().equals(insAreaCompany.getOrderstatus())){
             insOrderPushMsgService.getPushSignInsAreaCompanyList(insAreaCompany.getId());
         }
-        return true;
+        return insAreaCompany.getId();
     }
 
     /**

+ 69 - 10
src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java

@@ -1,8 +1,10 @@
 package com.ydtech.modules.order.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ydtech.constants.InsuranceEnum;
 import com.ydtech.constants.enums.InsurKind;
 import com.ydtech.constants.enums.InsuranceOrderPdf;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
@@ -22,7 +24,6 @@ import com.ydtech.modules.order.entity.crawler.constants.CrawlerVerifyPaymentCon
 import com.ydtech.modules.order.entity.crawler.request.*;
 import com.ydtech.modules.order.entity.crawler.response.*;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
-import com.ydtech.modules.order.entity.dto.InsUploadImagesDto;
 import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.po.SysQuoteRecord;
@@ -33,6 +34,7 @@ import com.ydtech.modules.protocol.entity.constants.PtlCrawlerApiType;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
 import com.ydtech.modules.protocol.entity.dto.PtlAttributionTemplateDto;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementSaveVo;
 import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.modules.protocol.service.PtlCrawlerApiService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
@@ -52,14 +54,15 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
-import static com.ydtech.modules.order.constants.OrderCacheConstant.GR_SPECIAL_AGREEMENT_TIME;
-
 
 @Service
 @RequiredArgsConstructor
@@ -114,7 +117,7 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         CrawlerBaseResponse response = insCrawlerOrderComponents.request(apiUrl, companyId, PtlCrawlerApiType.API_2.getDesc(),
                 crawlerLoginRequest, CrawlerBaseResponse.class);
 
-        AssertionUtils.isSucceed(response.getCode() == 200, insCompanyName + "登录用户名和密码不正确");
+        AssertionUtils.isSucceed(response.getCode() == 200, insCompanyName + ":" + response.getMessage());
     }
 
     @Override
@@ -160,6 +163,23 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
             String value = ptlAttributionTemplateDto.getValue();
             crawlerQuoteRequest.setForm(value);
         }
+        if (ptlAgreementAttribution.getInsCompanyId().equals("PICC1000000")) {
+            String quoteNo = order.getQuoteno();
+            List<InsTaskImagesBase64> insTaskImagesBase64List = insTaskImagesService.findByQuoteNoToBase64(quoteNo, ptlAgreementAttribution.getInsCompanyId());
+            crawlerQuoteRequest.setB64pho_list(CrawlerImageRequest.toB64phoListDTO(insTaskImagesBase64List));
+            crawlerQuoteRequest.setPricecoefficient(t.getPriceCoefficient() == null ? "1" : t.getPriceCoefficient());
+        }
+
+        // 中煤添加netpointcode 代码
+        if (ptlAgreementAttribution.getInsCompanyId().equals("ZMBX1000000")){
+            JSONArray fields = ptlAgreementAttribution.getFields();
+            for(int k=0;k<fields.size();k++){
+                JSONObject jsonObject = fields.getJSONObject(k);
+                if("netpointcode".equals(jsonObject.getString("field"))){
+                    crawlerQuoteRequest.setNetpointcode(jsonObject.getString("value"));
+                }
+            }
+        }
 
         // 发送请求
         CrawlerQuoteResponse response = insCrawlerOrderComponents.request(apiUrl, ptlAgreementAttribution.getInsCompanyId(),
@@ -228,11 +248,11 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
             insAreaCompanyAccidentalDriving.setRideRiskCode(one.getProjectCode());
             insAreaCompanyAccidentalDriving.setQuantity(1);
             insAreaCompanyAccidentalDriving.setCompanyId(t.getCompanyId());
-        } else if(t.getAccidentalDrivingVo() != null && t.getCompanyId().equals("HBIC1000000")){
+        } else if (t.getAccidentalDrivingVo() != null && t.getCompanyId().equals("HBIC1000000")) {
             JSONObject jsonObject = JSON.parseObject(t.getAccidentalDrivingVo()
                     .toString());
             Integer buynum = jsonObject.getInteger("buynum");
-            if(!quoteRespVo.getAccident().isEmpty()){
+            if (!quoteRespVo.getAccident().isEmpty()) {
                 BigDecimal price = new BigDecimal(response.getDrivingInsurances().get(0).getPrice());
                 BigDecimal total = price.multiply(BigDecimal.valueOf(buynum));
                 BigDecimal rounded = total.setScale(2, RoundingMode.HALF_UP);
@@ -568,6 +588,10 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         quoteRespVo.setJqClaims(other.getJqAccident());
         // 商业出险次数
         quoteRespVo.setSyClaims(other.getSyAccident());
+        // 中煤是否浮动
+        if(other.getRateFloatFlag() != null && !other.getRateFloatFlag().isEmpty()){
+            quoteRespVo.setRateFloatFlag(other.getRateFloatFlag());
+        }
         return quoteRespVo;
     }
 
@@ -837,10 +861,44 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
             throw new SystemException(response.getMessage());
         }
         // 将返回参数放入redis
+        redisTemplate.opsForValue()
+                .set(OrderCacheConstant.TS_ACCESS_TOKEN + attributionDto.getUsername(), JSON.toJSONString(response.getData()), OrderCacheConstant.TS_ACCESS_TOKEN_TIME,
+                        TimeUnit.SECONDS);
+    }
+
+    @Override
+    public void sendcode(PtlAgreementAttributionDto attributionDto) {
+        String apiUrl = ptlCrawlerApiService.getByTemplateId(attributionDto.getTemplateId(), PtlCrawlerApiType.API_11);
+        TsCrawlerLoginRequest crawlerLoginRequest = new TsCrawlerLoginRequest(attributionDto);
+        TsCrawlerBaseResponse response = insCrawlerOrderComponents.request(apiUrl, InsuranceEnum.TSBX.getCode(), "获取验证码",
+                crawlerLoginRequest, TsCrawlerBaseResponse.class);
+        if (!response.getCode().equals(200)) {
+            throw new SystemException(response.getMessage());
+        }
+        // 将返回参数放入redis
         redisTemplate.opsForValue().set(OrderCacheConstant.TS_ACCESS_TOKEN + attributionDto.getUsername(), JSON.toJSONString(response.getData()), OrderCacheConstant.TS_ACCESS_TOKEN_TIME,
                 TimeUnit.SECONDS);
     }
 
+    @Override
+    public void taishanLogin(PtlAgreementSaveVo agreement) {
+        // 获取协议的用户名密码
+
+        String apiUrl = ptlCrawlerApiService.getByTemplateId(agreement.getAttribution().getTemplateId(), PtlCrawlerApiType.API_1);
+        String token = redisTemplate.opsForValue().get(OrderCacheConstant.TS_ACCESS_TOKEN + agreement.getAttribution().getUsername());
+        if (StringUtils.isNotBlank(token)) {
+            TsCrawlerLoginRequest request = JSON.parseObject(token).toJavaObject(TsCrawlerLoginRequest.class);
+            TsCrawlerLoginRequest tsRequest = new TsCrawlerLoginRequest(agreement.getAttribution(), agreement.getAgreement().getSmsCode(), request);
+            TsCrawlerBaseResponse response = insCrawlerOrderComponents.request(apiUrl, agreement.getAgreement().getPartnerCompaniesId(), "登录",
+                    tsRequest, TsCrawlerBaseResponse.class);
+            if (!response.getCode().equals(200)) {
+                throw new SystemException("泰山登录失败:" + response.getMessage());
+            }
+        } else {
+            throw new SystemException("验证码已失效!请重新发送!");
+        }
+    }
+
     @Override
     public void taishanLogin(String agreementId, String smscode) {
         // 获取协议的用户名密码
@@ -848,10 +906,12 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         PtlAgreementAttributionDto attributionDto = new PtlAgreementAttributionDto();
         BeanUtils.copyProperties(attribution, attributionDto);
 
-        List<PtlAttributionTemplateDto> attributionTemplateDtos = attribution.getFields().toJavaList(PtlAttributionTemplateDto.class);
+        List<PtlAttributionTemplateDto> attributionTemplateDtos = attribution.getFields()
+                .toJavaList(PtlAttributionTemplateDto.class);
         attributionDto.setFields(attributionTemplateDtos);
         String apiUrl = ptlCrawlerApiService.getByTemplateId(attribution.getTemplateId(), PtlCrawlerApiType.API_1);
-        String token = redisTemplate.opsForValue().get(OrderCacheConstant.TS_ACCESS_TOKEN + attributionDto.getUsername());
+        String token = redisTemplate.opsForValue()
+                .get(OrderCacheConstant.TS_ACCESS_TOKEN + attributionDto.getUsername());
         if (StringUtils.isNotBlank(token)) {
             TsCrawlerLoginRequest request = JSON.parseObject(token).toJavaObject(TsCrawlerLoginRequest.class);
             TsCrawlerLoginRequest tsRequest = new TsCrawlerLoginRequest(attributionDto, smscode, request);
@@ -863,6 +923,5 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         } else {
             throw new SystemException("验证码已失效!请重新发送!");
         }
-
     }
 }

+ 6 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsOrderPdfUrlServiceImpl.java

@@ -322,6 +322,12 @@ public class InsOrderPdfUrlServiceImpl extends ServiceImpl<InsOrderPdfUrlMapper,
                 return insCrawlerOrderService.getPolicyByCompanyIdPdfList(subOrder,insOrders,flag);
             }
         }
+        //人保
+        else if(subOrder.getCompanyId().contains(InsuranceEnum.PICC.getCode())){
+            if (subOrder.getApiType()!=null && subOrder.getApiType() == 2) {
+                return insCrawlerOrderService.getPolicyByCompanyIdPdfList(subOrder,insOrders,flag);
+            }
+        }
 
         return null;
     }

+ 47 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -31,6 +31,11 @@ import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.po.SysUserIsDial;
 import com.ydtech.modules.admin.service.*;
 import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.equity.model.InsAreaCompanyEquity;
+import com.ydtech.modules.equity.model.response.LocalEquityPackageAssociation;
+import com.ydtech.modules.equity.model.response.LocalEquityPackagePage;
+import com.ydtech.modules.equity.model.vo.EquityPackageVo;
+import com.ydtech.modules.equity.service.InsAreaCompanyEquityService;
 import com.ydtech.modules.esm.model.EsmUserReferrer;
 import com.ydtech.modules.esm.service.EsmUserReferrerService;
 import com.ydtech.modules.fee.service.CostsCalcService;
@@ -156,6 +161,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     @Autowired
     private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
 
+    @Autowired
+    private InsAreaCompanyEquityService insAreaCompanyEquityService;
+
     @Autowired
     private InsAreaCompanyAccidentalDrivingService insAreaCompanyAccidentalDrivingService;
 
@@ -1127,6 +1135,43 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             orderAndAreaCompany.setSumFee(sum.toString());
             List<DistributionLevelVo> distributionLevelVoList = feeRuleSchemeService.converDistrbutionData(insFeeOrderNew);
             orderAndAreaCompany.setDistributionLevelVoList(distributionLevelVoList);
+
+            // 获取客户权益信息
+            List<FeeOrderNewVo.ExportFee> exportFee = feeOrderNewVo.getExportFee();
+            BigDecimal totalAmount = BigDecimal.valueOf(0);
+            for (FeeOrderNewVo.ExportFee fee : exportFee) {
+                if(BusinessConstant.FEE_INSURANCE_TYPE_4.equals(fee.getInsuranceType())){
+                    totalAmount = fee.getTotalAmount();
+                }
+            }
+            // 获取权益包
+            InsAreaCompanyEquity equity = insAreaCompanyEquityService.getById(companyId);
+            if(Objects.nonNull(equity) && equity.getType().equals(1)){
+                EquityPackageVo packageVo = new EquityPackageVo();
+                packageVo.setPackageName(equity.getEquityName());
+                packageVo.setLdProportion(ptlAgreementProductCostsNew.getLdProportion());
+                packageVo.setTotalAmount(totalAmount);
+                packageVo.setKhAmount(totalAmount.subtract(
+                        totalAmount.multiply(new BigDecimal(ptlAgreementProductCostsNew.getLdProportion())
+                                .divide(new BigDecimal(100)))));
+                packageVo.setDlrAmount(totalAmount.multiply(new BigDecimal(ptlAgreementProductCostsNew.getLdProportion()).divide(new BigDecimal(100))));
+
+                String equityInfo = equity.getEquityInfo();
+                LocalEquityPackagePage packagevo = JSON.parseObject(equityInfo, LocalEquityPackagePage.class);
+                List<LocalEquityPackageAssociation> infoList = packagevo.getLocalEquityPackageAssociationList();
+                packageVo.setQybAmount(packagevo.getTotalPackagePrice());
+                List<EquityPackageVo.EquityPackageInfoVo> infoVoList = new ArrayList<>();
+                for (LocalEquityPackageAssociation localEquityPackageAssociation : infoList) {
+                    EquityPackageVo.EquityPackageInfoVo infoVo = new EquityPackageVo.EquityPackageInfoVo();
+                    infoVo.setNumber(localEquityPackageAssociation.getNumber());
+                    infoVo.setEquityName(localEquityPackageAssociation.getRightsName());
+                    infoVo.setAgreementPrice(localEquityPackageAssociation.getSettlePrice());
+                    infoVo.setMarketPrice(localEquityPackageAssociation.getMarketPrice());
+                    infoVoList.add(infoVo);
+                }
+                packageVo.setInfoVoList(infoVoList);
+                orderAndAreaCompany.setEquityPackageVo(packageVo);
+            }
         }
         //查询费用审核状态
         List<InsFeeAudit> feeAuditList = insFeeAuditService.query().eq("ins_order_no", companyId).list();
@@ -1195,6 +1240,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         } else {
             orderAndAreaCompany.setJqInsuranceType(new JSONArray());
         }
+
+
         // 获取协议信息、 录入来源
         PtlAgreement ptlAgreement = ptlAgreementService.getById(orderAndAreaCompany.getAgreementId());
         orderAndAreaCompany.setPtlAgreement(ptlAgreement);

+ 38 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsTaskImagesServiceImpl.java

@@ -100,6 +100,44 @@ public class InsTaskImagesServiceImpl extends ServiceImpl<InsTaskImagesMapper, I
         return HttpResult.ok(collect);
     }
 
+    @Override
+    public List<InsTaskImagesBase64> findByQuoteNoToBase64(String quoteNo, String companyId) {
+        // 获取缓存中的影像信息
+        JSONObject uploadImage = insImagesUploadCacheComponents.isUploadImage(companyId);
+        List<InsUploadImagesDto> insUploadImagesDtos = baseMapper.getByQuoteNoToBase64List(quoteNo);
+        if (insUploadImagesDtos.isEmpty()) {
+            throw new SystemException("请检查影像是否上传");
+        }
+        // 使用 imagesId 去重
+        List<InsUploadImagesDto> deduplication = insUploadImagesDtos.stream().collect(
+                Collectors.collectingAndThen(
+                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(InsUploadImagesDto::getImageId))),
+                        ArrayList::new));
+
+        // 图片路劲转base64
+        Map<String, String> map = new HashMap<>();
+
+        for (InsUploadImagesDto target : deduplication) {
+            String base64B = Base64Utils.encodeToString(FileUtil.readBytes(target.getFilePath()));
+            // 文件id
+            map.put(target.getImageId(), base64B);
+        }
+
+        List<InsTaskImagesBase64> collect = insUploadImagesDtos.stream()
+                // 过滤缓存中 存在的 imageId
+                .filter(x -> !x.getImageId().equals(uploadImage.get(x.getImageType())))
+                .map(x -> new InsTaskImagesBase64(x, map))
+                .collect(Collectors.toList());
+
+        // 核心逻辑是否是覆盖
+        if (!collect.isEmpty()) {
+            return insUploadImagesDtos.stream()
+                    .map(x -> new InsTaskImagesBase64(x, map))
+                    .collect(Collectors.toList());
+        }
+        return collect;
+    }
+
     @Override
     public List<InsTaskImagesBase64> findByOrderNo(String orderNo, String companyId, boolean b) {
 

+ 7 - 2
src/main/java/com/ydtech/modules/order/service/impl/SysQuoteRedisServiceImpl.java

@@ -30,6 +30,8 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -370,8 +372,11 @@ public class SysQuoteRedisServiceImpl implements SysQuoteRedisService {
 
     @Override
     public BigDecimal getQuoteRatio(String companyId, String userId) {
-        BigDecimal quoteRatio = sysQuoteRecordMapper.getQuoteRatio(userId, companyId);
-        return quoteRatio;
+        LocalDateTime todayMidnight = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
+        LocalDateTime tomorrowMidnight = LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIN);
+        String startTime = todayMidnight.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        String endTime = tomorrowMidnight.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        return sysQuoteRecordMapper.getQuoteRatio(userId, companyId, startTime, endTime);
     }
 
     /**

+ 11 - 6
src/main/java/com/ydtech/modules/order/service/impl/YangGuangOrderApiServiceImpl.java

@@ -114,9 +114,9 @@ public class YangGuangOrderApiServiceImpl implements YangGuangOrderApiService {
         // 查询车型
         YangGuangQueryVehicleModelRequest yangGuangQueryVehicleModelRequest = new YangGuangQueryVehicleModelRequest(quoteInfoVo.getCarInfo(), ygConfigureParameters);
         if (quoteInfoVo.getCarInfo().isNoLicenseFlag()) {
-            yangGuangQueryVehicleModelRequest.setIsNewCar("1");
-        } else {
             yangGuangQueryVehicleModelRequest.setIsNewCar("0");
+        } else {
+            yangGuangQueryVehicleModelRequest.setIsNewCar("1");
         }
         YangGuangQueryVehicleModelResponse yangGuangQueryVehicleModelResponse = yangGuangRequestApiComponents.queryVehicleModel(yangGuangQueryVehicleModelRequest);
         List<YangGuangQueryVehicleModelResponse.carmodellist> carModelList = yangGuangQueryVehicleModelResponse.getCarmodellist();
@@ -142,7 +142,7 @@ public class YangGuangOrderApiServiceImpl implements YangGuangOrderApiService {
         InsOrders insOrders = insOrdersService.getById(quoteInfoVo.getOrderNo());
         quoteInfoVo.setProductId(insOrders.getProductid());
 
-        YangGuangAccuracyCalculateRequest yangGuangAccuracyCalculateRequest = new YangGuangAccuracyCalculateRequest(quoteInfoVo, purchasePrice, carModelList1, riskList.get(0),startDate,ygConfigureParameters,quoteVo,false);
+        YangGuangAccuracyCalculateRequest yangGuangAccuracyCalculateRequest = new YangGuangAccuracyCalculateRequest(quoteInfoVo, purchasePrice, carModelList1, riskList.get(0),startDate,ygConfigureParameters,quoteVo,false,null,null);
         yangGuangAccuracyCalculateRequest.setInfotransNo(yangGuangQueryVehicleModelResponse.getInfotransNo());
         YangGuangAccuracyCalculateResponse yangGuangAccuracyCalculateResponse = yangGuangRequestApiComponents.accuracyCalculaye(yangGuangAccuracyCalculateRequest);
         // 如果发生重复投保 将返回的终保日期带入起保日期重新报价
@@ -153,7 +153,9 @@ public class YangGuangOrderApiServiceImpl implements YangGuangOrderApiService {
 
                 LocalDateTime dateTime = LocalDateTime.parse(endDate, inputFormatter);
                 String newDateStr = dateTime.format(outputFormatter);
-                YangGuangAccuracyCalculateRequest yangGuangAccuracyCalculateRequestRe = new YangGuangAccuracyCalculateRequest(quoteInfoVo, purchasePrice, carModelList1, riskList.get(0),newDateStr,ygConfigureParameters,quoteVo,true);
+                String remarkCi = yangGuangAccuracyCalculateResponse.getRemarkCi();
+                String remarkBi = yangGuangAccuracyCalculateResponse.getRemarkBi();
+                YangGuangAccuracyCalculateRequest yangGuangAccuracyCalculateRequestRe = new YangGuangAccuracyCalculateRequest(quoteInfoVo, purchasePrice, carModelList1, riskList.get(0),newDateStr,ygConfigureParameters,quoteVo,true,remarkCi,remarkBi);
                 yangGuangAccuracyCalculateRequestRe.setInfotransNo(yangGuangQueryVehicleModelResponse.getInfotransNo());
                 maxQuoteNum--;
                 SysQuoteRecord sysQuoteRecord = new SysQuoteRecord(quoteInfoVo.getUserid(),quoteVo.getCompanyId(),quoteInfoVo.getCarInfo().getLicenseNo(),
@@ -170,7 +172,9 @@ public class YangGuangOrderApiServiceImpl implements YangGuangOrderApiService {
                     if (yangGuangAccuracyCalculateResponseRe.getErrorCode().equals("0")) {
                         YangGuangAccuracyCalculateResponse.itemcar itemcar = yangGuangAccuracyCalculateResponseRe.getItemcar();
                         String actualValue = itemcar.getActualValue();
-                        YangGuangAccuracyCalculateRequest yangGuangAccuracyCalculateRequest1 = new YangGuangAccuracyCalculateRequest(quoteInfoVo, actualValue, carModelList1, riskList.get(0),newDateStr,ygConfigureParameters,quoteVo,true);
+                        String remarkCi1 = yangGuangAccuracyCalculateResponseRe.getRemarkCi();
+                        String remarkBi1 = yangGuangAccuracyCalculateResponseRe.getRemarkBi();
+                        YangGuangAccuracyCalculateRequest yangGuangAccuracyCalculateRequest1 = new YangGuangAccuracyCalculateRequest(quoteInfoVo, actualValue, carModelList1, riskList.get(0),newDateStr,ygConfigureParameters,quoteVo,true,remarkCi1,remarkBi1);
                         yangGuangAccuracyCalculateRequest1.setInfotransNo(yangGuangQueryVehicleModelResponse.getInfotransNo());
                         maxQuoteNum--;
                         SysQuoteRecord sysQuoteRecord1 = new SysQuoteRecord(quoteInfoVo.getUserid(),quoteVo.getCompanyId(),quoteInfoVo.getCarInfo().getLicenseNo(),
@@ -280,7 +284,8 @@ public class YangGuangOrderApiServiceImpl implements YangGuangOrderApiService {
             if (yangGuangAccuracyCalculateResponse.getErrorCode().equals("0")) {
                 YangGuangAccuracyCalculateResponse.itemcar itemcar = yangGuangAccuracyCalculateResponse.getItemcar();
                 String actualValue = itemcar.getActualValue();
-                YangGuangAccuracyCalculateRequest yangGuangAccuracyCalculateRequest1 = new YangGuangAccuracyCalculateRequest(quoteInfoVo, actualValue, carModelList1, riskList.get(0),startDate,ygConfigureParameters,quoteVo,false);
+                String remarkBI = yangGuangAccuracyCalculateResponse.getRemarkBi();
+                YangGuangAccuracyCalculateRequest yangGuangAccuracyCalculateRequest1 = new YangGuangAccuracyCalculateRequest(quoteInfoVo, actualValue, carModelList1, riskList.get(0),startDate,ygConfigureParameters,quoteVo,false,null,remarkBI);
                 yangGuangAccuracyCalculateRequest1.setInfotransNo(yangGuangQueryVehicleModelResponse.getInfotransNo());
                 YangGuangAccuracyCalculateResponse yangGuangAccuracyCalculateResponse1 = yangGuangRequestApiComponents.accuracyCalculaye(yangGuangAccuracyCalculateRequest1);
                 boolean isEnergy = carInfo.isNewEnergy();

+ 1 - 1
src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementGroupLinkDeptMapper.java

@@ -28,7 +28,7 @@ public interface PtlAgreementGroupLinkDeptMapper extends BaseMapper<PtlAgreement
      *  @Date: 2024/10/25 18:04
      *  @Description: 通過部門id和协议id判断是否授权
      */
-    List<String> getAgreementByDeptId(@Param("agreementId") String agreementId, @Param("deptId") String deptId);
+    List<String> getAgreementByDeptId(@Param("agreementId") String agreementId, @Param("deptList") List<String> deptList);
 }
 
 

+ 3 - 0
src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementSaveDto.java

@@ -89,4 +89,7 @@ public class PtlAgreementSaveDto implements Serializable {
 
     @ApiModelProperty("对接管理人")
     private String custodianId;
+
+    @ApiModelProperty("验证码")
+    private String smsCode;
 }

+ 1 - 1
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementDeptService.java

@@ -42,7 +42,7 @@ public interface PtlAgreementDeptService extends IService<PtlAgreementDept> {
     /**
      * 判断此协议是否授权
      */
-    void agreementIsAuthorized(String deptId, String agreementId);
+    void agreementIsAuthorized(List<String> deptId, String agreementId);
 
     /**
      * 团队批量配置协议信息

+ 4 - 4
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementDeptServiceImpl.java

@@ -57,20 +57,20 @@ public class PtlAgreementDeptServiceImpl extends ServiceImpl<PtlAgreementDeptMap
     }
 
     @Override
-    public void agreementIsAuthorized(String deptId, String agreementId) {
+    public void agreementIsAuthorized(List<String> deptList, String agreementId) {
         //add by  hxl  2024-10-25   注释掉从 协议调度授权部门的协议逻辑  ==================begin==================
         boolean flag = sysSwitchConfigService.xysqDisplaySwitches();
         if(flag){
             //新逻辑从协议组授权获取
-            if(StringUtils.isNotBlank(deptId)){
-                List<String> ids =ptlAgreementGroupLinkDeptMapper.getAgreementByDeptId(agreementId, deptId);
+            if(!deptList.isEmpty()){
+                List<String> ids =ptlAgreementGroupLinkDeptMapper.getAgreementByDeptId(agreementId, deptList);
                 if (ids.isEmpty()) {
                     throw new SystemException("协议或调度协议未授权,请联系团队长授权");
                 }
             }
         }else{
             //原先逻辑
-            List<PtlAgreementDept> list = list(byAgreementId(agreementId).eq(PtlAgreementDept::getDeptId, deptId));
+            List<PtlAgreementDept> list = list(byAgreementId(agreementId).eq(PtlAgreementDept::getDeptId, deptList.get(0)));
             //==================================================================== end==================
             if (list.isEmpty()) {
                 throw new SystemException("请联系团队长授权");

+ 10 - 1
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java

@@ -125,6 +125,9 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
     @Autowired
     private InsUploadFilesService insUploadFilesService;
 
+    @Autowired
+    private InsCrawlerOrderService insCrawlerOrderService;
+
 
     public PtlAgreementServiceImpl(PtlAgreementProductCostsService ptlAgreementProductCostsService,
                                    PtlAgreementAttributionService ptlAgreementAttributionService,
@@ -907,11 +910,17 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
 
 
         // 验证用户名密码 python api 对接需要验证用户名
-        if (!ObjectUtils.isEmpty(attribution.getApiType()) && PtlApiType.PTL_API_2.getCode() == attribution.getApiType() && verificationLogin && !InsuranceEnum.TSBX.getCode().equals(esmInsCompany.getCode())) {
+        if (!ObjectUtils.isEmpty(attribution.getApiType()) && PtlApiType.PTL_API_2.getCode() == attribution.getApiType() && verificationLogin
+                && !InsuranceEnum.TSBX.getCode().equals(esmInsCompany.getCode())) {
             String nameSimple = esmInsCompany.getNamesimple();
             String id = esmInsCompany.getId();
             insCrawlerOrderController.isLogin(attribution, id, nameSimple);
         }
+//        else if(!ObjectUtils.isEmpty(attribution.getApiType()) && PtlApiType.PTL_API_2.getCode() == attribution.getApiType() && verificationLogin
+//                && InsuranceEnum.TSBX.getCode().equals(esmInsCompany.getCode())){
+//            String id = esmInsCompany.getId();
+//            insCrawlerOrderService.taishanLogin(attribution,agreementSaveDto.getSmsCode(),id);
+//        }
 
         ptlAgreement.setCompaniesType(esmInsCompany.getType());
         ptlAgreement.setInsuranceCompanyId(esmInsCompany.getId());

+ 4 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNew.java

@@ -157,6 +157,10 @@ public class PtlAgreementProductCostsNew {
     @TableField(value = "is_inquiry_now")
     private String isInquiryNow;
 
+    @ApiModelProperty(value = "代理人留点比例")
+    @TableField(value = "ld_proportion")
+    private String ldProportion;
+
     @ApiModelProperty(value = "生成的描述")
     @TableField(exist = false)
     private String desc;

+ 3 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductCosts.java

@@ -145,6 +145,9 @@ public class AgreementProductCosts implements Serializable {
     @ApiModelProperty(value = "是否现询")
     private String isInquiryNow;
 
+    @ApiModelProperty(value = "代理人留点比例")
+    private String ldProportion;
+
 
     @ApiModelProperty(value = "费用属性")
     private List<PtlAgreementProductCostsAttrLink> costsAttrLinks;

+ 3 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductCostsSave.java

@@ -145,6 +145,9 @@ public class AgreementProductCostsSave {
     @ApiModelProperty(value = "是否现寻")
     private String isInquiryNow;
 
+    @ApiModelProperty(value = "代理人留点比例")
+    private String ldProportion;
+
 
     @ApiModelProperty(value = "费用属性")
     private List<PtlAgreementUndwrtRulesAttr> costsAttrLinks;

+ 6 - 5
src/main/java/com/ydtech/modules/scheme/entity/po/PtlScheme.java

@@ -3,13 +3,10 @@ package com.ydtech.modules.scheme.entity.po;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesDictLabal;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
 import lombok.Data;
-import lombok.NoArgsConstructor;
 
-import java.util.List;
+import java.time.LocalDateTime;
 
 /**
  * 方案规则属性
@@ -54,9 +51,13 @@ public class PtlScheme {
     @TableField("carnature")
     private String carnature;
 
+    @ApiModelProperty(value = "优先级")
+    @TableField("priority_level")
+    private String priorityLevel;
+
     @ApiModelProperty(value = "创建时间")
     @TableField(value = "create_time")
-    private String createTime;
+    private LocalDateTime createTime;
 
 
     @ApiModelProperty(value = "创建人")

+ 4 - 0
src/main/java/com/ydtech/modules/scheme/entity/vo/SchemeResultVo.java

@@ -22,6 +22,10 @@ public class SchemeResultVo {
 
     private String description;
 
+    private String priorityLevel;
+
+    private String createTime;
+
     private JSONArray risks;
 
     private JSONArray kinds;

+ 3 - 0
src/main/java/com/ydtech/modules/scheme/entity/vo/SchemeSaveVo.java

@@ -49,6 +49,9 @@ public class SchemeSaveVo {
         @ApiModelProperty(value = "描述")
         private String description;
 
+        @ApiModelProperty(value = "优先级")
+        private String priorityLevel;
+
         @ApiModelProperty(value = "商业险种")
         @JsonProperty("kinds")
         private List<SchemeKindInfoVo> kinds;

+ 22 - 5
src/main/java/com/ydtech/modules/scheme/service/impl/PtlSchemeRulesServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.constants.enums.dict.insurance.EnergyType;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
 import com.ydtech.modules.protocol.entity.dto.TaxSourceExcludeDto;
 import com.ydtech.modules.protocol.service.ITaxSourceExcludeService;
@@ -22,10 +23,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
+import java.util.function.Function;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
 /**
@@ -139,6 +139,11 @@ public class PtlSchemeRulesServiceImpl extends ServiceImpl<PtlSchemeRulesMapper,
         return rulesPage;
     }
 
+    public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
+        Set<Object> seen = new HashSet<>();
+        return t -> seen.add(keyExtractor.apply(t)); // 如果id已存在则过滤
+    }
+
     /**
      * 根据规则过滤保险公司
      *
@@ -147,9 +152,20 @@ public class PtlSchemeRulesServiceImpl extends ServiceImpl<PtlSchemeRulesMapper,
      */
     @Override
     public List<PtlAgreementInsCompanyDto> ruleFilterCompany(String userId, RuleFilterVo ruleFilterVo) {
+        List<PtlAgreementInsCompanyDto> userAgreementInsCompany = new ArrayList<>();
+        if(!BaseController.getUserId().equals(userId)){
+
+            userAgreementInsCompany = taxSourceService.getAllAgreement(BaseController.getDeptId(),BaseController.getUserId());
+        }
         String deptId = sysUserService.getById(userId).getDeptId();
         //首先获取有权限的保险公司
         List<PtlAgreementInsCompanyDto> agreementInsCompany = taxSourceService.getAllAgreement(deptId, userId);
+        agreementInsCompany.addAll(userAgreementInsCompany);
+
+        agreementInsCompany = agreementInsCompany.stream()
+                .filter(distinctByKey(PtlAgreementInsCompanyDto::getId))  // 核心:按id去重
+                .collect(Collectors.toList());
+
         //用户可读取的所有保险公司id
         List<String> companyIds = agreementInsCompany.stream()
                 .map(PtlAgreementInsCompanyDto::getId)
@@ -176,6 +192,7 @@ public class PtlSchemeRulesServiceImpl extends ServiceImpl<PtlSchemeRulesMapper,
                 ruleFilterVo.getInsureInfo(),
                 null);
         //赛选规则
+        List<PtlAgreementInsCompanyDto> finalAgreementInsCompany = agreementInsCompany;
         userAllSchemeByCompanyIds.forEach(scheme -> {
             List<SchemeRuleResultVo> rulesVo = ptlSchemeRulesAttrLinkService.getSchemeRulesAttrLinks(scheme.getCompanyId(), ruleFilterVo.getProductId());
 
@@ -186,7 +203,7 @@ public class PtlSchemeRulesServiceImpl extends ServiceImpl<PtlSchemeRulesMapper,
                         ruleFilteringService.judgements(r.getAttrLinks(), rulesAttrList, ruleAttrMappingVoList)
                 );
                 if (allRulesPassed) {
-                    agreementInsCompany.stream()
+                    finalAgreementInsCompany.stream()
                             .filter(x -> x.getId().equals(scheme.getCompanyId()))
                             .forEach(item -> {
                                 if (ptlAgreementInsCompanyDtos.stream()

+ 12 - 1
src/main/java/com/ydtech/modules/scheme/service/impl/PtlSchemeServiceImpl.java

@@ -23,10 +23,12 @@ import com.ydtech.modules.scheme.service.*;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.idgen.IdGenerate;
 import org.apache.ibatis.annotations.Param;
+import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -100,9 +102,11 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
                 scheme.setProductName(schemeSaveVo.getProductName());
                 scheme.setDescription(item.getDescription());
                 scheme.setSchemeName(item.getSchemeName());
+                scheme.setPriorityLevel(item.getPriorityLevel());
                 scheme.setVehicleType(schemeSaveVo.getVehicleType());
                 scheme.setEnergyType(schemeSaveVo.getEnergyType());
                 scheme.setCarnature(schemeSaveVo.getCarnature());
+                scheme.setCreateTime(LocalDateTime.now());
                 this.save(scheme);
 
 
@@ -249,6 +253,7 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
             scheme.setVehicleType(schemeSaveVo.getVehicleType());
             scheme.setEnergyType(schemeSaveVo.getEnergyType());
             scheme.setCarnature(schemeSaveVo.getCarnature());
+            scheme.setPriorityLevel(item.getPriorityLevel());
             this.saveOrUpdate(scheme);
 
 
@@ -362,6 +367,9 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
         queryWrapper.eq(PtlScheme::getVehicleType, vehicleType);
         queryWrapper.eq(PtlScheme::getEnergyType, energyType);
         queryWrapper.eq(PtlScheme::getCarnature, carnature);
+        // 排序条件,按照优先级级别升序排序,创建时间降序排序
+        queryWrapper.orderByAsc(PtlScheme::getPriorityLevel)
+                .orderByDesc(PtlScheme::getCreateTime);
         List<PtlScheme> ptlSchemes = baseMapper.selectList(queryWrapper);
         schemeSaveVo.setCompanyId(companyId);
         schemeSaveVo.setProductId(ptlSchemes.get(0).getProductId());
@@ -374,6 +382,7 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
             productVo.setId(scheme.getId());
             productVo.setSchemeName(scheme.getSchemeName());
             productVo.setDescription(scheme.getDescription());
+            productVo.setPriorityLevel(scheme.getPriorityLevel());
             List<SchemeKindInfoVo> kinds = new ArrayList<>();
             //遍历全部options
             List<InsBusinessInsurance> businessInsurance = insBusinessInsuranceService.getBusinessInsurance();
@@ -591,7 +600,9 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
                 .eq(PtlScheme::getProductId, schemeQueryVo.getProductId())
                 .eq(PtlScheme::getVehicleType, schemeQueryVo.getVehicleType())
                 .eq(PtlScheme::getEnergyType, EnergyType.isNewEnergy(schemeQueryVo.getEnergyType()) ? "1" : "0")
-                .eq(PtlScheme::getCarnature, schemeQueryVo.getCarnature()));
+                .eq(PtlScheme::getCarnature, schemeQueryVo.getCarnature())
+                .orderByAsc(PtlScheme::getPriorityLevel)
+                .orderByDesc(PtlScheme::getCreateTime));
 
         List<CompanySchemeVo> schemeVos = new ArrayList<>();
         ptlSchemes.forEach(item -> {

+ 8 - 0
src/main/resources/application-prod.yml

@@ -423,6 +423,14 @@ chengtai:
     publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyVlpqmibguria884GdAYEuqCV4aQRl2N21+7l8Vxocoyz+M8KYyXqmlLKqApNL/U5pUVTjS6vpC6ojS+wvNbawijeMsm8r2NOlTHBnQ5vN0azjjPPtSrxgHL8/EYBa4lmBcexdmcUrUyWjAIYqfO8dlY+RuXvbiw7fBHZ7xpAvQIDAQAB
     privateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALJWWmqaJuC6uJrzzgZ0BgS6oJXhpBGXY3bX7uXxXGhyjLP4zwpjJeqaUsqoCk0v9TmlRVONLq+kLqiNL7C81trCKN4yybyvY06VMcGdDm83RrOOM8+1KvGAcvz8RgFriWYFx7F2ZxStTJaMAhip87x2Vj5G5e9uLDt8EdnvGkC9AgMBAAECgYEAsEOHdEvOV1pWMdj9bgVpGW14YQu3RSfTSFheqGkpg5aMmSk3QbYDeOB1KhZysB3Ri9tdLRqi5TkqYK/DTjUnSUMs0iMhx0XaY2z3w16AMpvuJ0FZ4S2h8oAFfOWe4F6bpUYU8qmXANAaXcMm6HjU8k1QuTbjlSOeLujl8W7zk8ECQQDlHbUQ911kWmsSo8NE4S1+dq/6T+yIGCJlXzlNh/z6giMpjp8Dzm3fxDHLeZa+DCrhpT1qe6O3oGwx3HeR/85NAkEAx0NUy6pX5WolV+YAoLNHAmcCP26wQTB7LZ7mXbxww4yNNH9CWHE9PaBuV4Ws4NxSAnRDxrgArkz5+wgqnXzUMQJAHr16orkdra43+XtBYsd3jCUufT4l9SiPzNwW2yEovw+g2h2JlkAnG8O+DpfUstD9G+NItzW5hJSgj5wN6ufQbQJACEtdND0a+4m3lDkWvZm40vjGty08WPpTpkp+/FfjucAYAJ9re5L7IZ2T+kCuOY3yO/fq+lKedKLvpOtqGrQfgQJBAJ1wMccz+1ez8qpyTWbzj2h0O+GV+YDHqJ9SwRWcSacZOeAyO7UMgIZEwoYfs4nhye7DZH9e4BfkwBmFHJKwJNs=
 
+#权益包配置
+equity:
+  api:
+    url: https://test.baoxianzhanggui.com/locallive-java/localThreeUserOrder/localThreeUserOrder/
+    appkey: 1919577508002217985
+    secret: 9725175983056a280fe78a386ab23185
+    publicKey: 3059301306072a8648ce3d020106082a811ccf5501822d03420004b7b575874a00f135b5a495ee1b314564b6272bbec1d911bf6ab38c3c0f2b90a77c2455e5faf5c1896e1204385fdf4249b5bc4e79b6774ad803b93f27cc86da93
+    privateKey: 308193020100301306072a8648ce3d020106082a811ccf5501822d04793077020101042051bffefb9021839670b2bc264b56362337e238330a1bd1ed83abbd970f1c013ca00a06082a811ccf5501822da14403420004b7b575874a00f135b5a495ee1b314564b6272bbec1d911bf6ab38c3c0f2b90a77c2455e5faf5c1896e1204385fdf4249b5bc4e79b6774ad803b93f27cc86da93
 
 xxl:
   job:

+ 13 - 4
src/main/resources/application-test.yml

@@ -251,13 +251,13 @@ upload:
   url: ${netUrl}
   username: ''
 wechat:
-  # 微信客服
+  # 微信客服(测试)
   customer:
     corp-id: wwfe67d19509d43ec5
     #    secret: lbn1DU7VhqK3dG0XDciPDXf_AdSryne84nvRhtSEGLc
-    secret: 5M_5mGONe-t4xCPlwPU-EJt53GiWaUjtbJjY5CR-dgc
-    token: btgwGK2r
-    encoding-aes-key: eevs11QeInJYRysGYnC8gK68F4CGsedM1Dn1X79cPCs
+    secret: _tb5qC-MXxYFUEMaaTEb6D_RmQtadt3UUUuvdYcrklI
+    token: hGskYOrv1XnVFtooYsX8Q2PxN
+    encoding-aes-key: cYIzKkyIJQY6wFHUTtamtKiy2uxFynTZOx6VHnvC7vI
   open:
     properties:
       jzg:
@@ -501,6 +501,15 @@ chengtai:
     publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDG5XjPzLv7/LwXmDkSS2kL4JN3B9JK6mRDxgal+K7f5GY2c3TRXSIm2ot+2ZL2Tr4nSJEkZUe98ORovYnpvgeW16MFhPAkUYHVu3rv6JKuGrJhdvkfNC/TR92oey8/Qk0YwSeOzHEf1tEfMvnE3pC8xZom4Et2W9y62+RoH22uhQIDAQAB
     privateKey: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAMbleM/Mu/v8vBeYORJLaQvgk3cH0krqZEPGBqX4rt/kZjZzdNFdIibai37ZkvZOvidIkSRlR73w5Gi9iem+B5bXowWE8CRRgdW7eu/okq4asmF2+R80L9NH3ah7Lz9CTRjBJ47McR/W0R8y+cTekLzFmibgS3Zb3Lrb5Ggfba6FAgMBAAECgYByDbKajo+Zr1L4wLyxZfbl7bECR8TqWsCGMK8tS46UKvgF720khaCI4Teu1Ps2LO9TvYQld8KNA+8mtNG57NOSQx3aaI/sH3XAsWExnNupSHs3/O0m91KMCrVfhDakpW+eXu9+BTyOQeHt5e+0R6hsUZ5OPhwOGoxBlNRWqQruXQJBAPlY2r994Yq37HV0WFofIKtRqDz5mGoL7iENZ7/TB64Qe6kbLBnq0Qha6TxyudlISYSGMzIHxqZ/gClDy5VQTUsCQQDMNASRJ9CuNkgTF/LswRJQmtVG9djzwD2W5r6QqWy7cBDOB9eenAAjmmP8R43edPdrYDuqpuvjUK5ISxkDAKFvAkAuGPM3+7m6v44DmOLMpnyPr6T+wNYgpNv9WFEZ8ZW15G44MUHR+Mt0U/pSppMdTHPrADRux2k+VswG1PXKQPJJAkAZScfXAgtBx88dLjYTQ8W03bfT1dZMOV5nNaQb3h9tBu/N1ALLzZ3mytPfBi13gxyw23YIKCvGNtOeeE5cpNNZAkBRsB9I6yogNDdYQHNiPpk+M5t043LbI+v+KAwUWqkkt81PJOqzrbxtySPmRxlAZI9flXQD5eRTvkHZWPnM/2/b
 
+#权益包配置
+equity:
+  api:
+    url: https://test.baoxianzhanggui.com/locallive-java/localThreeUserOrder/localThreeUserOrder/
+    appkey: 1919577508002217985
+    secret: 9725175983056a280fe78a386ab23185
+    publicKey: 3059301306072a8648ce3d020106082a811ccf5501822d03420004b7b575874a00f135b5a495ee1b314564b6272bbec1d911bf6ab38c3c0f2b90a77c2455e5faf5c1896e1204385fdf4249b5bc4e79b6774ad803b93f27cc86da93
+    privateKey: 308193020100301306072a8648ce3d020106082a811ccf5501822d04793077020101042051bffefb9021839670b2bc264b56362337e238330a1bd1ed83abbd970f1c013ca00a06082a811ccf5501822da14403420004b7b575874a00f135b5a495ee1b314564b6272bbec1d911bf6ab38c3c0f2b90a77c2455e5faf5c1896e1204385fdf4249b5bc4e79b6774ad803b93f27cc86da93
+
 ttqf:
   mch-id: '000000466591593'
   platform-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo/PmfNo3v8+VIT2oSUMXtZJGtGiBfqjVQAeKjppXkZ9jgzNjVbRAnWdTXKifyQQa5QhGeFCjJ9RS5WwLyZMBdwbhJJ2YkVDDXDc284CuXf5J3TDodkexfDwyPf3SvSVemRej5muhju1DOzLAyvx4GRKbDOEQqNiFxmn7HnQ2U6HsnQKa/LkB4ydogauI81q/taOcLyZsxz+uiIxYHQ2kujDBYncH3ncBeNQ7rWh7trWvCZ2sbtmUjbU2FC/cpp1oFBQbiQAuVA+4NBjobT/Ig7hGT9NiJ0elzOX5vWKvZelu6zD8z/frqXKSeyDWdjE9TB53pvCCuCiZSyOEwLJ0uwIDAQAB

+ 1 - 3
src/main/resources/mapper/modules/admin/SysWechatCustomerMapper.xml

@@ -29,12 +29,10 @@
         u.id as userId,
         c.department_id as departmentId,
         c.receptionist as receptionist,
-        c.receptionist_id as receptionistId,
-        swc.nickname as dutyCustomer
+        c.receptionist_id as receptionistId
         from sys_wechat_customer c
         left join sys_user u on u.id = c.user_id
         left join ins_upload_files f on f.id = c.avatar
-        left join sys_wechat_customer swc on swc.id = c.duty_customer_id
         <if test="nickname != null and nickname != ''">
             where c.nickname = #{nickname}
         </if>

+ 0 - 0
src/main/resources/mapper/SysWechatCustomerRecordingMapper.xml → src/main/resources/mapper/modules/admin/SysWechatCustomerRecordingMapper.xml


+ 135 - 104
src/main/resources/mapper/modules/admin/TaskStatisticsMapper.xml

@@ -8,7 +8,7 @@
         SELECT
         a.userId as "userId",
         su.name AS "userName",
-        sd.id AS "deptId",
+        a.deptId AS "deptId",
         su.leader_name AS "leaderName",
         a.sumpremium,
         a.jqpremium,
@@ -20,12 +20,14 @@
         a.riskCodeJshang,
         a.riskCodeDs,
         a.riskCodeDsan,
-        sd.management_source AS "managementSource",
+        a.managementSource AS "managementSource",
         a.distributionAmount,
         CASE WHEN a.sumpremium = 0 THEN 0  ELSE a.distributionAmount / a.sumpremium  END AS "distributionAmountRate"
         FROM (
         SELECT
         io.userid AS "userId",
+        sd.id as"deptId",
+        sd.management_source as"managementSource",
         SUM(IFNULL(jqpremium, 0) + IFNULL(sypremium, 0) + IFNULL(jypremium, 0)) AS "sumpremium",
         IFNULL(SUM(jqpremium), 0) AS "jqpremium",
         IFNULL(SUM(sypremium), 0) AS "sypremium",
@@ -44,6 +46,8 @@
         LEFT JOIN ins_orders io ON io.orderno = iac.orderno
         LEFT JOIN sys_user su ON su.id = io.userid
         LEFT JOIN ins_fee_order_new ifon ON iac.id = ifon.ins_order_no
+        LEFT JOIN sys_dept sd ON sd.id = su.dept_id
+
         WHERE
         iac.orderstatus = '3'
         AND (iac.del_flag = '1' OR io.del_flag IS NULL OR io.del_flag = 1)
@@ -63,11 +67,22 @@
                 #{item}
             </foreach>
         </if>
+        <if test="vo.deptIds != null and vo.deptIds != '' and vo.deptIds.size() > 0">
+            AND sd.id IN
+            <foreach collection="vo.deptIds" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="vo.managementSource !=null  and vo.managementSource!=''">
+            AND sd.management_source = #{vo.managementSource}
+        </if>
+        <if test="vo.deptId !=null  and vo.deptId!=''">
+            AND sd.id LIKE CONCAT('%', #{vo.deptId}, '%')
+        </if>
         GROUP BY
-        io.userid
+        io.userid ,sd.id,sd.management_source
         ) a
         LEFT JOIN sys_user su ON a.userId = su.id
-        LEFT JOIN sys_dept sd ON sd.id = su.dept_id
         LEFT JOIN sys_user_role sur ON sur.user_id = su.id
         WHERE
         1 = 1
@@ -77,9 +92,6 @@
         <if test="vo.userName !=null  and vo.userName!=''">
             AND su.name = #{vo.userName}
         </if>
-        <if test="vo.managementSource !=null  and vo.managementSource!=''">
-            AND sd.management_source = #{vo.managementSource}
-        </if>
         <choose>
             <when test='vo.managementSource == "2"'>
                 AND (sur.role_id = 20 OR sur.role_id = 21)
@@ -90,15 +102,6 @@
             <otherwise>
             </otherwise>
         </choose>
-        <if test="vo.deptIds != null and vo.deptIds != '' and vo.deptIds.size() > 0">
-            AND sd.id IN
-            <foreach collection="vo.deptIds" item="item" open="(" separator="," close=")">
-                #{item}
-            </foreach>
-        </if>
-        <if test="vo.deptId !=null  and vo.deptId!=''">
-            AND sd.id LIKE CONCAT('%', #{vo.deptId}, '%')
-        </if>
         ORDER BY
         a.sumpremium DESC,
         a.userId
@@ -118,15 +121,29 @@
         LEFT JOIN ins_orders io ON io.orderno = iac.orderno
         LEFT JOIN sys_user su ON su.id = io.userid
         LEFT JOIN ins_fee_order_new ifon ON iac.id = ifon.ins_order_no
+        LEFT JOIN sys_dept sd ON sd.id = su.dept_id
+
         WHERE
         iac.orderstatus = '3'
         AND (iac.del_flag = '1' OR io.del_flag IS NULL OR io.del_flag = 1)
         <if test="vo.signingTimeStart != null and vo.signingTimeStart!='' and vo.signingTimeEnd != null and vo.signingTimeEnd != ''">
             AND iac.signing_time BETWEEN #{vo.signingTimeStart} AND #{vo.signingTimeEnd}
         </if>
+        <if test="vo.managementSource !=null  and vo.managementSource!=''">
+            AND sd.management_source = #{vo.managementSource}
+        </if>
         <if test="vo.leaderName != null and vo.leaderName!='' ">
             AND iac.leader_name = #{vo.leaderName}
         </if>
+        <if test="vo.deptIds != null and vo.deptIds != '' and vo.deptIds.size() > 0">
+            AND sd.id IN
+            <foreach collection="vo.deptIds" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="vo.deptId !=null  and vo.deptId!=''">
+            AND sd.id LIKE CONCAT('%', #{vo.deptId}, '%')
+        </if>
         <if test="vo.enterTimeStart != null and vo.enterTimeStart!='' and vo.enterTimeEnd != null and vo.enterTimeEnd != ''">
             AND iac.createtime BETWEEN #{vo.enterTimeStart} AND #{vo.enterTimeEnd}
         </if>
@@ -137,10 +154,9 @@
             </foreach>
         </if>
         GROUP BY
-        io.userid
+        io.userid,sd.id,sd.management_source
         ) a
         LEFT JOIN sys_user su ON a.userId = su.id
-        LEFT JOIN sys_dept sd ON sd.id = su.dept_id
         LEFT JOIN sys_user_role sur ON sur.user_id = su.id
         WHERE
         1 = 1
@@ -150,9 +166,7 @@
         <if test="vo.userName !=null  and vo.userName!=''">
             AND su.name = #{vo.userName}
         </if>
-        <if test="vo.managementSource !=null  and vo.managementSource!=''">
-            AND sd.management_source = #{vo.managementSource}
-        </if>
+
         <choose>
             <when test='vo.managementSource == "2"'>
                 AND (sur.role_id = 20 OR sur.role_id = 21)
@@ -163,83 +177,97 @@
             <otherwise>
             </otherwise>
         </choose>
+
+        ) a
+    </select>
+
+    <select id="getBusinessAgentDataTotalAdd" resultType="com.ydtech.modules.admin.model.vo.BusinessAgentData">
+        SELECT
+        IFNULL(sum(sumpremium),0) as "sumpremium",
+        IFNULL(sum(a.jqpremium),0) as "jqpremium",
+        IFNULL(sum(a.sypremium),0) as "sypremium",
+        IFNULL(sum(a.taxamount),0) as "taxamount",
+        IFNULL(sum(a.jypremium),0) as "jypremium",
+        IFNULL(sum(a.exportAllFee),0) as "exportAllFee",
+        IFNULL(sum(a.entranceAllFee),0) as "entranceAllFee"
+        FROM (
+        SELECT
+        io.userid AS "userId",
+        sd.id as"deptId",
+        sd.management_source as"managementSource",
+        SUM(IFNULL(jqpremium, 0) + IFNULL(sypremium, 0) + IFNULL(jypremium, 0)) AS "sumpremium",
+        IFNULL(SUM(jqpremium), 0) AS "jqpremium",
+        IFNULL(SUM(sypremium), 0) AS "sypremium",
+        IFNULL(SUM(taxamount), 0) AS "taxamount",
+        IFNULL(SUM(jypremium), 0) AS "jypremium",
+        COUNT(CASE WHEN iac.product = '交三' THEN 1 END) AS "riskCodeJs",
+        COUNT(CASE WHEN iac.product = '单交' THEN 1 END) AS "riskCodeDj",
+        COUNT(CASE WHEN iac.product = '交商' THEN 1 END) AS "riskCodeJshang",
+        COUNT(CASE WHEN iac.product = '单商' THEN 1 END) AS "riskCodeDs",
+        COUNT(CASE WHEN iac.product = '单三' THEN 1 END) AS "riskCodeDsan",
+        ROUND(SUM(IFNULL(ifon.jq_costs_premiums, 0) + IFNULL(ifon.sy_costs_premiums, 0) + IFNULL(ifon.no_costs_premiums, 0)), 2) AS "entranceAllFee",
+        ROUND(SUM(IFNULL(jq_export_other_costs_premiums, 0) + IFNULL(jq_export_supervise_costs_premiums, 0) + IFNULL(sy_export_other_costs_premiums, 0) + IFNULL(sy_export_supervise_costs_premiums, 0) + IFNULL(no_export_other_costs_premiums, 0) + IFNULL(no_export_supervise_costs_premiums, 0)), 2) AS "exportAllFee"
+        FROM
+        ins_area_company iac
+        LEFT JOIN ins_orders io ON io.orderno = iac.orderno
+        LEFT JOIN sys_user su ON su.id = io.userid
+        LEFT JOIN ins_fee_order_new ifon ON iac.id = ifon.ins_order_no
+        LEFT JOIN sys_dept sd ON sd.id = su.dept_id
+
+        WHERE
+        iac.orderstatus = '3'
+        AND (iac.del_flag = '1' OR io.del_flag IS NULL OR io.del_flag = 1)
+        <if test="vo.signingTimeStart != null and vo.signingTimeStart!='' and vo.signingTimeEnd != null and vo.signingTimeEnd != ''">
+            AND iac.signing_time BETWEEN #{vo.signingTimeStart} AND #{vo.signingTimeEnd}
+        </if>
+        <if test="vo.enterTimeStart != null and vo.enterTimeStart!='' and vo.enterTimeEnd != null and vo.enterTimeEnd != ''">
+            AND iac.createtime BETWEEN #{vo.enterTimeStart} AND #{vo.enterTimeEnd}
+        </if>
+
+        <if test="vo.leaderName != null and vo.leaderName!='' ">
+            AND iac.leader_name = #{vo.leaderName}
+        </if>
+        <if test="vo.userIds  !=null  and vo.userIds!=''  and vo.userIds.size()>0">
+            AND su.leader_id IN
+            <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
         <if test="vo.deptIds != null and vo.deptIds != '' and vo.deptIds.size() > 0">
             AND sd.id IN
             <foreach collection="vo.deptIds" item="item" open="(" separator="," close=")">
                 #{item}
             </foreach>
         </if>
+        <if test="vo.managementSource !=null  and vo.managementSource!=''">
+            AND sd.management_source = #{vo.managementSource}
+        </if>
         <if test="vo.deptId !=null  and vo.deptId!=''">
             AND sd.id LIKE CONCAT('%', #{vo.deptId}, '%')
         </if>
+        GROUP BY
+        io.userid ,sd.id,sd.management_source
         ) a
-    </select>
-
-    <select id="getBusinessAgentDataTotalAdd" resultType="com.ydtech.modules.admin.model.vo.BusinessAgentData">
-        select
-            sum(IFNULL(jqpremium, 0) + IFNULL(sypremium, 0)+ IFNULL(jypremium, 0)) as "sumpremium",
-            IFNULL(sum(jqpremium),0) as "jqpremium",
-            IFNULL(sum(sypremium),0) as "sypremium",
-            IFNULL(sum(taxamount),0) as "taxamount",
-            IFNULL(sum(jypremium),0) as "jypremium",
-            ROUND(sum(IFNULL(ifon.jq_costs_premiums,0) + IFNULL(ifon.sy_costs_premiums,0) + IFNULL
-            (ifon.no_costs_premiums,0)),2) as "entranceAllFee",
-            ROUND(sum(IFNULL(jq_export_other_costs_premiums,0) + IFNULL(jq_export_supervise_costs_premiums,0)
-            +IFNULL(sy_export_other_costs_premiums,0) +IFNULL(sy_export_supervise_costs_premiums,0)
-            +IFNULL(no_export_other_costs_premiums,0)+IFNULL(no_export_supervise_costs_premiums,0) ),2) as "exportAllFee"
-        from ins_area_company iac
-                 left join ins_orders io on io.orderno =iac.orderno
-                 left join sys_dept sd on sd.id =io.deptid
-                 LEFT JOIN ins_fee_order_new ifon ON iac.id = ifon.ins_order_no
-        <where>
-        iac.orderstatus = '3'
-            and  (iac.del_flag = '1' )
-            <if test="vo.signingTimeStart != null and vo.signingTimeStart!='' and vo.signingTimeEnd != null and vo.signingTimeEnd != ''">
-                AND iac.signing_time BETWEEN #{vo.signingTimeStart} AND #{vo.signingTimeEnd}
-            </if>
-            <if test="vo.enterTimeStart != null and vo.enterTimeStart!='' and vo.enterTimeEnd != null and vo.enterTimeEnd != ''">
-                AND iac.createtime BETWEEN #{vo.enterTimeStart} AND #{vo.enterTimeEnd}
-            </if>
-
-            <if test="vo.days !=null  and vo.days !=''  and vo.days != 0 ">
-                and iac.createtime >= DATE_SUB(NOW(), INTERVAL #{vo.days} DAY)
-            </if>
-            <if test="vo.leaderName != null and vo.leaderName!='' ">
-                AND iac.leader_name = #{vo.leaderName}
-            </if>
-
-            <if test="vo.userName !=null  and vo.userName!=''">
-                and io.userName=#{vo.userName}
-            </if>
-
-            <if test="vo.userId !=null  and vo.userId !=''">
-                and io.userid=#{vo.userId}
-            </if>
-
-            <if test="vo.userIds  !=null  and vo.userIds!=''  and vo.userIds.size()>0">
-                and iac.leader_id in
-                <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
-                    #{item}
-                </foreach>
-            </if>
-
-            <if test="vo.deptId !=null  and vo.deptId!=''">
-                and io.deptid like concat('%',#{vo.deptId},'%')
-            </if>
-
-            <if test="vo.managementSource !=null  and vo.managementSource!=''">
-                and sd.management_source=#{vo.managementSource}
-            </if>
-            <if test="vo.deptIds != null and vo.deptIds != '' and vo.deptIds.size() > 0">
-                AND io.deptid in
-                <foreach collection="vo.deptIds" item="item" open="(" separator="," close=")">
-                    #{item}
-                </foreach>
-            </if>
-            <if test="vo.leaderName !=null  and vo.leaderName!=''">
-                and iac.leader_name=#{vo.leaderName}
-            </if>
-        </where>
+        LEFT JOIN sys_user su ON a.userId = su.id
+        LEFT JOIN sys_user_role sur ON sur.user_id = su.id
+        WHERE
+        1 = 1
+        <if test="vo.userId !=null  and vo.userId!=''">
+            AND su.id = #{vo.userId}
+        </if>
+        <if test="vo.userName !=null  and vo.userName!=''">
+            AND su.name = #{vo.userName}
+        </if>
+        <choose>
+            <when test='vo.managementSource == "2"'>
+                AND (sur.role_id = 20 OR sur.role_id = 21)
+            </when>
+            <when test='vo.managementSource == "1"'>
+                AND (sur.role_id = 19 OR sur.role_id = 21)
+            </when>
+            <otherwise>
+            </otherwise>
+        </choose>
     </select>
 
 
@@ -534,7 +562,8 @@
         SELECT
         a.userId as "userId",
         su.name AS "userName",
-        sd.id AS "deptId",
+        a.deptId AS "deptId",
+        a.managementSource AS "managementSource",
         su.leader_name AS "leaderName",
         a.sumpremium,
         a.jqpremium,
@@ -546,12 +575,14 @@
         a.riskCodeJshang,
         a.riskCodeDs,
         a.riskCodeDsan,
-        sd.management_source AS "managementSource",
+        a.managementSource AS "managementSource",
         a.distributionAmount,
         CASE WHEN a.sumpremium = 0 THEN 0  ELSE a.distributionAmount / a.sumpremium  END AS "distributionAmountRate"
         FROM (
         SELECT
         io.userid AS "userId",
+        sd.management_source AS "managementSource",
+        sd.id as "deptId",
         SUM(IFNULL(jqpremium, 0) + IFNULL(sypremium, 0) + IFNULL(jypremium, 0)) AS "sumpremium",
         IFNULL(SUM(jqpremium), 0) AS "jqpremium",
         IFNULL(SUM(sypremium), 0) AS "sypremium",
@@ -570,6 +601,7 @@
         LEFT JOIN ins_orders io ON io.orderno = iac.orderno
         LEFT JOIN sys_user su ON su.id = io.userid
         LEFT JOIN ins_fee_order_new ifon ON iac.id = ifon.ins_order_no
+        LEFT JOIN sys_dept sd ON sd.id = su.dept_id
         WHERE
         iac.orderstatus = '3'
         AND (iac.del_flag = '1' OR io.del_flag IS NULL OR io.del_flag = 1)
@@ -589,11 +621,22 @@
                 #{item}
             </foreach>
         </if>
+        <if test="vo.deptIds != null and vo.deptIds != '' and vo.deptIds.size() > 0">
+            AND sd.id IN
+            <foreach collection="vo.deptIds" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="vo.deptId !=null  and vo.deptId!=''">
+            AND sd.id LIKE CONCAT('%', #{vo.deptId}, '%')
+        </if>
+        <if test="vo.managementSource !=null  and vo.managementSource!=''">
+            AND sd.management_source = #{vo.managementSource}
+        </if>
         GROUP BY
-        io.userid
+        io.userid,sd.management_source ,sd.id
         ) a
         LEFT JOIN sys_user su ON a.userId = su.id
-        LEFT JOIN sys_dept sd ON sd.id = su.dept_id
         LEFT JOIN sys_user_role sur ON sur.user_id = su.id
         WHERE
         1 = 1
@@ -603,9 +646,6 @@
         <if test="vo.userName !=null  and vo.userName!=''">
             AND su.name = #{vo.userName}
         </if>
-        <if test="vo.managementSource !=null  and vo.managementSource!=''">
-            AND sd.management_source = #{vo.managementSource}
-        </if>
         <choose>
             <when test='vo.managementSource == "2"'>
                 AND (sur.role_id = 20 OR sur.role_id = 21)
@@ -616,15 +656,6 @@
             <otherwise>
             </otherwise>
         </choose>
-        <if test="vo.deptIds != null and vo.deptIds != '' and vo.deptIds.size() > 0">
-            AND sd.id IN
-            <foreach collection="vo.deptIds" item="item" open="(" separator="," close=")">
-                #{item}
-            </foreach>
-        </if>
-        <if test="vo.deptId !=null  and vo.deptId!=''">
-            AND sd.id LIKE CONCAT('%', #{vo.deptId}, '%')
-        </if>
         ORDER BY
         a.sumpremium DESC,
         a.userId

Some files were not shown because too many files changed in this diff