Pārlūkot izejas kodu

Merge branch 'dev_jzg_lipf_v20260622'

jiakai 2 mēneši atpakaļ
vecāks
revīzija
60240536e0

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

@@ -376,5 +376,13 @@ public class InsPlyIncome extends BaseModel {
     @Schema(description = "非车应收金额")
     private BigDecimal jyTotalPremiums;
 
+    @TableField(exist = false)
+    @Schema(description = "合作保险公司ID")
+    private String partnerCompanyId;
+
+    @TableField(exist = false)
+    @Schema(description = "禁用标志:1-已对账(禁用),0-未对账(可用)")
+    private String disableFlag;
+
 
 }

+ 6 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/QueryFollowIncomeVo.java

@@ -33,4 +33,10 @@ public class QueryFollowIncomeVo  extends PageRequest implements Serializable {
     @Schema(description = "创建结束时间")
     private String endTime;
 
+    @Schema(description = "签单开始时间(年月格式:YYYY-MM)")
+    private String signingStartTime;
+
+    @Schema(description = "签单结束时间(年月格式:YYYY-MM)")
+    private String signingEndTime;
+
 }

+ 9 - 0
commons/src/main/java/com/jzg/commons/entity/report/dto/FeeAuditSummaryVo.java

@@ -1,5 +1,7 @@
 package com.jzg.commons.entity.report.dto;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -16,24 +18,31 @@ import lombok.NoArgsConstructor;
 @Schema(description = "费用审核汇总统计结果VO")
 public class FeeAuditSummaryVo {
 
+    @ExcelIgnore
     @Schema(description = "保险公司ID")
     private String companyId;
 
+    @ExcelProperty(value = "保险公司名称", index = 0)
     @Schema(description = "保险公司名称")
     private String companyName;
 
+    @ExcelProperty(value = "待审核条数", index = 1)
     @Schema(description = "待审核条数")
     private Long pendingReviewNum;
 
+    @ExcelProperty(value = "已审核条数", index = 2)
     @Schema(description = "已审核条数")
     private Long approvedNum;
 
+    @ExcelProperty(value = "审核不通过条数", index = 3)
     @Schema(description = "审核不通过条数")
     private Long rejectedNum;
 
+    @ExcelProperty(value = "疑问订单条数", index = 4)
     @Schema(description = "疑问订单条数")
     private Long problemOrderNum;
 
+    @ExcelProperty(value = "平均审核时长(秒)", index = 5)
     @Schema(description = "平均审核时长(秒)")
     private Long avgAuditDuration;
 }

+ 1 - 1
commons/src/main/java/com/jzg/commons/entity/report/dto/ReportReceivableDataDto.java

@@ -50,7 +50,7 @@ public class ReportReceivableDataDto {
     /**
      * 未开票
      */
-    @ExcelProperty(value = "应收", index = 3)
+    @ExcelProperty(value = "未开票", index = 2)
     @ColumnWidth(10)
     @Schema(description = "未开票")
     private BigDecimal uninvoicedMoney;

+ 43 - 0
consoleStatistics/src/main/java/com/jzg/console/controller/ReportFinanceDataManageController.java

@@ -16,6 +16,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -364,6 +365,16 @@ public class ReportFinanceDataManageController extends BaseController {
         }
     }
 
