From 5d84bf1fffe4b8696d344d428abdc1a04f84c4b6 Mon Sep 17 00:00:00 2001 From: weicw1996 Date: Thu, 22 Oct 2026 13:55:10 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E7=A1=AE=E8=AE=A4=E5=9B=9E?= =?UTF-8?q?=E5=8D=95=E6=94=B9=E7=9C=8B=E8=BF=90=E5=8D=95=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=B9=B6=E6=94=AF=E6=8C=81=E5=8F=96=E6=B6=88=E6=89=93=E5=8D=A1?= =?UTF-8?q?=E5=9B=9E=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/WaybillServiceImpl.java | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java index b934d41a..a3ca5791 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java @@ -538,9 +538,26 @@ public class WaybillServiceImpl extends BaseServiceImpl throw new ServiceException("运单待业务员确认回单,不能补录打卡"); } if (ENROUTE_PUNCH_TYPE.equalsIgnoreCase(TransportBusinessSupport.trimToEmpty(request.getType()))) { - return saveEnroutePunchRecord(waybill, request, punched); + return revertIfReturnConfirmPreconditionLost(waybill, punched, + saveEnroutePunchRecord(waybill, request, punched)); } - return saveNodePunchRecord(waybill, request, punched); + return revertIfReturnConfirmPreconditionLost(waybill, punched, + saveNodePunchRecord(waybill, request, punched)); + } + + /** + * 取消打卡撤掉了「司机已无待打卡节点」这个前提,停在待回单确认的运单退回进行中。 + *

+ * 只认取消打卡后的待回单确认,其它状态一律不动。 + */ + private boolean revertIfReturnConfirmPreconditionLost(Waybill waybill, boolean punched, boolean saved) { + if (!saved || punched + || !WaybillProcessSupport.STATUS_PENDING_RETURN_CONFIRM + .equalsIgnoreCase(waybill.getBusinessStatus())) { + return saved; + } + waybill.setBusinessStatus(WaybillProcessSupport.STATUS_RUNNING); + return updateById(waybill); } /** @@ -968,13 +985,16 @@ public class WaybillServiceImpl extends BaseServiceImpl /** * 运单是否已越过接单阶段。 *

- * 正向列举进行中/已完成/已取消,不能用「不是终态」取反:终态里还包含草稿、待调度、 + * 正向列举进行中/已完成/已取消/待回单确认,不能用「不是终态」取反:终态里还包含草稿、待调度、 * 调度中这些并未越过接单的阶段,取反会把它们判成已接单。 + *

+ * 待回单确认下司机已打完末位卡,无需接单配置时接单节点不该再显示未打卡。 */ private static boolean passedAcceptStage(String businessStatus) { return "running".equals(businessStatus) || "completed".equals(businessStatus) - || "cancelled".equals(businessStatus); + || "cancelled".equals(businessStatus) + || WaybillProcessSupport.STATUS_PENDING_RETURN_CONFIRM.equals(businessStatus); } private String formatPunchTime(Date time) { @@ -1525,14 +1545,14 @@ public class WaybillServiceImpl extends BaseServiceImpl @Transactional(rollbackFor = Exception.class) public boolean confirmReturnReceipt(Long id) { Waybill waybill = loadEditable(id, true); + // 判据只看运单当前状态,不看回单配置当前值:配置改回「无需确认」后, + // 已停在待回单确认的运单仍要能确认回单 + if (!WaybillProcessSupport.STATUS_PENDING_RETURN_CONFIRM.equalsIgnoreCase(waybill.getBusinessStatus())) { + throw new ServiceException("当前状态不允许确认回单"); + } String processJson = LiveProcessConfigSupport.resolve( LiveProcessConfigSupport.byProject(processConfigService, waybill.getProjectId()), waybill.getProcessJson()); - if (WaybillProcessSupport.returnNeedsNoConfirmation(processJson)) { - // 不要求确认时司机打完末位卡就已经完成了,运单不会停在进行中等确认;配置对不上要说清, - // 否则用户会以为是确认没生效 - throw new ServiceException("该运单的回单不需要业务员确认"); - } assertPunchNodesFinished(waybill.getId(), processJson); assertNoUnresolvedException(waybill.getId()); return doComplete(waybill);