From 7adee5771fd72c069b61428c8741ad588ecd6e03 Mon Sep 17 00:00:00 2001 From: "HUOJIN\\92525" <925258474@qq.com> Date: Sun, 27 Apr 2025 17:34:27 +0800 Subject: [PATCH] no message --- .../service/InventoryQueryService.java | 12 +- .../impl/InventoryQueryServiceImpl.java | 24 ++- .../itemKey/service/ItemKeyQueryService.java | 9 + .../service/impl/ItemKeyQueryServiceImpl.java | 10 + .../receive/controller/ReceiveController.java | 4 +- .../domain => }/form/BatchReceiveForm.java | 3 +- .../domain => }/form/BatchReturnForm.java | 2 +- .../wms/receive/service/ReceiveService.java | 4 +- .../service/impl/ReceiveServiceImpl.java | 4 +- .../controller/ShippingController.java | 29 +++ .../wms/shipping/form/AllocationForm.java | 20 ++ .../wms/shipping/form/BatchReturnForm.java | 18 ++ .../pick/domain/form/PickQueryForm.java | 9 + .../domain/form/PickDetailQueryForm.java | 6 +- .../pickDetail/service/PickDetailService.java | 6 + .../wms/shipping/service/ShippingService.java | 14 ++ .../service/impl/ShippingServiceImpl.java | 182 ++++++++++++++++++ .../business/wms/receive/asn/AsnMapper.xml | 2 +- .../wms/receive/asnDetail/AsnDetailMapper.xml | 58 ++---- .../business/wms/shipping/pick/PickMapper.xml | 15 ++ .../shipping/pickDetail/PickDetailMapper.xml | 14 ++ .../mapper/business/wms/task/TaskMapper.xml | 23 ++- 22 files changed, 412 insertions(+), 56 deletions(-) rename nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/{asn/domain => }/form/BatchReceiveForm.java (91%) rename nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/{asn/domain => }/form/BatchReturnForm.java (87%) create mode 100644 nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/controller/ShippingController.java create mode 100644 nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/form/AllocationForm.java create mode 100644 nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/form/BatchReturnForm.java create mode 100644 nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/service/ShippingService.java create mode 100644 nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/service/impl/ShippingServiceImpl.java diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/inventory/service/InventoryQueryService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/inventory/service/InventoryQueryService.java index e97065b..18cafb8 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/inventory/service/InventoryQueryService.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/inventory/service/InventoryQueryService.java @@ -5,6 +5,9 @@ import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.form. import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.vo.InventoryVO; import net.lab1024.sa.base.common.domain.PageResult; +import java.util.List; +import java.util.Map; + public interface InventoryQueryService { /** @@ -13,8 +16,15 @@ public interface InventoryQueryService { PageResult queryPage(InventoryQueryForm queryForm); /** - * @param ItemKeyId 物料 + * @param ItemKeyId 物料属性 * @return InventoryEntity */ InventoryEntity queryInventoryByItemKeyId(Long ItemKeyId); + + /** + * @param itemIds 物料 + * @return InventoryEntity + */ + List queryInventoryByItemIds(List itemIds); + } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/inventory/service/impl/InventoryQueryServiceImpl.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/inventory/service/impl/InventoryQueryServiceImpl.java index 67f8026..c35d3ec 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/inventory/service/impl/InventoryQueryServiceImpl.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/inventory/service/impl/InventoryQueryServiceImpl.java @@ -2,6 +2,7 @@ package net.lab1024.sa.admin.module.business.wms.inventory.inventory.service.imp import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.collect.Maps; import jakarta.annotation.Resource; import net.lab1024.sa.admin.module.business.wms.base.item.domain.entity.ItemEntity; import net.lab1024.sa.admin.module.business.wms.base.item.service.ItemQueryService; @@ -19,10 +20,13 @@ import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.entity. import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.service.ItemKeyQueryService; import net.lab1024.sa.base.common.domain.PageResult; import net.lab1024.sa.base.common.util.SmartPageUtil; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Objects; @Service public class InventoryQueryServiceImpl implements InventoryQueryService { @@ -90,7 +94,7 @@ public class InventoryQueryServiceImpl implements InventoryQueryService { } /** - * @param ItemKeyId 物料 + * @param ItemKeyId 物料属性 * @return InventoryEntity */ public InventoryEntity queryInventoryByItemKeyId(Long ItemKeyId) { @@ -98,4 +102,22 @@ public class InventoryQueryServiceImpl implements InventoryQueryService { queryWrapper.eq(InventoryEntity::getItemKeyId, ItemKeyId); return inventoryManager.getOne(queryWrapper); } + + /** + * @param itemIds 物料 + * @return List + */ + public List queryInventoryByItemIds(List itemIds) { + if (CollectionUtils.isEmpty(itemIds)) { + return Collections.emptyList(); + } + List itemKeys = itemKeyQueryService.queryItemKeys(itemIds); + if (CollectionUtils.isEmpty(itemKeys)) { + return Collections.emptyList(); + } + List itemKeyIds = itemKeys.stream().map(ItemKeyEntity::getItemKeyId).toList(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(InventoryEntity::getItemKeyId, itemKeyIds).apply("quantity - queued_quantity > 0");; + return inventoryManager.list(queryWrapper); + } } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/itemKey/service/ItemKeyQueryService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/itemKey/service/ItemKeyQueryService.java index 0d0079d..c1af7f2 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/itemKey/service/ItemKeyQueryService.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/itemKey/service/ItemKeyQueryService.java @@ -33,4 +33,13 @@ public interface ItemKeyQueryService { * @return ItemKeyEntity */ ItemKeyEntity queryItemKey(String orderNumber, Long itemId, String propC1); + + /** + * 根据物料ID查询物料属性信息 + * + * @param itemIds 物料 + * @return List + */ + List queryItemKeys(List itemIds); + } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/itemKey/service/impl/ItemKeyQueryServiceImpl.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/itemKey/service/impl/ItemKeyQueryServiceImpl.java index 0e9f8ba..4243bcb 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/itemKey/service/impl/ItemKeyQueryServiceImpl.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/inventory/itemKey/service/impl/ItemKeyQueryServiceImpl.java @@ -70,4 +70,14 @@ public class ItemKeyQueryServiceImpl implements ItemKeyQueryService { } return itemKeys.get(0); } + + public List queryItemKeys(List itemIds) { + if (CollectionUtils.isEmpty(itemIds)){ + return Collections.emptyList(); + } + itemIds = itemIds.stream().filter(Objects::nonNull).distinct().toList(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(ItemKeyEntity::getItemId, itemIds); + return itemKeyManager.list(queryWrapper); + } } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/controller/ReceiveController.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/controller/ReceiveController.java index 187d4a5..0f3161d 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/controller/ReceiveController.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/controller/ReceiveController.java @@ -4,9 +4,9 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; +import net.lab1024.sa.admin.module.business.wms.receive.form.BatchReceiveForm; +import net.lab1024.sa.admin.module.business.wms.receive.form.BatchReturnForm; import net.lab1024.sa.admin.module.business.wms.receive.service.ReceiveService; -import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReceiveForm; -import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReturnForm; import net.lab1024.sa.base.common.domain.ResponseDTO; import net.lab1024.sa.base.module.support.operatelog.annotation.OperateLog; import org.springframework.web.bind.annotation.PostMapping; diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/domain/form/BatchReceiveForm.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/form/BatchReceiveForm.java similarity index 91% rename from nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/domain/form/BatchReceiveForm.java rename to nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/form/BatchReceiveForm.java index 18b35a0..906d46a 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/domain/form/BatchReceiveForm.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/form/BatchReceiveForm.java @@ -1,8 +1,9 @@ -package net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form; +package net.lab1024.sa.admin.module.business.wms.receive.form; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; + import java.util.List; @Data diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/domain/form/BatchReturnForm.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/form/BatchReturnForm.java similarity index 87% rename from nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/domain/form/BatchReturnForm.java rename to nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/form/BatchReturnForm.java index 5dfc27e..c5ae85f 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/domain/form/BatchReturnForm.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/form/BatchReturnForm.java @@ -1,4 +1,4 @@ -package net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form; +package net.lab1024.sa.admin.module.business.wms.receive.form; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/service/ReceiveService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/service/ReceiveService.java index 04dd5bb..ffa4445 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/service/ReceiveService.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/service/ReceiveService.java @@ -1,7 +1,7 @@ package net.lab1024.sa.admin.module.business.wms.receive.service; -import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReceiveForm; -import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReturnForm; +import net.lab1024.sa.admin.module.business.wms.receive.form.BatchReceiveForm; +import net.lab1024.sa.admin.module.business.wms.receive.form.BatchReturnForm; import net.lab1024.sa.base.common.domain.ResponseDTO; public interface ReceiveService { diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/service/impl/ReceiveServiceImpl.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/service/impl/ReceiveServiceImpl.java index 86231bd..0b67f2f 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/service/impl/ReceiveServiceImpl.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/service/impl/ReceiveServiceImpl.java @@ -15,13 +15,13 @@ import net.lab1024.sa.admin.module.business.wms.inventory.inventory.service.Inve import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.entity.ItemKeyEntity; import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.service.ItemKeyService; import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.entity.AsnEntity; -import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReceiveForm; -import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReturnForm; import net.lab1024.sa.admin.module.business.wms.receive.asn.manager.AsnManager; import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.domain.entity.AsnDetailEntity; import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.manager.AsnDetailManager; import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.service.AsnDetailQueryService; import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.service.AsnDetailService; +import net.lab1024.sa.admin.module.business.wms.receive.form.BatchReceiveForm; +import net.lab1024.sa.admin.module.business.wms.receive.form.BatchReturnForm; import net.lab1024.sa.admin.module.business.wms.receive.service.ReceiveService; import net.lab1024.sa.admin.module.business.wms.task.constant.TaskStatusEnum; import net.lab1024.sa.admin.module.business.wms.task.constant.TaskTypeEnum; diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/controller/ShippingController.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/controller/ShippingController.java new file mode 100644 index 0000000..7d87872 --- /dev/null +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/controller/ShippingController.java @@ -0,0 +1,29 @@ +package net.lab1024.sa.admin.module.business.wms.shipping.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import net.lab1024.sa.admin.module.business.wms.shipping.form.AllocationForm; +import net.lab1024.sa.admin.module.business.wms.shipping.service.ShippingService; +import net.lab1024.sa.base.common.domain.ResponseDTO; +import net.lab1024.sa.base.module.support.operatelog.annotation.OperateLog; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@Tag(name = "发货") +public class ShippingController { + + @Resource + private ShippingService shippingService; + + @Operation(summary = "分配明细 @author 霍锦") + @PostMapping("/shipping/allocationPickDetail") + @SaCheckPermission("shipping:allocationPickDetail") + @OperateLog + public ResponseDTO allocationPickDetail(@RequestBody AllocationForm allocationForm) { + return shippingService.allocationPickDetail(allocationForm); + } +} diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/form/AllocationForm.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/form/AllocationForm.java new file mode 100644 index 0000000..ef0e1ad --- /dev/null +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/form/AllocationForm.java @@ -0,0 +1,20 @@ +package net.lab1024.sa.admin.module.business.wms.shipping.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +@Data +public class AllocationForm { + + @Schema(description = "出库单", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "出库单 不能为空") + private Long pickId; + + @Schema(description = "出库明细", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "出库明细 不能为空") + private List pickDetailIds; + +} diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/form/BatchReturnForm.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/form/BatchReturnForm.java new file mode 100644 index 0000000..d00f7e3 --- /dev/null +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/form/BatchReturnForm.java @@ -0,0 +1,18 @@ +package net.lab1024.sa.admin.module.business.wms.shipping.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +@Data +public class BatchReturnForm { + @Schema(description = "入库单", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "入库单 不能为空") + private Long asnId; + + @Schema(description = "收货明细", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "收货明细 不能为空") + private List taskIds; +} diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/pick/domain/form/PickQueryForm.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/pick/domain/form/PickQueryForm.java index 67f7330..fdade14 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/pick/domain/form/PickQueryForm.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/pick/domain/form/PickQueryForm.java @@ -1,5 +1,6 @@ package net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form; +import io.swagger.v3.oas.annotations.media.Schema; import net.lab1024.sa.base.common.domain.PageParam; import lombok.Data; import lombok.EqualsAndHashCode; @@ -15,5 +16,13 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = false) public class PickQueryForm extends PageParam { + @Schema(description = "客户订单号") + private String customerNumber; + + @Schema(description = "状态") + private String status; + + @Schema(description = "单据类型") + private String orderType; } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/pickDetail/domain/form/PickDetailQueryForm.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/pickDetail/domain/form/PickDetailQueryForm.java index c575841..0b63b3b 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/pickDetail/domain/form/PickDetailQueryForm.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/pickDetail/domain/form/PickDetailQueryForm.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import net.lab1024.sa.base.common.domain.PageParam; import lombok.Data; import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Length; /** * 出库明细 分页查询表单 @@ -20,6 +21,7 @@ public class PickDetailQueryForm extends PageParam { @Schema(description = "出库单") private Long pickId; - @Schema(description = "物料") - private Long itemId; + @Schema(description = "关键字") + @Length(max = 200, message = "关键字最多200字符") + private String keywords; } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/pickDetail/service/PickDetailService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/pickDetail/service/PickDetailService.java index 47e40d2..91ba693 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/pickDetail/service/PickDetailService.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/pickDetail/service/PickDetailService.java @@ -35,4 +35,10 @@ public interface PickDetailService { * 单个删除 */ ResponseDTO delete(Long pickDetailId); + + /** + * 刷新出库单 + * @param pickId 出库单ID + */ + void refreshPick(Long pickId); } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/service/ShippingService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/service/ShippingService.java new file mode 100644 index 0000000..43feb5e --- /dev/null +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/service/ShippingService.java @@ -0,0 +1,14 @@ +package net.lab1024.sa.admin.module.business.wms.shipping.service; + +import net.lab1024.sa.admin.module.business.wms.shipping.form.AllocationForm; +import net.lab1024.sa.base.common.domain.ResponseDTO; + +public interface ShippingService { + + /** + * 分配明细 + * @return String + */ + ResponseDTO allocationPickDetail(AllocationForm allocationForm); + +} diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/service/impl/ShippingServiceImpl.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/service/impl/ShippingServiceImpl.java new file mode 100644 index 0000000..1a9b6fd --- /dev/null +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/shipping/service/impl/ShippingServiceImpl.java @@ -0,0 +1,182 @@ +package net.lab1024.sa.admin.module.business.wms.shipping.service.impl; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.module.business.wms.base.item.domain.entity.ItemEntity; +import net.lab1024.sa.admin.module.business.wms.base.item.manager.ItemManager; +import net.lab1024.sa.admin.module.business.wms.base.item.service.ItemQueryService; +import net.lab1024.sa.admin.module.business.wms.base.location.domain.entity.LocationEntity; +import net.lab1024.sa.admin.module.business.wms.base.location.manager.LocationManager; +import net.lab1024.sa.admin.module.business.wms.base.stock.domain.entity.StockEntity; +import net.lab1024.sa.admin.module.business.wms.base.stock.manager.StockManager; +import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.entity.InventoryEntity; +import net.lab1024.sa.admin.module.business.wms.inventory.inventory.manager.InventoryManager; +import net.lab1024.sa.admin.module.business.wms.inventory.inventory.service.InventoryQueryService; +import net.lab1024.sa.admin.module.business.wms.shipping.form.AllocationForm; +import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.entity.PickEntity; +import net.lab1024.sa.admin.module.business.wms.shipping.pick.manager.PickManager; +import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.entity.PickDetailEntity; +import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.manager.PickDetailManager; +import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.service.PickDetailService; +import net.lab1024.sa.admin.module.business.wms.shipping.service.ShippingService; +import net.lab1024.sa.admin.module.business.wms.task.constant.TaskStatusEnum; +import net.lab1024.sa.admin.module.business.wms.task.constant.TaskTypeEnum; +import net.lab1024.sa.admin.module.business.wms.task.domain.entity.TaskEntity; +import net.lab1024.sa.admin.module.business.wms.task.manager.TaskManager; +import net.lab1024.sa.admin.module.business.wms.task.service.TaskService; +import net.lab1024.sa.admin.util.JoinerResult; +import net.lab1024.sa.admin.util.ResponseDTOUtil; +import net.lab1024.sa.base.common.domain.ResponseDTO; +import net.lab1024.sa.base.common.util.SmartBigDecimalUtil; +import net.lab1024.sa.base.module.support.datatracer.service.DataTracerService; +import net.lab1024.sa.base.module.support.serialnumber.constant.SerialNumberIdEnum; +import net.lab1024.sa.base.module.support.serialnumber.service.SerialNumberService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Service +@Slf4j +public class ShippingServiceImpl implements ShippingService { + + @Resource + private LocationManager locationManager; + + @Resource + private StockManager stockManager; + + @Resource + private PickManager pickManager; + + @Resource + private PickDetailManager pickDetailManager; + + @Resource + private TaskManager taskManager; + + @Resource + private InventoryManager inventoryManager; + + @Resource + private ItemQueryService itemQueryService; + + @Resource + private InventoryQueryService inventoryQueryService; + + @Resource + private PickDetailService pickDetailService; + + @Resource + private TaskService taskService; + + @Resource + private SerialNumberService serialNumberService; + + @Resource + private DataTracerService dataTracerService; + + + /** + * 分配明细 + * + * @param allocationForm 分配明细参数 + * @return resultMsg + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO allocationPickDetail(AllocationForm allocationForm) { + Long startTime = System.currentTimeMillis(); + + //消息提示 + JoinerResult resultMsg = JoinerResult.createJoiner(); + + //出库单 + PickEntity pick = pickManager.getById(allocationForm.getPickId()); + + //出库单明细 + List pickDetails = pickDetailManager.listByIds(allocationForm.getPickDetailIds()); + + //查询物料 + List itemIds = pickDetails.stream().map(PickDetailEntity::getItemId).toList(); + Map itemMap = itemQueryService.queryByItemIdsToMap(itemIds); + + //查询库存 + List inventoryList = inventoryQueryService.queryInventoryByItemIds(itemIds); + if (inventoryList.isEmpty()) { + List codes = itemMap.values().stream().map(ItemEntity::getItemCode).toList(); + resultMsg.getErrorMsg().add(codes + "物料库存不足,请先补充库存!"); + return ResponseDTOUtil.buildResponseDTO(resultMsg); + } + + List updateToInventory = new ArrayList<>(); + List updateToPickDetail = new ArrayList<>(); + List createToTask = new ArrayList<>(); + + for (PickDetailEntity pickDetail : pickDetails) { + //物料 + ItemEntity item = itemMap.get(pickDetail.getItemId()); + + BigDecimal unQty = SmartBigDecimalUtil.subtract(pickDetail.getOrderQuantity(), pickDetail.getAllocatedQuantity(), 2); + if (unQty.compareTo(BigDecimal.ZERO) == 0) { + resultMsg.getErrorMsg().add(item.getItemCode() + "物料已分配,请勿重复操作!"); + continue; + } + //分配数量 + BigDecimal allocateQty = BigDecimal.ZERO; + + //库存 + for (InventoryEntity inventory : inventoryList) { + //库存可用数量 + allocateQty = SmartBigDecimalUtil.subtract(inventory.getQuantity(), inventory.getQueuedQuantity(), 2); + if (allocateQty.compareTo(BigDecimal.ZERO) <= 0) { + continue; + } + if (unQty.compareTo(allocateQty) < 0) { + allocateQty = unQty; + } + //更新库存占用数量 + inventory.setQueuedQuantity(SmartBigDecimalUtil.add(inventory.getQueuedQuantity(), allocateQty, 2)); + updateToInventory.add(inventory); + //更新明细分配数量 + pickDetail.setAllocatedQuantity(SmartBigDecimalUtil.add(pickDetail.getAllocatedQuantity(), allocateQty, 2)); + updateToPickDetail.add(pickDetail); + //容器 + StockEntity stock = stockManager.queryStock(inventory.getStockId()); + //库位 + LocationEntity location = locationManager.queryLocation(inventory.getLocationId()); + //生成分配任务 + TaskEntity task = taskService.createTask(serialNumberService.generate(SerialNumberIdEnum.TASK), TaskStatusEnum.CREATED.getValue(), TaskTypeEnum.PICK.getValue(), pickDetail.getOrderQuantity(), inventory.getItemKeyId(), null, pickDetail.getPickDetailId(), stock, null, location, null, null, null); + createToTask.add(task); + unQty = SmartBigDecimalUtil.subtract(unQty, allocateQty, 2); + } + if (unQty.compareTo(BigDecimal.ZERO) > 0) { + resultMsg.getErrorMsg().add(item.getItemCode() + "物料库存不足,无法完成分配!"); + } else { + resultMsg.getSussMsg().add(item.getItemCode() + "物料分配成功"); + } + } + + //批量操作 + if (CollectionUtils.isNotEmpty(updateToInventory)) { + inventoryManager.updateBatchById(updateToInventory); + } + if (CollectionUtils.isNotEmpty(updateToPickDetail)) { + pickDetailManager.updateBatchById(updateToPickDetail); + } + + if (CollectionUtils.isNotEmpty(createToTask)) { + taskManager.saveBatch(createToTask); + } + + //刷新出库单 + pickDetailService.refreshPick(pick.getPickId()); + + Long endTime = System.currentTimeMillis(); + log.info("分配明细耗时:{}ms", endTime - startTime); + return ResponseDTOUtil.buildResponseDTO(resultMsg); + } +} diff --git a/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/receive/asn/AsnMapper.xml b/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/receive/asn/AsnMapper.xml index 7af2e2a..3742ba7 100644 --- a/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/receive/asn/AsnMapper.xml +++ b/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/receive/asn/AsnMapper.xml @@ -28,7 +28,7 @@ - AND INSTR(t_asn.customer_number,#{queryForm.customerNumber}) + AND t_asn.customer_number LIKE CONCAT(#{queryForm.customerNumber},'%') diff --git a/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/receive/asnDetail/AsnDetailMapper.xml b/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/receive/asnDetail/AsnDetailMapper.xml index 011ab69..f49cee4 100644 --- a/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/receive/asnDetail/AsnDetailMapper.xml +++ b/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/receive/asnDetail/AsnDetailMapper.xml @@ -15,47 +15,23 @@ diff --git a/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/shipping/pick/PickMapper.xml b/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/shipping/pick/PickMapper.xml index b6dcb6f..7168ee4 100644 --- a/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/shipping/pick/PickMapper.xml +++ b/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/shipping/pick/PickMapper.xml @@ -27,6 +27,21 @@ SELECT FROM t_pick + + + + AND t_pick.customer_number LIKE CONCAT(#{queryForm.customerNumber},'%') + + + + AND t_pick.order_type=#{queryForm.orderType} + + + + AND t_pick.status=#{queryForm.status} + + + ORDER BY t_pick.pick_id DESC diff --git a/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/shipping/pickDetail/PickDetailMapper.xml b/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/shipping/pickDetail/PickDetailMapper.xml index fc038df..9845abf 100644 --- a/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/shipping/pickDetail/PickDetailMapper.xml +++ b/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/shipping/pickDetail/PickDetailMapper.xml @@ -21,6 +21,20 @@ SELECT FROM t_pick_detail + + LEFT JOIN t_item ON t_pick_detail.item_id = t_item.item_id + + + + AND t_pick_detail.pick_id = #{queryForm.pickId} + + + AND ( + t_item.item_code LIKE CONCAT(#{queryForm.keywords}, '%') + OR t_item.item_name LIKE CONCAT(#{queryForm.keywords}, '%') + ) + + diff --git a/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/task/TaskMapper.xml b/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/task/TaskMapper.xml index 7da0111..d64bf1a 100644 --- a/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/task/TaskMapper.xml +++ b/nc_wms_java/sa-admin/src/main/resources/mapper/business/wms/task/TaskMapper.xml @@ -32,21 +32,40 @@ SELECT FROM t_task + + + LEFT JOIN t_asn_detail on t_asn_detail.asn_detail_id = t_task.asn_detail_id + LEFT JOIN t_item on t_item.item_id = t_asn_detail.item_id + + + + LEFT JOIN t_pick_detail on t_pick_detail.pick_detail_id = t_task.pick_detail_id + LEFT JOIN t_item on t_item.item_id = t_pick_detail.item_id + - AND t_task.asn_detail_id in (select asn_detail_id from t_asn_detail where asn_id = #{queryForm.asnId}) + AND t_asn_detail.asn_id= #{queryForm.asnId} - AND t_task.pick_detail_id in (select pick_detail_id from t_pick_detail where pick_id =#{queryForm.pickId}) + AND t_pick_detail.pick_id= #{queryForm.pickId} AND t_task.task_type = #{queryForm.taskType} + + + + AND (t_item.item_code LIKE CONCAT(#{queryForm.keywords}, '%') + OR t_item.item_name LIKE CONCAT(#{queryForm.keywords}, '%') + OR t_task.dst_location_code LIKE CONCAT(#{queryForm.keywords}, '%') + OR t_task.dst_stock_code LIKE CONCAT(#{queryForm.keywords}, '%') + ) +