Преглед изворни кода

修改bug:
私有应收 跟单开票中,某个月对账金额设置后,开票结算后,限制一下比如永诚太原2026年6月份的车都不能再批量修改比例或者签单日期等等

jiakai пре 2 месеци
родитељ
комит
27e6b0a295

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

+ 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");
+        }
+    }
+
 
     /**
      * 填充应收订单的必要字段信息
@@ -4145,7 +4236,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  -->