فهرست منبع

平台协议导入应收功能后台重构

lipf 1 ماه پیش
والد
کامیت
f0f5c4da6a
26فایلهای تغییر یافته به همراه902 افزوده شده و 749 حذف شده
  1. 0 15
      commons/src/main/java/com/jzg/commons/entity/finance/vo/ImportResultVo.java
  2. 0 230
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceReceivableExportExcelVo4Platform.java
  3. 0 228
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceReceivableExportExcelVo4Private.java
  4. 12 14
      commons/src/main/java/com/jzg/commons/entity/finance/vo/ReceivableExportExcelVo.java
  5. 13 11
      commons/src/main/java/com/jzg/commons/entity/finance/vo/SuperviseExcelVo.java
  6. 52 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ExcelContent4Platform.java
  7. 66 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ExcelContent4Private.java
  8. 198 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ImportContentExt.java
  9. 29 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ImportResultVo.java
  10. 1 1
      commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ImportUpdateExcelResultVo.java
  11. 7 7
      commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/JyExcelVo.java
  12. 9 9
      commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/OtherExcelVo.java
  13. 4 0
      commons/src/main/java/com/jzg/commons/entity/quote/vo/orders/InsOrdersVo.java
  14. 1 0
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml
  15. 1 0
      tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java
  16. 25 0
      tenant/organization/src/main/java/com/jzg/organization/excel/listener/InvoiceReceivbleExcel4PlatformListener.java
  17. 28 0
      tenant/organization/src/main/java/com/jzg/organization/excel/listener/InvoiceReceivbleExcel4PrivateListener.java
  18. 0 26
      tenant/organization/src/main/java/com/jzg/organization/excel/listener/InvoiceReceivbleExcelListener.java
  19. 1 2
      tenant/organization/src/main/java/com/jzg/organization/excel/listener/JyExcelListener.java
  20. 3 5
      tenant/organization/src/main/java/com/jzg/organization/excel/listener/OtherExcelListener.java
  21. 10 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/InsOrdersPolicyMapper.java
  22. 10 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/InsPlyIncomeMapper.java
  23. 3 0
      tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java
  24. 50 201
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  25. 307 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/importincome/ImportIncomeServiceImpl.java
  26. 72 0
      tenant/organization/src/main/java/com/jzg/organization/service/importincome/ImportIncomeService.java

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

@@ -1,15 +0,0 @@
-package com.jzg.commons.entity.finance.vo;
-
-import lombok.Data;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * excel 导入结果的Vo
- */
-@Data
-public class ImportResultVo {
-
-    private boolean success;
-
-    private String message;
-}

+ 0 - 230
commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceReceivableExportExcelVo4Platform.java

