Explorar o código

Merge remote-tracking branch 'origin/master'

Qchen hai 4 meses
pai
achega
21fd45bd1d
Modificáronse 49 ficheiros con 1158 adicións e 257 borrados
  1. 5 0
      commons/src/main/java/com/jzg/commons/entity/dto/PtlAgreementCostCopyParam.java
  2. 6 3
      commons/src/main/java/com/jzg/commons/entity/dto/SysUserAccountPageParam.java
  3. 3 3
      commons/src/main/java/com/jzg/commons/entity/dto/SysUserAccountParam.java
  4. 3 1
      commons/src/main/java/com/jzg/commons/entity/dto/SysUserJzgInfoBankCardDto.java
  5. 31 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/ContractVO.java
  6. 6 1
      commons/src/main/java/com/jzg/commons/entity/finance/vo/ImportUpdateExcelResultVo.java
  7. 11 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/IncomeDataVO.java
  8. 213 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceReceivableExportExcelVo.java
  9. 5 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceRecordResult.java
  10. 7 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoicingVo.java
  11. 1 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/SettlementVo.java
  12. 5 4
      commons/src/main/java/com/jzg/commons/entity/po/SysAmountAuditing.java
  13. 18 3
      commons/src/main/java/com/jzg/commons/entity/vo/AmountAuditVo.java
  14. 126 0
      commons/src/main/java/com/jzg/commons/util/BigDecimalUtil.java
  15. 1 1
      partner/src/main/java/com/jzg/utils/DistributionUtils.java
  16. 1 0
      platform/src/main/java/com/jzg/service/impl/PtlInsAttributionTemplateServiceImpl.java
  17. 20 1
      platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java
  18. 6 4
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/entity/request/GuoRenCrawlerGetCarPriceRequest.java
  19. 5 7
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java
  20. 4 3
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java
  21. 2 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/template/LotteryMessageTemplate.java
  22. 7 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/QrCodeController.java
  23. 10 5
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeOrdersServiceImpl.java
  24. 13 31
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  25. 1 1
      tenant/organization/src/main/java/com/jzg/organization/controller/AccountCardController.java
  26. 24 9
      tenant/organization/src/main/java/com/jzg/organization/controller/AmountAuditingController.java
  27. 31 2
      tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java
  28. 1 1
      tenant/organization/src/main/java/com/jzg/organization/controller/UserBankCardController.java
  29. 27 0
      tenant/organization/src/main/java/com/jzg/organization/excel/listener/InvoiceReceivbleExcelListener.java
  30. 10 1
      tenant/organization/src/main/java/com/jzg/organization/mapper/InsPlyIncomeInvoiceLinkMapper.java
  31. 10 1
      tenant/organization/src/main/java/com/jzg/organization/mapper/ReceivableMapper.java
  32. 11 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysAmountAuditingMapper.java
  33. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/InvAccountCardService.java
  34. 24 7
      tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java
  35. 6 4
      tenant/organization/src/main/java/com/jzg/organization/service/SysAmountAuditingService.java
  36. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/SysUserJzgInfoBankCardService.java
  37. 2 3
      tenant/organization/src/main/java/com/jzg/organization/service/impl/InvAccountCardServiceImpl.java
  38. 2 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java
  39. 2 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java
  40. 381 108
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  41. 62 35
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysAmountAuditingServiceImpl.java
  42. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserAccountServiceImpl.java
  43. 0 1
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgInfoBankCardServiceImpl.java
  44. 2 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java
  45. 0 2
      tenant/organization/src/main/resources/application.yml
  46. 15 2
      tenant/organization/src/main/resources/mapper/ReceivableMapper.xml
  47. 29 5
      tenant/organization/src/main/resources/mapper/SysAmountAuditingMapper.xml
  48. 4 2
      tenant/organization/src/main/resources/mapper/SysUserAccountMapper.xml
  49. 2 2
      tenant/organization/src/main/resources/mapper/SysUserJzgInfoBankCardMapper.xml

+ 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;
 

+ 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";
 
         /**
          * 查询条件

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

@@ -0,0 +1,213 @@
+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 agreementCode;
+
+    @Schema(description = "协议类型")
+    @ExcelProperty(value = "协议类型", index = 2)
+    private String agreementType;
+
+    @Schema(description = "车牌号")
+    @ExcelProperty(value = "车牌号", index = 3)
+    private String licenseNo;
+
+    @Schema(description = "险种编号")
+    @ExcelProperty(value = "险种编号", index = 4)
+    private String productId;
+
+    @Schema(description = "险种名称")
+    @ExcelProperty(value = "险种名称", index = 5)
+    private String productName;
+
+    @Schema(description = "被保险人姓名")
+    @ExcelProperty(value = "被保险人姓名", index = 6)
+    private String insuredPerson;
+
+    @Schema(description = "订单号")
+    @ExcelProperty(value = "订单号", index = 7)
+    private String orderNo;
+
+    @Schema(description = "交强险保单号")
+    @ExcelProperty(value = "交强险保单号", index = 8)
+    private String jqPolicyNo;
+
+    @Schema(description = "交强险手续费比例")
+    @ExcelProperty(value = "交强险手续费比例(%)", index = 9)
+    private String jqSuperviseCostsProportion;
+
+    @Schema(description = "交强险跟单费比例")
+    @ExcelProperty(value = "交强险跟单费比例(%)", index = 10)
+    private String jqOtherCostsProportion;
+
+    @Schema(description = "商业险保单号")
+    @ExcelProperty(value = "商业险保单号", index = 11)
+    private String syPolicyNo;
+
+    @Schema(description = "商业险手续费比例")
+    @ExcelProperty(value = "商业险手续费比例(%)", index = 12)
+    private String sySuperviseCostsProportion;
+
+    @Schema(description = "商业险跟单费比例")
+    @ExcelProperty(value = "商业险跟单费比例(%)", index = 13)
+    private String syOtherCostsProportion;
+
+    @Schema(description = "非车险保单号")
+    @ExcelProperty(value = "非车险保单号", index = 14)
+    private String jyPolicyNo;
+
+    @Schema(description = "非车险手续费比例")
+    @ExcelProperty(value = "非车险手续费比例(%)", index = 15)
+    private String jySuperviseCostsProportion;
+
+    @Schema(description = "非车险跟单费比例")
+    @ExcelProperty(value = "非车险跟单费比例(%)", index = 16)
+    private String jyOtherCostsProportion;
+
+    @Schema(description = "公司编码")
+    @ExcelProperty(value = "公司编码", index = 17)
+    private String companyId;
+
+    @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.getAgreementCode())) {
+            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.getProductId())) {
+            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.getCompanyId())) {
+            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;
+    }
+
+}

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

@@ -25,6 +25,11 @@ public class InvoiceRecordResult extends PageRequest {
      */
     private String companyName;
 
+    /**
+     * 开票号/发票号
+     */
+    private String invoiceNo;
+
     /**
      * 保险公司分支名称
      */

+ 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;

+ 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;
+
 }

+ 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

+ 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;
     }
 
 }

+ 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);

+ 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;
     }

+ 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());

+ 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);

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

@@ -525,19 +525,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));
+//                }
             });
         }
         // 订单电子保单信息
@@ -1687,24 +1687,6 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 continue;
             }
             log.info("车险订单[{}]对应的订单明细是[{}]", orderNo, JSONUtil.toJsonStr(oldInsOrders));
