Commit 4a1a8777e200551fa93673a8ca6d29206c534c07
1 parent
2e849fc3
feat(garden): 添加物料管理重复校验和模糊搜索功能
- 新增物料名称、规格、单位重复校验逻辑 - 添加MATERIAL_NAME_EXISTS、MATERIAL_SPECIFICATION_NAME_EXISTS、MATERIAL_UNIT_NAME_EXISTS错误码 - 实现物料名称、规格、单位的模糊搜索接口 - 修改道路拦截查询的排序逻辑 - 优化代码结构并移除未使用的导入
Showing
9 changed files
with
118 additions
and
18 deletions
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/MaterialNameController.java
| ... | ... | @@ -88,6 +88,21 @@ public class MaterialNameController { |
| 88 | 88 | return success(BeanUtils.toBean(pageResult, MaterialNameRespVO.class)); |
| 89 | 89 | } |
| 90 | 90 | |
| 91 | + @GetMapping("/list") | |
| 92 | + @Operation(summary = "获得物料名称列表(支持模糊搜索)") | |
| 93 | + @PreAuthorize("@ss.hasPermission('garden:material-name:query')") | |
| 94 | + public CommonResult<List<MaterialNameRespVO>> getMaterialNameList( | |
| 95 | + @RequestParam(value = "materialName", required = false) String materialName) { | |
| 96 | + // 构建查询条件 | |
| 97 | + MaterialNamePageReqVO pageReqVO = new MaterialNamePageReqVO(); | |
| 98 | + pageReqVO.setMaterialName(materialName); | |
| 99 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | |
| 100 | + | |
| 101 | + // 查询数据 | |
| 102 | + List<MaterialNameDO> list = materialNameService.getMaterialNamePage(pageReqVO).getList(); | |
| 103 | + return success(BeanUtils.toBean(list, MaterialNameRespVO.class)); | |
| 104 | + } | |
| 105 | + | |
| 91 | 106 | @GetMapping("/export-excel") |
| 92 | 107 | @Operation(summary = "导出物料名称 Excel") |
| 93 | 108 | @PreAuthorize("@ss.hasPermission('garden:material-name:export')") | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/MaterialSpecificationController.java
| ... | ... | @@ -88,6 +88,21 @@ public class MaterialSpecificationController { |
| 88 | 88 | return success(BeanUtils.toBean(pageResult, MaterialSpecificationRespVO.class)); |
| 89 | 89 | } |
| 90 | 90 | |
| 91 | + @GetMapping("/list") | |
| 92 | + @Operation(summary = "获得物料规格列表(支持模糊搜索)") | |
| 93 | + @PreAuthorize("@ss.hasPermission('garden:material-specification:query')") | |
| 94 | + public CommonResult<List<MaterialSpecificationRespVO>> getMaterialSpecificationList( | |
| 95 | + @RequestParam(value = "specifications", required = false) String specifications) { | |
| 96 | + // 构建查询条件 | |
| 97 | + MaterialSpecificationPageReqVO pageReqVO = new MaterialSpecificationPageReqVO(); | |
| 98 | + pageReqVO.setSpecifications(specifications); | |
| 99 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | |
| 100 | + | |
| 101 | + // 查询数据 | |
| 102 | + List<MaterialSpecificationDO> list = materialSpecificationService.getMaterialSpecificationPage(pageReqVO).getList(); | |
| 103 | + return success(BeanUtils.toBean(list, MaterialSpecificationRespVO.class)); | |
| 104 | + } | |
| 105 | + | |
| 91 | 106 | @GetMapping("/export-excel") |
| 92 | 107 | @Operation(summary = "导出物料规格 Excel") |
| 93 | 108 | @PreAuthorize("@ss.hasPermission('garden:material-specification:export')") | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/MaterialUnitController.java
| ... | ... | @@ -88,6 +88,21 @@ public class MaterialUnitController { |
| 88 | 88 | return success(BeanUtils.toBean(pageResult, MaterialUnitRespVO.class)); |
| 89 | 89 | } |
| 90 | 90 | |
| 91 | + @GetMapping("/list") | |
| 92 | + @Operation(summary = "获得物料单位列表(支持模糊搜索)") | |
| 93 | + @PreAuthorize("@ss.hasPermission('garden:material-unit:query')") | |
| 94 | + public CommonResult<List<MaterialUnitRespVO>> getMaterialUnitList( | |
| 95 | + @RequestParam(value = "unitName", required = false) String unitName) { | |
| 96 | + // 构建查询条件 | |
| 97 | + MaterialUnitPageReqVO pageReqVO = new MaterialUnitPageReqVO(); | |
| 98 | + pageReqVO.setUnitName(unitName); | |
| 99 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | |
| 100 | + | |
| 101 | + // 查询数据 | |
| 102 | + List<MaterialUnitDO> list = materialUnitService.getMaterialUnitPage(pageReqVO).getList(); | |
| 103 | + return success(BeanUtils.toBean(list, MaterialUnitRespVO.class)); | |
| 104 | + } | |
| 105 | + | |
| 91 | 106 | @GetMapping("/export-excel") |
| 92 | 107 | @Operation(summary = "导出物料单位 Excel") |
| 93 | 108 | @PreAuthorize("@ss.hasPermission('garden:material-unit:export')") | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/materialspecification/MaterialSpecificationMapper.java
| ... | ... | @@ -20,7 +20,7 @@ public interface MaterialSpecificationMapper extends BaseMapperX<MaterialSpecifi |
| 20 | 20 | default PageResult<MaterialSpecificationDO> selectPage(MaterialSpecificationPageReqVO reqVO) { |
| 21 | 21 | return selectPage(reqVO, new LambdaQueryWrapperX<MaterialSpecificationDO>() |
| 22 | 22 | .eqIfPresent(MaterialSpecificationDO::getSpecCode, reqVO.getSpecCode()) |
| 23 | - .eqIfPresent(MaterialSpecificationDO::getSpecifications, reqVO.getSpecifications()) | |
| 23 | + .likeIfPresent(MaterialSpecificationDO::getSpecifications, reqVO.getSpecifications()) | |
| 24 | 24 | .eqIfPresent(MaterialSpecificationDO::getRemark, reqVO.getRemark()) |
| 25 | 25 | .betweenIfPresent(MaterialSpecificationDO::getCreateTime, reqVO.getCreateTime()) |
| 26 | 26 | .eqIfPresent(MaterialSpecificationDO::getDeptId, reqVO.getDeptId()) | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/road/RoadInterceptMapper.java
| ... | ... | @@ -43,10 +43,10 @@ public interface RoadInterceptMapper extends BaseMapperX<RoadDO> { |
| 43 | 43 | .likeIfPresent(RoadDO::getCreatorName, reqVO.getCreatorName()) |
| 44 | 44 | .betweenIfPresent(RoadDO::getCreateTime, reqVO.getCreateTime()) |
| 45 | 45 | .likeIfPresent(RoadDO::getUpdaterName, reqVO.getUpdaterName()) |
| 46 | - .orderBy(true, reqVO.getSortAsc(), | |
| 46 | + .orderBy(false, reqVO.getSortAsc(), | |
| 47 | 47 | RoadPageReqVO.SORT_FIELD_MAP.get(reqVO.getOrderByColumn()) |
| 48 | 48 | ) |
| 49 | 49 | ); |
| 50 | 50 | } |
| 51 | 51 | |
| 52 | -} | |
| 53 | 52 | \ No newline at end of file |
| 53 | +} | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java
| ... | ... | @@ -115,9 +115,13 @@ public interface ErrorCodeConstants { |
| 115 | 115 | ErrorCode MATERIAL_INVENTORY_OUT_NOT_EXISTS = new ErrorCode(1-100-004-005, "物料出库不存在"); |
| 116 | 116 | ErrorCode MATERIAL_INVENTORY_NOT_EXISTS = new ErrorCode(1-100-004-006, "物料库存不存在"); |
| 117 | 117 | ErrorCode MATERIAL_NAME_NOT_EXISTS = new ErrorCode(1-100-004-007, "物料名称不存在"); |
| 118 | + ErrorCode MATERIAL_NAME_EXISTS = new ErrorCode(1-100-004-0013, "物料名称已经存在"); | |
| 118 | 119 | |
| 119 | 120 | ErrorCode MATERIAL_SPECIFICATION_NOT_EXISTS = new ErrorCode(1-100-004-010, "物料规格不存在"); |
| 121 | + ErrorCode MATERIAL_SPECIFICATION_NAME_EXISTS = new ErrorCode(1-100-004-014, "物料规格名称已经存在"); | |
| 122 | + | |
| 120 | 123 | ErrorCode MATERIAL_UNIT_NOT_EXISTS = new ErrorCode(1-100-004-011, "物料单位不存在"); |
| 124 | + ErrorCode MATERIAL_UNIT_NAME_EXISTS = new ErrorCode(1-100-004-012, "物料单位名称存在"); | |
| 121 | 125 | |
| 122 | 126 | ErrorCode OLDTREES_NOT_EXISTS = new ErrorCode(1-100-005-001, "古树名木不存在"); |
| 123 | 127 | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialname/MaterialNameServiceImpl.java
| ... | ... | @@ -17,7 +17,7 @@ import com.zteits.urbanops.module.garden.dal.mysql.materialname.MaterialNameMapp |
| 17 | 17 | |
| 18 | 18 | import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 19 | 19 | import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertList; |
| 20 | -import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.diffList; | |
| 20 | +import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 21 | 21 | import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; |
| 22 | 22 | |
| 23 | 23 | /** |
| ... | ... | @@ -34,9 +34,12 @@ public class MaterialNameServiceImpl implements MaterialNameService { |
| 34 | 34 | |
| 35 | 35 | @Override |
| 36 | 36 | public Long createMaterialName(MaterialNameSaveReqVO createReqVO) { |
| 37 | + // 校验物料名称是否重复 | |
| 38 | + validateMaterialNameUnique(null, createReqVO.getMaterialName()); | |
| 39 | + | |
| 37 | 40 | // 生成物料名称ID:获取数据库中最大的值然后+1 |
| 38 | 41 | Long materialId = generateMaterialId(); |
| 39 | - | |
| 42 | + | |
| 40 | 43 | // 插入 |
| 41 | 44 | MaterialNameDO materialName = BeanUtils.toBean(createReqVO, MaterialNameDO.class); |
| 42 | 45 | materialName.setMaterialId(materialId); |
| ... | ... | @@ -53,7 +56,7 @@ public class MaterialNameServiceImpl implements MaterialNameService { |
| 53 | 56 | private Long generateMaterialId() { |
| 54 | 57 | // 获取所有物料名称 |
| 55 | 58 | List<MaterialNameDO> allMaterials = materialNameMapper.selectList(); |
| 56 | - | |
| 59 | + | |
| 57 | 60 | long maxId = 0; |
| 58 | 61 | if (CollUtil.isNotEmpty(allMaterials)) { |
| 59 | 62 | // 遍历找到最大的ID值 |
| ... | ... | @@ -63,7 +66,7 @@ public class MaterialNameServiceImpl implements MaterialNameService { |
| 63 | 66 | } |
| 64 | 67 | } |
| 65 | 68 | } |
| 66 | - | |
| 69 | + | |
| 67 | 70 | // 生成新ID:最大ID+1 |
| 68 | 71 | return maxId + 1; |
| 69 | 72 | } |
| ... | ... | @@ -72,11 +75,25 @@ public class MaterialNameServiceImpl implements MaterialNameService { |
| 72 | 75 | public void updateMaterialName(MaterialNameSaveReqVO updateReqVO) { |
| 73 | 76 | // 校验存在 |
| 74 | 77 | validateMaterialNameExists(updateReqVO.getId()); |
| 78 | + // 校验物料名称是否重复 | |
| 79 | + validateMaterialNameUnique(updateReqVO.getId(), updateReqVO.getMaterialName()); | |
| 75 | 80 | // 更新 |
| 76 | 81 | MaterialNameDO updateObj = BeanUtils.toBean(updateReqVO, MaterialNameDO.class); |
| 77 | 82 | materialNameMapper.updateById(updateObj); |
| 78 | 83 | } |
| 79 | 84 | |
| 85 | + /** | |
| 86 | + * 校验物料名称是否唯一 | |
| 87 | + */ | |
| 88 | + private void validateMaterialNameUnique(Long id, String materialName) { | |
| 89 | + List<MaterialNameDO> existingMaterials = materialNameMapper.selectList(new LambdaQueryWrapperX<MaterialNameDO>() | |
| 90 | + .eq(MaterialNameDO::getMaterialName, materialName) | |
| 91 | + .neIfPresent(MaterialNameDO::getId, id)); | |
| 92 | + if (CollUtil.isNotEmpty(existingMaterials)) { | |
| 93 | + throw exception(MATERIAL_NAME_EXISTS); | |
| 94 | + } | |
| 95 | + } | |
| 96 | + | |
| 80 | 97 | @Override |
| 81 | 98 | public void deleteMaterialName(Long id) { |
| 82 | 99 | // 校验存在 |
| ... | ... | @@ -108,4 +125,4 @@ public class MaterialNameServiceImpl implements MaterialNameService { |
| 108 | 125 | return materialNameMapper.selectPage(pageReqVO); |
| 109 | 126 | } |
| 110 | 127 | |
| 111 | -} | |
| 112 | 128 | \ No newline at end of file |
| 129 | +} | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialspecification/MaterialSpecificationServiceImpl.java
| ... | ... | @@ -17,7 +17,7 @@ import com.zteits.urbanops.module.garden.dal.mysql.materialspecification.Materia |
| 17 | 17 | |
| 18 | 18 | import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 19 | 19 | import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertList; |
| 20 | -import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.diffList; | |
| 20 | +import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 21 | 21 | import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; |
| 22 | 22 | |
| 23 | 23 | /** |
| ... | ... | @@ -34,9 +34,12 @@ public class MaterialSpecificationServiceImpl implements MaterialSpecificationSe |
| 34 | 34 | |
| 35 | 35 | @Override |
| 36 | 36 | public Long createMaterialSpecification(MaterialSpecificationSaveReqVO createReqVO) { |
| 37 | + // 校验规格名称是否重复 | |
| 38 | + validateSpecificationsUnique(null, createReqVO.getSpecifications()); | |
| 39 | + | |
| 37 | 40 | // 生成规格编码:获取数据库中最大的值然后+1 |
| 38 | 41 | String specCode = generateSpecCode(); |
| 39 | - | |
| 42 | + | |
| 40 | 43 | // 插入 |
| 41 | 44 | MaterialSpecificationDO materialSpecification = BeanUtils.toBean(createReqVO, MaterialSpecificationDO.class); |
| 42 | 45 | materialSpecification.setSpecCode(specCode); |
| ... | ... | @@ -53,7 +56,7 @@ public class MaterialSpecificationServiceImpl implements MaterialSpecificationSe |
| 53 | 56 | private String generateSpecCode() { |
| 54 | 57 | // 获取所有物料规格 |
| 55 | 58 | List<MaterialSpecificationDO> allSpecifications = materialSpecificationMapper.selectList(); |
| 56 | - | |
| 59 | + | |
| 57 | 60 | int maxCode = 0; |
| 58 | 61 | if (CollUtil.isNotEmpty(allSpecifications)) { |
| 59 | 62 | // 遍历找到最大的编码 |
| ... | ... | @@ -70,7 +73,7 @@ public class MaterialSpecificationServiceImpl implements MaterialSpecificationSe |
| 70 | 73 | } |
| 71 | 74 | } |
| 72 | 75 | } |
| 73 | - | |
| 76 | + | |
| 74 | 77 | // 生成新编码:最大编码+1 |
| 75 | 78 | return String.valueOf(maxCode + 1); |
| 76 | 79 | } |
| ... | ... | @@ -79,11 +82,25 @@ public class MaterialSpecificationServiceImpl implements MaterialSpecificationSe |
| 79 | 82 | public void updateMaterialSpecification(MaterialSpecificationSaveReqVO updateReqVO) { |
| 80 | 83 | // 校验存在 |
| 81 | 84 | validateMaterialSpecificationExists(updateReqVO.getId()); |
| 85 | + // 校验规格名称是否重复 | |
| 86 | + validateSpecificationsUnique(updateReqVO.getId(), updateReqVO.getSpecifications()); | |
| 82 | 87 | // 更新 |
| 83 | 88 | MaterialSpecificationDO updateObj = BeanUtils.toBean(updateReqVO, MaterialSpecificationDO.class); |
| 84 | 89 | materialSpecificationMapper.updateById(updateObj); |
| 85 | 90 | } |
| 86 | 91 | |
| 92 | + /** | |
| 93 | + * 校验规格名称是否唯一 | |
| 94 | + */ | |
| 95 | + private void validateSpecificationsUnique(Long id, String specifications) { | |
| 96 | + List<MaterialSpecificationDO> existingSpecifications = materialSpecificationMapper.selectList(new LambdaQueryWrapperX<MaterialSpecificationDO>() | |
| 97 | + .eq(MaterialSpecificationDO::getSpecifications, specifications) | |
| 98 | + .neIfPresent(MaterialSpecificationDO::getId, id)); | |
| 99 | + if (CollUtil.isNotEmpty(existingSpecifications)) { | |
| 100 | + throw exception(MATERIAL_SPECIFICATION_NAME_EXISTS); | |
| 101 | + } | |
| 102 | + } | |
| 103 | + | |
| 87 | 104 | @Override |
| 88 | 105 | public void deleteMaterialSpecification(Long id) { |
| 89 | 106 | // 校验存在 |
| ... | ... | @@ -115,4 +132,4 @@ public class MaterialSpecificationServiceImpl implements MaterialSpecificationSe |
| 115 | 132 | return materialSpecificationMapper.selectPage(pageReqVO); |
| 116 | 133 | } |
| 117 | 134 | |
| 118 | -} | |
| 119 | 135 | \ No newline at end of file |
| 136 | +} | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialunit/MaterialUnitServiceImpl.java
| ... | ... | @@ -17,7 +17,7 @@ import com.zteits.urbanops.module.garden.dal.mysql.materialunit.MaterialUnitMapp |
| 17 | 17 | |
| 18 | 18 | import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 19 | 19 | import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertList; |
| 20 | -import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.diffList; | |
| 20 | +import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 21 | 21 | import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; |
| 22 | 22 | |
| 23 | 23 | /** |
| ... | ... | @@ -34,9 +34,12 @@ public class MaterialUnitServiceImpl implements MaterialUnitService { |
| 34 | 34 | |
| 35 | 35 | @Override |
| 36 | 36 | public Long createMaterialUnit(MaterialUnitSaveReqVO createReqVO) { |
| 37 | + // 校验单位名称是否重复 | |
| 38 | + validateUnitNameUnique(null, createReqVO.getUnitName()); | |
| 39 | + | |
| 37 | 40 | // 生成单位ID:获取数据库中最大的值然后+1 |
| 38 | 41 | Long unitId = generateUnitId(); |
| 39 | - | |
| 42 | + | |
| 40 | 43 | // 插入 |
| 41 | 44 | MaterialUnitDO materialUnit = BeanUtils.toBean(createReqVO, MaterialUnitDO.class); |
| 42 | 45 | materialUnit.setUnitId(unitId); |
| ... | ... | @@ -53,7 +56,7 @@ public class MaterialUnitServiceImpl implements MaterialUnitService { |
| 53 | 56 | private Long generateUnitId() { |
| 54 | 57 | // 获取所有物料单位 |
| 55 | 58 | List<MaterialUnitDO> allUnits = materialUnitMapper.selectList(); |
| 56 | - | |
| 59 | + | |
| 57 | 60 | long maxId = 0; |
| 58 | 61 | if (CollUtil.isNotEmpty(allUnits)) { |
| 59 | 62 | // 遍历找到最大的ID值 |
| ... | ... | @@ -63,7 +66,7 @@ public class MaterialUnitServiceImpl implements MaterialUnitService { |
| 63 | 66 | } |
| 64 | 67 | } |
| 65 | 68 | } |
| 66 | - | |
| 69 | + | |
| 67 | 70 | // 生成新ID:最大ID+1 |
| 68 | 71 | return maxId + 1; |
| 69 | 72 | } |
| ... | ... | @@ -72,11 +75,25 @@ public class MaterialUnitServiceImpl implements MaterialUnitService { |
| 72 | 75 | public void updateMaterialUnit(MaterialUnitSaveReqVO updateReqVO) { |
| 73 | 76 | // 校验存在 |
| 74 | 77 | validateMaterialUnitExists(updateReqVO.getId()); |
| 78 | + // 校验单位名称是否重复 | |
| 79 | + validateUnitNameUnique(updateReqVO.getId(), updateReqVO.getUnitName()); | |
| 75 | 80 | // 更新 |
| 76 | 81 | MaterialUnitDO updateObj = BeanUtils.toBean(updateReqVO, MaterialUnitDO.class); |
| 77 | 82 | materialUnitMapper.updateById(updateObj); |
| 78 | 83 | } |
| 79 | 84 | |
| 85 | + /** | |
| 86 | + * 校验单位名称是否唯一 | |
| 87 | + */ | |
| 88 | + private void validateUnitNameUnique(Long id, String unitName) { | |
| 89 | + List<MaterialUnitDO> existingUnits = materialUnitMapper.selectList(new LambdaQueryWrapperX<MaterialUnitDO>() | |
| 90 | + .eq(MaterialUnitDO::getUnitName, unitName) | |
| 91 | + .neIfPresent(MaterialUnitDO::getId, id)); | |
| 92 | + if (CollUtil.isNotEmpty(existingUnits)) { | |
| 93 | + throw exception(MATERIAL_UNIT_NAME_EXISTS); | |
| 94 | + } | |
| 95 | + } | |
| 96 | + | |
| 80 | 97 | @Override |
| 81 | 98 | public void deleteMaterialUnit(Long id) { |
| 82 | 99 | // 校验存在 |
| ... | ... | @@ -108,4 +125,4 @@ public class MaterialUnitServiceImpl implements MaterialUnitService { |
| 108 | 125 | return materialUnitMapper.selectPage(pageReqVO); |
| 109 | 126 | } |
| 110 | 127 | |
| 111 | -} | |
| 112 | 128 | \ No newline at end of file |
| 129 | +} | ... | ... |