fix:调整物料分类/大类创建接口,新家删除和详情接口

This commit is contained in:
shusir
2026-01-27 12:00:20 +08:00
parent be2f28cef5
commit 525d588c20
6 changed files with 69 additions and 8 deletions

View File

@@ -173,8 +173,11 @@ public interface ErrorCodeConstants {
// -------------物料试剂------------- // -------------物料试剂-------------
ErrorCode MATERIAL_INFOMATION_NOT_EXISTS = new ErrorCode(1_032_160_000, "试剂耗材不存在"); ErrorCode MATERIAL_INFOMATION_NOT_EXISTS = new ErrorCode(1_032_160_000, "试剂耗材不存在");
ErrorCode MATERIAL_PRODUCT_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料分类/大类不存在"); ErrorCode MATERIAL_PRODUCT_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料分类/大类不存在");
ErrorCode MATERIAL_PRODUCT_PARENT_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料分类/大类的父类不存在");
ErrorCode MATERIAL_PRODUCT_CODE_EXISTED = new ErrorCode(1_032_160_000, "物料大类编码重复"); ErrorCode MATERIAL_PRODUCT_CODE_EXISTED = new ErrorCode(1_032_160_000, "物料大类编码重复");
ErrorCode MATERIAL_CATEGORY_EXISTS_CHILDREN = new ErrorCode(1_032_160_000, "分类下含有子分类或物料大类,不可删除"); ErrorCode MATERIAL_CATEGORY_EXISTS_CHILDREN = new ErrorCode(1_032_160_000, "分类下含有子分类或物料大类,不可删除");
ErrorCode MATERIAL_PRODUCT_EXISTS_BATCH = new ErrorCode(1_032_160_000, "物料大类下存在物料批次,不可删除");
ErrorCode MATERIAL_PRODUCTS_EXISTS_CATEGORY = new ErrorCode(1_032_160_000, "物料大类列表中存在分类数据");
ErrorCode MATERIAL_LIFECYCLE_DETAIL_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料通用流程明细不存在"); ErrorCode MATERIAL_LIFECYCLE_DETAIL_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料通用流程明细不存在");
ErrorCode MATERIAL_LIFECYCLE_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料通用流程不存在"); ErrorCode MATERIAL_LIFECYCLE_NOT_EXISTS = new ErrorCode(1_032_160_000, "物料通用流程不存在");

View File