-
-//            if (Objects.nonNull(batchModifyVo.getJqSuperviseCostsProportion()) && batchModifyVo.getJqSuperviseCostsProportion().compareTo(BigDecimal.ZERO) > 0) {
-//                BigDecimal superviseReceivablePremium = multiply(new BigDecimal(Objects.toString(insFeeOrders.getJqPremium(),"0") ), batchModifyVo.getJqSuperviseCostsProportion());
-//                insFeeOrdersMapper.update(null, new LambdaUpdateWrapper<InsFeeOrders>()
-//                        .set(InsFeeOrders::getJqSuperviseCostsProportion, batchModifyVo.getJqSuperviseCostsProportion())
-//                        .set(InsFeeOrders::getJqSuperviseCostsPremiums, superviseReceivablePremium)
-//                        .eq(InsFeeOrders::getOrderNo,orderNo));
-//            }
-
-//            if (Objects.nonNull(batchModifyVo.getSySuperviseCostsProportion()) && batchModifyVo.getSySuperviseCostsProportion().compareTo(BigDecimal.ZERO) > 0) {
-//                BigDecimal otherReceivablePremium = multiply(new BigDecimal(Objects.toString(insFeeOrders.getSyPremium(),"0")), batchModifyVo.getSySuperviseCostsProportion());
-//                baseMapper.update(null, new LambdaUpdateWrapper<InsFeeOrders>()
-//                        .set(InsFeeOrders::getSySuperviseCostsProportion, batchModifyVo.getSySuperviseCostsProportion())
-//                        .set(InsFeeOrders::getSySuperviseCostsPremiums, otherReceivablePremium)
-//                        .eq(InsFeeOrders::getOrderNo,orderNo));
-//            }
-
-
             if(batchModifyVo.getSigningTime() != null){
                 baseMapper.update(null, new LambdaUpdateWrapper<InsOrders>()
                         .set(InsOrders::getSigningTime, batchModifyVo.getSigningTime())

+ 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){

+ 31 - 2
tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java

@@ -107,6 +107,20 @@ public class ReceivableController {
         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
@@ -213,6 +227,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){
@@ -286,7 +313,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");
         }
@@ -294,7 +321,9 @@ 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("/exportTemplatePlatFormReceivable")

+ 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);
 }

+ 10 - 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;
@@ -49,6 +48,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

+ 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);
 

+ 24 - 7
tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java

@@ -35,10 +35,20 @@ public interface ReceivableService extends IService<InsPlyIncome> {
     /**
      * 获取应收订单的保司
      * @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);
+
     /**
      * 获取私有协议手续费列表
      *
@@ -166,12 +176,6 @@ public interface ReceivableService extends IService<InsPlyIncome> {
      */
     boolean batchModify(BatchModifyVo batchModifyVo);
 
-    /**
-     * 计算应收金额
-     * @return
-     */
-    BigDecimal calcReceivableAmount(BigDecimal premium,BigDecimal ratio);
-
     /**
      * 获取平台结算列表
      */
@@ -368,4 +372,17 @@ public interface ReceivableService extends IService<InsPlyIncome> {
      * @return
      */
     ImportUpdateExcelResultVo importReceivableListUpdate(MultipartFile file);
+
+    /**
+     * 导出应收开票模板
+     * @return
+     */
+    String exportAccountsReceivableInvoiceTemplate();
+
+    /**
+     * 导入应收开票数据
+     * @param file
+     * @return
+     */
+    ImportUpdateExcelResultVo importAccountsReceivableInvoice(MultipartFile file);
 }

+ 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);
 

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

@@ -13,7 +13,7 @@ import java.util.List;
 public interface SysUserJzgInfoBankCardService extends IService<SysUserJzgInfoBankCard> {
 
     /**
-     * 财务管理-业务管账户-查询
+     * 财务管理-业务员银行卡账户-查询
      *
      * @author lipf
      * @date 2026/4/2 14:26

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

@@ -32,9 +32,8 @@ public class InvAccountCardServiceImpl extends ServiceImpl<InvAccountCardMapper,
 
     @Override
     public Page<AccountCardVo> queryPage(AccountCardParam param) {
-        log.info("财务中心-账户管理-查询:param=[{}]", JSONUtil.toJsonStr(param));
-        Page<AccountCardVo> page = baseMapper.queryPage(param.getPage(), param);
-        return page;
+        log.info("财务中心-账户管理-查询付款账户列表:param=[{}]", JSONUtil.toJsonStr(param));
+        return baseMapper.queryPage(param.getPage(), param);
     }
 
     @Override

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

@@ -409,6 +409,8 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
         // 调整数据 进行copy
         String costId = IdGenerate.nextId();
         ptlAgreementCost.setId(costId);
+        ptlAgreementCost.setPtlAgreementId(costCopyParam.getAgreementId());
+        ptlAgreementCost.setCoverRuleId(costCopyParam.getCoverRuleId());
         ptlAgreementCost.setCostDescribe("复制的费用:" + ptlAgreementCost.getCostDescribe());
         ptlAgreementCost.setCreateTime(LocalDateTime.now());
 

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

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.jzg.commons.constants.ProductsType;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.action.enums.ActionEnum;
@@ -591,6 +592,7 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
         String newSchemeInfoId = IdGenerate.nextId();
         ptlScheme.setId(newSchemeId);
         ptlScheme.setProductId(productCode);
+        ptlScheme.setProductName(ProductsType.getByCode(productCode).getDesc());
 
         ptlSchemeInfo.setId(newSchemeInfoId);
         ptlSchemeInfo.setSchemeId(newSchemeId);

+ 381 - 108
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -19,24 +19,17 @@ import com.jzg.commons.entity.finance.dto.*;
 import com.jzg.commons.entity.finance.po.*;
 import com.jzg.commons.entity.finance.vo.*;
 import com.jzg.commons.entity.orders.po.InsOrderAdjust;
-import com.jzg.commons.entity.orders.po.InsOrders;
 import com.jzg.commons.entity.po.EsmInsCompany;
 import com.jzg.commons.entity.po.InsFeeOrders;
 import com.jzg.commons.entity.po.PtlAgreement;
 import com.jzg.commons.entity.po.SysUploadFiles;
 import com.jzg.commons.exception.ServiceException;
 import com.jzg.commons.exception.SystemException;
-import com.jzg.commons.util.AssertionUtils;
-import com.jzg.commons.util.EasyExcelUtils;
-import com.jzg.commons.util.MinioUtils;
-import com.jzg.commons.util.ServletUtils;
+import com.jzg.commons.util.*;
 import com.jzg.commons.util.idgen.IdGenerate;
 import com.jzg.organization.client.EsmInsCompanyClient;
 import com.jzg.organization.client.InsFeeOrdersClient;
-import com.jzg.organization.excel.listener.JyExcelListener;
-import com.jzg.organization.excel.listener.OtherExcelListener;
-import com.jzg.organization.excel.listener.ReceivbleExcelListener;
-import com.jzg.organization.excel.listener.SuperviseExcelListener;
+import com.jzg.organization.excel.listener.*;
 import com.jzg.organization.mapper.*;
 import com.jzg.organization.service.ReceivableService;
 import com.jzg.organization.service.SysUserJzgInfoSalesmanService;
@@ -167,9 +160,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
 //        if (count > 0){
 //            return false;
 //        }
-        auditedOrder.forEach(item -> {
-            item.setId(IdGenerate.nextId());
-        });
+        auditedOrder.forEach(item -> item.setId(IdGenerate.nextId()));
         return saveBatch(auditedOrder);
     }
 
@@ -178,10 +169,26 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         return baseMapper.getReceivableCompany(invoicingVo);
     }
 
+    /**
+     * 查询应收订单关联的所有对接人信息
+     *
+     * @param invoicingVo 包含应收订单编号级的对象
+     * @return HttpResult<List<ContractVO>> 应收订单关联的对接人信息
+     * @author lipf
+     * @date 2026/5/30 10:09
+     */
+    @Override
+    public HttpResult<List<ContractVO>> queryReceivableContact(InvoicingVo invoicingVo) {
+        List<InsPlyIncome> insPlyIncomes = baseMapper.queryIncomeByIds(invoicingVo);
+        List<ContractVO> contractVOS = insPlyIncomes.stream().map(action -> new ContractVO(action.getContactPerson(), action.getContactPersonPhone())).distinct().toList();
+        log.info("根据订单编号查询得到的对接人信息[{}]个", CollUtil.size(contractVOS));
+        return HttpResult.ok(contractVOS);
+    }
+
     /**
      * 获取私有协议手续费列表
      *
-     * @param receivableQueryVo
+     * @param receivableQueryVo 列表查询条件
      * @return Page<InsPlyIncome>
      */
     @Override
@@ -209,7 +216,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         Page<InsPlyIncome> page = baseMapper.getReceivablePage(page1, receivableQueryVo);
         List<InsPlyIncomeOrder> res = page.getRecords().stream()
                 .map(action -> new InsPlyIncomeOrder(action.getId(), action.getOrderNo())).toList();
-        log.info("获取私有协议手续费应收列表的id集合。receivableQueryVo=[{}]. ids.size=[{}]", JSONUtil.toJsonStr(receivableQueryVo), CollUtil.size(res));
+        log.info("获取私有/平台协议手续费应收列表的id集合。receivableQueryVo=[{}]. ids.size=[{}]", JSONUtil.toJsonStr(receivableQueryVo), CollUtil.size(res));
         return res;
     }
 
