wujianwei
2026-01-14 4feb321e6fa88e86991da3610b2bdfcf5a2d87a7
新增字段
1个文件已修改
123 ■■■■■ 已修改文件
service/src/main/java/com/ruoyi/cwgl/service/impl/FundFlowClaimDetailServiceImpl.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/src/main/java/com/ruoyi/cwgl/service/impl/FundFlowClaimDetailServiceImpl.java
@@ -195,8 +195,54 @@
    @Override
    public int deleteFundFlowClaimDetailByIds(Integer[] ids)
    {
        if (ids == null || ids.length == 0) {
            throw new RuntimeException("删除的认领明细ID不能为空");
        }
        // 由于删除只会有一条记录,取第一条进行处理
        Integer id = ids[0];
        FundFlowClaimDetail claimDetail = fundFlowClaimDetailMapper.selectFundFlowClaimDetailById(id);
        if (claimDetail == null) {
            throw new RuntimeException("未找到要删除的认领明细记录,ID: " + id);
        }
        Integer fundFlowId = claimDetail.getFundFlowId();
        BigDecimal deleteAmount = claimDetail.getClaimAmount();
        // 查询资金流水信息
        FundFlow fundFlow = fundFlowMapper.selectFundFlowById(fundFlowId);
        if (fundFlow == null) {
            throw new RuntimeException("资金流水不存在,ID: " + fundFlowId);
        }
        // 更新资金流水的已认领金额
        BigDecimal newClaimedAmount = fundFlow.getClaimedAmount().subtract(deleteAmount);
        if (newClaimedAmount.compareTo(BigDecimal.ZERO) < 0) {
            newClaimedAmount = BigDecimal.ZERO;
        }
        // 根据新的认领金额设置状态
        String newStatus =fundFlow.getStatus();
        if (newClaimedAmount.compareTo(BigDecimal.ZERO) == 0) {
            // 已认领金额为0,状态改为1(未认领)
            newStatus = "1";
        } else if (newClaimedAmount.compareTo(fundFlow.getTransactionAmount()) < 0) {
            // 已认领金额小于交易金额,状态改为2(部分认领)
            newStatus = "2";
        }
        // 更新资金流水状态和已认领金额
        fundFlow.setStatus(newStatus);
        fundFlow.setClaimedAmount(newClaimedAmount);
        fundFlow.setUpdateTime(DateUtils.getNowDate());
        int updateResult = fundFlowMapper.updateFundFlow(fundFlow);
        if (updateResult <= 0) {
            throw new RuntimeException("更新资金流水状态失败,ID: " + fundFlowId);
        }
        // 删除结算明细并更新账单状态
        deleteSettlementDetailsAndUpdateBillStatus(claimDetail,fundFlow);
        return fundFlowClaimDetailMapper.deleteFundFlowClaimDetailByIds(ids);
    }
@@ -326,7 +372,7 @@
            BigDecimal claimAmount = claimDetail.getClaimAmount();
            Integer claimDetailId = claimDetail.getId();
            
            // 根据关联企业类型判断是应收账单还是应付账单
            // 根据收支标识借贷标志判断是应收账单还是应付账单
            if (fundFlow.getIncomeExpenseFlag().equals(0)) {
                // 应收账单
                createReceivableSettlementDetail(billNo, claimAmount, fundFlow, claimDetailId);
@@ -399,5 +445,76 @@
        }
    }
    
    /**
     * 删除结算明细并更新账单状态
     */
    private void deleteSettlementDetailsAndUpdateBillStatus(FundFlowClaimDetail claimDetail, FundFlow fundFlow) {
        String billNo = claimDetail.getBillNo();
        Integer claimDetailId = claimDetail.getId();
        try {
            // 根据收支标识借贷标志判断是应收账单还是应付账单
            if (fundFlow.getIncomeExpenseFlag().equals(0)) {
                // 应收账单
                deleteReceivableSettlementDetail(claimDetailId);
            } else {
                // 应付账单
                deletePayableSettlementDetail(claimDetailId);
            }
            logger.info("成功删除结算明细,认领明细ID:{}", claimDetailId);
        } catch (Exception e) {
            logger.error("删除结算明细失败,认领明细ID:{}", claimDetailId, e);
            // 这里可以选择抛出异常或记录日志,但不中断整个删除流程
        }
    }
    /**
     * 删除应收账单结算明细
     */
    private void deleteReceivableSettlementDetail(Integer claimDetailId) {
        try {
            // 根据认领明细ID查询应收账单结算明细
            ReceivableBillSettlementDetail receivableQuery = new ReceivableBillSettlementDetail();
            receivableQuery.setClaimDetailId(claimDetailId);
            List<ReceivableBillSettlementDetail> receivableDetails = receivableBillSettlementDetailService.selectReceivableBillSettlementDetailList(receivableQuery);
            if (!receivableDetails.isEmpty()) {
                Integer[] receivableIds = receivableDetails.stream()
                        .map(ReceivableBillSettlementDetail::getId)
                        .toArray(Integer[]::new);
                receivableBillSettlementDetailService.deleteReceivableBillSettlementDetailByIds(receivableIds);
                logger.info("成功删除应收账单结算明细,认领明细ID:{}", claimDetailId);
            }
        } catch (Exception e) {
            logger.error("删除应收账单结算明细失败,认领明细ID:{}", claimDetailId, e);
            throw e;
        }
    }
    /**
     * 删除应付账单结算明细
     */
    private void deletePayableSettlementDetail(Integer claimDetailId) {
        try {
            // 根据认领明细ID查询应付账单结算明细
            PayableBillSettlementDetail payableQuery = new PayableBillSettlementDetail();
            payableQuery.setClaimDetailId(claimDetailId);
            List<PayableBillSettlementDetail> payableDetails = payableBillSettlementDetailService.selectPayableBillSettlementDetailList(payableQuery);
            if (!payableDetails.isEmpty()) {
                Integer[] payableIds = payableDetails.stream()
                        .map(PayableBillSettlementDetail::getId)
                        .toArray(Integer[]::new);
                payableBillSettlementDetailService.deletePayableBillSettlementDetailByIds(payableIds);
                logger.info("成功删除应付账单结算明细,认领明细ID:{}", claimDetailId);
            }
        } catch (Exception e) {
            logger.error("删除应付账单结算明细失败,认领明细ID:{}", claimDetailId, e);
            throw e;
        }
    }
}