@@ -62,11 +62,12 @@ public class MaterialProductController extends AbstractFileUploadController impl
return success(materialProductService.getMaterialCategoryTree()); return success(materialProductService.getMaterialCategoryTree());
} }
// TODO // TODO 后边再对接
@GetMapping("/orig-material/{code}") @GetMapping("/orig-material/{code}")
@Operation(summary = "根据物料编码获取外部系统原始物料") @Operation(summary = "根据物料编码获取外部系统原始物料")
public CommonResult<Object> getOriginalMaterial(@PathVariable String code) { public CommonResult<MaterialProductRespVO> getOriginalMaterial(@PathVariable String code) {
return null;
return success(new MaterialProductRespVO().setCode(code).setName("测试物料"));
} }
@PostMapping("/save-material") @PostMapping("/save-material")
@@ -104,7 +105,7 @@ public class MaterialProductController extends AbstractFileUploadController impl
@DeleteMapping("/delete-list") @DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true) @Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除物料") @Operation(summary = "批量删除物料大类")
@PreAuthorize("@ss.hasPermission('qms:material-product:delete')") @PreAuthorize("@ss.hasPermission('qms:material-product:delete')")
public CommonResult<Boolean> deleteMaterialProductList(@RequestBody BatchDeleteReqVO req) { public CommonResult<Boolean> deleteMaterialProductList(@RequestBody BatchDeleteReqVO req) {
materialProductService.deleteMaterialProductListByIds(req.getIds()); materialProductService.deleteMaterialProductListByIds(req.getIds());
@@ -114,7 +115,7 @@ public class MaterialProductController extends AbstractFileUploadController impl
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得物料") @Operation(summary = "获得物料")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('qms:material-product:query')") // @PreAuthorize("@ss.hasPermission('qms:material-product:query')")
public CommonResult<MaterialProductRespVO> getMaterialProduct(@RequestParam("id") Long id) { public CommonResult<MaterialProductRespVO> getMaterialProduct(@RequestParam("id") Long id) {
MaterialProductDO materialProduct = materialProductService.getMaterialProduct(id); MaterialProductDO materialProduct = materialProductService.getMaterialProduct(id);
return success(BeanUtils.toBean(materialProduct, MaterialProductRespVO.class)); return success(BeanUtils.toBean(materialProduct, MaterialProductRespVO.class));

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.module.qms.core.constant.DataTypeConstant;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialProductPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialProductPageReqVO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -18,6 +19,7 @@ public interface MaterialProductMapper extends BaseMapperX<MaterialProductDO> {
default PageResult<MaterialProductDO> selectPage(MaterialProductPageReqVO reqVO) { default PageResult<MaterialProductDO> selectPage(MaterialProductPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<MaterialProductDO>() return selectPage(reqVO, new LambdaQueryWrapperX<MaterialProductDO>()
.eq(MaterialProductDO::getNodeType, DataTypeConstant.DATA_TYPE_DATA)
.eqIfPresent(MaterialProductDO::getParentId, reqVO.getParentId()) .eqIfPresent(MaterialProductDO::getParentId, reqVO.getParentId())
.likeIfPresent(MaterialProductDO::getIdPath, reqVO.getIdPath()) .likeIfPresent(MaterialProductDO::getIdPath, reqVO.getIdPath())
.likeIfPresent(MaterialProductDO::getName, reqVO.getName()) .likeIfPresent(MaterialProductDO::getName, reqVO.getName())

View File

@@ -68,4 +68,20 @@ public interface MaterialBatchService {
* @return 工段编号 * @return 工段编号
*/ */
List<MaterialBatchRespVO> assignMaterialBatchGongduan(@Valid List<MaterialBatchSaveReqVO> createReqVOs); List<MaterialBatchRespVO> assignMaterialBatchGongduan(@Valid List<MaterialBatchSaveReqVO> createReqVOs);
/**
* 检查物料大类下是否有物料批次
*
* @param pdtId id
* @return 存在与否
*/
boolean checkIsExistsDataByPdt(Long pdtId);
/**
* 检查物料大类下是否有物料批次
*
* @param ids id 集合
* @return 存在与否
*/
boolean checkIsExistsDataByPdts(List<Long> ids);
} }

View File

@@ -169,4 +169,20 @@ public class MaterialBatchServiceImpl implements MaterialBatchService {
).toList(); ).toList();
} }
@Override
public boolean checkIsExistsDataByPdt(Long pdtId) {
return materialBatchMapper.exists(Wrappers.lambdaQuery(MaterialBatchDO.class)
.eq(MaterialBatchDO::getProductId, pdtId));
}
@Override
public boolean checkIsExistsDataByPdts(List<Long> ids) {
return materialBatchMapper.exists(Wrappers.lambdaQuery(MaterialBatchDO.class)
.in(MaterialBatchDO::getProductId, ids));
}
} }

View File

@@ -37,6 +37,9 @@ public class MaterialProductServiceImpl implements MaterialProductService {
@Resource @Resource
private MaterialProductMapper materialProductMapper; private MaterialProductMapper materialProductMapper;
//
// @Resource
// private MaterialBatchService materialBatchService;
/** /**
* 保存分类 * 保存分类
@@ -60,6 +63,15 @@ public class MaterialProductServiceImpl implements MaterialProductService {
mtrl.setNodeType(DataTypeConstant.DATA_TYPE_CATEGORY); mtrl.setNodeType(DataTypeConstant.DATA_TYPE_CATEGORY);
if (mtrl.getParentId() != 0) {
// 从父分类继承 是否危险品、是否标准物质、是否标准溶液
MaterialProductDO prnCtg = materialProductMapper.selectById(mtrl.getParentId());
if (prnCtg == null) throw exception(MATERIAL_PRODUCT_PARENT_NOT_EXISTS);
mtrl.setHazardous(prnCtg.getHazardous())
.setStandardMaterialFlag(prnCtg.getStandardMaterialFlag())
.setStandardSolutionFlag(prnCtg.getStandardSolutionFlag());
}
materialProductMapper.insert(mtrl); materialProductMapper.insert(mtrl);
String newIdPath = getIdPath(mtrl); String newIdPath = getIdPath(mtrl);
@@ -226,8 +238,10 @@ public class MaterialProductServiceImpl implements MaterialProductService {
} }
// 大类 // 大类
else { else {
// 大类下批次时不可删除 TODO 以及其他不可删除的情况 // 大类下批次时不可删除
// TODO 以及其他不可删除的情况,如库存记录、物料实例、使用记录等
// boolean exists = materialBatchService.checkIsExistsDataByPdt(id);
// if (exists) throw exception(MATERIAL_PRODUCT_EXISTS_BATCH);
} }
materialProductMapper.deleteById(id); materialProductMapper.deleteById(id);
} }
@@ -235,7 +249,16 @@ public class MaterialProductServiceImpl implements MaterialProductService {
@Override @Override
public void deleteMaterialProductListByIds(List<Long> ids) { public void deleteMaterialProductListByIds(List<Long> ids) {
// 校验存在 // 校验存在
validateMaterialProductExists(ids); List<MaterialProductDO> list = materialProductMapper.selectByIds(ids);
if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
throw exception(MATERIAL_PRODUCT_NOT_EXISTS);
}
// 检查物料大类中是否含有分类数据
List<MaterialProductDO> mtCtgList = list.stream().filter(m -> DataTypeConstant.DATA_TYPE_CATEGORY.equals(m.getNodeType())).toList();
if (CollUtil.isNotEmpty(mtCtgList)) throw exception(MATERIAL_PRODUCTS_EXISTS_CATEGORY);
// 检查是否可删除 大类下有批次时不可删除
// TODO 以及其他不可删除的情况,如库存记录、物料实例、使用记录等
// boolean exists = materialBatchService.checkIsExistsDataByPdts(ids);
// 删除 // 删除
materialProductMapper.deleteByIds(ids); materialProductMapper.deleteByIds(ids);
} }