From 104d17606aca053c4c3028abe551d595edc0ea12 Mon Sep 17 00:00:00 2001 From: "HUOJIN\\92525" Date: Tue, 8 Apr 2025 17:59:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E9=80=80=E8=B4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sa/admin/constant/AdminCacheConst.java | 4 + .../wms/itemKey/manager/ItemKeyManager.java | 22 +++ .../itemKey/service/ItemKeyQueryService.java | 30 ++++ .../wms/receive/ReceiveController.java | 15 +- .../business/wms/receive/ReceiveService.java | 148 +++++++++++++++--- .../receive/asn/controller/AsnController.java | 5 +- .../asn/domain/form/BatchReceiveForm.java | 28 ++++ .../asn/domain/form/BatchReturnForm.java | 18 +++ .../wms/receive/asn/service/AsnService.java | 5 + .../service/AsnDetailQueryService.java | 21 ++- .../business/wms/task/domain/vo/TaskVO.java | 30 ++-- .../wms/task/service/TaskQueryService.java | 46 ++++++ .../mapper/business/wms/task/TaskMapper.xml | 7 +- .../constant/DataTracerTypeEnum.java | 2 + 14 files changed, 327 insertions(+), 54 deletions(-) create mode 100644 nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/domain/form/BatchReceiveForm.java create mode 100644 nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/domain/form/BatchReturnForm.java diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java index 70a9aed..aeade9c 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/constant/AdminCacheConst.java @@ -66,4 +66,8 @@ public class AdminCacheConst extends CacheKeyConst { public static final String CUSTOMER_ENTITY = "customer_cache"; } + public static class itemKey { + public static final String ITEM_KEY_ENTITY = "item_key_cache"; + } + } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/itemKey/manager/ItemKeyManager.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/itemKey/manager/ItemKeyManager.java index ee933ef..88342bb 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/itemKey/manager/ItemKeyManager.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/itemKey/manager/ItemKeyManager.java @@ -1,11 +1,18 @@ package net.lab1024.sa.admin.module.business.wms.itemKey.manager; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.constant.AdminCacheConst; +import net.lab1024.sa.admin.module.business.wms.base.location.dao.LocationDao; +import net.lab1024.sa.admin.module.business.wms.base.location.domain.entity.LocationEntity; import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEntity; import net.lab1024.sa.admin.module.business.wms.itemKey.dao.ItemKeyDao; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import net.lab1024.sa.admin.module.business.wms.itemKey.dao.ItemKeyDao; import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEntity; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; /** @@ -16,7 +23,22 @@ import org.springframework.stereotype.Service; * @Copyright 友仓 */ @Service +@Slf4j public class ItemKeyManager extends ServiceImpl { + @Resource + private ItemKeyDao itemKeyDao; + /** + * 根据类目id 移除缓存 + */ + @CacheEvict(value = {AdminCacheConst.itemKey.ITEM_KEY_ENTITY}, allEntries = true) + public void removeCache() { + log.info("clear ITEM_KEY_ENTITY"); + } + + @Cacheable(AdminCacheConst.itemKey.ITEM_KEY_ENTITY) + public ItemKeyEntity queryItemKey(Long itemKeyId) { + return itemKeyDao.selectById(itemKeyId); + } } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/itemKey/service/ItemKeyQueryService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/itemKey/service/ItemKeyQueryService.java index e69c54a..5facba2 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/itemKey/service/ItemKeyQueryService.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/itemKey/service/ItemKeyQueryService.java @@ -2,7 +2,9 @@ package net.lab1024.sa.admin.module.business.wms.itemKey.service; 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.location.domain.entity.LocationEntity; import net.lab1024.sa.admin.module.business.wms.itemKey.dao.ItemKeyDao; import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEntity; import net.lab1024.sa.admin.module.business.wms.itemKey.domain.form.ItemKeyQueryForm; @@ -11,12 +13,16 @@ import net.lab1024.sa.admin.module.business.wms.itemKey.dao.ItemKeyDao; import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEntity; import net.lab1024.sa.admin.module.business.wms.itemKey.domain.form.ItemKeyQueryForm; import net.lab1024.sa.admin.module.business.wms.itemKey.domain.vo.ItemKeyVO; +import net.lab1024.sa.admin.module.business.wms.itemKey.manager.ItemKeyManager; 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.stream.Collectors; @Service public class ItemKeyQueryService { @@ -24,6 +30,9 @@ public class ItemKeyQueryService { @Resource private ItemKeyDao itemKeyDao; + @Resource + private ItemKeyManager itemKeyManager; + /** * 分页查询 */ @@ -33,6 +42,27 @@ public class ItemKeyQueryService { return SmartPageUtil.convert2PageResult(page, list); } + /** + * 根据物料属性ID集合查询物料属性信息 + * + * @param itemKeyIdList 物料属性ID集合 + * @return Map + */ + public Map queryItemKeyList(List itemKeyIdList) { + if (CollectionUtils.isEmpty(itemKeyIdList)) { + return Collections.emptyMap(); + } + itemKeyIdList = itemKeyIdList.stream().distinct().collect(Collectors.toList()); + Map itemKeyMap = Maps.newHashMap(); + for (Long itemKeyId : itemKeyIdList) { + ItemKeyEntity itemKey = itemKeyManager.queryItemKey(itemKeyId); + if (itemKey != null) { + itemKeyMap.put(itemKeyId, itemKey); + } + } + return itemKeyMap; + } + public ItemKeyEntity queryItemKey(String orderNumber, Long itemId, String propC1) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ItemKeyEntity::getOrderNumber, orderNumber); diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/ReceiveController.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/ReceiveController.java index b8f96dc..98d2ada 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/ReceiveController.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/ReceiveController.java @@ -4,14 +4,18 @@ 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.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.common.domain.ValidateList; +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 = "收货") +@OperateLog public class ReceiveController { @Resource @@ -20,7 +24,14 @@ public class ReceiveController { @Operation(summary = "批量收货 @author 霍锦") @PostMapping("/receive/batchReceive") @SaCheckPermission("receive:batchReceive") - public ResponseDTO batchReceive(@RequestBody ValidateList idList) { - return receiveService.batchReceive(idList); + public ResponseDTO batchReceive(@RequestBody BatchReceiveForm batchReceiveForm) { + return receiveService.batchReceive(batchReceiveForm); + } + + @Operation(summary = "批量退货 @author 霍锦") + @PostMapping("/receive/batchReturn") + @SaCheckPermission("receive:batchReturn") + public ResponseDTO batchReturn(@RequestBody BatchReturnForm batchReturnForm) { + return receiveService.batchReturn(batchReturnForm); } } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/ReceiveService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/ReceiveService.java index c1759f3..2a798ab 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/ReceiveService.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/ReceiveService.java @@ -18,7 +18,10 @@ import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEnt import net.lab1024.sa.admin.module.business.wms.itemKey.manager.ItemKeyManager; import net.lab1024.sa.admin.module.business.wms.itemKey.service.ItemKeyQueryService; import net.lab1024.sa.admin.module.business.wms.itemKey.service.ItemKeyService; +import net.lab1024.sa.admin.module.business.wms.receive.asn.dao.AsnDao; 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.service.AsnQueryService; import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.domain.entity.AsnDetailEntity; import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.domain.vo.AsnDetailVO; @@ -29,6 +32,7 @@ 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.TaskQueryService; import net.lab1024.sa.admin.module.business.wms.task.service.TaskService; import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEntity; import net.lab1024.sa.admin.module.business.wms.receive.asn.service.AsnQueryService; @@ -46,9 +50,12 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; @Service public class ReceiveService { + @Resource + private AsnDao asnDao; @Resource private AsnDetailManager asnDetailManager; @@ -69,10 +76,10 @@ public class ReceiveService { private ItemQueryService itemQueryService; @Resource - private AsnQueryService asnQueryService; + private AsnDetailQueryService asnDetailQueryService; @Resource - private AsnDetailQueryService asnDetailQueryService; + private TaskQueryService taskQueryService; @Resource private InventoryQueryService inventoryQueryService; @@ -96,25 +103,15 @@ public class ReceiveService { /** * 批量收货 * - * @param idList 入库明细id集合 + * @param batchReceiveForm 批量收货参数 * @return ResponseDTO */ @Transactional(rollbackFor = Exception.class) - public ResponseDTO batchReceive(List idList) { - if (CollectionUtils.isEmpty(idList)) { - return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg()); - } - List asnDetails = asnDetailQueryService.queryAsnDetailList(idList); + public ResponseDTO batchReceive(BatchReceiveForm batchReceiveForm) { + List asnDetails = asnDetailQueryService.queryAsnDetailList(batchReceiveForm.getAsnDetailIds()); if (CollectionUtils.isEmpty(asnDetails)) { return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg()); } - - return batchReceive(asnDetails, null, null); - - } - - @Transactional(rollbackFor = Exception.class) - public synchronized ResponseDTO batchReceive(List asnDetails, String stockCode, String locationCode) { //消息提示 JoinerResult joiner = JoinerResult.createJoiner(); @@ -122,28 +119,24 @@ public class ReceiveService { List itemIds = asnDetails.stream().map(AsnDetailEntity::getItemId).distinct().toList(); Map itemMap = itemQueryService.queryItemList(itemIds); - //查询入库单 - List asnIds = asnDetails.stream().map(AsnDetailEntity::getAsnId).distinct().toList(); - Map asnMap = asnQueryService.queryAsnListToMap(asnIds); - List updateToAsnDetail = new ArrayList<>(); List insertToTask = new ArrayList<>(); List insertToInventory = new ArrayList<>(); List updateToInventory = new ArrayList<>(); //库位 - LocationEntity dstLocation = locationQueryService.queryByLocationCode(locationCode); + LocationEntity dstLocation = locationQueryService.queryByLocationCode(batchReceiveForm.getLocationCode()); //容器 - StockEntity dstStock = stockQueryService.queryByStockCode(stockCode); + StockEntity dstStock = stockQueryService.queryByStockCode(batchReceiveForm.getStockCode()); + + //入库单 + AsnEntity asn = asnDao.selectById(batchReceiveForm.getAsnId()); for (AsnDetailEntity asnDetail : asnDetails) { //物料 ItemEntity item = itemMap.get(asnDetail.getItemId()); - //入库单 - AsnEntity asn = asnMap.get(asnDetail.getAsnId()); - if (SmartBigDecimalUtil.subtract(asnDetail.getOrderQuantity(), asnDetail.getReceivedQuantity(), 2).compareTo(BigDecimal.ZERO) == 0) { joiner.getErrorMsg().add(item.getItemCode() + "明细已收货"); continue; @@ -163,9 +156,15 @@ public class ReceiveService { //生成入库记录 TaskEntity task = taskService.createTask(serialNumberService.generate(SerialNumberIdEnum.TASK), TaskStatusEnum.CREATED.getValue(), TaskTypeEnum.ASN.getValue(), asnDetail.getOrderQuantity(), itemKey.getItemKeyId(), asnDetail.getAsnDetailId(), null, null, dstStock, null, dstLocation, null, null); + task.setMoveQty(task.getPlanQty()); + if (SmartBigDecimalUtil.subtract(task.getPlanQty(), task.getMoveQty(), 2).compareTo(BigDecimal.ZERO) == 0) { + task.setStatus(TaskStatusEnum.COMPLETED.getValue()); + } else { + task.setStatus(TaskStatusEnum.IN_PROGRESS.getValue()); + } insertToTask.add(task); - //生成库存 + //生成库存记录 InventoryEntity inventory = inventoryQueryService.queryInventory(itemKey.getItemKeyId()); if (inventory == null) { inventory = inventoryService.createInventory(itemKey.getItemKeyId(), dstLocation == null ? null : dstLocation.getLocationId(), dstStock == null ? null : dstStock.getStockId(), asnDetail.getOrderQuantity()); @@ -176,6 +175,8 @@ public class ReceiveService { updateToInventory.add(inventory); } + //生成库存日志 + joiner.getSussMsg().add(item.getItemCode() + "收货成功"); } @@ -183,7 +184,7 @@ public class ReceiveService { batchUpdateOrInsert(updateToAsnDetail, insertToTask, insertToInventory, updateToInventory); //刷新入库单 - asnIds.forEach(asnDetailService::refreshAsn); + asnDetailService.refreshAsn(batchReceiveForm.getAsnId()); return ResponseDTOUtils.buildResponseDTO(joiner); } @@ -219,5 +220,100 @@ public class ReceiveService { } + /** + * 批量退货 + * + * @param batchReturnForm 批量退货参数 + * @return ResponseDTO + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO batchReturn(BatchReturnForm batchReturnForm) { + List tasks = taskQueryService.queryByTaskIds(batchReturnForm.getTaskIds()); + if (CollectionUtils.isEmpty(tasks)) { + return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg()); + } + + //消息提示 + JoinerResult joiner = JoinerResult.createJoiner(); + + //查询Task任务关联的所以入库明细 + List asnDetailIds = tasks.stream().map(TaskEntity::getAsnDetailId).collect(Collectors.toList()); + Map asnDetailMap = asnDetailQueryService.queryAsnDetailListToMap(asnDetailIds); + + //查询物料 + List itemIds = asnDetailMap.values().stream().map(AsnDetailEntity::getItemId).distinct().toList(); + Map itemMap = itemQueryService.queryItemList(itemIds); + + List updateToAsnDetail = new ArrayList<>(); + List deleteToTask = new ArrayList<>(); + List updateToInventory = new ArrayList<>(); + List deleteToInventory = new ArrayList<>(); + + for (TaskEntity task : tasks) { + //物料 + ItemEntity item = itemMap.get(asnDetailMap.get(task.getAsnDetailId()).getItemId()); + + //入库明细 + AsnDetailEntity asnDetail = asnDetailMap.get(task.getAsnDetailId()); + asnDetail.setReceivedQuantity(BigDecimal.ZERO); + updateToAsnDetail.add(asnDetail); + + //删除task + deleteToTask.add(task); + + //库存数退回 + InventoryEntity inventory = inventoryQueryService.queryInventory(task.getItemKeyId()); + if (inventory != null) { + inventory.setQuantity(SmartBigDecimalUtil.subtract(inventory.getQuantity(), task.getPlanQty(), 2)); + if (inventory.getQuantity().compareTo(BigDecimal.ZERO) == 0) { + deleteToInventory.add(inventory); + } else { + updateToInventory.add(inventory); + } + } + //生成库存日志 + + joiner.getSussMsg().add(item.getItemCode() + "退货成功"); + } + //批量操作 + returnUpdateOrInsert(updateToAsnDetail, deleteToTask, updateToInventory, deleteToInventory); + + //刷新入库单 + asnDetailService.refreshAsn(batchReturnForm.getAsnId()); + + return ResponseDTOUtils.buildResponseDTO(joiner); + } + + /** + * 批量更新或新增 + * + * @param updateToAsnDetail 更新入库明细 + * @param deleteToTask 删除task + * @param updateToInventory 更新库存 + * @param deleteToInventory 删除库存 + */ + private void returnUpdateOrInsert(List updateToAsnDetail, List deleteToTask, List updateToInventory, List deleteToInventory) { + //批量更新入库明细 + if (CollectionUtils.isNotEmpty(updateToAsnDetail)) { + asnDetailManager.updateBatchById(updateToAsnDetail); + } + + //批量删除入库记录 + if (CollectionUtils.isNotEmpty(deleteToTask)) { + taskManager.removeBatchByIds(deleteToTask); + } + + //批量更新库存 + if (CollectionUtils.isNotEmpty(updateToInventory)) { + inventoryManager.updateBatchById(updateToInventory); + } + + //批量删除库存 + if (CollectionUtils.isNotEmpty(deleteToInventory)) { + inventoryManager.removeBatchByIds(deleteToInventory); + } + + } + } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/controller/AsnController.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/controller/AsnController.java index 4818b9b..fa782e2 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/controller/AsnController.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/controller/AsnController.java @@ -12,6 +12,7 @@ import net.lab1024.sa.admin.module.business.wms.receive.asn.service.AsnQueryServ import net.lab1024.sa.base.common.domain.RequestUser; import net.lab1024.sa.base.common.domain.ValidateList; import net.lab1024.sa.base.common.util.SmartRequestUtil; +import net.lab1024.sa.base.module.support.operatelog.annotation.OperateLog; import net.lab1024.sa.base.module.support.serialnumber.constant.SerialNumberIdEnum; import net.lab1024.sa.base.module.support.serialnumber.service.SerialNumberService; import org.springframework.web.bind.annotation.*; @@ -33,6 +34,7 @@ import jakarta.validation.Valid; @RestController @Tag(name = "入库单") +@OperateLog public class AsnController { @Resource @@ -41,9 +43,6 @@ public class AsnController { @Resource private AsnQueryService asnQueryService; - - - @Operation(summary = "分页查询 @author 霍锦") @PostMapping("/asn/queryPage") @SaCheckPermission("asn:query") public ResponseDTO> queryPage(@RequestBody @Valid AsnQueryForm queryForm) { 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/asn/domain/form/BatchReceiveForm.java new file mode 100644 index 0000000..18b35a0 --- /dev/null +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/domain/form/BatchReceiveForm.java @@ -0,0 +1,28 @@ +package net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import java.util.List; + +@Data +public class BatchReceiveForm { + + @Schema(description = "入库单", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "入库单 不能为空") + private Long asnId; + + @Schema(description = "入库明细", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "入库明细 不能为空") + private List asnDetailIds; + + @Schema(description = "容器", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "容器 不能为空") + private String stockCode; + + @Schema(description = "库位", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "库位 不能为空") + private String locationCode; + + +} 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/asn/domain/form/BatchReturnForm.java new file mode 100644 index 0000000..5dfc27e --- /dev/null +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/domain/form/BatchReturnForm.java @@ -0,0 +1,18 @@ +package net.lab1024.sa.admin.module.business.wms.receive.asn.domain.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/receive/asn/service/AsnService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/service/AsnService.java index b1a4788..ffd9086 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/service/AsnService.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asn/service/AsnService.java @@ -30,6 +30,8 @@ import net.lab1024.sa.base.common.util.SmartPageUtil; import net.lab1024.sa.base.common.domain.ResponseDTO; import net.lab1024.sa.base.common.domain.PageResult; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.base.module.support.datatracer.constant.DataTracerTypeEnum; +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; @@ -67,6 +69,9 @@ public class AsnService { @Resource private SerialNumberService serialNumberService; + @Resource + private DataTracerService dataTracerService; + /** * 添加 * diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asnDetail/service/AsnDetailQueryService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asnDetail/service/AsnDetailQueryService.java index 63b4247..e549ada 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asnDetail/service/AsnDetailQueryService.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/receive/asnDetail/service/AsnDetailQueryService.java @@ -22,6 +22,7 @@ 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.stream.Collectors; @@ -101,8 +102,22 @@ public class AsnDetailQueryService { if (CollectionUtils.isEmpty(idList)) { return null; } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(AsnDetailEntity::getAsnDetailId, idList); - return asnDetailDao.selectList(queryWrapper); + return asnDetailDao.selectBatchIds(idList); + } + + /** + * 根据明细集合查询明细信息 + * + * @param idList 明细集合 + * @return Map + */ + public Map queryAsnDetailListToMap(List idList) { + if (CollectionUtils.isEmpty(idList)) { + return Collections.emptyMap(); + } + List asnDetails = queryAsnDetailList(idList); + return asnDetails.stream() + .collect(Collectors.toMap(AsnDetailEntity::getAsnDetailId, asnDetail -> asnDetail, (existing, replacement) -> existing)); + } } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/task/domain/vo/TaskVO.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/task/domain/vo/TaskVO.java index 80de5cb..5bc971a 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/task/domain/vo/TaskVO.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/task/domain/vo/TaskVO.java @@ -38,6 +38,12 @@ public class TaskVO { @Schema(description = "物料序号") private Long itemKeyId; + @Schema(description = "物料编码") + private String itemCode; + + @Schema(description = "物料名称") + private String itemName; + @Schema(description = "收货明细序号") private Long asnDetailId; @@ -53,21 +59,21 @@ public class TaskVO { @Schema(description = "目标容器") private Long dstStockId; + @Schema(description = "目标容器编码") + private String dstStockCode; + @Schema(description = "原点位") private Long srcLocationId; + @Schema(description = "原库位编码") + private String srcLocationCode; + @Schema(description = "目标点位") private Long dstLocationId; @Schema(description = "目标库位编码") private String dstLocationCode; - @Schema(description = "原库位编码") - private String srcLocationCode; - - @Schema(description = "目标容器编码") - private String dstStockCode; - @Schema(description = "库存ID") private Long inventoryId; @@ -80,16 +86,4 @@ public class TaskVO { @Schema(description = "创建时间") private LocalDateTime createTime; - @Schema(description = "完成时间") - private LocalDateTime endTime; - - @Schema(description = "创建人ID") - private Long createUserId; - - @Schema(description = "创建人") - private String createUserName; - - @Schema(description = "更新时间") - private LocalDateTime updateTime; - } diff --git a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/task/service/TaskQueryService.java b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/task/service/TaskQueryService.java index b3636b0..742006d 100644 --- a/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/task/service/TaskQueryService.java +++ b/nc_wms_java/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/wms/task/service/TaskQueryService.java @@ -2,7 +2,16 @@ package net.lab1024.sa.admin.module.business.wms.task.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.annotation.Resource; +import net.lab1024.sa.admin.module.business.wms.base.area.domain.entity.AreaEntity; +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; +import net.lab1024.sa.admin.module.business.wms.base.location.domain.entity.LocationEntity; +import net.lab1024.sa.admin.module.business.wms.base.stock.domain.vo.StockVO; +import net.lab1024.sa.admin.module.business.wms.itemKey.domain.entity.ItemKeyEntity; +import net.lab1024.sa.admin.module.business.wms.itemKey.manager.ItemKeyManager; +import net.lab1024.sa.admin.module.business.wms.itemKey.service.ItemKeyQueryService; import net.lab1024.sa.admin.module.business.wms.task.dao.TaskDao; +import net.lab1024.sa.admin.module.business.wms.task.domain.entity.TaskEntity; import net.lab1024.sa.admin.module.business.wms.task.domain.form.TaskQueryForm; import net.lab1024.sa.admin.module.business.wms.task.domain.vo.TaskVO; import net.lab1024.sa.base.common.domain.PageResult; @@ -10,6 +19,8 @@ import net.lab1024.sa.base.common.util.SmartPageUtil; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Service public class TaskQueryService { @@ -17,14 +28,49 @@ public class TaskQueryService { @Resource private TaskDao taskDao; + @Resource + private ItemQueryService itemQueryService; + + @Resource + private ItemKeyQueryService itemKeyQueryService; + /** * 分页查询 */ public PageResult queryPage(TaskQueryForm queryForm) { Page page = SmartPageUtil.convert2PageQuery(queryForm); List list = taskDao.queryPage(page, queryForm); + + // 查询物料属性 + List itemKeyIds = list.stream().map(TaskVO::getItemKeyId).distinct().collect(Collectors.toList()); + Map itemKeyMap = itemKeyQueryService.queryItemKeyList(itemKeyIds); + + //查询物料 + List itemIds = itemKeyMap.values().stream().map(ItemKeyEntity::getItemId).distinct().toList(); + Map itemMap = itemQueryService.queryItemList(itemIds); + + list.forEach(TaskVO -> { + ItemKeyEntity itemKey = itemKeyMap.get(TaskVO.getItemKeyId()); + if (itemKey != null) { + ItemEntity item = itemMap.get(itemKey.getItemId()); + if (item != null) { + TaskVO.setItemCode(item.getItemCode()); + TaskVO.setItemName(item.getItemName()); + } + } + }); + return SmartPageUtil.convert2PageResult(page, list); } + /** + * 根据任务ID集合查询 + * @param taskIds 任务ID集合 + * @return List + */ + public List queryByTaskIds(List taskIds) { + return taskDao.selectBatchIds(taskIds); + } + } 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 d799111..688d82d 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 @@ -4,7 +4,10 @@ - t_task.task_id, + t_task + . + task_id + , t_task.bill_code, t_task.status, t_task.task_type, @@ -39,7 +42,7 @@ - AND t_task.asn_detail_id=#{queryForm.asnId} + AND t_task.asn_detail_id in (select asn_detail_id from t_asn_detail where asn_id = #{queryForm.asnId}) diff --git a/nc_wms_java/sa-base/src/main/java/net/lab1024/sa/base/module/support/datatracer/constant/DataTracerTypeEnum.java b/nc_wms_java/sa-base/src/main/java/net/lab1024/sa/base/module/support/datatracer/constant/DataTracerTypeEnum.java index b105b69..b1dfee9 100644 --- a/nc_wms_java/sa-base/src/main/java/net/lab1024/sa/base/module/support/datatracer/constant/DataTracerTypeEnum.java +++ b/nc_wms_java/sa-base/src/main/java/net/lab1024/sa/base/module/support/datatracer/constant/DataTracerTypeEnum.java @@ -35,6 +35,8 @@ public enum DataTracerTypeEnum implements BaseEnum { ; + + private final Integer value; private final String desc;