feat(material): 添加物料快捷添加功能

- 在MaterialInfomationController中新增/creat-quickly接口
- 实现createMaterialInfomationQuickly方法支持快捷创建
- 添加同一小类下相同编码和名称物料的重复校验逻辑
- 当存在重复物料时返回提示信息避免重复创建
- 创建成功时返回操作结果描述和物料ID信息
This commit is contained in:
wuzongyong
2026-01-19 15:44:47 +08:00
parent bcf01d452d
commit 251176c88d
3 changed files with 60 additions and 2 deletions

View File

@@ -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<MaterialInfomationRespVO> createMaterialInfomation(@Valid @RequestBody MaterialInfomationSaveReqVO createReqVO) {
return success(materialInfomationService.createMaterialInfomation(createReqVO));
}*/
}
@Operation(summary = "快捷添加实物物料")
@PostMapping("/creat-quickly")
@PreAuthorize("@ss.hasPermission('base:material-infomation:create')")
public CommonResult<String> createMaterialInfomationQuickly(@Valid @RequestBody MaterialInfomationSaveReqVO createReqVO) {
String result = materialInfomationService.createMaterialInfomationQuickly(createReqVO);
return success(result);
}
@PutMapping("/update")
@Operation(summary = "更新物料信息")

View File

@@ -27,6 +27,14 @@ public interface MaterialInfomationService {
*/
MaterialInfomationRespVO createMaterialInfomation(@Valid MaterialInfomationSaveReqVO createReqVO);
/**
* 快捷创建物料信息:仅在同一小类下不存在相同编码和名称的物料时才创建
*
* @param createReqVO 创建信息
* @return 操作结果描述
*/
String createMaterialInfomationQuickly(@Valid MaterialInfomationSaveReqVO createReqVO);
/**
* 更新物料信息
*

View File

@@ -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<MaterialInfomationDO> infoList = materialInfomationMapper.selectList(
new LambdaQueryWrapperX<MaterialInfomationDO>()
.eq(MaterialInfomationDO::getCode, code)
.eq(MaterialInfomationDO::getName, name));
if (CollUtil.isEmpty(infoList)) {
return false;
}
List<Long> infoIds = infoList.stream()
.map(MaterialInfomationDO::getId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
if (CollUtil.isEmpty(infoIds)) {
return false;
}
Long count = materialHasClassesMapper.selectCount(
new LambdaQueryWrapperX<MaterialHasClassesDO>()
.in(MaterialHasClassesDO::getInfomationId, infoIds)
.eq(MaterialHasClassesDO::getClassesId, classesId));
return count != null && count > 0;
}
@Override
public void deleteMaterialInfomation(Long id) {
validateMaterialInfomationExists(id);