feat: allow shared dropship pallets

This commit is contained in:
2026-09-11 17:12:03 +08:00
parent 1683977e0b
commit c8e8245853
5 changed files with 52 additions and 10 deletions
@@ -61,4 +61,19 @@ class DropshipPalletizationSqlContractTest {
.contains("DROP INDEX uk_loading_item_plan_detail")
.contains("ADD UNIQUE KEY uk_loading_item_plan_assignment (loading_plan_id,active_assignment_key)");
}
@Test
void sharedPalletsAreVisibleAndOnlyParticipatingOpenPalletsBlockCompletion() throws Exception {
String pallets = DropshipPalletizationMapper.class.getDeclaredMethod("pallets", long.class)
.getAnnotation(Select.class).value()[0];
String open = DropshipPalletizationMapper.class.getDeclaredMethod("openPalletCount", long.class)
.getAnnotation(Select.class).value()[0];
String complete = DropshipPalletizationMapper.class.getDeclaredMethod("completeTask", long.class)
.getAnnotation(org.apache.ibatis.annotations.Update.class).value()[0];
assertThat(pallets).contains("c.pallet_id=p.id AND c.task_id=#{taskId}");
assertThat(open).contains("fl_dropship_pallet_carton c").contains("c.task_id=#{taskId}");
assertThat(complete).contains("fl_dropship_pallet_carton c JOIN fl_dropship_pallet p")
.doesNotContain("p.task_id=#{taskId}");
}
}
@@ -53,6 +53,24 @@ class DropshipPalletizationServiceTest {
verify(mapper).insertCartonSku(anyLong(),anyLong(),eq(40L),eq("SKU-1"),any(),eq(12),eq(12),eq("MATCH"),isNull(),eq(1));
}
@Test void cartonCanBindToAnOpenPalletGeneratedForAnotherTaskInTheSameWarehouse(){
TaskRow current=task(); PalletRow shared=pallet(); shared.setTaskId(99L); shared.setTenantId(2L); shared.setInboundId(88L);
when(mapper.task(10L,100L)).thenReturn(current); when(mapper.palletCount(10L)).thenReturn(2);
when(mapper.label(10L,"BOX-1")).thenReturn(label()); when(mapper.palletByNo("DP-260911-0001")).thenReturn(shared);
when(mapper.addCounted(10L,7L,1,0)).thenReturn(1); when(mapper.carton(eq(10L),anyLong())).thenReturn(carton());
when(mapper.pallet(10L,20L,100L)).thenReturn(shared); when(mapper.cartons(20L)).thenReturn(java.util.List.of());
service.countCarton(10L,countRequest("DP-260911-0001"),7L,"张三");
verify(mapper).insertCarton(anyLong(),eq(10L),eq(20L),eq(1L),eq(30L),anyLong(),anyLong(),anyString(),any(),eq("BOX-1"),anyInt(),anyInt(),eq("MATCH"),isNull(),eq("op-1"),eq(7L),eq("张三"));
}
@Test void palletFromAnotherWarehouseCannotBeMixed(){
PalletRow other=pallet(); other.setWarehouseId(101L);
when(mapper.task(10L,100L)).thenReturn(task()); when(mapper.palletCount(10L)).thenReturn(2);
when(mapper.label(10L,"BOX-1")).thenReturn(label()); when(mapper.palletByNo("DP-260911-0001")).thenReturn(other);
assertThatThrownBy(()->service.countCarton(10L,countRequest("DP-260911-0001"),7L,"张三"))
.isInstanceOf(BizException.class).hasMessageContaining("当前作业仓库");
}
@Test void unknownPalletCodeCannotCreateAnAdHocPallet(){
when(mapper.task(10L,100L)).thenReturn(task()); when(mapper.palletCount(10L)).thenReturn(2); when(mapper.label(10L,"BOX-1")).thenReturn(label());
var request=countRequest("DP-260911-9999");