From f9453e4facc4254b8546337ecf913ffa92795382 Mon Sep 17 00:00:00 2001 From: weicw1996 Date: Sun, 18 Oct 2026 14:48:17 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E6=8B=92=E5=8D=95=E7=A5=A8=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E8=A2=AB=E6=8E=92=E9=99=A4=E5=9C=A8=E5=8F=AF=E9=85=8D?= =?UTF-8?q?=E8=BD=BD=E4=B9=8B=E5=A4=96=EF=BC=8C=E9=9A=8F=E9=85=8D=E8=BD=BD?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=B8=85=E9=99=A4=E6=8E=A5=E5=8D=95=E4=BA=8B?= =?UTF-8?q?=E5=AE=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/LoadingManageServiceImpl.java | 3 --- .../transport/support/LoadableAdmissionSupport.java | 13 ++++++------- .../service/impl/LoadingManageAdmissionTest.java | 10 ++++------ .../impl/LoadingManageChildStatusWriteTest.java | 2 +- .../service/impl/WaybillLoadableQueryTest.java | 8 +++----- .../support/LoadableAdmissionSupportTest.java | 13 +++++++++---- 6 files changed, 23 insertions(+), 26 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java index e90dfe99..96dd0fcb 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/LoadingManageServiceImpl.java @@ -784,9 +784,6 @@ public class LoadingManageServiceImpl extends BaseServiceImpl + * 接单状态不进判据:拒单票照样可配载。配载提交会把它的接单事实清成待接单, + * 否则新司机看不到这张票——司机端入口一律排除已拒绝的运单。 *