+    /**
+     * 费用审核汇总统计导出Excel
+     * @author: jk
+     */
+    @Operation(summary = "费用审核-汇总统计导出", description = "费用审核-汇总统计导出Excel")
+    @PostMapping(value = "/exportFeeAuditSummary")
+    public void exportFeeAuditSummary(@RequestBody FeeAuditSummaryParam param) {
+        reportFeeAuditSummaryService.exportFeeAuditSummary(param);
+    }
+
     /**
      * 费用审核明细列表:根据保险公司ID查询该公司的所有审核明细(不区分审核状态)
      * @author: jk
@@ -379,6 +390,16 @@ public class ReportFinanceDataManageController extends BaseController {
         }
     }
 
+    /**
+     * 费用审核明细列表导出Excel
+     * @author: jk
+     */
+    @Operation(summary = "费用审核-明细导出", description = "费用审核-明细导出Excel")
+    @PostMapping(value = "/exportFeeAuditDetail")
+    public void exportFeeAuditDetail(@RequestBody FeeAuditDetailParam param) {
+        reportFeeAuditSummaryService.exportFeeAuditDetail(param);
+    }
+
     /**
      * 财务数据-应收统计:按月份汇总查询应收数据
      * 查询选中年份的私有协议(车险+非车的手续费+跟单费)应收数据,按月份汇总
@@ -399,6 +420,17 @@ public class ReportFinanceDataManageController extends BaseController {
         }
     }
 
+    /**
+     * 财务数据-应收统计导出Excel
+     * @author: jk
+     */
+    @Operation(summary = "财务数据-应收统计导出", description = "财务数据-应收统计导出Excel(按月份汇总)")
+    @PostMapping(value = "/exportReceivableStatistics")
+    public void exportReceivableStatistics(@RequestBody ReportSearchCommonVo reportSearchCommonVo) {
+        String systemCode = getSystemCode();
+        reportReceivableDataService.exportReceivableStatistics(reportSearchCommonVo, systemCode);
+    }
+
     /**
      * 财务数据-应收统计明细:按保险公司分组查询应收数据
      * 查询选中年月的应收数据,按保险公司分组
@@ -418,4 +450,15 @@ public class ReportFinanceDataManageController extends BaseController {
         }
     }
 
+    /**
+     * 财务数据-应收统计明细导出Excel
+     * @author: jk
+     */
+    @Operation(summary = "财务数据-应收统计明细导出", description = "财务数据-应收统计明细导出Excel(按保险公司分组)")
+    @PostMapping(value = "/exportReceivableStatisticsDetail")
+    public void exportReceivableStatisticsDetail(@RequestBody ReportSearchCommonVo reportSearchCommonVo) {
+        String systemCode = getSystemCode();
+        reportReceivableDataService.exportReceivableStatisticsDetail(reportSearchCommonVo, systemCode);
+    }
+
 }

+ 10 - 0
consoleStatistics/src/main/java/com/jzg/console/service/ReportFeeAuditSummaryService.java

@@ -21,4 +21,14 @@ public interface ReportFeeAuditSummaryService {
      * 按保险公司查询费用审核明细列表(分页)
      */
     Page<FeeAuditVo> getFeeAuditDetailPage(FeeAuditDetailParam param);
+
+    /**
+     * 费用审核汇总统计导出Excel(复用分页方法,设置不分页参数)
+     */
+    void exportFeeAuditSummary(FeeAuditSummaryParam param);
+
+    /**
+     * 费用审核明细列表导出Excel(复用分页方法,设置不分页参数)
+     */
+    void exportFeeAuditDetail(FeeAuditDetailParam param);
 }

+ 14 - 0
consoleStatistics/src/main/java/com/jzg/console/service/ReportReceivableDataService.java

@@ -49,4 +49,18 @@ public interface ReportReceivableDataService extends  ReportBaseService{
      *  @return 按保险公司分组的应收明细数据列表
      */
     List<?> getReceivableStatisticsDetail(ReportSearchCommonVo reportSearchCommonVo, String systemCode);
+
+    /**
+     * 财务数据-应收统计导出Excel
+     * @param reportSearchCommonVo 查询参数
+     * @param systemCode 系统编码
+     */
+    void exportReceivableStatistics(ReportSearchCommonVo reportSearchCommonVo, String systemCode);
+
+    /**
+     * 财务数据-应收统计明细导出Excel
+     * @param reportSearchCommonVo 查询参数
+     * @param systemCode 系统编码
+     */
+    void exportReceivableStatisticsDetail(ReportSearchCommonVo reportSearchCommonVo, String systemCode);
 }

+ 20 - 0
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportFeeAuditSummaryServiceImpl.java

@@ -8,6 +8,8 @@ import com.jzg.commons.entity.report.dto.FeeAuditSummaryVo;
 import com.jzg.commons.entity.report.vo.FeeAuditDetailParam;
 import com.jzg.commons.entity.report.vo.FeeAuditSummaryParam;
 import com.jzg.commons.entity.orders.vo.FeeAuditVo;
+import com.jzg.commons.util.EasyExcelUtils;
+import com.jzg.commons.util.ServletUtils;
 import com.jzg.console.client.FeeAuditClient;
 import com.jzg.console.mapper.ReportFeeAuditSummaryMapper;
 import com.jzg.console.service.ReportFeeAuditSummaryService;
