Просмотр исходного кода

Merge branch 'dev_jzg_lipf_v20260518'

lipf 4 месяцев назад
Родитель
Сommit
3979c97b2a
21 измененных файлов с 487 добавлено и 80 удалено
  1. 3 0
      commons/src/main/java/com/jzg/commons/entity/finance/dto/ExportSuperviseSettlementExcelDto.java
  2. 8 0
      commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java
  3. 7 0
      commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncomeInvoice.java
  4. 36 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InsPlyIncomeInvoiceVO.java
  5. 39 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceAndSettlementVo.java
  6. 1 1
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoicingVo.java
  7. 22 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/PlatformSettlementVo.java
  8. 4 3
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsFeeAuditService.java
  9. 2 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java
  10. 6 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java
  11. 6 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  12. 29 29
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml
  13. 12 0
      tenant/organization/src/main/java/com/jzg/organization/controller/PtlAgreementDispatchController.java
  14. 57 15
      tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java
  15. 1 1
      tenant/organization/src/main/java/com/jzg/organization/controller/SchemeController.java
  16. 10 0
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementDispatchService.java
  17. 25 4
      tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java
  18. 25 7
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementDispatchServiceImpl.java
  19. 1 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java
  20. 192 17
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  21. 1 0
      tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

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

@@ -74,4 +74,7 @@ public class ExportSuperviseSettlementExcelDto {
     @Schema(description = "附件url")
     private String fileUrl;
 
+    @Schema(description = "订单号")
+    private String orderNo;
+
 }

+ 8 - 0
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java