@@ -250,6 +257,23 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                         .collect(Collectors.toMap(IncomeDataVO.SearchVO::getName, Function.identity(), (ole_item, new_item) -> ole_item));
                 Set<String> names =searchVOMap.keySet();
 
+                Predicate<InsPlyIncome> contactPredicate = insPlyIncome -> {
+                    if(!names.contains(IncomeDataVO.SearchVO.contactPerson)){
+                        return true;
+                    }
+                    IncomeDataVO.SearchVO searchVO = searchVOMap.get(IncomeDataVO.SearchVO.contactPerson);
+                    String type = searchVO.getType();
+                    String search = searchVO.getSearch();
+                    if(StrUtil.isEmpty(search)){
+                        return true;
+                    }
+                    if("等于".equals(type)){
+                        return search.equals(insPlyIncome.getContactPersonPhone());
+                    }else if("不等于".equals(type)){
+                        return !search.equals(insPlyIncome.getContactPersonPhone());
+                    }
+                    return true;
+                };
                 // 保险公司
                 Predicate<InsPlyIncome> companyIdPredicate = insPlyIncome -> {
                     if(!names.contains(IncomeDataVO.SearchVO.companyId)){
@@ -378,7 +402,6 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                     if("为空".equals(type)|| "不为空".equals(type)){
                         return true;
                     }
-                    // 如果填写的查询条件,不完善,则该条件不进行过滤
                     if(StrUtil.isEmpty(search)){
                         return true;
                     }
@@ -388,15 +411,98 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                     }
                     if("不等于".equalsIgnoreCase(type) || "不包含".equalsIgnoreCase(type)){
                         List<String> signYears = Arrays.asList(search.split(","));
-                        return !signYears.contains(insPlyIncome.getSigningTime());
+                        return !signYears.contains(insPlyIncome.getSignYear()); // 修复这里
+                    }
+                    return true;
+                };
+
+                // 车牌号 licenseNo
+                Predicate<InsPlyIncome> licenseNoPredicate = insPlyIncome -> {
+                    if(!names.contains(IncomeDataVO.SearchVO.licenseNo)){
+                        return true;
+                    }
+                    IncomeDataVO.SearchVO searchVO = searchVOMap.get(IncomeDataVO.SearchVO.licenseNo);
+                    String type = searchVO.getType();
+                    String search = searchVO.getSearch();
+                    if("为空".equals(type)|| "不为空".equals(type)){
+                        return true;
+                    }
+                    if(StrUtil.isEmpty(search)){
+                        return true;
+                    }
+                    if("等于".equalsIgnoreCase(type) || "包含".equalsIgnoreCase(type)){
+                        List<String> licenseNos = Arrays.asList(search.split(","));
+                        return licenseNos.contains(insPlyIncome.getLicenseNo());
+                    }
+                    if("不等于".equalsIgnoreCase(type) || "不包含".equalsIgnoreCase(type)){
+                        List<String> licenseNos = Arrays.asList(search.split(","));
+                        return !licenseNos.contains(insPlyIncome.getLicenseNo());
+                    }
+                    return true;
+                };
+
+
+                // 交强险保单号 jqPolicyNo
+                Predicate<InsPlyIncome> jqPolicyNoPredicate = insPlyIncome -> {
+                    if(!names.contains(IncomeDataVO.SearchVO.jqPolicyNo)){
+                        return true;
+                    }
+                    IncomeDataVO.SearchVO searchVO = searchVOMap.get(IncomeDataVO.SearchVO.jqPolicyNo);
+                    String type = searchVO.getType();
+                    String search = searchVO.getSearch();
+                    if("为空".equals(type)|| "不为空".equals(type)){
+                        return true;
+                    }
+                    if(StrUtil.isEmpty(search)){
+                        return true;
+                    }
+                    if("等于".equalsIgnoreCase(type) || "包含".equalsIgnoreCase(type)){
+                        List<String> jqPolicyNos = Arrays.asList(search.split(","));
+                        return jqPolicyNos.contains(insPlyIncome.getJqPolicyNo());
+                    }
+                    if("不等于".equalsIgnoreCase(type) || "不包含".equalsIgnoreCase(type)){
+                        List<String> jqPolicyNos = Arrays.asList(search.split(","));
+                        return !jqPolicyNos.contains(insPlyIncome.getJqPolicyNo());
                     }
                     return true;
                 };
+
+
+                // 商业险保单号 syPolicyNo
+                Predicate<InsPlyIncome> syPolicyNoPredicate = insPlyIncome -> {
+                    if(!names.contains(IncomeDataVO.SearchVO.syPolicyNo)){
+                        return true;
+                    }
+                    IncomeDataVO.SearchVO searchVO = searchVOMap.get(IncomeDataVO.SearchVO.syPolicyNo);
+                    String type = searchVO.getType();
+                    String search = searchVO.getSearch();
+                    if("为空".equals(type)|| "不为空".equals(type)){
+                        return true;
+                    }
+                    if(StrUtil.isEmpty(search)){
+                        return true;
+                    }
+                    if("等于".equalsIgnoreCase(type) || "包含".equalsIgnoreCase(type)){
+                        List<String> syPolicyNos = Arrays.asList(search.split(","));
+                        return syPolicyNos.contains(insPlyIncome.getSyPolicyNo());
+                    }
+                    if("不等于".equalsIgnoreCase(type) || "不包含".equalsIgnoreCase(type)){
+                        List<String> syPolicyNos = Arrays.asList(search.split(","));
+                        return !syPolicyNos.contains(insPlyIncome.getSyPolicyNo());
+                    }
+                    return true;
+                };
+
+
                 if("and".equalsIgnoreCase(incomeDataVO.getLogicJudge())){
-                    Predicate<InsPlyIncome> and = companyIdPredicate.and(signDatePredicate).and(ptlAgreementPredicate).and(orderTypePredicate).and(signYearPredicate);
+                    Predicate<InsPlyIncome> and = companyIdPredicate.and(signDatePredicate).
+                            and(ptlAgreementPredicate).and(orderTypePredicate).and(signYearPredicate).and(licenseNoPredicate)
+                            .and(contactPredicate).and(jqPolicyNoPredicate).and(syPolicyNoPredicate);
                     filterIncomes = incomes.stream().filter(and).toList();
                 }else if ("or".equalsIgnoreCase(incomeDataVO.getLogicJudge())){
-                    Predicate<InsPlyIncome> or = companyIdPredicate.or(signDatePredicate).or(ptlAgreementPredicate).or(orderTypePredicate).or(signYearPredicate);
+                    Predicate<InsPlyIncome> or = companyIdPredicate.or(signDatePredicate).
+                            or(ptlAgreementPredicate).or(orderTypePredicate).or(signYearPredicate).or(licenseNoPredicate)
+                            .or(contactPredicate).or(jqPolicyNoPredicate).or(syPolicyNoPredicate);
                     filterIncomes = incomes.stream().filter(or).toList();
                 }
             }
@@ -409,6 +515,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     @Override
     public Boolean deleteInvoiceById(String id) {
         log.info("私有协议-开票记录-删除: id=[{}]",id);
+        insPlyIncomeInvoiceLinkMapper.deleteByInvoiceId(id);
         return insPlyIncomeInvoiceMapper.deleteById(id) > 0;
     }
 
