Sfoglia il codice sorgente

Merge branch 'master' into wrq_dev

wangrq 4 mesi fa
parent
commit
268bbaa15e
100 ha cambiato i file con 2792 aggiunte e 928 eliminazioni
  1. 35 0
      commons/src/main/java/com/jzg/commons/config/LocalDateTimeDefiner.java
  2. 9 0
      commons/src/main/java/com/jzg/commons/constants/ProductsType.java
  3. 18 25
      commons/src/main/java/com/jzg/commons/core/page/HttpResult.java
  4. 3 0
      commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatchRulesAttrLink.java
  5. 5 0
      commons/src/main/java/com/jzg/commons/entity/dto/PtlAgreementCostCopyParam.java
  6. 6 3
      commons/src/main/java/com/jzg/commons/entity/dto/SysUserAccountPageParam.java
  7. 3 3
      commons/src/main/java/com/jzg/commons/entity/dto/SysUserAccountParam.java
  8. 3 1
      commons/src/main/java/com/jzg/commons/entity/dto/SysUserJzgInfoBankCardDto.java
  9. 40 9
      commons/src/main/java/com/jzg/commons/entity/finance/dto/CompanySuperviseSettlementReportDto.java
  10. 4 0
      commons/src/main/java/com/jzg/commons/entity/finance/dto/ExportSuperviseSettlementExcelDto.java
  11. 15 2
      commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java
  12. 6 1
      commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncomeInvoice.java
  13. 25 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/AddReceivableVo.java
  14. 26 10
      commons/src/main/java/com/jzg/commons/entity/finance/vo/BatchModifyVo.java
  15. 31 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/ContractVO.java
  16. 6 1
      commons/src/main/java/com/jzg/commons/entity/finance/vo/ImportUpdateExcelResultVo.java
  17. 11 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/IncomeDataVO.java
  18. 304 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InsPlyIncomeExportVo.java
  19. 209 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceReceivableExportExcelVo.java
  20. 12 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceRecordResult.java
  21. 7 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoicingVo.java
  22. 16 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/JyExcelVo.java
  23. 16 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/OtherExcelVo.java
  24. 4 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/ReceivableExportExcelVo.java
  25. 14 2
      commons/src/main/java/com/jzg/commons/entity/finance/vo/SettlementReportQueryVo.java
  26. 1 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/SettlementVo.java
  27. 15 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/SuperviseExcelVo.java
  28. 4 0
      commons/src/main/java/com/jzg/commons/entity/orders/po/InsFeeAudit.java
  29. 2 0
      commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrders.java
  30. 6 0
      commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrdersAccidentalDriving.java
  31. 5 0
      commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrdersTrack.java
  32. 3 0
      commons/src/main/java/com/jzg/commons/entity/orders/vo/FeeAuditVo.java
  33. 5 0
      commons/src/main/java/com/jzg/commons/entity/po/InsFeeOrders.java
  34. 3 0
      commons/src/main/java/com/jzg/commons/entity/po/PtlAgreementUndwrtRulesAttr.java
  35. 5 4
      commons/src/main/java/com/jzg/commons/entity/po/SysAmountAuditing.java
  36. 6 4
      commons/src/main/java/com/jzg/commons/entity/po/SysQueryVehicleConfig.java
  37. 6 4
      commons/src/main/java/com/jzg/commons/entity/po/SysQueryVehicleUrl.java
  38. 5 0
      commons/src/main/java/com/jzg/commons/entity/po/SysUploadFiles.java
  39. 10 0
      commons/src/main/java/com/jzg/commons/entity/quote/vo/base/OrderBase.java
  40. 18 3
      commons/src/main/java/com/jzg/commons/entity/vo/AmountAuditVo.java
  41. 126 0
      commons/src/main/java/com/jzg/commons/util/BigDecimalUtil.java
  42. 1 1
      partner/src/main/java/com/jzg/utils/DistributionUtils.java
  43. 1 0
      platform/src/main/java/com/jzg/service/impl/PtlInsAttributionTemplateServiceImpl.java
  44. 20 1
      platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java
  45. 3 4
      platform/src/main/resources/mapper/EsmInsCompanyMapper.xml
  46. 5 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/DetectLoginRequest.java
  47. 6 4
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/entity/request/GuoRenCrawlerGetCarPriceRequest.java
  48. 5 7
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java
  49. 18 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/constant/enums/JiaYiXianProduct.java
  50. 4 2
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerActualValueRequestRequest.java
  51. 43 12
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerQuotedPriceRequestRequest.java
  52. 258 12
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java
  53. 4 3
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java
  54. 2 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/template/LotteryMessageTemplate.java
  55. 17 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrdersController.java
  56. 7 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/QrCodeController.java
  57. 3 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  58. 6 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/po/SysQuoteConfig.java
  59. 6 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/po/SysQuoteRecord.java
  60. 6 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/po/SysQuoteUser.java
  61. 5 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/po/SysQuoteUserConfigAppend.java
  62. 11 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java
  63. 6 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java
  64. 10 5
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeOrdersServiceImpl.java
  65. 77 15
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  66. 0 3
      tenant/insurance/quotation-summary/src/main/resources/application-prod.yaml
  67. 99 107
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml
  68. 39 32
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeOrdersMapper.xml
  69. 0 21
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderAdjustInfoMapper.xml
  70. 7 23
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderAdjustMapper.xml
  71. 2 0
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderRightsMapper.xml
  72. 2 0
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderRightsPackageMapper.xml
  73. 433 376
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml
  74. 11 9
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersTrackMapper.xml
  75. 16 14
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsTaskImagesMapper.xml
  76. 11 6
      tenant/insurance/quotation-summary/src/main/resources/mapper/SysQueryVehicleConfigMapper.xml
  77. 38 26
      tenant/insurance/quotation-summary/src/main/resources/mapper/SysQuoteRecordMapper.xml
  78. 67 58
      tenant/insurance/quotation-summary/src/main/resources/mapper/SysQuoteUserConfigAppendMapper.xml
  79. 19 9
      tenant/insurance/quotation-summary/src/main/resources/mapper/SysQuoteUserMapper.xml
  80. 1 0
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/entity/request/YangGuangSubmitRequest.java
  81. 1 1
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/service/impl/YangGuangApiOrderServiceImpl.java
  82. 1 1
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerCacheComponent.java
  83. 0 3
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerRequestComponent.java
  84. 4 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/ZhongAnCrawlerConfigureParameters.java
  85. 38 37
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java
  86. 11 2
      tenant/organization/src/main/java/com/jzg/organization/client/InsFeeOrdersClient.java
  87. 26 0
      tenant/organization/src/main/java/com/jzg/organization/client/InsOrdersClient.java
  88. 1 1
      tenant/organization/src/main/java/com/jzg/organization/controller/AccountCardController.java
  89. 24 9
      tenant/organization/src/main/java/com/jzg/organization/controller/AmountAuditingController.java
  90. 1 1
      tenant/organization/src/main/java/com/jzg/organization/controller/PtlAgreementCostController.java
  91. 191 27
      tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java
  92. 1 1
      tenant/organization/src/main/java/com/jzg/organization/controller/UserBankCardController.java
  93. 27 0
      tenant/organization/src/main/java/com/jzg/organization/excel/listener/InvoiceReceivbleExcelListener.java
  94. 10 1
      tenant/organization/src/main/java/com/jzg/organization/mapper/InsPlyIncomeInvoiceLinkMapper.java
  95. 49 1
      tenant/organization/src/main/java/com/jzg/organization/mapper/ReceivableMapper.java
  96. 11 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysAmountAuditingMapper.java
  97. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/InvAccountCardService.java
  98. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementCostService.java
  99. 71 11
      tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java
  100. 6 4
      tenant/organization/src/main/java/com/jzg/organization/service/SysAmountAuditingService.java

+ 35 - 0
commons/src/main/java/com/jzg/commons/config/LocalDateTimeDefiner.java

@@ -0,0 +1,35 @@
+package com.jzg.commons.config;
+
+import ch.qos.logback.classic.pattern.MessageConverter;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * 利用 SLF4J 的参数格式化机制,自定义一个全局的格式化器
+ *
+ * @author lipf
+ * @date 2026/5/28 14:21
+ */
+@Component
+public class LocalDateTimeDefiner extends MessageConverter {
+    // 定义你想要的统一格式
+    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+    @Override
+    public String convert(ILoggingEvent event) {
+        Object[] argArray = event.getArgumentArray();
+        if (argArray != null) {
+            for (int i = 0; i < argArray.length; i++) {
+                // 如果参数是 LocalDateTime 类型,就按指定格式转换
+                if (argArray[i] instanceof LocalDateTime) {
+                    argArray[i] = FORMATTER.format((LocalDateTime) argArray[i]);
+                }
+            }
+        }
+        // 返回原本的日志消息(此时参数数组里的 LocalDateTime 已经被替换为格式化后的字符串)
+        return event.getMessage();
+    }
+}

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

@@ -34,6 +34,15 @@ public enum ProductsType {
         return null;
     }
 
