From afa502eeafc817ef7c53db90ebe8801b903596f5 Mon Sep 17 00:00:00 2001 From: rcx <3084692334@qq.com> Date: Fri, 28 Aug 2026 09:14:03 +0800 Subject: [PATCH] =?UTF-8?q?feat(system):=E4=BB=93=E5=BA=93=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E5=BA=93=E4=BD=8D=E7=AE=A1=E7=90=86=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=A4=8D=E5=88=B6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需求:库位管理列表增加复制功能,快速复用已有库位配置新建库位。 实现(仿照bms复制账单copyBill的回显式复制): 一、新增接口 POST /storageLocationApi/copyStorageLocation(StorageLocationApi): id判空+try-catch兜底,异常返回"复制库单失败:xxx" 二、StorageLocationApplicationService新增copyStorageLocation: 取原库位PO后清空唯一性字段(storageLocationId不清空会误走修改分支覆盖原库位、 storageLocationCode同组织同仓库唯一须用户重填、locationBarCode物理唯一)、 清空审计字段(提交时Assembler按登录人重写)、状态重置初始值 (status=1空/openingUp=1启用/nullify=1未作废);其余业务字段保留回显 三、前端拿PO回显到新增页,用户改编码后走现有edit接口(id为空即新增)提交, 天然复用编码唯一性校验、仓库/库区/库位组回填、库位组计数+1,Domain层零改动 --- .../StorageLocationApplicationService.java | 34 +++++++++++++++++++ .../storageLocation/StorageLocationApi.java | 19 +++++++++++ 2 files changed, 53 insertions(+) diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java index 566c37e41..7bd6df9fa 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON; import com.mhd.basic.domain.storageLocation.repository.po.StorageLocationPO; import com.mhd.basic.domain.storageLocation.repository.todo.StorageLocationDO; import com.mhd.basic.domain.storageLocation.service.StorageLocationDomainService; +import com.mhd.basic.interfaces.dto.storageLocation.StorageLocationDTO; import com.mhd.basic.domain.storageSection.repository.todo.StorageSectionDO; import com.mhd.basic.infrastructure.feign.vo.SysDictDataVo; import com.mhd.common.core.domain.po.UserPo; @@ -207,6 +208,39 @@ public class StorageLocationApplicationService { return storageLocationDomainService.getInfo(storageLocationId); } + /** + * 复制库位-获取原库位数据供前端回显 + * 前端拿到数据后跳转到新增库位页面,用户修改编码后通过edit接口提交新增 + */ + public StorageLocationPO copyStorageLocation(StorageLocationDTO storageLocationDTO) { + if (storageLocationDTO.getStorageLocationId() == null) { + throw new ServiceException("原库位id不能为空"); + } + // 获取原库位信息 + StorageLocationPO originalStorageLocation = storageLocationDomainService.getInfo(storageLocationDTO.getStorageLocationId()); + if (null == originalStorageLocation) { + throw new ServiceException("原库位信息未找到"); + } + // 清空唯一性字段:库位id不清空会导致提交后走修改分支覆盖原库位; + // 库位编码同组织同仓库唯一,须由用户重新填写;条码为物理唯一标识,一并清空 + originalStorageLocation.setStorageLocationId(null); + originalStorageLocation.setStorageLocationCode(null); + originalStorageLocation.setLocationBarCode(null); + // 状态重置为初始值:新库位无库存(空)、启用、未作废 + originalStorageLocation.setStatus(1); + originalStorageLocation.setOpeningUp(1); + originalStorageLocation.setNullify(1); + // 清空审计字段,提交新增时由Assembler按当前登录人重新生成 + originalStorageLocation.setCreateBy(null); + originalStorageLocation.setCreateByName(null); + originalStorageLocation.setCreateTime(null); + originalStorageLocation.setUpdateBy(null); + originalStorageLocation.setUpdateByName(null); + originalStorageLocation.setUpdateTime(null); + // 其余业务字段(仓库/库区/库位组、分类/种类/混放策略、限制、长宽高、坐标、备注)保留回显 + return originalStorageLocation; + } + public int getStorageLocationCount(StorageLocationDO storageLocationDO) { return storageLocationDomainService.getStorageLocationCount(storageLocationDO); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facadeApi/storageLocation/StorageLocationApi.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facadeApi/storageLocation/StorageLocationApi.java index 6f071de45..2c211ae5d 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facadeApi/storageLocation/StorageLocationApi.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facadeApi/storageLocation/StorageLocationApi.java @@ -19,6 +19,7 @@ import com.mhd.basic.domain.storageLocation.repository.todo.StorageLocationDO; import com.mhd.basic.domain.storageLocation.repository.po.StorageLocationPO; import com.mhd.basic.application.service.storageLocation.StorageLocationApplicationService; import com.mhd.basic.interfaces.assember.storageLocation.StorageLocationAssembler; +import com.mhd.common.core.exception.ServiceException; import javax.annotation.Resource; import com.mhd.common.core.web.controller.BaseController; import com.mhd.common.core.web.domain.AjaxResult; @@ -127,6 +128,24 @@ public class StorageLocationApi extends BaseController{ { return AjaxResult.success(storageLocationApplicationService.getInfo(storageLocationId)); } + + /** + * 复制库位-获取原库位数据用于回显 + */ + @ApiOperation("复制库位-获取原库位数据用于回显") + @PostMapping("/copyStorageLocation") + public AjaxResult copyStorageLocation(@RequestBody StorageLocationDTO storageLocationDTO) + { + if(storageLocationDTO.getStorageLocationId() == null){ + throw new ServiceException("原库位id不能为空"); + } + try { + StorageLocationPO result = storageLocationApplicationService.copyStorageLocation(storageLocationDTO); + return AjaxResult.success(result); + }catch (Exception e){ + return AjaxResult.error("复制库位失败:"+e.getMessage()); + } + } @ApiOperation("获取库位总数") @PostMapping(value = "/getStorageLocationCount") public AjaxResult getStorageLocationCount(@RequestBody StorageLocationDTO storageLocationDTO)