@@ -60,4 +62,22 @@ public class ReportFeeAuditSummaryServiceImpl implements ReportFeeAuditSummarySe
         // 返回空分页避免前端报错
         return new Page<>(param.getPages(), param.getSize());
     }
+
+    @Override
+    public void exportFeeAuditSummary(FeeAuditSummaryParam param) {
+        // 复用分页方法,设置不分页参数
+        param.setPages(1);
+        param.setSize(100000);
+        IPage<FeeAuditSummaryVo> page = getFeeAuditSummaryPage(param);
+        EasyExcelUtils.exportForWeb(ServletUtils.getResponse(), FeeAuditSummaryVo.class, page.getRecords(), "费用审核汇总统计");
+    }
+
+    @Override
+    public void exportFeeAuditDetail(FeeAuditDetailParam param) {
+        // 复用分页方法,设置不分页参数
+        param.setPages(1);
+        param.setSize(Integer.MAX_VALUE);
+        Page<FeeAuditVo> page = getFeeAuditDetailPage(param);
+        EasyExcelUtils.exportForWeb(ServletUtils.getResponse(), FeeAuditVo.class, page.getRecords(), "费用审核明细");
+    }
 }

+ 89 - 0
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportReceivableDataServiceImpl.java

@@ -3,8 +3,11 @@ package com.jzg.console.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.alibaba.excel.EasyExcel;
 import com.jzg.commons.entity.report.dto.*;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
+import com.jzg.commons.util.EasyExcelUtils;
+import com.jzg.commons.util.ServletUtils;
 import com.jzg.console.mapper.ReportReceivableDataMapper;
 import com.jzg.console.service.ReportReceivableDataService;
 import org.slf4j.Logger;
@@ -147,4 +150,90 @@ public class ReportReceivableDataServiceImpl extends ReportBaseServiceImpl imple
         }
         return reportReceivableDataMapper.getReceivableStatisticsDetail(reportSearchCommonVo, systemCode);
     }
