diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ExceptionDisposalServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ExceptionDisposalServiceImpl.java index 57c96783..65249bc3 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ExceptionDisposalServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ExceptionDisposalServiceImpl.java @@ -138,18 +138,18 @@ public class ExceptionDisposalServiceImpl throw new ServiceException("请关联运单后再上报"); } - // 异常必须归属到某个过程节点:没有节点的异常无从定位阻断区间,只能整单停摆。 - // 节点名取自过程配置而非请求体:上报页传什么不影响入库,避免落进一个该节点并不叫的名字。 + // 节点可以为空:全局入口(首页快捷格、打卡页底部按钮)上报的异常不指定环节, + // 它无从定位阻断区间,由门禁按「阻断该运单全部未打卡节点」处理。 + // 节点非空时才要求它确属该运单;节点名取自过程配置而非请求体,避免落进一个该节点并不叫的名字。 String nodeCode = Func.toStr(request.getNodeCode(), "").trim(); - if (Func.isBlank(nodeCode)) { - throw new ServiceException("请选择异常节点"); + if (Func.isNotEmpty(nodeCode)) { + Map nodeCfg = driverWaybillService.findPunchNode(disposal.getWaybillId(), nodeCode); + if (nodeCfg == null) { + throw new ServiceException("异常节点不存在"); + } + disposal.setNodeCode(WaybillProcessSupport.nodeKey(nodeCfg)); + disposal.setNodeName(WaybillProcessSupport.nodeName(nodeCfg)); } - Map nodeCfg = driverWaybillService.findPunchNode(disposal.getWaybillId(), nodeCode); - if (nodeCfg == null) { - throw new ServiceException("异常节点不存在"); - } - disposal.setNodeCode(WaybillProcessSupport.nodeKey(nodeCfg)); - disposal.setNodeName(WaybillProcessSupport.nodeName(nodeCfg)); if (!save(disposal)) { throw new ServiceException("异常上报失败"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/WaybillProcessSupport.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/WaybillProcessSupport.java index 8e0291e8..2d685d0c 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/WaybillProcessSupport.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/WaybillProcessSupport.java @@ -469,9 +469,8 @@ public final class WaybillProcessSupport { if (punchNodes.isEmpty() || fromNodeCode == null) { return blocked; } - // 空串代表「未指明节点」,阻断全部可打卡节点。 - // 新上报已强制要求节点,此分支只为**存量数据**保留——去掉它,那些没有节点的 - // 未了结异常会突然不再阻断任何节点,等于悄悄放开了打卡。 + // 空串代表「未指明节点」——全局入口(首页快捷格、打卡页底部按钮)不指定环节, + // 这类异常无从定位区间,只能阻断全部可打卡节点。 if (Func.isEmpty(fromNodeCode)) { for (Map node : punchNodes) { blocked.add(nodeKey(node)); diff --git a/blade-service/blade-transport/src/test/java/org/springblade/transport/support/WaybillProcessSupportTest.java b/blade-service/blade-transport/src/test/java/org/springblade/transport/support/WaybillProcessSupportTest.java index 2aa846c2..223a17ec 100644 --- a/blade-service/blade-transport/src/test/java/org/springblade/transport/support/WaybillProcessSupportTest.java +++ b/blade-service/blade-transport/src/test/java/org/springblade/transport/support/WaybillProcessSupportTest.java @@ -82,7 +82,7 @@ class WaybillProcessSupportTest { } @Test - @DisplayName("未指明节点的异常(存量数据)阻断全部打卡节点,含在途") + @DisplayName("未指明节点的异常(全局入口上报)阻断全部打卡节点,含在途") void exceptionWithoutNodeBlocksEverything() { Set blocked = WaybillProcessSupport.blockedNodeKeys(TRANSPORT_JSON, Arrays.asList(""));