@@ -464,7 +571,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     /**
      * 查询订单绑定的发票信息
      *
-     * @param invoicingVo
+     * @param invoicingVo 应收订单的序号集
      * @return List<String> 订单绑定的发票号
      * @author lipf
      * @date 2026/5/21 11:59
@@ -622,25 +729,25 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
 
         // 私有手续费 应收金额
         // 交强的总手续费(jq_commission_premium) + 商业的总手续费(sy_commission_premium)
-        if (invoiceType.equals("1")) {
-            return jqCommissionPremium.add(syCommissionPremium);
-        } else if (invoiceType.equals("2")) {
-            // 交强的总跟单费(jq_follow_premium) + 商业的总跟单费(sy_follow_premium)
-            return jqFollowPremium.add(syFollowPremium);
-        } else if (invoiceType.equals("3")) {
-            // 驾意险的总手续费(jy_commission_premium)
-            return jyCommissionPremium;
-        } else if (invoiceType.equals("4")) {
-            // 驾意险的总跟单费(jy_follow_premium)
-            return jyFollowPremium;
-        } else if (invoiceType.equals("5")) {
-            // 交强的总手续费(jq_commission_premium) + 商业的总手续费(sy_commission_premium) + 交强的总跟单费(jq_follow_premium) + 商业的总跟单费(sy_follow_premium)
-            return jqCommissionPremium.add(syCommissionPremium).add(jqFollowPremium).add(syFollowPremium);
-        } else if (invoiceType.equals("6")) {
-            // 驾意险的总手续费(jy_commission_premium) + 驾意险的总跟单费(jy_follow_premium)
-            return jyCommissionPremium.add(jyFollowPremium);
-        }
-        return null;
+        return switch (invoiceType) {
+            case "1" -> jqCommissionPremium.add(syCommissionPremium);
+            case "2" ->
+                // 交强的总跟单费(jq_follow_premium) + 商业的总跟单费(sy_follow_premium)
+                    jqFollowPremium.add(syFollowPremium);
+            case "3" ->
+                // 驾意险的总手续费(jy_commission_premium)
+                    jyCommissionPremium;
+            case "4" ->
+                // 驾意险的总跟单费(jy_follow_premium)
+                    jyFollowPremium;
+            case "5" ->
+                // 交强的总手续费(jq_commission_premium) + 商业的总手续费(sy_commission_premium) + 交强的总跟单费(jq_follow_premium) + 商业的总跟单费(sy_follow_premium)
+                    jqCommissionPremium.add(syCommissionPremium).add(jqFollowPremium).add(syFollowPremium);
+            case "6" ->
+                // 驾意险的总手续费(jy_commission_premium) + 驾意险的总跟单费(jy_follow_premium)
+                    jyCommissionPremium.add(jyFollowPremium);
+            default -> null;
+        };
     }
 
     /**
@@ -674,7 +781,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             invoice.setReceivableSupervisePremium(invoicingVo.getReceivableSupervisePremium());
             invoice.setTaxPoint(invoicingVo.getTaxPoint());
             insPlyIncomeInvoiceMapper.insert(invoice);
-            List<InsPlyIncomeInvoiceLink> invoicingLinkList = new ArrayList<InsPlyIncomeInvoiceLink>();
+            List<InsPlyIncomeInvoiceLink> invoicingLinkList = new ArrayList<>();
             invoicingVo.getIncomeIds().forEach(incomeId -> {
                 InsPlyIncomeInvoiceLink link = new InsPlyIncomeInvoiceLink();
                 link.setId(IdGenerate.nextId());
@@ -728,42 +835,29 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         if (CollectionUtils.isEmpty(invoiceIds)) {
             return false;
         }
-        long result = 0;
+        long result;
         final String number = "1";
-        switch (invoiceType) {
-            case number:
-                result = baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
-                        .in(InsPlyIncome::getId, invoiceIds)
-                        .set(InsPlyIncome::getSuperviseSettlement, number));
-                break;
-            case "2":
-                result = baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
-                        .in(InsPlyIncome::getId, invoiceIds)
-                        .set(InsPlyIncome::getOtherSettlement, number));
-                break;
-            case "3":
-                result = baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
-                        .in(InsPlyIncome::getId, invoiceIds)
-                        .set(InsPlyIncome::getJySuperviseSettlement, number));
-                break;
-            case "4":
-                result = baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
-                        .in(InsPlyIncome::getId, invoiceIds)
-                        .set(InsPlyIncome::getJyOtherSettlement, number));
-                break;
-            case "5":
-                result = baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
-                        .in(InsPlyIncome::getId, invoiceIds)
-                        .set(InsPlyIncome::getPlatformSuperviseSettlement, number).set(InsPlyIncome::getSettlementStatus, number));
-                break;
-            case "6":
-                result = baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
-                        .in(InsPlyIncome::getId, invoiceIds)
-                        .set(InsPlyIncome::getPlatformOtherSettlement, number).set(InsPlyIncome::getSettlementStatus, number));
-                break;
-            default:
-                result = 0;
-        }
+        result = switch (invoiceType) {
+            case number -> baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
+                    .in(InsPlyIncome::getId, invoiceIds)
+                    .set(InsPlyIncome::getSuperviseSettlement, number));
+            case "2" -> baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
+                    .in(InsPlyIncome::getId, invoiceIds)
+                    .set(InsPlyIncome::getOtherSettlement, number));
+            case "3" -> baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
+                    .in(InsPlyIncome::getId, invoiceIds)
+                    .set(InsPlyIncome::getJySuperviseSettlement, number));
+            case "4" -> baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
+                    .in(InsPlyIncome::getId, invoiceIds)
+                    .set(InsPlyIncome::getJyOtherSettlement, number));
+            case "5" -> baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
+                    .in(InsPlyIncome::getId, invoiceIds)
+                    .set(InsPlyIncome::getPlatformSuperviseSettlement, number).set(InsPlyIncome::getSettlementStatus, number));
+            case "6" -> baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
+                    .in(InsPlyIncome::getId, invoiceIds)
+                    .set(InsPlyIncome::getPlatformOtherSettlement, number).set(InsPlyIncome::getSettlementStatus, number));
+            default -> 0;
+        };
         return result > 0;
     }
 
@@ -821,7 +915,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             invoice.setReceivableSupervisePremium(invoicingVo.getReceivablePremium());
             invoice.setTaxPoint(invoicingVo.getTaxPoint());
 
-            List<InsPlyIncomeInvoiceLink> invoicingLinkList = new ArrayList();
+            List<InsPlyIncomeInvoiceLink> invoicingLinkList = new ArrayList<>();
 
             invoicingVo.getIncomeIds().forEach(incomeId -> {
                 InsPlyIncomeInvoiceLink link = new InsPlyIncomeInvoiceLink();
@@ -867,8 +961,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                 insPlyIncomeInvoiceSettlementFileMapper.insert(files);
             }
 
-            // 判断是否已经结算完成
-            if (surplusPremium.compareTo(settlementVo.getActualReceivedAmount()) == 0) {
+            // 判断是否已经结算完成, 考虑回款差额
+            if (surplusPremium.compareTo(settlementVo.getActualReceivedAmount().add(platformSettlementVo.getSettlementVo().getPaymentDifference())) == 0) {
                 log.info("序号为[{}]的发票已经结算完成",invoice.getId());
                 // 更新发票状态
                 invoice.setStatus("1");
@@ -1016,6 +1110,186 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         return importExcelResultVo;
     }
 
+    /**
+     * 导出应收开票模板
+     * @return String 导出时的提示信息
+     */
+    @Override
+    public String exportAccountsReceivableInvoiceTemplate() {
+        List<InvoiceReceivableExportExcelVo> emptyList = ListUtil.empty();
+
+        // 调用动态导出
+        return exportBaseService.upLoadFile(
+                InvoiceReceivableExportExcelVo.class,
+                emptyList,
+                "应收开票-导出模板-" + Instant.now()
+        );
+    }
+
+    @Override
+    public ImportUpdateExcelResultVo importAccountsReceivableInvoice(MultipartFile file) {
+        String userName = baseController.getUserName();
+        log.info("用户[{}]导入平台协议文件",userName);
+        ImportUpdateExcelResultVo importExcelResultVo = new ImportUpdateExcelResultVo();
+        List<InvoiceReceivableExportExcelVo> receivableExportExcelVos = importInvoiceReceivableExcel(file);
+        if (CollUtil.isEmpty(receivableExportExcelVos)){
+            throw new SystemException("数据不能为空,导入失败");
+        }
+        AssertionUtils.isEmpty(receivableExportExcelVos, "数据处理失败,导入失败");
+        // 获取保司名称
+        HttpResult<List<EsmInsCompany>> listHttpResult = esmInsCompanyClient.liveCompanyList();
+        AssertionUtils.isFail(listHttpResult.getCode() != 200, listHttpResult.getMsg());
+
+        int failedNumber = 0;
+        List<InvoiceReceivableExportExcelVo> failedExcel = new ArrayList<>();
+        // 只存储需要【修改】的数据
+        List<InsPlyIncome> updateExcel = new ArrayList<>();
+        List<InsPlyIncome> insertExcel = new ArrayList<>();
+        // 存储导入成功的订单号
+        List<String> successOrderNoList = new ArrayList<>();
+
+        // 校验Excel内部保单号重复
+        Set<String> existPolicyNoSet = new HashSet<>();
+        Set<String> repeatPolicyNoSet = new HashSet<>();
+        Set<String> existCompanyIdSet = new HashSet<>();
+
+        for (InvoiceReceivableExportExcelVo vo : receivableExportExcelVos) {
+            String policyNo = vo.getJqPolicyNo();
+            if (existPolicyNoSet.contains(policyNo)) {
+                repeatPolicyNoSet.add(policyNo);
+            } else {
+                existPolicyNoSet.add(policyNo);
+            }
+            existCompanyIdSet.add(vo.getCompanyId());
+        }
+
+        // 导入只能一个保司
+        if (existCompanyIdSet.size() > 1) {
+            throw new SystemException("导入数据不能包含多个保险公司");
+        }
+
+        // 处理数据
+        for (InvoiceReceivableExportExcelVo vo : receivableExportExcelVos) {
+            // 1. 空数据校验
+            ImportResultVo resultVo = vo.checkEmpty();
+            if (!resultVo.isSuccess()) {
+                failedNumber++;
+                vo.setErrorMessage(resultVo.getMessage());
+                failedExcel.add(vo);
+                continue;
+            }
+
+            // 2. Excel内部保单号重复
+            if (repeatPolicyNoSet.contains(vo.getJqPolicyNo())) {
+                failedNumber++;
+                vo.setErrorMessage("保单号重复");
+                failedExcel.add(vo);
+                continue;
+            }
+
+            // 查询数据库中是否已存在该协议
+            PtlAgreement ptlAgreement = ptlAgreementMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>()
+                    .eq(PtlAgreement::getAgreementCode, vo.getAgreementCode())
+                    .eq(PtlAgreement::getAgreementType, vo.getAgreementType()));
+
+            // 数据库不存在 → 直接失败
+            if (Objects.isNull(ptlAgreement)) {
+                failedNumber++;
+                vo.setErrorMessage("协议编码在协议中不存在");
+                failedExcel.add(vo);
+                continue;
+            }
+
+            // 查询数据库中是否已存在该保单号
+            InsPlyIncome existIncome = baseMapper.selectOne(new LambdaQueryWrapper<InsPlyIncome>()
+                    .eq(InsPlyIncome::getJqPolicyNo, vo.getJqPolicyNo()));
+
+            // 封装修改数据
+            InsPlyIncome insPlyIncome = new InsPlyIncome();
+            insPlyIncome.setId(IdGenerate.nextId());
+            insPlyIncome.setLicenseNo(vo.getLicenseNo());
+            insPlyIncome.setJqPolicyNo(vo.getJqPolicyNo());
+            insPlyIncome.setJqSuperviseCostsProportion(vo.getJqSuperviseCostsProportion());
+            insPlyIncome.setJqOtherCostsProportion(vo.getJqOtherCostsProportion());
+            insPlyIncome.setSyPolicyNo(vo.getSyPolicyNo());
+            insPlyIncome.setSySuperviseCostsProportion(vo.getSySuperviseCostsProportion());
+            insPlyIncome.setSyOtherCostsProportion(vo.getSyOtherCostsProportion());
+            insPlyIncome.setJyPolicyNo(vo.getJyPolicyNo());
+            insPlyIncome.setJySuperviseCostsProportion(vo.getJySuperviseCostsProportion());
+            insPlyIncome.setJyOtherCostsProportion(vo.getJyOtherCostsProportion());
+            // 签单时间
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            insPlyIncome.setSigningTime(LocalDateTime.parse(vo.getSigningTime(), formatter));
+            // 协议编号
+            insPlyIncome.setAgreementId(ptlAgreement.getId());
+            insPlyIncome.setAgreementName(ptlAgreement.getAgreementName());
+            insPlyIncome.setAgreementType(ptlAgreement.getAgreementType().toString());
+            // 险种编号
+            insPlyIncome.setProductId(vo.getProductId());
+            // 险种名称
+            insPlyIncome.setProductName(vo.getProductName());
+            // 被保险人姓名
+            insPlyIncome.setInsuredPerson(vo.getInsuredPerson());
+
+            // 数据库不存在 → 直接失败
+            if (Objects.isNull(existIncome)) {
+                // 加入修改列表
+                // 机构id
+                insPlyIncome.setDeptId(baseController.getUserDeptId());
+                insPlyIncome.setCompanyId(vo.getCompanyId());
+                insPlyIncome.setOrderNo(vo.getOrderNo());
+                insertExcel.add(insPlyIncome);
+                // 新增成功,记录订单号
+                successOrderNoList.add(vo.getOrderNo());
+            }else{
+                // 数据库已存在 → 继续后续校验
+                // 判断已开票 / 已结算
+                String settlementFlag = "1";
+                if (settlementFlag.equals(existIncome.getSuperviseSettlement()) || settlementFlag.equals(existIncome.getOtherSettlement())
+                        || settlementFlag.equals(existIncome.getJySuperviseSettlement()) || settlementFlag.equals(existIncome.getJyOtherSettlement())
+                        || settlementFlag.equals(existIncome.getPlatformSuperviseSettlement()) || settlementFlag.equals(existIncome.getPlatformOtherSettlement())) {
+                    failedNumber++;
+                    vo.setErrorMessage("应收数据已结算");
+                    failedExcel.add(vo);
+                    continue;
+                }
+
+                insPlyIncome.setId(existIncome.getId());
+                // 加入修改列表
+                updateExcel.add(insPlyIncome);
+                // 更新成功,记录订单号
+                successOrderNoList.add(vo.getOrderNo());
+            }
+        }
+
+        // 执行批量更新
+        if (CollUtil.isNotEmpty(updateExcel)) {
+            baseMapper.updateById(updateExcel);
+        }else{
+            baseMapper.insert(insertExcel);
+        }
+
+        // ===================== 生成失败数据下载链接 =====================
+        String failFileUrl = "";
+        if (CollUtil.isNotEmpty(failedExcel)) {
+            failFileUrl = exportBaseService.upLoadFile(
+                    InvoiceReceivableExportExcelVo.class,
+                    failedExcel,
+                    "平台协议应收-导入失败-" + Instant.now()
+            );
+        }
+
+        // 返回结果
+        importExcelResultVo.setFailedData(failedExcel);
+        importExcelResultVo.setFailFileUrl(failFileUrl);
+        importExcelResultVo.setSuccessNumber(CollUtil.isNotEmpty(updateExcel) ? updateExcel.size() : insertExcel.size());
+        importExcelResultVo.setFailedNumber(failedNumber);
+        // 导出成功的orderNos
+        importExcelResultVo.setOrderNos(successOrderNoList);
+
+        return importExcelResultVo;
+    }
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -1067,9 +1341,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                 List<String> incomeIds = new ArrayList<>();
                 insPlyIncomeInvoiceLinkMapper.selectList(new LambdaQueryWrapper<InsPlyIncomeInvoiceLink>()
                                 .eq(InsPlyIncomeInvoiceLink::getInvoiceId, settlementVo.getInvoicingId()))