+
+    @Override
+    public void exportReceivableStatistics(ReportSearchCommonVo reportSearchCommonVo, String systemCode) {
+        log.info("财务数据-应收统计导出Excel. reportSearchCommonVo=[{}], systemCode=[{}]", JSONUtil.toJsonStr(reportSearchCommonVo), systemCode);
+        List<ReportReceivableDataDto> dataList = reportReceivableDataMapper.getReceivableStatisticsByMonth(reportSearchCommonVo, systemCode);
+        EasyExcelUtils.exportForWeb(ServletUtils.getResponse(), ReportReceivableDataDto.class, dataList, "财务数据-应收统计");
+    }
+
+    @Override
+    public void exportReceivableStatisticsDetail(ReportSearchCommonVo reportSearchCommonVo, String systemCode) {
+        log.info("财务数据-应收统计明细导出Excel. reportSearchCommonVo=[{}], systemCode=[{}]", JSONUtil.toJsonStr(reportSearchCommonVo), systemCode);
+        List<ReportReceivableDetailDto> dataList = reportReceivableDataMapper.getReceivableStatisticsDetail(reportSearchCommonVo, systemCode);
+
+        // 构建表头
+        List<List<String>> head = java.util.Arrays.asList(
+            java.util.Arrays.asList("保险公司名称"),
+            java.util.Arrays.asList("应收-手续费金额"), java.util.Arrays.asList("应收-跟单费金额"),
+            java.util.Arrays.asList("应收-平台应收金额"), java.util.Arrays.asList("应收-合计金额"),
+            java.util.Arrays.asList("未开票-手续费金额"), java.util.Arrays.asList("未开票-跟单费金额"),
+            java.util.Arrays.asList("未开票-平台应收金额"), java.util.Arrays.asList("未开票-合计金额"),
+            java.util.Arrays.asList("已开票-手续费金额"), java.util.Arrays.asList("已开票-跟单费金额"),
+            java.util.Arrays.asList("已开票-平台应收金额"), java.util.Arrays.asList("已开票-合计金额"),
+            java.util.Arrays.asList("未结算-手续费金额"), java.util.Arrays.asList("未结算-跟单费金额"),
+            java.util.Arrays.asList("未结算-平台应收金额"), java.util.Arrays.asList("未结算-合计金额"),
+            java.util.Arrays.asList("已结算-手续费金额"), java.util.Arrays.asList("已结算-跟单费金额"),
+            java.util.Arrays.asList("已结算-平台应收金额"), java.util.Arrays.asList("已结算-合计金额")
+        );
+
+        // 构建数据行
+        List<List<Object>> rows = dataList.stream().map(dto -> {
+            List<Object> row = new java.util.ArrayList<>();
+            row.add(dto.getCompanyName());
+            if (dto.getReceivable() != null) {
+                row.add(dto.getReceivable().getCommissionFee());
+                row.add(dto.getReceivable().getFollowFee());
+                row.add(dto.getReceivable().getPlatformReceivable());
+                row.add(dto.getReceivable().getTotalAmount());
+            } else {
+                row.add(null); row.add(null); row.add(null); row.add(null);
+            }
+            if (dto.getUninvoiced() != null) {
+                row.add(dto.getUninvoiced().getCommissionFee());
+                row.add(dto.getUninvoiced().getFollowFee());
+                row.add(dto.getUninvoiced().getPlatformReceivable());
+                row.add(dto.getUninvoiced().getTotalAmount());
+            } else {
+                row.add(null); row.add(null); row.add(null); row.add(null);
+            }
+            if (dto.getInvoiced() != null) {
+                row.add(dto.getInvoiced().getCommissionFee());
+                row.add(dto.getInvoiced().getFollowFee());
+                row.add(dto.getInvoiced().getPlatformReceivable());
+                row.add(dto.getInvoiced().getTotalAmount());
+            } else {
+                row.add(null); row.add(null); row.add(null); row.add(null);
+            }
+            if (dto.getUnsettled() != null) {
+                row.add(dto.getUnsettled().getCommissionFee());
+                row.add(dto.getUnsettled().getFollowFee());
+                row.add(dto.getUnsettled().getPlatformReceivable());
+                row.add(dto.getUnsettled().getTotalAmount());
+            } else {
+                row.add(null); row.add(null); row.add(null); row.add(null);
+            }
+            if (dto.getSettled() != null) {
+                row.add(dto.getSettled().getCommissionFee());
+                row.add(dto.getSettled().getFollowFee());
+                row.add(dto.getSettled().getPlatformReceivable());
+                row.add(dto.getSettled().getTotalAmount());
+            } else {
+                row.add(null); row.add(null); row.add(null); row.add(null);
+            }
+            return row;
+        }).toList();
+
+        try {
+            jakarta.servlet.http.HttpServletResponse response = ServletUtils.getResponse();
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+            String fileEName = java.net.URLEncoder.encode("财务数据-应收统计明细", "UTF-8").replaceAll("\\+", "%20");
+            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileEName + ".xlsx");
+            EasyExcel.write(response.getOutputStream()).head(head).sheet("财务数据-应收统计明细").doWrite(rows);
+        } catch (java.io.IOException e) {
+            log.error("导出文件异常", e);
+        }
+    }
 }

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

@@ -182,9 +182,16 @@ public class ReceivableController {
             receivableQueryVo.setAgreementType("2");
         }
         //return HttpResult.ok(receivableService.getReceivablePage(receivableQueryVo));
-        receivableQueryVo.setSystemCode(baseController.getSystemCode());
+        String systemCode = baseController.getSystemCode();
+        receivableQueryVo.setSystemCode(systemCode);
         HttpResult<Page<InsPlyIncome>> ok = HttpResult.ok(receivableService.getReceivablePage(receivableQueryVo));
         Page<InsPlyIncome> data = ok.getData();
+        
+        // 设置disableFlag:根据签单时间的年月、companyId、partnerCompanyId查询是否存在对账数据
+        if (data != null && data.getRecords() != null && !data.getRecords().isEmpty()) {
+            receivableService.setDisableFlagForOtherReceivable(data.getRecords(), systemCode);
+        }
+        
         InsPlyIncomeVO vo = receivableService.getReceivablePageIds(receivableQueryVo);
         vo.setInsPlyIncomePage(data);
         return HttpResult.ok(vo);

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

