Commit bab40751b3bb69f89a7c20ba314c45aa70a2fda8
1 parent
eb36f943
app养护计划明细提交
Showing
6 changed files
with
98 additions
and
28 deletions
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/InspectionPlanController.java
| 1 | 1 | package com.zteits.urbanops.module.garden.controller.admin.inspectionplan; |
| 2 | 2 | |
| 3 | +import com.zteits.urbanops.module.garden.util.StringValidateUtil; | |
| 3 | 4 | import jakarta.validation.constraints.NotBlank; |
| 4 | 5 | import lombok.extern.slf4j.Slf4j; |
| 5 | 6 | import org.springframework.web.bind.annotation.*; |
| ... | ... | @@ -29,6 +30,7 @@ import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; |
| 29 | 30 | import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; |
| 30 | 31 | import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; |
| 31 | 32 | import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.PLAN_RATE_VALUE_ERROR; |
| 33 | +import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.PLAN_RATE_VALUE_INTEGER_ERROR; | |
| 32 | 34 | |
| 33 | 35 | import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.*; |
| 34 | 36 | import com.zteits.urbanops.module.garden.dal.dataobject.inspectionplan.InspectionPlanDO; |
| ... | ... | @@ -52,6 +54,12 @@ public class InspectionPlanController { |
| 52 | 54 | log.warn("次数值范围:1-10或者分数格式:1/3, rateValue={}", createReqVO.getRateValue()); |
| 53 | 55 | return error(PLAN_RATE_VALUE_ERROR); |
| 54 | 56 | } |
| 57 | + //3002 临时计划 | |
| 58 | + if(createReqVO.getPlanTypeId().equals(3002)){ | |
| 59 | + if(!StringValidateUtil.isValidNumberStr(createReqVO.getRateValue())){ | |
| 60 | + return error(PLAN_RATE_VALUE_INTEGER_ERROR); | |
| 61 | + } | |
| 62 | + } | |
| 55 | 63 | |
| 56 | 64 | return inspectionPlanService.createInspectionPlan(createReqVO); |
| 57 | 65 | } | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/MaintainPlanController.java
| 1 | 1 | package com.zteits.urbanops.module.garden.controller.admin.maintainplan; |
| 2 | 2 | |
| 3 | +import com.zteits.urbanops.module.garden.util.StringValidateUtil; | |
| 3 | 4 | import jakarta.validation.constraints.NotBlank; |
| 4 | 5 | import lombok.extern.slf4j.Slf4j; |
| 5 | 6 | import org.springframework.web.bind.annotation.*; |
| ... | ... | @@ -28,6 +29,7 @@ import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; |
| 28 | 29 | import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; |
| 29 | 30 | import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; |
| 30 | 31 | import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.PLAN_RATE_VALUE_ERROR; |
| 32 | +import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.PLAN_RATE_VALUE_INTEGER_ERROR; | |
| 31 | 33 | |
| 32 | 34 | import com.zteits.urbanops.module.garden.controller.admin.maintainplan.vo.*; |
| 33 | 35 | import com.zteits.urbanops.module.garden.dal.dataobject.maintainplan.MaintainPlanDO; |
| ... | ... | @@ -51,6 +53,14 @@ public class MaintainPlanController { |
| 51 | 53 | log.warn("次数值范围:1-10或者分数格式:1/3, rateValue={}", createReqVO.getRateValue()); |
| 52 | 54 | return error(PLAN_RATE_VALUE_ERROR); |
| 53 | 55 | } |
| 56 | + | |
| 57 | + //3002 临时计划 | |
| 58 | + if(createReqVO.getPlanTypeId().equals(20010)){ | |
| 59 | + if(!StringValidateUtil.isValidNumberStr(createReqVO.getRateValue())){ | |
| 60 | + return error(PLAN_RATE_VALUE_INTEGER_ERROR); | |
| 61 | + } | |
| 62 | + } | |
| 63 | + | |
| 54 | 64 | return maintainPlanService.createMaintainPlan(createReqVO); |
| 55 | 65 | } |
| 56 | 66 | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java
| ... | ... | @@ -97,6 +97,7 @@ public interface ErrorCodeConstants { |
| 97 | 97 | ErrorCode PLAN_RATE_NOT_EXISTS = new ErrorCode(1-100-007-002, "未配置计划频次"); |
| 98 | 98 | ErrorCode PLAN_RATE_DETAIL_EXISTS = new ErrorCode(1-100-007-003, "计划频次已存在"); |
| 99 | 99 | ErrorCode PLAN_RATE_VALUE_ERROR = new ErrorCode(1-100-007-004, "次数值范围:1-10或者分数格式:1/3"); |
| 100 | + ErrorCode PLAN_RATE_VALUE_INTEGER_ERROR = new ErrorCode(1-100-007-005, "临时计划-次数值范围:1-20的整数"); | |
| 100 | 101 | |
| 101 | 102 | ErrorCode MATERIAL_TYPE_NOT_EXISTS = new ErrorCode(1-100-004-001, "物料类型不存在"); |
| 102 | 103 | ErrorCode MATERIAL_TYPE_MANAGER_NOT_EXISTS = new ErrorCode(1-100-004-002, "耗材类别管理不存在"); | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/inspectionplan/InspectionPlanServiceImpl.java
| ... | ... | @@ -92,17 +92,29 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 92 | 92 | if (createReqVO.getRateValue().contains("/")) { |
| 93 | 93 | rateValue = createReqVO.getRateValue().trim(); |
| 94 | 94 | } else { |
| 95 | - rateValue = createReqVO.getRateValue().trim()+"/1"; | |
| 95 | + rateValue = createReqVO.getRateValue().trim() + "/1"; | |
| 96 | 96 | } |
| 97 | 97 | //计算开始和计算时间 在间隔周期下每天的次数 |
| 98 | - List<PeriodResult> calculate = TimeIntervalFrequencyUtil.calculate(createReqVO.getBeginTime().toString(), createReqVO.getEndTime().toString(), rateValue, createReqVO.getCycleId()); | |
| 99 | - if (CollectionUtils.isEmpty(calculate)) { | |
| 100 | - log.warn("获取两个时间之间间隔天数错误"); | |
| 101 | - return CommonResult.error(INSPECTION_CYCLE_ERROR); | |
| 98 | + List<PeriodResult> calculate; | |
| 99 | + //计算计划次数 | |
| 100 | + int planNum; | |
| 101 | + //临时计划 | |
| 102 | + if (createReqVO.getPlanTypeId().equals(3002)) { | |
| 103 | + calculate = new ArrayList<>(); | |
| 104 | + PeriodResult periodResult = new PeriodResult(createReqVO.getBeginTime(), createReqVO.getEndTime(), Integer.parseInt(createReqVO.getRateValue())); | |
| 105 | + calculate.add(periodResult); | |
| 106 | + planNum = Integer.parseInt(createReqVO.getRateValue()); | |
| 107 | + }else{ | |
| 108 | + calculate= TimeIntervalFrequencyUtil.calculate(createReqVO.getBeginTime().toString(), createReqVO.getEndTime().toString(), rateValue, createReqVO.getCycleId()); | |
| 109 | + if (CollectionUtils.isEmpty(calculate)) { | |
| 110 | + log.warn("获取两个时间之间间隔天数错误"); | |
| 111 | + return CommonResult.error(INSPECTION_CYCLE_ERROR); | |
| 112 | + } | |
| 113 | + //计算计划次数 | |
| 114 | + planNum = calculate.stream().mapToInt(PeriodResult::getCount).sum(); | |
| 102 | 115 | } |
| 103 | 116 | |
| 104 | - //计算计划次数 | |
| 105 | - int planNum = calculate.stream().mapToInt(PeriodResult::getCount).sum(); | |
| 117 | + | |
| 106 | 118 | //巡检计划list |
| 107 | 119 | List<InspectionPlanDO> inspectionPlanList = new ArrayList<>(); |
| 108 | 120 | //角色列表 |
| ... | ... | @@ -112,7 +124,7 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 112 | 124 | //按照道路创建计划 |
| 113 | 125 | createReqVO.getRoadListReqVO().forEach(roadReqVO -> { |
| 114 | 126 | InspectionPlanDO inspectionPlan = BeanUtils.toBean(createReqVO, InspectionPlanDO.class); |
| 115 | - String batchNo = "BN" + System.currentTimeMillis() + RandomUtil.randomInt(1000 , 9999) + roadReqVO.getRoadId(); | |
| 127 | + String batchNo = "BN" + System.currentTimeMillis() + RandomUtil.randomInt(1000, 9999) + roadReqVO.getRoadId(); | |
| 116 | 128 | inspectionPlan.setBatchNo(batchNo); |
| 117 | 129 | inspectionPlan.setPlanFinishNum(0); |
| 118 | 130 | inspectionPlan.setFinishState(FinishStateEnum.NOT_FINISHED.getStatus()); |
| ... | ... | @@ -130,7 +142,7 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 130 | 142 | //计划属性label |
| 131 | 143 | String planAttrLabel = DictFrameworkUtils.parseDictDataLabel(PlanConstants.GARDEN_PLAN_ATTR_REDIS_KEY, createReqVO.getPlanAttr()); |
| 132 | 144 | String planTypeIdLabel = DictFrameworkUtils.parseDictDataLabel(PlanConstants.INSPECTION_MAINTAIN_TYPE, createReqVO.getPlanTypeId()); |
| 133 | - String planNameSuffix = StringUtil.isNotEmpty(createReqVO.getPlanNameSuffix()) ? createReqVO.getPlanNameSuffix() :""; | |
| 145 | + String planNameSuffix = StringUtil.isNotEmpty(createReqVO.getPlanNameSuffix()) ? createReqVO.getPlanNameSuffix() : ""; | |
| 134 | 146 | inspectionPlan.setPlanName(roadReqVO.getRoadName() + planAttrLabel + planTypeIdLabel + planNameSuffix); |
| 135 | 147 | inspectionPlanList.add(inspectionPlan); |
| 136 | 148 | /*2.插入角色*/ |
| ... | ... | @@ -174,7 +186,7 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 174 | 186 | String userName = SecurityFrameworkUtils.getLoginUserNickname(); |
| 175 | 187 | InspectionPlanDetailDO entity = new InspectionPlanDetailDO(); |
| 176 | 188 | entity.setBatchNo(batchNo); |
| 177 | - entity.setPlanNo("X" + System.currentTimeMillis() + RandomUtil.randomInt(1000 , 9999)); | |
| 189 | + entity.setPlanNo("X" + System.currentTimeMillis() + RandomUtil.randomInt(1000, 9999)); | |
| 178 | 190 | entity.setBusiLine(saveReqVO.getBusiLine()); |
| 179 | 191 | entity.setCompanyId(saveReqVO.getCompanyId()); |
| 180 | 192 | entity.setDeptId(roadReqVO.getDeptId()); |
| ... | ... | @@ -265,11 +277,12 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 265 | 277 | |
| 266 | 278 | /** |
| 267 | 279 | * 回填部门/公司/角色 |
| 280 | + * | |
| 268 | 281 | * @param list 分页对象 |
| 269 | 282 | */ |
| 270 | - private void addDataInspectionPlan(List<InspectionPlanRespVO> list ){ | |
| 271 | - if(CollectionUtils.isEmpty(list)){ | |
| 272 | - return ; | |
| 283 | + private void addDataInspectionPlan(List<InspectionPlanRespVO> list) { | |
| 284 | + if (CollectionUtils.isEmpty(list)) { | |
| 285 | + return; | |
| 273 | 286 | } |
| 274 | 287 | //公司 |
| 275 | 288 | Set<Long> companyIds = list.stream().map(InspectionPlanRespVO::getCompanyId).collect(Collectors.toSet()); |
| ... | ... | @@ -280,22 +293,22 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 280 | 293 | Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(deptIds); |
| 281 | 294 | |
| 282 | 295 | list.forEach(plan -> { |
| 283 | - DeptRespDTO dept = deptMap.get(plan.getDeptId()); | |
| 296 | + DeptRespDTO dept = deptMap.get(plan.getDeptId()); | |
| 284 | 297 | if (dept != null) { |
| 285 | 298 | plan.setDeptName(dept.getName()); |
| 286 | 299 | |
| 287 | 300 | } |
| 288 | - DeptRespDTO company = deptMap.get(plan.getCompanyId()); | |
| 289 | - if(company != null){ | |
| 301 | + DeptRespDTO company = deptMap.get(plan.getCompanyId()); | |
| 302 | + if (company != null) { | |
| 290 | 303 | plan.setCompanyName(company.getName()); |
| 291 | 304 | } |
| 292 | 305 | List<InspectionPlanRoleDO> roleList = inspectionPlanRoleMapper.selectList(new QueryWrapper<InspectionPlanRoleDO>().lambda() |
| 293 | 306 | .eq(InspectionPlanRoleDO::getBatchNo, plan.getBatchNo())); |
| 294 | 307 | |
| 295 | 308 | Set<Long> roleIds = roleList.stream().map(InspectionPlanRoleDO::getRoleId).collect(Collectors.toSet()); |
| 296 | - if(!CollectionUtils.isEmpty(roleIds)){ | |
| 309 | + if (!CollectionUtils.isEmpty(roleIds)) { | |
| 297 | 310 | List<RoleDO> roles = roleApi.getRoleList(roleIds); |
| 298 | - if(!CollectionUtils.isEmpty(roles)){ | |
| 311 | + if (!CollectionUtils.isEmpty(roles)) { | |
| 299 | 312 | plan.setRoleNameList(roles.stream().map(RoleDO::getName).collect(Collectors.toList())); |
| 300 | 313 | } |
| 301 | 314 | } |
| ... | ... | @@ -341,9 +354,9 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 341 | 354 | return new PageResult<>(page.getRecords(), page.getTotal()); |
| 342 | 355 | } |
| 343 | 356 | |
| 344 | - private void addStreetInfo(List<AppInspectionPlanRespVO> list){ | |
| 345 | - if(CollectionUtils.isEmpty(list)){ | |
| 346 | - return ; | |
| 357 | + private void addStreetInfo(List<AppInspectionPlanRespVO> list) { | |
| 358 | + if (CollectionUtils.isEmpty(list)) { | |
| 359 | + return; | |
| 347 | 360 | } |
| 348 | 361 | Set<Long> roadIds = list.stream().map(AppInspectionPlanRespVO::getRoadId).collect(Collectors.toSet()); |
| 349 | 362 | |
| ... | ... | @@ -354,7 +367,7 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { |
| 354 | 367 | |
| 355 | 368 | list.forEach(plan -> { |
| 356 | 369 | RoadDO road = roadMap.get(plan.getRoadId()); |
| 357 | - if(road != null){ | |
| 370 | + if (road != null) { | |
| 358 | 371 | plan.setStreetId(road.getStreetId()); |
| 359 | 372 | plan.setStreetName(road.getStreetName()); |
| 360 | 373 | } | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/maintainplan/MaintainPlanServiceImpl.java
| ... | ... | @@ -102,13 +102,24 @@ public class MaintainPlanServiceImpl implements MaintainPlanService { |
| 102 | 102 | rateValue = createReqVO.getRateValue().trim() + "/1"; |
| 103 | 103 | } |
| 104 | 104 | //计算开始和计算时间 在间隔周期下每天的次数 |
| 105 | - List<PeriodResult> calculate = TimeIntervalFrequencyUtil.calculate(createReqVO.getBeginTime().toString(), createReqVO.getEndTime().toString(), rateValue, createReqVO.getCycleId()); | |
| 106 | - if (CollectionUtils.isEmpty(calculate)) { | |
| 107 | - log.warn("获取两个时间之间间隔天数错误"); | |
| 108 | - return CommonResult.error(INSPECTION_CYCLE_ERROR); | |
| 109 | - } | |
| 105 | + List<PeriodResult> calculate; | |
| 110 | 106 | //计算计划次数 |
| 111 | - int planNum = calculate.stream().mapToInt(PeriodResult::getCount).sum(); | |
| 107 | + int planNum; | |
| 108 | + //临时计划比较特殊 | |
| 109 | + if (createReqVO.getPlanTypeId().equals(20010)) { | |
| 110 | + calculate = new ArrayList<>(); | |
| 111 | + PeriodResult periodResult = new PeriodResult(createReqVO.getBeginTime(), createReqVO.getEndTime(), Integer.parseInt(createReqVO.getRateValue())); | |
| 112 | + calculate.add(periodResult); | |
| 113 | + planNum = Integer.parseInt(createReqVO.getRateValue()); | |
| 114 | + }else{ | |
| 115 | + calculate= TimeIntervalFrequencyUtil.calculate(createReqVO.getBeginTime().toString(), createReqVO.getEndTime().toString(), rateValue, createReqVO.getCycleId()); | |
| 116 | + if (CollectionUtils.isEmpty(calculate)) { | |
| 117 | + log.warn("获取两个时间之间间隔天数错误"); | |
| 118 | + return CommonResult.error(INSPECTION_CYCLE_ERROR); | |
| 119 | + } | |
| 120 | + //计算计划次数 | |
| 121 | + planNum = calculate.stream().mapToInt(PeriodResult::getCount).sum(); | |
| 122 | + } | |
| 112 | 123 | //巡检计划list |
| 113 | 124 | List<MaintainPlanDO> maintainPlanList = new ArrayList<>(); |
| 114 | 125 | //角色列表 | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/util/StringValidateUtil.java
| ... | ... | @@ -88,6 +88,33 @@ public class StringValidateUtil { |
| 88 | 88 | return true; |
| 89 | 89 | } |
| 90 | 90 | |
| 91 | + /** | |
| 92 | + * 校验字符串是否为 1-20 的整数(包含1和20) | |
| 93 | + * @param str 待校验的字符串(允许null/空串) | |
| 94 | + * @return 校验通过返回true,否则false | |
| 95 | + */ | |
| 96 | + public static boolean isValidNumberStr(String str) { | |
| 97 | + // 1. 空值/空串校验 | |
| 98 | + if (str == null || str.trim().isEmpty()) { | |
| 99 | + return false; | |
| 100 | + } | |
| 101 | + | |
| 102 | + // 2. 校验是否为纯数字(排除字母、符号、小数) | |
| 103 | + if (!str.matches("^\\d+$")) { | |
| 104 | + return false; | |
| 105 | + } | |
| 106 | + | |
| 107 | + // 3. 转换为数字并校验范围 | |
| 108 | + try { | |
| 109 | + int number = Integer.parseInt(str); | |
| 110 | + return number >= 1 && number <= 20; | |
| 111 | + } catch (NumberFormatException e) { | |
| 112 | + // 理论上不会走到这里(已通过正则校验),兜底处理 | |
| 113 | + return false; | |
| 114 | + } | |
| 115 | + } | |
| 116 | + | |
| 117 | + | |
| 91 | 118 | // 测试用例 |
| 92 | 119 | public static void main(String[] args) { |
| 93 | 120 | // 测试符合规则的情况 | ... | ... |