Parcourir la source

Merge branch 'master' into part1

# Conflicts:
#	pom.xml
#	tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
#	tenant/organization/src/main/java/com/jzg/organization/controller/UserController.java
#	tenant/organization/src/main/resources/mapper/SysUserJzgInfoBankCardMapper.xml
xuqiang il y a 7 mois
Parent
commit
052ac6bf5f
100 fichiers modifiés avec 1467 ajouts et 243 suppressions
  1. 13 0
      commons/src/main/java/com/jzg/commons/constants/ProductsType.java
  2. 8 0
      commons/src/main/java/com/jzg/commons/core/base/BaseController.java
  3. 33 0
      commons/src/main/java/com/jzg/commons/entity/account/po/SysUserAccountIncomeLog.java
  4. 21 0
      commons/src/main/java/com/jzg/commons/entity/dto/ApplyWithdrawParam.java
  5. 15 0
      commons/src/main/java/com/jzg/commons/entity/dto/CostManagementVo.java
  6. 3 0
      commons/src/main/java/com/jzg/commons/entity/dto/FeeAuditParam.java
  7. 3 0
      commons/src/main/java/com/jzg/commons/entity/dto/PtlAgreementCostAdd.java
  8. 7 0
      commons/src/main/java/com/jzg/commons/entity/dto/PtlAgreementCostEnd.java
  9. 12 0
      commons/src/main/java/com/jzg/commons/entity/dto/PtlAgreementCostParam.java
  10. 0 1
      commons/src/main/java/com/jzg/commons/entity/dto/SysSystemAddParam.java
  11. 2 2
      commons/src/main/java/com/jzg/commons/entity/dto/SysUserJzgInfoBankCardDto.java
  12. 17 0
      commons/src/main/java/com/jzg/commons/entity/dto/WithdrawParam.java
  13. 13 3
      commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java
  14. 5 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceRecordResult.java
  15. 1 1
      commons/src/main/java/com/jzg/commons/entity/orders/vo/FeeAuditVo.java
  16. 4 0
      commons/src/main/java/com/jzg/commons/entity/orders/vo/OrderListVo.java
  17. 2 6
      commons/src/main/java/com/jzg/commons/entity/po/PtlAgreementCostExternalType.java
  18. 4 0
      commons/src/main/java/com/jzg/commons/entity/po/PtlNewCarJudgeRules.java
  19. 33 2
      commons/src/main/java/com/jzg/commons/entity/po/SysAmountAuditing.java
  20. 66 2
      commons/src/main/java/com/jzg/commons/entity/po/SysMenu.java
  21. 3 3
      commons/src/main/java/com/jzg/commons/entity/po/SysUserJzgInfoBankCard.java
  22. 18 1
      commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteEchoVo.java
  23. 22 3
      commons/src/main/java/com/jzg/commons/entity/scheme/vo/PtlSchemeSaveVo.java
  24. 2 5
      commons/src/main/java/com/jzg/commons/entity/vo/CostExternalTypeVo.java
  25. 16 0
      commons/src/main/java/com/jzg/commons/entity/vo/MenuEntity.java
  26. 17 0
      commons/src/main/java/com/jzg/commons/entity/vo/MenuVO.java
  27. 14 0
      commons/src/main/java/com/jzg/commons/entity/vo/Meta.java
  28. 16 0
      commons/src/main/java/com/jzg/commons/entity/vo/NewCarQuery.java
  29. 2 1
      commons/src/main/java/com/jzg/commons/entity/vo/RuleAttrMappingVo.java
  30. 2 0
      commons/src/main/java/com/jzg/commons/entity/vo/SalesmanVo.java
  31. 9 1
      commons/src/main/java/com/jzg/commons/util/BuildDescUtils.java
  32. 8 1
      gateway/src/main/resources/application-test.yml
  33. 1 1
      platform/src/main/java/com/jzg/controller/AttributionTemplateController.java
  34. 12 0
      platform/src/main/java/com/jzg/controller/EsmInsCompanyController.java
  35. 64 0
      platform/src/main/java/com/jzg/controller/SysMenuController.java
  36. 4 0
      platform/src/main/java/com/jzg/mapper/EsmInsCompanyMapper.java
  37. 15 0
      platform/src/main/java/com/jzg/service/EsmInsCompanyService.java
  38. 1 1
      platform/src/main/java/com/jzg/service/PtlInsAttributionTemplateService.java
  39. 22 0
      platform/src/main/java/com/jzg/service/SysMenuService.java
  40. 5 0
      platform/src/main/java/com/jzg/service/SysUserService.java
  41. 10 0
      platform/src/main/java/com/jzg/service/impl/EsmInsCompanyServiceImpl.java
  42. 2 2
      platform/src/main/java/com/jzg/service/impl/PtlInsAttributionTemplateServiceImpl.java
  43. 122 0
      platform/src/main/java/com/jzg/service/impl/SysMenuServiceImpl.java
  44. 34 16
      platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java
  45. 6 0
      platform/src/main/java/com/jzg/service/impl/SysUserServiceImpl.java
  46. 1 1
      platform/src/main/resources/application-test.yml
  47. 5 1
      platform/src/main/resources/application.yml
  48. 38 0
      platform/src/main/resources/mapper/EsmInsCompanyMapper.xml
  49. 18 6
      platform/src/main/resources/mapper/PtlAgreementMapper.xml
  50. 4 1
      platform/src/main/resources/mapper/SysSystemMapper.xml
  51. 8 1
      tenant/costsorrule/src/main/java/com/jzg/costsorrule/controller/CostsController.java
  52. 2 2
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/service/impl/BoHaiApiRequestImpl.java
  53. 1 1
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/impl/BoHaiCrawlerRequestImpl.java
  54. 4 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/build/ChengTaiAPIQuoteResultsVoBuild.java
  55. 1 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/component/ChengTaiRequestApiComponent.java
  56. 1 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/CostsRuleClient.java
  57. 25 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java
  58. 4 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/PlatformClient.java
  59. 12 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/TimeProcessing.java
  60. 8 8
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/build/DaJiaCrawlerQuoteResultsVoBuild.java
  61. 17 9
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/build/DajiaCrawlerAuditResultsVoBuild.java
  62. 2 2
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/service/Impl/GuoRenApiRequestImpl.java
  63. 11 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/build/GuoRenCrawlerQuoteResultsVoBuild.java
  64. 16 10
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/component/GuoRenCrawlerRequestComponent.java
  65. 9 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/entity/request/GuoRenCrawlerCalculationPremiumRequest.java
  66. 1 1
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/entity/response/GuoRenCrawlerCalculationPremiumData.java
  67. 2 2
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/impl/GuoRenCrawlerQuoteProcessServiceImpl.java
  68. 58 6
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/impl/GuoRenCrawlerRequestImpl.java
  69. 1 1
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/api/service/Impl/HuaTaiApiRequestImpl.java
  70. 1 1
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/component/HtCrawlerRequestComponent.java
  71. 3 10
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/FactorMatch.java
  72. 9 8
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java
  73. 7 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeAuditController.java
  74. 8 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  75. 2 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/factory/decorator/quote/QuoteDispatchDecorator.java
  76. 103 17
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java
  77. 2 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersCarInfoServiceImpl.java
  78. 41 13
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  79. 104 26
      tenant/insurance/quotation-summary/src/main/resources/application-test.yaml
  80. 5 0
      tenant/insurance/quotation-summary/src/main/resources/application.yaml
  81. 17 5
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml
  82. 16 2
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml
  83. 15 15
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/build/YangGuangApiQuoteResultsVoBuild.java
  84. 7 1
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/componet/YangGuangApiRequestComponent.java
  85. 4 4
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/service/impl/YangGuangApiRequestImpl.java
  86. 2 2
      tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/service/impl/YongChengApiRequestImpl.java
  87. 15 3
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/entity/Request/ZmCrawlerActualValueRequest.java
  88. 6 2
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/entity/Request/ZmCrawlerQuotedPriceRequest.java
  89. 17 2
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/Impl/ZhongMeiCrawlerRequestImpl.java
  90. 11 4
      tenant/organization/src/main/java/com/jzg/organization/client/EsmInsCompanyClient.java
  91. 15 2
      tenant/organization/src/main/java/com/jzg/organization/controller/AmountAuditingController.java
  92. 26 0
      tenant/organization/src/main/java/com/jzg/organization/controller/NewCarJudgeRulesController.java
  93. 11 13
      tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java
  94. 19 1
      tenant/organization/src/main/java/com/jzg/organization/controller/UserAccountController.java
  95. 7 0
      tenant/organization/src/main/java/com/jzg/organization/controller/UserController.java
  96. 2 1
      tenant/organization/src/main/java/com/jzg/organization/mapper/NewCarJudgeRulesMapper.java
  97. 7 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementMapper.java
  98. 8 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysAmountAuditingMapper.java
  99. 9 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysUserAccountIncomeLogMapper.java
  100. 30 0
      tenant/organization/src/main/java/com/jzg/organization/service/NewCarJudgeRulesService.java

+ 13 - 0
commons/src/main/java/com/jzg/commons/constants/ProductsType.java

@@ -50,4 +50,17 @@ public enum ProductsType {
         }
         return risks;
     }
+
+    /**
+     * 是否包含单交
+     * @return
+     */
+    public static Boolean isContainDj(String productCode){
+        if(ProductsType.PT_0330.getCode().equals(productCode) ||
+                ProductsType.PT_0330034002.getCode().equals(productCode) ||
+                ProductsType.PT_0330034001.getCode().equals(productCode)){
+            return true;
+        }
+        return false;
+    }
 }

+ 8 - 0
commons/src/main/java/com/jzg/commons/core/base/BaseController.java

@@ -184,4 +184,12 @@ public class BaseController {
         return systemCode;
     }
 
+    public String getSystemCode(){
+        String userSystemCode = this.getUserSystemCode();
+        if(userSystemCode.equals("APP")){
+            userSystemCode = this.getAppSystemCode();
+        }
+        return userSystemCode;
+    }
+
 }

+ 33 - 0
commons/src/main/java/com/jzg/commons/entity/account/po/SysUserAccountIncomeLog.java

@@ -0,0 +1,33 @@
+package com.jzg.commons.entity.account.po;
+
+import com.jzg.commons.core.base.BaseModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+
+/**
+ * 用户收入来源记录表
+ */
+@Data
+public class SysUserAccountIncomeLog extends BaseModel {
+
+    private String id;
+
+    @Schema(description = "用户id")
+    private String userId;
+
+    @Schema(description = "提现金额")
+    private BigDecimal amount;
+
+    @Schema(description = "账户余额")
+    private BigDecimal balanceAmount;
+
+    @Schema(description = "来源订单id")
+    private String orderId;
+
+    @Schema(description = "钱属性")
+    private int property;
+
+}

+ 21 - 0
commons/src/main/java/com/jzg/commons/entity/dto/ApplyWithdrawParam.java

@@ -0,0 +1,21 @@
+package com.jzg.commons.entity.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jzg.commons.core.base.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Schema(description = "申请提现param")
+@Data
+public class ApplyWithdrawParam{
+
+    @Schema(description = "提现金额")
+    private BigDecimal withdrawAmount;
+
+    @Schema(description = "银行卡ID")
+    private String bankCardId;
+
+}

+ 15 - 0
commons/src/main/java/com/jzg/commons/entity/dto/CostManagementVo.java