@@ -519,4 +519,14 @@ public interface ReceivableService extends IService<InsPlyIncome> {
     List<FollowCompanyFeeVO> followCompanySuperviseSettlementReport(SettlementReportQueryVo settlementReportQueryVo);
 
     List<PlatformCompanyFeeVO> platformCompanySuperviseSettlementReport(SettlementReportQueryVo settlementReportQueryVo);
+
+    /**
+     * 为私有协议跟单费列表设置disableFlag
+     * 根据签单时间的年月、companyId、partnerCompanyId查询ins_fee_follow_order表,有数据则disableFlag为1
+     * 如果没有数据再根据年月、partnerCompanyId查询ins_fee_follow_order_reconciliation表,有数据则disableFlag为1
+     * 否则disableFlag为0
+     * @param records 应收数据列表
+     * @param systemCode 租户代码
+     */
+    void setDisableFlagForOtherReceivable(List<InsPlyIncome> records, String systemCode);
 }

+ 93 - 2
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -963,7 +963,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     private List<InsPlyIncomeDto> queryFollowIncomeData(SettlementReportQueryVo queryVo) {
         QueryFollowIncomeVo incomeVo = new QueryFollowIncomeVo(
                 null, null, baseController.getSystemCode(), null,
-                queryVo.getCompanyId(), queryVo.getStartTime(), queryVo.getEndTime()
+                queryVo.getCompanyId(), queryVo.getStartTime(), queryVo.getEndTime(),
+                queryVo.getSigningStartTime(), queryVo.getSigningEndTime()
         );
         return baseMapper.queryFollowIncome(incomeVo);
     }
@@ -1011,6 +1012,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         if (invoiceTimeCond) {
             invoiceWrapper.between(InsPlyIncomeInvoice::getInvoiceTime, toStartDateTime(invoiceStartTime), toEndDateTime(invoiceEndTime));
         }
+        invoiceWrapper.eq(InsPlyIncomeInvoice::getInvoiceType, queryVo.getInvoiceType());
         List<InsPlyIncomeInvoice> invoiceList = insPlyIncomeInvoiceMapper.selectList(invoiceWrapper);
         if ((StrUtil.isNotBlank(status) || invoiceTimeCond) && CollUtil.isEmpty(invoiceList)) {
             return new ArrayList<>(0);
@@ -1199,6 +1201,95 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         return platformCompanyFeeVos;
     }
 
