diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettlePayRecordServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettlePayRecordServiceImpl.java index bd5674035..9adde5c62 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettlePayRecordServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettlePayRecordServiceImpl.java @@ -613,8 +613,71 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I // 删除收款记录 emisSettlePayRecordMapper.deleteEmisSettlePayRecordById(id); - // 重新计算账单收款 - emisSettleBillService.reCalcSettleBillPayStatus(payRecordOld.getSettleBillNo()); + // 重新计算账单收款(账单号可能为逗号分隔的多个) + if (StringUtils.isNotBlank(payRecordOld.getSettleBillNo())) { + List settleBillNos = Arrays.stream(payRecordOld.getSettleBillNo().split(",")) + .map(String::trim) + .filter(org.apache.commons.lang3.StringUtils::isNotBlank) + .distinct() + .collect(Collectors.toList()); + for (String settleBillNo : settleBillNos) { + emisSettleBillService.reCalcSettleBillPayStatus(settleBillNo); + } + } + + // 重新计算对应发票的已收金额与付款状态 + // 规则:发票新的已收金额 = 发票历史已收金额 - 本次(payId)对应的金额汇总 + // 1) 查询本次收款的运单收款明细(包含applySeqNo) + EmisSettlePayRel query = new EmisSettlePayRel(); + query.setPayId(payRecordOld.getPayId()); + List thisPayRelList = emisSettlePayRelMapper.selectEmisSettlePayRelList(query); + if (!CollectionUtils.isEmpty(thisPayRelList)) { + // 2) 按applySeqNo分组汇总本次金额 + Map revokeAmountByApplySeqNo = thisPayRelList.stream() + .filter(rel -> StringUtils.isNotBlank(rel.getApplySeqNo())) + .collect(Collectors.groupingBy(EmisSettlePayRel::getApplySeqNo, + Collectors.mapping(EmisSettlePayRel::getPayMoney, + Collectors.reducing(BigDecimal.ZERO, v -> v == null ? BigDecimal.ZERO : v, + BigDecimal::add)))); + + // 3) 对每个发票applySeqNo执行:历史已收金额 - 本次金额,重算状态 + for (Map.Entry entry : revokeAmountByApplySeqNo.entrySet()) { + String applySeqNo = entry.getKey(); + BigDecimal revokeAmount = entry.getValue() == null ? BigDecimal.ZERO : entry.getValue(); + + EmisSettleInvoiceRecord invoiceRecord = emisSettleInvoiceRecordMapper + .selectInvoiceRecordByApplySeqNo(applySeqNo); + if (invoiceRecord == null) { + continue; + } + + BigDecimal historyReced = invoiceRecord.getRecedMoney() == null ? BigDecimal.ZERO + : invoiceRecord.getRecedMoney(); + BigDecimal applyMoney = invoiceRecord.getApplyMoney() == null ? BigDecimal.ZERO + : invoiceRecord.getApplyMoney(); + + // 新的已收金额 = 历史已收金额 - 本次撤销金额,且不小于0 + BigDecimal newReced = historyReced.subtract(revokeAmount); + if (newReced.compareTo(BigDecimal.ZERO) < 0) { + newReced = BigDecimal.ZERO; + } + + String paymentStatus; + if (newReced.compareTo(BigDecimal.ZERO) == 0) { + paymentStatus = "0"; // 未付款 + } else if (newReced.compareTo(applyMoney) >= 0) { + paymentStatus = "1"; // 已付款 + } else { + paymentStatus = "2"; // 部分付款 + } + + EmisSettleInvoiceRecord upd = new EmisSettleInvoiceRecord(); + upd.setId(invoiceRecord.getId()); + upd.setRecedMoney(newReced); + upd.setPaymentStatus(paymentStatus); + emisSettleInvoiceRecordMapper.updateEmisSettleInvoiceRecord(upd); + } + } return 1; } diff --git a/emis-biz/src/main/resources/mapper/EmisSettlePayRecordMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettlePayRecordMapper.xml index fd041a8a1..4307ba44b 100644 --- a/emis-biz/src/main/resources/mapper/EmisSettlePayRecordMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSettlePayRecordMapper.xml @@ -655,7 +655,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - del_flag='0' - and id = #{id} - and pay_id = #{payId} - and bill_no = #{billNo} - and pay_money = #{payMoney} - and del_flag like concat('%', #{delFlag}, '%') - and create_by like concat('%', #{createBy}, '%') - and create_time = #{createTime} - and update_by like concat('%', #{updateBy}, '%') - and update_time = #{updateTime} - and create_site like concat('%', #{createSite}, '%') - and update_site like concat('%', #{updateSite}, '%') + + a.del_flag='0' + and a.id = #{id} + and a.pay_id = #{payId} + and a.bill_no = #{billNo} + and a.pay_money = #{payMoney} + and a.del_flag like concat('%', #{delFlag}, '%') + and a.create_by like concat('%', #{createBy}, '%') + and a.create_time = #{createTime} + and a.update_by like concat('%', #{updateBy}, '%') + and a.update_time = #{updateTime} + and a.create_site like concat('%', #{createSite}, '%') + and a.update_site like concat('%', #{updateSite}, '%') - order by create_time desc + order by a.create_time desc - + - + insert into emis_settle_pay_rel @@ -148,4 +173,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} - \ No newline at end of file + diff --git a/emis-biz/src/main/resources/mapper/EmisTmsSiteBatchMissStatisticsMapper.xml b/emis-biz/src/main/resources/mapper/EmisTmsSiteBatchMissStatisticsMapper.xml index c2be17cd6..c6d537157 100644 --- a/emis-biz/src/main/resources/mapper/EmisTmsSiteBatchMissStatisticsMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisTmsSiteBatchMissStatisticsMapper.xml @@ -18,9 +18,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" STR_TO_DATE(CONCAT(DATE_FORMAT(w.send_date, '%Y-%m'), '-01'), '%Y-%m-%d') as bill_month, COUNT(*) as ticket_count FROM emis_tms_site_batch_miss bm - LEFT JOIN emis_waybill w ON bm.bill_code = w.bill_code - LEFT JOIN emis_site s ON bm.start_site_code = s.site_code - WHERE 1=1 + LEFT JOIN emis_waybill w ON bm.bill_code = w.bill_code AND w.del_flag = '0' + LEFT JOIN emis_site s ON bm.start_site_code = s.site_code AND s.del_flag = '0' + WHERE bm.del_flag = '0' AND bm.start_site_code = #{startSiteCode} @@ -62,12 +62,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LIMIT 1) as product_type_name from emis_tms_site_batch_miss m left join emis_waybill w on m.bill_code = w.bill_code and w.del_flag='0' - left join emis_site s1 on w.send_site_code=s1.site_code and s1.del_flag=0 - left join emis_site s2 on m.start_site_code=s2.site_code and s2.del_flag=0 - left join emis_site s3 on m.next_site_code=s3.site_code and s3.del_flag=0 + left join emis_site s1 on w.send_site_code=s1.site_code and s1.del_flag='0' + left join emis_site s2 on m.start_site_code=s2.site_code and s2.del_flag='0' + left join emis_site s3 on m.next_site_code=s3.site_code and s3.del_flag='0' left join emis_country c1 on w.send_country=c1.code and c1.del_flag='0' left join emis_country c2 on w.receive_country=c2.code and c2.del_flag='0' - left join emis_site s4 on w.dispatch_underling_site_code=s4.site_code and s4.del_flag=0 + left join emis_site s4 on w.dispatch_underling_site_code=s4.site_code and s4.del_flag='0' left join emis_trans_line k on w.trans_line_type=k.line_code and k.del_flag='0' left join emis_trans_plan_rule r on m.trans_plan_rule_id=r.id and r.del_flag='0' left join emis_trans_line l on m.line_code=l.line_code and l.del_flag='0' @@ -114,12 +114,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LIMIT 1) as product_type_name from emis_tms_site_batch_miss m left join emis_waybill w on m.bill_code = w.bill_code and w.del_flag='0' - left join emis_site s1 on w.send_site_code=s1.site_code and s1.del_flag=0 - left join emis_site s2 on m.start_site_code=s2.site_code and s2.del_flag=0 - left join emis_site s3 on m.next_site_code=s3.site_code and s3.del_flag=0 + left join emis_site s1 on w.send_site_code=s1.site_code and s1.del_flag='0' + left join emis_site s2 on m.start_site_code=s2.site_code and s2.del_flag='0' + left join emis_site s3 on m.next_site_code=s3.site_code and s3.del_flag='0' left join emis_country c1 on w.send_country=c1.code and c1.del_flag='0' left join emis_country c2 on w.receive_country=c2.code and c2.del_flag='0' - left join emis_site s4 on w.dispatch_underling_site_code=s4.site_code and s4.del_flag=0 + left join emis_site s4 on w.dispatch_underling_site_code=s4.site_code and s4.del_flag='0' left join emis_trans_line k on w.trans_line_type=k.line_code and k.del_flag='0' left join emis_trans_plan_rule r on m.trans_plan_rule_id=r.id and r.del_flag='0' left join emis_trans_line l on m.line_code=l.line_code and l.del_flag='0'