@@ -206,6 +206,14 @@ public class InsPlyIncome extends BaseModel {
     @ExcelProperty("驾意跟单位是否已经结算")
     private String jyOtherSettlement;
 
+    @Schema(description = "平台协议车险应收是否已经结算  0 未结算  1 结算")
+    @ExcelProperty("平台协议车险应收是否已经结算")
+    private String platformSuperviseSettlement;
+
+    @Schema(description = "平台协议非车险应收是否已经结算  0 未结算  1 结算")
+    @ExcelProperty("平台协议非车险应收是否已经结算")
+    private String platformOtherSettlement;
+
     @Schema(description = "维护人工号")
     @ExcelProperty("维护人工号")
     private String leaderId;

+ 7 - 0
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncomeInvoice.java

@@ -6,6 +6,7 @@ import lombok.Data;
 
 import java.io.Serial;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.Objects;
 
 @Data
@@ -44,6 +45,12 @@ public class InsPlyIncomeInvoice extends BaseModel {
     @Schema(description = "税点")
     private String taxPoint;
 
+    @Schema(description = "开票号/发票号")
+    private String invoiceNo;
+
+    @Schema(description = "开票时间")
+    private LocalDateTime invoiceTime;
+
     @Schema(description = "状态")
     private String status;
 

+ 36 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/InsPlyIncomeInvoiceVO.java

@@ -0,0 +1,36 @@
+package com.jzg.commons.entity.finance.vo;
+
+import com.jzg.commons.entity.finance.po.InsPlyIncomeInvoice;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Schema(description = "财务应收开票表")
+public class InsPlyIncomeInvoiceVO extends InsPlyIncomeInvoice {
+
+    @Serial
+    private static final long serialVersionUID = 6982290696670953095L;
+    @Schema(description = "是否能开票")
+    private boolean canInvoice;
+
+    @Schema(description = "不能开票的原因")
+    private String errMsg;
+
+    /**
+     * 发票对应的应收订单的序号
+     * @date 2026/5/26 11:35
+     */
+    private List<String> incomeIds;
+
+    /**
+     * 发票对应的应收订单的序号
+     * @date 2026/5/26 11:35
+     */
+    private List<String> orderNos;
+
+}

+ 39 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceAndSettlementVo.java

@@ -0,0 +1,39 @@
+package com.jzg.commons.entity.finance.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+
+/**
+ * 结算Vo
+ */
+@Data
+@Schema(description = "结算Vo")
+public class InvoiceAndSettlementVo {
+
+    /**
+     * 开票的相关信息
+     */
+    private InsPlyIncomeInvoiceVO invoiceVO;
+
+    @Schema(description = "开票id")
+    private String invoicingId;
+
+    @Schema(description = "实收金额")
+    private BigDecimal actualReceivedAmount;
+
+    @Schema(description = "收款日期")
+    private String receivePaymentDate;
+
+    @Schema(description = "回款差额")
+    private BigDecimal paymentDifference;
+
+    @Schema(description = "差额原因")
+    private String paymentReason;
+
+    @Schema(description = "附加id")
+    private List<String> attachmentIds;
+}

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

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

+ 22 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/PlatformSettlementVo.java

@@ -0,0 +1,22 @@
+package com.jzg.commons.entity.finance.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+
+/**
+ * 结算Vo
+ */
+@Data
+@Schema(description = "平台结算Vo")
+public class PlatformSettlementVo {
+
+    @Schema(description = "结算Vo")
+    private SettlementVo settlementVo;
+
+    @Schema(description = "开票id")
+    private InvoicingVo invoicingVo;
+}

+ 4 - 3
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsFeeAuditService.java

@@ -36,9 +36,10 @@ public interface InsFeeAuditService extends IService<InsFeeAudit> {
     void feeAuditAdd(InsOrders orders);
 
     /**
-     * 订单详情
-     * @param orderNo
-     * @return
+     * 根据订单号查询订单详情
+     *
+     * @param orderNo 订单编号
+     * @return QuoteEchoVo 订单详情
      */
     QuoteEchoVo auditInfo(String orderNo);
 

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

@@ -128,8 +128,8 @@ public interface InsOrdersService extends IService<InsOrders> {
     /**
      * 查询订单详情
      *
-     * @param ordersNo
-     * @return
+     * @param ordersNo 订单号
+     * @return QuoteEchoVo 订单详情
      */
     QuoteEchoVo getOrderDetail(String ordersNo);
 

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

@@ -227,6 +227,12 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         this.save(insFeeAudit);
     }
 
+    /**
+     * 根据订单号查询订单详情
+     *
+     * @param orderNo 订单编号
+     * @return QuoteEchoVo 订单详情
+     */
     @Override
     public QuoteEchoVo auditInfo(String orderNo) {
         //险种和订单类型以及业务员对应的管理员

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

@@ -1298,7 +1298,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
     }
 
-
+    /**
+     * 查询订单详情
+     *
+     * @param ordersNo 订单号
+     * @return QuoteEchoVo 订单详情
+     */
     @Override
     public QuoteEchoVo getOrderDetail(String ordersNo) {
         log.info("获取订单详情.ordersNo=[{}]", ordersNo);

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

@@ -27,20 +27,21 @@
     </sql>
     <select id="queryPage" resultType="com.jzg.commons.entity.orders.vo.FeeAuditVo">
         SELECT
-            ifa.order_no as orderNo,
-            io.company_id,
-            io.company_name as companyName,
-            ioci.license_no AS licenseNo,
-            iocui.name as insurName,
-            CASE io.entry_status
-            WHEN 1 THEN '车险出单'
-            WHEN 2 THEN '代客录单'
-            WHEN 3 THEN '补录订单'
-            ELSE ''
-            END AS order_type,
-            suji.name as name,
-            su.mobile as mobile,
-            CASE suji.type_attr
+                qsu.username ,    -- 业务员登录账号
+        ifa.order_no as orderNo,
+        io.company_id,
+        io.company_name as companyName,
+        ioci.license_no AS licenseNo,
+        iocui.name as insurName,
+        CASE io.entry_status
+        WHEN 1 THEN '车险出单'
+        WHEN 2 THEN '代客录单'
+        WHEN 3 THEN '补录订单'
+        ELSE ''
+        END AS order_type,
+        suji.name as name,
+        qsu.mobile as mobile,
+        CASE suji.type_attr
                 WHEN 1 THEN '前线人员'
                 WHEN 2 THEN '后线人员'
                 WHEN 3 THEN '合伙人'
@@ -65,19 +66,18 @@
                 WHEN 1 THEN '是'
                 ELSE ''
                 END AS isProblem,
-            io.order_source
-        FROM ins_fee_audit ifa
-        LEFT JOIN ins_orders as io on ifa.order_no = io.id
-        LEFT JOIN ins_orders_car_info as ioci on io.id = ioci.order_no
-        LEFT JOIN ins_orders_car_user_info as iocui on io.id = iocui.order_no and iocui.policy_person_type = 3
-        LEFT JOIN sys_user qsu on qsu.mobile = io.real_quote_user_id
-        LEFT JOIN sys_user_jzg_info suji ON suji.user_id = qsu.id and suji.system_code = #{param.systemCode}
-        LEFT JOIN sys_user su on su.id = io.real_quote_user_id
-        LEFT JOIN sys_dept sd on suji.dept_id = sd.id
-        LEFT JOIN ptl_agreement pa on io.agreement_id = pa.id
-        LEFT JOIN sys_user sua on sua.id = pa.custodian_id
-        LEFT JOIN ins_orders_costs ioc on ioc.order_no = io.id
-        LEFT JOIN ins_orders_external_policy ioep on ioep.order_no = io.id
+                io.order_source
+                FROM ins_fee_audit ifa
+                LEFT JOIN ins_orders as io on ifa.order_no = io.id
+                LEFT JOIN ins_orders_car_info as ioci on io.id = ioci.order_no
+                LEFT JOIN ins_orders_car_user_info as iocui on io.id = iocui.order_no and iocui.policy_person_type = 3
+                LEFT JOIN sys_user qsu on qsu.mobile = io.real_quote_user_id
+                LEFT JOIN sys_user_jzg_info suji ON suji.user_id = qsu.id and suji.system_code = #{param.systemCode}
+                LEFT JOIN sys_dept sd on suji.dept_id = sd.id
+                LEFT JOIN ptl_agreement pa on io.agreement_id = pa.id
+                LEFT JOIN sys_user sua on sua.id = pa.custodian_id
+                LEFT JOIN ins_orders_costs ioc on ioc.order_no = io.id
+                LEFT JOIN ins_orders_external_policy ioep on ioep.order_no = io.id
         <where>
             <choose>
                 <when test="param.receiveUser != null and param.receiveUser != ''">
@@ -106,7 +106,7 @@
                 and suji.type_attr = #{param.attrType}
             </if>
             <if test="param.salesman != null and param.salesman != ''">
-                and (su.username = #{param.salesman} or su.mobile = #{param.salesman})
+                and (qsu.username = #{param.salesman} or qsu.mobile = #{param.salesman})
             </if>
             <if test="param.orderStatus != null ">
                 and io.order_status = #{param.orderStatus}
@@ -192,7 +192,7 @@
                 END AS attrType,
                io.signing_time as signingTime,
                io.create_time as quotationTime, sua.username as dockingPerson,
-               pa.agreement_abbreviation as agreementName,io.product_name as productName,
+               pa.agreement_abbreviation as agreementName,io.product_id, io.product_name as productName,
                ioc.jq_premium as jqPremium, ioc.sy_premium as syPremium, ioc.jy_premium as jyPremium,
                ioc.sum_premium as sumPremium,sd.name as deptName,ifa.create_time as createTime,
                ifa.create_by as createBy,io.pay_time as payTime, ifa.audit_time as auditTime,

+ 12 - 0
tenant/organization/src/main/java/com/jzg/organization/controller/PtlAgreementDispatchController.java

@@ -88,4 +88,16 @@ public class PtlAgreementDispatchController {
     public HttpResult updateDispatchName(String dispatchId,String name){
         return ptlAgreementDispatchService.updateDispatchName(dispatchId, name) ? HttpResult.ok("修改调度名称成功") : HttpResult.error("修改调度名称失败");
     }
+
+    /**
+     * 删除后置处理动作
+     *
+     * @param afterActionId ptl_agreement_dispatch_after_action表的序号
+     * @author lipf
+     * @date 2026/5/26 15:22
+     */
+    @DeleteMapping("/deleteAfterActionById/{afterActionId}")
+    public HttpResult<String> deleteAfterActionById(@PathVariable("afterActionId") String afterActionId){
+        return ptlAgreementDispatchService.deleteAfterActionById(afterActionId);
+    }
 }

+ 57 - 15
tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java

@@ -7,10 +7,7 @@ import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.finance.dto.CompanySuperviseSettlementReportDto;
 import com.jzg.commons.entity.finance.dto.ExportSuperviseSettlementExcelDto;
 import com.jzg.commons.entity.finance.dto.ReceiverSettlementReportDto;
-import com.jzg.commons.entity.finance.po.InsPlyIncome;
-import com.jzg.commons.entity.finance.po.InsPlyIncomeInvoiceSettlement;
-import com.jzg.commons.entity.finance.po.InsPlyIncomeOrder;
-import com.jzg.commons.entity.finance.po.InsPlyIncomeVO;
+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.request.RequestSingleParam;
@@ -25,6 +22,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -149,24 +147,18 @@ public class ReceivableController {
 
     @PostMapping("commissionInvoicing")
     @Operation(summary = "手续费开票")
-    public HttpResult commissionInvoicing(@RequestBody InvoicingVo invoicingVo){
-        // 设置手续费开票
-        //invoicingVo.setInvoiceType("1");
-//        boolean invoicingCheck = receivableService.invoicingCheck(invoicingVo);
-//        if(!invoicingCheck){
-//            return HttpResult.error("有订单占用");
-//        }
+    public HttpResult<InvoiceingResult> commissionInvoicing(@RequestBody InsPlyIncomeInvoiceVO invoicingVo){
         InvoiceingResult result = receivableService.addInvoicing(invoicingVo);
         if (Objects.nonNull(result)){
-            return HttpResult.ok("开票成功",result);
+            return HttpResult.ok("开票成功,发票号是" + result.getInvoiceId() ,result);
         }
         return HttpResult.error("开票失败");
     }
 
     @PostMapping("otherInvoicing")
     @Operation(summary = "跟单费开票")
-    public HttpResult otherInvoicing(@RequestBody InvoicingVo invoicingVo){
-        // 设置跟单费开票
+    public HttpResult<InvoiceingResult> otherInvoicing(@RequestBody InsPlyIncomeInvoiceVO invoicingVo){
+        // 开票类型  1、手续费  2、跟单费  3、驾意险手续费 4、驾意险跟单费 5、平台应收-车险 6、平台应收-非车险
         invoicingVo.setInvoiceType("2");
         InvoiceingResult result = receivableService.addInvoicing(invoicingVo);
         if (Objects.nonNull(result)){
@@ -178,6 +170,9 @@ public class ReceivableController {
     @PostMapping("invoicingCheck")
     @Operation(summary = "开票检测")
     public HttpResult<String> invoicingCheck(@RequestBody InvoicingVo invoicingVo) {
+//        if(1 == 1){
+//            return HttpResult.ok("无占用");
+//        }
         boolean result = receivableService.invoicingCheck(invoicingVo);
         if(result){
             return HttpResult.ok("无占用");
@@ -187,6 +182,23 @@ public class ReceivableController {
         }
     }
 
+    /**
+     * 开票前计算应收金额等信息
+     *
+     * @param invoicingVo 获取订单编号等信息
+     * @author lipf
+     * @date 2026/5/26 10:45
+     */
+    @Operation(summary = "开票前计算应收金额等信息")
+    @PostMapping("/calBeforeInvoice")
+    public HttpResult<InsPlyIncomeInvoice> calBeforeInvoice(@RequestBody InvoicingVo invoicingVo){
+        InsPlyIncomeInvoiceVO insPlyIncomeInvoice = receivableService.calBeforeInvoice(invoicingVo);
+        if(!insPlyIncomeInvoice.isCanInvoice()){
+            return HttpResult.error(500,insPlyIncomeInvoice,insPlyIncomeInvoice.getErrMsg());
+        }
+        return HttpResult.ok(insPlyIncomeInvoice);
+    }
+
     @PostMapping("getReceivableCompany")
     @Operation(summary = "获取保险公司")
     public HttpResult getReceivableCompany(@RequestBody InvoicingVo invoicingVo){
@@ -194,7 +206,7 @@ public class ReceivableController {
     }
 
     @PostMapping("settlement")
-    @Operation(summary = "结算")
+    @Operation(summary = "私有协议结算")
     public HttpResult<String> settlement(@RequestBody SettlementVo settlementVo){
         try{
             boolean settlement = receivableService.settlement(settlementVo);
@@ -204,6 +216,36 @@ public class ReceivableController {
             return HttpResult.error(e.getMessage());
         }
     }
+    /**
+     * 开票并结算
+     *
+     * @author lipf
+     * @date 2026/5/26 11:57
+     */
+    @PostMapping("invoiceAndSettlement")
+    @Operation(summary = "开票并结算")
+    public HttpResult<String> invoiceAndSettlement(@RequestBody InvoiceAndSettlementVo settlementVo){
+        return receivableService.invoiceAndSettlement(settlementVo);
+    }
+
+    @PostMapping("platformSettlement")
+    @Operation(summary = "平台协议结算")
+    public HttpResult<String> platformSettlement(@RequestBody PlatformSettlementVo platformSettlementVo){
+        try{
+            boolean settlement = receivableService.platformSettlement(platformSettlementVo);
+            return settlement ? HttpResult.ok("结算成功") : HttpResult.error("结算失败");
+        }catch (Exception e){
+            log.error("结算失败",e);
+            return HttpResult.error(e.getMessage());
+        }
+    }
+
+    @PostMapping("getPlatformSettlementReceivableAmount")
+    @Operation(summary = "获取平台协议结算的应收金额")
+    public HttpResult<BigDecimal> getPlatformSettlementReceivableAmount(@RequestBody InvoicingVo invoicingVo){
+        BigDecimal receivableAmount = receivableService.getReceivableAmount(invoicingVo);
+        return HttpResult.ok(receivableAmount);
+    }
 
     @PostMapping("settlementList")
     @Operation(summary = "结算明细")

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

@@ -42,7 +42,7 @@ public class SchemeController {
 
     @Operation(summary = "获取方案")
     @GetMapping("/getScheme")
-    public HttpResult getScheme(String id){
+    public HttpResult<PtlSchemeQueryVo> getScheme(String id){
         PtlSchemeQueryVo schemeList = ptlSchemeService.getScheme(id);
         return HttpResult.ok(schemeList);
     }

+ 10 - 0
tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementDispatchService.java

@@ -1,6 +1,7 @@
 package com.jzg.organization.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatch;
 import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAfterAction;
 import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchQuery;
@@ -62,4 +63,13 @@ public interface PtlAgreementDispatchService extends IService<PtlAgreementDispat
      * @return
      */
     public boolean updateDispatchName(String dispatchId,String name);
+
+    /**
+     * 删除后置处理动作
+     *
+     * @param afterActionId ptl_agreement_dispatch_after_action表的序号
+     * @author lipf
+     * @date 2026/5/26 15:22
+     */
+    HttpResult<String> deleteAfterActionById(String afterActionId);
 }

+ 25 - 4
tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java

@@ -4,9 +4,7 @@ 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.finance.dto.*;
-import com.jzg.commons.entity.finance.po.InsPlyIncome;
-import com.jzg.commons.entity.finance.po.InsPlyIncomeInvoiceSettlement;
-import com.jzg.commons.entity.finance.po.InsPlyIncomeOrder;
+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.po.EsmInsCompany;
@@ -76,7 +74,7 @@ public interface ReceivableService extends IService<InsPlyIncome> {
     /**
      * 添加开票
      */
-    InvoiceingResult addInvoicing(InvoicingVo invoicingVo);
+    InvoiceingResult addInvoicing(InsPlyIncomeInvoiceVO invoicingVo);
 
     /**
      * 获取票据的实收金额
@@ -321,4 +319,27 @@ public interface ReceivableService extends IService<InsPlyIncome> {
      */
     HttpResult<String> deleteIncomesByIds(List<Long> ids, String userName);
 
+    /**
+     * 开票前计算应收金额等信息
+     *
+     * @param invoicingVo 获取订单编号等信息
+     * @author lipf
+     * @date 2026/5/26 10:45
+     */
+    InsPlyIncomeInvoiceVO calBeforeInvoice(InvoicingVo invoicingVo);
+
+    /**
+     * 开票并结算
+     *
+     * @param settlementVo 开票信息和结算信息
+     * @author lipf
+     * @date 2026/5/26 11:44
+     */
+    HttpResult<String> invoiceAndSettlement(InvoiceAndSettlementVo settlementVo);
+    /**
+     * 平台结算
+     * @param platformSettlementVo
+     * @return
+     */
+    boolean platformSettlement(PlatformSettlementVo platformSettlementVo);
 }

+ 25 - 7
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementDispatchServiceImpl.java

@@ -121,8 +121,8 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
         PtlAgreementDispatchVo dispatchVos = new PtlAgreementDispatchVo();
         List<String> dispatchIds = ptlAgreementDispatches.stream().map(PtlAgreementDispatch::getId).collect(Collectors.toList());
         if (!dispatchIds.isEmpty()) {
-            List<SysDict> dispatchBeforeActionDict = sysDictService.getByTypeCode("dispatch_before_action");
-            //List<SysDict> dispatchAfterActionDict = sysDictService.getByTypeCode("dispatch_after_action");
+            List<SysDict> beforeActionDicts = sysDictService.getByTypeCode("dispatch_before_action");
+            List<SysDict> afterActionsDicts = sysDictService.getByTypeCode("dispatch_after_action");
 
             // 查询保司所有的规则属性 然后进行分组
             List<PtlAgreementDispatchRulesAttrLink> ptlAgreementDispatchRulesAttrLinks = rulesAttrLinkMapper.selectList(new LambdaQueryWrapper<PtlAgreementDispatchRulesAttrLink>()
@@ -136,7 +136,7 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
             // 获取所有保司的动作
             List<PtlAgreementDispatchAction> ptlAgreementDispatchActions = actionMapper.getActions(dispatchIds);
             // 获取保司的报价失败之后的动作
-            List<PtlAgreementDispatchAfterAction> ptlAgreementDispatchAfterActions = afterActionMapper.getAfterActions(ptlAgreementDispatchQuery.getCompanyId());
+            List<PtlAgreementDispatchAfterAction> afterActions = afterActionMapper.getAfterActions(ptlAgreementDispatchQuery.getCompanyId());
             int index = 1;
             // add by lipf, 对协议配置中的字典序号进行转义 2026年5月20日16:43:34
             List<PtlAgreementUndwrtRulesDictLabal> ptlAgreementUndwrtRulesDictLabals = baseMapper.queryAllDictLabal();
@@ -189,7 +189,7 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
                 }
 
                 for(PtlAgreementDispatchAction action : actions){
-                    SysDict sysDict = dispatchBeforeActionDict.stream().filter(x -> x.getValue().equals(action.getActionCode())).findFirst().orElse(null);
+                    SysDict sysDict = beforeActionDicts.stream().filter(x -> x.getValue().equals(action.getActionCode())).findFirst().orElse(null);
                     if(sysDict == null){
                         action.setActionName("未知动作");
                     }else{
@@ -220,8 +220,8 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
                 dispatchVos.getDispatchVos().add(vo);
             }
 
-            for(PtlAgreementDispatchAfterAction afterAction : ptlAgreementDispatchAfterActions){
-                SysDict sysDict = dispatchBeforeActionDict.stream().filter(x -> x.getValue().equals(afterAction.getActionCode())).findFirst().orElse(null);
+            for(PtlAgreementDispatchAfterAction afterAction : afterActions){
+                SysDict sysDict = afterActionsDicts.stream().filter(x -> x.getValue().equals(afterAction.getActionCode())).findFirst().orElse(null);
                 if(sysDict == null){
                     afterAction.setActionName("未知动作");
                 }else{
@@ -245,7 +245,7 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
                     }
                 }
             }
-            dispatchVos.setAfterActions(ptlAgreementDispatchAfterActions);
+            dispatchVos.setAfterActions(afterActions);
         }
 
 
@@ -287,6 +287,24 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
         return false;
     }
 
+    /**
+     * 删除后置处理动作
+     *
+     * @param afterActionId ptl_agreement_dispatch_after_action表的序号
+     * @author lipf
+     * @date 2026/5/26 15:22
+     */
+    @Override
+    public HttpResult<String> deleteAfterActionById(String afterActionId) {
+        log.info("删除后置处理操作:afterActionId=[{}]",afterActionId);
+        PtlAgreementDispatchAfterAction ptlAgreementDispatchAfterAction = afterActionMapper.selectById(afterActionId);
+        if(ptlAgreementDispatchAfterAction == null) {
+            log.info("要删除的后置操作不存在. afterActionId=[{}]",afterActionId);
+            return HttpResult.error("要删除的后置操作不存在");
+        }
+        afterActionMapper.deleteById(afterActionId);
+        return HttpResult.ok("删除成功");
+    }
 }
 
 

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

@@ -184,6 +184,7 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
 
     @Override
     public PtlSchemeQueryVo getScheme(String id) {
+        log.info("根据方案id=[{}]获取方案信息(ptl_scheme_info)",id);
         //获取方案信息
         PtlSchemeInfo ptlSchemeInfo = ptlSchemeInfoMapper.selectOne(new LambdaQueryWrapper<PtlSchemeInfo>()
                 .eq(PtlSchemeInfo::getId, id));

+ 192 - 17
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -128,6 +128,10 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     private static final String JY_INVOICING_COMMISSION_LOCK = "JY_INVOICING_COMMISSION_LOCK:";
     // 驾意险跟单费结算所
     private static final String JY_INVOICING_OTHER_LOCK = "JY_INVOICING_OTHER_LOCK:";
+    // 平台车险结算锁
+    private static final String PT_INVOICING_COMMISSION_LOCK = "PT_INVOICING_COMMISSION_LOCK:";
+    // 平台非车险结算锁
+    private static final String PT_INVOICING_OTHER_LOCK = "PT_INVOICING_OTHER_LOCK:";
 
 
 //    @Override
@@ -473,6 +477,34 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         return invoiceIds;
     }
 
+    /**
+     * 开票前计算应收金额等信息
+     *
+     * @param invoicingVo 获取订单编号等信息
+     * @author lipf
+     * @date 2026/5/26 10:45
+     */
+    @Override
+    public InsPlyIncomeInvoiceVO calBeforeInvoice(InvoicingVo invoicingVo) {
+        log.info("开票前校验并计算应收金额等金额。 invoicingVO=[{}]", JSONUtil.toJsonStr(invoicingVo));
+        InsPlyIncomeInvoiceVO invoice = new InsPlyIncomeInvoiceVO();
+        boolean b = this.invoicingCheck(invoicingVo);
+        if(!b){
+            List<String> invoiceIds = this.queryIncomeBindInvoice(invoicingVo);
+            invoice.setCanInvoice(false);
+            invoice.setErrMsg("订单已开票。发票序号是"+ invoiceIds.toString());
+            return invoice;
+        }
+        invoice.setCanInvoice(true);
+        BigDecimal receivableAmount = this.getReceivableAmount(invoicingVo);
+        log.info("根据订单号[{}]计算得到的应收金额是[{}]",JSONUtil.toJsonStr(invoicingVo),receivableAmount);
+        invoice.setReceivableSupervisePremium(receivableAmount);
+        invoice.setCompanyId(invoicingVo.getCompanyId());
+        invoice.setInvoiceTime(LocalDateTime.now());
+        invoice.setInvoiceType(invoicingVo.getInvoiceType());
+        return invoice;
+    }
+
     /**
      * 开票重复校验
      * 功能:DB+Redis双重校验,防止并发重复开票
@@ -495,12 +527,15 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             return false;
         }
 
+        // 开票类型  1、手续费  2、跟单费  3、驾意险手续费 4、驾意险跟单费 5、平台应收-车险 6、平台应收-非车险
         // 3. 根据开票类型获取Redis锁前缀
         String redisKeyPrefix = switch (invoicingVo.getInvoiceType()) {
             case "1" -> CAR_INVOICING_COMMISSION_LOCK;
             case "2" -> CAR_INVOICING_OTHER_LOCK;
             case "3" -> JY_INVOICING_COMMISSION_LOCK;
             case "4" -> JY_INVOICING_OTHER_LOCK;
+            case "5" -> PT_INVOICING_COMMISSION_LOCK;
+            case "6" -> PT_INVOICING_OTHER_LOCK;
             default -> throw new SystemException("不支持的开票类型");
         };
 
@@ -567,6 +602,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
 
     @Override
     public BigDecimal getReceivableAmount(InvoicingVo invoicingVo) {
+        log.info("获取订单的应收金额:invoicingVo=[{}]", JSONUtil.toJsonStr(invoicingVo));
         String invoiceType = invoicingVo.getInvoiceType();
         List<String> orderNos = invoicingVo.getOrderNos();
         orderNos = orderNos.stream()
@@ -596,6 +632,12 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         } 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;
     }
@@ -603,34 +645,34 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     /**
      * 添加发票
      *
-     * @param invoicingVo
-     * @return
+     * @param invoicingVo 开票相关的信息
+     * @return InvoiceingResult 开票的结果
      */
     @Override
     @Transactional
-    public InvoiceingResult addInvoicing(InvoicingVo invoicingVo) {
+    public InvoiceingResult addInvoicing(InsPlyIncomeInvoiceVO invoicingVo) {
+        log.info("开票:invoicingVo=[{}]", JSONUtil.toJsonStr(invoicingVo));
         try {
-            invoicingVo.setReceivablePremium(this.getReceivableAmount(invoicingVo));
-
             InvoiceingResult result = new InvoiceingResult();
             InsPlyIncomeInvoice invoice = new InsPlyIncomeInvoice();
+            BeanUtils.copyProperties(invoicingVo, invoice);
             invoice.setId(IdGenerate.nextId());
             invoice.setCompanyId(invoicingVo.getCompanyId());
             invoice.setInvoiceType(invoicingVo.getInvoiceType());
-            // 开票类型  1 手续费  2 跟单费  3 驾意险手续费 4 驾意险跟单费
+            //  开票类型  1、手续费  2、跟单费  3、驾意险手续费 4、驾意险跟单费 5、平台应收-车险 6、平台应收-非车险
             if("1".equals(invoicingVo.getInvoiceType()) || "2".equals(invoicingVo.getInvoiceType())){
                 invoice.setInvoiceRiskType("10");
+            }else if("5".equals(invoicingVo.getInvoiceType()) || "6".equals(invoicingVo.getInvoiceType())){
+                invoice.setInvoiceRiskType("30");
             }else{
                 invoice.setInvoiceRiskType("20");
             }
             invoice.setInvoiceParty(invoicingVo.getInvoiceParty());
             invoice.setOverinflatedAmount(invoicingVo.getOverinflatedAmount());
-            invoice.setReceivableSupervisePremium(invoicingVo.getReceivablePremium());
+            invoice.setReceivableSupervisePremium(invoicingVo.getReceivableSupervisePremium());
             invoice.setTaxPoint(invoicingVo.getTaxPoint());
             insPlyIncomeInvoiceMapper.insert(invoice);
-
-            List<InsPlyIncomeInvoiceLink> invoicingLinkList = new ArrayList();
-
+            List<InsPlyIncomeInvoiceLink> invoicingLinkList = new ArrayList<InsPlyIncomeInvoiceLink>();
             invoicingVo.getIncomeIds().forEach(incomeId -> {
                 InsPlyIncomeInvoiceLink link = new InsPlyIncomeInvoiceLink();
                 link.setId(IdGenerate.nextId());
@@ -641,7 +683,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             });
             insPlyIncomeInvoiceLinkMapper.insert(invoicingLinkList);
             result.setInvoiceId(invoice.getId());
-            result.setSumPrice(null != invoicingVo.getReceivablePremium() ? invoicingVo.getReceivablePremium().toString() : null);
+            result.setSumPrice(null != invoicingVo.getReceivableSupervisePremium() ? invoicingVo.getReceivableSupervisePremium().toString() : null);
             return result;
         } catch (Exception e) {
             log.info("开票异常.invoicingVo=[{}]",JSONUtil.toJsonStr(invoicingVo), e);
@@ -691,12 +733,141 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                         .in(InsPlyIncome::getId, invoiceIds)
                         .set(InsPlyIncome::getJyOtherSettlement, "1"));
                 break;
+            case "5":
+                result = baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
+                        .in(InsPlyIncome::getId, invoiceIds)
+                        .set(InsPlyIncome::getPlatformSuperviseSettlement, "1").set(InsPlyIncome::getSettlementStatus, "1"));
+                break;
+            case "6":
+                result = baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
+                        .in(InsPlyIncome::getId, invoiceIds)
+                        .set(InsPlyIncome::getPlatformOtherSettlement, "1").set(InsPlyIncome::getSettlementStatus, "1"));
+                break;
             default:
                 result = 0;
         }
         return result > 0;
     }
 
+    /**
+     * 开票并结算
+     *
+     * @param settlementVo 开票信息和结算信息
+     * @author lipf
+     * @date 2026/5/26 11:44
+     */
+    @Override
+    public HttpResult<String> invoiceAndSettlement(InvoiceAndSettlementVo settlementVo) {
+        log.info("开票并结算: settlementVo=[{}]", JSONUtil.toJsonStr(settlementVo));
+        InvoiceingResult result = this.addInvoicing(settlementVo.getInvoiceVO());
+        if (Objects.nonNull(result)){
+            SettlementVo settlementVo1 = new SettlementVo();
+            BeanUtils.copyProperties(settlementVo, settlementVo1);
+            settlementVo1.setInvoicingId(result.getInvoiceId());
+            boolean settlement = this.settlement(settlementVo1);
+            if(settlement){
+                return HttpResult.ok("开票并结算成功");
+            }else{
+                return HttpResult.error("开票成功但结算失败");
+            }
+        }
+        return HttpResult.error("开票失败");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean platformSettlement(PlatformSettlementVo platformSettlementVo) {
+        SettlementVo settlementVo = platformSettlementVo.getSettlementVo();
+        InvoicingVo invoicingVo = platformSettlementVo.getInvoicingVo();
+
+        log.info("平台结算:platformSettlement=[{}]", JSONUtil.toJsonStr(platformSettlementVo));
+        try {
+            // ============================开票逻辑============================
+            invoicingVo.setReceivablePremium(this.getReceivableAmount(invoicingVo));
+
+            InvoiceingResult result = new InvoiceingResult();
+            InsPlyIncomeInvoice invoice = new InsPlyIncomeInvoice();
+            invoice.setId(IdGenerate.nextId());
+            invoice.setCompanyId(invoicingVo.getCompanyId());
+            invoice.setInvoiceType(invoicingVo.getInvoiceType());
+            //  开票类型  1、手续费  2、跟单费  3、驾意险手续费 4、驾意险跟单费 5、平台应收-车险 6、平台应收-非车险
+            if("1".equals(invoicingVo.getInvoiceType()) || "2".equals(invoicingVo.getInvoiceType())){
+                invoice.setInvoiceRiskType("10");
+            }else if("5".equals(invoicingVo.getInvoiceType()) || "6".equals(invoicingVo.getInvoiceType())){
+                invoice.setInvoiceRiskType("30");
+            }else{
+                invoice.setInvoiceRiskType("20");
+            }
+            invoice.setInvoiceParty(invoicingVo.getInvoiceParty());
+            invoice.setOverinflatedAmount(invoicingVo.getOverinflatedAmount());
+            invoice.setReceivableSupervisePremium(invoicingVo.getReceivablePremium());
+            invoice.setTaxPoint(invoicingVo.getTaxPoint());
+
+            List<InsPlyIncomeInvoiceLink> invoicingLinkList = new ArrayList();
+
+            invoicingVo.getIncomeIds().forEach(incomeId -> {
+                InsPlyIncomeInvoiceLink link = new InsPlyIncomeInvoiceLink();
+                link.setId(IdGenerate.nextId());
+                link.setInvoiceId(invoice.getId());
+                link.setIncomeId(incomeId);
+                link.setInvoiceType(invoicingVo.getInvoiceType());
+                invoicingLinkList.add(link);
+            });
+            insPlyIncomeInvoiceLinkMapper.insert(invoicingLinkList);
+            result.setInvoiceId(invoice.getId());
+            result.setSumPrice(null != invoicingVo.getReceivablePremium() ? invoicingVo.getReceivablePremium().toString() : null);
+
+            // ============================结算逻辑============================
+            // 实际已经收了的金额
+            BigDecimal actualReceivedAmount = this.getInvoicingAmount(settlementVo.getInvoicingId());
+
+            // 所有需要结算的金额
+            BigDecimal allToSettlement = invoice.getReceivableSupervisePremium().add(invoice.getOverinflatedAmount());
+            // 剩余的金额
+            BigDecimal surplusPremium = allToSettlement.subtract(actualReceivedAmount);
+            log.info("invoiceId=[{}],一共需要结算的金额[{}],实际已经结算的金额[{}],本次计划结算的金额[{}]",
+                    settlementVo.getInvoicingId(), allToSettlement,actualReceivedAmount,settlementVo.getActualReceivedAmount());
+            // 校验是否超出了剩余的金额
+            AssertionUtils.isFail(surplusPremium.compareTo(settlementVo.getActualReceivedAmount()) < 0, "已超出应收金额,请核对!");
+
+            // 处理结算数据
+            // 未完全结算完成
+            InsPlyIncomeInvoiceSettlement settlement = new InsPlyIncomeInvoiceSettlement(invoice.getId(), settlementVo.getActualReceivedAmount(),
+                    DateTime.now(), settlementVo.getPaymentDifference(), settlementVo.getPaymentReason());
+            insPlyIncomeInvoiceSettlementMapper.insert(settlement);
+
+            if (CollectionUtils.isNotEmpty(settlementVo.getAttachmentIds())) {
+                // 添加发票附件
+                List<InsPlyIncomeInvoiceSettlementFile> files = new ArrayList<>();
+                for (String fileId : settlementVo.getAttachmentIds()) {
+                    InsPlyIncomeInvoiceSettlementFile file = new InsPlyIncomeInvoiceSettlementFile();
+                    file.setId(IdGenerate.nextId());
+                    file.setSettlementId(settlement.getId());
+                    file.setFileId(fileId);
+                    files.add(file);
+                }
+                insPlyIncomeInvoiceSettlementFileMapper.insert(files);
+            }
+
+            // 判断是否已经结算完成
+            if (surplusPremium.compareTo(settlementVo.getActualReceivedAmount()) == 0) {
+                log.info("序号为[{}]的发票已经结算完成",invoice.getId());
+                // 更新发票状态
+                invoice.setStatus("1");
+                insPlyIncomeInvoiceMapper.insert(invoice);
+                // 判断是需要更新哪个字段
+                this.updateIncomeSettlementStatus(invoice.getInvoiceType(), invoicingVo.getIncomeIds());
+            }else{
+                log.info("invoiceId=[{}], 还剩[{}]钱没有结算",settlementVo.getInvoicingId(), surplusPremium.subtract(settlementVo.getActualReceivedAmount()));
+            }
+            return true;
+        } catch (Exception e) {
+            log.error("平台结算异常. settlementVo=[{}]",JSONUtil.toJsonStr(settlementVo), e);
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean settlement(SettlementVo settlementVo) {
@@ -705,15 +876,15 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             // 获取应收的金额
             InsPlyIncomeInvoice insPlyIncomeInvoice = insPlyIncomeInvoiceMapper.selectById(settlementVo.getInvoicingId());
             AssertionUtils.isFail(Objects.isNull(insPlyIncomeInvoice), "发票数据不存在");
-            // 实际已经收了金额
-            BigDecimal ctualReceivedAmount = this.getInvoicingAmount(settlementVo.getInvoicingId());
+            // 实际已经收了金额
+            BigDecimal actualReceivedAmount = this.getInvoicingAmount(settlementVo.getInvoicingId());
 
             // 所有需要结算的金额
             BigDecimal allToSettlement = insPlyIncomeInvoice.getReceivableSupervisePremium().add(insPlyIncomeInvoice.getOverinflatedAmount());
             // 剩余的金额
-            BigDecimal surplusPremium = allToSettlement.subtract(ctualReceivedAmount);
+            BigDecimal surplusPremium = allToSettlement.subtract(actualReceivedAmount);
             log.info("invoiceId=[{}],一共需要结算的金额[{}],实际已经结算的金额[{}],本次计划结算的金额[{}]",
-                    settlementVo.getInvoicingId(), allToSettlement,ctualReceivedAmount,settlementVo.getActualReceivedAmount());
+                    settlementVo.getInvoicingId(), allToSettlement,actualReceivedAmount,settlementVo.getActualReceivedAmount());
             // 校验是否超出了剩余的金额
             AssertionUtils.isFail(surplusPremium.compareTo(settlementVo.getActualReceivedAmount()) < 0, "已超出应收金额,请核对!");
 
@@ -724,6 +895,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             insPlyIncomeInvoiceSettlementMapper.insert(settlement);
 
             if (CollectionUtils.isNotEmpty(settlementVo.getAttachmentIds())) {
+                log.info("结算的凭证是:settlementVo.getAttachmentIds()=[{}]", JSONUtil.toJsonStr(settlementVo.getAttachmentIds()));
                 // 添加发票附件
                 List<InsPlyIncomeInvoiceSettlementFile> files = new ArrayList<>();
                 for (String fileId : settlementVo.getAttachmentIds()) {
@@ -779,7 +951,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             List<SuperviseExcelVo> dataList = listener.getDataList();
             return dataList;
         } catch (Exception e) {
-            e.printStackTrace();
+            log.error("导入excel异常。",e);
             return null;
         }
     }
@@ -1080,7 +1252,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             // 数据库已存在 → 继续后续校验
             // 判断已开票 / 已结算
             if ("1".equals(existIncome.getSuperviseSettlement()) || "1".equals(existIncome.getOtherSettlement())
-                    || "1".equals(existIncome.getJySuperviseSettlement()) || "1".equals(existIncome.getJyOtherSettlement())) {
+                    || "1".equals(existIncome.getJySuperviseSettlement()) || "1".equals(existIncome.getJyOtherSettlement())
+                    || "1".equals(existIncome.getPlatformSuperviseSettlement()) || "1".equals(existIncome.getPlatformOtherSettlement())) {
                 failedNumber++;
                 vo.setErrorMessage("应收数据已结算");
                 failedExcel.add(vo);
@@ -1450,6 +1623,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                 case "2" -> dto.setInvoiceType("跟单费");
                 case "3" -> dto.setInvoiceType("驾意险手续费");
                 case "4" -> dto.setInvoiceType("驾意险跟单费");
+                case "5" -> dto.setInvoiceType("平台协议车险应收");
+                case "6" -> dto.setInvoiceType("平台协议非车险应收");
             }
             dto.setInvoiceTypeName(Constant.invoiceRiskTypeMap.get(Objects.toString(dto.getInvoiceType())));
             LambdaQueryWrapper<InsPlyIncomeInvoiceSettlementFile> wrapper = new LambdaQueryWrapper<InsPlyIncomeInvoiceSettlementFile>();

+ 1 - 0
tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

@@ -510,6 +510,7 @@
         ipii.invoice_type,
         ipii.invoice_party,
         ipii.tax_point,
+        ipi.order_no as orderNo,
         ipiis.actual_received_amount,
         ipiis.receive_payment_date,
         ipiis.create_by ,