Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

lixiaolong před 1 měsícem
rodič
revize
5ed7c7def2

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

@@ -324,4 +324,9 @@ public class InsPlyIncomeDto extends BaseModel {
     @Schema(description = "地区归属")
     private String companyNameSimple;
 
+    @TableField(exist = false)
+    @Schema(description = "禁用标志:1-已对账(禁用),0-未对账(可用)")
+    @ExcelIgnore
+    private String disableFlag;
+
 }

+ 1 - 0
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncomeInvoiceSettlement.java

@@ -44,6 +44,7 @@ public class InsPlyIncomeInvoiceSettlement extends BaseModel {
     private String systemCode;
 
     @Schema(description = "对接人")
+    @TableField(exist = false)
     private String contactPerson;
 
     public InsPlyIncomeInvoiceSettlement(){

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

@@ -38,26 +38,14 @@ public class ExcelContent4PrivateFollow implements Serializable {
     @ExcelProperty(value = "非车险保单号", index = 3)
     private String jyPolicyNo;
 
-//    @Schema(description = "交强险手续费比例")
-//    @ExcelProperty(value = "交强险手续费比例(%)", index = 4)
-//    private String jqSuperviseCostsProportion;
-//
     @Schema(description = "交强险跟单费比例")
     @ExcelProperty(value = "交强险跟单费比例(%)", index = 4)
     private String jqOtherCostsProportion;
 
-//    @Schema(description = "商业险手续费比例")
-//    @ExcelProperty(value = "商业险手续费比例(%)", index = 5)
-//    private String sySuperviseCostsProportion;
-
     @Schema(description = "商业险跟单费比例")
     @ExcelProperty(value = "商业险跟单费比例(%)", index = 5)
     private String syOtherCostsProportion;
 
-
-//    @Schema(description = "非车险手续费比例")
-//    @ExcelProperty(value = "非车险手续费比例(%)", index = 6)
-//    private String jySuperviseCostsProportion;
     @Schema(description = "非车险跟单费比例")
     @ExcelProperty(value = "非车险跟单费比例(%)", index = 6)
     private String jyOtherCostsProportion;

+ 3 - 23
commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ExcelContent4PrivateSupervise.java → commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ExcelContent4PrivateSuperviseCar.java

@@ -18,7 +18,7 @@ import java.io.Serializable;
 @EqualsAndHashCode
 @Data
 @Schema(description = "财务应收表")
-public class ExcelContent4PrivateSupervise implements Serializable {
+public class ExcelContent4PrivateSuperviseCar implements Serializable {
 
     @Serial
     private static final long serialVersionUID = 6263862008363938379L;
@@ -35,34 +35,14 @@ public class ExcelContent4PrivateSupervise implements Serializable {
     @ExcelProperty(value = "商业险保单号", index = 2)
     private String syPolicyNo;
 
-    @Schema(description = "非车险保单号")
-    @ExcelProperty(value = "非车险保单号", index = 3)
-    private String jyPolicyNo;
-
     @Schema(description = "交强险手续费比例")
-    @ExcelProperty(value = "交强险手续费比例(%)", index = 4)
+    @ExcelProperty(value = "交强险手续费比例(%)", index = 3)
     private String jqSuperviseCostsProportion;
 
-//    @Schema(description = "交强险跟单费比例")
-//    @ExcelProperty(value = "交强险跟单费比例(%)", index = 5)
-//    private String jqOtherCostsProportion;
-
 
     @Schema(description = "商业险手续费比例")
-    @ExcelProperty(value = "商业险手续费比例(%)", index = 5)
+    @ExcelProperty(value = "商业险手续费比例(%)", index = 4)
     private String sySuperviseCostsProportion;
 
-//    @Schema(description = "商业险跟单费比例")
-//    @ExcelProperty(value = "商业险跟单费比例(%)", index = 7)
-//    private String syOtherCostsProportion;
-
-
-    @Schema(description = "非车险手续费比例")
-    @ExcelProperty(value = "非车险手续费比例(%)", index = 6)
-    private String jySuperviseCostsProportion;
-
-//    @Schema(description = "非车险跟单费比例")
-//    @ExcelProperty(value = "非车险跟单费比例(%)", index = 9)
-//    private String jyOtherCostsProportion;
 
 }

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

@@ -0,0 +1,39 @@
+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
+ * @date 2024-06-26 10:49:31
+ */
+@EqualsAndHashCode
+@Data
+@Schema(description = "财务应收表")
+public class ExcelContent4PrivateSuperviseNoCar 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 jyPolicyNo;
+
+
+    @Schema(description = "非车险手续费比例")
+    @ExcelProperty(value = "非车险手续费比例(%)", index = 2)
+    private String jySuperviseCostsProportion;
+
+}

+ 9 - 10
tenant/organization/src/main/java/com/jzg/organization/client/InsFeeOrdersClient.java

@@ -3,6 +3,7 @@ package com.jzg.organization.client;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.finance.vo.BatchModifyVo;
 import com.jzg.commons.entity.po.InsFeeOrders;
+import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
 import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -29,14 +30,12 @@ public interface InsFeeOrdersClient {
     @PostMapping("/supplementOrder/updateOrdersBatch")
     @Operation(summary = "车险报价批量修改联系人等信息")
     HttpResult<String> updateOrdersBatch(@RequestBody BatchModifyVo batchModifyVo);
-//
-//    /**
-//     * 查询指定订单的应收总额
-//     *
-//     * @param orderNos 订单编号
-//     * @author lipf
-//     * @date 2026/6/4 10:17
-//     */
-//    @PostMapping("/insFeeOrder/queryAllTotalReceivablePremiumByOrderNo")
-//    BigDecimal queryAllTotalReceivablePremiumByOrderNo(@RequestBody List<String> orderNos);
+
+    /**
+     * 费用调整并计算保存(根据完整比例配置重新计算ins_fee_orders的所有比例和金额)
+     * @param ptlAgreementCostRatioVo 协议成本比例配置(百分比形式)
+     * @return 更新后的费用订单
+     */
+    @PostMapping("/supplementOrder/adjustmentCostAndSave")
+    HttpResult<InsFeeOrders> adjustmentCostAndSave(@RequestBody PtlAgreementCostRatioVo ptlAgreementCostRatioVo);
 }

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

@@ -150,7 +150,7 @@ public class ReceivableController {
     /**
      * 导入应收的模板
      *
-     * @param paramVO  10 表示私有协议 20 表示平台协议 11表示私有手续费 12 表示私有跟单费
+     * @param paramVO  20 表示平台协议  11表示车险手续费 12 表示非车险手续费 13 表示车险跟单费 14 表示非车险跟单费
      * @author lipf
      * @date 2026/8/3 10:23
      */
@@ -203,7 +203,7 @@ public class ReceivableController {
         Page<InsPlyIncome> data = ok.getData();
         
         // 设置disableFlag:根据签单时间的年月、companyId、partnerCompanyId查询是否存在对账数据
-        if (data != null && data.getRecords() != null && !data.getRecords().isEmpty()) {
+        if (data != null && data.getRecords() != null && CollUtil.isNotEmpty(data.getRecords())) {
             receivableService.setDisableFlagForOtherReceivable(data.getRecords(), systemCode);
         }
         

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

@@ -2,18 +2,18 @@ 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.ExcelContent4PrivateSupervise;
+import com.jzg.commons.entity.finance.vo.importimcome.ExcelContent4PrivateSuperviseNoCar;
 import lombok.Getter;
 
 import java.util.ArrayList;
 import java.util.List;
 
 @Getter
-public class InvoiceReceivbleExcel4PrivateListener extends AnalysisEventListener<ExcelContent4PrivateSupervise> {
-    private final List<ExcelContent4PrivateSupervise> dataList = new ArrayList<>();
+public class InvoiceReceivbleExcel4PrivateListener extends AnalysisEventListener<ExcelContent4PrivateSuperviseNoCar> {
+    private final List<ExcelContent4PrivateSuperviseNoCar> dataList = new ArrayList<>();
 
     @Override
-    public void invoke(ExcelContent4PrivateSupervise data, AnalysisContext context) {
+    public void invoke(ExcelContent4PrivateSuperviseNoCar data, AnalysisContext context) {
         dataList.add(data);
     }
 
@@ -22,7 +22,7 @@ public class InvoiceReceivbleExcel4PrivateListener extends AnalysisEventListener
         System.out.println("Total rows: " + dataList.size());
     }
 
-    public List<ExcelContent4PrivateSupervise> getDataList() {
+    public List<ExcelContent4PrivateSuperviseNoCar> getDataList() {
         return dataList;
     }
 }

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

@@ -431,7 +431,7 @@ public interface ReceivableService extends IService<InsPlyIncome> {
     /**
      * 导入应收的模板
      *
-     * @param type  10 表示私有协议 20 表示平台协议 11表示私有手续费 12 表示私有跟单费
+     * @param type  20 表示平台协议  11表示车险手续费 12 表示非车险手续费 13 表示车险跟单费 14 表示非车险跟单费
      * @author lipf
      * @date 2026/8/3 10:23
      */
@@ -538,7 +538,6 @@ public interface ReceivableService extends IService<InsPlyIncome> {
     /**
      * 为私有协议跟单费列表设置disableFlag
      * 根据签单时间的年月、companyId、partnerCompanyId查询ins_fee_follow_order表,有数据则disableFlag为1
-     * 如果没有数据再根据年月、partnerCompanyId查询ins_fee_follow_order_reconciliation表,有数据则disableFlag为1
      * 否则disableFlag为0
      * @param records 应收数据列表
      * @param systemCode 租户代码

+ 100 - 18
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jzg.organization.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateTime;
@@ -29,7 +30,10 @@ 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.po.EsmInsCompany;
+import com.jzg.commons.entity.po.InsFeeOrders;
+import com.jzg.commons.entity.po.PtlAgreement;
+import com.jzg.commons.entity.po.SysUploadFiles;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
 import com.jzg.commons.entity.vo.AgreementVo;
 import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
@@ -41,7 +45,10 @@ import com.jzg.organization.client.EsmInsCompanyClient;
 import com.jzg.organization.client.InsFeeOrdersClient;
 import com.jzg.organization.client.InsOrdersClient;
 import com.jzg.organization.entity.dto.CalRes;
-import com.jzg.organization.excel.listener.*;
+import com.jzg.organization.excel.listener.JyExcelListener;
+import com.jzg.organization.excel.listener.OtherExcelListener;
+import com.jzg.organization.excel.listener.ReceivbleExcelListener;
+import com.jzg.organization.excel.listener.SuperviseExcelListener;
 import com.jzg.organization.mapper.*;
 import com.jzg.organization.service.ReceivableService;
 import com.jzg.organization.service.SysUserJzgInfoSalesmanService;
@@ -873,12 +880,31 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             }
         }
 
-        // 4. 根据筛选条件过滤收入数据(发票、结算时间/状态过滤)
-        List<InsPlyIncomeDto> filterIncomeList = filterIncomeByInvoiceAndSettleCondition(incomeDtoList, settlementReportQueryVo);
-        if (CollUtil.isEmpty(filterIncomeList)) {
+        List<InsPlyIncome> insPlyIncomes = BeanUtil.copyToList(incomeDtoList, InsPlyIncome.class);
+        // 设置disableFlag:根据签单时间的年月、companyId、partnerCompanyId查询是否存在对账数据
+        if (CollUtil.isNotEmpty(incomeDtoList)) {
+            String systemCode = baseController.getSystemCode();
+            setDisableFlagForOtherReceivable(insPlyIncomes, systemCode);
+        }
+
+        // 根据结算状态过滤数据
+        String status = settlementReportQueryVo.getStatus();
+        String invoiceStartTime = settlementReportQueryVo.getInvoiceStartTime();
+        String invoiceEndTime = settlementReportQueryVo.getInvoiceEndTime();
+        String settleStartTime = settlementReportQueryVo.getSettlementStartTime();
+        String settleEndTime = settlementReportQueryVo.getSettlementEndTime();
+        if (StrUtil.isNotBlank(invoiceStartTime) || StrUtil.isNotBlank(invoiceEndTime)
+                || StrUtil.isNotBlank(settleStartTime) || StrUtil.isNotBlank(settleEndTime)
+                || (StrUtil.equals("0", status) || StrUtil.equals("1", status))) {
             return resultList;
         }
 
+        // 如果status = 0或1,则直接返回空的filterIncomeList,如果status = 2,则查询所有ins_ply_follow_invoice_link表,过滤掉disableFlag为1 的,保留为0 的数据
+        List<InsPlyIncomeDto> filterIncomeList = insPlyIncomes.stream()
+                .filter(income -> "0".equals(income.getDisableFlag()))
+                .map(income -> BeanUtil.copyProperties(income, InsPlyIncomeDto.class))
+                .collect(Collectors.toList());
+
         // 5. 将其他费用收入合并进结果集合
         mergeOtherCostIncomeToResult(filterIncomeList, resultList, companyMap);
 
@@ -1349,7 +1375,6 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     /**
      * 为私有协议跟单费列表设置disableFlag
      * 根据签单时间的年月、companyId、partnerCompanyId查询ins_fee_follow_order表,有数据则disableFlag为1
-     * 如果没有数据再根据年月、partnerCompanyId查询ins_fee_follow_order_reconciliation表,有数据则disableFlag为1
      * 否则disableFlag为0
      * @param records 应收数据列表
      * @param systemCode 租户代码
@@ -2453,7 +2478,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     /**
      * 导出应收开票模板
      *
-     * @param type  10 表示私有协议 20 表示平台协议  11表示私有手续费 12 表示私有跟单费
+     * @param type  20 表示平台协议  11表示车险手续费 12 表示非车险手续费 13 表示车险跟单费 14 表示非车险跟单费
      * @return String 导出时的提示信息
      * @author lipf
      * @date 2026/8/3 10:23
@@ -2466,12 +2491,28 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         if("11".equals(type)){
             // 调用动态导出
             return exportBaseService.upLoadFile(
-                    ExcelContent4PrivateSupervise.class,
+                    ExcelContent4PrivateSuperviseCar.class,
                     ListUtil.empty(),
-                    "应收开票-导出模板(私有)-" + Instant.now()
+                    "应收开票-导出模板(私有车险手续费)-" + Instant.now()
             );
         }
         if("12".equals(type)){
+            // 调用动态导出
+            return exportBaseService.upLoadFile(
+                    ExcelContent4PrivateSuperviseNoCar.class,
+                    ListUtil.empty(),
+                    "应收开票-导出模板(私有非车险手续费)-" + Instant.now()
+            );
+        }
+        if("13".equals(type)){
+            // 调用动态导出
+            return exportBaseService.upLoadFile(
+                    ExcelContent4PrivateFollow.class,
+                    ListUtil.empty(),
+                    "应收开票-导出模板(私有)-" + Instant.now()
+            );
+        }
+        if("14".equals(type)){
             // 调用动态导出
             return exportBaseService.upLoadFile(
                     ExcelContent4PrivateFollow.class,
@@ -2527,7 +2568,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         String userName = baseController.getUserName();
         log.info("用户[{}]导入私有应设有文件",userName);
 
-        List<ExcelContent4PrivateSupervise> excelContents = importIncomeService.parseImportExcel4Private(file);
+        List<ExcelContent4PrivateSuperviseNoCar> excelContents = importIncomeService.parseImportExcel4Private(file);
         if (CollUtil.isEmpty(excelContents)){
             throw new SystemException("数据不能为空,导入失败");
         }
@@ -3866,6 +3907,27 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         List<InsPlyIncome> updateList = new ArrayList<>();
         batchModifyVo.divide100();
 
+        // ===================== 新增:updateAgreementId不为空时,根据新协议的withTax重新计算税率因子 =====================
+        String updateAgreementId = batchModifyVo.getUpdateAgreementId();
+        // 提前声明 agreementVo,供后面的保司信息修改逻辑复用
+        AgreementVo agreementVo = null;
+        if (StrUtil.isNotBlank(updateAgreementId)) {
+            agreementVo = ptlAgreementMapper.queryById(updateAgreementId);
+            if (null == agreementVo) {
+                throw new ServiceException("未找到对应协议,请检查协议配置");
+            }
+
+            // 根据新协议的withTax重新计算税率因子,覆盖taxRateMap
+            // withTax=0(不含税)→ 税率=1.06;withTax=1(含税)→ 税率=1
+            String withTaxStr = agreementVo.getWithTax();
+            BigDecimal newTaxRate = ("0".equals(withTaxStr)) ? new BigDecimal("1.06") : BigDecimal.ONE;
+            for (String orderNo : orderNos) {
+                taxRateMap.put(orderNo, newTaxRate);
+            }
+            log.info("切换协议后,根据新协议withTax=[{}]重新设置税率因子=[{}]", withTaxStr, newTaxRate);
+        }
+        // ==============================================================================================================
+
         for (InsPlyIncome income : incomeList) {
             BigDecimal taxRate = taxRateMap.getOrDefault(income.getOrderNo(), BigDecimal.ONE);
             InsPlyIncome updateIncome = new InsPlyIncome();
@@ -3875,7 +3937,20 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             updateIncome.setJyPremium(income.getJyPremium());
             // 因为 实体对象的settlementStatus设置了初始默认值0, 为了避免已经结算的数据被调整未未结算, 这里将settlementStatus设置为null 2026-6-24 14:33:47
             updateIncome.setSettlementStatus(null);
-            // 根据income的order_no查询inss_fee_order
+
+            // updateAgreementId不为空时,从ins_ply_income(income)查询比例覆盖batchModifyVo,用于后续calRatio和calPremium计算
+            // ins_ply_income中的比例是字符串形式的小数值(如"0.20000"),转为BigDecimal后与batchModifyVo.divide100()后的格式一致
+            if (StrUtil.isNotBlank(updateAgreementId)) {
+                batchModifyVo.setJqSuperviseCostsProportion(StrUtil.isNotBlank(income.getJqSuperviseCostsProportion()) ? new BigDecimal(income.getJqSuperviseCostsProportion()) : BigDecimal.ZERO);
+                batchModifyVo.setJqOtherCostsProportion(StrUtil.isNotBlank(income.getJqOtherCostsProportion()) ? new BigDecimal(income.getJqOtherCostsProportion()) : BigDecimal.ZERO);
+                batchModifyVo.setSySuperviseCostsProportion(StrUtil.isNotBlank(income.getSySuperviseCostsProportion()) ? new BigDecimal(income.getSySuperviseCostsProportion()) : BigDecimal.ZERO);
+                batchModifyVo.setSyOtherCostsProportion(StrUtil.isNotBlank(income.getSyOtherCostsProportion()) ? new BigDecimal(income.getSyOtherCostsProportion()) : BigDecimal.ZERO);
+                batchModifyVo.setJySuperviseCostsProportion(StrUtil.isNotBlank(income.getJySuperviseCostsProportion()) ? new BigDecimal(income.getJySuperviseCostsProportion()) : BigDecimal.ZERO);
+                batchModifyVo.setJyOtherCostsProportion(StrUtil.isNotBlank(income.getJyOtherCostsProportion()) ? new BigDecimal(income.getJyOtherCostsProportion()) : BigDecimal.ZERO);
+                log.info("切换协议后,从ins_ply_income查询比例覆盖batchModifyVo。orderNo=[{}], batchModifyVo=[{}]", income.getOrderNo(), JSONUtil.toJsonStr(batchModifyVo));
+            }
+
+            // 根据income的order_no查询ins_fee_order(后续adjustmentCostAndSave需要从ins_fee_orders取完整比例)
             List<InsFeeOrders> insFeeOrderByOrderNo = insFeeOrdersClient.getInsFeeOrderByOrderNo(income.getOrderNo());
             if (CollUtil.isNotEmpty(insFeeOrderByOrderNo)){
                 InsFeeOrders insFeeOrders = CollUtil.getFirst(insFeeOrderByOrderNo);
@@ -3941,13 +4016,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
 
         // 如果updateAgreementId不为空,则执行保司信息修改逻辑
         // 涉及表:ins_ply_income(未对账的才改)、ins_orders、ins_order_adjust
-        String updateAgreementId = batchModifyVo.getUpdateAgreementId();
-        if (StrUtil.isNotBlank(updateAgreementId)) {
-            // 根据协议查询公司和子公司
-            AgreementVo agreementVo = ptlAgreementMapper.queryById(updateAgreementId);
-            if (null == agreementVo){
-                throw new ServiceException("未找到对应协议,请检查协议配置");
-            }
+        if (StrUtil.isNotBlank(updateAgreementId) && agreementVo != null) {
 
             // 获取新的保司ID(companyIds第一个元素)和合作保险公司ID(companyIds第二个元素,若不存在则使用保司ID)
             String newCompanyId = agreementVo.getCompanyId();
@@ -4014,6 +4083,19 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             UpdateCompanyBatchVo updateCompanyBatchVo = UpdateCompanyBatchVo.builder().batchModifyVo(batchModifyVo).agreementVo(agreementVo).build();
             HttpResult<String> updateCompanyRes = insOrdersClient.updateCompanyBatch(updateCompanyBatchVo);
             log.info("修改ins_orders和ins_order_adjust保司信息的结果:updateCompanyRes=[{}]", JSONUtil.toJsonStr(updateCompanyRes));
+
+            // 3. 从ins_fee_orders查询比例数据,调用adjustmentCostAndSave完整更新ins_fee_orders的所有比例和对应金额
+            // 此时ins_orders和ins_fee_orders的agreement_id已更新为新协议,calcCosts内部会查询到新协议的withTax
+            for (String orderNo : orderNos) {
+                List<InsFeeOrders> feeOrdersList = insFeeOrdersClient.getInsFeeOrderByOrderNo(orderNo);
+                if (CollUtil.isNotEmpty(feeOrdersList)) {
+                    InsFeeOrders feeOrders = CollUtil.getFirst(feeOrdersList);
+                    // 使用PtlAgreementCostRatioVo的构造函数,从ins_fee_orders提取所有比例(转为百分比形式)
+                    PtlAgreementCostRatioVo ratioVo = new PtlAgreementCostRatioVo(feeOrders);
+                    HttpResult<InsFeeOrders> adjustResult = insFeeOrdersClient.adjustmentCostAndSave(ratioVo);
+                    log.info("根据ins_fee_orders比例完整更新ins_fee_orders。orderNo=[{}], result=[{}]", orderNo, JSONUtil.toJsonStr(adjustResult));
+                }
+            }
         }
 
         return true;

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

@@ -9,7 +9,7 @@ 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.ExcelContent4PrivateSupervise;
+import com.jzg.commons.entity.finance.vo.importimcome.ExcelContent4PrivateSuperviseNoCar;
 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;
@@ -119,7 +119,7 @@ public class ImportIncomeServiceImpl implements ImportIncomeService {
      * @date 2026/8/4 9:22
      */
     @Override
-    public List<ImportContentExt> fillExcelContent4Private(List<ExcelContent4PrivateSupervise> excelContents) {
+    public List<ImportContentExt> fillExcelContent4Private(List<ExcelContent4PrivateSuperviseNoCar> excelContents) {
         log.info("为私有订单填充数据:excelContents.size=[{}]", CollUtil.size(excelContents));
         return List.of();
     }
@@ -292,10 +292,10 @@ public class ImportIncomeServiceImpl implements ImportIncomeService {
      * @author lipf
      * @date 2026/8/4 9:07
      */
-    public List<ExcelContent4PrivateSupervise> parseImportExcel4Private(MultipartFile file) {
+    public List<ExcelContent4PrivateSuperviseNoCar> parseImportExcel4Private(MultipartFile file) {
         InvoiceReceivbleExcel4PrivateListener listener = new InvoiceReceivbleExcel4PrivateListener();
         try (InputStream inputStream = file.getInputStream()) {
-            EasyExcel.read(inputStream, ExcelContent4PrivateSupervise.class, listener)
+            EasyExcel.read(inputStream, ExcelContent4PrivateSuperviseNoCar.class, listener)
                     .sheet()
                     .doRead();
             return listener.getDataList();

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

@@ -1,7 +1,7 @@
 package com.jzg.organization.service.importincome;
 
 import com.jzg.commons.entity.finance.po.InsPlyIncome;
-import com.jzg.commons.entity.finance.vo.importimcome.ExcelContent4PrivateSupervise;
+import com.jzg.commons.entity.finance.vo.importimcome.ExcelContent4PrivateSuperviseNoCar;
 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;
@@ -27,7 +27,7 @@ public interface ImportIncomeService {
      * @author lipf
      * @date 2026/8/4 9:22
      */
-    public List<ImportContentExt> fillExcelContent4Private(List<ExcelContent4PrivateSupervise> excelContents);
+    public List<ImportContentExt> fillExcelContent4Private(List<ExcelContent4PrivateSuperviseNoCar> excelContents);
 
     /**
      * 批量处理数据
@@ -60,7 +60,7 @@ public interface ImportIncomeService {
      * @author lipf
      * @date 2026/8/4 9:07
      */
-    public List<ExcelContent4PrivateSupervise> parseImportExcel4Private(MultipartFile file);
+    public List<ExcelContent4PrivateSuperviseNoCar> parseImportExcel4Private(MultipartFile file);
 
     /**
      * 解析并读取Excel中的内容

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

@@ -82,8 +82,23 @@
                 AND ffo.create_time BETWEEN #{query.startTime} AND #{query.endTime}
             </if>
             -- 发票状态筛选
-            <if test="query.status != null">
-                AND inv.status = #{query.status}
+            <if test="query.status != null and query.status != ''">
+                <!-- 当状态为1时,查询已开票的数据 -->
+                <if test="query.status != 2">
+                    AND ffo.id in (
+                    select link.follow_id from ins_ply_follow_invoice_link link
+                    LEFT JOIN ins_ply_income_invoice ipii ON link.invoice_id = ipii.id AND ipii.is_delete = 0
+                    where ipii.status = #{query.status} and link.is_delete = 0
+                    )
+                </if>
+                <!-- 当状态为2时,查询未开票的数据 -->
+                <if test="query.status == 2">
+                    AND NOT EXISTS (
+                    SELECT 1 FROM ins_ply_follow_invoice_link link
+                    LEFT JOIN ins_ply_income_invoice inv ON link.invoice_id = inv.id AND inv.is_delete = 0
+                    WHERE link.follow_id = ffo.id AND link.is_delete = 0
+                    )
+                </if>
             </if>
             -- 开票时间范围
             <if test="query.invoiceStartTime != null and query.invoiceStartTime != '' and query.invoiceEndTime != null and query.invoiceEndTime != ''">