@@ -42,6 +42,9 @@ public class CostManagementVo {
     @Schema(description = "费用规则")
     private String costRules;
 
+    @Schema(description = "费用描述")
+    private String costDescribe;
+
     @Schema(description = "生效时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private String effectiveTime;
@@ -50,6 +53,9 @@ public class CostManagementVo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private String failureTime;
 
+    @Schema(description = "优先级")
+    private Integer priorityLevel;
+
     @Schema(description = "0-生效中;1-已失效")
     private String isValid;
 
@@ -62,6 +68,15 @@ public class CostManagementVo {
     @Schema(description = "创建人")
     private String createBy;
 
+    @Schema(description = "修改时间")
+    private String updateTime;
+
+    @Schema(description = "对接人")
+    private String dockingPerson;
+
+    @Schema(description = "保司名称")
+    private String companyName;
+
     @Schema(description = "规则条件集合")
     private List<PtlAgreementCostRuleVo> ruleConditions;
 

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/dto/FeeAuditParam.java

@@ -106,4 +106,7 @@ public class FeeAuditParam extends PageRequest {
     @Schema(description = "是否是疑问订单 0.否 1.是")
     private Integer isProblem;
 
+    @Schema(description = "系统code")
+    private String systemCode;
+
 }

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/dto/PtlAgreementCostAdd.java

@@ -53,6 +53,9 @@ public class PtlAgreementCostAdd {
     @Schema(description = "是否启用0-启用-1失效")
     private String isEnabled;
 
+    @Schema(description = "优先级")
+    private Integer priorityLevel;
+
     @Schema(description = "费用类型集合")
     private List<PtlAgreementCostTypeDto> ptlAgreementCostTypeList;
 

+ 7 - 0
commons/src/main/java/com/jzg/commons/entity/dto/PtlAgreementCostEnd.java

@@ -56,6 +56,10 @@ public class PtlAgreementCostEnd {
     @NotBlank(message = "审核方式不能为空")
     private String auditMethod;
 
+    @Schema(description = "优先级")
+    @NotNull(message = "优先级不能为空")
+    private Integer priorityLevel;
+
     @Schema(description = "费用描述")
     private String costDescribe;
 
@@ -92,6 +96,9 @@ public class PtlAgreementCostEnd {
         @Schema(description = "左操作数")
         private String min;
 
+        @Schema(description = "操作数组")
+        private List<String> minArray;
+
         @Schema(description = "右操作数")
         private String max;
 

+ 12 - 0
commons/src/main/java/com/jzg/commons/entity/dto/PtlAgreementCostParam.java

@@ -42,6 +42,18 @@ public class PtlAgreementCostParam extends PageRequest {
     @Schema(description = "创建时间")
     private List<String> createTimeArr;
 
+    @Schema(description = "修改时间")
+    private List<String> updateTimeArr;
+
+    @Schema(description = "保险公司")
+    private String companyId;
+
+    @Schema(description = "对接人")
+    private String contactPerson;
+
+    @Schema(description = "是否启用")
+    private String isEnabled;
+
 
 
 }

+ 0 - 1
commons/src/main/java/com/jzg/commons/entity/dto/SysSystemAddParam.java

@@ -67,7 +67,6 @@ public class SysSystemAddParam {
 
     /** 系统图标 */
     @Schema(description = "系统图标")
-    @NotNull(message = "品牌LOGO不能为空")
     private String sysIcon;
 
     /** 联系人 */

+ 2 - 2
commons/src/main/java/com/jzg/commons/entity/dto/SysUserJzgInfoBankCardDto.java

@@ -17,8 +17,8 @@ public class SysUserJzgInfoBankCardDto implements Serializable {
     @Schema(description = "id")
     private String id;
 
-    @Schema(description = "用户id")
-    private String userId;
+    @Schema(description = "用户INFOid")
+    private String userInfoId;
 
     @Schema(description = "用户名称")
     private String name;

+ 17 - 0
commons/src/main/java/com/jzg/commons/entity/dto/WithdrawParam.java

@@ -0,0 +1,17 @@
+package com.jzg.commons.entity.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 提现参数
+ */
+
+@Data
+public class WithdrawParam {
+    @Schema(description = "提现金额")
+    private String amount;
+
+    @Schema(description = "提现的银行卡Id")
+    private String cardId;
+}

+ 13 - 3
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java

@@ -31,16 +31,18 @@ public class InsPlyIncome  extends BaseModel {
     @Schema(description = "险种")
     private String riskCode;
 
-    @Schema(description = "出单时间")
-    private String payTime;
-
+//    @Schema(description = "出单时间")
+//    private String payTime;
+//
     @Schema(description = "签单时间")
+    @TableField(exist = false)
     private String signingTime;
 
     @Schema(description = "保司ID")
     private String companyId;
 
     @Schema(description = "保司名称")
+    @TableField(exist = false)
     private String companyName;
 
     @Schema(description = "协议Id")
@@ -98,6 +100,10 @@ public class InsPlyIncome  extends BaseModel {
     @Schema(description = "应收手续费")
     private String superviseCostsPremiums;
 
+    @TableField(exist = false)
+    @Schema(description = "应收跟单费")
+    private String otherCostsPremiums;
+
     @Schema(description = "交强跟单费比例")
     private String jqOtherCostsProportion;
 
@@ -161,5 +167,9 @@ public class InsPlyIncome  extends BaseModel {
     @Schema(description = "商业起保日期")
     private String syStartDate;
 
+    @TableField(exist = false)
+    @Schema(description = "订单类型")
+    private String orderType;
+
 
 }

+ 5 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceRecordResult.java

@@ -16,6 +16,11 @@ public class InvoiceRecordResult extends PageRequest {
      */
     private String companyId;
 
+    /**
+     * 保险公司名称
+     */
+    private String companyName;
+
     /**
      * 开票方
      */

+ 1 - 1
commons/src/main/java/com/jzg/commons/entity/orders/vo/FeeAuditVo.java

@@ -27,7 +27,7 @@ public class FeeAuditVo extends BaseModel {
     private String insurName;
 
     @Schema(description = "订单类型  1 车险录入 2 待客录单 3 外部订单")
-    private Integer orderType;
+    private String orderType;
 
     @Schema(description = "业务员姓名")
     private String name;

+ 4 - 0
commons/src/main/java/com/jzg/commons/entity/orders/vo/OrderListVo.java

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.orders.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.time.LocalDateTime;
@@ -50,15 +51,18 @@ public class OrderListVo {
     private String insurMobile;
 
     //交强险起保时间
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime ciStartDate;
 
     //商业险起保时间
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime biStartDate;
 
     //车架号
     private String vinNo;
 
     // 报价时间
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime createTime;
 
     //总保费

+ 2 - 6
commons/src/main/java/com/jzg/commons/entity/po/PtlAgreementCostExternalType.java

@@ -21,12 +21,8 @@ public class PtlAgreementCostExternalType extends BaseModel {
 
     private BigDecimal export;
 
-    private BigDecimal totalCost;
+    private BigDecimal addThrow;
 
-    private BigDecimal other;
-
-    private BigDecimal level1;
-
-    private BigDecimal level5;
+    private BigDecimal keepPointRatio;
 
 }

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

@@ -2,6 +2,7 @@ package com.jzg.commons.entity.po;
 
 
 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.jzg.commons.core.base.BaseModel;
@@ -24,6 +25,9 @@ public class PtlNewCarJudgeRules{
 
     private String companyId;
 
+    @TableField(exist = false)
+    private String companyName;
+
     private String vehicleType;
 
     private String unitTypeCode;

+ 33 - 2
commons/src/main/java/com/jzg/commons/entity/po/SysAmountAuditing.java

@@ -9,9 +9,12 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jzg.commons.core.base.BaseModel;
+import com.jzg.commons.entity.dto.ApplyWithdrawParam;
+import com.jzg.commons.entity.dto.SysUserJzgInfoBankCardDto;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 /**
  * 提现申请表
@@ -20,14 +23,15 @@ import lombok.Data;
 @Data
 @Schema(description = "提现申请表")
 @AllArgsConstructor
+@NoArgsConstructor
 public class SysAmountAuditing extends BaseModel {
 
     @Schema(description = "主键")
     @TableId
     private String id;
 
-    @Schema(description = "银行卡号")
-    private String bankNumber;
+//    @Schema(description = "银行卡号")
+//    private String bankNumber;
 
     @Schema(description = "提现金额")
     private BigDecimal amount;
@@ -82,4 +86,31 @@ public class SysAmountAuditing extends BaseModel {
     @Schema(description = "系统code")
     private String systemCode;
 
+
+    /**
+     * 构造提现
+     * @param applyWithdrawParam
+     * @param sysUserAccount
+     * @param sysUserJzgInfoBankCardDto
+     * @param userId
+     */
+    public SysAmountAuditing(
+            ApplyWithdrawParam applyWithdrawParam,
+            SysUserAccount sysUserAccount,
+            SysUserJzgInfoBankCardDto sysUserJzgInfoBankCardDto,
+            String userId
+    ){
+        // 提现金额
+        this.setAmount(applyWithdrawParam.getWithdrawAmount());
+        // 当前账户金额
+        this.setBalanceAmount(sysUserAccount.getSumAmount());
+        // 提现用户
+        this.setUserId(userId);
+        // 银行卡卡号
+        this.setBankCardNum(sysUserJzgInfoBankCardDto.getBankCardNumber());
+        // 银行卡开户行
+        this.setBankName(sysUserJzgInfoBankCardDto.getBankName());
+        // 银行卡开户行
+        this.setBankNum(sysUserJzgInfoBankCardDto.getBankAddress());
+    }
 }

+ 66 - 2
commons/src/main/java/com/jzg/commons/entity/po/SysMenu.java

@@ -1,17 +1,81 @@
 package com.jzg.commons.entity.po;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.util.Date;
+import java.util.List;
+
 @Data
 public class SysMenu {
 
+    @TableId(value = "id", type = IdType.AUTO)
     private String id;
 
-    private String systemId;
+    @TableField(value = "title")
+    @Schema(description = "菜单标题")
+    private String title;
 
+    @TableField(value = "name")
+    @Schema(description = "菜单名称")
     private String name;
 
+    @TableField(value = "parent_id")
+    @Schema(description = "父菜单id")
     private String parentId;
-
+    @Schema(description = "菜单路由")
+    private String path;
+    @Schema(description = "组件")
+    private String component;
+    @Schema(description = "跳转")
+    private String redirect;
+    @Schema(description = "菜单权限")
     private String perms;
+    @Schema(description = "")
+    private String activeMenu;
+    @Schema(description = "菜单类型  0 目录 1菜单  2按钮")
+    private Integer type;
+    @Schema(description = "图标")
+    private String icon;
+    @TableField(value = "order_num")
+    @Schema(description = "排序")
+    private Integer orderNum = 0;
+    @TableField(value = "create_by")
+    private String createBy;
+    @TableField(value = "create_time")
+    private Date createTime;
+    @TableField(value = "last_update_by")
+    private String lastUpdateBy;
+    @TableField(value = "last_update_time")
+    private Date lastUpdateTime;
+    @TableField(value = "del_flag")
+    private Integer delFlag;
+    // 非数据库字段
+    @TableField(exist = false)
+    private String parentName;
+
+    // 非数据库字段
+    @TableField(exist = false)
+    private String parentUrl;
+    // 非数据库字段
+    @TableField(exist = false)
+    private Integer level;
+    // 非数据库字段
+    @TableField(exist = false)
+    @Schema(description = "子级菜单")
+    private List<SysMenu> children;
+
+    @TableField(value = "menu")
+    private Integer menu;
+
+    /***
+     * 添加菜单类型 1.车险 2. 控制台
+     */
+    @TableField(value = "sys_type")
+    @Schema(description = "菜单类型 1 车险 2.控制台")
+    private String sysType;
+
 }

+ 3 - 3
commons/src/main/java/com/jzg/commons/entity/po/SysUserJzgInfoBankCard.java

@@ -23,9 +23,9 @@ public class SysUserJzgInfoBankCard extends BaseModel {
     @Schema(description = "主键")
     private String id;
 
-    @TableField(value = "user_id")
+    @TableField(value = "user_info_id")
     @Schema(description = "user表id")
-    private String userId;
+    private String userInfoId;
 
     @TableField(value = "bank_card_number")
     @Schema(description = "银行卡号")
@@ -86,7 +86,7 @@ public class SysUserJzgInfoBankCard extends BaseModel {
 
     public SysUserJzgInfoBankCard(String userId,String bankCardNumber,String bankName,String systemCode){
         this.id = IdGenerate.nextId();
-        this.userId = userId;
+        this.userInfoId = userId;
         this.bankCardNumber = bankCardNumber;
         this.bankName = bankName;
         this.isDefault = false;

+ 18 - 1
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteEchoVo.java

@@ -3,15 +3,18 @@ package com.jzg.commons.entity.quote.vo.aggregated;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.jzg.commons.constants.ProductsType;
 import com.jzg.commons.constants.quote.enums.quote.RiskCode;
 import com.jzg.commons.entity.orders.po.InsOrderAdjustInfo;
 import com.jzg.commons.entity.orders.po.InsOrdersQrcode;
 import com.jzg.commons.entity.po.EsmInsCompany;
 import com.jzg.commons.entity.po.InsCompanyClause;
 import com.jzg.commons.entity.quote.vo.AccidentalDrivingVo;
+import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
+import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
 import com.jzg.commons.entity.scheme.vo.PtlAgreementInsCompanyVo;
 import com.jzg.commons.entity.vo.ImagesVo;
@@ -189,7 +192,8 @@ public class QuoteEchoVo extends QuoteVo {
     /**
      * 影像资料
      */
-    private List<ImagesVo> imageVoList;
+//    private List<ImagesVo> imageVoList;
+    private List<InsuranceImageVo> imageVoList;
 
     /**
      * 费用信息
@@ -338,7 +342,20 @@ public class QuoteEchoVo extends QuoteVo {
                 this.setBiRiskInfoVo(riskInfoVo);
             }
         });
+        // 添加交强险种信息
+        if(ProductsType.isContainDj(insOrdersVo.getProductId())){
+            KindInfoVo jqKindInfoVo = new KindInfoVo();
+            jqKindInfoVo.setKindCode("J1");
+            jqKindInfoVo.setKindName("机动车交通事故责任强制保险");
+            if(Objects.nonNull(insOrdersVo.getInsOrdersCosts().getJqPremium())) {
+                jqKindInfoVo.setPremium(insOrdersVo.getInsOrdersCosts().getJqPremium().toString());
+            }
+            jqKindInfoVo.setAmount("200000");
+            jqKindInfoVo.setServiceTimes("200000");
+            jqKindInfoVo.setUnitAmount("200000");
+            insOrdersVo.getKindInfoVo().add(0,jqKindInfoVo);
 
+        }
         this.setKindInfoVo(insOrdersVo.getKindInfoVo());
         this.setAccidentalDrivings(insOrdersVo.getAccidentalDrivings());
         this.setVehicleAndVesselTaxVo(insOrdersVo.getVehicleAndVesselTaxVo());

+ 22 - 3
commons/src/main/java/com/jzg/commons/entity/scheme/vo/PtlSchemeSaveVo.java

@@ -196,16 +196,21 @@ public class PtlSchemeSaveVo {
             }
             if ("checkbox".equals(ptlAgreementUndwrtRulesAttr.getAttrType()) || "select".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
                 if(linkList.get(i).getMinArray() != null && linkList.get(i).getMinArray().length > 0){
-                    desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含").append(String.join(",",Arrays.asList(linkList.get(i).getMinArray()))).append("\n");
+//                    desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含").append(String.join(",",Arrays.asList(linkList.get(i).getMinArray()))).append("\n");
+                    desc.append(checkBoxIdentifying(ptlAgreementUndwrtRulesAttr, linkList.get(i))).append("\n");
                 }else{
                     desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含").append(linkList.get(i).getMin()).append("\n");
                 }
             }
             if ("inputTag".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
                 if (linkList.get(i).getOperator() != null && linkList.get(i).getOperator().equals("1")) {
-                    desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含").append(linkList.get(i).getMin()).append("\n");
+                    for(int k=0; k< linkList.get(i).getMinArray().length;k++) {
+                        desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含").append(linkList.get(i).getMinArray()[k]).append("\n");
+                    }
                 } else {
-                    desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("不包含").append(linkList.get(i).getMin()).append("\n");
+                    for(int k=0; k< linkList.get(i).getMinArray().length;k++) {
+                        desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("不包含").append(linkList.get(i).getMinArray()[k]).append("\n");
+                    }
                 }
             }
         }
@@ -217,6 +222,20 @@ public class PtlSchemeSaveVo {
         return ptlAgreementUndwrtRulesAttr.getAttrName() + "为" + ptlAgreementUndwrtRulesDictLabal.getName();
     }
 
+    private String checkBoxIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementUndwrtRulesAttr ptlAgreementProductCostsAttrLink) {
+        String[] minArray = ptlAgreementProductCostsAttrLink.getMinArray();
+        StringBuilder result = new StringBuilder();
+        result.append(ptlAgreementUndwrtRulesAttr.getAttrName());
+        result.append("包含");
+        for(int i=0;i<minArray.length;i++) {
+            int finalI = i;
+            PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream()
+                    .filter(x -> x.getCode().equals(minArray[finalI])).findAny().get();
+            result.append(ptlAgreementUndwrtRulesDictLabal.getName());
+        }
+        return result.toString();
+    }
+
     private String inputNumberIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementUndwrtRulesAttr ptlAgreementProductCostsAttrLink) {
         if ("1".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
             return ptlAgreementUndwrtRulesAttr.getAttrName() + "范围值" + ptlAgreementProductCostsAttrLink.getMin() + "到" + ptlAgreementProductCostsAttrLink.getMax();

+ 2 - 5
commons/src/main/java/com/jzg/commons/entity/vo/CostExternalTypeVo.java

@@ -16,12 +16,9 @@ public class CostExternalTypeVo {
 
     private BigDecimal export;
 
-    private BigDecimal totalCost;
+    private BigDecimal addThrow;
 
-    private BigDecimal other;
+    private BigDecimal keepPointRatio;
 
-    private BigDecimal level1;
-
-    private BigDecimal level5;
 
 }

+ 16 - 0
commons/src/main/java/com/jzg/commons/entity/vo/MenuEntity.java

@@ -0,0 +1,16 @@
+package com.jzg.commons.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class MenuEntity {
+    private Integer id;
+    private Integer parentId;
+    private String name;
+    private String path;
+    private String component;
+    private String componentName;
+    private String icon;
+    private String activeMenu;
+    private Integer hidden;
+}

+ 17 - 0
commons/src/main/java/com/jzg/commons/entity/vo/MenuVO.java

@@ -0,0 +1,17 @@
+package com.jzg.commons.entity.vo;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class MenuVO {
+    private Integer id;
+    private String path;
+    private String name;
+    private String title;
+    private String component;
+    private Meta meta;
+    private List<MenuVO> children = new ArrayList<>();
+}

+ 14 - 0
commons/src/main/java/com/jzg/commons/entity/vo/Meta.java

@@ -0,0 +1,14 @@
+package com.jzg.commons.entity.vo;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class Meta {
+    private String title;
+    private String icon;
+    private Boolean menu;
+    private String activeMenu;
+}

+ 16 - 0
commons/src/main/java/com/jzg/commons/entity/vo/NewCarQuery.java

@@ -0,0 +1,16 @@
+package com.jzg.commons.entity.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.core.base.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 新车查询接口
+ */
+@Data
+public class NewCarQuery extends PageRequest {
+    @Schema
+    private String companyId;
+
+}

+ 2 - 1
commons/src/main/java/com/jzg/commons/entity/vo/RuleAttrMappingVo.java

@@ -48,7 +48,8 @@ public class RuleAttrMappingVo {
         //新车购置价
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("PurchasePriceofNewVehicle", insOrdersCarInfo.getPurchasePrice().toString()));
         //车辆用途
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleUseCode", VehicleUseCode.getByCode(insOrdersCarInfo.getVehicleUseCode())));
+//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleUseCode", VehicleUseCode.getByCode(insOrdersCarInfo.getVehicleUseCode())));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleUseCode", insOrdersCarInfo.getVehicleUseCode()));
         //车辆种类
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarNatureCode", insOrdersCarInfo.getCarNatureCode()));
         //车辆类型

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/vo/SalesmanVo.java

@@ -9,6 +9,8 @@ import lombok.Data;
 
 @Data
 public class SalesmanVo {
+    private String id;
+
     private String name;
 
     private String deptName;

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

@@ -31,7 +31,15 @@ public class BuildDescUtils {
             } else if ("radio".equals(attrType)) {
                 desc.append(radioIdentifying(ptlAgreementUndwrtRulesAttr, link)).append(",");
             } else if ("checkbox".equals(attrType) || "select".equals(attrType)) {
-                desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含").append(link.getMin()).append(",");
+                if(link.getMinArray() != null && link.getMinArray().length > 0){
+                    desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含");
+                    for (int k=0 ; k<link.getMinArray().length; k++){
+                        desc.append(link.getMinArray()[k]).append(",");
+                    }
+
+                }else {
+                    desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含").append(link.getMin()).append(",");
+                }
             } else if ("inputTag".equals(attrType)) {
                 if (link.getOperator() != null && "1".equals(link.getOperator())) {
                     desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含").append(link.getMin()).append(",");

+ 8 - 1
gateway/src/main/resources/application-test.yml

@@ -1,6 +1,6 @@
 spring:
   minio:
-    url: http://192.168.0.250:9000
+    url: http://test-api.baoxianzhanggui.com
     access-key: v7Zb8XhyLcYNcSHlxvyK
     secret-key: 58YibMwpxGKtXcekPL065OM4GonC1hf2tFMjI9EN
     bucket-name: jzg
@@ -89,6 +89,10 @@ spring:
                   - /appManage/**
                   - /version/**
                   - /userAccount/**
+                  - /newCarJudgeRules/**
+                  - /account/**
+                  - /accountCard/**
+                  - /amountAuditing/**
 
         - id: summary_route
           uri: http://192.168.0.250:9898/
@@ -102,6 +106,9 @@ spring:
                   - /unify/**
                   - /order/taskImages/**
                   - /order/qrCode/**
+                  - /orderTrack/**
+                  - /feeAudit/**
+                  - /adjust/**
 
         - id: costsorrule_route
           uri: http://192.168.0.250:9085/

+ 1 - 1
platform/src/main/java/com/jzg/controller/AttributionTemplateController.java

@@ -66,7 +66,7 @@ public class AttributionTemplateController {
      */
     @GetMapping("/getAgreementAttributionByCompanyId")
     @Operation(summary = "获取协议属性信息")
-    public HttpResult<PtlAgreementAttribution> getAgreementAttributionByCompanyId(String companyId) {
+    public HttpResult<List<PtlAgreementAttribution>> getAgreementAttributionByCompanyId(String companyId) {
         return ptlInsAttributionTemplateService.getAgreementAttributionByCompanyId(companyId);
     }
 

+ 12 - 0
platform/src/main/java/com/jzg/controller/EsmInsCompanyController.java

@@ -434,4 +434,16 @@ public class EsmInsCompanyController extends BaseController {
         return result ?  HttpResult.ok("更新保司排序成功") : HttpResult.error("更新保司排序失败");
     }
 
+    @Operation(summary = "获取保司的所有下级id")
+    @PostMapping(value = "getParentIds")
+    public HttpResult getParentIds(@RequestBody List<String> companyIds){
+        return HttpResult.ok(esmInsCompanyService.getParentIds(companyIds));
+    }
+
+    @Operation(summary = "查找顶级保司id")
+    @PostMapping(value = "getTopCompanyId")
+    public HttpResult getTopCompanyId(@RequestBody String companyId){
+        return HttpResult.ok(esmInsCompanyService.getTopCompanyId(companyId));
+    }
+
 }

+ 64 - 0
platform/src/main/java/com/jzg/controller/SysMenuController.java

@@ -0,0 +1,64 @@
+package com.jzg.controller;
+
+import com.jzg.commons.core.base.BaseController;
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.po.SysMenu;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.service.SysMenuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 菜单控制器
+ *
+ * @author Yasepix
+ * @date Oct 29, 2018
+ */
+@RestController
+@RequestMapping("menu")
+public class SysMenuController extends BaseController {
+
+    @Autowired
+    private SysMenuService sysMenuService;
+
+
+    @PostMapping(value = "/save")
+    public HttpResult save(@RequestBody SysMenu record) {
+        record.setSysType("1");
+        if (StringUtils.isNullOrEmpty(record.getId()) || record.getId().equalsIgnoreCase("0")) {
+            return HttpResult.ok(sysMenuService.save(record));
+        } else {
+            return HttpResult.ok(sysMenuService.updateById(record));
+        }
+    }
+
+
+    @PostMapping(value = "/delete")
+    public HttpResult delete(@RequestBody List<SysMenu> records) {
+        List<String> ids = records.stream().map(SysMenu::getId).collect(Collectors.toList());
+        return HttpResult.ok(sysMenuService.removeBatchByIds(ids));
+    }
+
+
+    @GetMapping(value = "/findNavTree")
+    public HttpResult findNavTree(@RequestParam String userName) {
+        return HttpResult.ok(sysMenuService.findTree(userName, 1));
+    }
+
+
+    @GetMapping(value = "/findMenuTree")
+    public HttpResult findMenuTree() {
+
+        return HttpResult.ok(sysMenuService.findTree(getUserName(), 0));
+    }
+
+    @GetMapping(value = "/getAllButtons")
+    public HttpResult getAllButtons(){
+        return HttpResult.ok(sysMenuService.getAllButtons());
+    }
+
+
+}

+ 4 - 0
platform/src/main/java/com/jzg/mapper/EsmInsCompanyMapper.java

@@ -62,4 +62,8 @@ public interface EsmInsCompanyMapper extends BaseMapper<EsmInsCompany> {
     List<EsmInsCompanyResVo> leftList(EsmInsCompanyReq req);
 
     List<EsmInsCompanyVo> findTree(EsmInsCompanyReq req);
+
+    List<String> getParentIds(List<String> companyIds);
+
+    String getTopCompanyId(String companyId);
 }

+ 15 - 0
platform/src/main/java/com/jzg/service/EsmInsCompanyService.java

@@ -129,6 +129,21 @@ public interface EsmInsCompanyService extends IService<EsmInsCompany> {
      * @return
      */
     boolean updateCompanySort(List<EsmInsCompany> companyList, String systemCode);
+
+    /**
+     * 获取所有下级
+     * @param companyIds
+     * @return
+     */
+    List<String> getParentIds(List<String> companyIds);
+
+
+    /**
+     * 获取顶级保司id
+     * @param companyId
+     * @return
+     */
+    String getTopCompanyId(String companyId);
 }
 
 

+ 1 - 1
platform/src/main/java/com/jzg/service/PtlInsAttributionTemplateService.java

@@ -51,5 +51,5 @@ public interface PtlInsAttributionTemplateService extends IService<PtlInsAttribu
      */
     HttpResult<PtlAgreementAttribution> getAgreementAttribution(String agreementId);
 
-    HttpResult<PtlAgreementAttribution> getAgreementAttributionByCompanyId(String companyId);
+    HttpResult<List<PtlAgreementAttribution>> getAgreementAttributionByCompanyId(String companyId);
 }

+ 22 - 0
platform/src/main/java/com/jzg/service/SysMenuService.java

@@ -0,0 +1,22 @@
+package com.jzg.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzg.commons.entity.po.SysMenu;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+public interface SysMenuService extends IService<SysMenu> {
+    public List<SysMenu> findTree(String userName, int menuType);
+
+    public List<SysMenu> findByUser(String userName);
+
+    public List<String> getAllButtons();
+
+
+}
+
+
+

+ 5 - 0
platform/src/main/java/com/jzg/service/SysUserService.java

@@ -104,4 +104,9 @@ public interface SysUserService extends IService<SysUser> {
      * @return
      */
     List<SysUserVo> getUserInfo(SysUserVo sysUserVo);
+
+    /**
+     * 通过手机号查询用户
+     */
+    SysUser getUserByMobile(String mobile);
 }

+ 10 - 0
platform/src/main/java/com/jzg/service/impl/EsmInsCompanyServiceImpl.java

@@ -344,6 +344,16 @@ public class EsmInsCompanyServiceImpl extends ServiceImpl<EsmInsCompanyMapper, E
         esmInsCompanyTenantSortMapper.insert(companyTenantSorts);
         return true;
     }
+
+    @Override
+    public List<String> getParentIds(List<String> companyIds) {
+        return baseMapper.getParentIds(companyIds);
+    }
+
+    @Override
+    public String getTopCompanyId(String companyId) {
+        return baseMapper.getTopCompanyId(companyId);
+    }
 }
 
 

+ 2 - 2
platform/src/main/java/com/jzg/service/impl/PtlInsAttributionTemplateServiceImpl.java

@@ -128,12 +128,12 @@ public class PtlInsAttributionTemplateServiceImpl extends ServiceImpl<PtlInsAttr
     }
 
     @Override
-    public HttpResult<PtlAgreementAttribution> getAgreementAttributionByCompanyId(String companyId) {
+    public HttpResult<List<PtlAgreementAttribution>> getAgreementAttributionByCompanyId(String companyId) {
         EsmInsCompany company = esmInsCompanyService.getById(companyId);
         AssertionUtils.isEmpty(company, "保司不存在");
         LambdaQueryWrapper<PtlAgreementAttribution> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(PtlAgreementAttribution::getInsCompanyId,companyId);
-        PtlAgreementAttribution ptlAgreementAttribution = agreementAttributionMapper.selectOne(wrapper);
+        List<PtlAgreementAttribution> ptlAgreementAttribution = agreementAttributionMapper.selectList(wrapper);
         AssertionUtils.isEmpty(ptlAgreementAttribution, "账号归属信息查询失败");
         return HttpResult.ok(ptlAgreementAttribution);
     }

+ 122 - 0
platform/src/main/java/com/jzg/service/impl/SysMenuServiceImpl.java

@@ -0,0 +1,122 @@
+package com.jzg.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzg.commons.entity.po.SysMenu;
+import com.jzg.mapper.SysMenuMapper;
+import com.jzg.service.SysMenuService;
+import com.jzg.service.SysUserService;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+@Service
+@RequiredArgsConstructor
+public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
+        implements SysMenuService {
+
+    private final SysUserService sysUserService;
+
+    private final SysMenuMapper sysMenuMapper;
+
+
+    @Override
+    public List<SysMenu> findTree(String userName, int menuType) {
+        List<SysMenu> sysMenus = new ArrayList<>();
+
+        List<SysMenu> menus = findByUser(userName);
+        for (SysMenu menu : menus) {
+            if (menu.getParentId() == null || menu.getParentId().equalsIgnoreCase("0")) {
+                menu.setLevel(0);
+                if (!exists(sysMenus, menu)) {
+                    sysMenus.add(menu);
+                }
+            }
+        }
+        sysMenus.sort((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()));
+        findChildren(sysMenus, menus, menuType);
+        return sysMenus;
+    }
+
+    @Override
+    public List<SysMenu> findByUser(String userName) {
+         LambdaQueryWrapper<SysMenu> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(SysMenu::getDelFlag, 0);
+        lqw.eq(SysMenu::getSysType, 1);
+        return list(lqw);
+    }
+
+    @Override
+    public List<String> getAllButtons() {
+        LambdaQueryWrapper<SysMenu> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(SysMenu::getType,"3");
+        List<SysMenu> sysMenus = baseMapper.selectList(lambdaQueryWrapper);
+        List<String> perms = new ArrayList<>();
+        sysMenus.forEach(item->{
+            perms.add(item.getPerms());
+        });
+        return perms;
+    }
+
+    private void findChildren(List<SysMenu> SysMenus, List<SysMenu> menus, int menuType) {
+
+        for (SysMenu SysMenu : SysMenus) {
+            List<SysMenu> children = new ArrayList<>();
+            for (SysMenu menu : menus) {
+                if (menuType == 1 && menu.getType() == 2) {
+                    // 如果是获取类型不需要按钮,且菜单类型是按钮的,直接过滤掉
+                    continue;
+                }
+                if (SysMenu.getId() != null && SysMenu.getId().equals(menu.getParentId())) {
+                    menu.setParentName(SysMenu.getName());
+                    menu.setLevel(SysMenu.getLevel() + 1);
+                    if (!exists(children, menu)) {
+                        children.add(menu);
+                    }
+                }
+            }
+            SysMenu.setChildren(children);
+            children.sort((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()));
+            findChildren(children, menus, menuType);
+        }
+    }
+
+    private boolean exists(List<SysMenu> sysMenus, SysMenu sysMenu) {
+        boolean exist = false;
+        for (SysMenu menu : sysMenus) {
+            if (menu.getId().equals(sysMenu.getId())) {
+                exist = true;
+            }
+        }
+        return exist;
+    }
+
+    private void addParentMenu(List<SysMenu>   menus) {
+        List<String> menuIds = menus.stream().map(SysMenu::getId).collect(Collectors.toList()); //menuIds
+        for (String menuId : menuIds) {
+            this.addParentId(menuId,menuIds,menus);
+        }
+    }
+
+    private void addParentId(String menuId, List<String> menuIds, List<SysMenu> menus) {
+        SysMenu sysMenu = baseMapper.selectById(menuId);
+        if(ObjectUtils.isNotEmpty(sysMenu)){
+            if( !menuIds.contains(sysMenu.getParentId())){
+                menus.add(sysMenu);
+                this.addParentId(sysMenu.getParentId(),menuIds,menus);
+            }
+        }
+    }
+
+
+}
+
+
+

+ 34 - 16
platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java

@@ -81,6 +81,9 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
     @Autowired
     private SysUserJzgInfoSalesmanMapper sysUserJzgInfoSalesmanMapper;
 
+    @Autowired
+    SysUserService sysUserService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     @IgnoreTenant
@@ -300,7 +303,11 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
                 .eq(SysUserJzgInfo::getIsDelete, YesNoEnum.NO.getCode())
                 .eq(SysUserJzgInfo::getSystemCode, system.getSysCode())
         );
-        vo.setUserName(info.getName());
+        if(Objects.isNull(info)){
+            vo.setUserName(user.getUsername());
+        }else{
+            vo.setUserName(info.getName());
+        }
         vo.setUserAccount(user.getMobile());
         return vo;
     }
@@ -419,16 +426,11 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void sysEdit(SysSystemEditParam param) {
+        SysUser sysUser = sysUserService.getUserByMobile(param.getUserAccount());
         SysSystem sysSystem = new SysSystem();
         BeanUtils.copyProperties(param, sysSystem);
-        updateById(sysSystem);
-        List<SysUser> userList = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
-                .eq(SysUser::getMobile, param.getUserAccount())
-        );
-        SysUser sysUser;
-        if(CollUtil.isNotEmpty(userList)){
-            sysUser = userList.get(0);
-            sysUser.setUsername(param.getUserName());
+
+        if(Objects.nonNull(sysUser)){
             sysUserMapper.updateById(sysUser);
             //修改顶级机构
             SysDept sysDept = sysDeptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
@@ -442,17 +444,29 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
             sysUser = new SysUser(param);
             boolean mobileExists = this.isExistsMobile(sysUser.getMobile());
             if(mobileExists){throw new SystemException("管理员手机号重复!");}
-            boolean nameExists = this.isExistsUserName(sysUser.getUsername());
-            if(nameExists){throw new SystemException("管理员用户名重复!");}
+//            boolean nameExists = this.isExistsUserName(sysUser.getUsername());
+//            if(nameExists){throw new SystemException("管理员用户名重复!");}
             sysUserMapper.insert(sysUser);
 
             // 新建顶级机构
-            SysDept sysDept = new SysDept(sysSystem);
-            sysDeptMapper.insert(sysDept);
+            SysDept sysDept = sysDeptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
+                    .eq(SysDept::getSystemCode, sysSystem.getSysCode())
+                    .eq(SysDept::getParentId, "0"));
+
+            if(Objects.isNull(sysDept)) {
+                sysDept = new SysDept(sysSystem);
+                sysDeptMapper.insert(sysDept);
+            }else{
+                SysDept upDept = new SysDept(sysSystem);
+                upDept.setId(sysDept.getId());
+                sysDeptMapper.updateById(upDept);
+            }
             // 新增用户机构关联信息
             SysUserJzgInfo info = new SysUserJzgInfo(param.getUserName(), sysUser,sysSystem.getSysCode(), sysDept.getId());
             sysUserJzgInfoMapper.insert(info);
         }
+        sysSystem.setUserId(sysUser.getId());
+        updateById(sysSystem);
     }
 
     @Override
@@ -575,8 +589,11 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
         if(busPerms.getQuoteCompany() == 2){
             companyIds = busPerms.getQuoteCompanyList();
         }
-        List<EsmInsCompany> companyList = baseMapper.getCompanyList(companyIds);
-
+        List<EsmInsCompany> companyList = new ArrayList<>();
+//        if(!companyIds.isEmpty()) {
+        companyList = baseMapper.getCompanyList(companyIds);
+//        }
+        System.out.printf("------------------------------------------------------------1");
         // 根据用户权限获取 可使用的协议
         List<String> companyIdList = companyList.stream().map(x -> x.getId()).collect(Collectors.toList());
         String userDeptId = baseController.getUserDeptId();
@@ -584,11 +601,12 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
             SysUserJzgInfo userByUserId = sysUserJzgInfoService.getUserByUserId(baseController.getUserId(), systemCode);
             userDeptId = userByUserId.getDeptId();
         }
+        System.out.printf("------------------------------------------------------------2");
         List<PtlAgreement> userAgreement = ptlAgreementService.getUserAgreementByCompanyIds(userDeptId, companyIdList);
 
         Map<String, List<PtlAgreement>> groupedMap = userAgreement.stream()
                 .collect(Collectors.groupingBy(PtlAgreement::getCompanyId));
-
+        System.out.printf("------------------------------------------------------------3");
         companyList.forEach(company->{
             if(groupedMap.containsKey(company.getId())){
                 company.setAgreements(groupedMap.get(company.getId()));

+ 6 - 0
platform/src/main/java/com/jzg/service/impl/SysUserServiceImpl.java

@@ -272,6 +272,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
     public List<SysUserVo> getUserInfo(SysUserVo sysUserVo) {
         return baseMapper.getUserInfo(sysUserVo);
     }
+
+    @Override
+    public SysUser getUserByMobile(String mobile) {
+        return baseMapper.selectOne(new LambdaQueryWrapper<SysUser>()
+                .eq(SysUser::getMobile,mobile));
+    }
 }
 
 

+ 1 - 1
platform/src/main/resources/application-test.yml

@@ -8,7 +8,7 @@ spring:
       password: nacos
       config:
         file-extension: yaml
-        namespace: bfe09cf4-508a-4443-acfa-b354be6f4bac
+        namespace: bb8f915c-82b0-4f0d-9e9e-03aa629f2d45
         group: DEFAULT_GROUP
       discovery:
         namespace: bb8f915c-82b0-4f0d-9e9e-03aa629f2d45

+ 5 - 1
platform/src/main/resources/application.yml

@@ -43,7 +43,6 @@ tenant:
     - esm_ins_company
     - ptl_crawler_api
     - ins_company_clause
-    - ptl_agreement_attribution
     - ptl_agreement_url
     - jyx_config
     - jyx_blame
@@ -54,6 +53,11 @@ tenant:
     - qr_barcode_config
     - ptl_scheme_info
     - ptl_agreement_dept
+    - sys_user_jzg_info_salesman
+
+    # 临时表
+    - company_tree
+    - t
 
   ignoreLoginNames:
 

+ 38 - 0
platform/src/main/resources/mapper/EsmInsCompanyMapper.xml

@@ -211,5 +211,43 @@
         </if>
     </select>
 
+    <select id="getParentIds" resultType="String">
+        WITH RECURSIVE t AS (
+            SELECT id
+            FROM esm_ins_company
+            WHERE id in
+        <foreach collection="companyIds"
+                 item="id"
+                 open="("
+                 close=")"
+                 separator=",">
+            #{id}
+        </foreach>
+            UNION ALL
+
+            SELECT c.id
+            FROM esm_ins_company c
+                     JOIN t ON c.parent_id = t.id
+        )
+        SELECT *
+        FROM t;
+    </select>
+
+    <select id="getTopCompanyId" resultType="String">
+        WITH RECURSIVE t AS (
+            SELECT id, parent_id
+            FROM esm_ins_company
+            WHERE id = ${companyId}
+
+            UNION ALL
+            SELECT c.id, c.parent_id
+            FROM esm_ins_company c
+                     INNER JOIN t pt ON c.id = pt.parent_id
+        )
+        SELECT id
+        FROM t
+        where parent_id = 0;
+    </select>
+
 
 </mapper>

+ 18 - 6
platform/src/main/resources/mapper/PtlAgreementMapper.xml

@@ -3,13 +3,25 @@
 <mapper namespace="com.jzg.mapper.PtlAgreementMapper">
 
     <select id="getUserAgreementByCompanyIds" resultType="com.jzg.commons.entity.po.PtlAgreement">
+        WITH RECURSIVE company_tree AS (
+        SELECT id
+        FROM esm_ins_company
+        WHERE id IN
+        <foreach collection="companyIds" item="cid" open="(" separator="," close=")">
+            #{cid}
+        </foreach>
+
+        UNION ALL
+
+        SELECT c.id
+        FROM esm_ins_company c
+        JOIN company_tree ct ON c.parent_id = ct.id
+        )
         SELECT pa.*
         FROM ptl_agreement_dept pad
-                 JOIN ptl_agreement pa ON pad.agreement_id = pa.id
-        WHERE pa.company_id IN
-        <foreach collection="companyIds" item="companyId" open="(" separator="," close=")">
-            #{companyId}
-        </foreach>
-          AND pad.dept_id = #{deptId}
+        JOIN ptl_agreement pa ON pad.agreement_id = pa.id
+        JOIN company_tree ct ON pa.company_id = ct.id
+        WHERE pa.is_delete = 0
+        AND pad.dept_id = #{deptId}
     </select>
 </mapper>

+ 4 - 1
platform/src/main/resources/mapper/SysSystemMapper.xml

@@ -73,7 +73,10 @@
         <include refid="selectSystemVo"/>
         <where>
             <if test="sysSystemVo.searchValue != null and sysSystemVo.searchValue != ''">
-                and ( sys_name = #{sysSystemVo.searchValue} or sys_code = #{sysSystemVo.searchValue})
+                AND (
+                sys_name LIKE concat('%', #{sysSystemVo.searchValue}, '%')
+                OR sys_code LIKE concat('%', #{sysSystemVo.searchValue}, '%')
+                )
             </if>
             and is_tenant = 1 and parent_id <![CDATA[ <> ]]> '0' and is_delete = 0
         </where>

+ 8 - 1
tenant/costsorrule/src/main/java/com/jzg/costsorrule/controller/CostsController.java

@@ -1,13 +1,20 @@
 package com.jzg.costsorrule.controller;
 
 import com.jzg.commons.core.base.BaseController;
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.costs.vo.ValidateSchemeRuleVo;
+import com.jzg.commons.entity.dto.CostAgreementParam;
+import com.jzg.commons.entity.vo.CostsListVo;
 import com.jzg.costsorrule.service.CostsService;
+import com.jzg.quotation.commons.client.OrgClient;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
- * 协议管理接口
+ * 费用匹配接口
  *
  * @author tz
  */

+ 2 - 2
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/service/impl/BoHaiApiRequestImpl.java

@@ -207,10 +207,10 @@ public class BoHaiApiRequestImpl implements BoHaiApiRequest {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
                 StringBuilder sb = new StringBuilder();
                 if (null != underwritingResponse.getData().getTrafficResultMsg()) {
-                    sb.append(String.format("交强险提示信息:s%", underwritingResponse.getData().getTrafficResultMsg()));
+                    sb.append(String.format("交强险提示信息:%s", underwritingResponse.getData().getTrafficResultMsg()));
                 }
                 if (null != underwritingResponse.getData().getBusinessResultMsg()) {
-                    sb.append(String.format("商业险提示信息:s%", underwritingResponse.getData().getBusinessResultMsg()));
+                    sb.append(String.format("商业险提示信息:%s", underwritingResponse.getData().getBusinessResultMsg()));
                 }
                 underwritingResultsVo.setUnderwritingResult(sb.toString());
             } else if ("A0".equals(jqStatus) || "A0".equals(syStatus)) {

+ 1 - 1
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/impl/BoHaiCrawlerRequestImpl.java

@@ -633,7 +633,7 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
             StringBuilder sb = new StringBuilder();
             if (null != boHaiUnderwritingResponse.getHead().getReturnMessage()) {
-                sb.append(String.format("错误信息:s%", boHaiUnderwritingResponse.getHead().getReturnMessage()));
+                sb.append(String.format("错误信息:%s", boHaiUnderwritingResponse.getHead().getReturnMessage()));
             }
             underwritingResultsVo.setUnderwritingResult(sb.toString());
         }

+ 4 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/build/ChengTaiAPIQuoteResultsVoBuild.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.chengtai.api.build;
 
+import com.alibaba.fastjson.JSONArray;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.TaxInfoVo;
@@ -54,6 +55,9 @@ public final class ChengTaiAPIQuoteResultsVoBuild {
             quoteResultsVo.setKindInfoVo(kindInfoVo);
         }
 
+        // 评分
+        quoteResultsVo.getScoreVo().setScoreJson(new JSONArray());
+
 
         // 费用因子
 //        List<ExpenseFactor> expenseFactors = buildExpenseFactor(calculatePremiumResponse.getPriceInfoList());

+ 1 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/component/ChengTaiRequestApiComponent.java

@@ -227,6 +227,7 @@ public class ChengTaiRequestApiComponent {
                 CarInfoResponse.class,
                 httpHeaders,
                 partnerCode,url);
+        System.out.printf("诚泰返回:" + response.message);
         CarInfoResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(CarInfoResponse.class);
         res.setCode(response.getCode());
         res.setMessage(response.getMessage());

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

@@ -6,7 +6,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
-@FeignClient(name="jzg-costsorrule",url = "http://localhost:8001/")
+@FeignClient(name="jzg-costsorrule",url = "${feign.client.jzg-costsorrule.url}")
 public interface CostsRuleClient {
 
 

+ 25 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java

@@ -1,6 +1,8 @@
 package com.jzg.quotation.commons.client;
 
+import com.alibaba.fastjson.JSONObject;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.account.po.SysUserAccountIncomeLog;
 import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAfterAction;
 import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchVo;
 import com.jzg.commons.entity.dto.CostAgreementParam;
@@ -77,6 +79,16 @@ public interface OrgClient {
                                       @RequestHeader("Authorization") String authToken,
                                       @RequestHeader("system_code") String systemCode);
 
+    /**
+     * 获取用户唯一id
+     * @param mobile
+     * @param authToken
+     * @return
+     */
+    @GetMapping(value = "/userInfo/getUserOnlyIdByMobile")
+    public HttpResult<SysUser>  getUserOnlyIdByMobile(@RequestParam String mobile,
+                                          @RequestHeader("Authorization") String authToken);
+
     /**
      * 用户账户信息查询
      * @param userId
@@ -169,4 +181,17 @@ public interface OrgClient {
      */
     @GetMapping(value = "/agreementRules/getRuleInfo")
     public HttpResult getRuleInfo(@RequestParam("ruleId") String ruleId, @RequestHeader("Authorization") String authToken);
+
+    /**
+     * 添加应收
+     * @return
+     */
+    @PostMapping(value = "/receivable/addReceivable")
+    public HttpResult addReceivable(@RequestBody JSONObject requestData, @RequestHeader("Authorization") String authToken);
+
+    /**
+     * 添加用户账户收入记录
+     */
+    @PostMapping(value = "/userAccount/addUserAccountIncomeLog")
+    public HttpResult addUserAccountIncomeLog(@RequestBody List<SysUserAccountIncomeLog> incomeLogs,@RequestHeader("Authorization") String authToken);
 }

+ 4 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/PlatformClient.java

@@ -17,7 +17,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
-@FeignClient(name="jzg-platform",url = "http://localhost:8083/")
+@FeignClient(name="jzg-platform",url = "${feign.client.jzg-platform.url}")
 public interface PlatformClient {
 
 
@@ -126,4 +126,7 @@ public interface PlatformClient {
     @PostMapping("/manager/clause/addClause")
     HttpResult addClause(@RequestBody InsCompanyClause insCompanyClause);
 
+    @PostMapping("/esmInsCompany/getParentIds")
+    HttpResult getParentIds(@RequestBody List<String> companyIds);
+
 }

+ 12 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/TimeProcessing.java

@@ -62,7 +62,7 @@ public final class TimeProcessing {
     }
 
     /**
-     * 一年以后减1秒得时间
+     * 一年以后减1秒得时间 (适用于零点时)
      *
      * @param date 开始时间
      * @return 结束时间
@@ -70,6 +70,17 @@ public final class TimeProcessing {
     public static String minusOneSecondAfterYear(String date) {
         return plusOneYear(date).minusSeconds(ONE).format(DATE_TIME_FORMATTER);
     }
+    /**
+     * 一年以后减1天得时间 (适用于不是零点时)
+     *
+     * @param date 开始时间
+     * @return 结束时间
+     */
+    public static String minusOneDayAfterYear(String date) {
+        return plusOneYear(date).minusDays(ONE).minusSeconds(ONE).format(DATE_TIME_FORMATTER);
+    }
+
+
 
     /**
      * 一年以后得时间

+ 8 - 8
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/build/DaJiaCrawlerQuoteResultsVoBuild.java

@@ -167,20 +167,20 @@ public final class DaJiaCrawlerQuoteResultsVoBuild {
         }
         JSONArray scoreArray = new JSONArray();
         scoreArray.add(new JSONObject()
-                .fluentPut("storeName","交强定价评分")
-                .fluentPut("storeKey","jqPubScores")
+                .fluentPut("scoreName","交强定价评分")
+                .fluentPut("scoreKey","jqPubScores")
                 .fluentPut("score",compulsoryInsurance.getCoefficientInfo().getLossRatioCi()));
         scoreArray.add(new JSONObject()
-                .fluentPut("storeName","商业定价评分")
-                .fluentPut("storeKey","syPubScores")
+                .fluentPut("scoreName","商业定价评分")
+                .fluentPut("scoreKey","syPubScores")
                 .fluentPut("score",businessInsurance.getCoefficientInfo().getLossRatioBi()));
         scoreArray.add(new JSONObject()
-                .fluentPut("storeName","违章评分")
-                .fluentPut("storeKey","carIllegalScore")
+                .fluentPut("scoreName","违章评分")
+                .fluentPut("scoreKey","carIllegalScore")
                 .fluentPut("score",carIllegalScore));
         scoreArray.add(new JSONObject()
-                .fluentPut("storeName","高速风险分")
-                .fluentPut("storeKey","highwayScore")
+                .fluentPut("scoreName","高速风险分")
+                .fluentPut("scoreKey","highwayScore")
                 .fluentPut("score",highwayScore));
         scoreVo.setScoreJson(scoreArray);
         return scoreVo;

+ 17 - 9
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/build/DajiaCrawlerAuditResultsVoBuild.java

@@ -1,12 +1,11 @@
 package com.jzg.quotation.dajia.crawler.build;
 
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
-import com.jzg.commons.entity.quote.vo.QuoteVo;
-import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingResultsVo;
-import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingVo;
 import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerGenerateResponse;
-import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerSaveResponse;
+
+import java.util.Objects;
+import java.util.Optional;
 
 /**
  * @author quchen
@@ -20,9 +19,18 @@ public final class DajiaCrawlerAuditResultsVoBuild {
         // 公司订单号
         underwritingResultsVo.setCompanyOrderNo(daJiaCrawlerGenerateResponse.getOrderNo());
         // 投保单号
-        String jqProposalNo = daJiaCrawlerGenerateResponse.getJqGenerate().getProposalNo();
-        String syProposalNo = daJiaCrawlerGenerateResponse.getSyGenerate().getProposalNo();
-        String jyProposalNo = daJiaCrawlerGenerateResponse.getJyGenerate().getProposalNo();
+        String jqProposalNo = Optional.ofNullable(daJiaCrawlerGenerateResponse)
+                .map(DaJiaCrawlerGenerateResponse::getJqGenerate)
+                .map(DaJiaCrawlerGenerateResponse.GenerateDTO::getProposalNo)
+                .orElse(null);
+        String syProposalNo = Optional.ofNullable(daJiaCrawlerGenerateResponse)
+                .map(DaJiaCrawlerGenerateResponse::getSyGenerate)
+                .map(DaJiaCrawlerGenerateResponse.GenerateDTO::getProposalNo)
+                .orElse(null);
+        String jyProposalNo = Optional.ofNullable(daJiaCrawlerGenerateResponse)
+                .map(DaJiaCrawlerGenerateResponse::getJyGenerate)
+                .map(DaJiaCrawlerGenerateResponse.GenerateDTO::getProposalNo)
+                .orElse(null);
         underwritingResultsVo.setJqApplyNo(jqProposalNo);
         underwritingResultsVo.setSyApplyNo(syProposalNo);
         underwritingResultsVo.setJyApplyNo(jyProposalNo);
@@ -32,10 +40,10 @@ public final class DajiaCrawlerAuditResultsVoBuild {
             // 失败信息
             StringBuilder sb = new StringBuilder();
             if (null != daJiaCrawlerGenerateResponse.getJqGenerate().getErrorMessage()) {
-                sb.append(String.format("交强险提示信息:s%", daJiaCrawlerGenerateResponse.getJqGenerate().getErrorMessage()));
+                sb.append(String.format("交强险提示信息:%s", daJiaCrawlerGenerateResponse.getJqGenerate().getErrorMessage()));
             }
             if (null != daJiaCrawlerGenerateResponse.getSyGenerate().getErrorMessage()) {
-                sb.append(String.format("商业险提示信息:s%", daJiaCrawlerGenerateResponse.getSyGenerate().getErrorMessage()));
+                sb.append(String.format("商业险提示信息:%s", daJiaCrawlerGenerateResponse.getSyGenerate().getErrorMessage()));
             }
             underwritingResultsVo.setUnderwritingResult(sb.toString());
         } else if (daJiaCrawlerGenerateResponse.getStatus().equals("4")) {

+ 2 - 2
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/service/Impl/GuoRenApiRequestImpl.java

@@ -209,7 +209,7 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
                 SignatureResponse signature = getSignature(guoRenApiOrder,url);
                 underwritingResultsVo.setPaymentLink(signature.getQrCode());
-            } else if (jqStatus.equals("2")) {
+            } else if (jqStatus.equals("2") || jqStatus.equals("0")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
                 underwritingResultsVo.setUnderwritingResult(message);
             }
@@ -221,7 +221,7 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
                 SignatureResponse signature = getSignature(guoRenApiOrder,url);
                 underwritingResultsVo.setPaymentLink(signature.getQrCode());
 
-            } else if (syStatus.equals("2")) {
+            } else if (syStatus.equals("2") || syStatus.equals("0")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
                 underwritingResultsVo.setUnderwritingResult(message);
             }

+ 11 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/build/GuoRenCrawlerQuoteResultsVoBuild.java

@@ -1,9 +1,11 @@
 package com.jzg.quotation.guoren.crawler.build;
 
+import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.constants.quote.enums.quote.KindCode;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
+import com.jzg.quotation.guoren.crawler.entity.response.GuoRenCrawlerBaseResponse;
 import com.jzg.quotation.guoren.crawler.entity.response.GuoRenCrawlerCalculationPremiumData;
 import com.jzg.quotation.guoren.crawler.entity.response.GuoRenCrawlerProposalNoSaveData;
 
@@ -66,6 +68,15 @@ public final class GuoRenCrawlerQuoteResultsVoBuild {
         return kindInfoVo;
     }
 
+    public static QuoteResultsVo buildFailQuoteResultsVo(QuoteVo quoteVo, GuoRenCrawlerBaseResponse<GuoRenCrawlerCalculationPremiumData> calculationPremium) {
+        QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
+        quoteResultsVo.setOrdersNo(quoteVo.getOrder().getOrdersNo());
+        // 报价失败提示
+        quoteResultsVo.setErrorMessage(calculationPremium.getResultMsg());
+        quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.QUOTE_FAIL);
+        return quoteResultsVo;
+    }
+
 
 
 

+ 16 - 10
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/component/GuoRenCrawlerRequestComponent.java

@@ -1,7 +1,8 @@
 package com.jzg.quotation.guoren.crawler.component;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.TypeReference;
+import com.alibaba.fastjson2.JSON;
+import com.jzg.commons.constants.quote.enums.base.InsuranceEnum;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
@@ -10,6 +11,7 @@ import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
+import com.jzg.quotation.commons.utils.InsuranceLog;
 import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.guoren.crawler.constant.enums.RequestUrl;
 import com.jzg.quotation.guoren.crawler.entity.dto.PrpTMainDTO;
@@ -58,14 +60,19 @@ public class GuoRenCrawlerRequestComponent {
     public <Response> Response request(RequestUrl requestUrl, Object body, ParameterizedTypeReference<Response> parameterizedTypeReference, HttpHeaders httpHeaders) {
         String url = guoRenCrawlerProperties.getBaseUrl() + requestUrl.getUri();
         Response response = requestComponent.post(url, body, requestUrl.getRequestDescription(), parameterizedTypeReference, httpHeaders);
-        if (response instanceof GuoRenCrawlerBaseResponse) {
-            if (((GuoRenCrawlerBaseResponse<?>) response).getResultCode() == 1) {
-                throw new SystemException(((GuoRenCrawlerBaseResponse<?>) response).getResultMsg());
-            }
-        }
+
+        String bodyJson = JSON.toJSONString(response);
+        String responseJson = JSON.toJSONString(response);
+        InsuranceLog.infoLog(InsuranceEnum.XDCX.getPinyin(), "\n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                url,bodyJson);
+        InsuranceLog.infoLog(InsuranceEnum.XDCX.getPinyin(), "\n\t---------> 响应参数:{}", responseJson);
         return response;
     }
-
+//        if (response instanceof GuoRenCrawlerBaseResponse) {
+//            if (((GuoRenCrawlerBaseResponse<?>) response).getResultCode() == 1) {
+//                throw new SystemException(((GuoRenCrawlerBaseResponse<?>) response).getResultMsg());
+//            }
+//        }
     /**
      * 请求入口
      *
@@ -253,10 +260,9 @@ public class GuoRenCrawlerRequestComponent {
      * @param httpHeaders                      请求头
      * @return 保费计算响应
      */
-    public GuoRenCrawlerCalculationPremiumData calculationPremium(GuoRenCrawlerCalculationPremiumRequest crawlerCalculationPremiumRequest, HttpHeaders httpHeaders) {
-        GuoRenCrawlerBaseResponse<GuoRenCrawlerCalculationPremiumData> request = request(RequestUrl.CALCULATION_PREMIUM, crawlerCalculationPremiumRequest, new ParameterizedTypeReference<>() {
+    public GuoRenCrawlerBaseResponse<GuoRenCrawlerCalculationPremiumData> calculationPremium(GuoRenCrawlerCalculationPremiumRequest crawlerCalculationPremiumRequest, HttpHeaders httpHeaders) {
+        return request(RequestUrl.CALCULATION_PREMIUM, crawlerCalculationPremiumRequest, new ParameterizedTypeReference<>() {
         }, httpHeaders);
-        return request.getData();
     }
 
     /**

+ 9 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/entity/request/GuoRenCrawlerCalculationPremiumRequest.java

@@ -114,6 +114,15 @@ public class GuoRenCrawlerCalculationPremiumRequest {
         public BcDTO(QuoteVo quoteVo, PrpTMainDTO prpTmainDTO, PrpTitemCarDTO prpTitemCar, Integer insuredTypeTmp, GuoRenCrawlerWriteBackAddressData policyHolderAddr, GuoRenCrawlerWriteBackAddressData insuredPersonAddr) {
             this.baseInfoInit = 2;
             this.riskCode = "0500";
+            // 添加非车险信息
+            if (quoteVo.getAccidentalDrivings().size() > 0) {
+                String noCarCodes = quoteVo.getAccidentalDrivings().get(0).getProductCode();
+                Integer noCarFlag = 1;
+                Integer noCarPremium = Integer.parseInt(quoteVo.getAccidentalDrivings().get(0).getPremium());
+                prpTmainDTO.setNoCarCodes(noCarCodes);
+                prpTmainDTO.setNoCarFlag(noCarFlag);
+                prpTmainDTO.setNoCarPremium(noCarPremium);
+            }
             this.prpTmain = prpTmainDTO;
             this.prpTitemCar = prpTitemCar;
             this.prpTinsured = new PrpTinsuredDTO(quoteVo.getPolicyHolderInfo(), quoteVo.getInsuredPersonInfo(), policyHolderAddr, insuredPersonAddr, quoteVo.getOwnersInfo().getBirthday());

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

@@ -17,7 +17,7 @@ import java.util.List;
  */
 @NoArgsConstructor
 @Data
-public class GuoRenCrawlerCalculationPremiumData {
+public class GuoRenCrawlerCalculationPremiumData extends GuoRenCrawlerBaseResponse{
 
 
     @JsonProperty("bi")

+ 2 - 2
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/impl/GuoRenCrawlerQuoteProcessServiceImpl.java

@@ -52,7 +52,7 @@ public class GuoRenCrawlerQuoteProcessServiceImpl implements GuoRenCrawlerQuoteP
     public HttpHeaders getHeaders(String username) {
         HttpHeaders headers = new HttpHeaders();
 //        String token = guoRenCrawlerCacheComponent.getToken(username);
-        String token = "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJXMzAwMDM5OSIsInVzZXJJZCI6IjQ5NjE4MSIsIm5hbWUiOiLmnY7mmKXmooUiLCJleHAiOjE3NjQ0MDE4ODV9.SWFEoclc2C-59feIHkFdbQKvbD6QD_2lLjb0fb8O95RXdA5BK63mlyI02rzqjBqasesgZy2J3NWltLiLe4SYny-eHEJY9TUYdtqSFUcKvaTBNOdFxK9dq4P0UhsDkAIQCbx5bLue_3yb_GfkbgAK2A-PYS3DTq_E-D8DpaVe3vw";
+        String token = "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJXMzAwMDM5OSIsInVzZXJJZCI6IjQ5NjE4MSIsIm5hbWUiOiLmnY7mmKXmooUiLCJleHAiOjE3Njg1NTc4NjN9.cIUF3sLi9F5-ZGTD-BYQh2CctOdExd0CiFnSPZGF7G8FdqiFeNLqTrhAsX6p4Gm-ImVBOsZxJa1fkZ4Q8wc0vjtCTAw9Xm8FicLM9HTiYUSFctYCipRlpK1as7F2wo1ih0ixWms5TdOAMZVyiFLAbckXTtiAmYd24ttPQJPU1As";
         if (!StringUtils.hasText(token)) {
             throw new SystemException("登录失败,请重新登录");
         }
@@ -170,6 +170,6 @@ public class GuoRenCrawlerQuoteProcessServiceImpl implements GuoRenCrawlerQuoteP
         crawlerCalculationPremiumRequest.getBi().getPrpTmain().setCertiNo(calculationPremium.getBi().getPrpTmain().getCertiNo());
         crawlerCalculationPremiumRequest.getBi().setCiInsureDemand(calculationPremium.getBi().getCiInsureDemand());
         crawlerCalculationPremiumRequest.getBi().setPrptengageList(calculationPremium.getBi().getPrptengageList());
-        return guoRenCrawlerRequestComponent.calculationPremium(crawlerCalculationPremiumRequest, headers);
+        return guoRenCrawlerRequestComponent.calculationPremium(crawlerCalculationPremiumRequest, headers).getData();
     }
 }

+ 58 - 6
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/impl/GuoRenCrawlerRequestImpl.java

@@ -11,6 +11,7 @@ import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.entity.GetCaptchaRequest;
 import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.guoren.crawler.build.GuoRenCrawlerQuoteResultsVoBuild;
 import com.jzg.quotation.guoren.crawler.component.GuoRenCrawlerRequestComponent;
 import com.jzg.quotation.guoren.crawler.constant.enums.RequestUrl;
@@ -28,6 +29,9 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 @QuoteCrawlerService(value = InsuranceCode.INSURANCE_XDCX)
 @Service
 @RequiredArgsConstructor
@@ -81,16 +85,47 @@ public class GuoRenCrawlerRequestImpl implements GuoRenCrawlerRequest {
         GuoRenCrawlerWriteBackAddressData insuredPersonAddr = writeBackAddress(quoteVo.getInsuredPersonInfo().getAddr(), quoteVo.getPolicyHolderInfo().getAddr(), ownersAddr, headers);
         // 保费计算
         GuoRenCrawlerCalculationPremiumRequest crawlerCalculationPremiumRequest = new GuoRenCrawlerCalculationPremiumRequest(quoteVo, prpTmainDTO, prpTitemCar, policyHolderAddr, insuredPersonAddr, insuredTypeTmp);
-        GuoRenCrawlerCalculationPremiumData calculationPremium = guoRenCrawlerRequestComponent.calculationPremium(crawlerCalculationPremiumRequest, headers);
-
+        GuoRenCrawlerBaseResponse<GuoRenCrawlerCalculationPremiumData> calculationPremium = guoRenCrawlerRequestComponent.calculationPremium(crawlerCalculationPremiumRequest, headers);
+        // 处理重复投保
+        String message = calculationPremium.getResultMsg();
+        if (calculationPremium.getResultCode() == 1 && message.contains("重复投保")) {
+            String startTime = extractDuplicateEndTime(message);
+            String endTime;
+            if (startTime == null) {
+                GuoRenCrawlerQuoteResultsVoBuild.buildFailQuoteResultsVo(quoteVo, calculationPremium);
+            }
+            if (startTime != null && startTime.endsWith("00:00:00")) {
+                endTime = TimeProcessing.minusOneSecondAfterYear(startTime);
+            } else {
+                endTime = TimeProcessing.minusOneDayAfterYear(startTime);
+            }
+            String startDate = TimeProcessing.dateTimeToDate(startTime);
+            String endDate = TimeProcessing.dateTimeToDate(endTime);
+            // 交强
+            crawlerCalculationPremiumRequest.getCi().getPrpTmain().setStartDate(startDate);
+            crawlerCalculationPremiumRequest.getCi().getPrpTmain().setEndDate(endDate);
+            crawlerCalculationPremiumRequest.getCi().getPrptitemkindList().forEach(item -> {
+                item.setStartDate(startDate);
+                item.setEndDate(endDate);
+            });
+            // 商业
+            crawlerCalculationPremiumRequest.getBi().getPrpTmain().setStartDate(startDate);
+            crawlerCalculationPremiumRequest.getBi().getPrpTmain().setEndDate(endDate);
+            crawlerCalculationPremiumRequest.getBi().getPrptitemkindList().forEach(item -> {
+                item.setStartDate(startDate);
+                item.setEndDate(endDate);
+            });
+            calculationPremium = guoRenCrawlerRequestComponent.calculationPremium(crawlerCalculationPremiumRequest, headers);
+        } else if (calculationPremium.getResultCode() == 1) {
+            GuoRenCrawlerQuoteResultsVoBuild.buildFailQuoteResultsVo(quoteVo, calculationPremium);
+        }
         // 投保验证码处理
-        calculationPremium = guoRenCrawlerQuoteProcessService.insuranceVerificationCodeProcessing(crawlerCalculationPremiumRequest, calculationPremium, headers);
-
+        GuoRenCrawlerCalculationPremiumData calculationPremiumData = guoRenCrawlerQuoteProcessService.insuranceVerificationCodeProcessing(crawlerCalculationPremiumRequest, calculationPremium.getData(), headers);
         // 保存投保单号
-        GuoRenCrawlerProposalNoSaveData proposalNoSave = guoRenCrawlerRequestComponent.proposalNoSave(crawlerCalculationPremiumRequest, calculationPremium, headers);
+        GuoRenCrawlerProposalNoSaveData proposalNoSave = guoRenCrawlerRequestComponent.proposalNoSave(crawlerCalculationPremiumRequest, calculationPremiumData, headers);
         // 保存数据
         guoRenCrawlerOrderService.saveOrderInfo(quoteVo, proposalNoSave);
-        return GuoRenCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo, calculationPremium, proposalNoSave);
+        return GuoRenCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo, calculationPremiumData, proposalNoSave);
     }
 
     private GuoRenCrawlerWriteBackAddressData writeBackAddress(String addressNew, String addressOld, GuoRenCrawlerWriteBackAddressData writeBackAddressData, HttpHeaders headers) {
@@ -100,6 +135,23 @@ public class GuoRenCrawlerRequestImpl implements GuoRenCrawlerRequest {
         return guoRenCrawlerRequestComponent.writeBackAddress(addressNew, headers);
     }
 
+    // 截取重复投保终保日期
+    private static final Pattern DUPLICATE_END_TIME_PATTERN = Pattern.compile("终保日期 (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2})");
+
+    /**
+     * 提取系统自动分配的起保时间
+     * @param returnMessage 核心提示
+     * @return 提取到的时间字符串,未提取到返回 null
+     */
+    private String extractDuplicateEndTime(String returnMessage) {
+        Matcher matcher = DUPLICATE_END_TIME_PATTERN.matcher(returnMessage);
+        if (matcher.find()) {
+            String shortEndTime = matcher.group(1);
+            return shortEndTime + ":00";
+        }
+        return null;
+    }
+
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) throws Exception {
         String username = underwritingVo.getOrder().getAttributionInformationVo().getUsername();

+ 1 - 1
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/api/service/Impl/HuaTaiApiRequestImpl.java

@@ -268,7 +268,7 @@ public class HuaTaiApiRequestImpl implements HuaTaiApiRequest {
             StringBuilder sb = new StringBuilder();
             for (HuaTaiSubmitResponse.AppliResult appliResult : submitResponse.getAppliResult()) {
                 for (HuaTaiSubmitResponse.Notion notion : appliResult.getNotion()) {
-                    sb.append(StringUtils.equals("C1",notion.getUWType()) ? "交强险提示信息:s%" : " 商业险提示信息:s%").append(notion.getUWNotion());
+                    sb.append(StringUtils.equals("C1",notion.getUWType()) ? "交强险提示信息:%s" : " 商业险提示信息:%s").append(notion.getUWNotion());
                 }
             }
             underwritingResultsVo.setUnderwritingResult(sb.toString());

+ 1 - 1
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/component/HtCrawlerRequestComponent.java

@@ -152,7 +152,7 @@ public class HtCrawlerRequestComponent {
      */
     public HttpHeaders getHeaders() {
         String cookie = getCookie();
-        if (cookie.isEmpty()) {
+        if (cookie == null || cookie.isEmpty()) {
             cookie = getHaTaiCookie(RequestUrl.NE_COOKIE.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()));
         }
         HttpHeaders headers = new HttpHeaders();

+ 3 - 10
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/FactorMatch.java

@@ -39,9 +39,6 @@ public class FactorMatch {
                     .orElse(null);
             //如果查找不到 传值属性 直接费用对比失败
             if (ruleAttrMappingVo == null) {
-//                log.debug("传入的值找不到该属性:" + ptlAgreementProductCostsAttrLink.getAttrCode());
-//                log.debug("规则匹配失败:" + ptlAgreementProductCostsAttrLink.getAttrCode());
-
                 List<PtlAgreementUndwrtRulesAttr> collect = undwrtRulesAttrList.stream()
                         .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
                         .toList();
@@ -64,11 +61,6 @@ public class FactorMatch {
             }
 
             if (!useFlag) {
-//                log.debug("检验的值:" + ptlAgreementProductCostsAttrLink.getMin());
-//                log.debug("传入的值:" + ruleAttrMappingVo.getValue());
-//                log.debug("规则匹配失败:" + ptlAgreementProductCostsAttrLink.getAttrCode());
-
-
                 List<PtlAgreementUndwrtRulesAttr> collect = undwrtRulesAttrList.stream()
                         .filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLink.getAttrCode()))
                         .toList();
@@ -82,7 +74,8 @@ public class FactorMatch {
                 logs.append("传入的值:" + ruleAttrMappingVo.getValue() + "\n");
 
                 if (!collect.isEmpty()) {
-                    logs.append("<span style=\"color:red;\">规则匹配失败:" + collect.get(0).getAttrName() + "</span>\n");
+//                    logs.append("<span style=\"color:red;\">规则匹配失败:" + collect.get(0).getAttrName() + "</span>\n");
+                    logs.append("规则匹配失败:" + collect.get(0).getAttrName() + "\n");
                 }
 
                 return false;
@@ -168,7 +161,7 @@ public class FactorMatch {
             result = checkBoxEqual(ptlAgreementCostRule, value);
         } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")) {
             result = inputNumberEqual(ptlAgreementCostRule, value);
-        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("input")) {
+        } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("input") || ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputTag")) {
             //截取身份证号码
             if (ptlAgreementCostRule.getAttrCode().equals("CarOwnersIDNumber") || ptlAgreementCostRule.getAttrCode().equals("ApplicantIDNumber") ||
                     ptlAgreementCostRule.getAttrCode().equals("InsuredIDNumber")) {

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

@@ -119,6 +119,7 @@ public class QuoteVerificationAspect {
                     InsFeeOrders insFeeOrders = calcCosts(agreementInfoVo,costId, insOrders,insOrdersCosts);
                     log.debug("费用因子校验通过,子订单id:" + insOrders.getId() + ",费用id:" + costId);
                     result.getData().setFeeOrders(insFeeOrders);
+                    return;
                 }
             } else {
                 logs.append("没有找到该协议的费用信息" + "\n");
@@ -323,7 +324,7 @@ public class QuoteVerificationAspect {
             return BigDecimal.ZERO;
         }
         BigDecimal inletPercent = convertPercent(costType.getInlet());
-        return inletPercent.subtract(entranceFeeRatio);
+        return inletPercent.subtract(entranceFeeRatio).setScale(5);
     }
 
     /**
@@ -370,7 +371,7 @@ public class QuoteVerificationAspect {
         BigDecimal taxablePremium = premium.multiply(taxFactor);
         BigDecimal receivable = taxablePremium.multiply(inletPercent)
                 .add(taxablePremium.multiply(addThrowPercent))
-                .add(taxablePremium.multiply(followRatio))
+//                .add(taxablePremium.multiply(followRatio))
                 .setScale(5, RoundingMode.HALF_EVEN);
 
         // 计算应付金额(保费 * 出口比例,保留2位小数)
@@ -379,9 +380,9 @@ public class QuoteVerificationAspect {
         // 计算各类费用并设置到订单对象
         setReceivable.accept(insFeeOrders, receivable);
         setPayable.accept(insFeeOrders, payable);
-        setCommission.accept(insFeeOrders, premium.multiply(commissionRatio).setScale(5, RoundingMode.HALF_EVEN));
-        setFollow.accept(insFeeOrders, premium.multiply(followRatio).setScale(5, RoundingMode.HALF_EVEN));
-        setAdditional.accept(insFeeOrders, premium.multiply(addThrowPercent).setScale(5, RoundingMode.HALF_EVEN));
+        setCommission.accept(insFeeOrders, taxablePremium.multiply(commissionRatio).setScale(5, RoundingMode.HALF_EVEN));
+        setFollow.accept(insFeeOrders, taxablePremium.multiply(followRatio).setScale(5, RoundingMode.HALF_EVEN));
+        setAdditional.accept(insFeeOrders, taxablePremium.multiply(addThrowPercent).setScale(5, RoundingMode.HALF_EVEN));
     }
 
     /**
@@ -431,11 +432,11 @@ public class QuoteVerificationAspect {
                 ? convertPercent(jyCostType.getInlet() != null ? jyCostType.getInlet() : BigDecimal.ZERO) : BigDecimal.ZERO);
         // 跟单比例
         insFeeOrders.setJqFollowRatio(jqCostType != null ?
-                calculateFollowRatio(jqCostType, agreementInfoVo.getAgreement().getJqEntranceFeeRatio()) : BigDecimal.ZERO);
+                calculateFollowRatio(jqCostType, convertPercent(agreementInfoVo.getAgreement().getJqEntranceFeeRatio())) : BigDecimal.ZERO);
         insFeeOrders.setSyFollowRatio(syCostType != null ?
-                calculateFollowRatio(syCostType, agreementInfoVo.getAgreement().getSyEntranceFeeRatio()) : BigDecimal.ZERO);
+                calculateFollowRatio(syCostType, convertPercent(agreementInfoVo.getAgreement().getSyEntranceFeeRatio())) : BigDecimal.ZERO);
         insFeeOrders.setJyFollowRatio(jyCostType != null ?
-                calculateFollowRatio(jyCostType, agreementInfoVo.getAgreement().getJyEntranceFeeRatio()) : BigDecimal.ZERO);
+                calculateFollowRatio(jyCostType, convertPercent(agreementInfoVo.getAgreement().getJyEntranceFeeRatio())) : BigDecimal.ZERO);
         // 加投比例
         insFeeOrders.setJqAdditionalRatio(jqCostType != null
                 ? convertPercent(jqCostType.getAddThrow() != null ? jqCostType.getAddThrow() : BigDecimal.ZERO)

+ 7 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeAuditController.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.summary.controller;
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.FeeAuditAddParam;
 import com.jzg.commons.entity.dto.FeeAuditParam;
@@ -26,6 +27,9 @@ public class InsFeeAuditController {
     @Autowired
     private InsFeeAuditService insFeeAuditService;
 
+    @Autowired
+    private BaseController baseController;
+
     /**
      * 订单列表分页
      * @return
@@ -33,6 +37,7 @@ public class InsFeeAuditController {
     @PostMapping("/auditList")
     @Operation(summary = "订单审核列表分页")
     public HttpResult auditList(@RequestBody FeeAuditParam param){
+        param.setSystemCode(baseController.getUserSystemCode());
         Page<FeeAuditVo> result = insFeeAuditService.queryPage(param);
         return HttpResult.ok(result);
     }
@@ -77,7 +82,7 @@ public class InsFeeAuditController {
     @Operation(summary = "放弃领取审核订单")
     public HttpResult auditCancel(@RequestParam("orderNo") String orderNo){
         insFeeAuditService.auditCancel(orderNo);
-        return HttpResult.ok();
+        return HttpResult.ok("已放弃审核订单");
     }
 
     /**
@@ -99,7 +104,7 @@ public class InsFeeAuditController {
     @Operation(summary = "审核订单")
     public HttpResult verifyOrder(@RequestBody VerifyOrderParam param){
         insFeeAuditService.verifyOrder(param);
-        return HttpResult.ok();
+        return HttpResult.ok("订单审核成功");
     }
 
     /**

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

@@ -301,8 +301,14 @@ public class UnifyOrderManager {
 
         InsOrdersCosts insOrdersCosts = insOrdersCostsService.getById(insOrders.getId());
         InsOrdersPolicy insOrdersPolicy = insOrdersPolicyService.getById(insOrders.getId());
+        // 核保之前判断是否是待核保  或 核保失败
+        StateResult stateResult;
+        if(insOrders.getOrderStatus().equals(InsOrderStatusEnum.WAIT_AUDIT.getCode()) || insOrders.getOrderStatus().equals(InsOrderStatusEnum.AUDIT_FAIL.getCode())){
+            stateResult = orderStateListener.statusChange(InsOrderStatusEnum.AUDIT_ING, InsOrderStatusEnum.WAIT_AUDIT.getCode());
+        }else{
+            stateResult = orderStateListener.statusChange(InsOrderStatusEnum.AUDIT_ING, insOrders.getOrderStatus());
+        }
         //核保之前更新订单为待核保
-        StateResult stateResult = orderStateListener.statusChange(InsOrderStatusEnum.AUDIT_ING, insOrders.getOrderStatus());
         insOrders.setOrderStatus(String.valueOf(stateResult.getCurrentState()));
         insOrdersService.updateById(insOrders);
         // 发送订单状态变更消息
@@ -426,7 +432,7 @@ public class UnifyOrderManager {
 
         List<InsOrdersCarUserInfo> insOrdersCarUserInfos = insOrdersCarUserInfoService.getByOrderId(insuranceUploadImageVo.getOrder().getOrdersNo());
         insuranceUploadImageVo.setInsOrdersCarUserInfoList(insOrdersCarUserInfos);
-        insuranceUploadImageVo.getOrder().setAgreementId(byCompanyId.getData().get(0).getId());
+        insuranceUploadImageVo.getOrder().setAgreementId(insOrders.getAgreementId());
         insuranceUploadImageVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getCompanyCode());
         insuranceUploadImageVo.getOrder().setInsuranceCompanyId(esmInsCompanyHttpResult.getData().getId());
         insuranceUploadImageVo.getOrder().setApiType(Integer.parseInt(insOrders.getApiType()));

+ 2 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/factory/decorator/quote/QuoteDispatchDecorator.java

@@ -61,6 +61,8 @@ public class QuoteDispatchDecorator {
         if(baseController.getUserSystemCode().equals("APP")){
             HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
             systemCode = request.getHeader("system_code");
+        }else{
+            systemCode = baseController.getUserSystemCode();
         }
         HttpResult<PtlAgreementAttribution> agreementAttribution = platformClient.getAgreementAttribution(agreementId, token, systemCode);
         AssertionUtils.isFail(agreementAttribution.getCode() == 500, "获取协议属性失败");

+ 103 - 17
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java

@@ -1,30 +1,32 @@
 package com.jzg.quotation.summary.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.JsonNode;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.base.StateResult;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.account.po.SysUserAccountIncomeLog;
 import com.jzg.commons.entity.dto.FeeAuditParam;
 import com.jzg.commons.entity.dto.VerifyOrderParam;
 import com.jzg.commons.entity.orders.po.*;
 import com.jzg.commons.entity.orders.vo.AuditCostInfoVo;
 import com.jzg.commons.entity.orders.vo.FeeAuditVo;
 import com.jzg.commons.entity.po.InsFeeOrders;
+import com.jzg.commons.entity.po.SysUser;
 import com.jzg.commons.entity.po.SysUserAccount;
 import com.jzg.commons.entity.po.SysUserJzgInfo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteEchoVo;
-import com.jzg.commons.entity.vo.AgreementInfoVo;
-import com.jzg.commons.entity.vo.AgreementVo;
-import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
-import com.jzg.commons.entity.vo.PtlAgreementCostTypeVo;
+import com.jzg.commons.entity.vo.*;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.PDFUtil;
 import com.jzg.commons.util.StringUtils;
+import com.jzg.commons.util.idgen.IdGenerate;
 import com.jzg.quotation.commons.client.OrgClient;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.summary.mapper.InsFeeAuditMapper;
@@ -37,6 +39,7 @@ import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.File;
 import java.math.BigDecimal;
@@ -184,9 +187,8 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
             AssertionUtils.isFail(true, "订单已审核!");
         }
         String userName = baseController.getUserName();
-        if (userName.equals(audit.getReceiveUser())) {
-            AssertionUtils.isFail(true, "已放弃订单审核任务!");
-        }
+        AssertionUtils.isFail(!userName.equals(audit.getReceiveUser()), "未领取审核任务!");
+//        AssertionUtils.isFail(!userName.equals(audit.getReceiveUser()), "已放弃订单审核任务!");
 
         LambdaUpdateWrapper<InsFeeAudit> wrapper = new LambdaUpdateWrapper<>();
         wrapper.set(InsFeeAudit::getReceiveUser,null);
@@ -274,17 +276,24 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         if (!userName.equals(audit.getReceiveUser())) {
             AssertionUtils.isFail(true, "订单已被"+audit.getReceiveUser()+"领取返回待审核订单列表!");
         }
+        InsFeeOrders feeOrders = null;
+        SysUserAccount userAccount = null,distributor1 = null,distributor2 = null,distributor3 = null;
         if(param.getAuditStatus().equals(1)){
+            List<SysUserAccountIncomeLog> incomeLogs = new ArrayList<>();
             StateResult stateFailResult = auditStateListener.statusChange(AuditState.AuditStateEnum.SUCCESS_AUDIT,audit.getAuditStatus()+"");
             audit.setAuditStatus(stateFailResult.getCurrentState());
 
             // 更新用户账户
-            InsFeeOrders feeOrders = feeOrdersService.getById(param.getOrderNo());
-            HttpResult<SysUserAccount> result = orgClient.accountGet(orders.getRealQuoteUserId(), baseController.getToken());
+            feeOrders = feeOrdersService.getById(param.getOrderNo());
+            HttpResult<SysUser> sysUserResult = orgClient.getUserOnlyIdByMobile(orders.getRealQuoteUserId(), baseController.getToken());
+            HttpResult<SysUserAccount> result = orgClient.accountGet(sysUserResult.getData().getId(), baseController.getToken());
             AssertionUtils.isFail(result.getCode() != 200,"获取用户账户失败!");
-            SysUserAccount userAccount = result.getData();
+            userAccount = result.getData();
             if(Objects.isNull(userAccount)){
-                userAccount.setUserId(orders.getRealQuoteUserId());
+                userAccount = new SysUserAccount();
+                // 新建账户
+                userAccount.setId(IdGenerate.nextId());
+                userAccount.setUserId(sysUserResult.getData().getId());
                 userAccount.setSumAmount(feeOrders.getTotalReceivablePremium());
                 userAccount.setSumAmountUnpaid(feeOrders.getTotalReceivablePremium());
             }else{
@@ -292,34 +301,43 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
                 userAccount.setSumAmountUnpaid(feeOrders.getTotalReceivablePremium().add(userAccount.getSumAmount()));
             }
             orgClient.saveOrUpdate(userAccount, baseController.getToken());
+
+            // 进入应收表
+            List<String> orderNos = new ArrayList<>();
+            orderNos.add(audit.getOrderNo());
+            JSONObject requestData = new JSONObject();
+            requestData.put("orderNos",orderNos);
+            HttpResult httpResult = orgClient.addReceivable(requestData, baseController.getToken());
+            AssertionUtils.isFail(httpResult.getCode() == 500,"应收出错");
+
             // 一级分销费用户进账
-            if (feeOrders.getFirstDistributionFee().compareTo(BigDecimal.ZERO) > 0 && feeOrders.getFirstDistributorId() != null) {
+            if (feeOrders.getFirstDistributorId() != null && feeOrders.getFirstDistributionFee().compareTo(BigDecimal.ZERO) > 0) {
                 HttpResult<SysUserJzgInfo> jzgInfoResult = orgClient.getUserInfoById(feeOrders.getFirstDistributorId());
                 AssertionUtils.isFail(jzgInfoResult.getCode() != 200,"获取用户失败!");
                 SysUserJzgInfo jzgInfo = jzgInfoResult.getData();
                 HttpResult<SysUserAccount> jzgAccountResult = orgClient.accountGet(jzgInfo.getUserId(), baseController.getToken());
                 AssertionUtils.isFail(jzgAccountResult.getCode() != 200,"获取用户账户失败!");
-                SysUserAccount distributor1 = jzgAccountResult.getData();
+                distributor1 = jzgAccountResult.getData();
                 verifySysAccount(distributor1,jzgInfo,feeOrders);
             }
             // 二级分销费用户进账
-            if (feeOrders.getSecondDistributionFee().compareTo(BigDecimal.ZERO) > 0 && feeOrders.getSecondDistributorId() != null) {
+            if (feeOrders.getSecondDistributorId() != null && feeOrders.getSecondDistributionFee().compareTo(BigDecimal.ZERO) > 0) {
                 HttpResult<SysUserJzgInfo> jzgInfoResult = orgClient.getUserInfoById(feeOrders.getSecondDistributorId());
                 AssertionUtils.isFail(jzgInfoResult.getCode() != 200,"获取用户失败!");
                 SysUserJzgInfo jzgInfo = jzgInfoResult.getData();
                 HttpResult<SysUserAccount> jzgAccountResult = orgClient.accountGet(jzgInfo.getUserId(), baseController.getToken());
                 AssertionUtils.isFail(jzgAccountResult.getCode() != 200,"获取用户账户失败!");
-                SysUserAccount distributor2 = jzgAccountResult.getData();
+                distributor2 = jzgAccountResult.getData();
                 verifySysAccount(distributor2,jzgInfo,feeOrders);
             }
             // 三级分销费用户进账
-            if (feeOrders.getThirdDistributionFee().compareTo(BigDecimal.ZERO) > 0 && feeOrders.getThirdDistributorId() != null) {
+            if (feeOrders.getThirdDistributorId() != null && feeOrders.getThirdDistributionFee().compareTo(BigDecimal.ZERO) > 0) {
                 HttpResult<SysUserJzgInfo> jzgInfoResult = orgClient.getUserInfoById(feeOrders.getThirdDistributorId());
                 AssertionUtils.isFail(jzgInfoResult.getCode() != 200,"获取用户失败!");
                 SysUserJzgInfo jzgInfo = jzgInfoResult.getData();
                 HttpResult<SysUserAccount> jzgAccountResult = orgClient.accountGet(jzgInfo.getUserId(), baseController.getToken());
                 AssertionUtils.isFail(jzgAccountResult.getCode() != 200,"获取用户账户失败!");
-                SysUserAccount distributor3 = jzgAccountResult.getData();
+                distributor3 = jzgAccountResult.getData();
                 verifySysAccount(distributor3,jzgInfo,feeOrders);
             }
         }else{
@@ -329,8 +347,76 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         audit.setRefuse(param.getRefuse());
         audit.setIsProblem(0);
         this.updateById(audit);
+
+
+        // 增加账户的金额记录
+        List<SysUserAccountIncomeLog>builderIncomeLog = this.builderIncomeLog(param.getOrderNo(),feeOrders,userAccount,distributor1,distributor2,distributor3);
+        HttpResult result = orgClient.addUserAccountIncomeLog(builderIncomeLog,baseController.getToken());
+        AssertionUtils.isFail(result.getCode() != 200,"账户记录添加失败,审核失败");
+
     }
 
+    /**
+     * 生成收入明细日志
+     * @param orderNo       订单号
+     * @param feeOrders     费用
+     * @param userAccount   分账用户
+     * @param distributor1  1级分销人员
+     * @param distributor2  2级分销人员
+     * @param distributor3  3级分销人员
+     * @return
+     */
+    private List<SysUserAccountIncomeLog> builderIncomeLog(String orderNo,InsFeeOrders feeOrders,SysUserAccount userAccount,SysUserAccount distributor1,
+                                                           SysUserAccount distributor2, SysUserAccount distributor3){
+        List<SysUserAccountIncomeLog> incomeLogs = new ArrayList<>();
+
+        // 出口费用
+        SysUserAccountIncomeLog exportIncomeLog = new SysUserAccountIncomeLog();
+        exportIncomeLog.setOrderId(orderNo);
+        exportIncomeLog.setUserId(userAccount.getUserId());
+        exportIncomeLog.setAmount(feeOrders.getJqExportPremium().add(feeOrders.getSyExportPremium()).add(feeOrders.getJyExportPremium()));
+        exportIncomeLog.setProperty(1);
+        exportIncomeLog.setBalanceAmount(userAccount.getSumAmount());
+
+        incomeLogs.add(exportIncomeLog);
+
+        // 1级分销费
+        if (feeOrders.getFirstDistributorId() != null && feeOrders.getFirstDistributionFee().compareTo(BigDecimal.ZERO) > 0) {
+            SysUserAccountIncomeLog distributor1IncomeLog = new SysUserAccountIncomeLog();
+            distributor1IncomeLog.setOrderId(orderNo);
+            distributor1IncomeLog.setUserId(distributor1.getUserId());
+            distributor1IncomeLog.setAmount(feeOrders.getFirstDistributionFee());
+            distributor1IncomeLog.setProperty(2);
+            distributor1IncomeLog.setBalanceAmount(userAccount.getSumAmount());
+            incomeLogs.add(distributor1IncomeLog);
+        }
+
+        // 2级分销费
+        if (feeOrders.getSecondDistributorId() != null && feeOrders.getSecondDistributionFee().compareTo(BigDecimal.ZERO) > 0) {
+            SysUserAccountIncomeLog distributor2IncomeLog = new SysUserAccountIncomeLog();
+            distributor2IncomeLog.setOrderId(orderNo);
+            distributor2IncomeLog.setUserId(distributor2.getUserId());
+            distributor2IncomeLog.setAmount(feeOrders.getFirstDistributionFee());
+            distributor2IncomeLog.setProperty(2);
+            distributor2IncomeLog.setBalanceAmount(userAccount.getSumAmount());
+            incomeLogs.add(distributor2IncomeLog);
+        }
+
+        // 3级分销费
+        if (feeOrders.getThirdDistributorId() != null && feeOrders.getThirdDistributionFee().compareTo(BigDecimal.ZERO) > 0) {
+            SysUserAccountIncomeLog distributor3IncomeLog = new SysUserAccountIncomeLog();
+            distributor3IncomeLog.setOrderId(orderNo);
+            distributor3IncomeLog.setUserId(distributor3.getUserId());
+            distributor3IncomeLog.setAmount(feeOrders.getFirstDistributionFee());
+            distributor3IncomeLog.setProperty(2);
+            distributor3IncomeLog.setBalanceAmount(userAccount.getSumAmount());
+            incomeLogs.add(distributor3IncomeLog);
+        }
+        return incomeLogs;
+    }
+
+
+
     // 验证用户账户
     public void verifySysAccount(SysUserAccount userAccount, SysUserJzgInfo jzgInfo, InsFeeOrders feeOrders) {
         if (Objects.isNull(userAccount)) {

+ 2 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersCarInfoServiceImpl.java

@@ -12,6 +12,7 @@ import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.commons.util.comparble.DiffResult;
 import com.jzg.commons.util.comparble.DiffUtils;
 import com.jzg.quotation.summary.constants.QuoteNumberConstant;
@@ -122,6 +123,7 @@ public class InsOrdersCarInfoServiceImpl extends ServiceImpl<InsOrdersCarInfoMap
         boolean isTransfer = carInfoVo.isTransfer();
         insOrdersCarInfo.setTransfer(isTransfer ? 1 : 0);
         if (isTransfer) {
+            AssertionUtils.isFail(StringUtils.isBlank(carInfoVo.getTransferDate()), "请填写转移登记日期");
             insOrdersCarInfo.setTransferDate(LocalDate.parse(carInfoVo.getTransferDate(),formatter).atStartOfDay());
         } else {
             insOrdersCarInfo.setTransferDate(null);

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

@@ -30,6 +30,7 @@ import com.jzg.commons.entity.quote.vo.aggregated.OrderStatusResultVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteEchoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingResultsVo;
+import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersAdd;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersEnd;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
@@ -47,6 +48,7 @@ import com.jzg.quotation.summary.consumer.template.OrderMessageTemplate;
 import com.jzg.quotation.summary.mapper.*;
 import com.jzg.quotation.summary.service.*;
 import com.jzg.quotation.summary.state.listener.OrderStateListener;
+import com.jzg.quotation.zhongan.crawler.entity.response.ZhongAnCrawlerUploadInitDateResponse;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
 import lombok.Setter;
@@ -375,9 +377,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             throw new SystemException("查询结果为空,无法处理订单信息");
         }
         // 协议名称、协议类型
-        HttpResult<AgreementInfoVo> ptlAgreement =orgClient.queryAgreementById(insOrdersVo.getInsOrders().getAgreementId(),baseController.getToken(),baseController.getAppSystemCode());
-        insOrdersVo.setAgreementType(ptlAgreement.getData().getAgreement().getAgreementType());
-        insOrdersVo.setAgreementName(ptlAgreement.getData().getAgreement().getAgreementName());
+        if(Objects.nonNull(insOrdersVo.getInsOrders().getAgreementId())) {
+            HttpResult<AgreementInfoVo> ptlAgreement = orgClient.queryAgreementById(insOrdersVo.getInsOrders().getAgreementId(), baseController.getToken(), baseController.getAppSystemCode());
+            AssertionUtils.isFail(ptlAgreement.getCode() == 500,ptlAgreement.getMsg() + ",请联系管理处理");
+            insOrdersVo.setAgreementType(ptlAgreement.getData().getAgreement().getAgreementType());
+            insOrdersVo.setAgreementName(ptlAgreement.getData().getAgreement().getAgreementName());
+        }
 
         // 业务员信息
         SalesmanVo salesmanInfo = orgClient.getUserByMobile(insOrdersVo.getCreateBy(),baseController.getToken(),baseController.getAppSystemCode());
@@ -1062,21 +1067,38 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         List<InsTaskImages> imagesList = insTaskImagesService.list(new LambdaQueryWrapper<InsTaskImages>()
                 .eq(InsTaskImages::getQuoteNo, insOrdersVo.getQuoteNo())
                 .eq(InsTaskImages::getIsDelete, 0));
-        List<ImagesVo> imageVoList = new ArrayList<>();
+//        List<ImagesVo> imageVoList = new ArrayList<>();
+//        for (InsTaskImages images : imagesList) {
+//            ImagesVo imagesVo = new ImagesVo();
+//            SysUploadFiles sysUploadFiles = sysUploadFilesMapper.selectById(images.getImageId());
+//            if (!Objects.isNull(sysUploadFiles)){
+//                imagesVo.setImageId(sysUploadFiles.getId());
+//                imagesVo.setFileName(sysUploadFiles.getFileName());
+//                imagesVo.setFileType(sysUploadFiles.getFileType());
+//                imagesVo.setBucketName(sysUploadFiles.getBucketName());
+//                imagesVo.setDownloadUrl(MinioUtils.getPresignedObjectUrl(bucketName,sysUploadFiles.getFileName()));
+//
+//            }
+//            imagesVo.setId(images.getId());
+//            imagesVo.setImageType(images.getImageType());
+//            imageVoList.add(imagesVo);
+//        }
+        List<InsuranceImageVo> imageVoList = new ArrayList<>();
         for (InsTaskImages images : imagesList) {
-            ImagesVo imagesVo = new ImagesVo();
+            InsuranceImageVo imagesVo = new InsuranceImageVo();
             SysUploadFiles sysUploadFiles = sysUploadFilesMapper.selectById(images.getImageId());
-            if (!Objects.isNull(sysUploadFiles)){
-                imagesVo.setImageId(sysUploadFiles.getId());
-                imagesVo.setFileName(sysUploadFiles.getFileName());
-                imagesVo.setFileType(sysUploadFiles.getFileType());
-                imagesVo.setBucketName(sysUploadFiles.getBucketName());
-                imagesVo.setDownloadUrl(MinioUtils.getPresignedObjectUrl(bucketName,sysUploadFiles.getFileName()));
+            if (!Objects.isNull(sysUploadFiles)) {
+//                imagesVo.setImageId(sysUploadFiles.getId());
+                imagesVo.setImageCode(images.getImageType());
+                InsuranceImageVo.ImageDTO dto = new InsuranceImageVo.ImageDTO();
+                dto.setImageId(sysUploadFiles.getId());
+                List<InsuranceImageVo.ImageDTO> imageDtos = new ArrayList<>();
+                imageDtos.add(dto);
+                imagesVo.setImageBase64List(imageDtos);
             }
-            imagesVo.setId(images.getId());
-            imagesVo.setImageType(images.getImageType());
             imageVoList.add(imagesVo);
         }
+
         resultVo.setImageVoList(imageVoList);
         // 支付码
         List<InsOrdersQrcode> qrcodes = insOrdersQrcodeMapper.selectList(new LambdaQueryWrapper<InsOrdersQrcode>()
@@ -1196,6 +1218,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         if(orderStatusResultVo.getOrderStatus().equals(InsOrderStatusEnum.UNDERWRITED)){
             // 增加财务审核
             insFeeAuditService.feeAuditAdd(insOrders);
+            // 将父订单的保司id 和名称更新
+            InsOrders baseInsOrders = insOrdersMapper.selectOne(new LambdaQueryWrapper<InsOrders>().eq(InsOrders::getId, insOrders.getParentId()));
+            baseInsOrders.setCompanyId(insOrders.getCompanyId());
+            baseInsOrders.setCompanyName(insOrders.getCompanyName());
+            // 更新父订单
+            baseMapper.updateById(baseInsOrders);
             // 发送订单状态变更消息
             this.orderStatusMessage(insOrders,
                     insOrdersCarInfo,costs,

+ 104 - 26
tenant/insurance/quotation-summary/src/main/resources/application-test.yaml

@@ -49,9 +49,20 @@ qrcode:
 yc:
   api:
     payCallBack: https://sxzgkj.baoxianzhanggui.com/web-api/api/yongCheng/callBack
-    url: https://test.baoxianzhanggui.com/yongcheng/
+#    url: https://test.baoxianzhanggui.com/yongcheng/
+    url: http://39.98.214.159/yongcheng/
 
-#阳光财险生产api
+##阳光财险测试api
+#yangguang:
+#  api:
+#    key: uYPP7AIc3HYsUh8rFn
+#    url: http://chexiantest.sinosig.com:7002/serviceCar/nonstandard.action?sysFlag=CCSI_SXJZG
+#    uploadUrl: http://unifiedimage.sinosig.com:8082/AutoImagePlatform/third/upload
+#    payCallBack: https://sxzgkj.baoxianzhanggui.com/web-api/api/yangGuang/callBack
+#    secret: 6CPxxlHwLLphTR7gVg3hJLsH
+#    referer: SXJZG
+#阳光生产环境api
+# 阳光财险
 yangguang:
   api:
     key: GVGFDsmWyvydKuCrtP
@@ -61,6 +72,7 @@ yangguang:
     secret: 6CPxxlHwLLphTR7gVg3hJLsH
     referer: SXJZG
 
+
 #阳光财险测试api
 #yangguang:
 #  api:
@@ -72,7 +84,18 @@ yangguang:
 #    referer: SXJZG
 
 
-#诚泰财险api
+##诚泰财险api
+#chengtai:
+#  api:
+#    #    ctPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvuUnoPTFin84nDdpNZFDiGZgUKn6d9fbp6F4/fqrb6pFoJX/wLMr0IsheP0ZnVCPpLGKLjflPNHJo/P9WRRTSM67D8fRD8GKoq+7CtSJkdIticASpN/U8AgJiNV6xdReJcMkaAWJ1ZbOQ+nYLg9OE0qQ6cuXqhy/wVrqx72CrvwIDAQAB
+#    #    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=
+#    ctPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSsdhdXaBshYpHRc0mBWugsecv7U7OMmNNNrToXoAE789dfWZ8Im/YBwaB0JEYC55sDVr3pZeIoLLlDlD8IosYJGulQcUrlga5sZ6BjBsfvW+KtoU4H5krR7eKX4dGCHX2qGH9eHJRU1Y7jGhOwjxDvEBHwRlY2Ur/gD2vBcJT8wIDAQAB
+#    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
+#    partnerCode: JZG_TYTQ_SX
+
+#诚泰财险 生产api
 chengtai:
   api:
     ctPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvuUnoPTFin84nDdpNZFDiGZgUKn6d9fbp6F4/fqrb6pFoJX/wLMr0IsheP0ZnVCPpLGKLjflPNHJo/P9WRRTSM67D8fRD8GKoq+7CtSJkdIticASpN/U8AgJiNV6xdReJcMkaAWJ1ZbOQ+nYLg9OE0qQ6cuXqhy/wVrqx72CrvwIDAQAB
@@ -80,25 +103,42 @@ chengtai:
     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=
     partnerCode: JZG_TYTQ_SX
 
+
 #大家财险api
 dajia:
   api:
-    encryptKey: "By92YPLvG89XyFqv"
+    encryptKey: "qwertyuiopasdfgh"
 
 
-#国任财险测试api
+##国任财险测试api
+#guoren:
+#  api:
+#    baseUrl: https://devyun.guorenpcic.com/api/grchannel-interface/httpCurrency/httpJsonCommonEntrance
+#    uploadUrl: https://devyun.guorenpcic.com/api/grecar/photo/upload
+#    redirectUrl: http://39.98.239.48/web-api/api/guoRen/callBack
+#    policyUrl: https://devyun.guorenpcic.com/api/grsavecarcore/savecarcore/getElePolicyForGrecar?certiNo=
+#    policyFlagUrl: https://devyun.guorenpcic.com/api/grsavecarcore/savecarcore/getElePolicyFlagForGrecar?certiNo=
+#    serveCode: GR0002
+#    channelCode: jindouyun
+#    interfaceUserCode: guoren_tp_jdy
+#    interfacePwd: Q31gIrhZgQc=
+#    iftest: Y
+# 国任生产api
 guoren:
   api:
-    baseUrl: https://devyun.guorenpcic.com/api/grchannel-interface/httpCurrency/httpJsonCommonEntrance
-    uploadUrl: https://devyun.guorenpcic.com/api/grecar/photo/upload
-    redirectUrl: http://39.98.239.48/web-api/api/guoRen/callBack
-    policyUrl: https://devyun.guorenpcic.com/api/grsavecarcore/savecarcore/getElePolicyForGrecar?certiNo=
-    policyFlagUrl: https://devyun.guorenpcic.com/api/grsavecarcore/savecarcore/getElePolicyFlagForGrecar?certiNo=
+    baseUrl: https://rbt.guorenpcic.com/api/grchannel-interface/httpCurrency/httpJsonCommonEntrance
+    uploadUrl: https://rbt.guorenpcic.com/api/grecar/photo/upload
+    redirectUrl: https://sxzgkj.baoxianzhanggui.com/web-api/api/guoRen/callBack
+    policyUrl: https://rbt.guorenpcic.com/api/grsavecarcore/savecarcore/getElePolicyForGrecar?certiNo=
+    policyFlagUrl: https://rbt.guorenpcic.com/api/grsavecarcore/savecarcore/getElePolicyFlagForGrecar?certiNo=
     serveCode: GR0002
-    channelCode: jindouyun
-    interfaceUserCode: guoren_tp_jdy
-    interfacePwd: Q31gIrhZgQc=
-    iftest: Y
+    channelCode: TQDL
+    interfaceUserCode: TQDL
+    interfacePwd: $2a$04$r4neihDJh420OyWEji5w5OMbiyHqYEZHJGLZP0FHFEjXmr7nVW7te
+    iftest: N
+
+
+
 #guoren:
 #  api:
 #    baseUrl: https://rbt.guorenpcic.com/api/grchannel-interface/httpCurrency/httpJsonCommonEntrance
@@ -118,15 +158,25 @@ huatai:
     sourceCode: '016'
     #    baseUrl: https://gears.pc.ehuatai.com:9003/interFaces/common/AutoInsuranceQuotation.do
     baseUrl: https://hound_t.pc.ehuatai.com/third/interFaces/common/AutoInsuranceQuotation.do
-    selfPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYUuKVmeF5N66v6MQmOR8pt4o33yrio/ZrDf2ehk/kHJ2BYdI+xE9dLrZW5dm0y8yPpIHN39JaLuYOlWz5DVsWJTSPj9eaq0hOiY9BGAHJ3yMHdX3wygpcD11BVc5v4wbX/kyAhmatK69sb4zzAtEve1NS/YwZVuGch0CrkGw3YQIDAQAB
-    selfPrivateKey: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJhS4pWZ4Xk3rq/oxCY5Hym3ijffKuKj9msN/Z6GT+QcnYFh0j7ET10utlbl2bTLzI+kgc3f0lou5g6VbPkNWxYlNI+P15qrSE6Jj0EYAcnfIwd1ffDKClwPXUFVzm/jBtf+TICGZq0rr2xvjPMC0S97U1L9jBlW4ZyHQKuQbDdhAgMBAAECgYAktOyXYoK8RFfbWjtSfrdsxScQub3K6foq6C8y8Wj1LpQiJqGUsJfze5tDK5agA/CiuODy7LnzM5QK9aVSCw7k0r8EeGpHcYRdLYZM0vXVFK2gIQctFemK4c6sg5p0Bn1LNRbJG7rgMMEA/OxcF6vyQahhFtPVtAQwc+dT0PV51QJBANd66rfTuxSRvIC/RE4W6iqzed2YZtx+0kd7KiN78Y4X6spposFCH4ALf4jUeRRXZAm+Qu71cq21m2GsQZ8bZdMCQQC096ilZXEjmEuvopQR3JvPbgAF+MtItusyDDsMR1CWwXq9XGMmxi6GhFY7r7C8b40j1IchVAEY5BcwxJwfjql7AkAp5QYZs5reBu/FgGqBXEcvAjIheW4WVLoBl9q7h2+RlujZbexs8rQ5KwMi0VyxLcSPeGR/HU2spHCPbvRbQPJtAkBANK4tIHSnwFz6D6ChRbgyPEDd3YuiXOPNefFpRdQd6L93d9Pl6eKP71v5CTiXYqyczcaz2G4bOrHPp7IMsD0JAkBO/q3ZMT+Nj2jdMn2AR1h+ngn38JnK46PznU0WoRPx72YoWbLxvaGWpu8scZAhpYeq/n+52NHFfu8ayDRNWjP2
+    selfPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBOtXf1T/no13LOuy5ti+/d+SADHns8hAv3+LjhDFsQRbHk3tHhnUNX7I8b25576AVmgraefS7jnpyB299f58PK8WkWZN+UB6pcyEpktrtqOnKcaQSTbkQzaseCW4sCRdoea0alzSXUuXC2FN0pHAE3JkT07e5doX3IHas2GJAkwIDAQAB
+    selfPrivateKey: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAME61d/VP+ejXcs67Lm2L7935IAMeezyEC/f4uOEMWxBFseTe0eGdQ1fsjxvbnnvoBWaCtp59LuOenIHb31/nw8rxaRZk35QHqlzISmS2u2o6cpxpBJNuRDNqx4JbiwJF2h5rRqXNJdS5cLYU3SkcATcmRPTt7l2hfcgdqzYYkCTAgMBAAECgYAwAAWRDNBLInHyQjj8CR3jWk0Q4giHq7oJqnwaOIRud9zIxwIgym3ZXKRSDvxKnhQOSa3Yh+MblFEmcmJnsoQ4OedLq7FVOw1eur/nw6jMcROT6ZiP512ZGgKZI1OdkQDpjCqM9Vg1brrFuGdV2RwI9ak2bjKbi7vs6slvd4r3AQJBAOqU+5xkyuaupg9cO/7TIxMgnTQH8W7IC1uDcx3f28QdkP+udJYfU/n1dYyGuhkW66KVANSqz4dsrEiAmfhvydECQQDS304+LEvPi4j8YmNlOXrs1o8H0tPB69svC9ER2YbrTjZf49XvY9fuor11XAprXZhBp8yvJu07FuRWilrQ8FkjAkEAop1qmqzIdweE+ErxECJfQygtsd77v9cPAH5sM752Q0pXtNbD3TmUZkeBGExg/3mDGW5/Z+2M9Y0hFRWJJs6fsQJAO11mV5Z82Tb9H6BLPyoJczeMGLW/q65MjFgVSaMlmoTwRdqMVdKT7bifAbUhscwtmv40X3LkAmiVa8+TdZLUZQJACu2NgPZkw6gjKCZf5xOfvKaC3PqKlhPghq+ypyutzTih9y81+EBJ25emLWNcd5BtIZ/AXmr3UUiGg0zX4s5njA==
     huaTaiPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYyF2SBNzLOP5N5fFW2T2eQ5+iaI5wVpsedu+UY290TVuG152tkdtSuTXsx+8BKnd79/PF966/2aSP4EUm7vD9kvQUnX2EDUiMooorGvDTRxoHNXFGqOtxdMiUOuqx19HwNb4gOXZ1WdjWJwSmqC6ZP6OgxKIotCHJwe826Q/w8wIDAQAB
-    huaTaiKey: AdOdn409KE6Z9XvFsJ
+    huaTaiKey: e1YF83DYB8sj7gEr8M
     key: kFl5aiHALbZ6TMTqQDxghMMC
-    tokenUrl: https://vehpxy.pc.ehuatai.com/sign
+    tokenUrl: https://vehpxy.pc.ehuatai.com/testsign
     username: "UE27017723VPN01"
     password: "Dhbx135....."
     comcode: "9270901-营业部代理业务一部"
+## 渤海财险生产api
+#bohai:
+#  api:
+#    #    url: https://esales.bpic.com.cn
+#    url: http://39.98.238.167/bohai/app-intermediary/gatewayFromPlat
+#    selfPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCGw4XAPHi+K+/F1yb4pP3MTSOurAWsV+o2bzeVLaI+L4AYeXWhMSZ/L5yEX1OvpZKkBRD6KeIzDFqlP+wZ3qgt4n8MoaeA4//Zj4TSXbyXVPtFAtpeTidd7oWBJWcydvhtcWXrhBRh9wErYZ6+hCwh10JBWmSbTcDm0qY8PyqusQIDAQAB
+#    selfPrivateKey: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIbDhcA8eL4r78XXJvik/cxNI66sBaxX6jZvN5Utoj4vgBh5daExJn8vnIRfU6+lkqQFEPop4jMMWqU/7BneqC3ifwyhp4Dj/9mPhNJdvJdU+0UC2l5OJ13uhYElZzJ2+G1xZeuEFGH3ASthnr6ELCHXQkFaZJtNwObSpjw/Kq6xAgMBAAECgYB2odAwNgukfVEJvCjWYYf6PT3YGh60ZIANg0JO1GkqjO4anXFrgLT+6Y7DCJfG296G/N7BGfXCMnHpXqgc7eDlmSy2JVfKzvptgKJBLktP7Yfajg3oY9S8parSK+iyHT6qYqQv6wBmQ3Q9smOp/TM2ndBMDXu9MjoTkNJhrfMDsQJBANbWHciQhazb3Y2DY42hW/zBf7rmmJFrw7aOrEjzw5E+SnGs/vcr3LUWBbSRTYHcoJ+V/kudfwRMlz0SLkfMAvMCQQCglcjNRx35Zw6vNKHE4vTN/ny2gukjvtkzXpPeTUfblrXjK3w3x9aWBZ/MUiphVe5NB8CAtlfYZMo4UG+WMEjLAkA4yHsyydArMinK/5FOm/meQt6p3c0xkpQ2KlurJJLqTtaKWTlCx1scmeeEJGuiCViDFbgS8FvkHQJUZ/vHikq1AkAHbUX/MHXTbg/AzKdaqsB1snpkGoPb0lzLQmmGU36qSjsZSY6SKdzjzVjJo1cwbz/5Mg2WJljDuk2b8yRmBs+nAkEAzoEZmM031u/0KBpukSbqef8JgJOZ0Do9KDbf2P6YuBal6drUeNYVhImKBxQAbjETp9m5TxxW/dkKmHCnc3zqsA==
+#    boHaiPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIC3wgJd+7Wue63Qjdh3/uscQSKec2m9gaeCq007kjEiSFES5Tfx75VPSxRj6qk6XN4umHOsHY+W9jkv+Cj4+z3XpPozsRdoj21oxPx8fPJzpVeaUHrEkZtj9Yvo/KhByBK5sRjKmlENXVF3wXVfAg48JZR2XUyUcBdZhR9aHhoQIDAQAB
+#    insurerCode: 'BPIC'
+
 # 渤海财险生产api
 bohai:
   api:
@@ -146,19 +196,34 @@ bohai:
 #    boHaiPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKbJHlAPiXza9A7Mfs2cLvysKa5GjdMtG1QQv8oADkAgcdujRq0aHVjNFXoVm7b1DdlhEAdhKXJ7XyY/2zoEbpoU4YxzIftloHZ0vd/k4vgAg5beH972jpWZj6N3ER+EgR73+Ui0p0pdXIRjDF4o8mWSLw8W8Z93eILtLg0DcOIwIDAQAB
 #    insurerCode: 'BPIC'
 
-#中煤财险测试
+##中煤财险测试
+#zhongmei:
+#  api:
+#    #    source: 326
+#    #    token: THIRDSCOuloft2020052818346904zmYBSX
+#    url: https://test.echinacoal.com/singlePlatform/
+#    imageUrl: https://test.echinacoal.com/singlePlatform/others/
+#    smsUrl: https://test.echinacoal.com/singlePlatform/prpall/
+#    pageUrl: https://www.baidu.com/
+#    callbackDomain: https://test.baoxianzhanggui.com/web-api/
+#    callbackUrl: /order/zhongMeiApi/underwritingCallback
+#    passMsgUrl: /order/zhongMeiApi/auditCallback
+#    sessionKey: 1237891234567589
+
+#中煤生产测试
+# 中煤配置信息
 zhongmei:
   api:
     #    source: 326
-    #    token: THIRDSCOuloft2020052818346904zmYBSX
-    url: https://test.echinacoal.com/singlePlatform/
-    imageUrl: https://test.echinacoal.com/singlePlatform/others/
-    smsUrl: https://test.echinacoal.com/singlePlatform/prpall/
-    pageUrl: https://www.baidu.com/
-    callbackDomain: https://test.baoxianzhanggui.com/web-api/
+    #    token: THIRDSCOuloft2020052818346904zmYBSXXHTQ
+    url: https://www.echinacoal.com/singlePlatform/
+    imageUrl: https://www.echinacoal.com/singlePlatform/others/
+    smsUrl: https://www.echinacoal.com/singlePlatform/prpall/
+    pageUrl: http://www.baidu.com
+    callbackDomain: https://sxzgkj.baoxianzhanggui.com/web-api
     callbackUrl: /order/zhongMeiApi/underwritingCallback
     passMsgUrl: /order/zhongMeiApi/auditCallback
-    sessionKey: 1237891234567589
+    sessionKey: 3788034787907281
   crawler:
     baseUrl: https://hxkscd.chinacoal-ins.com/singlePlatform
     imageUrl: https://image.chinacoal-ins.com/SunICMS
@@ -189,3 +254,16 @@ zijin:
 
 zhongAn:
   id: "975113"
+
+
+
+feign:
+  client:
+    jzg-insurance:
+      url: http://192.168.0.250:9898/
+    jzg-org:
+      url: http://192.168.0.250:9084/
+    jzg-costsorrule:
+      url: http://192.168.0.250:9085/
+    jzg-platform:
+      url: http://192.168.0.250:9083/

+ 5 - 0
tenant/insurance/quotation-summary/src/main/resources/application.yaml

@@ -55,3 +55,8 @@ rocketmq:
     enabledIsolation: true
     # 隔离环境名称,拼接到topic后,topic_dev,默认空字符串
     environment: dev
+
+
+logging:
+  level:
+    org.springframework.statemachine: ERROR

+ 17 - 5
tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml

@@ -26,10 +26,21 @@
         update_time,update_by,is_problem
     </sql>
     <select id="queryPage" resultType="com.jzg.commons.entity.orders.vo.FeeAuditVo">
-        SELECT ifa.order_no as orderNo,io.company_name as companyName,
-               ioci.license_no AS licenseNo,iocui.name as insurName,
-               io.entry_status as orderType,suji.name as name, su.mobile as mobile,
-               suji.type_attr as attrType,io.signing_time as signingTime,
+        SELECT
+            ifa.order_no as orderNo,
+            io.company_name as companyName,
+            ioci.license_no AS licenseNo,
+            iocui.name as insurName,
+            CASE io.entry_status
+            WHEN 1 THEN '车险出单'
+            WHEN 2 THEN '待客录单'
+            WHEN 3 THEN '补录订单'
+            ELSE '未知状态'
+            END AS order_type,
+            suji.name as name,
+            su.mobile as mobile,
+               suji.type_attr as attrType,
+               io.signing_time as signingTime,
                io.create_time as quotationTime, sua.username as dockingPerson,
                pa.agreement_abbreviation as agreementName,io.product_name as productName,
                ioc.jq_premium as jqPremium, ioc.sy_premium as syPremium, ioc.jy_premium as jyPremium,
@@ -40,7 +51,8 @@
         LEFT JOIN ins_orders as io on ifa.order_no = io.id
         LEFT JOIN ins_orders_car_info as ioci on io.id = ioci.order_no
         LEFT JOIN ins_orders_car_user_info as iocui on io.id = iocui.order_no and iocui.policy_person_type = 3
-        LEFT JOIN sys_user_jzg_info suji on suji.user_id = io.real_quote_user_id
+        LEFT JOIN sys_user qsu on qsu.mobile = io.real_quote_user_id
+        LEFT JOIN sys_user_jzg_info suji ON suji.user_id = qsu.id and system_code = #{param.systemCode}
         LEFT JOIN sys_user su on su.id = io.real_quote_user_id
         LEFT JOIN sys_dept sd on suji.dept_id = sd.id
         LEFT JOIN ptl_agreement pa on io.agreement_id = pa.id

+ 16 - 2
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml

@@ -323,8 +323,22 @@
     </select>
     
     <select id="selectExternalPolicyMap" resultMap="InsOrdersExternalPolicyMap">
-        select order_no, jq_policy, sy_policy, no_policy, jq_sign,
-               IF(CONCAT_WS( ', ', jq_policy, sy_policy, no_policy, jq_sign ) = '',NULL,CONCAT_WS( ', ', jq_policy, sy_policy, no_policy, jq_sign ))  AS concatenated_string
+        SELECT
+            order_no,
+            jq_policy,
+            sy_policy,
+            no_policy,
+            jq_sign,
+
+            NULLIF(
+                    CONCAT_WS(', ',
+                              NULLIF(jq_policy, ''),
+                              NULLIF(sy_policy, ''),
+                              NULLIF(no_policy, ''),
+                              NULLIF(jq_sign, '')
+                    ),
+                    ''
+            ) AS concatenated_string
         from ins_orders_external_policy where order_no = #{orderNo}
     </select>
 

+ 15 - 15
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/build/YangGuangApiQuoteResultsVoBuild.java

@@ -158,29 +158,29 @@ public final class YangGuangApiQuoteResultsVoBuild {
         // 评分处理
         JSONArray scoreArray = new JSONArray();
         scoreArray.add(new JSONObject()
-                .fluentPut("storeName","交强合并分")
-                .fluentPut("storeKey","markingnobcCI")
-                .fluentPut("store",discount.getMarkingnobcCI()));
+                .fluentPut("scoreName","交强合并分")
+                .fluentPut("scoreKey","markingnobcCI")
+                .fluentPut("score",discount.getMarkingnobcCI()));
 
         scoreArray.add(new JSONObject()
-                .fluentPut("storeName","商业合并分")
-                .fluentPut("storeKey","markingnobcBI")
-                .fluentPut("store",discount.getMarkingnobcBI()));
+                .fluentPut("scoreName","商业合并分")
+                .fluentPut("scoreKey","markingnobcBI")
+                .fluentPut("score",discount.getMarkingnobcBI()));
 
         scoreArray.add(new JSONObject()
-                .fluentPut("storeName","向阳花标识")
-                .fluentPut("storeKey","XyhGrade")
-                .fluentPut("store",yangGuangAccuracyCalculateResponse.getXYHGrade() != null ? "1" : "0"));
+                .fluentPut("scoreName","向阳花标识")
+                .fluentPut("scoreKey","XyhGrade")
+                .fluentPut("score",yangGuangAccuracyCalculateResponse.getXYHGrade() != null ? "1" : "0"));
 
         scoreArray.add(new JSONObject()
-                .fluentPut("storeName","红黄蓝车系")
-                .fluentPut("storeKey","SeriesTypeActualName")
-                .fluentPut("store",yangGuangAccuracyCalculateResponse.getSeriesTypeActualName() != null ? yangGuangAccuracyCalculateResponse.getSeriesTypeActualName() : ""));
+                .fluentPut("scoreName","红黄蓝车系")
+                .fluentPut("scoreKey","SeriesTypeActualName")
+                .fluentPut("score",yangGuangAccuracyCalculateResponse.getSeriesTypeActualName() != null ? yangGuangAccuracyCalculateResponse.getSeriesTypeActualName() : ""));
 
         scoreArray.add(new JSONObject()
-                .fluentPut("storeName","合并经营成本率")
-                .fluentPut("storeKey","vascostmarginbc")
-                .fluentPut("store",yangGuangAccuracyCalculateResponse.getVascostmarginbc()));
+                .fluentPut("scoreName","合并经营成本率")
+                .fluentPut("scoreKey","vascostmarginbc")
+                .fluentPut("score",yangGuangAccuracyCalculateResponse.getVascostmarginbc()));
         scoreVo.setScoreJson(scoreArray);
 
         if (yangGuangAccuracyCalculateResponse.getNewAndRenewalFlagCI() != null) {

+ 7 - 1
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/componet/YangGuangApiRequestComponent.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.jzg.commons.constants.quote.enums.base.InsuranceEnum;
+import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.commons.utils.InsuranceLog;
 import com.jzg.quotation.yangguang.api.entity.request.*;
 import com.jzg.quotation.yangguang.api.entity.response.*;
@@ -58,7 +59,12 @@ public class YangGuangApiRequestComponent {
         String decryptedResponse = yangGuangEncryption.authcodeDecode(body, yangGuangApiProperties.getKey());
 
         InsuranceLog.infoLog(InsuranceEnum.YGBX.getPinyin(), "\n\t---------> {} \n\t---------> 响应参数:{}", type, decryptedResponse);
-        JSONObject jsonObject = JSON.parseObject(decryptedResponse);
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject = JSON.parseObject(decryptedResponse);
+        }catch (Exception e){
+            throw new SystemException(type + "解密失败");
+        }
         S t = jsonObject.toJavaObject(tClass);
         // 反序列化响应
         return JSON.parseObject(decryptedResponse).toJavaObject(tClass);

+ 4 - 4
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/service/impl/YangGuangApiRequestImpl.java

@@ -186,10 +186,10 @@ public class YangGuangApiRequestImpl implements YangGuangApiRequest {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
                 StringBuilder sb = new StringBuilder();
                 if (null != yangGuangSubmitResponse.getCiUnderWriteMsg()) {
-                    sb.append(String.format("交强险提示信息:s%", yangGuangSubmitResponse.getBiUnderWriteMsg()));
+                    sb.append(String.format("交强险提示信息:%s", yangGuangSubmitResponse.getBiUnderWriteMsg()));
                 }
                 if (null != yangGuangSubmitResponse.getBiUnderWriteMsg()) {
-                    sb.append(String.format("商业险提示信息:s%", yangGuangSubmitResponse.getBiUnderWriteMsg()));
+                    sb.append(String.format("商业险提示信息:%s", yangGuangSubmitResponse.getBiUnderWriteMsg()));
                 }
                 underwritingResultsVo.setUnderwritingResult(sb.toString());
             } else if ("1".equals(statusJq) || "1".equals(statusSy)) {
@@ -350,10 +350,10 @@ public class YangGuangApiRequestImpl implements YangGuangApiRequest {
                 orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.AUDIT_FAIL);
                 StringBuilder sb = new StringBuilder();
                 if (null != yangGuangProposalStatusQueryResponse.getCiUnderWriteMsg()) {
-                    sb.append(String.format("交强险提示信息:s%", yangGuangProposalStatusQueryResponse.getBiUnderWriteMsg()));
+                    sb.append(String.format("交强险提示信息:%s", yangGuangProposalStatusQueryResponse.getBiUnderWriteMsg()));
                 }
                 if (null != yangGuangProposalStatusQueryResponse.getBiUnderWriteMsg()) {
-                    sb.append(String.format("商业险提示信息:s%", yangGuangProposalStatusQueryResponse.getBiUnderWriteMsg()));
+                    sb.append(String.format("商业险提示信息:%s", yangGuangProposalStatusQueryResponse.getBiUnderWriteMsg()));
                 }
                 orderStatusResultVo.setErrorMsg(sb.toString());
             } else if ("1".equals(statusJq) || "1".equals(statusSy)) {

+ 2 - 2
tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/service/impl/YongChengApiRequestImpl.java

@@ -215,10 +215,10 @@ public class YongChengApiRequestImpl implements YongChengApiRequest {
                     underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
                     StringBuilder sb = new StringBuilder();
                     if (null != auditResponse.getSailResponseMessagedate()) {
-                        sb.append(String.format("交强险提示信息:s%", auditResponse.getSailResponseMessagedate().getCMessage()));
+                        sb.append(String.format("交强险提示信息:%s", auditResponse.getSailResponseMessagedate().getCMessage()));
                     }
                     if (null != auditResponse.getCiResponseMessagedate()) {
-                        sb.append(String.format(" 商业险提示信息:s%", auditResponse.getCiResponseMessagedate().getCMessage()));
+                        sb.append(String.format(" 商业险提示信息:%s", auditResponse.getCiResponseMessagedate().getCMessage()));
                     }
                     underwritingResultsVo.setUnderwritingResult(sb.toString());
 

+ 15 - 3
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/entity/Request/ZmCrawlerActualValueRequest.java

@@ -1,14 +1,19 @@
 package com.jzg.quotation.zhongmei.crawler.entity.Request;
 
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.quotation.commons.utils.DateUtil;
 import com.jzg.quotation.zhongmei.api.entity.BaseRequestHead;
 import com.jzg.quotation.zhongmei.api.entity.request.BaseRequest;
 import com.jzg.quotation.zhongmei.crawler.constant.enums.ZmCrawlerTransCode;
+import com.jzg.quotation.zhongmei.crawler.entity.Response.ZmCrawlerModelQueryResponse;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serial;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 
 /**
@@ -82,11 +87,17 @@ public class ZmCrawlerActualValueRequest extends BaseRequest {
      */
     private String energyTypeCode;
 
-    public ZmCrawlerActualValueRequest(CarInfoVo carInfoVo, BaseRequestHead head) {
+    /**
+     * 车型code
+     */
+    private String modelCode;
+
+    public ZmCrawlerActualValueRequest(CarInfoVo carInfoVo, ZmCrawlerModelQueryResponse.FullCarDataDTO fullCarDataDTO, BaseRequestHead head, String startDate) throws ParseException {
         this.setHead(head);
         this.approvedPassengersCapacity = Integer.parseInt(carInfoVo.getSeatCount());
-        this.validDate = DateUtil.getDateFormat(new Date(), DateUtil.FULL_TIME_SPLIT_PATTERN);
-        this.purchasePrice = Integer.parseInt(carInfoVo.getPurchasePrice());
+        // 校验时间  按 投保日期计算
+        this.validDate = DateUtil.getDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(startDate), DateUtil.FULL_TIME_SPLIT_PATTERN);
+        this.purchasePrice = fullCarDataDTO.getFullCarData().getPurchasePrice();
         this.motorUsageTypeCode = carInfoVo.getCarNatureCode();
         if(carInfoVo.getEnergyTypeCode().equals("0")){
             this.planCode = "1379";
@@ -105,6 +116,7 @@ public class ZmCrawlerActualValueRequest extends BaseRequest {
         this.carUseType = carInfoVo.getVehicleUseCode();
         this.motorMainType = carInfoVo.getCarKindCode();
         this.motorSubType = "101";
+        this.modelCode = fullCarDataDTO.getFullCarData().getLocalModelCode();
         this.energyTypeCode = carInfoVo.getEnergyTypeCode();
     }
 

+ 6 - 2
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/entity/Request/ZmCrawlerQuotedPriceRequest.java

@@ -459,6 +459,9 @@ public class ZmCrawlerQuotedPriceRequest extends BaseRequest {
                 @JsonProperty("actualValue")
                 private Double actualValue;
 
+                @JsonProperty("actualValueCarLoss")
+                private Double actualValueCarLoss;
+
                 @JsonProperty("carCheckReason")
                 private String carCheckReason;
 
@@ -600,6 +603,7 @@ public class ZmCrawlerQuotedPriceRequest extends BaseRequest {
                 public PolicyCarDTO (CarInfoVo carInfoVo, ZmCrawlerActualValueResponse actualValueResponse, ZmCrawlerModelQueryResponse.FullCarDataDTO.FullCarData fullCarData) {
                     this.vIN = carInfoVo.getVinNo();
                     this.actualValue = actualValueResponse.getActualValue();
+                    this.actualValueCarLoss = actualValueResponse.getActualValue();
                     this.aheadRule = "1";
                     this.attachNature = "04";
                     this.averageMileage = "";
@@ -621,8 +625,8 @@ public class ZmCrawlerQuotedPriceRequest extends BaseRequest {
                         this.motorTypeCode = "21";
                     }
                     this.motorUsageTypeCode = carInfoVo.getCarNatureCode();
-                    this.newCarSign = false;
-                    this.noDamageYears = "0";
+                    this.newCarSign = true;
+                    this.noDamageYears = "";
                     this.personLiable = "";
                     this.plateColorCode = carInfoVo.getLicenseColorCode();
                     this.plateNo = carInfoVo.getLicenseNo();

+ 17 - 2
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/Impl/ZhongMeiCrawlerRequestImpl.java

@@ -87,7 +87,7 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
             // 2.1 获取相同的车型
             ZmCrawlerModelQueryResponse.FullCarDataDTO fullCarDataDTO = CarModelsFilterUtils.to(fullCarDataDTOS, quoteVo.getCarInfoVo());
             // 2.2 计算折旧价格
-            ZmCrawlerActualValueRequest actualValueRequest = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),head);
+            ZmCrawlerActualValueRequest actualValueRequest = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),fullCarDataDTO,head,quoteVo.getCiRiskInfoVo().getStartDate());
             ZmCrawlerActualValueResponse actualValueResponse = zmCrawlerRequestComponent.getActualValue(actualValueRequest);
             List<ZmCrawlerRideAccidentResponse.BaseInfoDTO> accident = new ArrayList<>();
             if (quoteVo.getAccidentalDrivings() != null) {
@@ -152,7 +152,22 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
         Matcher matcher = DUPLICATE_END_TIME_PATTERN.matcher(returnMessage);
         if (matcher.find()) {
             String shortEndTime = matcher.group(1);
-            return shortEndTime + ":00";
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+            shortEndTime = shortEndTime + ":00";
+            // 判断是否是及时起保的 如果是则 day + 1
+            LocalDateTime dateTime = LocalDateTime.parse(shortEndTime,formatter);
+            if(dateTime.getHour() == 0 && dateTime.getMinute() == 0){
+                return shortEndTime + ":00";
+            }else{
+                dateTime = dateTime.plusDays(1)
+                        .withHour(0)
+                        .withMinute(0)
+                        .withSecond(0);
+                return dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+
+            }
+
         }
         return null;
     }

+ 11 - 4
tenant/organization/src/main/java/com/jzg/organization/client/EsmInsCompanyClient.java

@@ -4,14 +4,13 @@ import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.agreement.po.PtlAgreementAttribution;
 import com.jzg.commons.entity.po.EsmInsCompany;
 import com.jzg.commons.entity.system.vo.SysSystemBusPermsVo;
+import com.jzg.commons.request.RequestSingleParam;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
-@FeignClient(name="jzg-platform",url = "http://localhost:8001/")
+@FeignClient(name="jzg-platform",url = "${feign.client.jzg-platform.url}")
 public interface EsmInsCompanyClient {
 
 
@@ -53,4 +52,12 @@ public interface EsmInsCompanyClient {
                                                                                    @RequestHeader("Authorization") String authToken,
                                                                                    @RequestHeader("system_code") String systemCode);
 
+
+    @PostMapping("/esmInsCompany/getParentIds")
+    HttpResult getParentIds(@RequestBody List<String> companyIds);
+
+
+    @PostMapping("/esmInsCompany/getTopCompanyId")
+    HttpResult getTopCompanyId(@RequestSingleParam("companyId") String companyId);
+
 }

+ 15 - 2
tenant/organization/src/main/java/com/jzg/organization/controller/AmountAuditingController.java

@@ -71,7 +71,7 @@ public class AmountAuditingController extends BaseController {
     @Operation(summary = "提现付款")
     public HttpResult verifyAmount(@RequestBody AmountAuditEditParam param){
         sysAmountAuditingService.verifyAmount(param);
-        return HttpResult.ok();
+        return HttpResult.ok("提现审核成功");
     }
 
     /**
@@ -82,6 +82,19 @@ public class AmountAuditingController extends BaseController {
     @Operation(summary = "提现驳回")
     public HttpResult rejectAmount(@RequestBody AmountAuditRejectParam param){
         sysAmountAuditingService.rejectAmount(param);
-        return HttpResult.ok();
+        return HttpResult.ok("提现驳回成功");
+    }
+
+    @PostMapping("/myPayment")
+    @Operation(summary = "我的付款")
+    public HttpResult myPayment(@RequestBody AmountAuditParam param){
+        Page<AmountAuditVo> amountAuditVoPage = sysAmountAuditingService.myPayment(param);
+        return HttpResult.ok(amountAuditVoPage);
+    }
+
+    @PostMapping("/applyWithdraw")
+    @Operation(summary = "申请提现")
+    public HttpResult applyWithdraw(@RequestBody ApplyWithdrawParam applyWithdrawParam){
+        return sysAmountAuditingService.applyWithdraw(applyWithdrawParam) ? HttpResult.ok("提现成功") : HttpResult.error("提现失败");
     }
 }

+ 26 - 0
tenant/organization/src/main/java/com/jzg/organization/controller/NewCarJudgeRulesController.java

@@ -8,7 +8,9 @@ import com.jzg.commons.entity.dto.*;
 import com.jzg.commons.entity.enums.YesNoEnum;
 import com.jzg.commons.entity.po.OperatorTrajectory;
 import com.jzg.commons.entity.po.PtlAgreement;
+import com.jzg.commons.entity.po.PtlNewCarJudgeRules;
 import com.jzg.commons.entity.vo.AgreementVo;
+import com.jzg.commons.entity.vo.NewCarQuery;
 import com.jzg.commons.entity.vo.UpAndDownVo;
 import com.jzg.commons.service.OperatorTrajectoryService;
 import com.jzg.commons.util.AssertionUtils;
@@ -47,4 +49,28 @@ public class NewCarJudgeRulesController extends BaseController {
         Boolean result = newCarJudgeRulesService.compareRule(registerDate, companyId, vehicleType);
         return HttpResult.ok(result);
     }
+
+    @Operation(summary = "获取新旧车列表")
+    @PostMapping("getNewCarList")
+    public HttpResult getNewCarList(@RequestBody NewCarQuery newCarQuery){
+        return HttpResult.ok(newCarJudgeRulesService.getNewCarList(newCarQuery));
+    }
+
+    @Operation(summary = "添加新旧车规则")
+    @PostMapping("addNewCar")
+    public HttpResult addNewCar(@RequestBody PtlNewCarJudgeRules newCarJudgeRules){
+        return newCarJudgeRulesService.addNewCar(newCarJudgeRules) ? HttpResult.ok("添加新旧车规则成功") : HttpResult.error("添加新旧车规则失败");
+    }
+
+    @Operation(summary = "修改新旧车规则")
+    @PostMapping("updateNewCar")
+    public HttpResult updateNewCar(@RequestBody PtlNewCarJudgeRules newCarJudgeRules){
+        return newCarJudgeRulesService.updateNewCar(newCarJudgeRules) ? HttpResult.ok("修改新旧车规则成功") : HttpResult.error("修改新旧车规则失败");
+    }
+
+    @Operation(summary = "删除新旧车规则")
+    @PostMapping("delNewCar")
+    public HttpResult delNewCar(@RequestBody PtlNewCarJudgeRules newCarJudgeRules){
+        return newCarJudgeRulesService.delNewCar(newCarJudgeRules) ? HttpResult.ok("删除新旧车规则成功") : HttpResult.error("删除新旧车规则失败");
+    }
 }

+ 11 - 13
tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java

@@ -48,7 +48,7 @@ public class ReceivableController {
     @PostMapping("getUnauditedOrder")
     @Operation(summary = "获取未审核的订单")
     public HttpResult getUnauditedOrder(@RequestBody ReceivableQueryVo receivableQueryVo){
-        if (receivableQueryVo.getAgreementType().equals(""))
+        if (Objects.isNull(receivableQueryVo.getAgreementType()) || receivableQueryVo.getAgreementType().equals(""))
         {
             receivableQueryVo.setAgreementType("1");
         }
@@ -62,17 +62,15 @@ public class ReceivableController {
 
     @PostMapping("addReceivable")
     @Operation(summary = "添加应收记录")
-    public HttpResult addReceivable(@RequestSingleParam("orderNo") List<String> orderNo){
-        List<InsPlyIncome> auditedOrder  = receivableService.getUnauditOrderList(orderNo, InsOrderStatusEnum.UNDERWRITED.getCode(),"0");
-        AssertionUtils.isEmpty(auditedOrder,"订单不存在");
-        boolean result = receivableService.saveAuditedOrder(auditedOrder);
+    public HttpResult addReceivable(@RequestSingleParam("orderNos") List<String> orderNos){
+        boolean result = receivableService.saveAuditedOrder(orderNos);
         return result ? HttpResult.ok("添加成功") : HttpResult.error("添加失败");
     }
 
     @PostMapping("getCommissionReceivableList")
     @Operation(summary = "获取私有协议手续费列表")
     public HttpResult getCommissionReceivableList(@RequestBody ReceivableQueryVo receivableQueryVo){
-        receivableQueryVo.setQueryType("1");
+        receivableQueryVo.setQueryType("2");
         return HttpResult.ok(receivableService.getReceivablePage(receivableQueryVo));
     }
 
@@ -86,14 +84,14 @@ public class ReceivableController {
     @PostMapping("getJyCommissionReceivableList")
     @Operation(summary = "获取私有协议驾意险手续费列表")
     public HttpResult getJyCommissionReceivableList(@RequestBody ReceivableQueryVo receivableQueryVo){
-        receivableQueryVo.setQueryType("3");
+        receivableQueryVo.setQueryType("2");
         return HttpResult.ok(receivableService.getReceivablePage(receivableQueryVo));
     }
 
     @PostMapping("getJyOtherReceivableList")
     @Operation(summary = "获取私有协议驾意险跟单费列表")
     public HttpResult getJyOtherReceivableList(@RequestBody ReceivableQueryVo receivableQueryVo){
-        receivableQueryVo.setQueryType("4");
+        receivableQueryVo.setQueryType("2");
         return HttpResult.ok(receivableService.getReceivablePage(receivableQueryVo));
     }
 
@@ -104,11 +102,11 @@ public class ReceivableController {
     }
 
 
-    @PostMapping("getPlatformReceivableList")
-    @Operation(summary = "获取平台协议驾意险列表")
-    public void getPlatformReceivableList(@RequestBody ReceivableQueryVo receivableQueryVo){
-
-    }
+//    @PostMapping("getPlatformReceivableList")
+//    @Operation(summary = "获取平台协议驾意险列表")
+//    public void getPlatformReceivableList(@RequestBody ReceivableQueryVo receivableQueryVo){
+//
+//    }
 
     @PostMapping("commissionInvoicing")
     @Operation(summary = "手续费开票")

+ 19 - 1
tenant/organization/src/main/java/com/jzg/organization/controller/UserAccountController.java

@@ -2,19 +2,25 @@ package com.jzg.organization.controller;
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.account.po.SysUserAccountIncomeLog;
 import com.jzg.commons.entity.dto.IncomeAndExpenseParam;
 import com.jzg.commons.entity.dto.SysUserAccountPageParam;
 import com.jzg.commons.entity.dto.SysUserAccountParam;
+import com.jzg.commons.entity.dto.WithdrawParam;
 import com.jzg.commons.entity.po.SysUserAccount;
 import com.jzg.commons.entity.vo.SysUserAccountVo;
 import com.jzg.commons.entity.vo.UserAccountStatisVo;
+import com.jzg.organization.service.SysUserAccountIncomeLogService;
 import com.jzg.organization.service.SysUserAccountService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 @Tag(name="用户账户接口")
 @RestController
 @RequestMapping("/userAccount")
@@ -23,6 +29,12 @@ public class UserAccountController {
     @Autowired
     private SysUserAccountService userAccountService;
 
+    @Autowired
+    private SysUserAccountIncomeLogService sysUserAccountIncomeLogService;
+
+    @Autowired
+    private BaseController baseController;
+
     /**
      * 用户账户信息查询
      * @param userId
@@ -43,7 +55,7 @@ public class UserAccountController {
     @PostMapping("/saveOrUpdate")
     public HttpResult saveOrUpdate(@RequestBody SysUserAccount account) {
         boolean isSuccess = userAccountService.saveOrUpdate(account);
-        return isSuccess ? HttpResult.ok() : HttpResult.error();
+        return isSuccess ? HttpResult.ok("用户账户信息更新成功") : HttpResult.error("用户账户信息更新失败");
     }
 
     /**
@@ -80,4 +92,10 @@ public class UserAccountController {
         return HttpResult.ok(userAccountService.getIncomeAndExpense(param));
     }
 
+    @Operation(summary = "添加用户钱包账户记录")
+    @PostMapping("/addUserAccountIncomeLog")
+    public HttpResult addUserAccountIncomeLog(@RequestBody List<SysUserAccountIncomeLog> incomeLogs){
+        return HttpResult.ok(sysUserAccountIncomeLogService.saveBatch(incomeLogs));
+    }
+
 }

+ 7 - 0
tenant/organization/src/main/java/com/jzg/organization/controller/UserController.java

@@ -207,6 +207,13 @@ public class UserController extends BaseController {
         return HttpResult.ok(sysUserService.getUserInfoByMobile(mobile));
     }
 
+    @Operation(summary = "获取用户唯一id", description = "获取用户唯一id")
+    @GetMapping(value = "/getUserOnlyIdByMobile")
+    public HttpResult<SysUser> getUserOnlyIdByMobile(@RequestParam String mobile){
+        SysUser userByMobile = sysUserService.getUserByMobile(mobile);
+        return HttpResult.ok(userByMobile);
+    }
+
     @OperatorTrajectory(moduleName = "业务管理/业务员管理/添加合伙人",mapperClass = SysUserJzgInfoMapper.class,entityClass = SysUserVo.class)
     @Operation(summary = "新增合伙人接口", description = "新增合伙人接口")
     @PostMapping(value = "/saveByPartner")

+ 2 - 1
tenant/organization/src/main/java/com/jzg/organization/mapper/NewCarJudgeRulesMapper.java

@@ -1,6 +1,7 @@
 package com.jzg.organization.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.entity.po.PtlAgreementCostRule;
 import com.jzg.commons.entity.po.PtlNewCarJudgeRules;
 import org.apache.ibatis.annotations.Delete;
@@ -8,5 +9,5 @@ import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
 public interface NewCarJudgeRulesMapper extends BaseMapper<PtlNewCarJudgeRules> {
-
+    public Page<PtlNewCarJudgeRules> getNewCarList(Page page);
 }

+ 7 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementMapper.java

@@ -35,6 +35,13 @@ public interface PtlAgreementMapper extends BaseMapper<PtlAgreement> {
      * @return
      */
     AgreementVo queryById(@Param("id") String id);
+
+    /**
+     * 根据保险公司id 获取协议列表
+     * @param companyId
+     * @return
+     */
+    List<PtlAgreement> getByCompanyId(String companyId);
 }
 
 

+ 8 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/SysAmountAuditingMapper.java

@@ -22,6 +22,14 @@ public interface SysAmountAuditingMapper extends BaseMapper<SysAmountAuditing> {
      * @return
      */
     Page<AmountAuditVo> queryPage(Page page,@Param("param") AmountAuditParam param);
+
+    /**
+     * 我的付款列表分页
+     * @param page
+     * @param param
+     * @return
+     */
+    Page<AmountAuditVo> queryPaymentPage(Page page,@Param("param") AmountAuditParam param,@Param("userName") String userName);
 }
 
 

+ 9 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/SysUserAccountIncomeLogMapper.java

@@ -0,0 +1,9 @@
+package com.jzg.organization.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.commons.entity.account.po.SysUserAccountIncomeLog;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SysUserAccountIncomeLogMapper extends BaseMapper<SysUserAccountIncomeLog> {
+}

+ 30 - 0
tenant/organization/src/main/java/com/jzg/organization/service/NewCarJudgeRulesService.java

@@ -1,7 +1,9 @@
 package com.jzg.organization.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jzg.commons.entity.po.PtlNewCarJudgeRules;
+import com.jzg.commons.entity.vo.NewCarQuery;
 import com.jzg.organization.entity.WechatCustomerService;
 import org.springframework.stereotype.Service;
 
@@ -27,5 +29,33 @@ public interface NewCarJudgeRulesService extends IService<PtlNewCarJudgeRules> {
      */
     public Boolean compareRule(String registerDate,String companyId,String vehicleType);
 
+    /**
+     * 获取新旧车列表
+     * @param newCarQuery
+     * @return
+     */
+    public Page<PtlNewCarJudgeRules>  getNewCarList(NewCarQuery newCarQuery);
+
+    /**
+     * 添加新旧车规则
+     * @param ptlNewCarJudgeRules
+     * @return
+     */
+    public Boolean addNewCar(PtlNewCarJudgeRules ptlNewCarJudgeRules);
+
+    /**
+     * 修改新旧车规则
+     * @param ptlNewCarJudgeRules
+     * @return
+     */
+    public Boolean updateNewCar(PtlNewCarJudgeRules ptlNewCarJudgeRules);
+
+    /**
+     * 删除新旧车规则
+     * @param ptlNewCarJudgeRules
+     * @return
+     */
+    public Boolean delNewCar(PtlNewCarJudgeRules ptlNewCarJudgeRules);
+
 
 }

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff