From 6673ed38f319d92596268f0986507b94e3cfb391 Mon Sep 17 00:00:00 2001 From: weicw1996 Date: Thu, 22 Oct 2026 14:47:33 +0800 Subject: [PATCH 1/4] =?UTF-8?q?:recycle:=20=E5=BE=85=E5=9B=9E=E5=8D=95?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=EF=BC=9A=E6=B3=A8=E9=87=8A=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E9=99=88=E8=BF=B0=E4=BA=8B=E5=AE=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DriverWaybillServiceImpl.java | 10 +++++----- .../service/impl/ManageWaybillServiceImpl.java | 4 ++-- 2 files changed, 7 insertions(+), 7 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 4348f65b..94d11e3f 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 @@ -124,8 +124,8 @@ public class DriverWaybillServiceImpl implements IDriverWaybillService { WaybillProcessSupport.STATUS_PENDING_RETURN_CONFIRM, STATUS_COMPLETED ); /** - * 进行中口径:司机手上还没走完的单。 - * 待回单确认也算进行中——司机侧已打完末位卡,等业务员确认回单才变已完成。 + * 进行中口径:司机手上还没走完的单,含待回单确认。 + * 待回单确认指司机已打完末位卡、等业务员确认回单,此时业务状态还不是 completed。 */ private static final List ACTIVE_STATUSES = Arrays.asList( STATUS_RUNNING, STATUS_PENDING, STATUS_WAITING_DISPATCH, STATUS_DISPATCHING, @@ -525,9 +525,9 @@ public class DriverWaybillServiceImpl implements IDriverWaybillService { nodePunchMapper.insert(punch); advanceCurrentProcessNode(waybill, nodeCfg); - // 末位打卡节点是到货/卸货/签收、且运单本身允许完成时,本次打卡就是运单的去向决定点: - // 回单无需确认 → 一并完成;回单需业务员确认 → 停在待回单确认等业务员确认。 - // isLastDriverPunchNode 与 returnNeedsNoConfirmation 传的就是上面那份 processJson,未再调 resolveProcessJson 取过程配置。 + // 末位打卡节点为到货/卸货/签收、且运单允许完成时:回单无需确认则本次打卡一并完成运单, + // 回单需业务员确认则停在待回单确认。 + // isLastDriverPunchNode 与 returnNeedsNoConfirmation 传的是上面那份 processJson,未再调 resolveProcessJson 取过程配置。 String nodeKey = WaybillProcessSupport.nodeKey(nodeCfg); String nodeName = WaybillProcessSupport.nodeName(nodeCfg); String waybillBusinessStatus = waybill.getBusinessStatus(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ManageWaybillServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ManageWaybillServiceImpl.java index 0f692983..a0ee73f3 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ManageWaybillServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ManageWaybillServiceImpl.java @@ -996,8 +996,8 @@ public class ManageWaybillServiceImpl implements IManageWaybillService { } return switch (businessStatus) { case STATUS_PENDING, "waiting_dispatch", "dispatching" -> 0; - // 与司机端 toAppStatus 同一份数字枚举(0 待接单 / 1 运输中 / 2 已完成 / 3 已取消),待回单确认属进行中: - // 两处对同一状态必须给同一个数字,给 null 前端只能落到「未知」兜底 + // 数字枚举与司机端 toAppStatus 同源:0 待接单 / 1 运输中 / 2 已完成 / 3 已取消; + // 待回单确认属进行中,落 1。给 null 时前端显示「未知」。 case STATUS_RUNNING, WaybillProcessSupport.STATUS_PENDING_RETURN_CONFIRM -> 1; case STATUS_COMPLETED -> 2; case STATUS_CANCELLED -> 3; From 35127760df7b35da52b2be16c9509846330afd35 Mon Sep 17 00:00:00 2001 From: weicw1996 Date: Thu, 22 Oct 2026 14:48:20 +0800 Subject: [PATCH 2/4] =?UTF-8?q?:bug:=20=E5=BE=85=E5=9B=9E=E5=8D=95?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=EF=BC=9A=E4=B8=9A=E5=8A=A1=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=AF=94=E8=BE=83=E7=BB=9F=E4=B8=80=E4=B8=BA=E5=BF=BD=E7=95=A5?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../transport/service/impl/DriverWaybillServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 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 94d11e3f..27226429 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 @@ -540,9 +540,9 @@ public class DriverWaybillServiceImpl implements IDriverWaybillService { if (completed) { waybillBusinessStatus = STATUS_COMPLETED; } - } else if (WaybillProcessSupport.STATUS_RUNNING.equals(waybill.getBusinessStatus())) { - // 只有进行中能进入:canAutoCompleteWaybill 的状态口径含待执行/待调度等,不能替代这一条; - // 待回单确认在 isPunchEnded 里算已结束,不能从结束态重进。 + } else if (WaybillProcessSupport.STATUS_RUNNING.equalsIgnoreCase(waybill.getBusinessStatus())) { + // 当前业务状态为 running 才置为待回单确认;canAutoCompleteWaybill 的状态口径还含待执行/待调度。 + // 待回单确认在 isPunchEnded 里与已完成、已取消同属结束态。 waybill.setBusinessStatus(WaybillProcessSupport.STATUS_PENDING_RETURN_CONFIRM); waybillService.updateById(waybill); waybillBusinessStatus = WaybillProcessSupport.STATUS_PENDING_RETURN_CONFIRM; From e0c8c988052cb5619c0f634913950ccbc6ef99df Mon Sep 17 00:00:00 2001 From: weicw1996 Date: Thu, 22 Oct 2026 14:48:48 +0800 Subject: [PATCH 3/4] =?UTF-8?q?:sparkles:=20=E5=BE=85=E5=9B=9E=E5=8D=95?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=EF=BC=9A=E8=BF=90=E6=AC=A1=E5=8D=A1=E7=89=87?= =?UTF-8?q?=E4=B8=8B=E5=8F=91=E5=94=AF=E4=B8=80=E5=8E=9F=E5=A7=8B=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DriverWaybillServiceImpl.java | 7 +++++ .../service/impl/DriverTripCardTest.java | 29 +++++++++++++++++++ 2 files changed, 36 insertions(+) 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 27226429..428c4398 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 @@ -1113,6 +1113,13 @@ public class DriverWaybillServiceImpl implements IDriverWaybillService { card.setId(parseId(children.isEmpty() ? trip.getId() : children.get(0).getId())); card.setWaybillNo(children.isEmpty() ? card.getTripNo() : Func.toStr(children.get(0).getWaybillNo(), "")); card.setStatus(trip.getStatus()); + // 原始业务状态只在整趟车子单状态唯一时下发:配载车混状态时一趟车没有唯一原始状态,给 null 由前端按数字态展示 + List childBusinessStatuses = children.stream() + .map(TripVO.TripWaybillVO::getBusinessStatus) + .filter(Func::isNotBlank) + .distinct() + .collect(Collectors.toList()); + card.setBusinessStatus(childBusinessStatuses.size() == 1 ? childBusinessStatuses.get(0) : null); card.setRequireAccept(trip.getRequireAccept()); card.setAcceptStatus(trip.getAcceptStatus()); card.setTransportOrgType(trip.getTransportOrgType()); diff --git a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/DriverTripCardTest.java b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/DriverTripCardTest.java index 7bdcbba1..41189b41 100644 --- a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/DriverTripCardTest.java +++ b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/DriverTripCardTest.java @@ -30,6 +30,7 @@ import org.springblade.transport.service.ITransportVehicleService; import org.springblade.transport.service.ITripQueryService; import org.springblade.transport.service.IWaybillService; import org.springblade.transport.support.CertificationGate; +import org.springblade.transport.support.WaybillProcessSupport; import java.math.BigDecimal; import java.util.Date; @@ -147,6 +148,34 @@ class DriverTripCardTest { assertEquals("桂A32523", card.getVehicleNo()); } + @Test + @DisplayName("运次卡片带唯一原始业务状态:子单都在待回单确认时下发 pending_return_confirm,数字态仍是 1") + void tripCardCarriesUniqueChildBusinessStatus() { + TripVO trip = loadingTrip(); + trip.getWaybills().forEach(child -> child.setBusinessStatus(WaybillProcessSupport.STATUS_PENDING_RETURN_CONFIRM)); + stubTripPage(1, trip); + + IPage page = runAsDriver(() -> service.tripPage(1, 10, null, null)); + + DriverWaybillCardVO card = page.getRecords().get(0); + assertEquals(WaybillProcessSupport.STATUS_PENDING_RETURN_CONFIRM, card.getBusinessStatus()); + assertEquals(trip.getStatus(), card.getStatus(), "运次数字态口径不变,仍取运次状态"); + } + + @Test + @DisplayName("运次卡片原始业务状态:配载车混状态时给 null,由前端回退数字态") + void tripCardWithoutUniqueChildBusinessStatusGivesNull() { + TripVO trip = loadingTrip(); + trip.getWaybills().get(0).setBusinessStatus(WaybillProcessSupport.STATUS_PENDING_RETURN_CONFIRM); + stubTripPage(1, trip); + + IPage page = runAsDriver(() -> service.tripPage(1, 10, null, null)); + + DriverWaybillCardVO card = page.getRecords().get(0); + assertNull(card.getBusinessStatus(), "一趟车里两种原始状态,没有唯一值可下发"); + assertEquals(1, card.getStatus(), "混状态不影响运次数字态"); + } + @Test @DisplayName("运次列表不因配载卡去回查运单,也不写库") void tripPageDoesNotLookUpWaybillsOrWrite() { From c47268adfdb8b5d5b39d299255666ee4dc754cfe Mon Sep 17 00:00:00 2001 From: weicw1996 Date: Thu, 22 Oct 2026 14:48:48 +0800 Subject: [PATCH 4/4] =?UTF-8?q?:white=5Fcheck=5Fmark:=20=E5=BE=85=E5=9B=9E?= =?UTF-8?q?=E5=8D=95=E7=A1=AE=E8=AE=A4=EF=BC=9A=E6=B5=8B=E8=AF=95=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E5=90=8D=E4=B8=8E=E6=96=AD=E8=A8=80=E5=AF=B9=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../transport/support/WaybillProcessSupportTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 9408bfd6..d8830c8a 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 @@ -337,8 +337,8 @@ class WaybillProcessSupportTest { // ------------------------------------------------------------ 待回单确认 @Test - @DisplayName("待回单确认落库字面量为 pending_return_confirm,且接单归一不得改写它") - void pendingReturnConfirmIsTerminalStatus() { + @DisplayName("待回单确认落库字面量为 pending_return_confirm,且接单归一不改写它") + void pendingReturnConfirmLiteralSurvivesAcceptanceNormalization() { assertEquals("pending_return_confirm", WaybillProcessSupport.STATUS_PENDING_RETURN_CONFIRM, "库里存的是这个字面量,web 与小程序也按它判断,不能改名"); assertEquals(WaybillProcessSupport.STATUS_PENDING_RETURN_CONFIRM,