-                        .forEach(item -> {
-                            incomeIds.add(item.getIncomeId());
-                        });
+                        .forEach(item -> incomeIds.add(item.getIncomeId()));
                 // 判断是需要更新哪个字段
                 this.updateIncomeSettlementStatus(insPlyIncomeInvoice.getInvoiceType(), incomeIds);
             }else{
@@ -1097,8 +1369,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             EasyExcel.read(inputStream, SuperviseExcelVo.class, listener)
                     .sheet()
                     .doRead();
-            List<SuperviseExcelVo> dataList = listener.getDataList();
-            return dataList;
+            return listener.getDataList();
         } catch (Exception e) {
             log.error("导入excel异常。",e);
             return null;
@@ -1112,10 +1383,9 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             EasyExcel.read(inputStream, OtherExcelVo.class, listener)
                     .sheet()
                     .doRead();
-            List<OtherExcelVo> dataList = listener.getDataList();
-            return dataList;
+            return listener.getDataList();
         } catch (Exception e) {
-            e.printStackTrace();
+            log.error("importOtherExcel异常",e);
             return null;
         }
     }
@@ -1127,10 +1397,22 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             EasyExcel.read(inputStream, ReceivableExportExcelVo.class, listener)
                     .sheet()
                     .doRead();
-            List<ReceivableExportExcelVo> dataList = listener.getDataList();
-            return dataList;
+            return listener.getDataList();
+        } catch (Exception e) {
+            log.info("importReceivableExcel异常",e);
+            return null;
+        }
+    }
+
+    public List<InvoiceReceivableExportExcelVo> importInvoiceReceivableExcel(MultipartFile file) {
+        InvoiceReceivbleExcelListener listener = new InvoiceReceivbleExcelListener();
+        try (InputStream inputStream = file.getInputStream()) {
+            EasyExcel.read(inputStream, InvoiceReceivableExportExcelVo.class, listener)
+                    .sheet()
+                    .doRead();
+            return listener.getDataList();
         } catch (Exception e) {
-            e.printStackTrace();
+            log.error("importInvoiceReceivableExcel异常",e);
             return null;
         }
     }
