From 28e19517fbe2303971f86439f3a2af4c2f65ff27 Mon Sep 17 00:00:00 2001 From: weicw1996 Date: Sun, 18 Oct 2026 16:55:25 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E9=A1=BA=E5=BA=8F=E9=97=A8=E7=A6=81?= =?UTF-8?q?=E5=8F=AA=E7=82=B9=E5=90=8D=E6=9C=80=E5=85=88=E6=9C=AA=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E7=9A=84=E5=89=8D=E7=BD=AE=E8=8A=82=E7=82=B9=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E6=8A=8A=E6=B2=A1=E6=89=93=E7=9A=84=E5=89=8D?= =?UTF-8?q?=E7=BD=AE=E5=85=A8=E5=88=97=E5=87=BA=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DriverWaybillServiceImpl.java | 18 ++++----------- .../support/WaybillProcessSupport.java | 22 +++++++++++++++++++ .../support/WaybillProcessSupportTest.java | 18 +++++++++++++++ 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java index 4abe0be3..e0f09fdf 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java @@ -1326,7 +1326,8 @@ public class DriverWaybillServiceImpl implements IDriverWaybillService { Set unfinished = WaybillProcessSupport.unfinishedPrerequisiteKeys( processJson, punched, WaybillProcessSupport.nodeKey(nodeCfg)); if (!unfinished.isEmpty()) { - throw new ServiceException("请先完成「" + prerequisiteNames(processJson, unfinished) + "」打卡"); + throw new ServiceException("请先完成「" + + WaybillProcessSupport.firstUnfinishedPrerequisiteName(processJson, unfinished) + "」打卡"); } } @@ -1598,7 +1599,8 @@ public class DriverWaybillServiceImpl implements IDriverWaybillService { } vo.setBlockedByOrder(true); vo.setActionable(false); - vo.setOrderLockReason("请先完成「" + prerequisiteNames(processJson, unfinished) + "」打卡"); + vo.setOrderLockReason("请先完成「" + + WaybillProcessSupport.firstUnfinishedPrerequisiteName(processJson, unfinished) + "」打卡"); } // 是否允许展开:顺序门禁不允许展开(还没轮到,展开也没用); @@ -1647,18 +1649,6 @@ public class DriverWaybillServiceImpl implements IDriverWaybillService { return nodes; } - /** 把前置节点 key 拼成给人看的名称列表,如「装货、发货」 */ - private String prerequisiteNames(String processJson, Set nodeKeys) { - List names = new ArrayList<>(); - for (Map node : WaybillProcessSupport.listDriverPunchNodes(processJson)) { - String key = WaybillProcessSupport.nodeKey(node); - if (nodeKeys.contains(key)) { - names.add(WaybillProcessSupport.nodeName(node)); - } - } - return names.isEmpty() ? "" : String.join("、", names); - } - private Map findPunchNodeConfig(String processJson, String nodeCode) { List> punchConfigs = WaybillProcessSupport.listDriverPunchNodes(processJson); for (Map cfg : punchConfigs) { 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 bb508f05..1b273c0b 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 @@ -420,6 +420,28 @@ public final class WaybillProcessSupport { return Collections.emptySet(); } + /** + * 顺序门禁点名的那一个前置节点名称:取**最先未完成**的。 + *

+ * 它才是司机现在能去打卡的那一步——后面那些未完成的前置节点自己也还打不了, + * 一起列出来既长,又不是一个可执行的下一步。 + * + * @param processJson 过程配置 + * @param nodeKeys 未完成的前置节点 key,即 {@link #unfinishedPrerequisiteKeys} 的返回 + */ + public static String firstUnfinishedPrerequisiteName(String processJson, Collection nodeKeys) { + if (nodeKeys == null || nodeKeys.isEmpty()) { + return ""; + } + for (Map node : listDriverPunchNodes(processJson)) { + String key = nodeKey(node); + if (nodeKeys.contains(key)) { + return nodeName(node); + } + } + return ""; + } + /** * 两个节点编码是否指同一个节点:两侧去空白、忽略大小写。 *

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 fa3334c2..5583f975 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 @@ -123,6 +123,24 @@ class WaybillProcessSupportTest { "「到货」还没打,所以卸货的前置是到货;在途不是前置(它没有完成含义)"); } + @Test + @DisplayName("顺序门禁只点名最先未完成的那一个前置节点,不把没打的前置全列出来") + void namesOnlyTheEarliestUnfinishedPrerequisite() { + Set unfinished = WaybillProcessSupport.unfinishedPrerequisiteKeys( + TRANSPORT_JSON, Collections.emptySet(), "arrival"); + + assertEquals(keys("arrive_scene", "load", "dispatch"), unfinished, "到货前面三个打卡节点都没打"); + assertEquals("到场", WaybillProcessSupport.firstUnfinishedPrerequisiteName(TRANSPORT_JSON, unfinished), + "只报司机现在能去打卡的那一个:装货、发货自己也还打不了,列出来不是可执行的下一步"); + } + + @Test + @DisplayName("没有未完成的前置节点时不点名") + void namesNothingWhenNothingIsUnfinished() { + assertEquals("", + WaybillProcessSupport.firstUnfinishedPrerequisiteName(TRANSPORT_JSON, Collections.emptySet())); + } + @Test @DisplayName("顺序门禁:在途豁免,前置一个都没打也返回空集") void transitIsExemptFromOrderGate() {