From 251176c88dcd08455a4e22cbac5a9547ee50226e Mon Sep 17 00:00:00 2001 From: wuzongyong <13203449218@163.com> Date: Mon, 19 Jan 2026 15:44:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(material):=20=E6=B7=BB=E5=8A=A0=E7=89=A9?= =?UTF-8?q?=E6=96=99=E5=BF=AB=E6=8D=B7=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在MaterialInfomationController中新增/creat-quickly接口 - 实现createMaterialInfomationQuickly方法支持快捷创建 - 添加同一小类下相同编码和名称物料的重复校验逻辑 - 当存在重复物料时返回提示信息避免重复创建 - 创建成功时返回操作结果描述和物料ID信息 --- .../base/MaterialInfomationController.java | 12 +++++- .../base/MaterialInfomationService.java | 8 ++++ .../base/MaterialInfomationServiceImpl.java | 42 +++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/MaterialInfomationController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/MaterialInfomationController.java index 8b09ab67..056f05bb 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/MaterialInfomationController.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/MaterialInfomationController.java @@ -38,12 +38,20 @@ public class MaterialInfomationController { @Resource private MaterialInfomationService materialInfomationService; -/* @PostMapping("/create") + @PostMapping("/create") @Operation(summary = "创建物料信息") @PreAuthorize("@ss.hasPermission('base:material-infomation:create')") public CommonResult createMaterialInfomation(@Valid @RequestBody MaterialInfomationSaveReqVO createReqVO) { return success(materialInfomationService.createMaterialInfomation(createReqVO)); - }*/ + } + + @Operation(summary = "快捷添加实物物料") + @PostMapping("/creat-quickly") + @PreAuthorize("@ss.hasPermission('base:material-infomation:create')") + public CommonResult createMaterialInfomationQuickly(@Valid @RequestBody MaterialInfomationSaveReqVO createReqVO) { + String result = materialInfomationService.createMaterialInfomationQuickly(createReqVO); + return success(result); + } @PutMapping("/update") @Operation(summary = "更新物料信息") diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/MaterialInfomationService.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/MaterialInfomationService.java index 3cd4dea0..bc95ffd3 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/MaterialInfomationService.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/MaterialInfomationService.java @@ -27,6 +27,14 @@ public interface MaterialInfomationService { */ MaterialInfomationRespVO createMaterialInfomation(@Valid MaterialInfomationSaveReqVO createReqVO); + /** + * 快捷创建物料信息:仅在同一小类下不存在相同编码和名称的物料时才创建 + * + * @param createReqVO 创建信息 + * @return 操作结果描述 + */ + String createMaterialInfomationQuickly(@Valid MaterialInfomationSaveReqVO createReqVO); + /** * 更新物料信息 * diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/MaterialInfomationServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/MaterialInfomationServiceImpl.java index 0346ef5d..65b4e056 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/MaterialInfomationServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/MaterialInfomationServiceImpl.java @@ -76,6 +76,22 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService return CollUtil.getFirst(buildRespList(Collections.singletonList(materialInfomation))); } + @Override + @Transactional(rollbackFor = Exception.class) + public String createMaterialInfomationQuickly(MaterialInfomationSaveReqVO createReqVO) { + validateMaterialClassForBinding(createReqVO.getClassesId()); + // 校验同一小类下是否已存在相同编码和名称的物料,若存在则不再创建 + boolean exists = existsMaterialInClass(createReqVO.getCode(), createReqVO.getName(), createReqVO.getClassesId()); + if (exists) { + return "该小类下已存在相同编码和名称的物料,不再重复添加"; + } + MaterialInfomationRespVO respVO = createMaterialInfomation(createReqVO); + if (respVO == null || respVO.getId() == null) { + return "物料创建失败"; + } + return "物料创建成功,ID=" + respVO.getId(); + } + @Override @Transactional(rollbackFor = Exception.class) public void updateMaterialInfomation(MaterialInfomationSaveReqVO updateReqVO) { @@ -108,6 +124,32 @@ public class MaterialInfomationServiceImpl implements MaterialInfomationService materialHasClassesMapper.insert(relation); } + /** + * 判断在指定小类下,是否已存在相同编码和名称的物料 + */ + private boolean existsMaterialInClass(String code, String name, Long classesId) { + // 先根据编码和名称查出物料ID列表 + List infoList = materialInfomationMapper.selectList( + new LambdaQueryWrapperX() + .eq(MaterialInfomationDO::getCode, code) + .eq(MaterialInfomationDO::getName, name)); + if (CollUtil.isEmpty(infoList)) { + return false; + } + List infoIds = infoList.stream() + .map(MaterialInfomationDO::getId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + if (CollUtil.isEmpty(infoIds)) { + return false; + } + Long count = materialHasClassesMapper.selectCount( + new LambdaQueryWrapperX() + .in(MaterialHasClassesDO::getInfomationId, infoIds) + .eq(MaterialHasClassesDO::getClassesId, classesId)); + return count != null && count > 0; + } + @Override public void deleteMaterialInfomation(Long id) { validateMaterialInfomationExists(id);