From 4833abe27fa48a52f1fe1f983799f94cb1d8afd0 Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Sat, 7 Feb 2026 10:28:59 +0800 Subject: [PATCH] =?UTF-8?q?demand:=20=20=20=20TMS=E7=B3=BB=E7=BB=9F=20-=20?= =?UTF-8?q?=E6=9C=88=E7=BB=93=E8=B4=A6=E5=8D=95=E9=94=80=E8=B4=A6/?= =?UTF-8?q?=E7=8E=B0=E9=87=91=E8=B4=A6=E5=8D=95=E9=94=80=E8=B4=A6=20-=20?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/EmisSettlePayRecordServiceImpl.java | 82 +++++++++++++------ 1 file changed, 57 insertions(+), 25 deletions(-) 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 a2aed7b39..bfe97910f 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 @@ -480,9 +480,27 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I && !"7".equals(emisSettlePayRecord.getPayType())) { throw new EmisBizError(EmisBizErrorType.FAIL, "业务账单未确认,不允许收款!"); } + } + } - // 校验账单对应的运单是否在销账申请表中,且中心审核状态为未审核 - checkWriteoffApplyStatus(settleBillNo); + // 校验运单是否已登记业务销账申请且中心审核状态为未审核 + // 优先按运单维度校验;若未传运单明细,则使用原“账单->子账单->运单”的兜底逻辑,避免误放行 + List payRelListForCheck = emisSettlePayRecord.getPayRelList(); + if (!CollectionUtils.isEmpty(payRelListForCheck)) { + List waybillNos = payRelListForCheck.stream() + .map(EmisSettlePayRel::getBillNo) + .filter(StringUtils::isNotBlank) + .distinct() + .collect(Collectors.toList()); + for (String waybillNo : waybillNos) { + checkWriteoffApplyStatusByBillCode(waybillNo); + } + } else { + for (int i = 0; i < settleBillNoArr.size(); i++) { + String settleBillNo = settleBillNoArr.get(i); + if (!StringUtils.isEmpty(settleBillNo)) { + checkWriteoffApplyStatus(settleBillNo); + } } } @@ -640,33 +658,47 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I // 根据运单号查询销账申请明细 for (String billCode : billCodeList) { - EmisWriteoffApplyDetail queryDetail = new EmisWriteoffApplyDetail(); - queryDetail.setBillCode(billCode); - List detailList = emisWriteoffApplyDetailMapper.selectEmisWriteoffApplyDetailList(queryDetail); + checkWriteoffApplyStatusByBillCode(billCode); + } + } - if (CollectionUtils.isEmpty(detailList)) { - continue; - } + /** + * 校验运单是否在销账申请表中,且中心审核状态为未审核 + * + * @param billCode 运单号 + * @throws EmisBizError 如果存在未审核的销账申请,则抛出异常 + */ + private void checkWriteoffApplyStatusByBillCode(String billCode) throws EmisBizError { + if (StringUtils.isBlank(billCode)) { + return; + } - // 获取所有申请ID,去重 - List applyIds = detailList.stream() - .map(EmisWriteoffApplyDetail::getApplyId) - .filter(id -> id != null) - .distinct() - .collect(Collectors.toList()); + EmisWriteoffApplyDetail queryDetail = new EmisWriteoffApplyDetail(); + queryDetail.setBillCode(billCode); + List detailList = emisWriteoffApplyDetailMapper.selectEmisWriteoffApplyDetailList(queryDetail); - if (CollectionUtils.isEmpty(applyIds)) { - continue; - } + if (CollectionUtils.isEmpty(detailList)) { + return; + } - // 查询销账申请,检查中心审核状态 - for (Long applyId : applyIds) { - EmisWriteoffApply writeoffApply = emisWriteoffApplyMapper.selectEmisWriteoffApplyById(applyId); - if (writeoffApply != null - && WriteoffApplyStatus.CENTER_PENDING.statusCode.equals(writeoffApply.getBlCenterConfirmed())) { - throw new EmisBizError(EmisBizErrorType.FAIL, - billCode + "已经登记业务销账申请,请先处理再销账"); - } + // 获取所有申请ID,去重 + List applyIds = detailList.stream() + .map(EmisWriteoffApplyDetail::getApplyId) + .filter(id -> id != null) + .distinct() + .collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(applyIds)) { + return; + } + + // 查询销账申请,检查中心审核状态 + for (Long applyId : applyIds) { + EmisWriteoffApply writeoffApply = emisWriteoffApplyMapper.selectEmisWriteoffApplyById(applyId); + if (writeoffApply != null + && WriteoffApplyStatus.CENTER_PENDING.statusCode.equals(writeoffApply.getBlCenterConfirmed())) { + throw new EmisBizError(EmisBizErrorType.FAIL, + billCode + "已经登记业务销账申请,请先处理再销账"); } } }