diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/vo/MaintainPlanSaveReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/vo/MaintainPlanSaveReqVO.java index c2b043a..88b3701 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/vo/MaintainPlanSaveReqVO.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/vo/MaintainPlanSaveReqVO.java @@ -48,8 +48,8 @@ public class MaintainPlanSaveReqVO { @NotEmpty(message = "频次值不能为空") private String rateValue; - @Schema(description = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次不能为空") + @Schema(description = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次;5:按次;6:季度;7:半年", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次;5:按次;6:季度;7:半年") private Integer cycleId; @Schema(description = "开始时间") @@ -69,4 +69,4 @@ public class MaintainPlanSaveReqVO { public boolean verify(){ return StringValidateUtil.validate(rateValue); } -} \ No newline at end of file +} diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/maintainplan/MaintainPlanServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/maintainplan/MaintainPlanServiceImpl.java index 40f8c72..f3b5521 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/maintainplan/MaintainPlanServiceImpl.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/maintainplan/MaintainPlanServiceImpl.java @@ -30,6 +30,7 @@ import com.zteits.urbanops.module.garden.util.timeinterval.PeriodResult; import com.zteits.urbanops.module.garden.util.timeinterval.TimeIntervalFrequencyUtil; import com.zteits.urbanops.module.system.api.dept.DeptApi; import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO; +import com.zteits.urbanops.module.system.api.dict.DictDataApi; import com.zteits.urbanops.module.system.api.permission.RoleApi; import com.zteits.urbanops.module.system.dal.dataobject.permission.RoleDO; import jodd.util.StringUtil; @@ -88,6 +89,14 @@ public class MaintainPlanServiceImpl implements MaintainPlanService { @Resource private RoleApi roleApi; + @Resource + private DictDataApi dictDataApi; + + /** + * 字典类型:养护周期类型 + */ + private static final String DICT_TYPE_CYCLE_ID = "cycle_id_type"; + @Override public CommonResult createMaintainPlan(MaintainPlanSaveReqVO createReqVO) { //存在性校验 @@ -105,8 +114,9 @@ public class MaintainPlanServiceImpl implements MaintainPlanService { List calculate; //计算计划次数 int planNum; - //临时计划比较特殊 - if (createReqVO.getPlanAttr().equals(2)) { + //按次计划 + dictDataApi.validateDictDataList(DICT_TYPE_CYCLE_ID, Collections.singleton(createReqVO.getCycleId().toString().trim())); + if (createReqVO.getCycleId().equals(1)) { calculate = new ArrayList<>(); PeriodResult periodResult = new PeriodResult(createReqVO.getBeginTime(), createReqVO.getEndTime(), Integer.parseInt(createReqVO.getRateValue())); calculate.add(periodResult); @@ -422,4 +432,4 @@ public class MaintainPlanServiceImpl implements MaintainPlanService { }); } -} \ No newline at end of file +} diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/util/timeinterval/TimeIntervalFrequencyUtil.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/util/timeinterval/TimeIntervalFrequencyUtil.java index dc74eb7..88fd2f8 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/util/timeinterval/TimeIntervalFrequencyUtil.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/util/timeinterval/TimeIntervalFrequencyUtil.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import com.zteits.urbanops.framework.dict.core.DictFrameworkUtils; import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.INSPECTION_CYCLE_ID_ERROR; @@ -17,29 +18,16 @@ public class TimeIntervalFrequencyUtil { private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - public enum IntervalUnit { - DAY, WEEK, MONTH, YEAR; - } + /** - * 转换枚举 - * @param cycleId 1:日/次;2:周/次;3:月/次;4:年/次 - * @return + * 根据cycleId获取对应的字典值 + * @param cycleId 1:日/次;2:周/次;3:月/次;4:年/次;5:按次;6:季度;7:半年 + * @return 对应的字典值 */ - public static IntervalUnit getIntervalUnit(Integer cycleId) { - switch (cycleId) { - case 1: - return IntervalUnit.DAY; - case 2: - return IntervalUnit.WEEK; - case 3: - return IntervalUnit.MONTH; - case 4: - return IntervalUnit.YEAR; - default: - throw exception(INSPECTION_CYCLE_ID_ERROR); - } - } + public static String getCycleTypeValue(Integer cycleId) { + // 使用DictFrameworkUtils从字典表获取对应的周期类型值 + return String.valueOf(cycleId); } /** * 计算时间段划分结果(基于固定天数换算) @@ -47,7 +35,7 @@ public class TimeIntervalFrequencyUtil { * @param startStr 开始日期 (yyyy-MM-dd) * @param endStr 结束日期 (yyyy-MM-dd) * @param freq 频次值,格式 "x/y" - * @param cycleId 1:日/次;2:周/次;3:月/次;4:年/次 + * @param cycleId 1:日/次;2:周/次;3:月/次;4:年/次;5:按次;6:季度;7:半年 * @return 划分结果列表 */ public static List calculate(String startStr, String endStr, String freq, Integer cycleId) { @@ -65,8 +53,7 @@ public class TimeIntervalFrequencyUtil { int x = Integer.parseInt(parts[0]); // 每周期次数 int y = Integer.parseInt(parts[1]); // 周期数量 - IntervalUnit unit = getIntervalUnit(cycleId); - long periodDays = convertToDays(y, unit); // 转为固定天数 + long periodDays = convertToDays(y, cycleId); // 转为固定天数 List results = new ArrayList<>(); LocalDate currentStart = start; @@ -93,19 +80,26 @@ public class TimeIntervalFrequencyUtil { /** * 将 y 个单位转换为固定天数 + * 1:日/次;2:周/次;3:月/次;4:年/次;5:按次;6:季度;7:半年 */ - private static long convertToDays(int y, IntervalUnit unit) { - switch (unit) { - case DAY: + private static long convertToDays(int y, Integer cycleId) { + switch (cycleId) { + case 1: // DAY return y; - case WEEK: + case 2: // WEEK return (long) y * 7; - case MONTH: + case 3: // MONTH return (long) y * 30; - case YEAR: + case 4: // YEAR return (long) y * 365; + case 5: // TIME + return 1; // 按次:将整个时间段视为1个周期 + case 6: // QUARTER + return (long) y * 90; // 1季度=3个月=90天 + case 7: // SEMIANNUAL + return (long) y * 180; // 半年=6个月=180天 default: - throw new UnsupportedOperationException("不支持的单位: " + unit); + throw new IllegalArgumentException("无效的周期ID: " + cycleId); } } @@ -157,5 +151,18 @@ public class TimeIntervalFrequencyUtil { System.out.println("\n=== 示例5:每1年4次(即:4/1),按年(测试)=== 2023-09-15 2025-01-31"); List r5 = calculate("2023-09-15", "2025-01-31", "4/1", 4); r5.forEach(System.out::println); + + // 新增示例:按次、季度、半年 + System.out.println("\n=== 示例6:按次单位,整个时间段算1个周期 === 2025-01-01 2025-12-31"); + List r6 = calculate("2025-01-01", "2025-12-31", "2/1", 5); + r6.forEach(System.out::println); + + System.out.println("\n=== 示例7:每1季度2次(即:2/1),按季度(90天)=== 2025-01-01 2025-12-31"); + List r7 = calculate("2025-01-01", "2025-12-31", "2/1", 6); + r7.forEach(System.out::println); + + System.out.println("\n=== 示例8:每1半年3次(即:3/1),按半年(180天)=== 2025-01-01 2025-12-31"); + List r8 = calculate("2025-01-01", "2025-12-31", "3/1", 7); + r8.forEach(System.out::println); } }