@@ -1142,10 +1424,9 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             EasyExcel.read(inputStream, OtherExcelVo.class, listener)
                     .sheet()
                     .doRead();
-            List<JyExcelVo> dataList = listener.getDataList();
-            return dataList;
+            return listener.getDataList();
         } catch (Exception e) {
-            e.printStackTrace();
+            log.info("importJyExcel异常",e);
             return null;
         }
     }
@@ -1576,14 +1857,14 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             }
             insOrders.add(insPlyIncomeSource.getOrderNo());
             if (Objects.nonNull(batchModifyVo.getJqSuperviseCostsProportion()) && batchModifyVo.getJqSuperviseCostsProportion().compareTo(BigDecimal.ZERO) > 0) {
-                BigDecimal superviseReceivablePremium = calcReceivableAmount(new BigDecimal(Objects.toString(insPlyIncomeSource.getJqPremium(),"0") ), batchModifyVo.getJqSuperviseCostsProportion());
+                BigDecimal superviseReceivablePremium = BigDecimalUtil.multiply(new BigDecimal(Objects.toString(insPlyIncomeSource.getJqPremium(),"0") ), batchModifyVo.getJqSuperviseCostsProportion());
                 baseMapper.update(null, new LambdaUpdateWrapper<InsPlyIncome>()
                         .set(InsPlyIncome::getJqSuperviseCostsProportion, batchModifyVo.getJqSuperviseCostsProportion())
                         .set(InsPlyIncome::getJqSuperviseCostsPremiums, superviseReceivablePremium)
                         .in(InsPlyIncome::getId, batchModifyVo.getIncomeIds()));
             }
             if (Objects.nonNull(batchModifyVo.getSySuperviseCostsProportion()) && batchModifyVo.getSySuperviseCostsProportion().compareTo(BigDecimal.ZERO) > 0) {
-                BigDecimal otherReceivablePremium = calcReceivableAmount(new BigDecimal(Objects.toString(insPlyIncomeSource.getSyPremium(),"0")), batchModifyVo.getSySuperviseCostsProportion());
+                BigDecimal otherReceivablePremium = BigDecimalUtil.multiply(new BigDecimal(Objects.toString(insPlyIncomeSource.getSyPremium(),"0")), batchModifyVo.getSySuperviseCostsProportion());
                 baseMapper.update(null, new LambdaUpdateWrapper<InsPlyIncome>()
                         .set(InsPlyIncome::getSySuperviseCostsProportion, batchModifyVo.getSySuperviseCostsProportion())
                         .set(InsPlyIncome::getSySuperviseCostsPremiums, otherReceivablePremium)
@@ -1613,13 +1894,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         return true;
     }
 
-    @Override
-    public BigDecimal calcReceivableAmount(BigDecimal premium, BigDecimal ratio) {
-        if(premium==null||ratio==null) {
-            return BigDecimal.ZERO;
-        }
-        return premium.multiply(ratio);
-    }
+
 
     @Override
     public Page<InsPlyIncome> getPlatFormReceivableList(ReceivableQueryVo receivableQueryVo) {
@@ -1680,8 +1955,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
 
     @Override
     public List<InsPlyIncomeInvoiceSettlement> getInvoiceRecordDetail(String id) {
-        List<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlements = insPlyIncomeInvoiceSettlementMapper.selectList(new LambdaQueryWrapper<InsPlyIncomeInvoiceSettlement>().eq(InsPlyIncomeInvoiceSettlement::getInvoiceId, id));
-        return insPlyIncomeInvoiceSettlements;
+        return insPlyIncomeInvoiceSettlementMapper.selectList(new LambdaQueryWrapper<InsPlyIncomeInvoiceSettlement>().eq(InsPlyIncomeInvoiceSettlement::getInvoiceId, id));
     }
 
     private void verifyUploadPath() throws IOException {
@@ -1695,8 +1969,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     /**
      * 导出应收手续费数据 (车险)
      *
-     * @param receivableQueryVo
-     * @return
+     * @param receivableQueryVo 导出数据的筛选条件
      */
     @Override
     public void exportSuperviseExcel(ReceivableQueryVo receivableQueryVo) {
@@ -1754,8 +2027,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     /**
      * 应收手续费结算记录
      *
-     * @param settlementQueryVo
-     * @return
+     * @param settlementQueryVo 查询条件
+     * @return Page<ExportSuperviseSettlementExcelDto>
      */
     @Override
     public Page<ExportSuperviseSettlementExcelDto> superviseSettlementExcel(Page page, SettlementQueryVo settlementQueryVo) {
@@ -1771,8 +2044,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     /**
      * 平台协议结算记录
      *
-     * @param settlementQueryVo
-     * @return
+     * @param settlementQueryVo 查询条件
+     * @return Page<ExportSuperviseSettlementExcelDto>
      */
     @Override
     public Page<ExportSuperviseSettlementExcelDto> platformSettlementExcel(Page page, SettlementQueryVo settlementQueryVo) {

+ 62 - 35
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysAmountAuditingServiceImpl.java

@@ -1,12 +1,15 @@
 package com.jzg.organization.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.base.StateResult;
+import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.*;
 import com.jzg.commons.entity.po.SysAmountAuditing;
 import com.jzg.commons.entity.po.SysUserAccount;
@@ -14,6 +17,7 @@ import com.jzg.commons.entity.po.SysUserJzgInfo;
 import com.jzg.commons.entity.vo.AmountAuditVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.AssertionUtils;
+import com.jzg.commons.util.BigDecimalUtil;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.organization.mapper.SysAmountAuditingMapper;
 import com.jzg.organization.service.SysAmountAuditingService;
@@ -24,6 +28,8 @@ import com.jzg.organization.state.AuditState;
 import com.jzg.organization.state.listener.AuditStateListener;
 import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -38,11 +44,12 @@ import java.util.concurrent.TimeUnit;
 /**
 * @author dongxin
 * @description 针对表【sys_amount_auditing(提现申请表)】的数据库操作Service实现
-* @createDate 2025-07-11 11:05:25
+* @date 2025-07-11 11:05:25
 */
 @Service
 public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingMapper, SysAmountAuditing>
     implements SysAmountAuditingService {
+    private static final Logger log = LoggerFactory.getLogger(SysAmountAuditingServiceImpl.class);
 
     @Autowired
     private BaseController baseController;
@@ -88,8 +95,14 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
         return bigDecimal;
     }
 
+    /**
+     * 领取提现申请
+     *
+     * @param id 提现申请的序号
+     * @param receiveUser 领取人
+     */
     @Override
-    public void auditReceive(String id) {
+    public void auditReceive(String id, String receiveUser) {
         SysAmountAuditing audit = this.getById(id);
         if(audit.getAuditingStatus() > 0){
             if(audit.getAuditingStatus() == 1){
@@ -97,33 +110,30 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
             }else{
                 AssertionUtils.isFail(true, "提现已驳回请刷新列表");
             }
-            // 未审核
+        }
+        // 未审核
+        if(StringUtils.isNotBlank(audit.getReceiveUser())){
+            if(receiveUser.equals(audit.getReceiveUser())){
+                // redis 锁定按钮
+                RBucket<Object> bucket = redissonClient.getBucket(AMOUNT_LOCK_PREFIX + id);
+                bucket.set(1, 10, TimeUnit.MINUTES);
+            }else{
+                AssertionUtils.isFail(true, "提现申请已被" + audit.getReceiveUser() + "领取!");
+            }
         }else{
-            String userName = baseController.getUserName();
-            if(StringUtils.isNotBlank(audit.getReceiveUser())){
-                if(userName.equals(audit.getReceiveUser())){
-                    // redis 锁定按钮
-                    RBucket<Object> bucket = redissonClient.getBucket(AMOUNT_LOCK_PREFIX + id);
-                    bucket.set(1, 10, TimeUnit.MINUTES);
-                }else{
-                    AssertionUtils.isFail(true, "提现申请已被" + audit.getReceiveUser() + "领取!");
-                }
+            LambdaQueryWrapper<SysAmountAuditing> wrapper = new LambdaQueryWrapper<>();
+            wrapper.like(SysAmountAuditing::getReceiveUser, receiveUser);
+            long count = this.count(wrapper);
+            if(count >= 10){
+                AssertionUtils.isFail(true, "超出10次领取限制,请先审核后再领取订单!");
             }else{
-                LambdaQueryWrapper<SysAmountAuditing> wrapper = new LambdaQueryWrapper<>();
-                wrapper.like(SysAmountAuditing::getReceiveUser, userName);
-                long count = this.count(wrapper);
-                if(count >= 10){
-                    AssertionUtils.isFail(true, "超出10次领取限制,请先审核后再领取订单!");
-                }else{
-                    // 领取订单
-                    audit.setReceiveUser(userName);
-                    audit.setReceiveTime(LocalDateTime.now());
-                    this.updateById(audit);
-
-                    // redis 锁定按钮
-                    RBucket<Object> bucket = redissonClient.getBucket(AMOUNT_LOCK_PREFIX + id);
-                    bucket.set(1, 10, TimeUnit.MINUTES);
-                }
+                // 领取订单
+                audit.setReceiveUser(receiveUser);
+                audit.setReceiveTime(LocalDateTime.now());
+                this.updateById(audit);
+                // redis 锁定按钮
+                RBucket<Object> bucket = redissonClient.getBucket(AMOUNT_LOCK_PREFIX + id);
+                bucket.set(1, 10, TimeUnit.MINUTES);
             }
         }
     }
@@ -155,7 +165,12 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void verifyAmount(AmountAuditEditParam param) {
+    public HttpResult<String> verifyAmount(AmountAuditEditParam param) {
+        String userName = baseController.getUserName();
+        log.info("用户开始进行付款操作。userName=[{}],param=[{}]",userName,JSONUtil.toJsonStr(param));
+        if(StrUtil.isEmpty(param.getAccountId())){
+            return HttpResult.error("付款账户不能为空");
+        }
         SysAmountAuditing audit = this.getById(param.getId());
         if(audit.getAuditingStatus() > 0){
             if(audit.getAuditingStatus() == 1){
@@ -167,7 +182,7 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
         if(StringUtils.isBlank(audit.getReceiveUser())){
             AssertionUtils.isFail(true, "请领取提现申请后再进行付款,返回待付款提现申请列表!");
         }
-        String userName = baseController.getUserName();
+
         if (!userName.equals(audit.getReceiveUser())) {
             AssertionUtils.isFail(true, "申请已被"+audit.getReceiveUser()+"领取返回待付款提现申请列表!");
         }
@@ -185,6 +200,7 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
                 AssertionUtils.isFail(audit.getAmount().compareTo(audit.getBalanceAmount()) > 0, "提现金额大于账户余额!");
 
                 if(userAccount.getSumAmount().compareTo(audit.getAmount()) < 0){
+                    log.info("账户金额少于提现金额,请审核账户。 userId=[{}}], userAccount.getSumAmount()=[{}],audit.getAmount()=[{}]",userAccount.getUserId(), userAccount.getSumAmount(), audit.getAmount());
                     throw new SystemException("账户金额少于提现金额,请审核账户");
                 }
                 userAccount.setSumAmount(userAccount.getSumAmount().subtract(audit.getAmount()));
@@ -198,10 +214,13 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
         }else{
             AssertionUtils.isFail(true, "提现申请未领取");
         }
+        return HttpResult.ok("提现审核成功");
     }
 
     @Override
     public void rejectAmount(AmountAuditRejectParam param) {
+        String userName = baseController.getUserName();
+        log.info("用户[{}]驳回体现申请. param=[{}]",userName,JSONUtil.toJsonStr(param));
         SysAmountAuditing audit = this.getById(param.getId());
         if(audit.getAuditingStatus() > 0){
             if(audit.getAuditingStatus() == 1){
@@ -213,7 +232,7 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
         if(StringUtils.isBlank(audit.getReceiveUser())){
             AssertionUtils.isFail(true, "请领取任务后再进行审核关闭弹窗,刷新列表");
         }
-        String userName = baseController.getUserName();
+
         if (!userName.equals(audit.getReceiveUser())) {
             AssertionUtils.isFail(true, "申请已被"+audit.getReceiveUser()+"领取返回待付款提现申请列表!");
         }
@@ -234,6 +253,7 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
 
     @Override
     public Page<AmountAuditVo> myPayment(AmountAuditParam param) {
+        log.info("应付账款-我的付款。param=[{}]", JSONUtil.toJsonStr(param));
         Page<AmountAuditVo> amountAuditVoPage = baseMapper.queryPaymentPage(param.getPage(), param, baseController.getUserName());
         return amountAuditVoPage;
     }
@@ -246,17 +266,24 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
 
     @Override
     public Boolean applyWithdraw(ApplyWithdrawParam applyWithdrawParam) {
-
+        String userName = baseController.getUserName();
+        String userId = baseController.getUserId();
+        log.info("业务员提交提现申请:userName=[{}],userId=[{}],applyWithdrawParam=[{}]",userId, userName, JSONUtil.toJsonStr(applyWithdrawParam));
         if(applyWithdrawParam.getWithdrawAmount().compareTo(BigDecimal.ZERO) <= 0){
+            log.info("业务员[{}]提现提现金额不能为负值[{}]",userName, applyWithdrawParam.getWithdrawAmount());
             throw new SystemException("提现金额错误,请重新输入");
         }
-
-        SysUserAccount sysUserAccount = userAccountService.queryByUserId(baseController.getUserId());
+        SysUserAccount sysUserAccount = userAccountService.queryByUserId(userId);
         AssertionUtils.isFail(Objects.isNull(sysUserAccount),"找不到用户");
 
+        // sys_amount_auditing 表中的 balance_amount 字段,表示冻结的金额, 避免重复提现
+        // 查询处于提现进程中的申请记录。 汇总其中的冻结金额
+        List<SysAmountAuditing> amountAuditings =  baseMapper.queryPaymentByUserId(userId,0);
+        BigDecimal freezAmount = amountAuditings.stream()
+                .filter(action-> action.getAuditingStatus() != null &&  0 == action.getAuditingStatus())
+                .map(SysAmountAuditing::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
         // 当前用户的余额
-        BigDecimal sumAmount = sysUserAccount.getSumAmount();
-
+        BigDecimal sumAmount =BigDecimalUtil.add(freezAmount,sysUserAccount.getSumAmount());
         if(sumAmount.compareTo(applyWithdrawParam.getWithdrawAmount()) < 0){
             throw new SystemException("无法提现,请检查当前账户余额");
         }

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

@@ -80,7 +80,7 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
      */
     @Override
     public Page<SysUserAccountVo> accountList(SysUserAccountPageParam param) {
-        log.info("查询账户列表:param=[{}]", JSONUtil.toJsonStr(param));
+        log.info("查询账户列表(应付概览页面):param=[{}]", JSONUtil.toJsonStr(param));
         return baseMapper.accountList(param.getPage(), param);
     }
 

+ 0 - 1
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgInfoBankCardServiceImpl.java

@@ -65,7 +65,6 @@ public class SysUserJzgInfoBankCardServiceImpl extends ServiceImpl<SysUserJzgInf
         log.info("查询业务员账户:sysUserJzgInfoBankCardVo=[{}]", JSONUtil.toJsonStr(sysUserJzgInfoBankCardVo));
         Page<SysUserJzgInfoBankCardDto> pageList = sysUserJzgInfoBankCardMapper.getBankCardPageList(page, sysUserJzgInfoBankCardVo);
         pageList.getRecords().forEach(sysUserJzgInfoBankCardDto -> {
-
             if (sysUserJzgInfoBankCardDto.getFileId() != null) {
                 String cardFileId = sysUserJzgInfoBankCardDto.getFileId();
                 SysUploadFiles sysUploadFiles = sysUploadFilesMapper.selectById(cardFileId);

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

@@ -48,6 +48,7 @@ import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
@@ -927,6 +928,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             }
             sysUserJzgInfoBankCard.setDefault(true);
         }
+        sysUserJzgInfoBankCard.setApplyTime(LocalDateTime.now().toString());
         sysUserJzgInfoBankCardService.save(sysUserJzgInfoBankCard);
         // 添加银行卡记录
         SysUserJzgInfoBankCardRecord sysUserJzgInfoBankCardRecord = new SysUserJzgInfoBankCardRecord(sysUserJzgInfoBankCard.getId(), "添加新卡");

+ 0 - 2
tenant/organization/src/main/resources/application.yml

@@ -106,7 +106,6 @@ tenant:
     - t
   ignoreLoginNames:
   ignoreFunction:
-    - /userBankCard/queryUserBankCardList
 
 data-scope:
   tables:
@@ -119,7 +118,6 @@ data-scope:
     - getTeamUserPage
     - getOrganizationUser
     - deleteOrganizationUser
-    - getBankCardPageList
 
 
 logging:

+ 15 - 2
tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

@@ -242,9 +242,12 @@
         iop.jy_policy_no, -- 非车险保单号
         io.company_name,
         io.company_id,
-        io.create_time,
+        ipi.create_time,
+        ipi.create_by,
+        ipi.update_time,
+        ipi.update_by,
         io.docking_person,
-        eic.name_simple as companyNameSimple
+        eic.name_simple as companyNameSimple, ipi.contact_person , ipi.contact_person_phone
         FROM
         ins_ply_income ipi
         LEFT JOIN ins_orders io ON ipi.order_no = io.id
@@ -1105,6 +1108,15 @@
             eic.id
     </select>
 
+    <!-- 根据应收订单的编号,查询应收记录 lipf 2026年5月30日10:25:14 -->
+    <select id="queryIncomeByIds" resultType="com.jzg.commons.entity.finance.po.InsPlyIncome">
+        SELECT ipi.*  FROM ins_ply_income ipi WHERE
+        ipi.id IN
+        <foreach collection="invoicingVo.incomeIds" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+
     <select id="invoicingCheck" resultType="java.lang.Integer">
         SELECT count(id) AS count
         FROM ins_ply_income_invoice_link
@@ -1154,6 +1166,7 @@
         SELECT
             ipii.id,
             ipii.company_id,
+            ipii.invoice_no,
             ipii.invoice_type,
             -- 应收项
             ipii.invoice_risk_type,

+ 29 - 5
tenant/organization/src/main/resources/mapper/SysAmountAuditingMapper.xml

@@ -6,7 +6,6 @@
 
     <resultMap id="BaseResultMap" type="com.jzg.commons.entity.po.SysAmountAuditing">
             <id property="id" column="id" jdbcType="BIGINT"/>
-            <result property="bankNumber" column="bank_number" jdbcType="VARCHAR"/>
             <result property="amount" column="amount" jdbcType="DECIMAL"/>
             <result property="balanceAmount" column="balance_amount" jdbcType="DECIMAL"/>
             <result property="userId" column="user_id" jdbcType="VARCHAR"/>
@@ -143,10 +142,23 @@
 
     <select id="queryPaymentPage" resultType="com.jzg.commons.entity.vo.AmountAuditVo">
         SELECT
-        saa.id,suji.name as name, su.mobile as mobile,suji.type_attr as attrType,
-        sujim.name as managerName,sum.mobile as managerMobile,saa.create_time as createTime,
-        saa.amount, saa.balance_amount as balanceAmount,saa.account_name AS accountName,
-        saa.bank_card_num as bankCardNum, saa.bank_name as bankName, saa.bank_num as bankNum
+        saa.id,
+        saa.create_by as withdrawal_requester,
+        saa.create_time as withdrawal_request_time,
+        saa.voucher_id,
+        saa.auditing_time,
+        suji.name AS name,
+        su.mobile AS mobile,
+        suji.type_attr AS attrType,
+        sujim.name AS managerName ,
+        sum.mobile AS managerMobile,
+        saa.create_time AS createTime,
+        saa.amount,
+        saa.balance_amount AS balanceAmount,
+        saa.account_name AS accountName ,
+        saa.bank_card_num AS bankCardNum,
+        saa.bank_name AS bankName,
+        saa.bank_num AS bankNum
         FROM sys_amount_auditing saa
         LEFT JOIN sys_user_jzg_info suji on saa.user_id = suji.user_id
         LEFT JOIN sys_user su on su.id = saa.user_id
@@ -218,4 +230,16 @@
             </if>
         ORDER BY saa.create_time desc
     </select>
+    <select id="queryPaymentByUserId" resultType="com.jzg.commons.entity.po.SysAmountAuditing">
+        SELECT saa.*
+        FROM sys_amount_auditing saa
+        <where>
+            <if test="userId != null and userId != ''">
+                and saa.user_id  = #{userId}
+            </if>
+            <if test="auditingStatus != null">
+                AND saa.auditing_status = #{auditingStatus}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 4 - 2
tenant/organization/src/main/resources/mapper/SysUserAccountMapper.xml

@@ -31,7 +31,8 @@
             ROUND(SUM(sua.sum_amount_unpaid), 2) AS notPaidSum                   -- 未付总计
         FROM
             sys_user_account sua
-            LEFT JOIN sys_user_jzg_info suji on suji.user_id = sua.user_id
+            INNER JOIN sys_user_jzg_info suji on suji.user_id = sua.user_id
+            INNER JOIN sys_user su on su.id = suji.user_id
         <where>
             <if test="param.salesman != null and param.salesman != ''">
                 and (su.username = #{param.salesman} or su.mobile = #{param.salesman})
@@ -47,7 +48,7 @@
     </select>
     <select id="accountList" resultType="com.jzg.commons.entity.vo.SysUserAccountVo">
         SELECT
-        sua.id,suji.name,su.mobile, suji.type_attr as attrType, so.name as organizationName,
+        sua.id, suji.user_id , suji.system_code, suji.name,su.mobile, suji.type_attr as attrType, so.name as organizationName,
         sd.name as deptName, sua.sum_amount as sumAmount, sua.sum_amount_paid as sumAmountPaid,
         sua.sum_amount_unpaid as sumAmountUnpaid, suji.work_number as workNumber,
         ( select uu.name from sys_user_jzg_info uu where uu.id = suji.leader_id ) as leaderName
@@ -59,6 +60,7 @@
         LEFT JOIN sys_organization_user_link soul on soul.user_id = suji.user_id
         LEFT JOIN sys_organization so on soul.organization_id = so.id
         <where>
+            suji.system_code is not null
             <if test="param.salesman != null and param.salesman != ''">
                 and (su.username = #{param.salesman} or su.mobile = #{param.salesman})
             </if>

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

@@ -36,7 +36,7 @@
 
 
     <select id="getBankCardPageList" resultType="com.jzg.commons.entity.dto.SysUserJzgInfoBankCardDto">
-        select
+        select suji.system_code,
         sujibc.*,
         suji.name as name,
         suji.work_number as workNumber,
@@ -50,7 +50,7 @@
         LEFT JOIN sys_system ss ON ss.sys_code = sujibc.system_code
         LEFT JOIN sys_user su ON su.id = suji.user_id
         where
-        1=1
+            suji.system_code  is not null
             and sujibc.is_delete = '0'
         <if test="sysUserJzgInfoBankCardVo.salesman != null and sysUserJzgInfoBankCardVo.salesman != ''">
             and suji.name = #{sysUserJzgInfoBankCardVo.salesman}