Commit 0d47d0fbcbed01758d98f3ff58a3b32c7b082e63

Authored by 王富生
1 parent 11a7c51c

养护频次重复校验

urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/vo/InspectionPlanSaveReqVO.java
@@ -59,7 +59,6 @@ public class InspectionPlanSaveReqVO { @@ -59,7 +59,6 @@ public class InspectionPlanSaveReqVO {
59 private LocalDate endTime; 59 private LocalDate endTime;
60 60
61 @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") 61 @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
62 - @NotEmpty(message = "备注不能为空")  
63 private String remark; 62 private String remark;
64 63
65 @NotNull(message = "角色Ids不能为空") 64 @NotNull(message = "角色Ids不能为空")
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/MaintainPlanController.java
@@ -42,6 +42,9 @@ public class MaintainPlanController { @@ -42,6 +42,9 @@ public class MaintainPlanController {
42 @Operation(summary = "创建养护计划汇总") 42 @Operation(summary = "创建养护计划汇总")
43 @PreAuthorize("@ss.hasPermission('garden:maintain-plan:create')") 43 @PreAuthorize("@ss.hasPermission('garden:maintain-plan:create')")
44 public CommonResult<Long> createMaintainPlan(@Valid @RequestBody MaintainPlanSaveReqVO createReqVO) { 44 public CommonResult<Long> createMaintainPlan(@Valid @RequestBody MaintainPlanSaveReqVO createReqVO) {
  45 + if(!createReqVO.verify()){
  46 +
  47 + }
45 return maintainPlanService.createMaintainPlan(createReqVO); 48 return maintainPlanService.createMaintainPlan(createReqVO);
46 } 49 }
47 50
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/vo/MaintainPlanSaveReqVO.java
1 package com.zteits.urbanops.module.garden.controller.admin.maintainplan.vo; 1 package com.zteits.urbanops.module.garden.controller.admin.maintainplan.vo;
2 2
3 -import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.InspectionPlanRoadReqVO; 3 +import com.zteits.urbanops.module.garden.util.StringValidateUtil;
4 import io.swagger.v3.oas.annotations.media.Schema; 4 import io.swagger.v3.oas.annotations.media.Schema;
5 import jakarta.validation.Valid; 5 import jakarta.validation.Valid;
6 import lombok.*; 6 import lombok.*;
@@ -76,4 +76,7 @@ public class MaintainPlanSaveReqVO { @@ -76,4 +76,7 @@ public class MaintainPlanSaveReqVO {
76 @Size(min = 1) 76 @Size(min = 1)
77 private Set<Long> roleIds; 77 private Set<Long> roleIds;
78 78
  79 + public boolean verify(){
  80 + return StringValidateUtil.validate(rateValue);
  81 + }
79 } 82 }
80 \ No newline at end of file 83 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/util/StringValidateUtil.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.util;
  2 +
  3 +import java.util.regex.Pattern;
  4 +
  5 +/**
  6 + * 字符串校验工具:校验是否为1-20的整数或合法分数(如1/3)
  7 + */
  8 +public class StringValidateUtil {
  9 + // 正则1:匹配1-20的整数(无前置0,如"05"非法)
  10 + private static final Pattern INTEGER_PATTERN = Pattern.compile("^(1|[1-9]\\d?|20)$");
  11 + // 正则2:匹配分数格式(分子/分母均为正整数,无空格、无空值)
  12 + private static final Pattern FRACTION_PATTERN = Pattern.compile("^[1-9]\\d*/[1-9]\\d*$");
  13 +
  14 + /**
  15 + * 核心校验方法
  16 + * @param input 待校验的字符串
  17 + * @return true=合法,false=非法
  18 + */
  19 + public static boolean validate(String input) {
  20 + // 空值/空字符串直接非法
  21 + if (input == null || input.trim().isEmpty()) {
  22 + return false;
  23 + }
  24 + String trimInput = input.trim(); // 去除首尾空格(若允许空格可省略)
  25 +
  26 + // 先校验是否为1-20的整数
  27 + if (INTEGER_PATTERN.matcher(trimInput).matches()) {
  28 + return true;
  29 + }
  30 +
  31 + // 再校验是否为合法分数格式
  32 + if (FRACTION_PATTERN.matcher(trimInput).matches()) {
  33 + // 可选:若需要限制分子/分母范围(如1-20),可添加以下逻辑
  34 + String[] parts = trimInput.split("/");
  35 + int numerator = Integer.parseInt(parts[0]); // 分子
  36 + int denominator = Integer.parseInt(parts[1]); // 分母
  37 + // 示例:限制分子、分母均为1-20
  38 + return numerator >= 1 && numerator <= 20 && denominator >= 1 && denominator <= 20;
  39 + }
  40 +
  41 + // 既不是整数也不是分数
  42 + return false;
  43 + }
  44 +
  45 + // 测试用例
  46 + public static void main(String[] args) {
  47 + // 合法用例
  48 + System.out.println(validate("5")); // true(1-20整数)
  49 + System.out.println(validate("20")); // true(1-20整数)
  50 + System.out.println(validate("1/3")); // true(分数,分子分母1-20)
  51 + System.out.println(validate("10/20")); // true(分数,分子分母1-20)
  52 +
  53 + // 非法用例
  54 + System.out.println(validate("0")); // false(小于1)
  55 + System.out.println(validate("21")); // false(大于20)
  56 + System.out.println(validate("1.5")); // false(小数,非整数/分数)
  57 + System.out.println(validate("1/0")); // false(分母为0)
  58 + System.out.println(validate(" 1/3")); // false(首尾空格,trim后合法,若保留空格则false)
  59 + System.out.println(validate("1//3")); // false(格式错误)
  60 + System.out.println(validate("21/5")); // false(分子超20)
  61 + System.out.println(validate(null)); // false(空值)
  62 + }
  63 +}