* 候选列表取数与配载提交/编辑/重新派单的校验共用这一份定义。 */ @@ -99,8 +102,7 @@ public final class LoadableAdmissionSupport { return false; } if (!isRoadTransport(waybill.getTransportType()) - || !LOADABLE_BUSINESS_STATUS.equals(text(waybill.getBusinessStatus())) - || WaybillProcessSupport.isRejected(waybill.getDriverAcceptStatus())) { + || !LOADABLE_BUSINESS_STATUS.equals(text(waybill.getBusinessStatus()))) { return false; } String loadingNo = text(waybill.getLoadingNo()); @@ -126,7 +128,7 @@ public final class LoadableAdmissionSupport { } /** - * 把整条可配载判据加到运单查询上:公路 + 待执行 + 未配载 + 非拒单。 + * 把整条可配载判据加到运单查询上:公路 + 待执行 + 未配载。 * * @param wrapper 运单列表查询条件 */ @@ -134,9 +136,6 @@ public final class LoadableAdmissionSupport { applyRoadTransportCondition(wrapper); wrapper.eq(Waybill::getBusinessStatus, LOADABLE_BUSINESS_STATUS); wrapper.and(nested -> nested.isNull(Waybill::getLoadingNo).or().eq(Waybill::getLoadingNo, "")); - // 接单状态绝大多数为 NULL,而 NULL <> 'rejected' 不成立,只写不等于会把它们一起滤掉 - wrapper.and(nested -> nested.isNull(Waybill::getDriverAcceptStatus) - .or().ne(Waybill::getDriverAcceptStatus, WaybillProcessSupport.ACCEPT_REJECTED)); } private static void applyRoadTransportCondition(LambdaQueryWrapper wrapper) { diff --git a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/LoadingManageAdmissionTest.java b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/LoadingManageAdmissionTest.java index 0eebe79c..aceee927 100644 --- a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/LoadingManageAdmissionTest.java +++ b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/LoadingManageAdmissionTest.java @@ -127,16 +127,14 @@ class LoadingManageAdmissionTest { } @Test - @DisplayName("已拒单的运单被拒:接单事实由配载写入路径清除,不靠放行拒单票") - void rejectedWaybillRejected() { + @DisplayName("已拒单但未配载的公路待执行运单可通过提交:接单事实由配载写入路径清除,新司机由此看到它") + void rejectedWaybillIsAdmitted() { Waybill rejected = waybill(1L, WAYBILL_NO_A, "road", "pending", null, PROJECT_A); rejected.setDriverAcceptStatus("rejected"); stubWaybills(rejected); + stubContract(CONTRACT_ID, PROJECT_A); - ServiceException exception = assertThrows(ServiceException.class, - () -> service.submit(submitPayload(List.of(1L)))); - - assertEquals("运单" + WAYBILL_NO_A + "已被司机拒绝接单,不可配载", exception.getMessage()); + assertDoesNotThrow(() -> service.submit(submitPayload(List.of(1L)))); } // ------------------------------------------------------------ 本单既有子运单 diff --git a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/LoadingManageChildStatusWriteTest.java b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/LoadingManageChildStatusWriteTest.java index d1c6ee4e..8ebcbee3 100644 --- a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/LoadingManageChildStatusWriteTest.java +++ b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/LoadingManageChildStatusWriteTest.java @@ -368,7 +368,7 @@ class LoadingManageChildStatusWriteTest { waybill.setProjectId(projectId); waybill.setProcessJson(processJson); waybill.setDeptId(DEPT_ID_LONG); - // 可配载只放行公路 + 待执行 + 未配载 + 未拒单,夹具的票都是这种票 + // 可配载只放行公路 + 待执行 + 未配载,夹具的票都是这种票 waybill.setTransportType("公路运输"); waybill.setBusinessStatus("pending"); return waybill; diff --git a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/WaybillLoadableQueryTest.java b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/WaybillLoadableQueryTest.java index 3b588be4..54e6eacf 100644 --- a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/WaybillLoadableQueryTest.java +++ b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/WaybillLoadableQueryTest.java @@ -68,7 +68,7 @@ class WaybillLoadableQueryTest { } @Test - @DisplayName("开关开启:公路词表、待执行、未配载、非拒单一次全部进 wrapper") + @DisplayName("开关开启:公路词表、待执行、未配载一次全部进 wrapper,接单状态不参与") void loadableSwitchAppliesWholePredicate() { LambdaQueryWrapper wrapper = capturedQuery(loadableQuery()); String sql = String.valueOf(wrapper.getTargetSql()); @@ -85,10 +85,8 @@ class WaybillLoadableQueryTest { "进行中一律不可配载,不能沿用「待执行与进行中都可配载」的旧口径:" + params); assertTrue(sql.contains("loading_no IS NULL") && sql.contains("loading_no ="), "未配载要同时覆盖 NULL 与空串:" + sql); - assertTrue(sql.contains("driver_accept_status <>") && params.contains("rejected"), - "接单状态为已拒绝的要排除:" + sql); - assertTrue(sql.contains("driver_accept_status IS NULL"), - "接单状态大多是 NULL,只写不等于 rejected 会把它们一起滤掉:" + sql); + assertFalse(sql.contains("driver_accept_status"), + "接单状态不进可配载判据:拒单票照样可被重新配载:" + sql); } @Test diff --git a/blade-service/blade-transport/src/test/java/org/springblade/transport/support/LoadableAdmissionSupportTest.java b/blade-service/blade-transport/src/test/java/org/springblade/transport/support/LoadableAdmissionSupportTest.java index e73bd74e..92d8382f 100644 --- a/blade-service/blade-transport/src/test/java/org/springblade/transport/support/LoadableAdmissionSupportTest.java +++ b/blade-service/blade-transport/src/test/java/org/springblade/transport/support/LoadableAdmissionSupportTest.java @@ -48,14 +48,21 @@ class LoadableAdmissionSupportTest { // ------------------------------------------------------------ 单张运单准入 @Test - @DisplayName("公路 + 待执行 + 未配载 + 未拒单才可配载") + @DisplayName("公路 + 待执行 + 未配载才可配载") void loadableOnlyWhenAllConditionsHold() { assertTrue(LoadableAdmissionSupport.isLoadable(waybill("road", "pending", null, "pending"))); assertTrue(LoadableAdmissionSupport.isLoadable(waybill("公路运输", "pending", "", null))); } @Test - @DisplayName("非公路、非待执行、已关联配载单、已拒单各自单独即可拒绝") + @DisplayName("已拒单的票照样可配载:接单事实由配载提交清除,不靠把拒单票挡在候选之外") + void rejectedWaybillIsLoadable() { + assertTrue(LoadableAdmissionSupport.isLoadable(waybill("road", "pending", null, "rejected"))); + assertTrue(LoadableAdmissionSupport.isLoadable(waybill("road", "pending", null, "rejected"), "PZ20260101-001")); + } + + @Test + @DisplayName("非公路、非待执行、已关联配载单各自单独即可拒绝") void eachConditionRejectsOnItsOwn() { assertFalse(LoadableAdmissionSupport.isLoadable(waybill("railway", "pending", null, "pending")), "非公路不可配载"); @@ -66,8 +73,6 @@ class LoadableAdmissionSupportTest { assertFalse(LoadableAdmissionSupport.isLoadable(waybill("road", "cancelled", null, null))); assertFalse(LoadableAdmissionSupport.isLoadable(waybill("road", "pending", "PZ20260101-001", null)), "已挂在其它配载单上的票不可再配载"); - assertFalse(LoadableAdmissionSupport.isLoadable(waybill("road", "pending", null, "rejected")), - "已拒单的票不可配载"); assertFalse(LoadableAdmissionSupport.isLoadable(null)); }