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)); }