+    public static String getCodeByDesc(String desc) {
+        for (ProductsType type : values()) {
+            if (type.desc.equals(desc)) {
+                return type.code;
+            }
+        }
+        return null; // 没找到返回null
+    }
+
     //根据险种返回risk信息
     public static List<String> getRisks(String productCode){
         List<String> risks = new ArrayList<>();

+ 18 - 25
commons/src/main/java/com/jzg/commons/core/page/HttpResult.java

@@ -2,13 +2,14 @@ package com.jzg.commons.core.page;
 
 
 
+import lombok.Data;
 import java.io.Serial;
 import java.io.Serializable;
 
 /**
  * HTTP结果封装
  */
-
+@Data
 public class HttpResult<T> implements Serializable {
 
     @Serial
@@ -19,6 +20,14 @@ public class HttpResult<T> implements Serializable {
 
     private T data;
 
+    public boolean isSuccess(){
+        return 200 == this.code;
+    }
+
+    public boolean isFail(){
+        return 200 != this.code;
+    }
+
     public static <T> HttpResult<T> error() {
         return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
     }
@@ -42,6 +51,14 @@ public class HttpResult<T> implements Serializable {
         return r;
     }
 
+    public static <T> HttpResult<T> error(String msg, T data) {
+        HttpResult<T> r = new HttpResult<>();
+        r.setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+        r.setData(data);
+        r.setMsg(msg);
+        return r;
+    }
+
     public static <T> HttpResult<T> error(T data) {
         HttpResult<T> r = new HttpResult<>();
         r.setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR);
@@ -74,30 +91,6 @@ public class HttpResult<T> implements Serializable {
         return new HttpResult<>();
     }
 
-    public int getCode() {
-        return code;
-    }
-
-    public void setCode(int code) {
-        this.code = code;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    public T getData() {
-        return data;
-    }
-
-    public void setData(T data) {
-        this.data = data;
-    }
-
     @Override
     public String toString() {
         return "HttpResult{" + "code=" + code + ", msg='" + msg + '\'' + ", data=" + data + '}';

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

@@ -28,6 +28,9 @@ public class PtlAgreementDispatchRulesAttrLink implements Serializable {
     @Schema(description = "规则code")
     private String attrCode;
 
+    @TableField(exist = false)
+    private String attrType;
+
     @Schema(description = "左操作符")
     private String min;
 

+ 5 - 0
commons/src/main/java/com/jzg/commons/entity/dto/PtlAgreementCostCopyParam.java

@@ -14,5 +14,10 @@ public class PtlAgreementCostCopyParam extends PageRequest {
     @Schema(description = "需要复制的费用id")
     private String costId;
 
+    @Schema(description = "需要复制的协议id")
+    private String agreementId;
+
+    @Schema(description = "承保规则id")
+    private String coverRuleId;
 
 }

+ 6 - 3
commons/src/main/java/com/jzg/commons/entity/dto/SysUserAccountPageParam.java

@@ -4,9 +4,12 @@ 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 lombok.EqualsAndHashCode;
 
-import java.time.LocalDateTime;
+import java.time.LocalDate;
 
+
+@EqualsAndHashCode(callSuper = true)
 @Schema(description = "用户账户分页查询dto")
 @Data
 public class SysUserAccountPageParam extends PageRequest {
@@ -19,9 +22,9 @@ public class SysUserAccountPageParam extends PageRequest {
 
     @Schema(description = "统计日期开始")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDateTime createTimeStart;
+    private LocalDate createTimeStart;
 
     @Schema(description = "统计日期结束")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDateTime createTimeEnd;
+    private LocalDate createTimeEnd;
 }

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

@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
-import java.time.LocalDateTime;
+import java.time.LocalDate;
 
 @Schema(description = "应付统计查询dto")
 @Data
@@ -18,10 +18,10 @@ public class SysUserAccountParam {
 
     @Schema(description = "统计日期开始")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDateTime createTimeStart;
+    private LocalDate createTimeStart;
 
     @Schema(description = "统计日期结束")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDateTime createTimeEnd;
+    private LocalDate createTimeEnd;
 
 }

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

@@ -1,10 +1,10 @@
 package com.jzg.commons.entity.dto;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.jzg.commons.entity.po.SysUserJzgInfoBankCardRecord;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.io.Serial;
 import java.io.Serializable;
 import java.time.LocalDateTime;
 import java.util.List;
@@ -16,6 +16,8 @@ import java.util.List;
 
 @Data
 public class SysUserJzgInfoBankCardDto implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 7617847507625451617L;
     @Schema(description = "id")
     private String id;
 

+ 40 - 9
commons/src/main/java/com/jzg/commons/entity/finance/dto/CompanySuperviseSettlementReportDto.java

@@ -3,6 +3,8 @@ package com.jzg.commons.entity.finance.dto;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -11,17 +13,27 @@ import java.util.List;
  */
 
 @Data
-public class CompanySuperviseSettlementReportDto {
+public class CompanySuperviseSettlementReportDto implements Serializable {
+
+
+    @Serial
+    private static final long serialVersionUID = -2428003756552348627L;
     @Schema(description = "保险公司Id")
     private String companyId;
 
+    @Schema(description = "保险公司Id")
+    private String id;
+
+    @Schema(description = "上级公司ID")
+    private String parentId; // 必须加!构建树形结构需要
+
     @Schema(description = "保险公司")
     private String companyName;
 
-    @Schema(description = "累计应收手续费")
+    @Schema(description = "累计应收金额(手续费页面展示)")
     private String totalReceivable;
 
-    @Schema(description = "累计应收跟单费")
+    @Schema(description = "累计应收金额(跟单费页面展示)")
     private String totalFollowFee;
 
     @Schema(description = "应收手续费")
@@ -30,14 +42,28 @@ public class CompanySuperviseSettlementReportDto {
     @Schema(description = "应收跟单费")
     private String followFee;
 
-    @Schema(description = "已开票金额")
-    private String invoicedAmount;
+    @Schema(description = "手续费已开票金额")
+    private String SxfInvoicedAmount;
+
+    @Schema(description = "手续费未开票金额")
+    private String SxfUnInvoicedAmount;
+
+    @Schema(description = "跟单费已开票金额")
+    private String gdfInvoicedAmount;
+
+    @Schema(description = "跟单费未开票金额")
+    private String gdfUnInvoicedAmount;
+
+    @Schema(description = "平台已开票金额")
+    private String ptInvoicedAmount;
+
+    @Schema(description = "平台未开票金额")
+    private String ptUnInvoicedAmount;
 
     @Schema(description = "已结算金额")
     private String settledAmount;
 
-    @Schema(description = "未开票金额")
-    private String unInvoicedAmount;
+
 
     @Schema(description = "未结算金额")
     private String unSettledAmount;
@@ -45,6 +71,11 @@ public class CompanySuperviseSettlementReportDto {
     @Schema(description = "子保险公司数据")
     private List<CompanySuperviseSettlementReportDto> children;
 
-    @Schema(description = "上级公司ID")
-    private String parentId; // 必须加!构建树形结构需要
+
+    public CompanySuperviseSettlementReportDto(String companyId, String companyName, String parentId) {
+        this.companyId = companyId;
+        this.id = companyId;
+        this.parentId= parentId;
+        this.companyName  =  companyName;
+    }
 }

+ 4 - 0
commons/src/main/java/com/jzg/commons/entity/finance/dto/ExportSuperviseSettlementExcelDto.java

@@ -52,6 +52,10 @@ public class ExportSuperviseSettlementExcelDto {
     @ExcelProperty(value = "实收金额")
     private String actualReceivedAmount;
 
+    @Schema(description = "应收金额")
+    @ExcelProperty(value = "应收金额")
+    private String receivableSupervisePremium;
+
     @Schema(description = "收款日期")
     @ExcelProperty(value = "收款日期")
     private String receivePaymentDate;

+ 15 - 2
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java

@@ -10,6 +10,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serial;
+import java.time.LocalDateTime;
 
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -50,9 +51,9 @@ public class InsPlyIncome extends BaseModel {
     private String riskCode;
 
     @Schema(description = "签单时间")
-    @TableField(exist = false)
+    //@TableField(exist = false)
     @ExcelProperty("签单时间")
-    private String signingTime;
+    private LocalDateTime signingTime;
 
     @Schema(description = "签单年份")
     @TableField(exist = false)
@@ -226,6 +227,13 @@ public class InsPlyIncome extends BaseModel {
     @ExcelProperty("对接人")
     private String contactPerson;
 
+    @Schema(description = "对接人手机号")
+    private String contactPersonPhone;
+
+    public String getDockingPerson(){
+        return this.contactPerson + "-" + this.contactPersonPhone;
+    }
+
     @Schema(description = "系统code")
     @ExcelProperty("系统code")
     private String systemCode;
@@ -239,6 +247,7 @@ public class InsPlyIncome extends BaseModel {
     @ExcelProperty("结算状态(编码)")
     private String settlementStatus="0";
 
+    @TableField(exist = false)
     @Schema(description = "结算状态(转义后)")
     @ExcelProperty("结算状态(转义后)")
     private String settlementStatusName;
@@ -294,4 +303,8 @@ public class InsPlyIncome extends BaseModel {
     @Schema(description = "订单关联的发票信息")
     private String invoiceId;
 
+    @TableField(exist = false)
+    @Schema(description = "地区归属")
+    private String companyNameSimple;
+
 }

+ 6 - 1
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncomeInvoice.java

@@ -3,12 +3,14 @@ package com.jzg.commons.entity.finance.po;
 import com.jzg.commons.core.base.BaseModel;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.io.Serial;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Objects;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
 @Schema(description = "财务应收开票表")
 public class InsPlyIncomeInvoice extends BaseModel {
@@ -35,13 +37,16 @@ public class InsPlyIncomeInvoice extends BaseModel {
         return Objects.requireNonNullElse(this.overinflatedAmount, BigDecimal.ZERO);
     }
 
-    @Schema(description = "应收费用")
+    @Schema(description = "应收费用/开票金额")
     private BigDecimal receivableSupervisePremium;
 
     public BigDecimal getReceivableSupervisePremium(){
         return Objects.requireNonNullElse(this.receivableSupervisePremium, BigDecimal.ZERO);
     }
 
+    @Schema(description = "差额原因")
+    private String paymentReason;
+
     @Schema(description = "税点")
     private String taxPoint;
 

+ 25 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/AddReceivableVo.java

@@ -0,0 +1,25 @@
+package com.jzg.commons.entity.finance.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author tz
+ * @description 应收查询VO
+ * @createDate 2024-06-26 10:49:31
+ */
+@Data
+public class AddReceivableVo {
+
+    @Schema(description = "订单编码")
+    private List<String> orderNo;
+
+    @Schema(description = "查询")
+    private String queryType;
+
+}

+ 26 - 10
commons/src/main/java/com/jzg/commons/entity/finance/vo/BatchModifyVo.java

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.finance.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -9,6 +10,7 @@ import java.util.List;
 
 /**
  *  批量修改Vo
+ *
  */
 @Data
 @Schema(description = "批量修改Vo")
@@ -17,24 +19,38 @@ public class BatchModifyVo {
     @Schema(description = "应收订单id")
     private List<String> incomeIds;
 
+    @Schema(description = "车险订单的id")
+    private List<String> orderNos;
+
     @Schema(description = "交强手续费比例")
     private BigDecimal jqSuperviseCostsProportion;
 
     @Schema(description = "商业手续费比例")
     private BigDecimal sySuperviseCostsProportion;
 
-    @Schema(description = "驾意手续费比例")
-    private BigDecimal jySuperviseCostsProportion;
+//    @Schema(description = "驾意手续费比例")
+//    private BigDecimal jySuperviseCostsProportion;
+//
+//    @Schema(description = "交强跟单费比例")
+//    private BigDecimal jqOtherCostsProportion;
+//
+//    @Schema(description = "商业跟单费比例")
+//    private BigDecimal syOtherCostsProportion;
+//
+//    @Schema(description = "驾意跟单费比例")
+//    private BigDecimal jyOtherCostsProportion;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "签单时间")
+    private LocalDateTime signingTime;
 
-    @Schema(description = "交强跟单费比例")
-    private BigDecimal jqOtherCostsProportion;
+//    @Schema(description = "对接人")
+//    private String contactPerson;
 
-    @Schema(description = "商业跟单费比例")
-    private BigDecimal syOtherCostsProportion;
+    @Schema(description = "对接人姓名")
+    private String contractUserName;
 
-    @Schema(description = "驾意跟单费比例")
-    private BigDecimal jyOtherCostsProportion;
+    @Schema(description = "对接人手机号")
+    private String contractPhone;
 
-    @Schema(description = "签单时间")
-    private LocalDateTime signingTime;
 }

+ 31 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/ContractVO.java

@@ -0,0 +1,31 @@
+package com.jzg.commons.entity.finance.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 对接人信息
+ * 
+ * @author lipf
+ * @date 2026/5/30 10:10
+ */
+@AllArgsConstructor
+@Data
+@EqualsAndHashCode()
+public class ContractVO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -1054621082010388438L;
+
+
+    // 对接人姓名
+    private String contactPerson;
+
+    // 对接人手机号
+    private String contactPersonPhone;
+
+
+}

+ 6 - 1
commons/src/main/java/com/jzg/commons/entity/finance/vo/ImportUpdateExcelResultVo.java

@@ -24,10 +24,15 @@ public class ImportUpdateExcelResultVo {
     /**
      * 失败数据  修复这里!
      */
-    private List<ReceivableExportExcelVo> failedData;
+    private List<?> failedData;
 
     /**
      * 新增:失败文件下载链接
      */
     private String failFileUrl;
+
+    /**
+     * 新增成功的订单编号
+     */
+    private List<?> orderNos;
 }

+ 11 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/IncomeDataVO.java

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.finance.vo;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.io.Serial;
@@ -38,6 +39,12 @@ public class IncomeDataVO implements Serializable {
      */
     private String logicJudge;
 
+    @Schema(description = "对接人")
+    private String contactPerson;
+
+    @Schema(description = "对接人手机号")
+    private String contactPersonPhone;
+
 
     @Data
     public static class SearchVO implements Serializable {
@@ -49,6 +56,10 @@ public class IncomeDataVO implements Serializable {
         public static final String ptlAgreement = "ptlAgreement";
         public static final String orderType = "orderType";
         public static final String signYear = "signYear";
+        public static final String licenseNo = "licenseNo";
+        public static final String jqPolicyNo = "jqPolicyNo";
+        public static final String syPolicyNo = "syPolicyNo";
+        public static final String contactPerson = "contactPersonPhone";
 
         /**
          * 查询条件

+ 304 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/InsPlyIncomeExportVo.java

@@ -0,0 +1,304 @@
+package com.jzg.commons.entity.finance.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.jzg.commons.core.base.BaseModel;
+import com.jzg.commons.entity.po.InsFeeOrders;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Schema(description = "财务应收表")
+public class InsPlyIncomeExportVo extends BaseModel {
+    @Serial
+    private static final long serialVersionUID = 6161862008963938376L;
+
+    @ExcelIgnore
+    private String id;
+
+    @Schema(description = "订单号")
+    @ExcelProperty("订单号")
+    private String orderNo;
+
+    @Schema(description = "协议类型")
+    @ExcelProperty("协议类型")
+    private String agreementType;
+
+    @Schema(description = "机构")
+    @ExcelProperty("机构id")
+    private String deptId;
+
+    @Schema(description = "机构名称")
+    @ExcelProperty("机构名称")
+    private String deptName;
+
+    @Schema(description = "产品id")
+    @ExcelProperty("产品id")
+    private String productId;
+
+    @Schema(description = "产品名称")
+    @ExcelProperty("产品名称")
+    private String productName;
+
+    @Schema(description = "险种")
+    @ExcelProperty("险种")
+    private String riskCode;
+
+    @Schema(description = "签单时间")
+    @TableField(exist = false)
+    @ExcelProperty("签单时间")
+    private String signingTime;
+
+    @Schema(description = "签单年份")
+    @TableField(exist = false)
+    private String signYear;
+
+    @Schema(description = "签单日期 yyyy-mm-dd 格式")
+    @TableField(exist = false)
+    private String signDate;
+
+    @Schema(description = "保司ID")
+    @ExcelProperty("保司ID")
+    private String companyId;
+
+    @Schema(description = "保司名称")
+    @TableField(exist = false)
+    @ExcelProperty("保司名称")
+    private String companyName;
+
+    @Schema(description = "协议Id")
+    @ExcelProperty("协议Id")
+    private String agreementId;
+
+    @Schema(description = "协议名称")
+    @ExcelProperty("协议名称")
+    private String agreementName;
+
+    @Schema(description = "被保人")
+    @ExcelProperty("被保人")
+    private String insuredPerson;
+
+    @Schema(description = "车牌号")
+    @ExcelProperty("车牌号")
+    private String licenseNo;
+
+    @Schema(description = "车船税")
+    @ExcelProperty("车船税")
+    private String taxPremium;
+
+    @Schema(description = "交强保单号")
+    @ExcelProperty("交强保单号")
+    private String jqPolicyNo;
+
+    @Schema(description = "商业保单号")
+    @ExcelProperty("商业保单号")
+    private String syPolicyNo;
+
+    @Schema(description = "驾意保单号")
+    @ExcelProperty("驾意保单号")
+    private String jyPolicyNo;
+
+    @Schema(description = "交强保费")
+    @ExcelProperty("交强保费")
+    private String jqPremium;
+
+    @Schema(description = "商业保费")
+    @ExcelProperty("商业保费")
+    private String syPremium;
+
+    @Schema(description = "驾意保费")
+    @ExcelProperty("驾意保费")
+    private String jyPremium;
+
+    @Schema(description = "交强手续费")
+    @ExcelProperty("交强手续费")
+    private String jqSuperviseCostsPremiums;
+
+    @Schema(description = "交强手续费比例")
+    @ExcelProperty("交强手续费比例")
+    private String jqSuperviseCostsProportion;
+
+    @Schema(description = "商业手续费")
+    @ExcelProperty("商业手续费")
+    private String sySuperviseCostsPremiums;
+
+    @Schema(description = "商业手续费比例")
+    @ExcelProperty("商业手续费比例")
+    private String sySuperviseCostsProportion;
+
+    @Schema(description = "驾意手续费")
+    @ExcelProperty("驾意手续费")
+    private String jySuperviseCostsPremiums;
+
+    @Schema(description = "驾意手续费比例")
+    @ExcelProperty("驾意手续费比例")
+    private String jySuperviseCostsProportion;
+
+    @TableField(exist = false)
+    @Schema(description = "应收手续费")
+    @ExcelProperty("应收手续费")
+    private String superviseCostsPremiums;
+
+    @TableField(exist = false)
+    @Schema(description = "应收跟单费")
+    @ExcelProperty("应收跟单费")
+    private String otherCostsPremiums;
+
+    @Schema(description = "交强跟单费比例")
+    @ExcelProperty("交强跟单费比例")
+    private String jqOtherCostsProportion;
+
+    @Schema(description = "交强跟单费")
+    @ExcelProperty("交强跟单费")
+    private String jqOtherCostsPremiums;
+
+    @Schema(description = "商业跟单费比例")
+    @ExcelProperty("商业跟单费比例")
+    private String syOtherCostsProportion;
+
+    @Schema(description = "商业跟单费")
+    @ExcelProperty("商业跟单费")
+    private String syOtherCostsPremiums;
+
+    @Schema(description = "驾意跟单费比例")
+    @ExcelProperty("驾意跟单费比例")
+    private String jyOtherCostsProportion;
+
+    @Schema(description = "驾意跟单费")
+    @ExcelProperty("驾意跟单费")
+    private String jyOtherCostsPremiums;
+
+    @Schema(description = "交强应收费用")
+    @ExcelProperty("交强应收费用")
+    private String jqReceivablePremium;
+
+    @Schema(description = "商业应收费用")
+    @ExcelProperty("商业应收费用")
+    private String syReceivablePremium;
+
+    @Schema(description = "驾意应收费用")
+    @ExcelProperty("驾意应收费用")
+    private String jyReceivablePremium;
+
+    @TableField(exist = false)
+    @Schema(description = "总应收金额")
+    @ExcelProperty("总应收金额")
+    private String receivableAmount;
+
+    @Schema(description = "手续费是否已经结算")
+    @ExcelProperty("手续费是否已经结算")
+    private String superviseSettlement;
+
+    @Schema(description = "跟单费是否已经结算")
+    @ExcelProperty("跟单费是否已经结算")
+    private String otherSettlement;
+
+    @Schema(description = "驾意险手续费是否已经结算")
+    @ExcelProperty("驾意险手续费是否已经结算")
+    private String jySuperviseSettlement;
+
+    @Schema(description = "驾意跟单位是否已经结算")
+    @ExcelProperty("驾意跟单位是否已经结算")
+    private String jyOtherSettlement;
+
+    @Schema(description = "平台协议车险应收是否已经结算  0 未结算  1 结算")
+    @ExcelProperty("平台协议车险应收是否已经结算")
+    private String platformSuperviseSettlement;
+
+    @Schema(description = "平台协议非车险应收是否已经结算  0 未结算  1 结算")
+    @ExcelProperty("平台协议非车险应收是否已经结算")
+    private String platformOtherSettlement;
+
+    @Schema(description = "维护人工号")
+    @ExcelProperty("维护人工号")
+    private String leaderId;
+
+    @Schema(description = "维护人名称")
+    @ExcelProperty("维护人名称")
+    private String leaderName;
+
+    @Schema(description = "对接人")
+    @ExcelProperty("对接人")
+    private String contactPerson;
+
+    @Schema(description = "对接人手机号")
+    private String contactPersonPhone;
+
+    @Schema(description = "系统code")
+    @ExcelProperty("系统code")
+    private String systemCode;
+
+    @Schema(description = "业务来源")
+    @ExcelProperty("业务来源")
+    private String businessSource;
+
+    // 设置初始值为0, 未结算
+    @Schema(description = "结算状态(编码)")
+    @ExcelProperty("结算状态(编码)")
+    private String settlementStatus="0";
+
+    @Schema(description = "结算状态(转义后)")
+    @ExcelProperty("结算状态(转义后)")
+    private String settlementStatusName;
+
+    @Schema(description = "增加类型")
+    @ExcelProperty("增加类型")
+    private String addType;
+
+    @TableField(exist = false)
+    @Schema(description = "交强起保日期")
+    @ExcelProperty("交强起保日期")
+    private String jqStartDate;
+
+    @TableField(exist = false)
+    @Schema(description = "商业起保日期")
+    @ExcelProperty("商业起保日期")
+    private String syStartDate;
+
+    @TableField(exist = false)
+    @Schema(description = "订单类型")
+    @ExcelProperty("订单类型")
+    private String orderType;
+
+    @TableField(exist = false)
+    @Schema(description = "订单类型(code)")
+    private String entryStatus;
+
+    @TableField(exist = false)
+    @Schema(description = "业务员类型 团队/渠道/电销/个代 5:团队 6:个代 7:渠道 8 :电销")
+    private String typeAttr;
+
+    @TableField(exist = false)
+    @Schema(description = "业务员类型 团队/渠道/电销/个代 5:团队 6:个代 7:渠道 8 :电销")
+    private String typeAttrName;
+
+    @TableField(exist = false)
+    @Schema(description = "实际签单用户手机号2")
+    private String realQuoteUserId;
+
+    @TableField(exist = false)
+    @Schema(description = "实际签单用户手机号")
+    private String realQuoteUserName;
+
+    @TableField(exist = false)
+    @Schema(description = "订单费用表")
+    private InsFeeOrders insFeeOrders;
+
+    @TableField(exist = false)
+    @Schema(description = "是否已经开票")
+    private String invoiceStatusName;
+
+    @TableField(exist = false)
+    @Schema(description = "订单关联的发票信息")
+    private String invoiceId;
+
+    @TableField(exist = false)
+    @Schema(description = "地区归属")
+    private String companyNameSimple;
+
+}

+ 209 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceReceivableExportExcelVo.java

@@ -0,0 +1,209 @@
+package com.jzg.commons.entity.finance.vo;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.jzg.commons.core.base.BaseModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.util.Objects;
+
+/**
+ * @author tz
+ * @description 应收查询VO
+ * @createDate 2024-06-26 10:49:31
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Schema(description = "财务应收表")
+public class InvoiceReceivableExportExcelVo extends BaseModel  {
+
+    @Serial
+    private static final long serialVersionUID = 6263862008363938379L;
+
+    @Schema(description = "选中类型")
+    @ExcelIgnore
+    // 1 全部数据选中  2 选中部分数据
+    private String selectedType;
+
+    @Schema(description = "id")
+    @ExcelIgnore
+    private String id;
+
+    @Schema(description = "签单时间")
+    @ExcelProperty(value = "签单时间", index = 0)
+    private String signingTime;
+
+    @Schema(description = "协议类型")
+    @ExcelProperty(value = "协议类型", index = 1)
+    private String agreementType;
+
+    @Schema(description = "车牌号")
+    @ExcelProperty(value = "车牌号", index = 2)
+    private String licenseNo;
+
+    @Schema(description = "险种名称")
+    @ExcelProperty(value = "险种名称", index = 3)
+    private String productName;
+
+    @Schema(description = "被保险人姓名")
+    @ExcelProperty(value = "被保险人姓名", index = 4)
+    private String insuredPerson;
+
+    @Schema(description = "订单号")
+    @ExcelProperty(value = "订单号", index = 5)
+    private String orderNo;
+
+    @Schema(description = "交强险保单号")
+    @ExcelProperty(value = "交强险保单号", index = 6)
+    private String jqPolicyNo;
+
+    @Schema(description = "交强险手续费比例")
+    @ExcelProperty(value = "交强险手续费比例(%)", index = 7)
+    private String jqSuperviseCostsProportion;
+
+    @Schema(description = "交强险跟单费比例")
+    @ExcelProperty(value = "交强险跟单费比例(%)", index = 8)
+    private String jqOtherCostsProportion;
+
+    @Schema(description = "商业险保单号")
+    @ExcelProperty(value = "商业险保单号", index = 9)
+    private String syPolicyNo;
+
+    @Schema(description = "商业险手续费比例")
+    @ExcelProperty(value = "商业险手续费比例(%)", index = 10)
+    private String sySuperviseCostsProportion;
+
+    @Schema(description = "商业险跟单费比例")
+    @ExcelProperty(value = "商业险跟单费比例(%)", index = 11)
+    private String syOtherCostsProportion;
+
+    @Schema(description = "非车险保单号")
+    @ExcelProperty(value = "非车险保单号", index = 12)
+    private String jyPolicyNo;
+
+    @Schema(description = "非车险手续费比例")
+    @ExcelProperty(value = "非车险手续费比例(%)", index = 13)
+    private String jySuperviseCostsProportion;
+
+    @Schema(description = "非车险跟单费比例")
+    @ExcelProperty(value = "非车险跟单费比例(%)", index = 14)
+    private String jyOtherCostsProportion;
+
+    @Schema(description = "公司名称")
+    @ExcelProperty(value = "公司名称", index = 15)
+    private String companyName;
+
+    @Schema(description = "对接人")
+    @ExcelProperty(value = "对接人", index = 16)
+    private String contactPerson;
+
+    @Schema(description = "对接人手机号")
+    @ExcelProperty(value = "对接人手机号", index = 17)
+    private String contactPersonPhone;
+
+    @Schema(description = "错误信息")
+    @ExcelIgnore
+    private String errorMessage;
+
+    public ImportResultVo checkEmpty(){
+        ImportResultVo resultVo = new ImportResultVo();
+        resultVo.setSuccess(false);
+        // 基础必填字段校验
+        if (StrUtil.isBlank(this.getSigningTime())) {
+            resultVo.setMessage("签单时间不能为空");
+            return resultVo;
+        }
+        if (StrUtil.isBlank(this.getOrderNo())) {
+            resultVo.setMessage("订单号不能为空");
+            return resultVo;
+        }
+        if (StrUtil.isBlank(this.getLicenseNo())) {
+            resultVo.setMessage("车牌号不能为空");
+            return resultVo;
+        }
+        if (StrUtil.isBlank(this.getProductName())) {
+            resultVo.setMessage("险种名称不能为空");
+            return resultVo;
+        }
+        if (StrUtil.isBlank(this.getInsuredPerson())) {
+            resultVo.setMessage("被保险人姓名不能为空");
+            return resultVo;
+        }
+        if (StrUtil.isBlank(this.getAgreementType())) {
+            resultVo.setMessage("协议类型不能为空");
+            return resultVo;
+        }
+        if (StrUtil.isBlank(this.getContactPerson())) {
+            resultVo.setMessage("对接人不能为空");
+            return resultVo;
+        }
+        if (StrUtil.isBlank(this.getAgreementType())) {
+            resultVo.setMessage("对接人手机号不能为空");
+            return resultVo;
+        }
+
+        // 交强险:有保单号 → 手续费、跟单费必填
+        if (StrUtil.isNotBlank(this.getJqPolicyNo())
+                || StrUtil.isNotBlank(this.getJqSuperviseCostsProportion())
+                || StrUtil.isNotBlank(this.getJqOtherCostsProportion())) {
+            if (StrUtil.isBlank(this.getJqPolicyNo())) {
+                resultVo.setMessage("交强险保单号不能为空");
+                return resultVo;
+            }
+            if (StrUtil.isBlank(this.getJqSuperviseCostsProportion())) {
+                resultVo.setMessage("交强险手续费比例不能为空");
+                return resultVo;
+            }
+            if (StrUtil.isBlank(this.getJqOtherCostsProportion())) {
+                resultVo.setMessage("交强险跟单费比例不能为空");
+                return resultVo;
+            }
+        }
+
+        // 商业险:有保单号 → 手续费、跟单费必填
+        if (StrUtil.isNotBlank(this.getSyPolicyNo())
+                || StrUtil.isNotBlank(this.getSySuperviseCostsProportion())
+                || StrUtil.isNotBlank(this.getSyOtherCostsProportion())) {
+            if (StrUtil.isBlank(this.getJqPolicyNo())) {
+                resultVo.setMessage("商业险保单号不能为空");
+                return resultVo;
+            }
+            if (StrUtil.isBlank(this.getSySuperviseCostsProportion())) {
+                resultVo.setMessage("商业险手续费比例不能为空");
+                return resultVo;
+            }
+            if (StrUtil.isBlank(this.getSyOtherCostsProportion())) {
+                resultVo.setMessage("商业险跟单费比例不能为空");
+                return resultVo;
+            }
+        }
+
+        // 非车险:有保单号 → 手续费、跟单费必填
+        if (StrUtil.isNotBlank(this.getJyPolicyNo())
+                || StrUtil.isNotBlank(this.getJySuperviseCostsProportion())
+                || StrUtil.isNotBlank(this.getJyOtherCostsProportion())) {
+            if (StrUtil.isBlank(this.getJqPolicyNo())) {
+                resultVo.setMessage("非车险保单号不能为空");
+                return resultVo;
+            }
+            if (StrUtil.isBlank(this.getJySuperviseCostsProportion())) {
+                resultVo.setMessage("非车险手续费比例不能为空");
+                return resultVo;
+            }
+            if (StrUtil.isBlank(this.getJyOtherCostsProportion())) {
+                resultVo.setMessage("非车险跟单费比例不能为空");
+                return resultVo;
+            }
+        }
+
+        if(Objects.isNull(resultVo.getMessage())){
+            resultVo.setSuccess(true);
+        }
+        return resultVo;
+    }
+
+}

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

@@ -2,9 +2,11 @@ package com.jzg.commons.entity.finance.vo;
 
 import com.jzg.commons.core.base.PageRequest;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.math.BigDecimal;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
 public class InvoiceRecordResult extends PageRequest {
 
@@ -23,6 +25,11 @@ public class InvoiceRecordResult extends PageRequest {
      */
     private String companyName;
 
+    /**
+     * 开票号/发票号
+     */
+    private String invoiceNo;
+
     /**
      * 保险公司分支名称
      */
@@ -43,6 +50,11 @@ public class InvoiceRecordResult extends PageRequest {
      */
     private BigDecimal overinflatedAmount;
 
+    /**
+     * 差额原因
+     */
+    private String paymentReason;
+
     /**
      * 应收项(转义)
      * 保留这个是为了兼容之前的功能

+ 7 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoicingVo.java

@@ -21,6 +21,13 @@ public class InvoicingVo {
     @Schema(description = "开票的保司id")
     private String companyId;
 
+    @Schema(description = "对接人姓名")
+    private String contactPerson;
+
+    @Schema(description = "对接人手机号")
+    private String contactPersonPhone;
+
+
     // 开票类型  1、手续费  2、跟单费  3、驾意险手续费 4、驾意险跟单费 5、平台应收-车险 6、平台应收-非车险
     @Schema(description = "开票类型")
     private String invoiceType;

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

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.finance.vo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -28,6 +29,12 @@ public class JyExcelVo {
     @Schema(description = "驾意险保单号")
     private String jyPolicyNo;
 
+    @Schema(description = "订单号")
+    private String orderNo;
+
+    @Schema(description = "协议类型")
+    private String agreementType;
+
     @Schema(description = "驾意险保费")
     private BigDecimal jyPremium;
 
@@ -37,6 +44,15 @@ public class JyExcelVo {
     @Schema(description = "驾意险跟单费比例")
     private BigDecimal jyOtherRatio;
 
+    @Schema(description = "对接人")
+    @ExcelProperty(value = "对接人")
+    private String contactPerson;
+
+    @Schema(description = "对接人手机号")
+    @ExcelProperty(value = "对接人手机号")
+    private String contactPersonPhone;
+
+
     @Schema(description = "错误信息")
     private String errorMessage;
 

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

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.finance.vo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -28,6 +29,12 @@ public class OtherExcelVo {
     @Schema(description = "交强险保单号")
     private String jqPolicyNo;
 
+    @Schema(description = "订单号")
+    private String orderNo;
+
+    @Schema(description = "协议类型")
+    private String agreementType;
+
     @Schema(description = "交强险保费")
     private BigDecimal jqPremium;
 
@@ -43,6 +50,15 @@ public class OtherExcelVo {
     @Schema(description = "商业险跟单费比例")
     private BigDecimal syOtherRatio;
 
+    @Schema(description = "对接人")
+    @ExcelProperty(value = "对接人")
+    private String contactPerson;
+
+    @Schema(description = "对接人手机号")
+    @ExcelProperty(value = "对接人手机号")
+    private String contactPersonPhone;
+
+
     @Schema(description = "错误信息")
     private String errorMessage;
 

+ 4 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/ReceivableExportExcelVo.java

@@ -139,6 +139,10 @@ public class ReceivableExportExcelVo {
     @ExcelProperty(value = "产品名称", index = 24)
     private String productName;
 
+    @Schema(description = "对接人手机号")
+    @ExcelProperty(value = "对接人手机号", index = 25)
+    private String dockingPersonPhone;
+
     @Schema(description = "错误信息")
     private String errorMessage;
 

+ 14 - 2
commons/src/main/java/com/jzg/commons/entity/finance/vo/SettlementReportQueryVo.java

@@ -16,12 +16,24 @@ public class SettlementReportQueryVo extends PageRequest {
     @Schema(description = "保险公司id")
     private String companyId;
 
-    @Schema(description = "开始时间")
+    @Schema(description = "创建开始时间")
     private String startTime;
 
-    @Schema(description = "结束时间")
+    @Schema(description = "创建结束时间")
     private String endTime;
 
+    @Schema(description = "开票开始时间")
+    private String invoiceStartTime;
+
+    @Schema(description = "开票结束时间")
+    private String invoiceEndTime;
+
+    @Schema(description = "结算开始时间")
+    private String settlementStartTime;
+
+    @Schema(description = "开票结束时间")
+    private String settlementEndTime;
+
     @Schema(description = "结算状态")
     private String status;
 

+ 1 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/SettlementVo.java

@@ -31,4 +31,5 @@ public class SettlementVo {
 
     @Schema(description = "附加id")
     private List<String> attachmentIds;
+
 }

+ 15 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/SuperviseExcelVo.java

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.finance.vo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -25,6 +26,12 @@ public class SuperviseExcelVo {
     @Schema(description = "车牌号")
     private String licenseNo;
 
+    @Schema(description = "订单号")
+    private String orderNo;
+
+    @Schema(description = "协议类型")
+    private String agreementType;
+
     @Schema(description = "交强险保单号")
     private String jqPolicyNo;
 
@@ -43,6 +50,14 @@ public class SuperviseExcelVo {
     @Schema(description = "商业险手续费比例")
     private BigDecimal sySuperviseRatio;
 
+    @Schema(description = "对接人")
+    @ExcelProperty(value = "对接人")
+    private String contactPerson;
+
+    @Schema(description = "对接人手机号")
+    @ExcelProperty(value = "对接人手机号")
+    private String contactPersonPhone;
+
     @Schema(description = "错误信息")
     private String errorMessage;
 

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

@@ -47,6 +47,10 @@ public class InsFeeAudit extends BaseModel {
     @Schema(description = "设为疑问单的原因")
     private String problemReason;
 
+    @Schema(description = "设为疑问单的时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime problemTime;
+
     @Schema(description = "驳回原因")
     private String refuse;
 

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

@@ -6,10 +6,12 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jzg.commons.core.base.BaseModel;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.io.Serial;
 import java.time.LocalDateTime;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
 @Schema(description = "保险订单表")
 public class InsOrders extends BaseModel {

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

@@ -1,6 +1,8 @@
 package com.jzg.commons.entity.orders.po;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -28,4 +30,8 @@ public class InsOrdersAccidentalDriving {
 
     @Schema(description = "驾意险保费")
     private String amount;
+
+    @Schema(description = "是否删除")
+    @TableLogic
+    private Integer isDelete;
 }

+ 5 - 0
commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrdersTrack.java

@@ -2,6 +2,7 @@ package com.jzg.commons.entity.orders.po;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.jzg.commons.core.base.BaseModel;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -53,6 +54,10 @@ public class InsOrdersTrack extends BaseModel {
     @Schema(description = "变更后")
     private String changeAfter;      // 变更后
 
+    @Schema(description = "是否删除")
+    @TableLogic
+    private Integer isDelete;
+
     public InsOrdersTrack(String changeBefore, String changeAfter, InsOrdersCarInfo carInfo, InsOrders insOrders) {
         this.orderNo = insOrders.getId();
         this.companyId = insOrders.getCompanyId();

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

@@ -142,4 +142,7 @@ public class FeeAuditVo extends BaseModel {
 
     @Schema(description = "设置为疑问单的原因")
     private String problemReason;
+
+    @Schema(description = "设为疑问单的时间")
+    private String problemTime;
 }

+ 5 - 0
commons/src/main/java/com/jzg/commons/entity/po/InsFeeOrders.java

@@ -2,6 +2,7 @@ package com.jzg.commons.entity.po;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -233,4 +234,8 @@ public class InsFeeOrders {
     @Schema(description = "车牌号")
     @TableField(exist = false)
     private String licenseNo;
+
+    @Schema(description = "是否删除")
+    @TableLogic
+    private Integer isDelete;
 }

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

@@ -8,6 +8,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
 import java.util.List;
 
 /**
@@ -19,6 +20,8 @@ import java.util.List;
 @AllArgsConstructor
 public class PtlAgreementUndwrtRulesAttr extends BaseModel {
 
+    @Serial
+    private static final long serialVersionUID = 2954853705582597212L;
     @TableId(value = "id", type = com.baomidou.mybatisplus.annotation.IdType.AUTO)
     private String id;
 

+ 5 - 4
commons/src/main/java/com/jzg/commons/entity/po/SysAmountAuditing.java

@@ -1,12 +1,10 @@
 package com.jzg.commons.entity.po;
 
-import java.io.Serializable;
+import java.io.Serial;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.Date;
 
 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;
@@ -14,18 +12,22 @@ import com.jzg.commons.entity.dto.SysUserJzgInfoBankCardDto;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
 /**
  * 提现申请表
  * @TableName sys_amount_auditing
  */
+@EqualsAndHashCode(callSuper = true)
 @Data
 @Schema(description = "提现申请表")
 @AllArgsConstructor
 @NoArgsConstructor
 public class SysAmountAuditing extends BaseModel {
 
+    @Serial
+    private static final long serialVersionUID = -4444248789874668987L;
     @Schema(description = "主键")
     @TableId
     private String id;
@@ -97,7 +99,6 @@ public class SysAmountAuditing extends BaseModel {
     @Schema(description = "系统code")
     private String systemCode;
 
-
     /**
      * 构造提现
      * @param applyWithdrawParam

+ 6 - 4
commons/src/main/java/com/jzg/commons/entity/po/SysQueryVehicleConfig.java

@@ -1,9 +1,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.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -57,6 +55,10 @@ public class SysQueryVehicleConfig implements Serializable {
     @TableField(value = "password")
     private String password;
 
+    @Schema(description = "是否删除")
+    @TableLogic
+    private Integer isDelete;
+
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 

+ 6 - 4
commons/src/main/java/com/jzg/commons/entity/po/SysQueryVehicleUrl.java

@@ -1,9 +1,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.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -39,6 +37,10 @@ public class SysQueryVehicleUrl implements Serializable {
     @TableField(value = "config_id")
     private Integer configId;
 
+    @Schema(description = "是否删除")
+    @TableLogic
+    private Integer isDelete;
+
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 

+ 5 - 0
commons/src/main/java/com/jzg/commons/entity/po/SysUploadFiles.java

@@ -1,6 +1,7 @@
 package com.jzg.commons.entity.po;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -36,4 +37,8 @@ public class SysUploadFiles {
      */
     @TableField(exist = false)
     private String downloadUrl;
+
+    @Schema(description = "是否删除")
+    @TableLogic
+    private Integer isDelete;
 }

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

@@ -85,6 +85,16 @@ public class OrderBase implements Serializable {
      */
     private String dispatchId;
 
+    /**
+     * 对接人姓名
+     */
+    private String dockingPerson;
+
+    /**
+     * 对接人联系方式
+     */
+    private String dockingPersonPhone;
+
     /**
      * 获取保险公司编码
      */

+ 18 - 3
commons/src/main/java/com/jzg/commons/entity/vo/AmountAuditVo.java

@@ -1,21 +1,23 @@
 package com.jzg.commons.entity.vo;
 
-import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jzg.commons.core.base.BaseModel;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
+import java.io.Serial;
 import java.math.BigDecimal;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 
+@EqualsAndHashCode(callSuper = true)
 @Schema(description = "提现申请表VO")
 @Data
 public class AmountAuditVo  extends BaseModel {
 
+    @Serial
+    private static final long serialVersionUID = 4658187667789639800L;
     @ExcelProperty("主键")
     @Schema(description = "主键")
     private String id;
@@ -91,4 +93,17 @@ public class AmountAuditVo  extends BaseModel {
     @Schema(description = "驳回人")
     private String rejectPerson;
 
+    @Schema(description = "提现人")
+    private String withdrawalRequester;
+
+    @Schema(description = "提现时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime withdrawalRequestTime;
+
+    @Schema(description = "审核时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime auditingTime;
+
+    @Schema(description = "凭证号")
+    private String voucherId;
 }

+ 126 - 0
commons/src/main/java/com/jzg/commons/util/BigDecimalUtil.java

@@ -0,0 +1,126 @@
+package com.jzg.commons.util;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+
+/**
+ * BigDecimal 高精度运算工具类(适用于金额计算)
+ */
+public class BigDecimalUtil {
+
+    /** 默认除法运算精度(保留小数点后几位) */
+    private static final int DEF_DIV_SCALE = 2;
+    /** 默认舍入模式:四舍五入 */
+    private static final RoundingMode DEF_ROUNDING_MODE = RoundingMode.HALF_UP;
+
+    // 私有构造器,防止被实例化
+    private BigDecimalUtil() {}
+
+    /**
+     * 提供精确的加法运算
+     * @param v1 被加数
+     * @param v2 加数
+     * @return 两个参数的和
+     */
+    public static BigDecimal add(BigDecimal v1, BigDecimal v2) {
+        if (v1 == null) v1 = BigDecimal.ZERO;
+        if (v2 == null) v2 = BigDecimal.ZERO;
+        return v1.add(v2);
+    }
+
+    /**
+     * 提供精确的减法运算
+     * @param v1 被减数
+     * @param v2 减数
+     * @return 两个参数的差
+     */
+    public static BigDecimal subtract(BigDecimal v1, BigDecimal v2) {
+        if (v1 == null) v1 = BigDecimal.ZERO;
+        if (v2 == null) v2 = BigDecimal.ZERO;
+        return v1.subtract(v2);
+    }
+
+    /**
+     * 提供精确的乘法运算
+     * @param v1 被乘数
+     * @param v2 乘数
+     * @return 两个参数的积
+     */
+    public static BigDecimal multiply(BigDecimal v1, BigDecimal v2) {
+        if (v1 == null) v1 = BigDecimal.ZERO;
+        if (v2 == null) v2 = BigDecimal.ZERO;
+        return v1.multiply(v2);
+    }
+
+    /**
+     * 提供(相对)精确的除法运算。
+     * 当发生除不尽的情况时,默认精确到小数点以后2位,并四舍五入。
+     * @param v1 被除数
+     * @param v2 除数
+     * @return 两个参数的商
+     */
+    public static BigDecimal divide(BigDecimal v1, BigDecimal v2) {
+        return divide(v1, v2, DEF_DIV_SCALE);
+    }
+
+    /**
+     * 提供(相对)精确的除法运算。
+     * 当发生除不尽的情况时,由 scale 参数指定精度,并四舍五入。
+     * @param v1 被除数
+     * @param v2 除数
+     * @param scale 表示需要精确到小数点以后几位
+     * @return 两个参数的商
+     */
+    public static BigDecimal divide(BigDecimal v1, BigDecimal v2, int scale) {
+        if (v2 == null || v2.compareTo(BigDecimal.ZERO) == 0) {
+            throw new IllegalArgumentException("除数不能为0或null");
+        }
+        if (v1 == null) v1 = BigDecimal.ZERO;
+        return v1.divide(v2, scale, DEF_ROUNDING_MODE);
+    }
+
+    /**
+     * 对数值进行四舍五入(保留指定小数位)
+     * @param v 需要处理的数值
+     * @param scale 小数点后保留几位
+     * @return 处理后的结果
+     */
+    public static BigDecimal round(BigDecimal v, int scale) {
+        if (v == null) return BigDecimal.ZERO;
+        return v.setScale(scale, DEF_ROUNDING_MODE);
+    }
+
+    /**
+     * 比较两个数值的大小
+     * @param v1 第一个数
+     * @param v2 第二个数
+     * @return 如果 v1 > v2 返回 1;v1 < v2 返回 -1;相等返回 0
+     */
+    public static int compareTo(BigDecimal v1, BigDecimal v2) {
+        if (v1 == null) v1 = BigDecimal.ZERO;
+        if (v2 == null) v2 = BigDecimal.ZERO;
+        return v1.compareTo(v2);
+    }
+
+    /**
+     * 安全地将 double 转换为 BigDecimal(防止精度丢失)
+     * @param v 需要转换的 double 值
+     * @return 转换后的 BigDecimal 对象
+     */
+    public static BigDecimal valueOf(double v) {
+        return BigDecimal.valueOf(v);
+    }
+
+    /**
+     * 安全地将 String 转换为 BigDecimal
+     * @param v 需要转换的字符串
+     * @return 转换后的 BigDecimal 对象,若为 null 或空则返回 ZERO
+     */
+    public static BigDecimal valueOf(String v) {
+        if (v == null || v.trim().isEmpty()) {
+            return BigDecimal.ZERO;
+        }
+        return new BigDecimal(v);
+    }
+}

+ 1 - 1
partner/src/main/java/com/jzg/utils/DistributionUtils.java

@@ -67,7 +67,7 @@ public class DistributionUtils {
         }
         SysUserJzgInfo userInfoById = organizationClient.getPartUserInfoByMobile(insOrders.getRealQuoteUserId());
         if (Objects.isNull(userInfoById)){
-            log.info("当前出单员不是合伙人用户:{}");
+            log.info("当前出单员不是合伙人用户:{}",insOrders.getRealQuoteUserId());
         }
         String userId = userInfoById.getId();
         String userId3 = CalculateCommissionUtils.querySuperiorAndSubordinate(userId, GRADE_3);

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

@@ -165,6 +165,7 @@ public class PtlInsAttributionTemplateServiceImpl extends ServiceImpl<PtlInsAttr
         AssertionUtils.isEmpty(company, "保司不存在");
         LambdaQueryWrapper<PtlAgreementAttribution> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(PtlAgreementAttribution::getInsCompanyId,companyId);
+        wrapper.eq(PtlAgreementAttribution::getIsDelete,0);
         List<PtlAgreementAttribution> ptlAgreementAttribution = agreementAttributionMapper.selectList(wrapper);
         AssertionUtils.isEmpty(ptlAgreementAttribution, "账号归属信息查询失败");
         return HttpResult.ok(ptlAgreementAttribution);

+ 20 - 1
platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.annotation.IgnoreTenant;
@@ -89,6 +90,8 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
     SysUserService sysUserService;
     @Autowired
     private SysSystemMapper sysSystemMapper;
+    @Autowired
+    private EsmInsCompanyTenantSortMapper esmInsCompanyTenantSortMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -648,7 +651,23 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
         companyList = companyList.stream().filter(x -> Objects.nonNull(x.getAgreements()) && !x.getAgreements().isEmpty()).collect(Collectors.toList());
 
         log.info("租户匹配到的保司个数[{}]",CollUtil.size(companyList));
-        return companyList;
+
+        List<EsmInsCompanyTenantSort> sortList = esmInsCompanyTenantSortMapper.selectList(
+                Wrappers.lambdaQuery(EsmInsCompanyTenantSort.class)
+                        .eq(EsmInsCompanyTenantSort::getIsDelete, 0)
+                        .orderByAsc(EsmInsCompanyTenantSort::getOrderNum)
+        );
+
+        List<EsmInsCompany> finalCompanyList1 = companyList;
+        List<EsmInsCompany> finalCompanyList = sortList.stream()
+                .map(EsmInsCompanyTenantSort::getCompanyId)
+                .flatMap(companyId -> finalCompanyList1.stream()
+                        .filter(company -> companyId.equals(company.getId()))
+                        .limit(1)
+                )
+                .collect(Collectors.toList());
+
+        return finalCompanyList;
     }
 
 }

+ 3 - 4
platform/src/main/resources/mapper/EsmInsCompanyMapper.xml

@@ -73,14 +73,13 @@
             ins.company_id AS id,
             eic.name_simple AS NAME
         FROM
-            ins_area_company ins
+            ins_orders ins
                 LEFT JOIN esm_ins_company eic ON ins.company_id = eic.id
         WHERE
             IFNULL( ins.company_id, '' )!= ''
 	        AND IFNULL( eic.id, '' )!= ''
         GROUP BY
-            ins.company_id,
-            ins.inscompany
+            ins.company_id
     </select>
 
     <select id="getExternalAgreementCompanyList" resultType="com.jzg.commons.entity.vo.EsmInsCompanyResVo">
@@ -202,7 +201,7 @@
             esm_ins_company eic
         left join sys_upload_files suf on eic.logo = suf.id
         WHERE
-            is_delete = 0
+            eic.is_delete = 0
         <if test="name != null and name != ''">
             and eic.name like  concat('%',#{name},'%')
         </if>

+ 5 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/DetectLoginRequest.java

@@ -29,4 +29,9 @@ public class DetectLoginRequest {
      * 密码
      */
     private String password;
+
+    /**
+     * 产品id 众安登录用
+     */
+    private String productId;
 }

+ 6 - 4
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/entity/request/GuoRenCrawlerGetCarPriceRequest.java

@@ -4,10 +4,10 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.entity.vo.InsOrdersOtherInfoVo;
 import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.guoren.crawler.entity.dto.PrpTMainDTO;
 import com.jzg.quotation.guoren.crawler.entity.response.GuoRenCrawlerQueryByVinNoData;
-import com.jzg.quotation.guoren.crawler.entity.response.GuoRenCrawlerQueryCarModelData;
 import com.jzg.quotation.guoren.crawler.entity.response.GuoRenCrawlerWriteBackAddressData;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -622,15 +622,17 @@ public class GuoRenCrawlerGetCarPriceRequest {
 
         CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
         CustomerInfoVo ownersInfo = quoteVo.getOwnersInfo();
+        InsOrdersOtherInfoVo otherInfo = quoteVo.getOtherInfo();
+
         this.licenseNo = carInfoVo.getLicenseNo();
         this.vinNo = carInfoVo.getVinNo();
         this.engineNo = carInfoVo.getEngineNo();
         this.carIdentifyType = "01";
         this.rateCode = "20";
         this.loanVehicleFlag = "0";
-        this.chgOwnerFlag = "0";
-        this.ciChgOwnerFlag = "0";
-        this.biChgOwnerFlag = "0";
+        this.chgOwnerFlag =String.valueOf(carInfoVo.isTransfer() ? 1 : 0);
+        this.ciChgOwnerFlag = String.valueOf(carInfoVo.isTransfer() ? 1 : 0);
+        this.biChgOwnerFlag = String.valueOf(carInfoVo.isTransfer() ? 1 : 0);
         this.newDeviceFlag = "0";
         this.chargingpostFlag = "0";
         this.productType = "0101";

+ 5 - 7
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java

@@ -42,17 +42,15 @@ import com.jzg.quotation.hengbang.crawler.properties.HengBangCrawlerProperties;
 import com.jzg.quotation.hengbang.crawler.service.HbCrawlerOrderService;
 import com.jzg.quotation.hengbang.crawler.service.HengBangCrawlerRequest;
 import lombok.RequiredArgsConstructor;
-import org.apache.commons.compress.utils.IOUtils;
 import org.springframework.http.HttpHeaders;
 import org.springframework.util.StringUtils;
 
-
-import java.io.IOException;
-import java.io.InputStream;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -183,7 +181,7 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
             status = JSONObject.parseObject(resJson).getString("status");
         }
 
-        if (errorMsg.equals("成功") || status.equals("9")) {
+        if (errorMsg.equals("成功")) {
             errorMsg = "成功";
             // 5.2 报价第三步,获取报价数据
             proposalResponse = hbCrawlerRequestComponent.proposal(plyappno, headers);

+ 18 - 0
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/constant/enums/JiaYiXianProduct.java

@@ -35,8 +35,26 @@ public enum JiaYiXianProduct {
             new CoverageConfig("Z27096-2", "交通出行团体意外伤害保险C款条款", "0956", "可选责任:意外伤害伤残保险责任", 0.04, "30000", "3.0万元/座", " ", false),
             new CoverageConfig("F27002", "附加团体意外伤害医疗保险条款", "0008", "意外伤害医疗保险责任", 0.24, "1000", "0.1万元/座", "每次事故免赔300后80%比例赔付", false),
             new CoverageConfig("F27001", "附加团体意外伤害住院津贴保险条款", "0032", "意外伤害住院津贴保险责任", 0.2, "10", "0.001万元/座", "10元/天/座", true)
+    )),
+    ANXIANG_260("260", "安享驾乘(260)", true, Arrays.asList(
+            new CoverageConfig("Z27096-1", "交通出行团体意外伤害保险C款条款", "0955", "必选责任:意外伤害身故保险责任", 0.06, "30000", "3.0万元/座", " ", false),
+            new CoverageConfig("Z27096-2", "交通出行团体意外伤害保险C款条款", "0956", "可选责任:意外伤害伤残保险责任", 0.04, "30000", "3.0万元/座", " ", false),
+            new CoverageConfig("F27002", "附加团体意外伤害医疗保险条款", "0008", "意外伤害医疗保险责任", 0.24, "1000", "0.1万元/座", "每次事故免赔300后80%比例赔付", false),
+            new CoverageConfig("F27001", "附加团体意外伤害住院津贴保险条款", "0032", "意外伤害住院津贴保险责任", 0.2, "10", "0.001万元/座", "10元/天/座", true),
+            new CoverageConfig("F27047-5", "附加辅助金保险条款", "0094", "家庭辅助金", 0.02, "10", "20000", "2.0万元/座", true),
+            new CoverageConfig("F27048-6", "附加救护车车费保险条款", "0095", "救护车费用", 0.1, "10", "2000", "0.2万元/座", true)
+    )),
+    ANXIANG_240("092", "好运连连(240)", true, Arrays.asList(
+            new CoverageConfig("Z27096-1", "交通出行团体意外伤害保险C款条款", "0955", "必选责任:意外伤害身故保险责任", 0.06, "30000", "3.0万元/座", " ", false),
+            new CoverageConfig("Z27096-2", "交通出行团体意外伤害保险C款条款", "0956", "可选责任:意外伤害伤残保险责任", 0.04, "30000", "3.0万元/座", " ", false),
+            new CoverageConfig("F27002", "附加团体意外伤害医疗保险条款", "0008", "意外伤害医疗保险责任", 0.24, "1000", "0.1万元/座", "每次事故免赔300后80%比例赔付", false),
+            new CoverageConfig("F27001", "附加团体意外伤害住院津贴保险条款", "0032", "意外伤害住院津贴保险责任", 0.2, "10", "0.001万元/座", "10元/天/座", true),
+            new CoverageConfig("F27047-5", "附加辅助金保险条款", "0094", "家庭辅助金", 0.015, "20000", "2.0万元/座", "", true),
+            new CoverageConfig("F27048-6", "附加救护车车费保险条款", "0095", "救护车费用", 0.2, "2000", "0.2万元/座", "", true)
+
     ));
 
+
     /**
      * 产品代码
      */

+ 4 - 2
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerActualValueRequestRequest.java

@@ -60,8 +60,10 @@ public class HuaNongCrawlerActualValueRequestRequest implements HuaNongHeadReque
         this.motorTypeCode = carInfoVo.getCarKindCode();
         this.registerDate = TimeProcessing.dateToDateTime(carInfoVo.getRegisterDate());
         this.loginCom = loginCom;
-        this.isNewEnergyFlag = false;
-        this.energyType = carInfoVo.getEnergyTypeCode();
+        // 根据车型查询返回的 energyTypes 判断是否新能源车(0=燃油,4=其他混动,其他=新能源)
+        String energyTypes = carModelDTO != null && carModelDTO.getFullCarData() != null ? carModelDTO.getFullCarData().getEnergyTypes() : null;
+        this.isNewEnergyFlag = energyTypes != null && !"0".equals(energyTypes) && !"4".equals(energyTypes);
+        this.energyType = this.isNewEnergyFlag ? "1" : "0";
     }
 
 }

+ 43 - 12
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerQuotedPriceRequestRequest.java

@@ -225,8 +225,10 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
             this.D4ListDataOld = buildD4ListDataOldList();
             this.newEnergyAmountListData = buildNewEnergyAmountListData();
             this.amountListData = buildAmountListData();
-            // 险种
-            this.contract = ContractDTO.build(quoteVo.getCiRiskInfoVo(), quoteVo.getBiRiskInfoVo(), quoteVo.getKindInfoVo(), quoteVo.getInsuredPersonInfo());
+            // 险种:根据车型查询返回的 energyTypes 判断是否新能源车(0=燃油,4=其他混动,其他=新能源)
+            String energyTypes = carModelDTO != null && carModelDTO.getFullCarData() != null ? carModelDTO.getFullCarData().getEnergyTypes() : null;
+            boolean isNewEnergy = energyTypes != null && !"0".equals(energyTypes) && !"4".equals(energyTypes);
+            this.contract = ContractDTO.build(quoteVo.getCiRiskInfoVo(), quoteVo.getBiRiskInfoVo(), quoteVo.getKindInfoVo(), quoteVo.getInsuredPersonInfo(), isNewEnergy);
             // 人员
             this.customer = CustomerDTO.build(quoteVo.getPolicyHolderInfo(), quoteVo.getInsuredPersonInfo(), quoteVo.getOwnersInfo(), this.saleInfo.agentCode, this.saleInfo.comCode);
         }
@@ -792,7 +794,9 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                     this.pickUpCarFlag = false;
                     this.plateColorCode = "";
                     this.plateNo = carInfoVo.getLicenseNo();
-                    this.isNewEnergyFlag = carInfoVo.isNewEnergyMark();
+                    // 根据车型查询返回的 energyTypes 判断是否新能源车(0=燃油,4=其他混动,其他=新能源)
+                    String energyTypes = fullCarDataDTO != null ? fullCarDataDTO.getEnergyTypes() : null;
+                    this.isNewEnergyFlag = energyTypes != null && !"0".equals(energyTypes) && !"4".equals(energyTypes);
 
                     if (this.isNewEnergyFlag) {
                         this.plateType = "52";
@@ -1873,7 +1877,6 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 contractMainDTO.setChoosed(true);
                 contractMainDTO.setDiscount(100);
                 contractMainDTO.setExpenseRate("");
-                contractMainDTO.setExpiryDate("");
                 contractMainDTO.setInsuredObjectCode("7");
                 contractMainDTO.setInsuredObjectName("从车");
                 contractMainDTO.setIsRegistered("0");
@@ -1888,6 +1891,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 contractMainDTO.setProductionDate(TimeProcessing.nowDateTime());
                 contractMainDTO.setUnitPremium(0);
                 contractMainDTO.setValidDate(TimeProcessing.tomorrowDateTime());
+                contractMainDTO.setExpiryDate(TimeProcessing.plusOneYearToString(TimeProcessing.tomorrowDateTime()));
                 contractMainDTO.setCommissionRate(0);
                 contractMainDTO.setEachDamageLimitAmount("0");
                 return contractMainDTO;
@@ -1974,13 +1978,14 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 return contractDTO;
             }
 
-            private static ContractDTO getBiContractDTO(RiskInfoVo biRiskInfoVo, List<KindInfoVo> kindInfoVo, String isAloneCI, String relatedType) {
-                ContractMainDTO bi = new ContractMainDTO(biRiskInfoVo, "0510", "BI", isAloneCI, relatedType);
+            private static ContractDTO getBiContractDTO(RiskInfoVo biRiskInfoVo, List<KindInfoVo> kindInfoVo, String isAloneCI, String relatedType, boolean isNewEnergy) {
+                String riskCode = isNewEnergy ? "0515" : "0510";
+                ContractMainDTO bi = new ContractMainDTO(biRiskInfoVo, riskCode, "BI", isAloneCI, relatedType);
                 ContractDTO contractDTO = new ContractDTO();
                 bi.setBImark(false);
                 contractDTO.setContractMain(bi);
                 List<CoverageDTO> coverageDTOS = kindInfoVo.stream()
-                        .map(kind -> new CoverageDTO(biRiskInfoVo, kind))
+                        .map(kind -> new CoverageDTO(biRiskInfoVo, kind, isNewEnergy))
                         .toList();
                 contractDTO.setTax(new TaxDTO());
                 contractDTO.setPlatFormMessage(new PlatFormMessageDTO());
@@ -1990,7 +1995,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
             }
 
 
-            private static List<ContractDTO> build(RiskInfoVo ciRiskInfoVo, RiskInfoVo biRiskInfoVo, List<KindInfoVo> kindInfoVo, CustomerInfoVo insuredPersonInfo) {
+            private static List<ContractDTO> build(RiskInfoVo ciRiskInfoVo, RiskInfoVo biRiskInfoVo, List<KindInfoVo> kindInfoVo, CustomerInfoVo insuredPersonInfo, boolean isNewEnergy) {
                 List<ContractDTO> contractDTOList = new ArrayList<>();
                 String isAloneCI;
                 String relatedType;
@@ -2011,7 +2016,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                         });
                 Optional.ofNullable(biRiskInfoVo)
                         .ifPresent(x -> {
-                            contractDTOList.add(getBiContractDTO(x, kindInfoVo, isAloneCI, relatedType));
+                            contractDTOList.add(getBiContractDTO(x, kindInfoVo, isAloneCI, relatedType, isNewEnergy));
                         });
 
                 return contractDTOList;
@@ -2433,6 +2438,8 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
 
             @Data
             public static class PlatFormMessageDTO {
+                @JsonProperty("lastPolicyExpireDate")
+                private String lastPolicyExpireDate;
                 @JsonProperty("answer")
                 private String answer;
                 @JsonProperty("basePremium")
@@ -2843,6 +2850,10 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
 
 
                 private CoverageDTO(RiskInfoVo biRiskInfoVo, KindInfoVo kind) {
+                    this(biRiskInfoVo, kind, false);
+                }
+
+                private CoverageDTO(RiskInfoVo biRiskInfoVo, KindInfoVo kind, boolean isNewEnergy) {
                     this.amount = kind.getAmount();
                     this.basePremium = 0;
                     this.commission = 0;
@@ -2860,7 +2871,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                     this.expiryDate = biRiskInfoVo.getEndDate();
                     this.flag = "";
                     this.kindCode = kind.getKindCode();
-                    this.kindName = kind.getKindName();
+                    this.kindName = getKindName(kind.getKindCode(), kind.getKindName(), isNewEnergy);
                     this.kindNo = 0;
                     this.kindType = "";
                     this.modeCode = "";
@@ -2870,7 +2881,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                     this.perRate = 0;
                     this.perRateExt = 0;
                     this.profitRate = 0;
-                    this.quantity = Integer.valueOf(kind.getQuantity());
+                    this.quantity = StringUtils.isEmpty(kind.getQuantity())?5:Integer.valueOf(kind.getQuantity()) ;
                     this.rate = 0;
                     this.returnPremium = 0;
                     this.seatCount = "";
@@ -2879,7 +2890,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                     this.shortRateType = "";
                     this.surrenderPremium = 0;
                     this.term = "";
-                    this.unitAmount = Integer.valueOf(kind.getUnitAmount());
+                    this.unitAmount = StringUtils.isEmpty(kind.getUnitAmount())?1000000:Integer.valueOf(kind.getUnitAmount());
                     this.unitPremium = 0;
                     this.validDate = biRiskInfoVo.getStartDate();
                     this.vat = 0;
@@ -2890,6 +2901,26 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                     this.optNotDeductibleFlag = 0;
                     this.ductibleRate = "";
                 }
+
+                private String getKindName(String kindCode, String defaultKindName, boolean isNewEnergy) {
+                    if (!isNewEnergy) {
+                        return defaultKindName;
+                    }
+                    return switch (kindCode) {
+                        case "A" -> "新能源汽车损失保险";
+                        case "B" -> "新能源汽车第三者责任保险";
+                        case "D3" -> "新能源汽车车上人员责任保险(驾驶员)";
+                        case "D4" -> "新能源汽车车上人员责任保险(乘客)";
+                        case "SY_FJ_YBW1" -> "附加医保外医疗费用责任险(新能源汽车第三者责任保险)";
+                        case "TY1" -> "附加新能源汽车增值服务特约条款(道路救援服务)";
+                        case "TY2" -> "附加新能源汽车增值服务特约条款(车辆安全检测)";
+                        case "TY3" -> "附加新能源汽车增值服务特约条款(代为驾驶服务)";
+                        case "TY4" -> "附加新能源汽车增值服务特约条款(代为送检服务)";
+                        case "MJ1" -> "附加绝对免赔率特约险(新能源汽车损失保险)";
+                        case "MJ2" -> "附加绝对免赔率特约险(新能源汽车第三者责任保险)";
+                        default -> defaultKindName;
+                    };
+                }
             }
         }
 

+ 258 - 12
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java

@@ -9,10 +9,12 @@ import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.StringUtils;
+import com.jzg.commons.entity.quote.vo.identify.ReinsuranceCaptchaVo;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
+import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.huanong.crawler.build.HuaNongCrawlerQuoteResultsVoBuild;
@@ -38,6 +40,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.http.HttpHeaders;
 
 import java.time.Duration;
+import java.time.LocalDateTime;
 import java.util.*;
 
 @QuoteCrawlerService(InsuranceCode.INSURANCE_HNIC)
@@ -53,6 +56,7 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
     private final HuaNongCrawlerQuoteProcessService huaNongCrawlerQuoteProcessService;
 
     private final HuaNongCrawlerGetToken huaNongCrawlerGetToken;
+    private final ExteriorUtilsRequest exteriorUtilsRequest;
 
     @Override
     public void login(LoginBase loginBase) {
@@ -123,6 +127,13 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
                     huaNongCrawlerQuotedPriceResponse,
                     httpHeaders);
         }
+        // 处理转保验证码
+        if ("0".equals(huaNongCrawlerQuotedPriceResponse.getHead().getReturnCode())) {
+            huaNongCrawlerQuotedPriceResponse = handleTransferVerificationCode(
+                    huaNongCrawlerQuotedPriceRequest,
+                    huaNongCrawlerQuotedPriceResponse,
+                    httpHeaders);
+        }
         // 检查报价异常
         checkQuoteError(huaNongCrawlerQuotedPriceResponse);
 
@@ -138,9 +149,140 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         return quoteResultsVo;
     }
 
+    /**
+     * 处理转保验证码逻辑
+     * 检测到转保验证码时,OCR识别后回填参数并重新报价
+     *
+     * @param request     报价请求
+     * @param response    报价响应
+     * @param httpHeaders 请求头
+     * @return 处理后的报价响应
+     */
+    private HuaNongCrawlerQuotedPriceResponse handleTransferVerificationCode(
+            HuaNongCrawlerQuotedPriceRequestRequest request,
+            HuaNongCrawlerQuotedPriceResponse response,
+            HttpHeaders httpHeaders) {
+
+        if (response == null || response.getBusinessData() == null) {
+            return response;
+        }
+
+        boolean hasTransferCaptcha = hasTransferVerificationCode(response);
+        if (!hasTransferCaptcha) {
+            return response;
+        }
+
+        log.info("检测到转保验证码,开始处理");
+
+        String ciCaptcha = null;
+        String biCaptcha = null;
+
+        List<HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO> contractList = response.getBusinessData().getContract();
+        for (HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO contract : contractList) {
+            if (contract.getPlatFormMessage() == null) {
+                continue;
+            }
+
+            String checkCode = contract.getPlatFormMessage().getCheckCode();
+            if (!StringUtils.hasText(checkCode)) {
+                continue;
+            }
+
+            String querySequenceNo = contract.getPlatFormMessage().getQuerySequenceNo();
+            String queryDate = contract.getPlatFormMessage().getQueryDate();
+            HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO.PlatFormMessageDTO platFormMessage = contract.getPlatFormMessage();
+
+            String captchaResult = identifyCaptcha(checkCode);
+
+            String riskCode = contract.getContractMain().getRiskCode();
+            boolean isCi = "0507".equals(riskCode);
+            boolean isBi = "0510".equals(riskCode) || "0515".equals(riskCode);
+
+            if (isCi) {
+                ciCaptcha = captchaResult;
+            } else if (isBi) {
+                biCaptcha = captchaResult;
+            }
+
+            updateRequestWithCaptcha(request, riskCode, captchaResult, querySequenceNo, queryDate, platFormMessage);
+        }
+
+        ReinsuranceCaptchaVo reinsuranceCaptchaVo = new ReinsuranceCaptchaVo(ciCaptcha, biCaptcha);
+        exteriorUtilsRequest.reinsuranceCaptchaIdentify(reinsuranceCaptchaVo);
+
+        log.info("转保验证码处理完成,交强险验证码:{},商业险验证码:{}", ciCaptcha, biCaptcha);
+
+        return huaNongCrawlerRequestComponent.quotedPrice(request, httpHeaders);
+    }
+
+    private boolean hasTransferVerificationCode(HuaNongCrawlerQuotedPriceResponse response) {
+        if (response == null || response.getBusinessData() == null ||
+                response.getBusinessData().getContract() == null) {
+            return false;
+        }
+
+        if (StringUtils.hasText(response.getComeCode())) {
+            return false;
+        }
+
+        for (HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO contract : response.getBusinessData().getContract()) {
+            if (contract.getPlatFormMessage() != null &&
+                    StringUtils.hasText(contract.getPlatFormMessage().getCheckCode())) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    private String identifyCaptcha(String checkCode) {
+        String result = exteriorUtilsRequest.captchaIdentify(checkCode);
+        if (result != null) {
+            result = result.replace('0', 'O');
+        }
+        return result;
+    }
+
+    private void updateRequestWithCaptcha(HuaNongCrawlerQuotedPriceRequestRequest request,
+                                          String riskCode,
+                                          String captchaResult,
+                                          String querySequenceNo,
+                                          String queryDate,
+                                          HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO.PlatFormMessageDTO responsePlatFormMessage) {
+
+        request.getBusinessData().getContract().stream()
+                .filter(dto -> riskCode.equals(dto.getContractMain().getRiskCode()))
+                .findFirst()
+                .ifPresent(dto -> {
+                    dto.getContractMain().setCheckFlag("Check");
+                    dto.getContractMain().setRenewalFlag("-1");
+                    dto.getContractMain().setQuerySequenceNo(querySequenceNo);
+                    dto.getContractMain().setProductionDate(TimeProcessing.nowDateTime());
+
+                    HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.ContractDTO.PlatFormMessageDTO platFormMessage = dto.getPlatFormMessage();
+                    if (platFormMessage == null) {
+                        platFormMessage = new HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.ContractDTO.PlatFormMessageDTO();
+                        dto.setPlatFormMessage(platFormMessage);
+                    }
+
+                    platFormMessage.setQueryDate(queryDate);
+                    platFormMessage.setQuerySequenceNo(querySequenceNo);
+                    platFormMessage.setCheckCodeRe(captchaResult);
+
+                    if (responsePlatFormMessage != null) {
+                        platFormMessage.setCheckCode(responsePlatFormMessage.getCheckCode());
+                        platFormMessage.setCiReinsureMessage(responsePlatFormMessage.getCiReinsureMessage());
+                        platFormMessage.setBiReinsureMessage(responsePlatFormMessage.getBiReinsureMessage());
+                        platFormMessage.setCiReinsureEndDate(responsePlatFormMessage.getCiReinsureEndDate());
+                        platFormMessage.setBiReinsureEndDate(responsePlatFormMessage.getBiReinsureEndDate());
+                        platFormMessage.setLastPolicyExpireDate(responsePlatFormMessage.getLastPolicyExpireDate());
+                    }
+                });
+    }
+
     /**
      * 处理重复投保逻辑
-     * 检测到重复投保时调整日期后重试,重试后仍重复投保则抛出异常
+     * 检测到重复投保时调整日期后重试,重试后仍重复投保则日期再向后推迟一天重试,第二次重试后仍重复投保则返回结果
      *
      * @param request     报价请求
      * @param response    报价响应
@@ -163,7 +305,6 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
 
         boolean hasDuplicateInsurance = false;
 
-        // 第一次遍历:检查是否有需要处理的重复投保
         for (HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO contract : contractList) {
             if (contract.getPlatFormMessage() == null) {
                 continue;
@@ -172,7 +313,6 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
             String ciReinsureMsg = contract.getPlatFormMessage().getCiReinsureMessage();
             String biReinsureMsg = contract.getPlatFormMessage().getBiReinsureMessage();
 
-            // 同时检查"重复投保"和"终保日期"
             boolean isCiDuplicate = StringUtils.hasText(ciReinsureMsg) &&
                     (ciReinsureMsg.contains("重复投保") || ciReinsureMsg.contains("终保日期"));
             boolean isBiDuplicate = StringUtils.hasText(biReinsureMsg) &&
@@ -188,11 +328,15 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
             return response;
         }
 
-        // 处理重复投保:调整日期并重试
         response = processDuplicateInsurance(request, response, httpHeaders);
 
-        // 检查重试后是否仍然重复投保
-        return checkAndHandleRemainingDuplicate(response);
+        boolean stillDuplicate = hasDuplicateInsurance(response);
+        if (stillDuplicate) {
+            log.info("第一次重试后仍存在重复投保,日期向后推迟一天进行第二次重试");
+            response = processDuplicateInsuranceWithOneMoreDay(request, response, httpHeaders);
+        }
+
+        return checkAndHandleRemainingDuplicate(response, false);
     }
 
     private HuaNongCrawlerQuotedPriceResponse processDuplicateInsurance(
@@ -213,7 +357,7 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
                     StringUtils.hasText(ciReinsureMsg) &&
                     (ciReinsureMsg.contains("重复投保") || ciReinsureMsg.contains("终保日期"));
 
-            boolean needAdjustBi = "0510".equals(riskCode) &&
+            boolean needAdjustBi = ("0510".equals(riskCode) || "0515".equals(riskCode)) &&
                     StringUtils.hasText(biReinsureMsg) &&
                     (biReinsureMsg.contains("重复投保") || biReinsureMsg.contains("终保日期"));
 
@@ -225,6 +369,102 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         return huaNongCrawlerRequestComponent.quotedPrice(request, httpHeaders);
     }
 
+    private boolean hasDuplicateInsurance(HuaNongCrawlerQuotedPriceResponse response) {
+        if (response == null || response.getBusinessData() == null ||
+                response.getBusinessData().getContract() == null) {
+            return false;
+        }
+
+        for (HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO contract : response.getBusinessData().getContract()) {
+            if (contract.getPlatFormMessage() == null) {
+                continue;
+            }
+
+            String ciReinsureMsg = contract.getPlatFormMessage().getCiReinsureMessage();
+            String biReinsureMsg = contract.getPlatFormMessage().getBiReinsureMessage();
+
+            boolean isCiDuplicate = StringUtils.hasText(ciReinsureMsg) &&
+                    (ciReinsureMsg.contains("重复投保") || ciReinsureMsg.contains("终保日期"));
+            boolean isBiDuplicate = StringUtils.hasText(biReinsureMsg) &&
+                    (biReinsureMsg.contains("重复投保") || biReinsureMsg.contains("终保日期"));
+
+            if (isCiDuplicate || isBiDuplicate) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    private HuaNongCrawlerQuotedPriceResponse processDuplicateInsuranceWithOneMoreDay(
+            HuaNongCrawlerQuotedPriceRequestRequest request,
+            HuaNongCrawlerQuotedPriceResponse response,
+            HttpHeaders httpHeaders) {
+
+        for (HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO contract : response.getBusinessData().getContract()) {
+            if (contract.getPlatFormMessage() == null) {
+                continue;
+            }
+
+            String riskCode = contract.getContractMain().getRiskCode();
+            String ciReinsureMsg = contract.getPlatFormMessage().getCiReinsureMessage();
+            String biReinsureMsg = contract.getPlatFormMessage().getBiReinsureMessage();
+
+            boolean needAdjustCi = "0507".equals(riskCode) &&
+                    StringUtils.hasText(ciReinsureMsg) &&
+                    (ciReinsureMsg.contains("重复投保") || ciReinsureMsg.contains("终保日期"));
+
+            boolean needAdjustBi = ("0510".equals(riskCode) || "0515".equals(riskCode)) &&
+                    StringUtils.hasText(biReinsureMsg) &&
+                    (biReinsureMsg.contains("重复投保") || biReinsureMsg.contains("终保日期"));
+
+            if (needAdjustCi || needAdjustBi) {
+                adjustPolicyDateWithOneMoreDay(request, riskCode, contract);
+            }
+        }
+
+        return huaNongCrawlerRequestComponent.quotedPrice(request, httpHeaders);
+    }
+
+    private void adjustPolicyDateWithOneMoreDay(HuaNongCrawlerQuotedPriceRequestRequest request,
+                                                 String riskCode, HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO contract) {
+
+        String lastExpireDate = "";
+
+        if ("0507".equals(riskCode)) {
+            lastExpireDate = contract.getPlatFormMessage().getCiReinsureEndDate();
+        } else if ("0510".equals(riskCode) || "0515".equals(riskCode)) {
+            String biReinsureEndDate = contract.getPlatFormMessage().getBiReinsureEndDate();
+            String lastPolicyExpireDate = contract.getPlatFormMessage().getLastPolicyExpireDate();
+
+            if (StringUtils.hasText(biReinsureEndDate)) {
+                lastExpireDate = biReinsureEndDate;
+            } else if (StringUtils.hasText(lastPolicyExpireDate)) {
+                lastExpireDate = lastPolicyExpireDate;
+            }
+        }
+
+        if (StringUtils.hasText(lastExpireDate)) {
+            lastExpireDate = ensureDateTimeFormat(lastExpireDate);
+            lastExpireDate = plusOneDayDateTime(lastExpireDate);
+
+            String finalLastExpireDate = lastExpireDate;
+            request.getBusinessData().getContract().stream()
+                    .filter(dto -> riskCode.equals(dto.getContractMain().getRiskCode()))
+                    .findFirst()
+                    .ifPresent(dto -> {
+                        dto.getContractMain().setValidDate(finalLastExpireDate);
+                        dto.getContractMain().setExpiryDate(TimeProcessing.minusOneSecondAfterYear(finalLastExpireDate));
+                        dto.getCoverage().get(0).setValidDate(finalLastExpireDate);
+                    });
+        }
+    }
+
+    private String plusOneDayDateTime(String dateTime) {
+        LocalDateTime localDateTime = LocalDateTime.parse(dateTime, TimeProcessing.DATE_TIME_FORMATTER);
+        return localDateTime.plusDays(1).format(TimeProcessing.DATE_TIME_FORMATTER);
+    }
+
     private void adjustPolicyDate(HuaNongCrawlerQuotedPriceRequestRequest request,
                                   String riskCode, HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO contract) {
 
@@ -233,7 +473,7 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         if ("0507".equals(riskCode)) {
             // 交强险:优先使用 ciReinsureEndDate
             lastExpireDate = contract.getPlatFormMessage().getCiReinsureEndDate();
-        } else if ("0510".equals(riskCode)) {
+        } else if ("0510".equals(riskCode) || "0515".equals(riskCode)) {
             // 商业险:优先使用 biReinsureEndDate,其次使用 lastPolicyExpireDate
             String biReinsureEndDate = contract.getPlatFormMessage().getBiReinsureEndDate();
             String lastPolicyExpireDate = contract.getPlatFormMessage().getLastPolicyExpireDate();
@@ -256,11 +496,12 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
                     .ifPresent(dto -> {
                         dto.getContractMain().setValidDate(finalLastExpireDate);
                         dto.getContractMain().setExpiryDate(TimeProcessing.minusOneSecondAfterYear(finalLastExpireDate));
+                        dto.getCoverage().get(0).setValidDate(finalLastExpireDate);
                     });
         }
     }
 
-    private HuaNongCrawlerQuotedPriceResponse checkAndHandleRemainingDuplicate(HuaNongCrawlerQuotedPriceResponse response) {
+    private HuaNongCrawlerQuotedPriceResponse checkAndHandleRemainingDuplicate(HuaNongCrawlerQuotedPriceResponse response, boolean throwException) {
         if (response == null || response.getBusinessData() == null ||
                 response.getBusinessData().getContract() == null) {
             return response;
@@ -297,7 +538,11 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         }
 
         if (errorMsg.length() > 0) {
-            throw new SystemException("重复投保处理失败:" + errorMsg.toString());
+            if (throwException) {
+                throw new SystemException("重复投保处理失败:" + errorMsg.toString());
+            } else {
+                throw new SystemException("重复投保处理后仍存在重复投保,已尽最大努力重试,返回当前结果:{}", errorMsg.toString());
+            }
         }
 
         return response;
@@ -337,11 +582,12 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
     // 处理重复投保
     private HuaNongCrawlerQuotedPriceResponse repeatQuote(HuaNongCrawlerQuotedPriceRequestRequest huaNongCrawlerQuotedPriceRequest, HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO contract, HttpHeaders httpHeaders) {
         String riskCode = contract.getContractMain().getRiskCode();
-        if ("0510".equals(riskCode)) {
+        if ("0510".equals(riskCode) || "0515".equals(riskCode)) {
             String lastExpireDate = contract.getPlatFormMessage().getLastPolicyExpireDate();
             if (lastExpireDate != null && !lastExpireDate.trim().isEmpty()) {
+                final String finalRiskCode = riskCode;
                 huaNongCrawlerQuotedPriceRequest.getBusinessData().getContract().stream()
-                        .filter(dto -> "0510".equals(dto.getContractMain().getRiskCode()))
+                        .filter(dto -> finalRiskCode.equals(dto.getContractMain().getRiskCode()))
                         .findFirst()
                         .ifPresent(dto -> {
                             dto.getContractMain().setValidDate(lastExpireDate);

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

@@ -62,7 +62,7 @@ public class QuoteVerificationAspect {
     private final InsOrdersOtherService insOrdersOtherService;
 
     private final InsFeeOrdersService insFeeOrdersService;
-    private static final Logger log = LoggerFactory.getLogger("fee");
+    private static final Logger log = LoggerFactory.getLogger(QuoteVerificationAspect.class);
 
     private final BaseController baseController;
     private final PtlNewAgreementClient ptlNewAgreementClient;
@@ -212,6 +212,7 @@ public class QuoteVerificationAspect {
             List<PtlAgreementUndwrtRulesDictLabal> undwrtRulesDictList = ptlNewAgreementClient.getUndwrtRulesDictList();
 
             if (FactorMatch.judgements(agreementProductCosts.get(i).getPtlAgreementCostRuleList(),ruleAttrMappingVoList,undwrtRulesAttrList,logs, undwrtRulesDictList)) {
+                log.info("匹配到的费用id:{}",agreementProductCosts.get(i).getId());
                 return agreementProductCosts.get(i).getId();
             }
             log.debug("当前费用因子匹配结束\n");
@@ -315,7 +316,7 @@ public class QuoteVerificationAspect {
             return BigDecimal.ZERO;
         }
         BigDecimal inletPercent = convertPercent(costType.getInlet());
-        return inletPercent.subtract(entranceFeeRatio).setScale(5);
+        return inletPercent.subtract(entranceFeeRatio).setScale(5, RoundingMode.HALF_UP);
     }
 
     /**
@@ -366,7 +367,7 @@ public class QuoteVerificationAspect {
                 .setScale(5, RoundingMode.HALF_EVEN);
 
         // 计算应付金额(保费 * 出口比例,保留2位小数)
-        BigDecimal payable = premium.multiply(exportPercent.setScale(2, RoundingMode.DOWN));
+        BigDecimal payable = premium.multiply(exportPercent.setScale(5, RoundingMode.DOWN));
 
         // 计算各类费用并设置到订单对象
         setReceivable.accept(insFeeOrders, receivable);

+ 2 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/template/LotteryMessageTemplate.java

@@ -1,6 +1,7 @@
 package com.jzg.quotation.summary.consumer.template;
 
 
+import com.jzg.commons.entity.enums.MessageCodeEnum;
 import com.jzg.commons.entity.enums.MessageTopicEnum;
 import com.jzg.commons.entity.enums.MessageTypeEnum;
 import com.jzg.quotation.summary.consumer.message.LotteryMessage;
@@ -28,6 +29,7 @@ public class LotteryMessageTemplate extends RocketMQEnhanceTemplate {
     public SendResult addLottery(String userId) {
         LotteryMessage message = new LotteryMessage();
         message.setReceiverUser(userId);
+        message.setTplCode(MessageCodeEnum.TEMPLATE_13.getCode());
         SendResult result = send(MessageTopicEnum.ROCKET_SYSTEM.getCode(), MessageTypeEnum.LOTTERY.getCode(), message);
         return result;
     }

+ 17 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrdersController.java

@@ -1,6 +1,7 @@
 package com.jzg.quotation.summary.controller;
 
 
+import cn.hutool.core.util.NumberUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -10,6 +11,7 @@ import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.InsOrdersParam;
 import com.jzg.commons.entity.dto.InsOrdersParamVO;
+import com.jzg.commons.entity.finance.vo.BatchModifyVo;
 import com.jzg.commons.entity.orders.vo.HistoryQuoteQueryVo;
 import com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo;
 import com.jzg.commons.entity.po.InsFeeOrders;
@@ -40,7 +42,6 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.validation.constraints.NotNull;
 import java.util.*;
-import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/supplementOrder")
@@ -98,6 +99,16 @@ public class InsOrdersController extends BaseController {
         return HttpResult.ok(insOrdersService.selectById(id));
     }
 
+    @PostMapping("/selectInsOrdersById/{id}")
+    @Operation(summary = "通过ID查询订单信息")
+    public HttpResult<InsOrdersVo> selectInsOrdersById(@NotNull(message = "id不能为空") @PathVariable String id) {
+        InsOrdersVo insOrdersVo = null;
+        if (NumberUtil.isLong(id)){
+            insOrdersVo = insOrdersService.selectById(Long.parseLong(id));
+        }
+        return HttpResult.ok(insOrdersVo);
+    }
+
     @PostMapping("pageList")
     @Operation(summary = "订单分页列表")
     public HttpResult pageList(@RequestBody InsOrdersParam insOrdersParam) {
@@ -200,6 +211,11 @@ public class InsOrdersController extends BaseController {
         return HttpResult.ok(insOrdersService.changeSupplementOrder(orderNo));
     }
 
+    @PostMapping("/updateOrdersBatch")
+    @Operation(summary = "车险报价批量修改联系人等信息")
+    public HttpResult<String> updateOrdersBatch(@RequestBody BatchModifyVo batchModifyVo){
+        return insOrdersService.updateOrdersBatch(batchModifyVo);
+    }
 
     @GetMapping("/comparePrice")
     @Operation(summary = "比价")

+ 7 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/QrCodeController.java

@@ -9,6 +9,7 @@ import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.orders.po.*;
 import com.jzg.commons.entity.po.EsmInsCompany;
 import com.jzg.commons.entity.po.QrBarcodeConfig;
+import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.LocalDateTimeUtils;
 import com.jzg.commons.util.StringUtils;
@@ -80,6 +81,7 @@ public class QrCodeController extends BaseController {
         result.put("taxPremium",insOrdersCosts.getTaxPremium());
         result.put("sumPremium",insOrdersCosts.getSumPremium());
         result.put("createTime",orders.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        result.put("company",orders.getCompanyName());
         result.put("jqStartTime","");
         result.put("syStartTime","");
         insOrdersRiskList.forEach(risk->{
@@ -92,7 +94,11 @@ public class QrCodeController extends BaseController {
         });
 
 
-        insOrdersQrcodeService.getOneOrSave(orders);
+        InsOrdersQrcode ordersQrcode = insOrdersQrcodeService.getOneOrSave(orders);
+        if(ordersQrcode.getJumpUrl() == null || ordersQrcode.getJumpUrl().isEmpty()){
+            throw new SystemException("订单不存在支付连接");
+        }
+
         String qrCodeUrl = qrCodeGenAddress + "?orderNo=" + orders.getId();
         result.put("qrcode",qrCodeUrl);
         ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView());

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

@@ -255,6 +255,9 @@ public class UnifyOrderManager {
         }
         quoteVo.getOrder().setAgreementId(ptlAgreement.getId());
         quoteVo.getOrder().setApiType(ptlAgreement.getApiType());
+        // add by lilpf 2026年6月1日09:03:34 为订单添加对接人和对接人联系方式
+        quoteVo.getOrder().setDockingPerson(ptlAgreement.getDockingPerson());
+        quoteVo.getOrder().setDockingPersonPhone(ptlAgreement.getDockingPhone());
         // 设置人员区划. (将投保人的地址信息,按照行政区域进行划分)
         insOrdersService.setUserAreaCode(quoteVo);
         log.debug("设置人员区域后信息是:quoteVo=[{}]", JSONUtil.toJsonStr(quoteVo));

+ 6 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/po/SysQuoteConfig.java

@@ -2,8 +2,10 @@ package com.jzg.quotation.summary.entity.po;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.jzg.commons.entity.po.SysUser;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -74,6 +76,10 @@ public class SysQuoteConfig implements Serializable {
     @TableField(value = "update_by")
     private String updateBy;
 
+    @Schema(description = "是否删除")
+    @TableLogic
+    private Integer isDelete;
+
     /**
      * 代理人id list
      */

+ 6 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/po/SysQuoteRecord.java

@@ -2,9 +2,11 @@ package com.jzg.quotation.summary.entity.po;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.jzg.commons.util.idgen.IdGenerate;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -55,6 +57,10 @@ public class SysQuoteRecord implements Serializable {
     @TableField(value = "create_time")
     private LocalDateTime createTime;
 
+    @Schema(description = "是否删除")
+    @TableLogic
+    private Integer isDelete;
+
     public SysQuoteRecord(QuoteVo quoteVo, String action, String result){
         this.id = IdGenerate.nextId();
 //        this.userId = quoteVo.getOrder().getUserid();

+ 6 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/po/SysQuoteUser.java

@@ -2,8 +2,10 @@ package com.jzg.quotation.summary.entity.po;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.jzg.commons.util.idgen.IdGenerate;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -29,6 +31,10 @@ public class SysQuoteUser implements Serializable {
     @TableField(value = "user_id")
     private String userId;
 
+    @Schema(description = "是否删除")
+    @TableLogic
+    private Integer isDelete;
+
     public SysQuoteUser(String configId,String userId){
         this.id = IdGenerate.nextId();
         this.configId = configId;

+ 5 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/entity/po/SysQuoteUserConfigAppend.java

@@ -2,7 +2,9 @@ package com.jzg.quotation.summary.entity.po;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -70,6 +72,9 @@ public class SysQuoteUserConfigAppend implements Serializable {
     @TableField(value = "create_by")
     private String createBy;
 
+    @Schema(description = "是否删除")
+    @TableLogic
+    private Integer isDelete;
 
     public SysQuoteUserConfigAppend(){
         dayMaxQuoteNum = 0;

+ 11 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java

@@ -7,6 +7,7 @@ import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.InsOrdersParam;
 import com.jzg.commons.entity.dto.InsOrdersParamVO;
 import com.jzg.commons.entity.enums.MessageCodeEnum;
+import com.jzg.commons.entity.finance.vo.BatchModifyVo;
 import com.jzg.commons.entity.orders.po.InsOrders;
 import com.jzg.commons.entity.orders.po.InsOrdersCarInfo;
 import com.jzg.commons.entity.orders.po.InsOrdersCosts;
@@ -56,8 +57,8 @@ public interface InsOrdersService extends IService<InsOrders> {
     /**
      * 根据报价参数生成订单  返回订单号
      *
-     * @param quoteVo
-     * @param companyName
+     * @param quoteVo 报价信息
+     * @param companyName 保险公司名称
      * @return String
      */
     String generateOrders(QuoteVo quoteVo, String companyName);
@@ -282,4 +283,12 @@ public interface InsOrdersService extends IService<InsOrders> {
      * @return
      */
     SysUserActivityCompleteInRule selectByRuleAndUserPhone(String activityId, String userPhone, String qutNum, Integer activityType);
+
+    /**
+     * 车险报价批量修改联系人等信息
+     *
+     * @author lipf
+     * @date 2026/5/28 10:45
+     */
+    HttpResult<String> updateOrdersBatch(BatchModifyVo batchModifyVo);
 }

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

@@ -698,6 +698,12 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         }
         audit.setProblemReason(Objects.toString(problemReason,""));
         audit.setIsProblem(Integer.parseInt(status));
+        // 设置疑问订单的时间
+        if ("1".equals(status)){
+            audit.setProblemTime(LocalDateTime.now());
+        }else{
+            audit.setProblemTime(null);
+        }
         this.updateById(audit);
     }
 

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

@@ -110,7 +110,7 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
         BigDecimal jyPremium = insOrdersCosts.getJyPremium() == null ? BigDecimal.ZERO : insOrdersCosts.getJyPremium();
 
         // 更新对象中的比例字段
-        copyRatio(ptlAgreementCostRatioVo, insFeeOrders);
+        copyRatio(ptlAgreementCostRatioVo, insFeeOrders, withTax);
 
         // 核心:规则重新计算所有费用
         // 1. 交强险
@@ -286,7 +286,12 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
     }
 
     // 保存比例
-    private void copyRatio(PtlAgreementCostRatioVo ptlAgreementCostRatioVo, InsFeeOrders insFeeOrders) {
+    private void copyRatio(PtlAgreementCostRatioVo ptlAgreementCostRatioVo, InsFeeOrders insFeeOrders, Integer withTax) {
+        BigDecimal bigDecimal = new BigDecimal("1");
+        if (withTax == 0) {
+            // 不含税:保费 / 1.06
+            bigDecimal =  new BigDecimal("1.06");
+        }
         // 手续费比例
         BigDecimal jqCommissionRatio = covertPercent(ptlAgreementCostRatioVo.getJqCommissionRatio());
         BigDecimal syCommissionRatio = covertPercent(ptlAgreementCostRatioVo.getSyCommissionRatio());
@@ -323,9 +328,9 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
         insFeeOrders.setSyExportRatio(syExportRatio);
         insFeeOrders.setJyExportRatio(jyExportRatio);
         // 需求:入口 + 加投 - 出口 = 留点
-        BigDecimal jqKeepPointRatio = jqInletRatio.add(jqAdditionalRatio).subtract(jqExportRatio);
-        BigDecimal syKeepPointRatio = syInletRatio.add(syAdditionalRatio).subtract(syExportRatio);
-        BigDecimal jyKeepPointRatio = jyInletRatio.add(jyAdditionalRatio).subtract(jyExportRatio);
+        BigDecimal jqKeepPointRatio = (jqInletRatio.divide(bigDecimal, 5, RoundingMode.HALF_EVEN)).add(jqAdditionalRatio).subtract(jqExportRatio);
+        BigDecimal syKeepPointRatio = (syInletRatio.divide(bigDecimal, 5, RoundingMode.HALF_EVEN)).add(syAdditionalRatio).subtract(syExportRatio);
+        BigDecimal jyKeepPointRatio = (jyInletRatio.divide(bigDecimal, 5, RoundingMode.HALF_EVEN)).add(jyAdditionalRatio).subtract(jyExportRatio);
         // 留点比例
         insFeeOrders.setJqKeepPointRatio(jqKeepPointRatio);
         insFeeOrders.setSyKeepPointRatio(syKeepPointRatio);

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

@@ -24,6 +24,7 @@ import com.jzg.commons.entity.dto.InsOrdersParam;
 import com.jzg.commons.entity.dto.InsOrdersParamVO;
 import com.jzg.commons.entity.dto.InsTaskImagesAdd;
 import com.jzg.commons.entity.enums.MessageCodeEnum;
+import com.jzg.commons.entity.finance.vo.BatchModifyVo;
 import com.jzg.commons.entity.orders.po.*;
 import com.jzg.commons.entity.orders.vo.HistoryQuoteQueryVo;
 import com.jzg.commons.entity.orders.vo.HistoryQuoteResultVo;
@@ -50,7 +51,6 @@ import com.jzg.quotation.commons.client.OrgClient;
 import com.jzg.quotation.commons.client.PartnerDistributionClient;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.utils.BeanCopyUtil;
-import com.jzg.quotation.commons.utils.DateTimeUtil;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
 import com.jzg.quotation.summary.consumer.template.OrderMessageTemplate;
 import com.jzg.quotation.summary.entity.bo.DataValueBo;
@@ -524,19 +524,19 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             insOrdersVo.getInsOrdersRiskList().forEach(riskInfo -> {
                 insOrdersVo.setBiRiskInfoVo(getRiskInfoVo(riskInfo));
                 insOrdersVo.setCiRiskInfoVo(getRiskInfoVo(riskInfo));
-                if (StringUtils.equals(riskInfo.getRiskCode(), "0507")) {
-                    List<KindInfoVo> kindInfoVos = insOrdersVo.getKindInfoVo();
-                    InsOrdersCosts insOrdersCosts = insOrdersVo.getInsOrdersCosts();
-                    KindInfoVo jqKind = new KindInfoVo();
-                    jqKind.setKindCode("J1");
-                    jqKind.setKindName("交强险");
-                    if (Objects.nonNull(insOrdersCosts.getJqPremium())) {
-                        jqKind.setPremium(insOrdersCosts.getJqPremium().toString());
-                    }
-                    kindInfoVos.add(jqKind);
-                } else {
-                    insOrdersVo.setBiRiskInfoVo(getRiskInfoVo(riskInfo));
-                }
+//                if (StringUtils.equals(riskInfo.getRiskCode(), "0507")) {
+//                    List<KindInfoVo> kindInfoVos = insOrdersVo.getKindInfoVo();
+//                    InsOrdersCosts insOrdersCosts = insOrdersVo.getInsOrdersCosts();
+//                    KindInfoVo jqKind = new KindInfoVo();
+//                    jqKind.setKindCode("J1");
+//                    jqKind.setKindName("交强险");
+//                    if (Objects.nonNull(insOrdersCosts.getJqPremium())) {
+//                        jqKind.setPremium(insOrdersCosts.getJqPremium().toString());
+//                    }
+//                    kindInfoVos.add(jqKind);
+//                } else {
+//                    insOrdersVo.setBiRiskInfoVo(getRiskInfoVo(riskInfo));
+//                }
             });
         }
         // 订单电子保单信息
@@ -951,7 +951,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             if (!TextUtils.isEmpty(paylink) && paylink.contains("data:image/jpg;base64,")) {
                 paylink = paylink.replace("data:image/jpg;base64,", "");
             }
-            insOrdersQrcode.setJumpUrl(paylink);
+            insOrdersQrcode.setJumpUrl(paylink == null ? "" : paylink);
         }
         insOrdersQrcode.setQrcodeStatus(1);
         insOrdersQrcode.setCreatetime(LocalDateTime.now());
@@ -1026,6 +1026,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             insOrders.setId(IdGenerate.nextId());
         }
 
+        // add by lipf 2026年6月1日09:08:07 填充对接人信息
+        insOrders.setDockingPerson(quoteVo.getOrder().getDockingPerson());
+        insOrders.setDockingPersonPhone(quoteVo.getOrder().getDockingPersonPhone());
         insOrders.setQuoteNo(quoteVo.getOrder().getQuoteNo());
         insOrders.setAgreementId(quoteVo.getOrder().getAgreementId());
         insOrders.setOrderStatus(InsOrderStatusEnum.QUOTE_ING.getCode()); // 订单状态 报价中
@@ -1106,6 +1109,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         oldOrder.setProductId(insOrders.getProductId());
         oldOrder.setProductName(insOrders.getProductName());
 
+        // modify by lipf 2026年6月1日09:10:01 填充对接人信息
+        insOrders.setDockingPerson(quoteVo.getOrder().getDockingPerson());
+        insOrders.setDockingPersonPhone(quoteVo.getOrder().getDockingPersonPhone());
         insOrders.setQuoteNo(quoteVo.getOrder().getQuoteNo());
         insOrders.setAgreementId(quoteVo.getOrder().getAgreementId());
         insOrders.setOrderStatus(InsOrderStatusEnum.QUOTE_ING.getCode()); // 订单状态 报价中
@@ -1654,4 +1660,60 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     public SysUserActivityCompleteInRule selectByRuleAndUserPhone(String activityId, String userPhone, String qutNum, Integer activityType) {
         return insOrdersMapper.selectByRuleAndUserPhone(activityId, userPhone, qutNum, activityType);
     }
+
+
+    public BigDecimal multiply(BigDecimal premium, BigDecimal ratio) {
+        if(premium==null||ratio==null) {
+            return BigDecimal.ZERO;
+        }
+        return premium.multiply(ratio);
+    }
+    /**
+     * 车险报价批量修改联系人等信息
+     *
+     * @param batchModifyVo 需要批量修改的内容
+     * @author lipf
+     * @date 2026/5/28 10:45
+     */
+    @Override
+    public HttpResult<String> updateOrdersBatch(BatchModifyVo batchModifyVo) {
+        log.info("批量修改车险订单的费用比例,联系人等信息. batchModifyVo=[{}]", JSONUtil.toJsonStr(batchModifyVo));
+
+        List<String> orderNos = batchModifyVo.getOrderNos();
+        if(CollUtil.isEmpty(orderNos)){
+            return HttpResult.error("批量修改时,请指定订单编号");
+        }
+        int count = 0;
+        for (String orderNo : orderNos) {
+            InsOrders oldInsOrders = baseMapper.selectById(orderNo);
+            InsFeeOrders insFeeOrders = insFeeOrdersMapper.selectById(orderNo);
+            if(oldInsOrders == null || insFeeOrders == null){
+                log.info("根据订单号[{}]没有找到车险订单信息和订单的费用信息",orderNo);
+                continue;
+            }
+            log.info("车险订单[{}]对应的订单明细是[{}]", orderNo, JSONUtil.toJsonStr(oldInsOrders));
+            if(batchModifyVo.getSigningTime() != null){
+                baseMapper.update(null, new LambdaUpdateWrapper<InsOrders>()
+                        .set(InsOrders::getSigningTime, batchModifyVo.getSigningTime())
+                        .eq(InsOrders::getId,orderNo));
+                insFeeOrdersMapper.update(null, new LambdaUpdateWrapper<InsFeeOrders>()
+                        .set(InsFeeOrders::getSigningTime,batchModifyVo.getSigningTime())
+                        .eq(InsFeeOrders::getOrderNo,orderNo));
+            }
+            if(StrUtil.isNotEmpty(batchModifyVo.getContractUserName())){
+                baseMapper.update(null, new LambdaUpdateWrapper<InsOrders>()
+                        .set(InsOrders::getDockingPerson, batchModifyVo.getContractUserName())
+                        .eq(InsOrders::getId,orderNo));
+            }
+            if(StrUtil.isNotEmpty(batchModifyVo.getContractPhone())){
+                baseMapper.update(null, new LambdaUpdateWrapper<InsOrders>()
+                        .set(InsOrders::getDockingPersonPhone, batchModifyVo.getContractPhone())
+                        .eq(InsOrders::getId,orderNo));
+            }
+            count++;
+        }
+        String msg = String.format("成功修改%d条车险订单",count);
+        log.info(msg);
+        return HttpResult.ok(msg);
+    }
 }

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

@@ -233,9 +233,6 @@ zijin:
 #    downLoadDocument: http://open.zking.com/temp/api/v1/insurance/nonAutoMobile/queryPolicy/downLoadDocument
 #    # 对接三方渠道验车链接接口
 #    sendCheckCarLink: http://open.zking.com/api/v1/open/open-aggregate/auth/wanJiaYun/sendCheckCarLink
-zhongAn:
-  id: "1402039"
-  productId: "10676"
 
 
 feign:

+ 99 - 107
tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml

@@ -5,18 +5,18 @@
 <mapper namespace="com.jzg.quotation.summary.mapper.InsFeeAuditMapper">
 
     <resultMap id="BaseResultMap" type="com.jzg.commons.entity.orders.po.InsFeeAudit">
-            <id property="orderNo" column="order_no" jdbcType="VARCHAR"/>
-            <result property="auditStatus" column="audit_status" jdbcType="VARCHAR"/>
-            <result property="auditTime" column="audit_time" jdbcType="TIMESTAMP"/>
-            <result property="auditUser" column="audit_user" jdbcType="VARCHAR"/>
-            <result property="receiveTime" column="receive_time" jdbcType="TIMESTAMP"/>
-            <result property="receiveUser" column="receive_user" jdbcType="VARCHAR"/>
-            <result property="isDelete" column="is_delete" jdbcType="TINYINT"/>
-            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
-            <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
-            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
-            <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
-            <result property="isProblem" column="is_problem" jdbcType="TINYINT"/>
+        <id property="orderNo" column="order_no" jdbcType="VARCHAR"/>
+        <result property="auditStatus" column="audit_status" jdbcType="VARCHAR"/>
+        <result property="auditTime" column="audit_time" jdbcType="TIMESTAMP"/>
+        <result property="auditUser" column="audit_user" jdbcType="VARCHAR"/>
+        <result property="receiveTime" column="receive_time" jdbcType="TIMESTAMP"/>
+        <result property="receiveUser" column="receive_user" jdbcType="VARCHAR"/>
+        <result property="isDelete" column="is_delete" jdbcType="TINYINT"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+        <result property="isProblem" column="is_problem" jdbcType="TINYINT"/>
     </resultMap>
 
     <sql id="Base_Column_List">
@@ -27,7 +27,7 @@
     </sql>
     <select id="queryPage" resultType="com.jzg.commons.entity.orders.vo.FeeAuditVo">
         SELECT
-                qsu.username ,    -- 业务员登录账号
+        qsu.username ,    -- 业务员登录账号
         ifa.order_no as orderNo,
         io.company_id,
         io.company_name as companyName,
@@ -42,51 +42,47 @@
         suji.name as name,
         qsu.mobile as mobile,
         CASE suji.type_attr
-                WHEN 1 THEN '前线人员'
-                WHEN 2 THEN '后线人员'
-                WHEN 3 THEN '合伙人'
-                WHEN 4 THEN '工作室管理员'
-                WHEN 5 THEN '团队'
-                WHEN 6 THEN '个代'
-                WHEN 7 THEN '渠道'
-                WHEN 8 THEN '电销'
-                ELSE ''
-            END 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,
-               ioc.sum_premium as sumPremium,sd.name as deptName,ifa.create_time as createTime,
-               ifa.create_by as createBy,io.pay_time as payTime, ifa.audit_time as auditTime,
-               ifa.audit_user as auditUser, ifa.refuse,
-               ifa.is_problem, ifa.problem_reason,
-               ifa.audit_user as auditUser, ifa.refuse,
-                CASE ifa.is_problem
-                WHEN 0 THEN '否'
-                WHEN 1 THEN '是'
-                ELSE ''
-                END AS isProblem,
-                io.order_source
-                FROM ins_fee_audit ifa
-                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 qsu on qsu.mobile = io.real_quote_user_id
-                LEFT JOIN sys_user_jzg_info suji ON suji.user_id = qsu.id and suji.system_code = #{param.systemCode}
-                LEFT JOIN sys_dept sd on suji.dept_id = sd.id
-                LEFT JOIN ptl_agreement pa on io.agreement_id = pa.id
-                LEFT JOIN sys_user sua on sua.id = pa.custodian_id
-                LEFT JOIN ins_orders_costs ioc on ioc.order_no = io.id
-                LEFT JOIN ins_orders_external_policy ioep on ioep.order_no = io.id
+        WHEN 1 THEN '前线人员'
+        WHEN 2 THEN '后线人员'
+        WHEN 3 THEN '合伙人'
+        WHEN 4 THEN '工作室管理员'
+        WHEN 5 THEN '团队'
+        WHEN 6 THEN '个代'
+        WHEN 7 THEN '渠道'
+        WHEN 8 THEN '电销'
+        ELSE ''
+        END 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,
+        ioc.sum_premium as sumPremium,sd.name as deptName,ifa.create_time as createTime,
+        ifa.create_by as createBy,io.pay_time as payTime, ifa.audit_time as auditTime,
+        ifa.audit_user as auditUser, ifa.refuse,
+        ifa.is_problem, ifa.problem_reason,
+        ifa.problem_time,
+        CASE ifa.is_problem
+        WHEN 0 THEN '否'
+        WHEN 1 THEN '是'
+        ELSE ''
+        END AS isProblem,
+        io.order_source
+        FROM ins_fee_audit ifa
+        LEFT JOIN ins_orders io on ifa.order_no = io.id AND io.is_delete=0
+        LEFT JOIN ins_orders_car_info ioci on io.id = ioci.order_no AND ioci.is_delete=0
+        LEFT JOIN ins_orders_car_user_info iocui on io.id = iocui.order_no and iocui.policy_person_type = 3 AND iocui.is_delete=0
+        LEFT JOIN sys_user qsu on qsu.mobile = io.real_quote_user_id AND qsu.is_delete=0
+        LEFT JOIN sys_user_jzg_info suji ON suji.user_id = qsu.id and suji.system_code = #{param.systemCode} AND suji.is_delete=0
+        LEFT JOIN sys_dept sd on suji.dept_id = sd.id AND sd.is_delete=0
+        LEFT JOIN ptl_agreement pa on io.agreement_id = pa.id AND pa.is_delete=0
+        LEFT JOIN sys_user sua on sua.id = pa.custodian_id AND sua.is_delete=0
+        LEFT JOIN ins_orders_costs ioc on ioc.order_no = io.id AND ioc.is_delete=0
+        LEFT JOIN ins_orders_external_policy ioep on ioep.order_no = io.id AND ioep.is_delete=0
         <where>
-            <choose>
-                <when test="param.receiveUser != null and param.receiveUser != ''">
-                    and ifa.receive_user = #{param.receiveUser}
-                </when>
-                <otherwise>
-                    and ifa.receive_user is NULL
-                </otherwise>
-            </choose>
+            and ifa.is_delete=0
+            <if test="param.receiveUser != null and param.receiveUser != ''">
+                and ifa.receive_user = #{param.receiveUser}
+            </if>
             <if test="param.auditType != null">
                 and ifa.audit_type = #{param.auditType}
             </if>
@@ -167,57 +163,53 @@
     </select>
     <select id="queryList" 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,
-                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,
-                CASE suji.type_attr
-                    WHEN 1 THEN '前线人员'
-                    WHEN 2 THEN '后线人员'
-                    WHEN 3 THEN '合伙人'
-                    WHEN 4 THEN '工作室管理员'
-                    WHEN 5 THEN '团队'
-                    WHEN 6 THEN '个代'
-                    WHEN 7 THEN '渠道'
-                    WHEN 8 THEN '电销'
-                    ELSE ''
-                END AS attrType,
-               io.signing_time as signingTime,
-               io.create_time as quotationTime, sua.username as dockingPerson,
-               pa.agreement_abbreviation as agreementName,io.product_id, io.product_name as productName,
-               ioc.jq_premium as jqPremium, ioc.sy_premium as syPremium, ioc.jy_premium as jyPremium,
-               ioc.sum_premium as sumPremium,sd.name as deptName,ifa.create_time as createTime,
-               ifa.create_by as createBy,io.pay_time as payTime, ifa.audit_time as auditTime,
-               ifa.audit_user as auditUser, ifa.refuse
+        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,
+        CASE suji.type_attr
+        WHEN 1 THEN '前线人员'
+        WHEN 2 THEN '后线人员'
+        WHEN 3 THEN '合伙人'
+        WHEN 4 THEN '工作室管理员'
+        WHEN 5 THEN '团队'
+        WHEN 6 THEN '个代'
+        WHEN 7 THEN '渠道'
+        WHEN 8 THEN '电销'
+        ELSE ''
+        END AS attrType,
+        io.signing_time as signingTime,
+        io.create_time as quotationTime, sua.username as dockingPerson,
+        pa.agreement_abbreviation as agreementName,io.product_id, io.product_name as productName,
+        ioc.jq_premium as jqPremium, ioc.sy_premium as syPremium, ioc.jy_premium as jyPremium,
+        ioc.sum_premium as sumPremium,sd.name as deptName,ifa.create_time as createTime,
+        ifa.create_by as createBy,io.pay_time as payTime, ifa.audit_time as auditTime,
+        ifa.audit_user as auditUser, ifa.refuse
         FROM ins_fee_audit ifa
-        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 qsu on qsu.mobile = io.real_quote_user_id
-        LEFT JOIN sys_user_jzg_info suji ON suji.user_id = qsu.id and suji.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
-        LEFT JOIN sys_user sua on sua.id = pa.custodian_id
-        LEFT JOIN ins_orders_costs ioc on ioc.order_no = io.id
-        LEFT JOIN ins_orders_external_policy ioep on ioep.order_no = io.id
+        LEFT JOIN ins_orders io on ifa.order_no = io.id AND io.is_delete=0
+        LEFT JOIN ins_orders_car_info ioci on io.id = ioci.order_no AND ioci.is_delete=0
+        LEFT JOIN ins_orders_car_user_info iocui on io.id = iocui.order_no and iocui.policy_person_type = 3 AND iocui.is_delete=0
+        LEFT JOIN sys_user qsu on qsu.mobile = io.real_quote_user_id AND qsu.is_delete=0
+        LEFT JOIN sys_user_jzg_info suji ON suji.user_id = qsu.id and suji.system_code = #{param.systemCode} AND suji.is_delete=0
+        LEFT JOIN sys_user su on su.id = io.real_quote_user_id AND su.is_delete=0
+        LEFT JOIN sys_dept sd on suji.dept_id = sd.id AND sd.is_delete=0
+        LEFT JOIN ptl_agreement pa on io.agreement_id = pa.id AND pa.is_delete=0
+        LEFT JOIN sys_user sua on sua.id = pa.custodian_id AND sua.is_delete=0
+        LEFT JOIN ins_orders_costs ioc on ioc.order_no = io.id AND ioc.is_delete=0
+        LEFT JOIN ins_orders_external_policy ioep on ioep.order_no = io.id AND ioep.is_delete=0
         <where>
-            <choose>
-                <when test="param.receiveUser != null and param.receiveUser != ''">
-                    and ifa.receive_user = #{param.receiveUser}
-                </when>
-                <otherwise>
-                    and ifa.receive_user is NULL
-                </otherwise>
-            </choose>
+            and ifa.is_delete=0
+            <if test="param.receiveUser != null and param.receiveUser != ''">
+                and ifa.receive_user = #{param.receiveUser}
+            </if>
             <if test="param.auditType != null">
                 and ifa.audit_type = #{param.auditType}
             </if>
@@ -290,4 +282,4 @@
         </where>
         ORDER BY io.create_time desc
     </select>
-</mapper>
+</mapper>

+ 39 - 32
tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeOrdersMapper.xml

@@ -6,12 +6,11 @@
 
     <select id="getInsFeeOrdersList" resultType="com.jzg.commons.entity.po.InsFeeOrders">
         select
-            *,
-            ioci.license_no as licenseNo
+        *,
+        ioci.license_no as licenseNo
         from ins_fee_orders ifo
-        left join ins_orders_car_info ioci on ioci.order_no = ifo.order_no
-        where
-            1=1
+        left join ins_orders_car_info ioci on ioci.order_no = ifo.order_no and ioci.is_delete = 0
+        <where>
             <if test="param.distributorId != null and param.distributorId != ''">
                 and (ifo.first_distributor_id = #{param.distributorId}
                 or ifo.second_distributor_id = #{param.distributorId}
@@ -23,54 +22,62 @@
             <if test="param.createTimeStart != null and param.createTimeEnd != null">
                 and ifo.signing_time between #{param.createTimeStart} and #{param.createTimeEnd}
             </if>
+        </where>
     </select>
 
     <select id="getInsFeeOrderListByUserId" resultType="com.jzg.commons.entity.po.InsFeeOrders">
         select
-            *,
-            ioci.license_no as licenseNo
+        *,
+        ioci.license_no as licenseNo
         from
-             ins_fee_orders ifo
-        left join ins_orders_car_info ioci on ioci.order_no = ifo.order_no
-        where 1 = 1
-        <if test="param.userId != null and param.userId != ''">
-            and ifo.user_id = #{param.userId}
-        </if>
-        <if test="param.createTimeStart != null and param.createTimeEnd != null">
-            and ifo.signing_time between #{param.createTimeStart} and #{param.createTimeEnd}
-        </if>
+        ins_fee_orders ifo
+        left join ins_orders_car_info ioci on ioci.order_no = ifo.order_no and ioci.is_delete = 0
+        <where>
+            <if test="param.userId != null and param.userId != ''">
+                and ifo.user_id = #{param.userId}
+            </if>
+            <if test="param.createTimeStart != null and param.createTimeEnd != null">
+                and ifo.signing_time between #{param.createTimeStart} and #{param.createTimeEnd}
+            </if>
+        </where>
     </select>
 
-
     <select id="getInsFeeOrderListByTopReferrerIdAndUserId" resultType="com.jzg.commons.entity.po.InsFeeOrders">
         select * from ins_fee_orders ifo
-        where 1 = 1
-        and
-            ((ifo.first_distributor_id = #{userId} OR ifo.second_distributor_id = #{userId} OR ifo.third_distributor_id = #{userId})
-          AND
-            (ifo.first_distributor_id = #{topReferrerId} OR ifo.second_distributor_id = #{topReferrerId} OR ifo.third_distributor_id = #{topReferrerId}))
+        <where>
+            <if test="userId != null and userId != ''">
+                and ((ifo.first_distributor_id = #{userId} OR ifo.second_distributor_id = #{userId} OR ifo.third_distributor_id = #{userId})
+                AND
+                (ifo.first_distributor_id = #{topReferrerId} OR ifo.second_distributor_id = #{topReferrerId} OR ifo.third_distributor_id = #{topReferrerId}))
+            </if>
+        </where>
     </select>
 
     <select id="getInsFeeOrderAudit" resultType="com.jzg.commons.entity.po.InsFeeOrders">
         select ifo.*,
-               io.signing_time as signingTime
+        io.signing_time as signingTime
         from ins_fee_orders ifo
-                 left join ins_fee_audit ifa on ifa.order_no = ifo.order_no
-                 left join ins_orders io on io.id = ifo.order_no
-        where
-            (ifo.first_distributor_id = #{userId}
+        left join ins_fee_audit ifa on ifa.order_no = ifo.order_no and ifa.is_delete = 0
+        left join ins_orders io on io.id = ifo.order_no and io.is_delete = 0
+        <where>
+            <if test="userId != null and userId != ''">
+                and (ifo.first_distributor_id = #{userId}
                 or ifo.second_distributor_id = #{userId}
                 or ifo.third_distributor_id = #{userId})
+            </if>
             and ifa.audit_status = 0
+        </where>
     </select>
 
     <select id="getInsFeeOrderByOrderNo" resultType="com.jzg.commons.entity.po.InsFeeOrders">
         select
-            *
+        *
         from
-            ins_fee_orders ifo
-        where 1 = 1
-        and
-            ifo.order_no = #{orderNo}
+        ins_fee_orders ifo
+        <where>
+            <if test="orderNo != null and orderNo != ''">
+                and ifo.order_no = #{orderNo}
+            </if>
+        </where>
     </select>
 </mapper>

+ 0 - 21
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderAdjustInfoMapper.xml

@@ -4,27 +4,6 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.jzg.quotation.summary.mapper.InsOrderAdjustInfoMapper">
 
-<!--    <resultMap id="BaseResultMap" type="generator.domain.InsOrderAdjustInfo">-->
-<!--            <id property="id" column="id" jdbcType="VARCHAR"/>-->
-<!--            <result property="adjustId" column="adjust_id" jdbcType="VARCHAR"/>-->
-<!--            <result property="relatedId" column="related_id" jdbcType="VARCHAR"/>-->
-<!--            <result property="kindType" column="kind_type" jdbcType="TINYINT"/>-->
-<!--            <result property="kindCode" column="kind_code" jdbcType="VARCHAR"/>-->
-<!--            <result property="kindName" column="kind_name" jdbcType="VARCHAR"/>-->
-<!--            <result property="amount" column="amount" jdbcType="INTEGER"/>-->
-<!--            <result property="premium" column="premium" jdbcType="DECIMAL"/>-->
-<!--            <result property="quantity" column="quantity" jdbcType="INTEGER"/>-->
-<!--            <result property="type" column="type" jdbcType="TINYINT"/>-->
-<!--            <result property="adjustType" column="adjust_type" jdbcType="TINYINT"/>-->
-<!--            <result property="adjustQuantity" column="adjust_quantity" jdbcType="INTEGER"/>-->
-<!--            <result property="adjustAmount" column="adjust_amount" jdbcType="DECIMAL"/>-->
-<!--            <result property="isDelete" column="is_delete" jdbcType="TINYINT"/>-->
-<!--            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>-->
-<!--            <result property="createBy" column="create_by" jdbcType="VARCHAR"/>-->
-<!--            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>-->
-<!--            <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>-->
-<!--    </resultMap>-->
-
     <sql id="Base_Column_List">
         id,adjust_id,related_id,
         kind_type,kind_code,kind_name,

+ 7 - 23
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderAdjustMapper.xml

@@ -4,22 +4,6 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.jzg.quotation.summary.mapper.InsOrderAdjustMapper">
 
-<!--    <resultMap id="BaseResultMap" type="generator.domain.InsOrderAdjust">-->
-<!--            <id property="id" column="id" jdbcType="BIGINT"/>-->
-<!--            <result property="orderNo" column="order_no" jdbcType="BIGINT"/>-->
-<!--            <result property="licenseNo" column="license_no" jdbcType="VARCHAR"/>-->
-<!--            <result property="companyId" column="company_id" jdbcType="VARCHAR"/>-->
-<!--            <result property="companyName" column="company_name" jdbcType="VARCHAR"/>-->
-<!--            <result property="status" column="status" jdbcType="TINYINT"/>-->
-<!--            <result property="type" column="type" jdbcType="TINYINT"/>-->
-<!--            <result property="sumPremium" column="sum_premium" jdbcType="DECIMAL"/>-->
-<!--            <result property="isDelete" column="is_delete" jdbcType="TINYINT"/>-->
-<!--            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>-->
-<!--            <result property="createBy" column="create_by" jdbcType="VARCHAR"/>-->
-<!--            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>-->
-<!--            <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>-->
-<!--    </resultMap>-->
-
     <sql id="Base_Column_List">
         ioa.id,ioa.order_no as orderNo,ioa.license_no as licenseNo,
         ioa.company_name as companyName,ioa.status,ioa.company_id as companyId,
@@ -31,10 +15,10 @@
     <select id="queryPage" resultType="com.jzg.commons.entity.vo.OrderAdjustVo">
         select <include refid="Base_Column_List"/>
         FROM ins_order_adjust ioa
-        LEFT JOIN sys_user su on ioa.create_by = su.username
-        LEFT JOIN ins_orders io on ioa.order_no = io.id
+        LEFT JOIN sys_user su on ioa.create_by = su.username and su.is_delete = 0
+        LEFT JOIN ins_orders io on ioa.order_no = io.id and io.is_delete = 0
         <where>
-            ioa.is_delete = 0
+            and ioa.is_delete = 0
             <if test="param.orderNo != null and param.orderNo != ''">
                 and ioa.order_no = #{param.orderNo}
             </if>
@@ -79,9 +63,9 @@
         ELSE '未知类型'
         END AS typeStr
         FROM ins_order_adjust ioa
-        LEFT JOIN sys_user su on ioa.create_by = su.username
+        LEFT JOIN sys_user su on ioa.create_by = su.username and su.is_delete = 0
         <where>
-            ioa.is_delete = 0
+            and ioa.is_delete = 0
             <if test="param.orderNo != null and param.orderNo != ''">
                 and ioa.order_no = #{param.orderNo}
             </if>
@@ -110,11 +94,11 @@
         select <include refid="Base_Column_List"/>
         FROM ins_order_adjust ioa
         <where>
-            ioa.is_delete = 0
+            and ioa.is_delete = 0
             <if test="id != null and id != ''">
                 and ioa.id = #{id}
             </if>
         </where>
     </select>
 
-</mapper>
+</mapper>

+ 2 - 0
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderRightsMapper.xml

@@ -45,6 +45,7 @@
         SELECT <include refid="Base_Column_List"/>
         FROM ins_order_rights
         <where>
+            and del_flag = 0
             <if test="orderNo != null and orderNo != ''">
                 and order_id = #{orderNo}
             </if>
@@ -55,5 +56,6 @@
     <delete id="deleteByOrderNo" parameterType="string">
         DELETE FROM ins_order_rights
         WHERE order_id = #{orderNo}
+          and del_flag = 0
     </delete>
 </mapper>

+ 2 - 0
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderRightsPackageMapper.xml

@@ -38,6 +38,7 @@
         SELECT <include refid="Base_Column_List"/>
         FROM ins_order_rights_package
         <where>
+            and del_flag = 0
             <if test="orderNo != null and orderNo != ''">
                 and order_id = #{orderNo}
             </if>
@@ -48,5 +49,6 @@
     <delete id="deleteByOrderNo" parameterType="string">
         DELETE FROM ins_order_rights_package
         WHERE order_id = #{orderNo}
+          and del_flag = 0
     </delete>
 </mapper>

File diff suppressed because it is too large
+ 433 - 376
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml


+ 11 - 9
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersTrackMapper.xml

@@ -5,14 +5,14 @@
 <mapper namespace="com.jzg.quotation.summary.mapper.InsOrdersTrackMapper">
 
     <resultMap id="BaseResultMap" type="com.jzg.commons.entity.orders.po.InsOrdersTrack">
-            <id property="id" column="id" jdbcType="BIGINT"/>
-            <result property="orderNo" column="order_no" jdbcType="BIGINT"/>
-            <result property="companyId" column="company_id" jdbcType="VARCHAR"/>
-            <result property="licenseNo" column="license_no" jdbcType="VARCHAR"/>
-            <result property="status" column="status" jdbcType="TINYINT"/>
-            <result property="optType" column="opt_type" jdbcType="TINYINT"/>
-            <result property="optContent" column="opt_content" jdbcType="VARCHAR"/>
-            <result property="result" column="result" jdbcType="VARCHAR"/>
+        <id property="id" column="id" jdbcType="BIGINT"/>
+        <result property="orderNo" column="order_no" jdbcType="BIGINT"/>
+        <result property="companyId" column="company_id" jdbcType="VARCHAR"/>
+        <result property="licenseNo" column="license_no" jdbcType="VARCHAR"/>
+        <result property="status" column="status" jdbcType="TINYINT"/>
+        <result property="optType" column="opt_type" jdbcType="TINYINT"/>
+        <result property="optContent" column="opt_content" jdbcType="VARCHAR"/>
+        <result property="result" column="result" jdbcType="VARCHAR"/>
     </resultMap>
 
     <sql id="Base_Column_List">
@@ -23,10 +23,12 @@
         update_by,update_time,change_before,
         change_after
     </sql>
+
     <select id="queryList" resultType="com.jzg.commons.entity.vo.OrdersTrackVo">
         SELECT <include refid="Base_Column_List"/>
         FROM ins_orders_track
         <where>
+            and is_delete = 0
             <if test="param.orderNo != null and param.orderNo != ''">
                 and order_no = #{param.orderNo}
             </if>
@@ -36,4 +38,4 @@
         </where>
         order by create_time desc
     </select>
-</mapper>
+</mapper>

+ 16 - 14
tenant/insurance/quotation-summary/src/main/resources/mapper/InsTaskImagesMapper.xml

@@ -15,24 +15,26 @@
             <result property="bucketName" column="bucket_name" jdbcType="VARCHAR"/>
             <result property="previewUrl" column="preview_url" jdbcType="VARCHAR"/>
         </collection>
-
     </resultMap>
 
-
     <select id="selectByQuoteNo" resultMap="ImageMap">
         SELECT
-            t.id,
-            t.quote_no,
-            t.image_type,
-            t.image_id,
-            f.file_name,
-            f.file_type,
-            f.bucket_name
+        t.id,
+        t.quote_no,
+        t.image_type,
+        t.image_id,
+        f.file_name,
+        f.file_type,
+        f.bucket_name
         FROM
-            ins_task_images t
-                LEFT JOIN sys_upload_files f ON f.id = t.image_id
-        where t.quote_no = #{quoteNo}
+        ins_task_images t
+        LEFT JOIN sys_upload_files f ON f.id = t.image_id
+        <where>
             and t.is_delete = 0
-
+            and f.is_delete = 0
+            <if test="quoteNo != null and quoteNo != ''">
+                and t.quote_no = #{quoteNo}
+            </if>
+        </where>
     </select>
-</mapper>
+</mapper>

+ 11 - 6
tenant/insurance/quotation-summary/src/main/resources/mapper/SysQueryVehicleConfigMapper.xml

@@ -2,7 +2,6 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.jzg.quotation.summary.mapper.SysQueryVehicleConfigMapper">
 
-
     <sql id="Base_Column_List">
         id,company_id,company_name,
         url,enabled,username,
@@ -10,12 +9,18 @@
     </sql>
 
     <select id="getByType" resultType="com.jzg.commons.entity.dto.SysQueryVehicleConfigDTO">
-        select *
+        select <include refid="Base_Column_List"/>
         from sys_query_vehicle_config c
-                 left join sys_query_vehicle_url u
-                           on c.id = config_id
-        where u.type = #{type}
-          and enabled = 1
+        left join sys_query_vehicle_url u
+        on c.id = u.config_id
+        <where>
+            and c.is_delete = 0
+            and u.is_delete = 0
+            <if test="type != null">
+                and u.type = #{type}
+            </if>
+            and c.enabled = 1
+        </where>
     </select>
 
 </mapper>

+ 38 - 26
tenant/insurance/quotation-summary/src/main/resources/mapper/SysQuoteRecordMapper.xml

@@ -5,48 +5,58 @@
 <mapper namespace="com.jzg.quotation.summary.mapper.SysQuoteRecordMapper">
 
     <insert id="insertBatch">
-        INSERT INTO sys_quote_record (id, user_id, company_id, sub_order_no, license_no, action, result, status, agent, operator, create_time)
+        INSERT INTO sys_quote_record (id, user_id, company_id, sub_order_no, license_no, action, result, status, agent, operator, create_time, is_delete)
         VALUES
         <foreach collection="list" item="item" index="index" separator=",">
-            (#{item.id}, #{item.userId}, #{item.companyId}, #{item.subOrderNo}, #{item.licenseNo}, #{item.action}, #{item.result}, #{item.status}, #{item.agent}, #{item.operator}, #{item.createTime})
+            (#{item.id}, #{item.userId}, #{item.companyId}, #{item.subOrderNo}, #{item.licenseNo}, #{item.action}, #{item.result}, #{item.status}, #{item.agent}, #{item.operator}, #{item.createTime}, 0)
         </foreach>
     </insert>
 
     <select id="getQuoteRequestRecordPage" resultType="com.jzg.quotation.summary.entity.vo.QuoteDetailsVo">
         SELECT
-            eic.namesimple as company,
-            sqr.*
+        eic.name_simple as company,
+        sqr.*
         FROM
-            sys_quote_record sqr
-                LEFT JOIN esm_ins_company eic ON sqr.company_id = eic.id
-                LEFT JOIN sys_user su ON sqr.user_id = su.id
-                LEFT JOIN sys_dept sd ON su.dept_id = sd.id
-        WHERE
-            1=1
-        <if test="param.deptId != null and param.deptId!= ''">
-            AND sd.id like '${param.deptId}%'
-        </if>
+        sys_quote_record sqr
+        LEFT JOIN esm_ins_company eic ON sqr.company_id = eic.id
+        LEFT JOIN sys_user su ON sqr.user_id = su.id
+        LEFT JOIN sys_user_jzg_info suji ON suji.user_id = su.id
+        LEFT JOIN sys_dept sd ON suji.dept_id = sd.id
+        <where>
+            AND sqr.is_delete = 0
+            AND eic.is_delete = 0
+            AND su.is_delete = 0
+            AND sd.is_delete = 0
+            AND sd.is_delete = 0
 
+            <if test="param.deptId != null and param.deptId!= ''">
+                AND sd.id like '${param.deptId}%'
+            </if>
+        </where>
     </select>
 
     <select id="getQuoteRecordPage" resultType="com.jzg.quotation.summary.entity.vo.QuoteDetailsVo">
         SELECT
-            su.id,
-            su.NAME,
-            su.mobile,
-            sqr.*
+        su.id,
+        su.username,
+        su.mobile,
+        sqr.*
         FROM
-            sys_quote_record sqr
-                LEFT JOIN sys_user su ON sqr.user_id = su.id
-                LEFT JOIN sys_dept sd ON su.dept_id = sd.id
-        WHERE
-            1=1
+        sys_quote_record sqr
+        LEFT JOIN sys_user su ON sqr.user_id = su.id
+        LEFT JOIN sys_user_jzg_info suji ON suji.user_id = su.id
+        LEFT JOIN sys_dept sd ON suji.dept_id = sd.id
+        <where>
+            AND sqr.is_delete = 0
+            AND su.is_delete = 0
+            AND sd.is_delete = 0
+            AND suji.is_delete = 0
+
             <if test="param.subOrderNo!= null and param.subOrderNo!= ''">
                 AND sqr.sub_order_no = #{param.subOrderNo}
             </if>
             <if test="param.startTime != null and param.startTime!= ''">
-                AND sqr.create_time BETWEEN #{param.startTime}
-                    AND #{param.endTime}
+                AND sqr.create_time BETWEEN #{param.startTime} AND #{param.endTime}
             </if>
             <if test="param.licenseNo!= null and param.licenseNo!= ''">
                 AND sqr.license_no = #{param.licenseNo}
@@ -55,7 +65,6 @@
                 AND sqr.result = #{param.result}
             </if>
 
-
             <if test="param.deptId!= null and param.deptId!= ''">
                 <if test="param.operator != null and param.operator != ''">
                     AND (sd.id like '${param.deptId}%' or sqr.operator = #{param.operator} or su.name = #{param.operator})
@@ -67,9 +76,11 @@
             <if test="param.agent != null and param.agent!= ''">
                 AND sqr.user_id = #{param.agent}
             </if>
+        </where>
         ORDER BY sqr.create_time DESC
     </select>
 
+    <!-- 备注:以下sql语句还有表不存在的问题 -->
     <select id="getQuoteDetails" resultType="com.jzg.quotation.summary.entity.vo.QuoteDetailsVo">
         WITH day_all_num AS (
         SELECT
@@ -226,6 +237,7 @@
         su.mobile
     </select>
 
+    <!-- 备注:以下sql语句还有表不存在的问题 -->
     <select id="getQuoteRatio" resultType="BigDecimal">
         WITH
             day_all_order AS (
@@ -278,4 +290,4 @@
             su.NAME,
             su.mobile
     </select>
-</mapper>
+</mapper>

+ 67 - 58
tenant/insurance/quotation-summary/src/main/resources/mapper/SysQuoteUserConfigAppendMapper.xml

@@ -6,37 +6,46 @@
 
     <select id="getAppendUserQuote" resultType="com.jzg.quotation.summary.entity.vo.QuoteDetailsVo">
         SELECT
-            eic.namesimple as company,
-            squca.id,
-            sd.name as dept_name,
-            sd.id as dept_id,
-            su.name,
-            su.mobile,
-            squca.*
+        eic.name_simple as company,
+        squca.id,
+        sd.name as dept_name,
+        sd.id as dept_id,
+        su.username,
+        su.mobile,
+        squca.*
         FROM
-            sys_quote_user_config_append squca
-                LEFT JOIN sys_user su ON squca.user_id = su.id
-                LEFT JOIN sys_dept sd ON su.dept_id = sd.id
-                left join esm_ins_company eic on squca.company_id = eic.id
-        WHERE
-            1=1
-        <if test="param.companyId!= null and param.companyId!= ''">
-            AND squca.company_id = #{param.companyId}
-        </if>
-        <if test="param.startTime != null and param.startTime!= ''">
-            AND squca.create_time &gt;= #{param.startTime}
-            AND squca.create_time &lt;= #{param.endTime}
-        </if>
-        <if test="param.createBy != null and param.createBy!= ''">
-            AND squca.create_by = #{param.createBy}
-        </if>
-        <if test="param.agent != null and param.agent!= ''">
-            AND (squca.user_id = #{param.agent} or su.`name` = #{param.agent})
-        </if>
+        sys_quote_user_config_append squca
+        LEFT JOIN sys_user su ON squca.user_id = su.id
+        LEFT JOIN sys_user_jzg_info suji ON suji.user_id = su.id
+        LEFT JOIN sys_dept sd ON suji.dept_id = sd.id
+        LEFT JOIN esm_ins_company eic ON squca.company_id = eic.id
+        <where>
+            AND squca.is_delete = 0
+            AND su.is_delete = 0
+            AND sd.is_delete = 0
+            AND eic.is_delete = 0
+            AND suji.is_delete = 0
+            <if test="param.companyId!= null and param.companyId!= ''">
+                AND squca.company_id = #{param.companyId}
+            </if>
+            <if test="param.startTime != null and param.startTime!= ''">
+                AND squca.create_time &gt;= #{param.startTime}
+            </if>
+            <if test="param.endTime != null and param.endTime!= ''">
+                AND squca.create_time &lt;= #{param.endTime}
+            </if>
+            <if test="param.createBy != null and param.createBy!= ''">
+                AND squca.create_by = #{param.createBy}
+            </if>
+            <if test="param.agent != null and param.agent!= ''">
+                AND (squca.user_id = #{param.agent} OR su.`name` = #{param.agent})
+            </if>
+        </where>
         ORDER BY
-            squca.create_time DESC
+        squca.create_time DESC
     </select>
 
+    <!-- 备注:以下sql语句还有表不存在的问题 -->
     <select id="getAppendUserQuoteInfo" resultType="com.jzg.quotation.summary.entity.vo.QuoteDetailsVo">
         SELECT
             squca.*,
@@ -62,42 +71,42 @@
                   AND orderstatus = 3
                   AND DATE(create_time) = CURRENT_DATE
             ) jrcb ON 1 = 1
-                LEFT JOIN (
-                -- 今日已报价
-                SELECT
-                    COUNT(*) AS numCount
-                FROM
-                    sys_quote_record sqr
-                WHERE
-                    user_id = #{userId}
-                  AND sqr.company_id = #{companyId}
-                  AND DATE(create_time) = CURRENT_DATE
+            LEFT JOIN (
+            -- 今日已报价
+            SELECT
+            COUNT(*) AS numCount
+            FROM
+            sys_quote_record sqr
+            WHERE
+            user_id = #{userId}
+            AND sqr.company_id = #{companyId}
+            AND DATE(create_time) = CURRENT_DATE
             ) jrbj ON 1 = 1
-                LEFT JOIN (
-                -- 今日已报价单的订单号
-                SELECT
-                    COUNT(*) AS dayAllOrder
-                FROM (
-                         SELECT
-                             sub_order_no
-                         FROM
-                             sys_quote_record sqr
-                         WHERE
-                             user_id = #{userId}
-                           AND sqr.company_id = #{companyId}
-                           AND DATE(create_time) = CURRENT_DATE
-                         GROUP BY
-                             sub_order_no
-                     ) grouped_sub_orders
+            LEFT JOIN (
+            -- 今日已报价单的订单号
+            SELECT
+            COUNT(*) AS dayAllOrder
+            FROM (
+            SELECT
+            sub_order_no
+            FROM
+            sys_quote_record sqr
+            WHERE
+            user_id = #{userId}
+            AND sqr.company_id = #{companyId}
+            AND DATE(create_time) = CURRENT_DATE
+            GROUP BY
+            sub_order_no
+            ) grouped_sub_orders
             ) jrbjdd ON 1 = 1
-                left join sys_user su on squca.user_id = su.id
-                left join sys_dept sd on su.dept_id = sd.id
-                left join esm_ins_company eic on eic.id = squca.company_id
+            left join sys_user su on squca.user_id = su.id
+            left join sys_dept sd on su.dept_id = sd.id
+            left join esm_ins_company eic on eic.id = squca.company_id
         WHERE
             squca.user_id = #{userId}
           AND squca.company_id = #{companyId}
           AND DATE(squca.create_time) = CURRENT_DATE
-        AND squca.id = #{id}
+          AND squca.id = #{id}
     </select>
 
-</mapper>
+</mapper>

+ 19 - 9
tenant/insurance/quotation-summary/src/main/resources/mapper/SysQuoteUserMapper.xml

@@ -5,10 +5,10 @@
 <mapper namespace="com.jzg.quotation.summary.mapper.SysQuoteUserMapper">
 
     <insert id="insertBatch">
-        INSERT INTO sys_quote_user (id, config_id, user_id)
+        INSERT INTO sys_quote_user (id, config_id, user_id, is_delete)
         VALUES
         <foreach collection="list" item="item" index="index" separator=",">
-            (#{item.id}, #{item.configId}, #{item.userId})
+            (#{item.id}, #{item.configId}, #{item.userId}, 0)
         </foreach>
     </insert>
 
@@ -16,14 +16,24 @@
     <select id="getQuoteUserConfig" resultType="com.jzg.quotation.summary.entity.po.SysQuoteConfig">
         select sqc.*
         from sys_quote_config sqc
-        where is_enabled = 1
-          and authorize = 0
+        <where>
+            and sqc.is_delete = 0
+            and sqc.is_enabled = 1
+            and sqc.authorize = 0
+        </where>
         UNION
         select sqc.*
         from sys_quote_config sqc
-                 left join sys_quote_user squ on squ.config_id = sqc.id
-        where is_enabled = 1
-          and authorize = 1
-          and squ.user_id = #{userId};
+        left join sys_quote_user squ on squ.config_id = sqc.id
+        <where>
+            and sqc.is_delete = 0
+            and squ.is_delete = 0
+            and sqc.is_enabled = 1
+            and sqc.authorize = 1
+            <if test="userId != null">
+                and squ.user_id = #{userId}
+            </if>
+        </where>
     </select>
-</mapper>
+
+</mapper>

+ 1 - 0
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/entity/request/YangGuangSubmitRequest.java

@@ -8,6 +8,7 @@ import com.jzg.commons.entity.orders.po.InsOrdersCarInfo;
 import com.jzg.commons.entity.orders.po.InsOrdersCarUserInfo;
 import com.jzg.commons.entity.orders.po.InsOrdersCosts;
 import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingVo;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.yangguang.api.entity.YangGuangConfigureParameters;
 import com.jzg.quotation.yangguang.api.entity.po.YangGuangApiOrder;
 import lombok.Data;

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

@@ -29,7 +29,7 @@ public class YangGuangApiOrderServiceImpl implements YangGuangApiOrderService {
         yangGuangApiOrder.setOrdersNo(quoteVo.getOrder().getOrdersNo());
         yangGuangApiOrder.setProductsCode(quoteVo.getProductId());
         List<YangGuangAccuracyCalculateResponse.PtptNonVehicleProductInformationList> list = yangGuangAccuracyCalculateResponse.getPtptNonVehicleProductInformationList();
-        yangGuangApiOrder.setCrossInsurance(list.toString());
+        yangGuangApiOrder.setCrossInsurance(JSON.toJSONString(list));
         yangGuangApiOrder.setInfotransNo(yangGuangAccuracyCalculateResponse.getInfotransNo());
         yangGuangApiOrderRepository.save(yangGuangApiOrder);
     }

+ 1 - 1
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerCacheComponent.java

@@ -137,7 +137,7 @@ public class ZhongAnCrawlerCacheComponent {
             String firstUrl = "http://zhongan.bjhfbx.cn/subao-proxy-customer/api/redirectToCoopUserProductExclusivePage";
             URI uri1 = new URIBuilder(firstUrl)
                     .addParameter("coopUserId", zhongAnId)
-                    .addParameter("productId", "10805")
+                    .addParameter("productId", productId)
                     .addParameter("isOpenByPC", "N")
                     .addParameter("promotionScene", "16")
                     .addParameter("bizContent", "")

+ 0 - 3
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerRequestComponent.java

@@ -46,9 +46,6 @@ public class ZhongAnCrawlerRequestComponent {
 
     private final ZhongAnCrawlerCacheComponent zhongAnCrawlerCacheComponent;
 
-    @Value("${zhongAn.id}")
-    private String zhongAnId;
-
     /**
      * 登录
      *

+ 4 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/ZhongAnCrawlerConfigureParameters.java

@@ -21,4 +21,8 @@ public class ZhongAnCrawlerConfigureParameters implements ConfigureParameters {
     private String flowId;
 
     private String flag = "0";
+
+    private String username;
+
+    private String productId;
 }

+ 38 - 37
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java

@@ -65,12 +65,6 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
 
     private final ZhongAnCrawlerCacheComponent zhongAnCrawlerCacheComponent;
 
-    @Value("${zhongAn.id}")
-    private String zhongAnId;
-
-    @Value("${zhongAn.productId}")
-    private String productId;
-
     private final PlatformClient platformClient;
 
     @Autowired
@@ -86,23 +80,23 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
     private static final String FLOWID = "flowId";
     private static final String ZHONGAN_COOKIE = "zhongan:cookie:";
 
-    public LoginResult login(String zhongAnId, String productId) {
+    public LoginResult login(ZhongAnCrawlerConfigureParameters parameters) {
         // 先从缓存取
-        Map<Object, Object> cacheMap = redissonClient.getMap(ZHONGAN_COOKIE + zhongAnId);
+        Map<Object, Object> cacheMap = redissonClient.getMap(ZHONGAN_COOKIE + parameters.getUsername());
         if (cacheMap != null && !cacheMap.isEmpty()) {
             String zaLoginCookieKey = (String) cacheMap.get(COOKIE);
             String flowId = (String) cacheMap.get(FLOWID);
 
-            System.out.println("[" + zhongAnId + "] 从 Redisson 缓存读取登录信息");
+            System.out.println("[" + parameters.getUsername() + "] 从 Redisson 缓存读取登录信息");
             return new LoginResult(200, "缓存登录成功", zaLoginCookieKey, flowId);
         }
 
         // 缓存没有 执行登录
-        LoginResult result = zhongAnCrawlerCacheComponent.loginCookieCache(zhongAnId, productId);
+        LoginResult result = zhongAnCrawlerCacheComponent.loginCookieCache( parameters.getUsername(),  parameters.getProductId());
 
         // 登录成功 存缓存
         if (result.getCode() == 200) {
-            zhongAnCrawlerCacheComponent.cacheCookie(result.getZaLoginCookieKey(), result.getFlowId(), zhongAnId);
+            zhongAnCrawlerCacheComponent.cacheCookie(result.getZaLoginCookieKey(), result.getFlowId(),  parameters.getUsername());
         }
 
         return result;
@@ -111,18 +105,18 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         // 先从缓存取
-        Map<Object, Object> cacheMap = redissonClient.getMap(ZHONGAN_COOKIE + zhongAnId);
+        Map<Object, Object> cacheMap = redissonClient.getMap(ZHONGAN_COOKIE + detectLoginRequest.getUsername());
         if (cacheMap != null && !cacheMap.isEmpty()) {
-            System.out.println("[" + zhongAnId + "] 从 Redisson 缓存读取登录信息");
+            System.out.println("[" + detectLoginRequest.getUsername() + "] 从 Redisson 缓存读取登录信息");
             return true;
         }
 
         // 缓存没有 执行登录
-        LoginResult result = zhongAnCrawlerCacheComponent.loginCookieCache(zhongAnId, productId);
+        LoginResult result = zhongAnCrawlerCacheComponent.loginCookieCache(detectLoginRequest.getUsername(), detectLoginRequest.getProductId());
 
         // 登录成功 存缓存
         if (result.getCode() == 200) {
-            zhongAnCrawlerCacheComponent.cacheCookie(result.getZaLoginCookieKey(), result.getFlowId(), zhongAnId);
+            zhongAnCrawlerCacheComponent.cacheCookie(result.getZaLoginCookieKey(), result.getFlowId(), detectLoginRequest.getProductId());
         }
         return result.getCode() == 200;
     }
@@ -136,18 +130,19 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
      */
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) {
+        AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
+        //获取配置信息
+        ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
         // 检查登录
-        login(zhongAnId, productId);
+        login(parameters);
+        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(parameters.getUsername());
+
         zhongAnCrawlerCacheComponent.setCache(quoteVo.getOwnersInfo().getIdentifyNumber(), quoteVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.IDENTIFY_NUMBER);
         CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
         zhongAnCrawlerCacheComponent.setCache(carInfoVo.getLicenseNo(), quoteVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.LICENSE);
-        AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
-        //获取配置信息
-        ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
-        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
         String flowId = parameters.getFlowId();
         if (StringUtils.isEmpty(flowId)) {
-            parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(zhongAnId));
+            parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(parameters.getUsername()));
         }
         // 查询归属信息
         ZhongAnCrawlerQueryInitInfoRequest queryInitInfoRequest = new ZhongAnCrawlerQueryInitInfoRequest(parameters.getFlowId());
@@ -323,14 +318,14 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
      */
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) throws Exception {
-        // 检查登录
-        login(zhongAnId, productId);
         AttributionInformationVo attributionInformationVo = underwritingVo.getOrder().getAttributionInformationVo();
         ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
-        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
+        // 检查登录
+        login(parameters);
+        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(parameters.getUsername());
         String flowId = parameters.getFlowId();
         if (StringUtils.isEmpty(flowId)) {
-            parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(zhongAnId));
+            parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(parameters.getUsername()));
         }
         ZhongAnCrawlerOrder zhongAnCrawlerOrder = zhongAnCrawlerOrderService.findByOrdersNo(underwritingVo.getOrder().getOrdersNo());
         ZhongAnCrawlerMarkRequest markRequest = new ZhongAnCrawlerMarkRequest(parameters, zhongAnCrawlerOrder.getOrderNo());
@@ -360,12 +355,14 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
      */
     @Override
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) {
+        //获取配置信息
+        AttributionInformationVo attributionInformationVo = paymentLinkVo.getOrder().getAttributionInformationVo();
+        ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
         // 检查登录
-        login(zhongAnId, productId);
+        login(parameters);
         PaymentLinkResultsVo paymentLinkResultsVo = new PaymentLinkResultsVo();
         OrderBase orderBase = paymentLinkVo.getOrder();
-        //获取配置信息
-        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
+        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(parameters.getUsername());
 
         ZhongAnCrawlerOrder zhongAnCrawlerOrder = zhongAnCrawlerOrderService.findByOrdersNo(orderBase.getOrdersNo());
 
@@ -390,16 +387,17 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
      */
     @Override
     public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
-        // 检查登录
-        login(zhongAnId, productId);
         OrderBase orderBase = insuranceUploadImageVo.getOrder();
         AttributionInformationVo attributionInformationVo = orderBase.getAttributionInformationVo();
         //获取配置信息
         ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
-        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
+        // 检查登录
+        login(parameters);
+
+        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(parameters.getUsername());
         String flowId = parameters.getFlowId();
         if (StringUtils.isEmpty(flowId)) {
-            parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(zhongAnId));
+            parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(parameters.getUsername()));
         }
         ZhongAnCrawlerOrder zhongAnCrawlerOrder = zhongAnCrawlerOrderService.findByOrdersNo(orderBase.getOrdersNo());
         for (InsuranceImageVo insuranceImageVo : insuranceUploadImageVo.getImageVoList()) {
@@ -472,11 +470,14 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
      */
     @Override
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo downloadPolicyVo) {
+        AttributionInformationVo attributionInformationVo = downloadPolicyVo.getOrder().getAttributionInformationVo();
+        //获取配置信息
+        ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
         // 检查登录
-        login(zhongAnId, productId);
+        login(parameters);
         OrderBase orderBase = downloadPolicyVo.getOrder();
         //获取配置信息
-        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
+        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(parameters.getUsername());
 
         ZhongAnCrawlerOrder zhongAnCrawlerOrder = zhongAnCrawlerOrderService.findByOrdersNo(orderBase.getOrdersNo());
         String orderNo = zhongAnCrawlerOrder.getOrderNo();
@@ -527,11 +528,11 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         AttributionInformationVo attributionInformationVo = orderStatusVo.getOrder().getAttributionInformationVo();
         //获取配置信息
         ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
-        login(zhongAnId, productId);
-        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
+        login(parameters);
+        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(parameters.getUsername());
         String flowId = parameters.getFlowId();
         if (StringUtils.isEmpty(flowId)) {
-            parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(zhongAnId));
+            parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(parameters.getUsername()));
         }
         ZhongAnCrawlerOrder zhongAnCrawlerOrder = zhongAnCrawlerOrderService.findByOrdersNo(orderStatusVo.getOrder().getOrdersNo());
         // 车牌号

+ 11 - 2
tenant/organization/src/main/java/com/jzg/organization/client/InsFeeOrdersClient.java

@@ -1,8 +1,12 @@
 package com.jzg.organization.client;
 
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.finance.vo.BatchModifyVo;
 import com.jzg.commons.entity.po.InsFeeOrders;
+import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
@@ -15,10 +19,15 @@ public interface InsFeeOrdersClient {
 
     /**
      * 订单费用列表通过订单号查询
-     * @param orderNo
-     * @return
+     * @param orderNo 订单号
+     * @return List<InsFeeOrders>
      */
     @PostMapping("/insFeeOrder/getInsFeeOrderByOrderNo")
     List<InsFeeOrders> getInsFeeOrderByOrderNo(@RequestParam String orderNo);
 
+
+    @PostMapping("/supplementOrder/updateOrdersBatch")
+    @Operation(summary = "车险报价批量修改联系人等信息")
+    HttpResult<String> updateOrdersBatch(@RequestBody BatchModifyVo batchModifyVo);
+
 }

+ 26 - 0
tenant/organization/src/main/java/com/jzg/organization/client/InsOrdersClient.java

@@ -0,0 +1,26 @@
+package com.jzg.organization.client;
+
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * 订单接口
+ */
+@FeignClient(name = "quotation-summary")
+public interface InsOrdersClient {
+
+    /**
+     * 订单列表通过订单号查询
+     * @param id 订单号
+     * @return List<InsFeeOrders>
+     */
+    @PostMapping("/supplementOrder/selectInsOrdersById/{id}")
+    HttpResult<InsOrdersVo> selectById(@PathVariable String id);
+
+
+}

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

@@ -37,7 +37,7 @@ public class AccountCardController extends BaseController {
      */
     @PostMapping("/cardList")
     @Operation(summary = "账户列表分页")
-    public HttpResult cardList(@RequestBody AccountCardParam param){
+    public HttpResult<Page<AccountCardVo>> cardList(@RequestBody AccountCardParam param){
         Page<AccountCardVo> result = accountCardService.queryPage(param);
         return HttpResult.ok(result);
     }

+ 24 - 9
tenant/organization/src/main/java/com/jzg/organization/controller/AmountAuditingController.java

@@ -1,5 +1,6 @@
 package com.jzg.organization.controller;
 
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
@@ -11,6 +12,8 @@ import com.jzg.commons.entity.vo.AmountAuditVo;
 import com.jzg.organization.service.SysAmountAuditingService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -20,17 +23,21 @@ import java.math.BigDecimal;
 @RestController
 @RequestMapping("/amountAuditing")
 public class AmountAuditingController extends BaseController {
+    private static final Logger log = LoggerFactory.getLogger(AmountAuditingController.class);
 
     @Autowired
     private SysAmountAuditingService sysAmountAuditingService;
+    @Autowired
+    private BaseController baseController;
 
     /**
      * 提现申请列表分页
-     * @return
+     * @return HttpResult<Page<AmountAuditVo>> 提现申请
      */
     @PostMapping("/auditList")
     @Operation(summary = "提现申请列表分页")
-    public HttpResult auditList(@RequestBody AmountAuditParam param){
+    public HttpResult<Page<AmountAuditVo>> auditList(@RequestBody AmountAuditParam param){
+        log.info("应付账款-提现申请-查询:param=[{}]", JSONUtil.toJsonStr(param));
         Page<AmountAuditVo> result = sysAmountAuditingService.queryPage(param);
         return HttpResult.ok(result);
     }
@@ -68,8 +75,10 @@ public class AmountAuditingController extends BaseController {
      */
     @PostMapping("/auditReceive")
     @Operation(summary = "领取提现申请")
-    public HttpResult auditReceive(@RequestParam("id") String id){
-        sysAmountAuditingService.auditReceive(id);
+    public HttpResult<String> auditReceive(@RequestParam("id") String id){
+        String userName = baseController.getUserName();
+        log.info("用户[{}]领取序号为[{}]的体现申请", userName, id);
+        sysAmountAuditingService.auditReceive(id, userName);
         return HttpResult.ok();
     }
 
@@ -86,13 +95,13 @@ public class AmountAuditingController extends BaseController {
 
     /**
      * 提现付款
-     * @return
+     *
+     * @return HttpResult<String>
      */
     @PostMapping("/verifyAmount")
     @Operation(summary = "提现付款")
-    public HttpResult verifyAmount(@RequestBody AmountAuditEditParam param){
-        sysAmountAuditingService.verifyAmount(param);
-        return HttpResult.ok("提现审核成功");
+    public HttpResult<String> verifyAmount(@RequestBody AmountAuditEditParam param){
+        return sysAmountAuditingService.verifyAmount(param);
     }
 
     /**
@@ -108,7 +117,7 @@ public class AmountAuditingController extends BaseController {
 
     @PostMapping("/myPayment")
     @Operation(summary = "我的付款")
-    public HttpResult myPayment(@RequestBody AmountAuditParam param){
+    public HttpResult<Page<AmountAuditVo>> myPayment(@RequestBody AmountAuditParam param){
         Page<AmountAuditVo> amountAuditVoPage = sysAmountAuditingService.myPayment(param);
         return HttpResult.ok(amountAuditVoPage);
     }
@@ -120,6 +129,12 @@ public class AmountAuditingController extends BaseController {
         return HttpResult.ok(b.toString());
     }
 
+    /**
+     * 业务员提交提现申请
+     *
+     * @author lipf
+     * @date 2026/5/29 16:11
+     */
     @PostMapping("/applyWithdraw")
     @Operation(summary = "申请提现")
     public HttpResult applyWithdraw(@RequestBody ApplyWithdrawParam applyWithdrawParam){

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

@@ -38,7 +38,7 @@ public class PtlAgreementCostController {
     @OperatorTrajectory(moduleName = "报价配置/费用管理/新增费用",OperationDict = OperationTypeEnum.IN_AGREEMENT,mapperClass = PtlAgreementCostMapper.class,entityClass = PtlAgreemenCostAdd.class)
     @Operation(summary = "协议费用管理新增")
     @PostMapping("save")
-    public HttpResult add(@RequestBody @Valid PtlAgreemenCostAdd ptlAgreemenCostAdd){
+    public HttpResult<String> add(@RequestBody @Valid PtlAgreemenCostAdd ptlAgreemenCostAdd){
         return ptlAgreementCostService.save(ptlAgreemenCostAdd);
     }
 

+ 191 - 27
tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java

@@ -1,10 +1,12 @@
 package com.jzg.organization.controller;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 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.finance.dto.CompanySuperviseSettlementReportDto;
 import com.jzg.commons.entity.finance.dto.ExportSuperviseSettlementExcelDto;
 import com.jzg.commons.entity.finance.dto.ReceiverSettlementReportDto;
 import com.jzg.commons.entity.finance.po.*;
@@ -59,7 +61,7 @@ public class ReceivableController {
     @PostMapping("getUnauditedOrder")
     @Operation(summary = "获取未审核的订单")
     public HttpResult getUnauditedOrder(@RequestBody ReceivableQueryVo receivableQueryVo){
-        if (Objects.isNull(receivableQueryVo.getAgreementType()) || receivableQueryVo.getAgreementType().isEmpty()) {
+        if (Objects.isNull(receivableQueryVo.getAgreementType()) || StrUtil.isBlank(receivableQueryVo.getAgreementType())) {
             receivableQueryVo.setAgreementType("1");
         }
         InsPlyIncome auditedOrder  = receivableService.getUnauditedOrder(receivableQueryVo);
@@ -72,8 +74,9 @@ public class ReceivableController {
 
     @PostMapping("addReceivable")
     @Operation(summary = "添加应收记录")
-    public HttpResult addReceivable(@RequestSingleParam("orderNos") List<String> orderNos){
-        boolean result = receivableService.saveAuditedOrder(orderNos);
+    public HttpResult<String> addReceivable(@RequestBody AddReceivableVo addReceivableVo){
+        log.info("添加应收记录:addReceivableVo=[{}]", JSONUtil.toJsonStr(addReceivableVo));
+        boolean result = receivableService.saveAuditedOrder(addReceivableVo);
         return result ? HttpResult.ok("添加成功") : HttpResult.error("添加失败");
     }
 
@@ -93,6 +96,54 @@ public class ReceivableController {
         return HttpResult.ok(new InsPlyIncomeVO(data, receivablePageIds));
     }
 
+    @PostMapping("getCommissionReceivableTotalAmount")
+    @Operation(summary = "获取私有协议手续费应收费用总金额")
+    public HttpResult<BigDecimal> getCommissionReceivableTotalAmount(@RequestBody ReceivableQueryVo receivableQueryVo){
+        if (StrUtil.isBlank(receivableQueryVo.getQueryType())){
+            receivableQueryVo.setQueryType("2");
+        }
+        // 协议类型 1 平台协议  2 私有协议
+        if (StrUtil.isBlank(receivableQueryVo.getAgreementType())){
+            receivableQueryVo.setAgreementType("2");
+        }
+        HttpResult<Page<InsPlyIncome>> ok = HttpResult.ok(receivableService.getReceivablePage(receivableQueryVo));
+        Page<InsPlyIncome> data = ok.getData();
+        if (null == data || CollUtil.isEmpty(data.getRecords())){
+            return HttpResult.ok(BigDecimal.ZERO);
+        }
+        BigDecimal reduce = data.getRecords().stream().map(income -> StrUtil.isNotBlank(income.getSuperviseCostsPremiums()) ? new BigDecimal(income.getSuperviseCostsPremiums()) : BigDecimal.ZERO)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        return HttpResult.ok(reduce);
+    }
+
+    @PostMapping("/exportTemplateReceivableList")
+    @Operation(summary = "导出模板私有协议手续费")
+    public HttpResult<String> exportTemplateReceivableList(){
+        String receivablePageIds = receivableService.exportTemplateReceivableList();
+        return HttpResult.ok(receivablePageIds);
+    }
+
+    @PostMapping("/importReceivableListUpdate")
+    @Operation(summary = "导入私有协议手续费修改")
+    public HttpResult<ImportUpdateExcelResultVo> importReceivableListUpdate(@RequestParam("file") MultipartFile file){
+        ImportUpdateExcelResultVo importExcelResultVo = receivableService.importReceivableListUpdate(file);
+        return HttpResult.ok(importExcelResultVo);
+    }
+
+    @PostMapping("/exportAccountsReceivableInvoiceTemplate")
+    @Operation(summary = "导出应收开票模板")
+    public HttpResult<String> exportAccountsReceivableInvoiceTemplate(){
+        String receivablePageIds = receivableService.exportAccountsReceivableInvoiceTemplate();
+        return HttpResult.ok(receivablePageIds);
+    }
+
+    @PostMapping("/importAccountsReceivableInvoice")
+    @Operation(summary = "导入应收开票数据")
+    public HttpResult<ImportUpdateExcelResultVo> importAccountsReceivableInvoice(@RequestParam("file") MultipartFile file){
+        ImportUpdateExcelResultVo importExcelResultVo = receivableService.importAccountsReceivableInvoice(file);
+        return HttpResult.ok(importExcelResultVo);
+    }
+
     /**
      *
      * @author lipf
@@ -108,8 +159,12 @@ public class ReceivableController {
     @PostMapping("getOtherReceivableList")
     @Operation(summary = "获取私有协议跟单费列表")
     public HttpResult<InsPlyIncomeVO> getOtherReceivableList(@RequestBody ReceivableQueryVo receivableQueryVo){
-        receivableQueryVo.setQueryType("2");
-        receivableQueryVo.setAgreementType("2");
+        if (StrUtil.isBlank(receivableQueryVo.getQueryType())){
+            receivableQueryVo.setQueryType("2");
+        }
+        if (StrUtil.isBlank(receivableQueryVo.getAgreementType())) {
+            receivableQueryVo.setAgreementType("2");
+        }
         //return HttpResult.ok(receivableService.getReceivablePage(receivableQueryVo));
         HttpResult<Page<InsPlyIncome>> ok = HttpResult.ok(receivableService.getReceivablePage(receivableQueryVo));
         Page<InsPlyIncome> data = ok.getData();
@@ -117,6 +172,25 @@ public class ReceivableController {
         return HttpResult.ok(new InsPlyIncomeVO(data, receivablePageIds));
     }
 
+    @PostMapping("getOtherReceivableTotalAmount")
+    @Operation(summary = "获取私有协议跟单费应收费用总金额")
+    public HttpResult<BigDecimal> getOtherReceivableTotalAmount(@RequestBody ReceivableQueryVo receivableQueryVo){
+        if (StrUtil.isBlank(receivableQueryVo.getQueryType())){
+            receivableQueryVo.setQueryType("2");
+        }
+        if (StrUtil.isBlank(receivableQueryVo.getAgreementType())) {
+            receivableQueryVo.setAgreementType("2");
+        }
+        HttpResult<Page<InsPlyIncome>> ok = HttpResult.ok(receivableService.getReceivablePage(receivableQueryVo));
+        Page<InsPlyIncome> data = ok.getData();
+        if (null == data || CollUtil.isEmpty(data.getRecords())){
+            return HttpResult.ok(BigDecimal.ZERO);
+        }
+        BigDecimal reduce = data.getRecords().stream().map(income -> StrUtil.isNotBlank(income.getOtherCostsPremiums()) ? new BigDecimal(income.getOtherCostsPremiums()) : BigDecimal.ZERO)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        return HttpResult.ok(reduce);
+    }
+
     @PostMapping("getJyCommissionReceivableList")
     @Operation(summary = "获取私有协议驾意险手续费列表")
     public HttpResult<InsPlyIncomeVO> getJyCommissionReceivableList(@RequestBody ReceivableQueryVo receivableQueryVo){
@@ -139,18 +213,12 @@ public class ReceivableController {
         return HttpResult.ok(new InsPlyIncomeVO(data, receivablePageIds));
     }
 
-    //@PostMapping("getSelectedReceivableList")
-    @Operation(summary = "获取选中应收列表")
-    public HttpResult getSelectedReceivableList(@RequestBody ReceivableQueryVo receivableQueryVo){
-        return HttpResult.ok(receivableService.getReceivableList(receivableQueryVo));
-    }
-
     @PostMapping("commissionInvoicing")
     @Operation(summary = "手续费开票")
     public HttpResult<InvoiceingResult> commissionInvoicing(@RequestBody InsPlyIncomeInvoiceVO invoicingVo){
         InvoiceingResult result = receivableService.addInvoicing(invoicingVo);
         if (Objects.nonNull(result)){
-            return HttpResult.ok("开票成功,发票号是" + result.getInvoiceId() ,result);
+            return HttpResult.ok("开票成功,发票编号是" + result.getInvoiceId() ,result);
         }
         return HttpResult.error("开票失败");
     }
@@ -178,7 +246,7 @@ public class ReceivableController {
             return HttpResult.ok("无占用");
         }else{
             List<String> invoiceIds = receivableService.queryIncomeBindInvoice(invoicingVo);
-            return HttpResult.error("订单已开票。发票序号是"+ invoiceIds.toString());
+            return HttpResult.error("订单已开票。发票编号是"+ invoiceIds.toString());
         }
     }
 
@@ -205,6 +273,19 @@ public class ReceivableController {
         return HttpResult.ok(receivableService.getReceivableCompany(invoicingVo));
     }
 
+    /**
+     * 查询应收订单关联的所有对接人信息
+     *
+     * @author lipf
+     * @date 2026/5/30 10:09
+     */
+    @PostMapping("queryReceivableContact")
+    @Operation(summary = "获取对接人列表")
+    public HttpResult<List<ContractVO>> queryReceivableContact(@RequestBody InvoicingVo invoicingVo){
+        return receivableService.queryReceivableContact(invoicingVo);
+    }
+
+
     @PostMapping("settlement")
     @Operation(summary = "私有协议结算")
     public HttpResult<String> settlement(@RequestBody SettlementVo settlementVo){
@@ -278,7 +359,7 @@ public class ReceivableController {
 
     @PostMapping("/getPlatFormReceivableList")
     @Operation(summary = "获取平台协议列表")
-    public HttpResult<Page<InsPlyIncome>> getPlatFormReceivableList(@RequestBody ReceivableQueryVo receivableQueryVo){
+    public HttpResult<InsPlyIncomeVO> getPlatFormReceivableList(@RequestBody ReceivableQueryVo receivableQueryVo){
         if (StrUtil.isBlank(receivableQueryVo.getQueryType())){
             receivableQueryVo.setQueryType("1");
         }
@@ -286,7 +367,28 @@ public class ReceivableController {
         if (StrUtil.isBlank(receivableQueryVo.getAgreementType())){
             receivableQueryVo.setAgreementType("1");
         }
-        return HttpResult.ok(receivableService.getPlatFormReceivableList(receivableQueryVo));
+        Page<InsPlyIncome> data = receivableService.getPlatFormReceivableList(receivableQueryVo);
+        List<InsPlyIncomeOrder> receivablePageIds = receivableService.getReceivablePageIds(receivableQueryVo);
+        return HttpResult.ok(new InsPlyIncomeVO(data, receivablePageIds));
+    }
+
+    @PostMapping("/getPlatFormReceivableTotalAmount")
+    @Operation(summary = "获取平台协议总金额")
+    public HttpResult<BigDecimal> getPlatFormReceivableTotalAmount(@RequestBody ReceivableQueryVo receivableQueryVo){
+        if (StrUtil.isBlank(receivableQueryVo.getQueryType())){
+            receivableQueryVo.setQueryType("1");
+        }
+        // 协议类型 1 平台协议  2 私有协议
+        if (StrUtil.isBlank(receivableQueryVo.getAgreementType())){
+            receivableQueryVo.setAgreementType("1");
+        }
+        Page<InsPlyIncome> data = receivableService.getPlatFormReceivableList(receivableQueryVo);
+        if (null == data || CollUtil.isEmpty(data.getRecords())){
+            return HttpResult.ok(BigDecimal.ZERO);
+        }
+        BigDecimal reduce = data.getRecords().stream().map(income -> null != income.getInsFeeOrders() ? income.getInsFeeOrders().getTotalReceivablePremium() : BigDecimal.ZERO)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        return HttpResult.ok(reduce);
     }
 
     @PostMapping("/exportTemplatePlatFormReceivable")
@@ -321,24 +423,41 @@ public class ReceivableController {
         return HttpResult.ok(receivableService.deleteInvoiceById(id) ? "删除成功":"删除失败");
     }
 
-//    @PostMapping("batchModify")
-//    @Operation(summary = "批量修改")
-//    public HttpResult batchModify(@RequestBody List<SettlementVo> settlementVoList){
-//        return receivableService.batchModify(settlementVoList) ? HttpResult.ok("批量修改成功") : HttpResult.error("批量修改失败");
-//    }
+    /**
+     * 私有协议批量修改
+     *      修改手续费比例(商业险手续费比例, 交强险手续费比例)
+     *      签单时间
+     *      对接人(对接人姓名,手机号)
+     *
+     * @author lipf
+     * @date 2026/5/27 20:25
+     */
+    @PostMapping("batchModify")
+    @Operation(summary = "批量修改")
+    public HttpResult<String> batchModify(@RequestBody BatchModifyVo batchModifyVo){
+        return receivableService.batchModify(batchModifyVo) ? HttpResult.ok("批量修改成功") : HttpResult.error("批量修改失败");
+    }
     @PostMapping("exportSuperviseExcel")
     @Operation(summary = "导出应收手续费excel文件(车险)")
     public void exportSuperviseExcel(@RequestBody ReceivableQueryVo receivableQueryVo) throws IOException {
-        receivableQueryVo.setAgreementType("2");
-        receivableQueryVo.setQueryType("1");
+        if (StrUtil.isBlank(receivableQueryVo.getAgreementType())){
+            receivableQueryVo.setAgreementType("2");
+        }
+        if (StrUtil.isBlank(receivableQueryVo.getQueryType())){
+            receivableQueryVo.setQueryType("1");
+        }
         receivableService.exportSuperviseExcel(receivableQueryVo);
     }
 
     @PostMapping("exportSuperviseJyExcel")
     @Operation(summary = "导出应收手续费excel文件(非车险)")
     public void exportSuperviseJyExcel(@RequestBody ReceivableQueryVo receivableQueryVo) throws IOException {
-        receivableQueryVo.setAgreementType("2");
-        receivableQueryVo.setQueryType("3");
+        if (StrUtil.isBlank(receivableQueryVo.getAgreementType())){
+            receivableQueryVo.setAgreementType("2");
+        }
+        if (StrUtil.isBlank(receivableQueryVo.getQueryType())){
+            receivableQueryVo.setQueryType("3");
+        }
         receivableService.exportSuperviseJyExcel(receivableQueryVo);
     }
 
@@ -349,6 +468,19 @@ public class ReceivableController {
         return HttpResult.ok(receivableService.superviseSettlementExcel(page,settlementQueryVo));
     }
 
+    @PostMapping("platformSettlementExcel")
+    @Operation(summary = "平台协议结算记录")
+    public HttpResult<Page<ExportSuperviseSettlementExcelDto>> platformSettlementExcel(@RequestBody SettlementQueryVo settlementQueryVo) {
+        Page page = settlementQueryVo.getPage();
+        return HttpResult.ok(receivableService.platformSettlementExcel(page,settlementQueryVo));
+    }
+
+    @DeleteMapping("/deleteSettlementById/{id}")
+    @Operation(summary = "删除结算记录")
+    public HttpResult<Boolean> deleteSettlementById(@PathVariable String id) {
+        return HttpResult.ok(receivableService.deleteSettlementById(id) ? "删除成功":"删除失败");
+    }
+
 
     @PostMapping("exportSuperviseSettlementExcel")
     @Operation(summary = "导出应收手续费结算记录excel文件")
@@ -357,6 +489,13 @@ public class ReceivableController {
         receivableService.exportSuperviseSettlementExcel(page,settlementQueryVo);
     }
 
+    @PostMapping("exportPlatformSettlementExcel")
+    @Operation(summary = "导出平台结算记录excel文件")
+    public void exportPlatformSettlementExcel(@RequestBody SettlementQueryVo settlementQueryVo) throws IOException {
+        Page page = new Page<>(1,1000000);
+        receivableService.exportPlatformSettlementExcel(page,settlementQueryVo);
+    }
+
     @PostMapping("superviseSettlementDetailExcel")
     @Operation(summary = "应收手续费结算明细")
     public HttpResult superviseSettlementDetailExcel(@RequestBody SettlementQueryVo settlementQueryVo) {
@@ -429,10 +568,16 @@ public class ReceivableController {
         receivableService.exportOtherSettlementDetailJyExcel(page,settlementQueryVo);
     }
 
+    /**
+     * 私有协议-手续费,跟单费,平台协议三个页面的保险公司报表统计接口
+     *
+     * @author lipf
+     * @date 2026/5/28 11:15
+     */
     @PostMapping("companySuperviseSettlementReport")
     @Operation(summary = "保险公司结算报表")
-    public HttpResult<List<CompanySuperviseSettlementReportDto>> companySuperviseSettlementReport(@RequestBody SettlementReportQueryVo settlementReportQueryVo) {
-        return HttpResult.ok(receivableService.companySuperviseSettlementReport(settlementReportQueryVo));
+    public HttpResult<List<Tree<String>>> companySuperviseSettlementReport(@RequestBody SettlementReportQueryVo settlementReportQueryVo) {
+        return receivableService.companySuperviseSettlementReport(settlementReportQueryVo);
     }
 
     @PostMapping("receiverSettlementReport")
@@ -476,4 +621,23 @@ public class ReceivableController {
         List<Long> idList = Arrays.asList(ids);
         return receivableService.deleteIncomesByIds(idList,userName);
     }
+
+    /**
+     * 计算两数只差
+     *
+     * @param minuend 被减数 例如 10-3 = 7 , 被减数就是10
+     * @param subtrahend 减数, 例如 10-3 = 7,减数就是3
+     * @author lipf
+     * @date 2026/5/27 19:29
+     */
+    @GetMapping("calSub")
+    public HttpResult<BigDecimal> sub(@RequestParam("minuend") BigDecimal minuend,
+                                      @RequestParam("subtrahend") BigDecimal subtrahend){
+        log.info("计算两数只差。 minuend=[{}], subtrahend=[{}]", minuend, subtrahend);
+        if(minuend == null || subtrahend == null){
+            return HttpResult.error("被减数和减数不能为空");
+        }
+        BigDecimal subtract = minuend.subtract(subtrahend);
+        return HttpResult.ok(subtract);
+    }
 }

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

@@ -25,7 +25,7 @@ public class UserBankCardController extends BaseController {
 
 
     /**
-     * 财务管理-业务管账户-查询
+     * 财务管理-业务员银行卡账户-查询
      *
      * @author lipf
      * @date 2026/4/2 14:26

+ 27 - 0
tenant/organization/src/main/java/com/jzg/organization/excel/listener/InvoiceReceivbleExcelListener.java

@@ -0,0 +1,27 @@
+package com.jzg.organization.excel.listener;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.jzg.commons.entity.finance.vo.InvoiceReceivableExportExcelVo;
+import com.jzg.commons.entity.finance.vo.ReceivableExportExcelVo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class InvoiceReceivbleExcelListener extends AnalysisEventListener<InvoiceReceivableExportExcelVo> {
+    private final List<InvoiceReceivableExportExcelVo> dataList = new ArrayList<>();
+
+    @Override
+    public void invoke(InvoiceReceivableExportExcelVo data, AnalysisContext context) {
+        dataList.add(data);
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        System.out.println("Total rows: " + dataList.size());
+    }
+
+    public List<InvoiceReceivableExportExcelVo> getDataList() {
+        return dataList;
+    }
+}

+ 10 - 1
tenant/organization/src/main/java/com/jzg/organization/mapper/InsPlyIncomeInvoiceLinkMapper.java

@@ -1,11 +1,20 @@
 package com.jzg.organization.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.jzg.commons.entity.finance.po.InsPlyIncomeInvoice;
 import com.jzg.commons.entity.finance.po.InsPlyIncomeInvoiceLink;
+import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 @Mapper
 public interface InsPlyIncomeInvoiceLinkMapper extends BaseMapper<InsPlyIncomeInvoiceLink> {
 
+    /**
+     * 删除发票和订单的关联关系
+     *
+     * @author lipf
+     * @date 2026/5/29 14:29
+     */
+    @Delete("delete from ins_ply_income_invoice_link ipiil where ipiil.invoice_id = #{invoiceId}")
+    void deleteByInvoiceId(@Param("invoiceId") String invoiceId);
 }

+ 49 - 1
tenant/organization/src/main/java/com/jzg/organization/mapper/ReceivableMapper.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.entity.finance.dto.*;
 import com.jzg.commons.entity.finance.po.InsPlyIncome;
-import com.jzg.commons.entity.finance.po.InsPlyIncomeInvoice;
 import com.jzg.commons.entity.finance.po.InsPlyIncomeInvoiceLink;
 import com.jzg.commons.entity.finance.po.InsPlyIncomeInvoiceSettlement;
 import com.jzg.commons.entity.finance.vo.InvoiceRecordQueryVo;
@@ -17,6 +16,7 @@ import com.jzg.commons.entity.po.EsmInsCompany;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -49,6 +49,16 @@ public interface ReceivableMapper extends BaseMapper<InsPlyIncome> {
      */
     List<EsmInsCompany> getReceivableCompany(@Param("invoicingVo") InvoicingVo invoicingVo);
 
+    /**
+     * 更加应收订单的编号查询应收记录
+     *
+     * @param invoicingVo 应收订单编号集
+     * @return List<InsPlyIncome> 应收订单
+     * @author lipf
+     * @date 2026/5/30 10:17
+     */
+    List<InsPlyIncome> queryIncomeByIds(@Param("invoicingVo") InvoicingVo invoicingVo);
+
     /**
      * 获取车险应收列表
      * @param receivableQueryVo
@@ -80,6 +90,13 @@ public interface ReceivableMapper extends BaseMapper<InsPlyIncome> {
      */
     Page<ExportSuperviseSettlementExcelDto> superviseSettlementExcelDtos(Page page,@Param("settlementQueryVo") SettlementQueryVo settlementQueryVo);
 
+    /**
+     * 获取平台结算记录列表
+     * @param settlementQueryVo
+     * @return
+     */
+    Page<ExportSuperviseSettlementExcelDto> platformSettlementExcelDtos(Page page,@Param("settlementQueryVo") SettlementQueryVo settlementQueryVo);
+
     /**
      * 获取应收结算记录明细列表
      * @param settlementQueryVo
@@ -179,4 +196,35 @@ public interface ReceivableMapper extends BaseMapper<InsPlyIncome> {
     Page<InvoiceRecordResult> getInvoiceRecordList(Page page, @Param("invoiceRecordQueryVo") InvoiceRecordQueryVo invoiceRecordQueryVo);
 
     List<CompanySuperviseSettlementReportDto> selectAllCompanyReports(@Param("queryVo") SettlementReportQueryVo queryVo);
+
+    /**
+     * 查询累计应收的金额
+     *
+     * @author lipf
+     * @date 2026/6/1 16:57
+     */
+    List<CompanySuperviseSettlementReportDto> queryCumulativeAccountsReceivable(@Param("systemCode") String systemCode);
+
+    /**
+     * 查询已开票金额
+     *
+     * @param systemCode 租户代码
+     * @param invoiceType
+     * @return Map<String,BigDecimal> key 是保险公司id, value是汇总后的金额
+     * @author lipf
+     * @date 2026/6/1 17:57
+     */
+    Map<String,BigDecimal> queryInvoicedAmount(@Param("systemCode") String systemCode,
+                                   @Param("invoiceType") List<Integer> invoiceType,
+                                   @Param("invoiceStartDate") String invoiceStartDate,
+                                   @Param("invoiceEndDate") String invoiceEndDate);
+
+    /**
+     * 查询已结算金额
+     *
+     * @param systemCode 租户代码
+     * @param invoiceType
+     * @return
+     */
+    Map<String, BigDecimal> querySettledAmount(String systemCode, List<Integer> invoiceType);
 }

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

@@ -48,6 +48,17 @@ public interface SysAmountAuditingMapper extends BaseMapper<SysAmountAuditing> {
      * @return
      */
     List<AmountAuditVo> queryPaymentList(Page page,@Param("param") AmountAuditParam param,@Param("userName") String userName);
+
+    /**
+     * 查询指定业务员的提现申请
+     *
+     * @param userId 业务员序号
+     * @param auditingStatus 审核状态
+     * @author lipf
+     * @date 2026/5/29 16:20
+     */
+    List<SysAmountAuditing> queryPaymentByUserId(@Param("userId") String userId,
+                                                 @Param("auditingStatus") Integer auditingStatus);
 }
 
 

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

@@ -18,7 +18,7 @@ public interface InvAccountCardService extends IService<InvAccountCard> {
     /**
      * 账户管理列表分页
      * @param param
-     * @return
+     * @return Page<AccountCardVo> 付款账户列表
      */
     Page<AccountCardVo> queryPage(AccountCardParam param);
 

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

@@ -19,7 +19,7 @@ public interface PtlAgreementCostService extends IService<PtlAgreementCost> {
      * @author lipf
      * @date 2026/4/13 14:16
      */
-    HttpResult save(PtlAgreemenCostAdd ptlAgreemenCostAdd);
+    HttpResult<String> save(PtlAgreemenCostAdd ptlAgreemenCostAdd);
 
 
     /**

+ 71 - 11
tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java

@@ -1,5 +1,6 @@
 package com.jzg.organization.service;
 
+import cn.hutool.core.lang.tree.Tree;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jzg.commons.core.page.HttpResult;
@@ -30,15 +31,25 @@ public interface ReceivableService extends IService<InsPlyIncome> {
     /**
      * 添加已审核订单的数据 应收表插入
      */
-    boolean saveAuditedOrder(List<String> orderNos);
+    boolean saveAuditedOrder(AddReceivableVo addReceivableVo);
 
     /**
      * 获取应收订单的保司
      * @param invoicingVo
-     * @return
+     * @return List<EsmInsCompany>
      */
     List<EsmInsCompany> getReceivableCompany(InvoicingVo invoicingVo);
 
+    /**
+     * 查询应收订单关联的所有对接人信息
+     *
+     * @param invoicingVo 包含应收订单编号级的对象
+     * @return HttpResult<List<ContractVO>> 应收订单关联的对接人信息
+     * @author lipf
+     * @date 2026/5/30 10:09
+     */
+    HttpResult<List<ContractVO>> queryReceivableContact(InvoicingVo invoicingVo);
+
     /**
      * 获取私有协议手续费列表
      *
@@ -160,17 +171,12 @@ public interface ReceivableService extends IService<InsPlyIncome> {
 
     /**
      * 批量修改
-     * @param batchModifyVo
-     * @return
+     *
+     * @param batchModifyVo 要修改的内容
+     * @return boolean 是否修改成功
      */
     boolean batchModify(BatchModifyVo batchModifyVo);
 
-    /**
-     * 计算应收金额
-     * @return
-     */
-    BigDecimal calcReceivableAmount(BigDecimal premium,BigDecimal ratio);
-
     /**
      * 获取平台结算列表
      */
@@ -203,11 +209,23 @@ public interface ReceivableService extends IService<InsPlyIncome> {
      */
     Page<ExportSuperviseSettlementExcelDto> superviseSettlementExcel(Page page, SettlementQueryVo settlementQueryVo);
 
+    /**
+     * 平台协议结算记录
+     * @param settlementQueryVo
+     * @return
+     */
+    Page<ExportSuperviseSettlementExcelDto> platformSettlementExcel(Page page, SettlementQueryVo settlementQueryVo);
+
     /**
      * 导出应收手续费结算记录excel
      */
     void exportSuperviseSettlementExcel(Page page,SettlementQueryVo settlementQueryVo) throws IOException;
 
+    /**
+     * 导出平台结算记录excel
+     */
+    void exportPlatformSettlementExcel(Page page,SettlementQueryVo settlementQueryVo) throws IOException;
+
     /**
      * 导出平台协议Excel模板
      */
@@ -273,7 +291,16 @@ public interface ReceivableService extends IService<InsPlyIncome> {
      * @author lipf
      * @date 2026/4/30 14:48
      */
-    List<CompanySuperviseSettlementReportDto> companySuperviseSettlementReport(SettlementReportQueryVo settlementReportQueryVo);
+    HttpResult<List<Tree<String>>> companySuperviseSettlementReport(SettlementReportQueryVo settlementReportQueryVo);
+
+    /**
+     * 查询保险公司结算报表(平台协议)
+     *  这个方法后续会删除
+     * @author lipf
+     * @date 2026/5/23 16:28
+     */
+    @Deprecated
+    public List<CompanySuperviseSettlementReportDto> companySuperviseSettlementReport2(SettlementReportQueryVo settlementReportQueryVo);
 
     /**
      * 对接人结算报表
@@ -342,4 +369,37 @@ public interface ReceivableService extends IService<InsPlyIncome> {
      * @return
      */
     boolean platformSettlement(PlatformSettlementVo platformSettlementVo);
+
+    /**
+     * 导出模板私有协议手续费
+     * @return
+     */
+    String exportTemplateReceivableList();
+
+    /**
+     * 导入私有协议手续费修改
+     * @param file
+     * @return
+     */
+    ImportUpdateExcelResultVo importReceivableListUpdate(MultipartFile file);
+
+    /**
+     * 导出应收开票模板
+     * @return
+     */
+    String exportAccountsReceivableInvoiceTemplate();
+
+    /**
+     * 导入应收开票数据
+     * @param file
+     * @return
+     */
+    ImportUpdateExcelResultVo importAccountsReceivableInvoice(MultipartFile file);
+
+    /**
+     * 删除结算记录
+     * @param id
+     * @return
+     */
+    boolean deleteSettlementById(String id);
 }

+ 6 - 4
tenant/organization/src/main/java/com/jzg/organization/service/SysAmountAuditingService.java

@@ -2,6 +2,7 @@ package com.jzg.organization.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.AmountAuditEditParam;
 import com.jzg.commons.entity.dto.AmountAuditParam;
 import com.jzg.commons.entity.dto.AmountAuditRejectParam;
@@ -35,9 +36,10 @@ public interface SysAmountAuditingService extends IService<SysAmountAuditing> {
     /**
      * 领取提现申请
      *
-     * @param id
+     * @param id 提现申请的序号
+     * @param receiveUser 领取人
      */
-    void auditReceive(String id);
+    void auditReceive(String id, String receiveUser);
 
     /**
      * 放弃领取提现申请
@@ -49,7 +51,7 @@ public interface SysAmountAuditingService extends IService<SysAmountAuditing> {
      * 提现付款
      * @param param
      */
-    void verifyAmount(AmountAuditEditParam param);
+    HttpResult<String> verifyAmount(AmountAuditEditParam param);
 
     /**
      * 提现驳回
@@ -67,7 +69,7 @@ public interface SysAmountAuditingService extends IService<SysAmountAuditing> {
     /**
      * 我的付款
      * @param param
-     * @return
+     * @return Page<AmountAuditVo>
      */
     Page<AmountAuditVo> myPayment(AmountAuditParam param);
 

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