@@ -1,230 +0,0 @@
-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 InvoiceReceivableExportExcelVo4Platform extends BaseModel  {
-
-    @Serial
-    private static final long serialVersionUID = 6263862008363938379L;
-
-
-    @Schema(description = "车牌号")
-    @ExcelProperty(value = "车牌号", index = 0)
-    private String licenseNo;
-
-    @Schema(description = "交强险保单号")
-    @ExcelProperty(value = "交强险保单号", index = 1)
-    private String jqPolicyNo;
-
-    @Schema(description = "商业险保单号")
-    @ExcelProperty(value = "商业险保单号", index = 2)
-    private String syPolicyNo;
-
-    @Schema(description = "非车险保单号")
-    @ExcelProperty(value = "非车险保单号", index = 3)
-    private String jyPolicyNo;
-
-
-
-    @Schema(description = "交强险入口比例")
-    @ExcelProperty(value = "交强险入口比例(%)", index = 4)
-    private String jqInletRatio;
-
-//    @Schema(description = "交强险手续费比例")
-//    @ExcelProperty(value = "交强险手续费比例(%)", index = 5)
-//    private String jqSuperviseCostsProportion;
-//
-//    @Schema(description = "交强险跟单费比例")
-//    @ExcelProperty(value = "交强险跟单费比例(%)", index = 6)
-//    private String jqOtherCostsProportion;
-
-
-    @Schema(description = "商业险入口比例")
-    @ExcelProperty(value = "商业险入口比例(%)", index = 5)
-    private String syInletRatio;
-
-//    @Schema(description = "商业险手续费比例")
-//    @ExcelProperty(value = "商业险手续费比例(%)", index = 8)
-//    private String sySuperviseCostsProportion;
-//
-//    @Schema(description = "商业险跟单费比例")
-//    @ExcelProperty(value = "商业险跟单费比例(%)", index = 9)
-//    private String syOtherCostsProportion;
-
-    @Schema(description = "非车险入口比例")
-    @ExcelProperty(value = "非车险入口比例(%)", index = 6)
-    private String jyInletRatio;
-
-//    @Schema(description = "非车险手续费比例")
-//    @ExcelProperty(value = "非车险手续费比例(%)", index = 11)
-//    private String jySuperviseCostsProportion;
-//
-//    @Schema(description = "非车险跟单费比例")
-//    @ExcelProperty(value = "非车险跟单费比例(%)", index = 12)
-//    private String jyOtherCostsProportion;
-
-
-    @Schema(description = "选中类型")
-    @ExcelIgnore
-    // 1 全部数据选中  2 选中部分数据
-    private String selectedType;
-
-
-
-    @Schema(description = "订单号")
-    @ExcelIgnore
-    private String orderNo;
-
-    @Schema(description = "id")
-    @ExcelIgnore
-    private String id;
-
-    @Schema(description = "签单时间")
-    @ExcelIgnore
-    private String signingTime;
-
-    @Schema(description = "协议类型")
-    @ExcelIgnore
-    private String agreementType;
-
-
-    @Schema(description = "险种名称")
-    @ExcelIgnore
-//    @ExcelProperty(value = "险种名称", index = 3)
-    private String productName;
-
-    @Schema(description = "被保险人姓名")
-    @ExcelIgnore
-    private String insuredPerson;
-
-    @Schema(description = "公司名称")
-    @ExcelIgnore
-    private String companyName;
-
-    @Schema(description = "对接人")
-    @ExcelIgnore
-    private String contactPerson;
-
-    @Schema(description = "对接人手机号")
-    @ExcelIgnore
-    private String contactPersonPhone;
-
-    @Schema(description = "错误信息")
-    @ExcelIgnore
-    private String errorMessage;
-
-    public ImportResultVo checkEmpty(){
-        ImportResultVo resultVo = new ImportResultVo();
-        resultVo.setSuccess(false);
-        // 基础必填字段校验
-        if (StrUtil.isBlank(this.getSigningTime())) {
-            resultVo.setMessage("签单时间不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getOrderNo())) {
-            resultVo.setMessage("订单号不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getLicenseNo())) {
-            resultVo.setMessage("车牌号不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getProductName())) {
-            resultVo.setMessage("险种名称不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getInsuredPerson())) {
-            resultVo.setMessage("被保险人姓名不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getAgreementType())) {
-            resultVo.setMessage("协议类型不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getContactPerson())) {
-            resultVo.setMessage("对接人不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getAgreementType())) {
-            resultVo.setMessage("对接人手机号不能为空");
-            return resultVo;
-        }
-
-        // 交强险:有保单号 → 手续费、跟单费必填
-//        if (StrUtil.isNotBlank(this.getJqPolicyNo())
-//                || StrUtil.isNotBlank(this.getJqSuperviseCostsProportion())
-//                || StrUtil.isNotBlank(this.getJqOtherCostsProportion())) {
-//            if (StrUtil.isBlank(this.getJqPolicyNo())) {
-//                resultVo.setMessage("交强险保单号不能为空");
-//                return resultVo;
-//            }
-//            if (StrUtil.isBlank(this.getJqSuperviseCostsProportion())) {
-//                resultVo.setMessage("交强险手续费比例不能为空");
-//                return resultVo;
-//            }
-//            if (StrUtil.isBlank(this.getJqOtherCostsProportion())) {
-//                resultVo.setMessage("交强险跟单费比例不能为空");
-//                return resultVo;
-//            }
-//        }
-
-        // 商业险:有保单号 → 手续费、跟单费必填
-//        if (StrUtil.isNotBlank(this.getSyPolicyNo())
-//                || StrUtil.isNotBlank(this.getSySuperviseCostsProportion())
-//                || StrUtil.isNotBlank(this.getSyOtherCostsProportion())) {
-//            if (StrUtil.isBlank(this.getJqPolicyNo())) {
-//                resultVo.setMessage("商业险保单号不能为空");
-//                return resultVo;
-//            }
-//            if (StrUtil.isBlank(this.getSySuperviseCostsProportion())) {
-//                resultVo.setMessage("商业险手续费比例不能为空");
-//                return resultVo;
-//            }
-//            if (StrUtil.isBlank(this.getSyOtherCostsProportion())) {
-//                resultVo.setMessage("商业险跟单费比例不能为空");
-//                return resultVo;
-//            }
-//        }
-
-        // 非车险:有保单号 → 手续费、跟单费必填
-//        if (StrUtil.isNotBlank(this.getJyPolicyNo())
-//                || StrUtil.isNotBlank(this.getJySuperviseCostsProportion())
-//                || StrUtil.isNotBlank(this.getJyOtherCostsProportion())) {
-//            if (StrUtil.isBlank(this.getJqPolicyNo())) {
-//                resultVo.setMessage("非车险保单号不能为空");
-//                return resultVo;
-//            }
-//            if (StrUtil.isBlank(this.getJySuperviseCostsProportion())) {
-//                resultVo.setMessage("非车险手续费比例不能为空");
-//                return resultVo;
-//            }
-//            if (StrUtil.isBlank(this.getJyOtherCostsProportion())) {
-//                resultVo.setMessage("非车险跟单费比例不能为空");
-//                return resultVo;
-//            }
-//        }
-
-        if(Objects.isNull(resultVo.getMessage())){
-            resultVo.setSuccess(true);
-        }
-        return resultVo;
-    }
-
-}

+ 0 - 228
commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceReceivableExportExcelVo4Private.java

@@ -1,228 +0,0 @@
-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 InvoiceReceivableExportExcelVo4Private extends BaseModel  {
-
-    @Serial
-    private static final long serialVersionUID = 6263862008363938379L;
-
-
-    @Schema(description = "车牌号")
-    @ExcelProperty(value = "车牌号", index = 0)
-    private String licenseNo;
-
-    @Schema(description = "交强险保单号")
-    @ExcelProperty(value = "交强险保单号", index = 1)
-    private String jqPolicyNo;
-
-    @Schema(description = "商业险保单号")
-    @ExcelProperty(value = "商业险保单号", index = 2)
-    private String syPolicyNo;
-
-    @Schema(description = "非车险保单号")
-    @ExcelProperty(value = "非车险保单号", index = 3)
-    private String jyPolicyNo;
-
-
-
-//    @Schema(description = "交强险入口比例")
-//    @ExcelProperty(value = "交强险入口比例(%)", index = 4)
-//    private String jqInletRatio;
-
-    @Schema(description = "交强险手续费比例")
-    @ExcelProperty(value = "交强险手续费比例(%)", index = 4)
-    private String jqSuperviseCostsProportion;
-
-    @Schema(description = "交强险跟单费比例")
-    @ExcelProperty(value = "交强险跟单费比例(%)", index = 5)
-    private String jqOtherCostsProportion;
-
-
-//    @Schema(description = "商业险入口比例")
-//    @ExcelProperty(value = "商业险入口比例(%)", index = 7)
-//    private String syInletRatio;
-
-    @Schema(description = "商业险手续费比例")
-    @ExcelProperty(value = "商业险手续费比例(%)", index = 6)
-    private String sySuperviseCostsProportion;
-
-    @Schema(description = "商业险跟单费比例")
-    @ExcelProperty(value = "商业险跟单费比例(%)", index = 7)
-    private String syOtherCostsProportion;
-
-//    @Schema(description = "非车险入口比例")
-//    @ExcelProperty(value = "非车险入口比例(%)", index = 10)
-//    private String jyInletRatio;
-
-    @Schema(description = "非车险手续费比例")
-    @ExcelProperty(value = "非车险手续费比例(%)", index = 8)
-    private String jySuperviseCostsProportion;
-
-    @Schema(description = "非车险跟单费比例")
-    @ExcelProperty(value = "非车险跟单费比例(%)", index = 9)
-    private String jyOtherCostsProportion;
-
-
-    @Schema(description = "选中类型")
-    @ExcelIgnore
-    // 1 全部数据选中  2 选中部分数据
-    private String selectedType;
-
-    @Schema(description = "订单号")
-    @ExcelIgnore
-    private String orderNo;
-
-    @Schema(description = "id")
-    @ExcelIgnore
-    private String id;
-
-    @Schema(description = "签单时间")
-    @ExcelIgnore
-    private String signingTime;
-
-    @Schema(description = "协议类型")
-    @ExcelIgnore
-    private String agreementType;
-
-
-    @Schema(description = "险种名称")
-    @ExcelIgnore
-//    @ExcelProperty(value = "险种名称", index = 3)
-    private String productName;
-
-    @Schema(description = "被保险人姓名")
-    @ExcelIgnore
-    private String insuredPerson;
-
-    @Schema(description = "公司名称")
-    @ExcelIgnore
-    private String companyName;
-
-    @Schema(description = "对接人")
-    @ExcelIgnore
-    private String contactPerson;
-
-    @Schema(description = "对接人手机号")
-    @ExcelIgnore
-    private String contactPersonPhone;
-
-    @Schema(description = "错误信息")
-    @ExcelIgnore
-    private String errorMessage;
-
-    public ImportResultVo checkEmpty(){
-        ImportResultVo resultVo = new ImportResultVo();
-        resultVo.setSuccess(false);
-        // 基础必填字段校验
-        if (StrUtil.isBlank(this.getSigningTime())) {
-            resultVo.setMessage("签单时间不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getOrderNo())) {
-            resultVo.setMessage("订单号不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getLicenseNo())) {
-            resultVo.setMessage("车牌号不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getProductName())) {
-            resultVo.setMessage("险种名称不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getInsuredPerson())) {
-            resultVo.setMessage("被保险人姓名不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getAgreementType())) {
-            resultVo.setMessage("协议类型不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getContactPerson())) {
-            resultVo.setMessage("对接人不能为空");
-            return resultVo;
-        }
-        if (StrUtil.isBlank(this.getAgreementType())) {
-            resultVo.setMessage("对接人手机号不能为空");
-            return resultVo;
-        }
-
-        // 交强险:有保单号 → 手续费、跟单费必填
-        if (StrUtil.isNotBlank(this.getJqPolicyNo())
-                || StrUtil.isNotBlank(this.getJqSuperviseCostsProportion())
-                || StrUtil.isNotBlank(this.getJqOtherCostsProportion())) {
-            if (StrUtil.isBlank(this.getJqPolicyNo())) {
-                resultVo.setMessage("交强险保单号不能为空");
-                return resultVo;
-            }
-            if (StrUtil.isBlank(this.getJqSuperviseCostsProportion())) {
-                resultVo.setMessage("交强险手续费比例不能为空");
-                return resultVo;
-            }
-            if (StrUtil.isBlank(this.getJqOtherCostsProportion())) {
-                resultVo.setMessage("交强险跟单费比例不能为空");
-                return resultVo;
-            }
-        }
-
-        // 商业险:有保单号 → 手续费、跟单费必填
-        if (StrUtil.isNotBlank(this.getSyPolicyNo())
-                || StrUtil.isNotBlank(this.getSySuperviseCostsProportion())
-                || StrUtil.isNotBlank(this.getSyOtherCostsProportion())) {
-            if (StrUtil.isBlank(this.getJqPolicyNo())) {
-                resultVo.setMessage("商业险保单号不能为空");
-                return resultVo;
-            }
-            if (StrUtil.isBlank(this.getSySuperviseCostsProportion())) {
-                resultVo.setMessage("商业险手续费比例不能为空");
-                return resultVo;
-            }
-            if (StrUtil.isBlank(this.getSyOtherCostsProportion())) {
-                resultVo.setMessage("商业险跟单费比例不能为空");
-                return resultVo;
-            }
-        }
-
-        // 非车险:有保单号 → 手续费、跟单费必填
-        if (StrUtil.isNotBlank(this.getJyPolicyNo())
-                || StrUtil.isNotBlank(this.getJySuperviseCostsProportion())
-                || StrUtil.isNotBlank(this.getJyOtherCostsProportion())) {
-            if (StrUtil.isBlank(this.getJqPolicyNo())) {
-                resultVo.setMessage("非车险保单号不能为空");
-                return resultVo;
-            }
-            if (StrUtil.isBlank(this.getJySuperviseCostsProportion())) {
-                resultVo.setMessage("非车险手续费比例不能为空");
-                return resultVo;
-            }
-            if (StrUtil.isBlank(this.getJyOtherCostsProportion())) {
-                resultVo.setMessage("非车险跟单费比例不能为空");
-                return resultVo;
-            }
-        }
-
-        if(Objects.isNull(resultVo.getMessage())){
-            resultVo.setSuccess(true);
-        }
-        return resultVo;
-    }
-
-}

+ 12 - 14
commons/src/main/java/com/jzg/commons/entity/finance/vo/ReceivableExportExcelVo.java

@@ -2,12 +2,10 @@ package com.jzg.commons.entity.finance.vo;
 
 import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
-import com.jzg.commons.core.base.PageRequest;
+import com.jzg.commons.entity.finance.vo.importimcome.ImportResultVo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
-import java.math.BigDecimal;
-import java.util.List;
 import java.util.Objects;
 
 /**
@@ -150,37 +148,37 @@ public class ReceivableExportExcelVo {
         ImportResultVo resultVo = new ImportResultVo();
         resultVo.setSuccess(false);
         if(Objects.isNull(this.licenseNo) || Objects.equals(this.licenseNo,"")){
-            resultVo.setMessage("车牌号不能为空");
+            resultVo.addMessage("车牌号不能为空");
         }
         if(Objects.isNull(this.jqPolicyNo) || Objects.equals(this.jqPolicyNo,"")){
-            resultVo.setMessage("交强险保单号不能为空");
+            resultVo.addMessage("交强险保单号不能为空");
         }
         if(Objects.isNull(this.jqSuperviseCostsProportion) || Objects.equals(this.jqSuperviseCostsProportion,"")){
-            resultVo.setMessage("交强险手续费比例不能为空");
+            resultVo.addMessage("交强险手续费比例不能为空");
         }
         if(Objects.isNull(this.jqOtherCostsProportion) || Objects.equals(this.jqOtherCostsProportion,"")){
-            resultVo.setMessage("交强险跟单费比例不能为空");
+            resultVo.addMessage("交强险跟单费比例不能为空");
         }
         if(Objects.isNull(this.syPolicyNo) || Objects.equals(this.syPolicyNo,"")){
-            resultVo.setMessage("商业险保单号不能为空");
+            resultVo.addMessage("商业险保单号不能为空");
         }
         if(Objects.isNull(this.sySuperviseCostsProportion) || Objects.equals(this.sySuperviseCostsProportion,"")){
-            resultVo.setMessage("商业险手续费比例不能为空");
+            resultVo.addMessage("商业险手续费比例不能为空");
         }
         if(Objects.isNull(this.syOtherCostsProportion) || Objects.equals(this.syOtherCostsProportion,"")){
-            resultVo.setMessage("商业险跟单费比例不能为空");
+            resultVo.addMessage("商业险跟单费比例不能为空");
         }
         if(Objects.isNull(this.jyPolicyNo) || Objects.equals(this.jyPolicyNo,"")){
-            resultVo.setMessage("驾意险保单号不能为空");
+            resultVo.addMessage("驾意险保单号不能为空");
         }
         if(Objects.isNull(this.jySuperviseCostsProportion) || Objects.equals(this.jySuperviseCostsProportion,"")){
-            resultVo.setMessage("驾意险手续费比例不能为空");
+            resultVo.addMessage("驾意险手续费比例不能为空");
         }
         if(Objects.isNull(this.jyOtherCostsProportion) || Objects.equals(this.jyOtherCostsProportion,"")){
-            resultVo.setMessage("驾意险跟单费比例不能为空");
+            resultVo.addMessage("驾意险跟单费比例不能为空");
         }
         if(Objects.isNull(this.dockingPerson) || Objects.equals(this.dockingPerson,"")){
-            resultVo.setMessage("对接人不能为空");
+            resultVo.addMessage("对接人不能为空");
         }
         if(Objects.isNull(resultVo.getMessage())){
             resultVo.setSuccess(true);

+ 13 - 11
commons/src/main/java/com/jzg/commons/entity/finance/vo/SuperviseExcelVo.java

@@ -1,6 +1,8 @@
 package com.jzg.commons.entity.finance.vo;
 
+import cn.hutool.core.collection.CollUtil;
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.jzg.commons.entity.finance.vo.importimcome.ImportResultVo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -65,37 +67,37 @@ public class SuperviseExcelVo {
         ImportResultVo resultVo = new ImportResultVo();
         resultVo.setSuccess(false);
         if(Objects.isNull(this.insuranceCompany) || Objects.equals(this.insuranceCompany,"")){
-            resultVo.setMessage("保险公司不能为空");
+            resultVo.getMessage().add("保险公司不能为空");
         }
         if(Objects.isNull(this.agreementCode) || Objects.equals(this.agreementCode,"")){
-            resultVo.setMessage("协议编号不能为空");
+            resultVo.getMessage().add("协议编号不能为空");
         }
         if(Objects.isNull(this.signDate) || Objects.equals(this.signDate,"")){
-            resultVo.setMessage("签单日期不能为空");
+            resultVo.getMessage().add("签单日期不能为空");
         }
         if(Objects.isNull(this.licenseNo) || Objects.equals(this.licenseNo,"")){
-            resultVo.setMessage("车牌号不能为空");
+            resultVo.getMessage().add("车牌号不能为空");
         }
         if(Objects.isNull(this.jqPolicyNo) || Objects.equals(this.jqPolicyNo,"")){
-            resultVo.setMessage("交强险保单号不能为空");
+            resultVo.getMessage().add("交强险保单号不能为空");
         }
         if(Objects.isNull(this.jqPremium) || Objects.equals(this.jqPremium,BigDecimal.ZERO)){
-            resultVo.setMessage("交强险保费不能为空");
+            resultVo.getMessage().add("交强险保费不能为空");
         }
         if(Objects.isNull(this.jqSuperviseRatio) || Objects.equals(this.jqSuperviseRatio,BigDecimal.ZERO)){
-            resultVo.setMessage("交强险手续费比例不能为空");
+            resultVo.getMessage().add("交强险手续费比例不能为空");
         }
         if(Objects.isNull(this.syPolicyNo) || Objects.equals(this.syPolicyNo,"")){
-            resultVo.setMessage("商业险保单号不能为空");
+            resultVo.getMessage().add("商业险保单号不能为空");
         }
         if(Objects.isNull(this.syPremium) || Objects.equals(this.syPremium,BigDecimal.ZERO)){
-            resultVo.setMessage("商业险保费不能为空");
+            resultVo.getMessage().add("商业险保费不能为空");
         }
         if(Objects.isNull(this.sySuperviseRatio) || Objects.equals(this.sySuperviseRatio,BigDecimal.ZERO)){
-            resultVo.setMessage("商业险手续费比例不能为空");
+            resultVo.getMessage().add("商业险手续费比例不能为空");
         }
 
-        if(Objects.isNull(resultVo.getMessage())){
+        if(CollUtil.isEmpty(resultVo.getMessage())){
             resultVo.setSuccess(true);
         }
         return resultVo;

+ 52 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ExcelContent4Platform.java

@@ -0,0 +1,52 @@
+package com.jzg.commons.entity.finance.vo.importimcome;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author tz
+ * @description 应收查询VO
+ * @createDate 2024-06-26 10:49:31
+ */
+@EqualsAndHashCode
+@Data
+@Schema(description = "财务应收表")
+public class ExcelContent4Platform implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6263862008363938379L;
+
+    @Schema(description = "车牌号")
+    @ExcelProperty(value = "车牌号", index = 0)
+    private String licenseNo;
+
+    @Schema(description = "交强险保单号")
+    @ExcelProperty(value = "交强险保单号", index = 1)
+    private String jqPolicyNo;
+
+    @Schema(description = "商业险保单号")
+    @ExcelProperty(value = "商业险保单号", index = 2)
+    private String syPolicyNo;
+
+    @Schema(description = "非车险保单号")
+    @ExcelProperty(value = "非车险保单号", index = 3)
+    private String jyPolicyNo;
+
+    @Schema(description = "交强险入口比例")
+    @ExcelProperty(value = "交强险入口比例(%)", index = 4)
+    private String jqInletRatio;
+
+    @Schema(description = "商业险入口比例")
+    @ExcelProperty(value = "商业险入口比例(%)", index = 5)
+    private String syInletRatio;
+
+    @Schema(description = "非车险入口比例")
+    @ExcelProperty(value = "非车险入口比例(%)", index = 6)
+    private String jyInletRatio;
+
+}

+ 66 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ExcelContent4Private.java

@@ -0,0 +1,66 @@
+package com.jzg.commons.entity.finance.vo.importimcome;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author tz
+ * @description 应收查询VO
+ * @createDate 2024-06-26 10:49:31
+ */
+@EqualsAndHashCode
+@Data
+@Schema(description = "财务应收表")
+public class ExcelContent4Private implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6263862008363938379L;
+
+    @Schema(description = "车牌号")
+    @ExcelProperty(value = "车牌号", index = 0)
+    private String licenseNo;
+
+    @Schema(description = "交强险保单号")
+    @ExcelProperty(value = "交强险保单号", index = 1)
+    private String jqPolicyNo;
+
+    @Schema(description = "商业险保单号")
+    @ExcelProperty(value = "商业险保单号", index = 2)
+    private String syPolicyNo;
+
+    @Schema(description = "非车险保单号")
+    @ExcelProperty(value = "非车险保单号", index = 3)
+    private String jyPolicyNo;
+
+    @Schema(description = "交强险手续费比例")
+    @ExcelProperty(value = "交强险手续费比例(%)", index = 4)
+    private String jqSuperviseCostsProportion;
+
+    @Schema(description = "交强险跟单费比例")
+    @ExcelProperty(value = "交强险跟单费比例(%)", index = 5)
+    private String jqOtherCostsProportion;
+
+
+    @Schema(description = "商业险手续费比例")
+    @ExcelProperty(value = "商业险手续费比例(%)", index = 6)
+    private String sySuperviseCostsProportion;
+
+    @Schema(description = "商业险跟单费比例")
+    @ExcelProperty(value = "商业险跟单费比例(%)", index = 7)
+    private String syOtherCostsProportion;
+
+
+    @Schema(description = "非车险手续费比例")
+    @ExcelProperty(value = "非车险手续费比例(%)", index = 8)
+    private String jySuperviseCostsProportion;
+
+    @Schema(description = "非车险跟单费比例")
+    @ExcelProperty(value = "非车险跟单费比例(%)", index = 9)
+    private String jyOtherCostsProportion;
+
+}

+ 198 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ImportContentExt.java

@@ -0,0 +1,198 @@
+package com.jzg.commons.entity.finance.vo.importimcome;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Objects;
+
+/**
+ * Excel 表格字段填充后的完整数据信息
+ * @author lipf
+ * @date 2026/8/4 9:14
+ */
+@Data
+public class ImportContentExt implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 8609830028190910294L;
+
+    @Schema(description = "车牌号")
+    private String licenseNo;
+
+    @Schema(description = "交强险保单号")
+    private String jqPolicyNo;
+
+    @Schema(description = "商业险保单号")
+    private String syPolicyNo;
+
+    @Schema(description = "非车险保单号")
+    private String jyPolicyNo;
+
+    @Schema(description = "交强险手续费比例")
+    private String jqSuperviseCostsProportion;
+
+    @Schema(description = "交强险跟单费比例")
+    private String jqOtherCostsProportion;
+
+    @Schema(description = "商业险手续费比例")
+    private String sySuperviseCostsProportion;
+
+    @Schema(description = "商业险跟单费比例")
+    private String syOtherCostsProportion;
+
+
+    @Schema(description = "非车险手续费比例")
+    private String jySuperviseCostsProportion;
+
+    @Schema(description = "非车险跟单费比例")
+    private String jyOtherCostsProportion;
+
+
+    @Schema(description = "交强险入口比例")
+    private String jqInletRatio;
+
+    @Schema(description = "商业险入口比例")
+    private String syInletRatio;
+
+    @Schema(description = "非车险入口比例")
+    private String jyInletRatio;
+
+    @Schema(description = "选中类型")
+    // 1 全部数据选中  2 选中部分数据
+    private String selectedType;
+
+    @Schema(description = "订单号")
+    private String orderNo;
+
+    @Schema(description = "id")
+    private String id;
+
+    @Schema(description = "签单时间")
+    private String signingTime;
+
+    @Schema(description = "协议类型")
+    private String agreementType;
+
+    @Schema(description = "险种名称")
+    private String productName;
+
+    @Schema(description = "被保险人姓名")
+    private String insuredPerson;
+
+    @Schema(description = "公司名称")
+    private String companyName;
+
+    @Schema(description = "对接人")
+    private String contactPerson;
+
+    @Schema(description = "对接人手机号")
+    private String contactPersonPhone;
+
+    @Schema(description = "错误信息")
+    private String errorMessage;
+
+    @Schema(description = "协议Id")
+    private String agreementId;
+
+    @Schema(description = "协议名称")
+    private String agreementName;
+
+    @Schema(description = "租户代码")
+    private String systemCode;
+
+    @Schema(description = "保险机构")
+    private String partnerCompanyId;
+
+    @Schema(description = "交强保费")
+    private String jqPremium;
+
+    @Schema(description = "商业保费")
+    private String syPremium;
+
+    @Schema(description = "驾意保费")
+    private String jyPremium;
+
+    public ImportResultVo checkEmpty(){
+        ImportResultVo resultVo = new ImportResultVo();
+        resultVo.setSuccess(false);
+        // 基础必填字段校验
+        if (StrUtil.isBlank(this.getSigningTime())) {
+            resultVo.getMessage().add("签单时间不能为空");
+        }
+        if (StrUtil.isBlank(this.getOrderNo())) {
+            resultVo.getMessage().add("订单号不能为空");
+        }
+        if (StrUtil.isBlank(this.getLicenseNo())) {
+            resultVo.getMessage().add("车牌号不能为空");
+        }
+        if (StrUtil.isBlank(this.getProductName())) {
+            resultVo.getMessage().add("险种名称不能为空");
+        }
+//        if (StrUtil.isBlank(this.getInsuredPerson())) {
+//            resultVo.getMessage().add("被保险人姓名不能为空");
+//        }
+        if (StrUtil.isBlank(this.getAgreementType())) {
+            resultVo.getMessage().add("协议类型不能为空");
+        }
+//        if (StrUtil.isBlank(this.getContactPerson())) {
+//            resultVo.getMessage().add("对接人不能为空");
+//        }
+//        if (StrUtil.isBlank(this.getAgreementType())) {
+//            resultVo.getMessage().add("对接人手机号不能为空");
+//        }
+
+        // 交强险:有保单号 → 手续费、跟单费必填
+//        if (StrUtil.isNotBlank(this.getJqPolicyNo())
+//                || StrUtil.isNotBlank(this.getJqSuperviseCostsProportion())
+//                || StrUtil.isNotBlank(this.getJqOtherCostsProportion())) {
+//            if (StrUtil.isBlank(this.getJqPolicyNo())) {
+//                resultVo.getMessage().add("交强险保单号不能为空");
+//            }
+//            if (StrUtil.isBlank(this.getJqSuperviseCostsProportion())) {
+//                resultVo.getMessage().add("交强险手续费比例不能为空");
+//            }
+//            if (StrUtil.isBlank(this.getJqOtherCostsProportion())) {
+//                resultVo.getMessage().add("交强险跟单费比例不能为空");
+//            }
+//        }
+
+        // 商业险:有保单号 → 手续费、跟单费必填
+//        if (StrUtil.isNotBlank(this.getSyPolicyNo())
+//                || StrUtil.isNotBlank(this.getSySuperviseCostsProportion())
+//                || StrUtil.isNotBlank(this.getSyOtherCostsProportion())) {
+//            if (StrUtil.isBlank(this.getJqPolicyNo())) {
+//                resultVo.getMessage().add("商业险保单号不能为空");
+//            }
+//            if (StrUtil.isBlank(this.getSySuperviseCostsProportion())) {
+//                resultVo.getMessage().add("商业险手续费比例不能为空");
+//            }
+//            if (StrUtil.isBlank(this.getSyOtherCostsProportion())) {
+//                resultVo.getMessage().add("商业险跟单费比例不能为空");
+//            }
+//        }
+
+        // 非车险:有保单号 → 手续费、跟单费必填
+        if (StrUtil.isNotBlank(this.getJyPolicyNo())
+                || StrUtil.isNotBlank(this.getJySuperviseCostsProportion())
+                || StrUtil.isNotBlank(this.getJyOtherCostsProportion())) {
+            if (StrUtil.isBlank(this.getJqPolicyNo())) {
+                resultVo.getMessage().add("非车险保单号不能为空");
+            }
+            if (StrUtil.isBlank(this.getJySuperviseCostsProportion())) {
+                resultVo.getMessage().add("非车险手续费比例不能为空");
+            }
+            if (StrUtil.isBlank(this.getJyOtherCostsProportion())) {
+                resultVo.getMessage().add("非车险跟单费比例不能为空");
+            }
+        }
+
+        if(CollUtil.isEmpty(resultVo.getMessage())){
+            resultVo.setSuccess(true);
+        }
+        return resultVo;
+    }
+
+}

+ 29 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ImportResultVo.java

@@ -0,0 +1,29 @@
+package com.jzg.commons.entity.finance.vo.importimcome;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * excel 导入结果的Vo
+ */
+@Data
+public class ImportResultVo {
+
+    private boolean success;
+
+    private List<String> message = new ArrayList<>();
+
+    public void addMessage(String msg){
+        this.message.add(msg);
+    }
+    public String convert2Str(){
+        if(CollUtil.isNotEmpty(this.message)){
+            return String.join(".", this.message);
+        }
+        return StrUtil.EMPTY;
+    }
+}

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

@@ -1,4 +1,4 @@
-package com.jzg.commons.entity.finance.vo;
+package com.jzg.commons.entity.finance.vo.importimcome;
 
 import lombok.Data;
 

+ 7 - 7
commons/src/main/java/com/jzg/commons/entity/finance/vo/JyExcelVo.java → commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/JyExcelVo.java

@@ -1,4 +1,4 @@
-package com.jzg.commons.entity.finance.vo;
+package com.jzg.commons.entity.finance.vo.importimcome;
 
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -60,22 +60,22 @@ public class JyExcelVo {
         ImportResultVo resultVo = new ImportResultVo();
         resultVo.setSuccess(false);
         if(Objects.isNull(this.insuranceCompany) || Objects.equals(this.insuranceCompany,"")){
-            resultVo.setMessage("保险公司不能为空");
+            resultVo.addMessage("保险公司不能为空");
         }
         if(Objects.isNull(this.licenseNo) || Objects.equals(this.licenseNo,"")){
-            resultVo.setMessage("车牌号不能为空");
+            resultVo.addMessage("车牌号不能为空");
         }
         if(Objects.isNull(this.jyPolicyNo) || Objects.equals(this.jyPolicyNo,"")){
-            resultVo.setMessage("驾意险保单号不能为空");
+            resultVo.addMessage("驾意险保单号不能为空");
         }
         if(Objects.isNull(this.jyPremium) || Objects.equals(this.jyPremium,BigDecimal.ZERO)){
-            resultVo.setMessage("驾意险保费不能为空");
+            resultVo.addMessage("驾意险保费不能为空");
         }
         if(Objects.isNull(this.jySuperviseRatio) || Objects.equals(this.jySuperviseRatio,BigDecimal.ZERO)){
-            resultVo.setMessage("驾意险手续费比例不能为空");
+            resultVo.addMessage("驾意险手续费比例不能为空");
         }
         if(Objects.isNull(this.jyOtherRatio) || Objects.equals(this.jyOtherRatio,BigDecimal.ZERO)){
-            resultVo.setMessage("驾意险跟单费比例不能为空");
+            resultVo.addMessage("驾意险跟单费比例不能为空");
         }
         if(Objects.isNull(resultVo.getMessage())){
             resultVo.setSuccess(true);

+ 9 - 9
commons/src/main/java/com/jzg/commons/entity/finance/vo/OtherExcelVo.java → commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/OtherExcelVo.java

@@ -1,4 +1,4 @@
-package com.jzg.commons.entity.finance.vo;
+package com.jzg.commons.entity.finance.vo.importimcome;
 
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -66,28 +66,28 @@ public class OtherExcelVo {
         ImportResultVo resultVo = new ImportResultVo();
         resultVo.setSuccess(false);
         if(Objects.isNull(this.insuranceCompany) || Objects.equals(this.insuranceCompany,"")){
-            resultVo.setMessage("保险公司不能为空");
+            resultVo.addMessage("保险公司不能为空");
         }
         if(Objects.isNull(this.licenseNo) || Objects.equals(this.licenseNo,"")){
-            resultVo.setMessage("车牌号不能为空");
+            resultVo.addMessage("车牌号不能为空");
         }
         if(Objects.isNull(this.jqPolicyNo) || Objects.equals(this.jqPolicyNo,"")){
-            resultVo.setMessage("交强险保单号不能为空");
+            resultVo.addMessage("交强险保单号不能为空");
         }
         if(Objects.isNull(this.jqPremium) || Objects.equals(this.jqPremium,BigDecimal.ZERO)){
-            resultVo.setMessage("交强险保费不能为空");
+            resultVo.addMessage("交强险保费不能为空");
         }
         if(Objects.isNull(this.jqOtherRatio) || Objects.equals(this.jqOtherRatio,BigDecimal.ZERO)){
-            resultVo.setMessage("交强险手续费比例不能为空");
+            resultVo.addMessage("交强险手续费比例不能为空");
         }
         if(Objects.isNull(this.syPolicyNo) || Objects.equals(this.syPolicyNo,"")){
-            resultVo.setMessage("商业险保单号不能为空");
+            resultVo.addMessage("商业险保单号不能为空");
         }
         if(Objects.isNull(this.syPremium) || Objects.equals(this.syPremium,BigDecimal.ZERO)){
-            resultVo.setMessage("商业险保费不能为空");
+            resultVo.addMessage("商业险保费不能为空");
         }
         if(Objects.isNull(this.syOtherRatio) || Objects.equals(this.syOtherRatio,BigDecimal.ZERO)){
-            resultVo.setMessage("商业险手续费比例不能为空");
+            resultVo.addMessage("商业险手续费比例不能为空");
         }
         if(Objects.isNull(resultVo.getMessage())){
             resultVo.setSuccess(true);

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

@@ -24,6 +24,10 @@ public class InsOrdersVo extends QuoteVo {
     @Schema(description = "id")
     private String id;
 
+    @Schema(description = "签单时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime signingTime;
+
     @Schema(description = "订单号")
     private String quoteNo;
 

+ 1 - 0
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml

@@ -787,6 +787,7 @@
 
     <select id="getById" resultMap="InsOrdersVoMap">
         select id,
+        signing_time,
         entry_status,
         quote_no,
         agreement_id,

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

@@ -11,6 +11,7 @@ import com.jzg.commons.entity.finance.dto.ExportSuperviseSettlementExcelDto;
 import com.jzg.commons.entity.finance.dto.ReceiverSettlementReportDto;
 import com.jzg.commons.entity.finance.po.*;
 import com.jzg.commons.entity.finance.vo.*;
+import com.jzg.commons.entity.finance.vo.importimcome.ImportUpdateExcelResultVo;
 import com.jzg.commons.entity.orders.po.InsOrderAdjust;
 import com.jzg.commons.entity.po.EsmInsCompany;
 import com.jzg.commons.request.RequestSingleParam;

+ 25 - 0
tenant/organization/src/main/java/com/jzg/organization/excel/listener/InvoiceReceivbleExcel4PlatformListener.java

@@ -0,0 +1,25 @@
+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.importimcome.ExcelContent4Platform;
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Getter
+public class InvoiceReceivbleExcel4PlatformListener extends AnalysisEventListener<ExcelContent4Platform> {
+    private final List<ExcelContent4Platform> dataList = new ArrayList<>();
+
+    @Override
+    public void invoke(ExcelContent4Platform data, AnalysisContext context) {
+        dataList.add(data);
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        System.out.println("Total rows: " + dataList.size());
+    }
+
+}

+ 28 - 0
tenant/organization/src/main/java/com/jzg/organization/excel/listener/InvoiceReceivbleExcel4PrivateListener.java

@@ -0,0 +1,28 @@
+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.importimcome.ExcelContent4Private;
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Getter
+public class InvoiceReceivbleExcel4PrivateListener extends AnalysisEventListener<ExcelContent4Private> {
+    private final List<ExcelContent4Private> dataList = new ArrayList<>();
+
+    @Override
+    public void invoke(ExcelContent4Private data, AnalysisContext context) {
+        dataList.add(data);
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        System.out.println("Total rows: " + dataList.size());
+    }
+
+    public List<ExcelContent4Private> getDataList() {
+        return dataList;
+    }
+}

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

@@ -1,26 +0,0 @@
-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.InvoiceReceivableExportExcelVo4Private;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class InvoiceReceivbleExcelListener extends AnalysisEventListener<InvoiceReceivableExportExcelVo4Private> {
-    private final List<InvoiceReceivableExportExcelVo4Private> dataList = new ArrayList<>();
-
-    @Override
-    public void invoke(InvoiceReceivableExportExcelVo4Private data, AnalysisContext context) {
-        dataList.add(data);
-    }
-
-    @Override
-    public void doAfterAllAnalysed(AnalysisContext context) {
-        System.out.println("Total rows: " + dataList.size());
-    }
-
-    public List<InvoiceReceivableExportExcelVo4Private> getDataList() {
-        return dataList;
-    }
-}

+ 1 - 2
tenant/organization/src/main/java/com/jzg/organization/excel/listener/JyExcelListener.java

@@ -2,8 +2,7 @@ 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.JyExcelVo;
-import com.jzg.commons.entity.finance.vo.OtherExcelVo;
+import com.jzg.commons.entity.finance.vo.importimcome.JyExcelVo;
 
 import java.util.ArrayList;
 import java.util.List;

+ 3 - 5
tenant/organization/src/main/java/com/jzg/organization/excel/listener/OtherExcelListener.java

@@ -2,12 +2,13 @@ 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.OtherExcelVo;
-import com.jzg.commons.entity.finance.vo.SuperviseExcelVo;
+import com.jzg.commons.entity.finance.vo.importimcome.OtherExcelVo;
+import lombok.Getter;
 
 import java.util.ArrayList;
 import java.util.List;
 
+@Getter
 public class OtherExcelListener extends AnalysisEventListener<OtherExcelVo> {
     private final List<OtherExcelVo> dataList = new ArrayList<>();
 
@@ -21,7 +22,4 @@ public class OtherExcelListener extends AnalysisEventListener<OtherExcelVo> {
         System.out.println("Total rows: " + dataList.size());
     }
 
-    public List<OtherExcelVo> getDataList() {
-        return dataList;
-    }
 }

+ 10 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/InsOrdersPolicyMapper.java

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

+ 10 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/InsPlyIncomeMapper.java

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

+ 3 - 0
tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java

@@ -7,6 +7,9 @@ import com.jzg.commons.core.page.HttpResult;
 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.finance.vo.importimcome.ImportUpdateExcelResultVo;
+import com.jzg.commons.entity.finance.vo.importimcome.JyExcelVo;
+import com.jzg.commons.entity.finance.vo.importimcome.OtherExcelVo;
 import com.jzg.commons.entity.orders.po.InsOrderAdjust;
 import com.jzg.commons.entity.po.EsmInsCompany;
 import org.apache.ibatis.annotations.Param;

+ 50 - 201
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -18,7 +18,6 @@ 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.constants.InvoiceTypeEnum;
-import com.jzg.commons.constants.ProductsType;
 import com.jzg.commons.constants.SettlementIdentificationEnum;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.core.base.BaseController;
@@ -27,6 +26,7 @@ import com.jzg.commons.entity.Constant;
 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.finance.vo.importimcome.*;
 import com.jzg.commons.entity.orders.po.InsOrderAdjust;
 import com.jzg.commons.entity.po.*;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
@@ -43,6 +43,7 @@ import com.jzg.organization.excel.listener.*;
 import com.jzg.organization.mapper.*;
 import com.jzg.organization.service.ReceivableService;
 import com.jzg.organization.service.SysUserJzgInfoSalesmanService;
+import com.jzg.organization.service.importincome.ImportIncomeService;
 import org.apache.ibatis.annotations.Param;
 import org.jetbrains.annotations.NotNull;
 import org.redisson.api.RBucket;
@@ -88,6 +89,9 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
 
     private static final Logger log = LoggerFactory.getLogger(ReceivableServiceImpl.class);
 
+    @Autowired
+    private ImportIncomeService importIncomeService;
+
     @Autowired
     private RedissonClient redissonClient;
 
@@ -2260,7 +2264,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             ImportResultVo resultVo = vo.checkEmpty();
             if (!resultVo.isSuccess()) {
                 failedNumber++;
-                vo.setErrorMessage(resultVo.getMessage());
+                vo.setErrorMessage(resultVo.getMessage().stream().collect(Collectors.joining(",")));
                 failedExcel.add(vo);
                 continue;
             }
@@ -2384,7 +2388,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         if("10".equals(type)){
             // 调用动态导出
             return exportBaseService.upLoadFile(
-                    InvoiceReceivableExportExcelVo4Private.class,
+                    ExcelContent4Private.class,
                     ListUtil.empty(),
                     "应收开票-导出模板(私有)-" + Instant.now()
             );
@@ -2392,13 +2396,13 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         else if("20".equals(type) || StrUtil.isEmpty(type)){
             // 调用动态导出
             return exportBaseService.upLoadFile(
-                    InvoiceReceivableExportExcelVo4Platform.class,
+                    ExcelContent4Platform.class,
                     ListUtil.empty(),
                     "应收开票-导出模板(平台)-" + Instant.now());
         }
         // 调用动态导出
         return exportBaseService.upLoadFile(
-                InvoiceReceivableExportExcelVo4Platform.class,
+                ExcelContent4Platform.class,
                 ListUtil.empty(),
                 "应收开票-导出模板(平台)-" + Instant.now());
     }
@@ -2435,20 +2439,18 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     @Override
     public ImportUpdateExcelResultVo importAccountsReceivableInvoice(MultipartFile file) {
         String userName = baseController.getUserName();
-        log.info("用户[{}]导入平台协议文件",userName);
-        ImportUpdateExcelResultVo importExcelResultVo = new ImportUpdateExcelResultVo();
-        List<InvoiceReceivableExportExcelVo4Private> receivableExportExcelVos = importInvoiceReceivableExcel(file);
-        if (CollUtil.isEmpty(receivableExportExcelVos)){
+        log.info("用户[{}]导入私有应设有文件",userName);
+
+        List<ExcelContent4Private> excelContents = importIncomeService.parseImportExcel4Private(file);
+        if (CollUtil.isEmpty(excelContents)){
             throw new SystemException("数据不能为空,导入失败");
         }
-        AssertionUtils.isEmpty(receivableExportExcelVos, "数据处理失败,导入失败");
-        // 获取保司名称
-        HttpResult<List<EsmInsCompany>> listHttpResult = esmInsCompanyClient.liveCompanyList();
-        AssertionUtils.isFail(listHttpResult.getCode() != 200, listHttpResult.getMsg());
-        List<EsmInsCompany> esmInsCompanyList = CollUtil.isNotEmpty(listHttpResult.getData()) ? listHttpResult.getData() : CollUtil.newArrayList();
+        AssertionUtils.isEmpty(excelContents, "数据处理失败,导入失败");
+        List<ImportContentExt> datas = importIncomeService.fillExcelContent4Private(excelContents);
 
-        int failedNumber = 0;
-        List<InvoiceReceivableExportExcelVo4Private> failedExcel = new ArrayList<>();
+
+        // int failedNumber = 0;
+        List<ImportContentExt> failedExcel = new ArrayList<>();
         // 只存储需要【修改】的数据
         List<InsPlyIncome> updateExcel = new ArrayList<>();
         List<InsPlyIncome> insertExcel = new ArrayList<>();
@@ -2460,7 +2462,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         Set<String> repeatPolicyNoSet = new HashSet<>();
         Set<String> existCompanyIdSet = new HashSet<>();
 
-        for (InvoiceReceivableExportExcelVo4Private vo : receivableExportExcelVos) {
+        for (ImportContentExt vo : datas) {
             String policyNo = vo.getJqPolicyNo();
             if (existPolicyNoSet.contains(policyNo)) {
                 repeatPolicyNoSet.add(policyNo);
@@ -2476,19 +2478,17 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         }
 
         // 处理数据
-        for (InvoiceReceivableExportExcelVo4Private vo : receivableExportExcelVos) {
+        for (ImportContentExt vo : datas) {
             // 1. 空数据校验
             ImportResultVo resultVo = vo.checkEmpty();
             if (!resultVo.isSuccess()) {
-                failedNumber++;
-                vo.setErrorMessage(resultVo.getMessage());
+                vo.setErrorMessage(resultVo.convert2Str());
                 failedExcel.add(vo);
                 continue;
             }
 
             // 2. Excel内部保单号重复
             if (repeatPolicyNoSet.contains(vo.getJqPolicyNo())) {
-                failedNumber++;
                 vo.setErrorMessage("保单号重复");
                 failedExcel.add(vo);
                 continue;
@@ -2498,7 +2498,6 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             HttpResult<InsOrdersVo> insOrdersVoHttpResult = insOrdersClient.selectById(vo.getOrderNo());
             InsOrdersVo data = insOrdersVoHttpResult.getData();
             if (null == data){
-                failedNumber++;
                 vo.setErrorMessage("订单号不存在");
                 failedExcel.add(vo);
                 continue;
@@ -2510,60 +2509,22 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
 
             // 数据库不存在 → 直接失败
             if (Objects.isNull(ptlAgreement) || !"2".equals(ptlAgreement.getAgreementType().toString())) {
-                failedNumber++;
                 vo.setErrorMessage("协议编码在协议中不存在");
                 failedExcel.add(vo);
                 continue;
             }
 
             // 查询数据库中是否已存在该保单号
-            failedNumber = spliceData(vo, ptlAgreement, esmInsCompanyList, insertExcel, successOrderNoList, failedNumber, failedExcel, updateExcel);
+            ImportContentExt failedVO = importIncomeService.spliceData(vo, insertExcel, updateExcel);
+            if(failedVO != null){
+                failedExcel.add(failedVO);
+            }
         }
-
-        getDataManipulationResult(updateExcel, insertExcel, failedExcel, importExcelResultVo, failedNumber, successOrderNoList);
-
+        ImportUpdateExcelResultVo importExcelResultVo = importIncomeService.getDataManipulationResult(updateExcel, insertExcel, failedExcel);
+        log.info("私有应收:导入结果。importExcelResultVo=[{}]", JSONUtil.toJsonStr(importExcelResultVo));
         return importExcelResultVo;
     }
 
-    /**
-     * <p>
-     * 1. 获取保司名称
-     * 2. 校验Excel内部保单号重复
-     * 3. 处理数据
-     * 4. 执行批量更新
-     * 5. 生成失败数据下载链接
-     * 6. 返回结果
-     * </p>
-     *
-     * @return List<InvoiceReceivableExportExcelVo> 处理后的数据列表
-     */
-    private void getDataManipulationResult(List<InsPlyIncome> updateExcel, List<InsPlyIncome> insertExcel, List<InvoiceReceivableExportExcelVo4Private> failedExcel, ImportUpdateExcelResultVo importExcelResultVo, int failedNumber, List<String> successOrderNoList) {
-        // 执行批量更新
-        if (CollUtil.isNotEmpty(updateExcel)) {
-            baseMapper.updateById(updateExcel);
-        }else{
-            baseMapper.insert(insertExcel);
-        }
-
-        // ===================== 生成失败数据下载链接 =====================
-        String failFileUrl = "";
-        if (CollUtil.isNotEmpty(failedExcel)) {
-            failFileUrl = exportBaseService.upLoadFile(
-                    InvoiceReceivableExportExcelVo4Private.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);
-    }
-
     /**
      * 导入平台的应收数据
      * @param file
@@ -2572,32 +2533,28 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     @Override
     public ImportUpdateExcelResultVo importPlatformReceivableInvoice(MultipartFile file) {
         String userName = baseController.getUserName();
-        log.info("用户[{}]导入平台协议文件",userName);
-        ImportUpdateExcelResultVo importExcelResultVo = new ImportUpdateExcelResultVo();
-        List<InvoiceReceivableExportExcelVo4Private> receivableExportExcelVos = importInvoiceReceivableExcel(file);
-        if (CollUtil.isEmpty(receivableExportExcelVos)){
+        log.info("用户[{}]导入平台应收文件",userName);
+
+        List<ExcelContent4Platform> excelContents = importIncomeService.parseImportExcel4Platform(file);
+        log.info("从Excel文件中读取到[{}]条记录", CollUtil.size(excelContents));
+        if (CollUtil.isEmpty(excelContents)){
+            log.error("用户[{}]导入平台应收文件,数据不能为空,导入失败",userName);
             throw new SystemException("数据不能为空,导入失败");
         }
-        AssertionUtils.isEmpty(receivableExportExcelVos, "数据处理失败,导入失败");
-        // 获取保司名称
-        HttpResult<List<EsmInsCompany>> listHttpResult = esmInsCompanyClient.liveCompanyList();
-        AssertionUtils.isFail(listHttpResult.getCode() != 200, listHttpResult.getMsg());
-        List<EsmInsCompany> esmInsCompanyList = CollUtil.isNotEmpty(listHttpResult.getData()) ? listHttpResult.getData() : CollUtil.newArrayList();
+        AssertionUtils.isEmpty(excelContents, "数据处理失败,导入失败");
+        List<ImportContentExt> datas = importIncomeService.fillExcelContent4Platform(excelContents);
 
-        int failedNumber = 0;
-        List<InvoiceReceivableExportExcelVo4Private> failedExcel = new ArrayList<>();
         // 只存储需要【修改】的数据
         List<InsPlyIncome> updateExcel = new ArrayList<>();
         List<InsPlyIncome> insertExcel = new ArrayList<>();
-        // 存储导入成功的订单号
-        List<String> successOrderNoList = new ArrayList<>();
+        List<ImportContentExt> failedExcel = new ArrayList<>();
 
         // 校验Excel内部保单号重复
         Set<String> existPolicyNoSet = new HashSet<>();
         Set<String> repeatPolicyNoSet = new HashSet<>();
         Set<String> existCompanyIdSet = new HashSet<>();
 
-        for (InvoiceReceivableExportExcelVo4Private vo : receivableExportExcelVos) {
+        for (ImportContentExt vo : datas) {
             String policyNo = vo.getJqPolicyNo();
             if (existPolicyNoSet.contains(policyNo)) {
                 repeatPolicyNoSet.add(policyNo);
@@ -2614,132 +2571,34 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         }
 
         // 处理数据
-        for (InvoiceReceivableExportExcelVo4Private vo : receivableExportExcelVos) {
+        for (ImportContentExt vo : datas) {
             // 1. 空数据校验
             ImportResultVo resultVo = vo.checkEmpty();
             if (!resultVo.isSuccess()) {
-                failedNumber++;
-                vo.setErrorMessage(resultVo.getMessage());
+                vo.setErrorMessage(resultVo.convert2Str());
                 failedExcel.add(vo);
                 continue;
             }
 
             // 2. Excel内部保单号重复
             if (repeatPolicyNoSet.contains(vo.getJqPolicyNo())) {
-                failedNumber++;
                 vo.setErrorMessage("保单号重复");
                 failedExcel.add(vo);
                 continue;
             }
-
-            // 查询订单
-            HttpResult<InsOrdersVo> insOrdersVoHttpResult = insOrdersClient.selectById(vo.getOrderNo());
-            InsOrdersVo data = insOrdersVoHttpResult.getData();
-            if (null == data){
-                failedNumber++;
-                vo.setErrorMessage("订单号不存在");
-                failedExcel.add(vo);
-                continue;
-            }
-
-            // 查询数据库中是否已存在该协议
-            PtlAgreement ptlAgreement = ptlAgreementMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>()
-                    .eq(PtlAgreement::getId, data.getAgreementId()));
-
-            // 数据库不存在 → 直接失败
-            if (Objects.isNull(ptlAgreement) || !"1".equals(ptlAgreement.getAgreementType().toString())) {
-                failedNumber++;
-                vo.setErrorMessage("协议编码在协议中不存在");
-                failedExcel.add(vo);
-                continue;
+            ImportContentExt errVO = importIncomeService.spliceData(vo, insertExcel, updateExcel);
+            if(errVO != null){
+                failedExcel.add(errVO);
             }
-
-            failedNumber = spliceData(vo, ptlAgreement, esmInsCompanyList, insertExcel, successOrderNoList, failedNumber, failedExcel, updateExcel);
-            continue;
         }
 
         // 执行批量更新
-        getDataManipulationResult(updateExcel, insertExcel, failedExcel, importExcelResultVo, failedNumber, successOrderNoList);
+        ImportUpdateExcelResultVo importExcelResultVo = importIncomeService.getDataManipulationResult(updateExcel, insertExcel,failedExcel);
+        log.info("平台应收导入结果:importExcelResultVo=[{}]", JSONUtil.toJsonStr(importExcelResultVo));
 
         return importExcelResultVo;
     }
 
-    /**
-     * 批量处理数据
-     * @param updateExcel
-     * @param insertExcel
-     * @param failedExcel
-     * @param failedNumber
-     * @param successOrderNoList
-     */
-    private int spliceData(InvoiceReceivableExportExcelVo4Private vo, PtlAgreement ptlAgreement, List<EsmInsCompany> esmInsCompanyList, List<InsPlyIncome> insertExcel, List<String> successOrderNoList, int failedNumber, List<InvoiceReceivableExportExcelVo4Private> failedExcel, List<InsPlyIncome> updateExcel) {
-        // 查询数据库中是否已存在该保单号
-        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.setSystemCode(ptlAgreement.getSystemCode());
-        // 险种编号
-        insPlyIncome.setProductId(ProductsType.getCodeByDesc(vo.getProductName()));
-        // 险种名称
-        insPlyIncome.setProductName(vo.getProductName());
-        // 被保险人姓名
-        insPlyIncome.setInsuredPerson(vo.getInsuredPerson());
-        // 对接人信息
-        insPlyIncome.setContactPerson(vo.getContactPerson());
-        insPlyIncome.setContactPersonPhone(vo.getContactPersonPhone());
-
-        // 数据库不存在 → 直接失败
-        if (Objects.isNull(existIncome)) {
-            // 加入修改列表
-            // 机构id
-            insPlyIncome.setDeptId(baseController.getUserDeptId());
-            EsmInsCompany esmInsCompany = esmInsCompanyList.stream().filter(company -> company.getName().equals(vo.getCompanyName())).findFirst().orElse(new EsmInsCompany());
-            insPlyIncome.setCompanyId(esmInsCompany.getId());
-            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);
-                return failedNumber;
-            }
-
-            insPlyIncome.setId(existIncome.getId());
-            // 加入修改列表
-            updateExcel.add(insPlyIncome);
-            // 更新成功,记录订单号
-            successOrderNoList.add(vo.getOrderNo());
-        }
-        return failedNumber;
-    }
 
 
     /**
@@ -3090,18 +2949,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         }
     }
 
-    public List<InvoiceReceivableExportExcelVo4Private> importInvoiceReceivableExcel(MultipartFile file) {
-        InvoiceReceivbleExcelListener listener = new InvoiceReceivbleExcelListener();
-        try (InputStream inputStream = file.getInputStream()) {
-            EasyExcel.read(inputStream, InvoiceReceivableExportExcelVo4Private.class, listener)
-                    .sheet()
-                    .doRead();
-            return listener.getDataList();
-        } catch (Exception e) {
-            log.error("importInvoiceReceivableExcel异常",e);
-            return null;
-        }
-    }
+
+
 
     @Override
     public List<JyExcelVo> importJyExcel(MultipartFile file) {
@@ -3164,7 +3013,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             ImportResultVo resultVo = vo.checkEmpty();
             if (!resultVo.isSuccess()) {
                 failedNumber++;
-                vo.setErrorMessage(resultVo.getMessage());
+                vo.setErrorMessage(resultVo.convert2Str());
                 failedExcel.add(vo);
                 continue;
             }
@@ -3300,7 +3149,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             ImportResultVo resultVo = vo.checkEmpty();
             if (!resultVo.isSuccess()) {
                 failedNumber++;
-                vo.setErrorMessage(resultVo.getMessage());
+                vo.setErrorMessage(resultVo.convert2Str());
                 failedExcel.add(vo);
                 continue;
             }
@@ -3453,7 +3302,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             ImportResultVo resultVo = vo.checkEmpty();
             if (!resultVo.isSuccess()) {
                 failedNumber++;
-                vo.setErrorMessage(resultVo.getMessage());
+                vo.setErrorMessage(resultVo.convert2Str());
                 failedExcel.add(vo);
                 continue;
             }
@@ -3607,7 +3456,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             ImportResultVo resultVo = vo.checkEmpty();
             if (!resultVo.isSuccess()) {
                 failedNumber++;
-                vo.setErrorMessage(resultVo.getMessage());
+                vo.setErrorMessage(resultVo.convert2Str());
                 failedExcel.add(vo);
                 continue;
             }

+ 307 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/importincome/ImportIncomeServiceImpl.java

@@ -0,0 +1,307 @@
+package com.jzg.organization.service.impl.importincome;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.finance.po.InsPlyIncome;
+import com.jzg.commons.entity.finance.vo.importimcome.ExcelContent4Private;
+import com.jzg.commons.entity.finance.vo.importimcome.ImportUpdateExcelResultVo;
+import com.jzg.commons.entity.finance.vo.importimcome.ExcelContent4Platform;
+import com.jzg.commons.entity.finance.vo.importimcome.ImportContentExt;
+import com.jzg.commons.entity.orders.po.InsOrdersPolicy;
+import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
+import com.jzg.commons.entity.vo.AgreementVo;
+import com.jzg.commons.entity.vo.InsFeeOrdersVo;
+import com.jzg.commons.util.idgen.IdGenerate;
+import com.jzg.organization.client.InsOrdersClient;
+import com.jzg.organization.excel.listener.InvoiceReceivbleExcel4PlatformListener;
+import com.jzg.organization.excel.listener.InvoiceReceivbleExcel4PrivateListener;
+import com.jzg.organization.mapper.InsOrdersPolicyMapper;
+import com.jzg.organization.mapper.InsPlyIncomeMapper;
+import com.jzg.organization.mapper.PtlAgreementMapper;
+import com.jzg.organization.service.impl.ExportBaseServiceImpl;
+import com.jzg.organization.service.importincome.ImportIncomeService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
+@Component
+public class ImportIncomeServiceImpl implements ImportIncomeService {
+
+    @Autowired
+    private InsPlyIncomeMapper baseMapper;
+    @Autowired
+    private ExportBaseServiceImpl exportBaseService;
+    @Autowired
+    private BaseController baseController;
+    @Autowired
+    private InsOrdersClient insOrdersClient;
+    @Autowired
+    private InsOrdersPolicyMapper insOrdersPolicyMapper;
+    @Autowired
+    private PtlAgreementMapper ptlAgreementMapper;
+
+    private static final Logger log = LoggerFactory.getLogger(ImportIncomeServiceImpl.class);
+
+
+    /**
+     * <p>
+     * 1. 获取保司名称
+     * 2. 校验Excel内部保单号重复
+     * 3. 处理数据
+     * 4. 执行批量更新
+     * 5. 生成失败数据下载链接
+     * 6. 返回结果
+     * </p>
+     *
+     * @return List<InvoiceReceivableExportExcelVo> 处理后的数据列表
+     */
+    @Override
+    public ImportUpdateExcelResultVo getDataManipulationResult(List<InsPlyIncome> updateExcel, List<InsPlyIncome> insertExcel,
+                                           List<ImportContentExt> failedExcel) {
+        ImportUpdateExcelResultVo importExcelResultVo = new ImportUpdateExcelResultVo();
+        // 执行批量更新
+        if (CollUtil.isNotEmpty(updateExcel)) {
+            baseMapper.updateById(updateExcel);
+        }else{
+            baseMapper.insert(insertExcel);
+        }
+
+        // ===================== 生成失败数据下载链接 =====================
+        String failFileUrl = "";
+        if (CollUtil.isNotEmpty(failedExcel)) {
+            failFileUrl = exportBaseService.upLoadFile(
+                    ImportContentExt.class,
+                    failedExcel,
+                    "平台协议应收-导入失败-" + Instant.now()
+            );
+        }
+
+        // 返回结果
+        importExcelResultVo.setFailedData(failedExcel);
+        importExcelResultVo.setFailFileUrl(failFileUrl);
+        importExcelResultVo.setSuccessNumber(CollUtil.isNotEmpty(updateExcel) ? updateExcel.size() : insertExcel.size());
+        importExcelResultVo.setFailedNumber(CollUtil.size(failedExcel));
+        // 导出成功的orderNos
+
+        List<InsPlyIncome> res = new ArrayList<>();
+        if(CollUtil.isNotEmpty(updateExcel)){
+            res.addAll(updateExcel);
+        }
+        if(CollUtil.isNotEmpty(insertExcel)){
+            res.addAll(insertExcel);
+        }
+        importExcelResultVo.setOrderNos(res.stream().map(InsPlyIncome::getOrderNo).filter(Objects::nonNull).toList());
+        return importExcelResultVo;
+    }
+
+    /**
+     * 对表格中的内容进行扩展
+     *
+     * @param excelContents
+     * @author lipf
+     * @date 2026/8/4 9:22
+     */
+    @Override
+    public List<ImportContentExt> fillExcelContent4Private(List<ExcelContent4Private> excelContents) {
+        log.info("为私有订单填充数据:excelContents.size=[{}]", CollUtil.size(excelContents));
+        return List.of();
+    }
+
+    /**
+     * 批量处理数据
+     * @param updateExcel 要修改的数据
+     * @param insertExcel 要新增的数据
+     */
+    @Override
+    public ImportContentExt spliceData(ImportContentExt vo,
+                                        List<InsPlyIncome> insertExcel,
+                                        List<InsPlyIncome> updateExcel) {
+
+        // 查询数据库中是否已存在该保单号
+        InsPlyIncome existIncome = baseMapper.selectOne(new LambdaQueryWrapper<InsPlyIncome>()
+                .eq(InsPlyIncome::getJqPolicyNo, vo.getJqPolicyNo()));
+
+        // 封装修改数据
+        InsPlyIncome insPlyIncome = new InsPlyIncome();
+        BeanUtil.copyProperties(vo,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.setSystemCode(ptlAgreement.getSystemCode());
+        // 险种编号
+        insPlyIncome.setProductId(ProductsType.getCodeByDesc(vo.getProductName()));
+        // 险种名称
+        insPlyIncome.setProductName(vo.getProductName());
+        // 被保险人姓名
+        insPlyIncome.setInsuredPerson(vo.getInsuredPerson());
+        // 对接人信息
+        insPlyIncome.setContactPerson(vo.getContactPerson());
+        insPlyIncome.setContactPersonPhone(vo.getContactPersonPhone());
+        // 数据库不存在 → 直接失败
+        if (Objects.isNull(existIncome)) {
+            // 加入修改列表
+            // 机构id
+            insPlyIncome.setDeptId(baseController.getUserDeptId());
+            insPlyIncome.setOrderNo(vo.getOrderNo());
+            insertExcel.add(insPlyIncome);
+        }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())) {
+                vo.setErrorMessage("应收数据已结算");
+                return vo;
+            }
+            insPlyIncome.setId(existIncome.getId());
+            // 加入修改列表
+            updateExcel.add(insPlyIncome);
+        }
+        return null;
+    }
+
+
+    /**
+     * 对表格中的内容进行扩展
+     *
+     * @author lipf
+     * @date 2026/8/4 9:22
+     */
+    @Override
+    public List<ImportContentExt> fillExcelContent4Platform(List<ExcelContent4Platform> excelContents) {
+        log.info("填充excel中没有的内容: excelContents.size=[{}]", CollUtil.size(excelContents));
+        if(CollUtil.isEmpty(excelContents)){
+            return Collections.emptyList();
+        }
+        List<ImportContentExt> res = new ArrayList<>();
+        for (ExcelContent4Platform excelContent : excelContents) {
+            ImportContentExt ext = new ImportContentExt();
+            BeanUtil.copyProperties(excelContent,ext);
+            // 查询订单
+            String orderNO = "";
+
+            if(StrUtil.isNotEmpty(excelContent.getJqPolicyNo()) && StrUtil.isEmpty(orderNO)){
+                LambdaQueryWrapper<InsOrdersPolicy> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(InsOrdersPolicy::getJqPolicyNo,excelContent.getJqPolicyNo());
+                List<InsOrdersPolicy> insOrdersPolicies = insOrdersPolicyMapper.selectList(queryWrapper);
+                if(CollUtil.isNotEmpty(insOrdersPolicies)){
+                    orderNO  = insOrdersPolicies.get(0).getOrderNo();
+                }
+            }
+            if(StrUtil.isNotEmpty(excelContent.getSyPolicyNo()) && StrUtil.isEmpty(orderNO)){
+                LambdaQueryWrapper<InsOrdersPolicy> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(InsOrdersPolicy::getSyPolicyNo,excelContent.getSyPolicyNo());
+                List<InsOrdersPolicy> insOrdersPolicies = insOrdersPolicyMapper.selectList(queryWrapper);
+                if(CollUtil.isNotEmpty(insOrdersPolicies)){
+                    orderNO  = insOrdersPolicies.get(0).getOrderNo();
+                }
+            }
+            if(StrUtil.isNotEmpty(excelContent.getJyPolicyNo()) && StrUtil.isEmpty(orderNO)){
+                LambdaQueryWrapper<InsOrdersPolicy> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(InsOrdersPolicy::getJyPolicyNo,excelContent.getJyPolicyNo());
+                List<InsOrdersPolicy> insOrdersPolicies = insOrdersPolicyMapper.selectList(queryWrapper);
+                if(CollUtil.isNotEmpty(insOrdersPolicies)){
+                    orderNO  = insOrdersPolicies.get(0).getOrderNo();
+                }
+            }
+            if(StrUtil.isEmpty(orderNO)){
+                continue;
+            }
+            log.info("处理订单号是[{}]的订单",orderNO);
+            ext.setOrderNo(orderNO);
+            HttpResult<InsOrdersVo> insOrdersVoHttpResult = insOrdersClient.selectById(orderNO);
+            InsOrdersVo data = insOrdersVoHttpResult.getData();
+            if (data!= null){
+                BeanUtil.copyProperties(data,ext);
+                if(data.getSigningTime() != null){
+                    ext.setSigningTime(data.getSigningTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                }
+                String agreementId = data.getAgreementId();
+                AgreementVo agreementVo = ptlAgreementMapper.queryById(agreementId);
+                if(agreementVo != null){
+                    ext.setPartnerCompanyId(agreementVo.getPartnerCompanyId());
+                }
+                InsFeeOrdersVo feeOrdersVo = data.getFeeOrdersVo();
+                if(BeanUtil.isEmpty(feeOrdersVo)){
+                    ext.setJqPremium(feeOrdersVo.getJqPremium());
+                    ext.setSyPremium(feeOrdersVo.getSyPremium());
+                    ext.setJyPremium(feeOrdersVo.getJyPremium());
+                }
+
+            }
+            res.add(ext);
+        }
+        return res;
+    }
+
+    /**
+     * 解析并读取Excel中的内容
+     *
+     * @author lipf
+     * @date 2026/8/4 9:07
+     */
+    public List<ExcelContent4Platform> parseImportExcel4Platform(MultipartFile file) {
+        InvoiceReceivbleExcel4PlatformListener listener = new InvoiceReceivbleExcel4PlatformListener();
+        try (InputStream inputStream = file.getInputStream()) {
+            EasyExcel.read(inputStream, ExcelContent4Platform.class, listener)
+                    .sheet()
+                    .doRead();
+            return listener.getDataList();
+        } catch (Exception e) {
+            log.error("InvoiceReceivbleExcel4PlatformListenery读取文件异常",e);
+            return null;
+        }
+    }
+
+    /**
+     * 解析并读取Excel中的内容
+     *
+     * @author lipf
+     * @date 2026/8/4 9:07
+     */
+    public List<ExcelContent4Private> parseImportExcel4Private(MultipartFile file) {
+        InvoiceReceivbleExcel4PrivateListener listener = new InvoiceReceivbleExcel4PrivateListener();
+        try (InputStream inputStream = file.getInputStream()) {
+            EasyExcel.read(inputStream, ExcelContent4Private.class, listener)
+                    .sheet()
+                    .doRead();
+            return listener.getDataList();
+        } catch (Exception e) {
+            log.error("InvoiceReceivbleExcel4PlatformListenery读取文件异常",e);
+            return null;
+        }
+    }
+}

+ 72 - 0
tenant/organization/src/main/java/com/jzg/organization/service/importincome/ImportIncomeService.java

@@ -0,0 +1,72 @@
+package com.jzg.organization.service.importincome;
+
+import com.jzg.commons.entity.finance.po.InsPlyIncome;
+import com.jzg.commons.entity.finance.vo.importimcome.ExcelContent4Private;
+import com.jzg.commons.entity.finance.vo.importimcome.ImportUpdateExcelResultVo;
+import com.jzg.commons.entity.finance.vo.importimcome.ExcelContent4Platform;
+import com.jzg.commons.entity.finance.vo.importimcome.ImportContentExt;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+@Service
+public interface ImportIncomeService {
+
+    /**
+     * 对表格中的内容进行扩展
+     *
+     * @author lipf
+     * @date 2026/8/4 9:22
+     */
+    public List<ImportContentExt> fillExcelContent4Platform(List<ExcelContent4Platform> excelContents);
+
+    /**
+     * 对表格中的内容进行扩展
+     *
+     * @author lipf
+     * @date 2026/8/4 9:22
+     */
+    public List<ImportContentExt> fillExcelContent4Private(List<ExcelContent4Private> excelContents);
+
+    /**
+     * 批量处理数据
+     * @param updateExcel
+     * @param insertExcel
+     */
+    public ImportContentExt spliceData(ImportContentExt vo,
+                                       List<InsPlyIncome> insertExcel,
+                                       List<InsPlyIncome> updateExcel);
+
+    /**
+     * <p>
+     * 1. 获取保司名称
+     * 2. 校验Excel内部保单号重复
+     * 3. 处理数据
+     * 4. 执行批量更新
+     * 5. 生成失败数据下载链接
+     * 6. 返回结果
+     * </p>
+     *
+     * @return List<InvoiceReceivableExportExcelVo> 处理后的数据列表
+     */
+    public ImportUpdateExcelResultVo getDataManipulationResult(List<InsPlyIncome> updateExcel,
+                                                               List<InsPlyIncome> insertExcel,
+                                                                List<ImportContentExt> failedExcel);
+
+    /**
+     * 解析并读取Excel中的内容
+     *
+     * @author lipf
+     * @date 2026/8/4 9:07
+     */
+    public List<ExcelContent4Private> parseImportExcel4Private(MultipartFile file);
+
+    /**
+     * 解析并读取Excel中的内容
+     *
+     * @author lipf
+     * @date 2026/8/4 9:07
+     */
+    public List<ExcelContent4Platform> parseImportExcel4Platform(MultipartFile file);
+}