+    /**
+     * 为私有协议跟单费列表设置disableFlag
+     * 根据签单时间的年月、companyId、partnerCompanyId查询ins_fee_follow_order表,有数据则disableFlag为1
+     * 如果没有数据再根据年月、partnerCompanyId查询ins_fee_follow_order_reconciliation表,有数据则disableFlag为1
+     * 否则disableFlag为0
+     * @param records 应收数据列表
+     * @param systemCode 租户代码
+     */
+    @Override
+    public void setDisableFlagForOtherReceivable(List<InsPlyIncome> records, String systemCode) {
+        if (CollUtil.isEmpty(records)) {
+            return;
+        }
+
+        // 第一步:批量查询 ptl_agreement 表,补全 partner_company_id
+        Set<String> agreementIds = records.stream()
+                .filter(r -> StrUtil.isNotBlank(r.getAgreementId()))
+                .map(InsPlyIncome::getAgreementId)
+                .collect(Collectors.toSet());
+        
+        Map<String, String> agreementPartnerCompanyMap = new HashMap<>();
+        if (CollUtil.isNotEmpty(agreementIds)) {
+            LambdaQueryWrapper<PtlAgreement> agreementWrapper = new LambdaQueryWrapper<>();
+            agreementWrapper.in(PtlAgreement::getId, agreementIds);
+            List<PtlAgreement> agreements = ptlAgreementMapper.selectList(agreementWrapper);
+            for (PtlAgreement agreement : agreements) {
+                agreementPartnerCompanyMap.put(agreement.getId(), agreement.getPartnerCompanyId());
+            }
+        }
+        
+        // 将 partner_company_id 设置到对应的 ins_ply_income 对象中
+        for (InsPlyIncome record : records) {
+            if (StrUtil.isNotBlank(record.getAgreementId())) {
+                record.setPartnerCompanyId(agreementPartnerCompanyMap.get(record.getAgreementId()));
+            }
+        }
+
+        // 第二步:构建查询条件的唯一标识:year_month_companyId_partnerCompanyId
+        Map<String, InsPlyIncome> keyMap = new HashMap<>();
+        Set<Integer> years = new HashSet<>();
+        Set<Integer> months = new HashSet<>();
+        Set<String> companyIds = new HashSet<>();
+        Set<String> partnerCompanyIds = new HashSet<>();
+        
+        for (InsPlyIncome record : records) {
+            if (record.getSigningTime() == null || StrUtil.isBlank(record.getCompanyId()) || StrUtil.isBlank(record.getPartnerCompanyId())) {
+                record.setDisableFlag("0");
+                continue;
+            }
+            int year = record.getSigningTime().getYear();
+            int month = record.getSigningTime().getMonthValue();
+            String key = year + "_" + month + "_" + record.getCompanyId() + "_" + record.getPartnerCompanyId();
+            keyMap.put(key, record);
+            
+            years.add(year);
+            months.add(month);
+            companyIds.add(record.getCompanyId());
+            partnerCompanyIds.add(record.getPartnerCompanyId());
+        }
+
+        if (keyMap.isEmpty()) {
+            return;
+        }
+
+        Set<String> matchedKeys = new HashSet<>();
+
+        // 第一步:查询 ins_fee_follow_order 表(@TableLogic 自动处理 is_delete=0)
+        LambdaQueryWrapper<InsFeeFollowOrder> followOrderWrapper = new LambdaQueryWrapper<>();
+        followOrderWrapper.eq(InsFeeFollowOrder::getSystemCode, systemCode);
+        followOrderWrapper.in(InsFeeFollowOrder::getYear, years);
+        followOrderWrapper.in(InsFeeFollowOrder::getMonth, months);
+        followOrderWrapper.in(InsFeeFollowOrder::getCompanyId, companyIds);
+        followOrderWrapper.in(InsFeeFollowOrder::getPartnerCompanyId, partnerCompanyIds);
+        
+        List<InsFeeFollowOrder> followOrders = insFeeFollowOrderMapper.selectList(followOrderWrapper);
+        
+        for (InsFeeFollowOrder order : followOrders) {
+            String key = order.getYear() + "_" + order.getMonth() + "_" + order.getCompanyId() + "_" + order.getPartnerCompanyId();
+            if (keyMap.containsKey(key)) {
+                matchedKeys.add(key);
+            }
+        }
+
+        // 设置 disableFlag
+        for (Map.Entry<String, InsPlyIncome> entry : keyMap.entrySet()) {
+            entry.getValue().setDisableFlag(matchedKeys.contains(entry.getKey()) ? "1" : "0");
+        }
+    }
+
 
     /**
      * 填充应收订单的必要字段信息
@@ -4148,7 +4239,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         String systemCode = baseController.getUserSystemCode();
 
         // 查询该年份下的所有跟进收入数据,并按合作方公司ID进行分组
-        QueryFollowIncomeVo queryFollowIncomeVo = new QueryFollowIncomeVo(startYear, endYear, systemCode, null, null, null, null);
+        QueryFollowIncomeVo queryFollowIncomeVo = new QueryFollowIncomeVo(startYear, endYear, systemCode, null, null, null, null, null, null);
         List<InsPlyIncomeDto> incomes = baseMapper.queryFollowIncome(queryFollowIncomeVo);
 
         // ====================== 增加动态条件过滤 ======================

+ 4 - 0
tenant/organization/src/main/resources/mapper/InsFeeFollowOrderMapper.xml

@@ -96,6 +96,10 @@
             <if test="query.invoiceType != null and query.invoiceType != ''">
                 AND ffo.invoice_type = #{query.invoiceType}
             </if>
+            <!-- 签单时间范围筛选(年月格式:YYYY-MM) -->
+            <if test="query.signingStartTime != null and query.signingStartTime != '' and query.signingEndTime != null and query.signingEndTime != ''">
+                AND CONCAT(ffo.year, '-', LPAD(ffo.month, 2, '0')) BETWEEN #{query.signingStartTime} AND #{query.signingEndTime}
+            </if>
         </where>
     </select>
 

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

@@ -2108,6 +2108,10 @@
                     #{item}
                 </foreach>
             </if>
+            <!-- 签单时间范围筛选(年月格式:YYYY-MM) -->
+            <if test="query.signingStartTime != null and query.signingStartTime != '' and query.signingEndTime != null and query.signingEndTime != ''">
+                AND CONCAT(YEAR(a.signing_time), '-', LPAD(MONTH(a.signing_time), 2, '0')) BETWEEN #{query.signingStartTime} AND #{query.signingEndTime}
+            </if>
         </where>
     </select>
     <!-- 查询发票结算的金额 2026年6月22日15:48:33 lipf  -->