Commit 43845f6a88aa7f983e14c9bfcc1aa11050bca16d

Authored by 王富生
1 parent ce393c88

养护频次增删改查提交

Showing 29 changed files with 755 additions and 88 deletions
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/vo/InspectionPlanSaveReqVO.java
@@ -33,6 +33,7 @@ public class InspectionPlanSaveReqVO { @@ -33,6 +33,7 @@ public class InspectionPlanSaveReqVO {
33 private Long companyId; 33 private Long companyId;
34 34
35 @Schema(description = "道路信息", requiredMode = Schema.RequiredMode.REQUIRED, example = "[{\"deptId\":11,\"roadId\":1,\"roadName\":\"测试\"}]") 35 @Schema(description = "道路信息", requiredMode = Schema.RequiredMode.REQUIRED, example = "[{\"deptId\":11,\"roadId\":1,\"roadName\":\"测试\"}]")
  36 + @NotNull
36 @Size(min = 1) 37 @Size(min = 1)
37 @Valid 38 @Valid
38 private List<InspectionPlanRoadReqVO> roadListReqVO; 39 private List<InspectionPlanRoadReqVO> roadListReqVO;
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/PlanRateController.java
@@ -8,7 +8,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; @@ -8,7 +8,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
8 import io.swagger.v3.oas.annotations.Parameter; 8 import io.swagger.v3.oas.annotations.Parameter;
9 import io.swagger.v3.oas.annotations.Operation; 9 import io.swagger.v3.oas.annotations.Operation;
10 10
11 -import jakarta.validation.constraints.*;  
12 import jakarta.validation.*; 11 import jakarta.validation.*;
13 import jakarta.servlet.http.*; 12 import jakarta.servlet.http.*;
14 import java.util.*; 13 import java.util.*;
@@ -18,12 +17,15 @@ import com.zteits.urbanops.framework.common.pojo.PageParam; @@ -18,12 +17,15 @@ import com.zteits.urbanops.framework.common.pojo.PageParam;
18 import com.zteits.urbanops.framework.common.pojo.PageResult; 17 import com.zteits.urbanops.framework.common.pojo.PageResult;
19 import com.zteits.urbanops.framework.common.pojo.CommonResult; 18 import com.zteits.urbanops.framework.common.pojo.CommonResult;
20 import com.zteits.urbanops.framework.common.util.object.BeanUtils; 19 import com.zteits.urbanops.framework.common.util.object.BeanUtils;
  20 +
  21 +import static com.zteits.urbanops.framework.common.pojo.CommonResult.error;
21 import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; 22 import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
22 23
23 import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; 24 import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
24 25
25 import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; 26 import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog;
26 import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; 27 import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*;
  28 +import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.PLAN_RATE_LEVEL_ID_DUPLICATE;
27 29
28 import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*; 30 import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*;
29 import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDO; 31 import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDO;
@@ -48,17 +50,20 @@ public class PlanRateController { @@ -48,17 +50,20 @@ public class PlanRateController {
48 @PutMapping("/update") 50 @PutMapping("/update")
49 @Operation(summary = "更新计划频次") 51 @Operation(summary = "更新计划频次")
50 @PreAuthorize("@ss.hasPermission('garden:plan-rate:update')") 52 @PreAuthorize("@ss.hasPermission('garden:plan-rate:update')")
51 - public CommonResult<Boolean> updatePlanRate(@Valid @RequestBody PlanRateSaveReqVO updateReqVO) { 53 + public CommonResult<Boolean> updatePlanRate(@Valid @RequestBody PlanRateUpdateReqVO updateReqVO) {
  54 + if(updateReqVO.verify()){
  55 + return error(PLAN_RATE_LEVEL_ID_DUPLICATE);
  56 + }
52 planRateService.updatePlanRate(updateReqVO); 57 planRateService.updatePlanRate(updateReqVO);
53 return success(true); 58 return success(true);
54 } 59 }
55 60
56 - @DeleteMapping("/delete") 61 + @DeleteMapping("/delete-rate-no")
57 @Operation(summary = "删除计划频次") 62 @Operation(summary = "删除计划频次")
58 - @Parameter(name = "id", description = "编号", required = true) 63 + @Parameter(name = "rateNo", description = "频次编号", required = true)
59 @PreAuthorize("@ss.hasPermission('garden:plan-rate:delete')") 64 @PreAuthorize("@ss.hasPermission('garden:plan-rate:delete')")
60 - public CommonResult<Boolean> deletePlanRate(@RequestParam("id") Long id) {  
61 - planRateService.deletePlanRate(id); 65 + public CommonResult<Boolean> deletePlanRate(@RequestParam("rateNo") String rateNo) {
  66 + planRateService.deletePlanRateByRateNo(rateNo);
62 return success(true); 67 return success(true);
63 } 68 }
64 69
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/PlanRateDetailController.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.controller.admin.planrate;
  2 +
  3 +import org.springframework.web.bind.annotation.*;
  4 +import jakarta.annotation.Resource;
  5 +import org.springframework.validation.annotation.Validated;
  6 +import org.springframework.security.access.prepost.PreAuthorize;
  7 +import io.swagger.v3.oas.annotations.tags.Tag;
  8 +import io.swagger.v3.oas.annotations.Parameter;
  9 +import io.swagger.v3.oas.annotations.Operation;
  10 +
  11 +import jakarta.validation.constraints.*;
  12 +import jakarta.validation.*;
  13 +import jakarta.servlet.http.*;
  14 +import java.util.*;
  15 +import java.io.IOException;
  16 +
  17 +import com.zteits.urbanops.framework.common.pojo.PageParam;
  18 +import com.zteits.urbanops.framework.common.pojo.PageResult;
  19 +import com.zteits.urbanops.framework.common.pojo.CommonResult;
  20 +import com.zteits.urbanops.framework.common.util.object.BeanUtils;
  21 +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
  22 +
  23 +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
  24 +
  25 +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog;
  26 +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*;
  27 +
  28 +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*;
  29 +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDetailDO;
  30 +import com.zteits.urbanops.module.garden.service.planrate.PlanRateDetailService;
  31 +
  32 +@Tag(name = "管理后台 - 计划频次明细")
  33 +@RestController
  34 +@RequestMapping("/garden/plan-rate-detail")
  35 +@Validated
  36 +public class PlanRateDetailController {
  37 +
  38 + @Resource
  39 + private PlanRateDetailService planRateDetailService;
  40 +
  41 + @PostMapping("/create")
  42 + @Operation(summary = "创建计划频次明细")
  43 + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:create')")
  44 + public CommonResult<Long> createPlanRateDetail(@Valid @RequestBody PlanRateDetailSaveReqVO createReqVO) {
  45 + return success(planRateDetailService.createPlanRateDetail(createReqVO));
  46 + }
  47 +
  48 + @PutMapping("/update")
  49 + @Operation(summary = "更新计划频次明细")
  50 + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:update')")
  51 + public CommonResult<Boolean> updatePlanRateDetail(@Valid @RequestBody PlanRateDetailSaveReqVO updateReqVO) {
  52 + planRateDetailService.updatePlanRateDetail(updateReqVO);
  53 + return success(true);
  54 + }
  55 +
  56 + @DeleteMapping("/delete")
  57 + @Operation(summary = "删除计划频次明细")
  58 + @Parameter(name = "id", description = "编号", required = true)
  59 + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:delete')")
  60 + public CommonResult<Boolean> deletePlanRateDetail(@RequestParam("id") Long id) {
  61 + planRateDetailService.deletePlanRateDetail(id);
  62 + return success(true);
  63 + }
  64 +
  65 + @DeleteMapping("/delete-list")
  66 + @Parameter(name = "ids", description = "编号", required = true)
  67 + @Operation(summary = "批量删除计划频次明细")
  68 + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:delete')")
  69 + public CommonResult<Boolean> deletePlanRateDetailList(@RequestParam("ids") List<Long> ids) {
  70 + planRateDetailService.deletePlanRateDetailListByIds(ids);
  71 + return success(true);
  72 + }
  73 +
  74 + @GetMapping("/get-rateNo")
  75 + @Operation(summary = "获得计划频次明细")
  76 + @Parameter(name = "rateNo", description = "编号", required = true, example = "1024")
  77 + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:query')")
  78 + public CommonResult<List<PlanRateDetailRespVO>> getPlanRateDetail(@RequestParam("rateNo") @NotBlank String rateNo) {
  79 + List<PlanRateDetailDO> detailList = planRateDetailService.getPlanRateDetailByRateNo(rateNo);
  80 + return success(BeanUtils.toBean(detailList, PlanRateDetailRespVO.class));
  81 + }
  82 +
  83 + @GetMapping("/page")
  84 + @Operation(summary = "获得计划频次明细分页")
  85 + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:query')")
  86 + public CommonResult<PageResult<PlanRateDetailRespVO>> getPlanRateDetailPage(@Valid PlanRateDetailPageReqVO pageReqVO) {
  87 + PageResult<PlanRateDetailDO> pageResult = planRateDetailService.getPlanRateDetailPage(pageReqVO);
  88 + return success(BeanUtils.toBean(pageResult, PlanRateDetailRespVO.class));
  89 + }
  90 +
  91 + @GetMapping("/export-excel")
  92 + @Operation(summary = "导出计划频次明细 Excel")
  93 + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:export')")
  94 + @ApiAccessLog(operateType = EXPORT)
  95 + public void exportPlanRateDetailExcel(@Valid PlanRateDetailPageReqVO pageReqVO,
  96 + HttpServletResponse response) throws IOException {
  97 + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
  98 + List<PlanRateDetailDO> list = planRateDetailService.getPlanRateDetailPage(pageReqVO).getList();
  99 + // 导出 Excel
  100 + ExcelUtils.write(response, "计划频次明细.xls", "数据", PlanRateDetailRespVO.class,
  101 + BeanUtils.toBean(list, PlanRateDetailRespVO.class));
  102 + }
  103 +
  104 +}
0 \ No newline at end of file 105 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateDetailPageReqVO.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.controller.admin.planrate.vo;
  2 +
  3 +import lombok.*;
  4 +import java.util.*;
  5 +import io.swagger.v3.oas.annotations.media.Schema;
  6 +import com.zteits.urbanops.framework.common.pojo.PageParam;
  7 +import org.springframework.format.annotation.DateTimeFormat;
  8 +import java.time.LocalDateTime;
  9 +
  10 +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  11 +
  12 +@Schema(description = "管理后台 - 计划频次明细分页 Request VO")
  13 +@Data
  14 +public class PlanRateDetailPageReqVO extends PageParam {
  15 +
  16 + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政")
  17 + private String busiLine;
  18 +
  19 + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", example = "7693")
  20 + private Integer planTypeId;
  21 +
  22 + @Schema(description = "级别: 10:特级;11:一级:12:二级;13:三级", example = "26893")
  23 + private Integer levelId;
  24 +
  25 + @Schema(description = "次数 如:1/3等")
  26 + private String rate;
  27 +
  28 + @Schema(description = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次", example = "11235")
  29 + private Integer cycleId;
  30 +
  31 + @Schema(description = "创建时间")
  32 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  33 + private LocalDateTime[] createTime;
  34 +
  35 +}
0 \ No newline at end of file 36 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateDetailRespVO.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.controller.admin.planrate.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.*;
  5 +import java.util.*;
  6 +import org.springframework.format.annotation.DateTimeFormat;
  7 +import java.time.LocalDateTime;
  8 +import cn.idev.excel.annotation.*;
  9 +
  10 +@Schema(description = "管理后台 - 计划频次明细 Response VO")
  11 +@Data
  12 +@ExcelIgnoreUnannotated
  13 +public class PlanRateDetailRespVO {
  14 +
  15 + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6428")
  16 + @ExcelProperty("ID")
  17 + private Long id;
  18 +
  19 + /**
  20 + * 频次编号
  21 + */
  22 + @Schema(description = "频次编号", requiredMode = Schema.RequiredMode.REQUIRED)
  23 + @ExcelProperty("频次编号")
  24 + private String rateNo;
  25 +
  26 + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED)
  27 + @ExcelProperty("业务线: yl-园林;wy-物业:sz-市政")
  28 + private String busiLine;
  29 +
  30 + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", requiredMode = Schema.RequiredMode.REQUIRED, example = "7693")
  31 + @ExcelProperty("养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;")
  32 + private Integer planTypeId;
  33 +
  34 + @Schema(description = "级别: 10:特级;11:一级:12:二级;13:三级", requiredMode = Schema.RequiredMode.REQUIRED, example = "26893")
  35 + @ExcelProperty("级别: 10:特级;11:一级:12:二级;13:三级")
  36 + private Integer levelId;
  37 +
  38 + @Schema(description = "次数 如:1/3等")
  39 + @ExcelProperty("次数 如:1/3等")
  40 + private String rate;
  41 +
  42 + @Schema(description = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次", requiredMode = Schema.RequiredMode.REQUIRED, example = "11235")
  43 + @ExcelProperty("周期ID: 1:日/次;2:周/次;3:月/次;4:年/次")
  44 + private Integer cycleId;
  45 +
  46 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  47 + @ExcelProperty("创建时间")
  48 + private LocalDateTime createTime;
  49 +
  50 +}
0 \ No newline at end of file 51 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateDetailSaveReqVO.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.controller.admin.planrate.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.*;
  5 +import java.util.*;
  6 +import jakarta.validation.constraints.*;
  7 +
  8 +@Schema(description = "管理后台 - 计划频次明细新增/修改 Request VO")
  9 +@Data
  10 +public class PlanRateDetailSaveReqVO {
  11 +
  12 +
  13 + @Schema(description = "级别: 10:特级;11:一级:12:二级;13:三级", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
  14 + @NotNull(message = "级别: 10:特级;11:一级:12:二级;13:三级不能为空")
  15 + private Integer levelId;
  16 +
  17 + @Schema(description = "次数 如:1/3等")
  18 + @NotEmpty(message = "次数不能为空")
  19 + private String rate;
  20 +
  21 + @Schema(description = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  22 + @NotNull(message = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次不能为空")
  23 + private Integer cycleId;
  24 +
  25 +}
0 \ No newline at end of file 26 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRatePageReqVO.java
@@ -13,26 +13,16 @@ import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YE @@ -13,26 +13,16 @@ import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YE
13 @Data 13 @Data
14 public class PlanRatePageReqVO extends PageParam { 14 public class PlanRatePageReqVO extends PageParam {
15 15
  16 + @Schema(description = "频次编号")
  17 + private String rateNo;
  18 +
16 @Schema(description = "业务线: yl-园林;wy-物业:sz-市政") 19 @Schema(description = "业务线: yl-园林;wy-物业:sz-市政")
17 private String busiLine; 20 private String busiLine;
18 21
19 - @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", example = "13649") 22 + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", example = "16546")
20 private Integer planTypeId; 23 private Integer planTypeId;
21 24
22 - @Schema(description = "级别: 10:特级;11:一级:12:二级;13:三级", example = "14661")  
23 - private Integer levelId;  
24 -  
25 - @Schema(description = "次数 如:1/3等")  
26 - private String rate;  
27 -  
28 - @Schema(description = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次", example = "17826")  
29 - private Integer cycleId;  
30 -  
31 @Schema(description = "是否为标准计划: 1:是;2:否") 25 @Schema(description = "是否为标准计划: 1:是;2:否")
32 private Integer stdPlan; 26 private Integer stdPlan;
33 27
34 - @Schema(description = "创建时间")  
35 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)  
36 - private LocalDateTime[] createTime;  
37 -  
38 } 28 }
39 \ No newline at end of file 29 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateRespVO.java
@@ -12,30 +12,22 @@ import cn.idev.excel.annotation.*; @@ -12,30 +12,22 @@ import cn.idev.excel.annotation.*;
12 @ExcelIgnoreUnannotated 12 @ExcelIgnoreUnannotated
13 public class PlanRateRespVO { 13 public class PlanRateRespVO {
14 14
15 - @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11435") 15 + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18948")
16 @ExcelProperty("ID") 16 @ExcelProperty("ID")
17 private Long id; 17 private Long id;
18 18
  19 + @Schema(description = "频次编号", requiredMode = Schema.RequiredMode.REQUIRED)
  20 + @ExcelProperty("频次编号")
  21 + private String rateNo;
  22 +
19 @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED) 23 @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED)
20 @ExcelProperty("业务线: yl-园林;wy-物业:sz-市政") 24 @ExcelProperty("业务线: yl-园林;wy-物业:sz-市政")
21 private String busiLine; 25 private String busiLine;
22 26
23 - @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", requiredMode = Schema.RequiredMode.REQUIRED, example = "13649") 27 + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", requiredMode = Schema.RequiredMode.REQUIRED, example = "16546")
24 @ExcelProperty("养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;") 28 @ExcelProperty("养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;")
25 private Integer planTypeId; 29 private Integer planTypeId;
26 30
27 - @Schema(description = "级别: 10:特级;11:一级:12:二级;13:三级", requiredMode = Schema.RequiredMode.REQUIRED, example = "14661")  
28 - @ExcelProperty("级别: 10:特级;11:一级:12:二级;13:三级")  
29 - private Integer levelId;  
30 -  
31 - @Schema(description = "次数 如:1/3等")  
32 - @ExcelProperty("次数 如:1/3等")  
33 - private String rate;  
34 -  
35 - @Schema(description = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次", requiredMode = Schema.RequiredMode.REQUIRED, example = "17826")  
36 - @ExcelProperty("周期ID: 1:日/次;2:周/次;3:月/次;4:年/次")  
37 - private Integer cycleId;  
38 -  
39 @Schema(description = "是否为标准计划: 1:是;2:否", requiredMode = Schema.RequiredMode.REQUIRED) 31 @Schema(description = "是否为标准计划: 1:是;2:否", requiredMode = Schema.RequiredMode.REQUIRED)
40 @ExcelProperty("是否为标准计划: 1:是;2:否") 32 @ExcelProperty("是否为标准计划: 1:是;2:否")
41 private Integer stdPlan; 33 private Integer stdPlan;
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateSaveReqVO.java
1 package com.zteits.urbanops.module.garden.controller.admin.planrate.vo; 1 package com.zteits.urbanops.module.garden.controller.admin.planrate.vo;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.Valid;
4 import lombok.*; 5 import lombok.*;
5 import java.util.*; 6 import java.util.*;
6 import jakarta.validation.constraints.*; 7 import jakarta.validation.constraints.*;
@@ -9,30 +10,22 @@ import jakarta.validation.constraints.*; @@ -9,30 +10,22 @@ import jakarta.validation.constraints.*;
9 @Data 10 @Data
10 public class PlanRateSaveReqVO { 11 public class PlanRateSaveReqVO {
11 12
12 - @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11435")  
13 - private Long id;  
14 13
15 @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED) 14 @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED)
16 @NotEmpty(message = "业务线: yl-园林;wy-物业:sz-市政不能为空") 15 @NotEmpty(message = "业务线: yl-园林;wy-物业:sz-市政不能为空")
17 private String busiLine; 16 private String busiLine;
18 17
19 - @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", requiredMode = Schema.RequiredMode.REQUIRED, example = "13649") 18 + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", requiredMode = Schema.RequiredMode.REQUIRED, example = "16546")
20 @NotNull(message = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;不能为空") 19 @NotNull(message = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;不能为空")
21 private Integer planTypeId; 20 private Integer planTypeId;
22 21
23 - @Schema(description = "级别: 10:特级;11:一级:12:二级;13:三级", requiredMode = Schema.RequiredMode.REQUIRED, example = "14661")  
24 - @NotNull(message = "级别: 10:特级;11:一级:12:二级;13:三级不能为空")  
25 - private Integer levelId;  
26 -  
27 - @Schema(description = "次数 如:1/3等")  
28 - private String rate;  
29 -  
30 - @Schema(description = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次", requiredMode = Schema.RequiredMode.REQUIRED, example = "17826")  
31 - @NotNull(message = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次不能为空")  
32 - private Integer cycleId;  
33 -  
34 @Schema(description = "是否为标准计划: 1:是;2:否", requiredMode = Schema.RequiredMode.REQUIRED) 22 @Schema(description = "是否为标准计划: 1:是;2:否", requiredMode = Schema.RequiredMode.REQUIRED)
35 @NotNull(message = "是否为标准计划: 1:是;2:否不能为空") 23 @NotNull(message = "是否为标准计划: 1:是;2:否不能为空")
36 private Integer stdPlan; 24 private Integer stdPlan;
37 25
  26 + @NotNull@NotNull(message = "频次明细不能为空")
  27 + @Size(min = 1)
  28 + @Valid
  29 + private List<PlanRateDetailSaveReqVO> details;
  30 +
38 } 31 }
39 \ No newline at end of file 32 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateUpdateReqVO.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.controller.admin.planrate.vo;
  2 +
  3 +import com.zteits.urbanops.module.garden.util.FieldDuplicateCheckerUtil;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import jakarta.validation.Valid;
  6 +import jakarta.validation.constraints.NotEmpty;
  7 +import jakarta.validation.constraints.NotNull;
  8 +import jakarta.validation.constraints.Size;
  9 +import lombok.Data;
  10 +
  11 +import java.util.List;
  12 +import java.util.Set;
  13 +import java.util.stream.Collectors;
  14 +
  15 +@Schema(description = "管理后台 - 计划频次新增/修改 Request VO")
  16 +@Data
  17 +public class PlanRateUpdateReqVO {
  18 + /**
  19 + * 频次编号
  20 + */
  21 + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED)
  22 + @NotEmpty(message = "频次编号不能为空")
  23 + private String rateNo;
  24 +
  25 + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED)
  26 + @NotEmpty(message = "业务线: yl-园林;wy-物业:sz-市政不能为空")
  27 + private String busiLine;
  28 +
  29 + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", requiredMode = Schema.RequiredMode.REQUIRED, example = "16546")
  30 + @NotNull(message = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;不能为空")
  31 + private Integer planTypeId;
  32 +
  33 + @Schema(description = "是否为标准计划: 1:是;2:否", requiredMode = Schema.RequiredMode.REQUIRED)
  34 + @NotNull(message = "是否为标准计划: 1:是;2:否不能为空")
  35 + private Integer stdPlan;
  36 +
  37 + @NotNull@NotNull(message = "频次明细不能为空")
  38 + @Size(min = 1)
  39 + @Valid
  40 + private List<PlanRateDetailSaveReqVO> details;
  41 +
  42 + public boolean verify() {
  43 + return FieldDuplicateCheckerUtil.hasDuplicate(details, PlanRateDetailSaveReqVO::getLevelId);
  44 + }
  45 +
  46 +
  47 +
  48 +}
0 \ No newline at end of file 49 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/planrate/PlanRateDO.java
@@ -28,6 +28,10 @@ public class PlanRateDO extends BaseDO { @@ -28,6 +28,10 @@ public class PlanRateDO extends BaseDO {
28 @TableId 28 @TableId
29 private Long id; 29 private Long id;
30 /** 30 /**
  31 + * 频次编号
  32 + */
  33 + private String rateNo;
  34 + /**
31 * 业务线: yl-园林;wy-物业:sz-市政 35 * 业务线: yl-园林;wy-物业:sz-市政
32 */ 36 */
33 private String busiLine; 37 private String busiLine;
@@ -36,18 +40,6 @@ public class PlanRateDO extends BaseDO { @@ -36,18 +40,6 @@ public class PlanRateDO extends BaseDO {
36 */ 40 */
37 private Integer planTypeId; 41 private Integer planTypeId;
38 /** 42 /**
39 - * 级别: 10:特级;11:一级:12:二级;13:三级  
40 - */  
41 - private Integer levelId;  
42 - /**  
43 - * 次数 如:1/3等  
44 - */  
45 - private String rate;  
46 - /**  
47 - * 周期ID: 1:日/次;2:周/次;3:月/次;4:年/次  
48 - */  
49 - private Integer cycleId;  
50 - /**  
51 * 是否为标准计划: 1:是;2:否 43 * 是否为标准计划: 1:是;2:否
52 */ 44 */
53 private Integer stdPlan; 45 private Integer stdPlan;
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/planrate/PlanRateDetailDO.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.dal.dataobject.planrate;
  2 +
  3 +import lombok.*;
  4 +import java.util.*;
  5 +import java.time.LocalDateTime;
  6 +import java.time.LocalDateTime;
  7 +import com.baomidou.mybatisplus.annotation.*;
  8 +import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO;
  9 +
  10 +/**
  11 + * 计划频次明细 DO
  12 + *
  13 + * @author 超级管理员
  14 + */
  15 +@TableName("garden_plan_rate_detail")
  16 +@KeySequence("garden_plan_rate_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
  17 +@Data
  18 +@EqualsAndHashCode(callSuper = true)
  19 +@ToString(callSuper = true)
  20 +@Builder
  21 +@NoArgsConstructor
  22 +@AllArgsConstructor
  23 +public class PlanRateDetailDO extends BaseDO {
  24 +
  25 + /**
  26 + * ID
  27 + */
  28 + @TableId
  29 + private Long id;
  30 + /**
  31 + * 频次编号
  32 + */
  33 + private String rateNo;
  34 + /**
  35 + * 业务线: yl-园林;wy-物业:sz-市政
  36 + */
  37 + private String busiLine;
  38 + /**
  39 + * 养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;
  40 + */
  41 + private Integer planTypeId;
  42 + /**
  43 + * 级别: 10:特级;11:一级:12:二级;13:三级
  44 + */
  45 + private Integer levelId;
  46 + /**
  47 + * 次数 如:1/3等
  48 + */
  49 + private String rate;
  50 + /**
  51 + * 周期ID: 1:日/次;2:周/次;3:月/次;4:年/次
  52 + */
  53 + private Integer cycleId;
  54 +
  55 +
  56 +}
0 \ No newline at end of file 57 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/inspectionplan/InspectionPlanDetailMapper.java
@@ -8,6 +8,7 @@ import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX; @@ -8,6 +8,7 @@ import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX;
8 import com.zteits.urbanops.module.garden.dal.dataobject.inspectionplan.InspectionPlanDetailDO; 8 import com.zteits.urbanops.module.garden.dal.dataobject.inspectionplan.InspectionPlanDetailDO;
9 import org.apache.ibatis.annotations.Mapper; 9 import org.apache.ibatis.annotations.Mapper;
10 import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.*; 10 import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.*;
  11 +import org.apache.ibatis.annotations.Param;
11 12
12 /** 13 /**
13 * 巡检计划 Mapper 14 * 巡检计划 Mapper
@@ -33,4 +34,6 @@ public interface InspectionPlanDetailMapper extends BaseMapperX&lt;InspectionPlanDe @@ -33,4 +34,6 @@ public interface InspectionPlanDetailMapper extends BaseMapperX&lt;InspectionPlanDe
33 .orderByDesc(InspectionPlanDetailDO::getId)); 34 .orderByDesc(InspectionPlanDetailDO::getId));
34 } 35 }
35 36
  37 + int deleteByBatchNo(@Param("batchNo") String batchNo);
  38 +
36 } 39 }
37 \ No newline at end of file 40 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/inspectionplan/InspectionPlanMapper.java
@@ -7,6 +7,7 @@ import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX; @@ -7,6 +7,7 @@ import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX;
7 import com.zteits.urbanops.module.garden.dal.dataobject.inspectionplan.InspectionPlanDO; 7 import com.zteits.urbanops.module.garden.dal.dataobject.inspectionplan.InspectionPlanDO;
8 import org.apache.ibatis.annotations.Mapper; 8 import org.apache.ibatis.annotations.Mapper;
9 import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.*; 9 import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.*;
  10 +import org.apache.ibatis.annotations.Param;
10 11
11 /** 12 /**
12 * 巡检计划汇总 Mapper 13 * 巡检计划汇总 Mapper
@@ -30,4 +31,6 @@ public interface InspectionPlanMapper extends BaseMapperX&lt;InspectionPlanDO&gt; { @@ -30,4 +31,6 @@ public interface InspectionPlanMapper extends BaseMapperX&lt;InspectionPlanDO&gt; {
30 .orderByDesc(InspectionPlanDO::getId)); 31 .orderByDesc(InspectionPlanDO::getId));
31 } 32 }
32 33
  34 + int deleteByBatchNo(@Param("batchNo") String batchNo);
  35 +
33 } 36 }
34 \ No newline at end of file 37 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/inspectionplan/InspectionPlanRoleMapper.java
1 package com.zteits.urbanops.module.garden.dal.mysql.inspectionplan; 1 package com.zteits.urbanops.module.garden.dal.mysql.inspectionplan;
2 2
3 -import java.util.*;  
4 3
5 import com.zteits.urbanops.framework.common.pojo.PageResult; 4 import com.zteits.urbanops.framework.common.pojo.PageResult;
6 import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX; 5 import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -8,6 +7,7 @@ import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX; @@ -8,6 +7,7 @@ import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX;
8 import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.InspectionPlanRolePageReqVO; 7 import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.InspectionPlanRolePageReqVO;
9 import com.zteits.urbanops.module.garden.dal.dataobject.inspectionplan.InspectionPlanRoleDO; 8 import com.zteits.urbanops.module.garden.dal.dataobject.inspectionplan.InspectionPlanRoleDO;
10 import org.apache.ibatis.annotations.Mapper; 9 import org.apache.ibatis.annotations.Mapper;
  10 +import org.apache.ibatis.annotations.Param;
11 11
12 /** 12 /**
13 * 巡检计划角色 Mapper 13 * 巡检计划角色 Mapper
@@ -27,4 +27,6 @@ public interface InspectionPlanRoleMapper extends BaseMapperX&lt;InspectionPlanRole @@ -27,4 +27,6 @@ public interface InspectionPlanRoleMapper extends BaseMapperX&lt;InspectionPlanRole
27 .orderByDesc(InspectionPlanRoleDO::getId)); 27 .orderByDesc(InspectionPlanRoleDO::getId));
28 } 28 }
29 29
  30 + int deleteByBatchNo(@Param("batchNo") String batchNo);
  31 +
30 } 32 }
31 \ No newline at end of file 33 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/planrate/PlanRateDetailMapper.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.dal.mysql.planrate;
  2 +
  3 +import java.util.*;
  4 +
  5 +import com.zteits.urbanops.framework.common.pojo.PageResult;
  6 +import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX;
  7 +import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX;
  8 +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDetailDO;
  9 +import org.apache.ibatis.annotations.Mapper;
  10 +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*;
  11 +import org.apache.ibatis.annotations.Param;
  12 +
  13 +/**
  14 + * 计划频次明细 Mapper
  15 + *
  16 + * @author 超级管理员
  17 + */
  18 +@Mapper
  19 +public interface PlanRateDetailMapper extends BaseMapperX<PlanRateDetailDO> {
  20 +
  21 + default PageResult<PlanRateDetailDO> selectPage(PlanRateDetailPageReqVO reqVO) {
  22 + return selectPage(reqVO, new LambdaQueryWrapperX<PlanRateDetailDO>()
  23 + .eqIfPresent(PlanRateDetailDO::getBusiLine, reqVO.getBusiLine())
  24 + .eqIfPresent(PlanRateDetailDO::getPlanTypeId, reqVO.getPlanTypeId())
  25 + .eqIfPresent(PlanRateDetailDO::getLevelId, reqVO.getLevelId())
  26 + .eqIfPresent(PlanRateDetailDO::getRate, reqVO.getRate())
  27 + .eqIfPresent(PlanRateDetailDO::getCycleId, reqVO.getCycleId())
  28 + .betweenIfPresent(PlanRateDetailDO::getCreateTime, reqVO.getCreateTime())
  29 + .orderByDesc(PlanRateDetailDO::getId));
  30 + }
  31 +
  32 + int deleteByRateNo(@Param("rateNo") String rateNo);
  33 +
  34 +}
0 \ No newline at end of file 35 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/planrate/PlanRateMapper.java
@@ -8,6 +8,7 @@ import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX; @@ -8,6 +8,7 @@ import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX;
8 import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDO; 8 import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDO;
9 import org.apache.ibatis.annotations.Mapper; 9 import org.apache.ibatis.annotations.Mapper;
10 import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*; 10 import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*;
  11 +import org.apache.ibatis.annotations.Param;
11 12
12 /** 13 /**
13 * 计划频次 Mapper 14 * 计划频次 Mapper
@@ -19,14 +20,13 @@ public interface PlanRateMapper extends BaseMapperX&lt;PlanRateDO&gt; { @@ -19,14 +20,13 @@ public interface PlanRateMapper extends BaseMapperX&lt;PlanRateDO&gt; {
19 20
20 default PageResult<PlanRateDO> selectPage(PlanRatePageReqVO reqVO) { 21 default PageResult<PlanRateDO> selectPage(PlanRatePageReqVO reqVO) {
21 return selectPage(reqVO, new LambdaQueryWrapperX<PlanRateDO>() 22 return selectPage(reqVO, new LambdaQueryWrapperX<PlanRateDO>()
  23 + .eqIfPresent(PlanRateDO::getRateNo, reqVO.getRateNo())
22 .eqIfPresent(PlanRateDO::getBusiLine, reqVO.getBusiLine()) 24 .eqIfPresent(PlanRateDO::getBusiLine, reqVO.getBusiLine())
23 .eqIfPresent(PlanRateDO::getPlanTypeId, reqVO.getPlanTypeId()) 25 .eqIfPresent(PlanRateDO::getPlanTypeId, reqVO.getPlanTypeId())
24 - .eqIfPresent(PlanRateDO::getLevelId, reqVO.getLevelId())  
25 - .eqIfPresent(PlanRateDO::getRate, reqVO.getRate())  
26 - .eqIfPresent(PlanRateDO::getCycleId, reqVO.getCycleId())  
27 .eqIfPresent(PlanRateDO::getStdPlan, reqVO.getStdPlan()) 26 .eqIfPresent(PlanRateDO::getStdPlan, reqVO.getStdPlan())
28 - .betweenIfPresent(PlanRateDO::getCreateTime, reqVO.getCreateTime())  
29 .orderByDesc(PlanRateDO::getId)); 27 .orderByDesc(PlanRateDO::getId));
30 } 28 }
31 29
  30 + int deleteByRateNo(@Param("rateNo") String rateNo);
  31 +
32 } 32 }
33 \ No newline at end of file 33 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java
@@ -58,4 +58,9 @@ public interface ErrorCodeConstants { @@ -58,4 +58,9 @@ public interface ErrorCodeConstants {
58 ErrorCode INSPECTION_CYCLE_ID_ERROR = new ErrorCode(1-200-100-002, "周期id错误"); 58 ErrorCode INSPECTION_CYCLE_ID_ERROR = new ErrorCode(1-200-100-002, "周期id错误");
59 ErrorCode INSPECTION_CYCLE_ERROR = new ErrorCode(1-200-100-003, "获取两个时间之间间隔天数错误"); 59 ErrorCode INSPECTION_CYCLE_ERROR = new ErrorCode(1-200-100-003, "获取两个时间之间间隔天数错误");
60 ErrorCode INSPECTION_PLAN_EXISTS = new ErrorCode(1-200-100-004, "道路对应类型已存在记录"); 60 ErrorCode INSPECTION_PLAN_EXISTS = new ErrorCode(1-200-100-004, "道路对应类型已存在记录");
  61 +
  62 + //========== 频次 TODO 补充编号 ==========
  63 + ErrorCode PLAN_RATE_EXISTS = new ErrorCode(1-200-200-001, "养护频次已存在");
  64 + ErrorCode PLAN_RATE_LEVEL_ID_DUPLICATE = new ErrorCode(1-200-200-002, "养护等级重复");
  65 +
61 } 66 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/inspectionplan/InspectionPlanServiceImpl.java
@@ -174,7 +174,8 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { @@ -174,7 +174,8 @@ public class InspectionPlanServiceImpl implements InspectionPlanService {
174 QueryWrapper<InspectionPlanDO> sql = new QueryWrapper<>(); 174 QueryWrapper<InspectionPlanDO> sql = new QueryWrapper<>();
175 sql.lambda().eq(InspectionPlanDO::getPlanTypeId, req.getPlanTypeId()) 175 sql.lambda().eq(InspectionPlanDO::getPlanTypeId, req.getPlanTypeId())
176 .in(InspectionPlanDO::getRoadId, roadIds) 176 .in(InspectionPlanDO::getRoadId, roadIds)
177 - .between(InspectionPlanDO::getBeginTime, req.getBeginTime(), req.getEndTime()); 177 + .le(InspectionPlanDO::getBeginTime, req.getEndTime()) // start_time <= endTime
  178 + .ge(InspectionPlanDO::getEndTime, req.getBeginTime()); // end_time >= startTime
178 179
179 Long count = inspectionPlanMapper.selectCount(sql); 180 Long count = inspectionPlanMapper.selectCount(sql);
180 if (count > 0) { 181 if (count > 0) {
@@ -201,9 +202,9 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { @@ -201,9 +202,9 @@ public class InspectionPlanServiceImpl implements InspectionPlanService {
201 202
202 @Override 203 @Override
203 public void deleteInspectionPlanByBatchNo(String batchNo) { 204 public void deleteInspectionPlanByBatchNo(String batchNo) {
204 - inspectionPlanMapper.delete(InspectionPlanDO::getBatchNo, batchNo);  
205 - inspectionPlanDetailMapper.delete(InspectionPlanDetailDO::getBatchNo, batchNo);  
206 - inspectionPlanRoleMapper.delete(InspectionPlanRoleDO::getBatchNo, batchNo); 205 + inspectionPlanMapper.deleteByBatchNo(batchNo);
  206 + inspectionPlanDetailMapper.deleteByBatchNo(batchNo);
  207 + inspectionPlanRoleMapper.deleteByBatchNo(batchNo);
207 } 208 }
208 209
209 } 210 }
210 \ No newline at end of file 211 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateDetailService.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.service.planrate;
  2 +
  3 +import java.util.*;
  4 +import jakarta.validation.*;
  5 +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*;
  6 +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDetailDO;
  7 +import com.zteits.urbanops.framework.common.pojo.PageResult;
  8 +import com.zteits.urbanops.framework.common.pojo.PageParam;
  9 +
  10 +/**
  11 + * 计划频次明细 Service 接口
  12 + *
  13 + * @author 超级管理员
  14 + */
  15 +public interface PlanRateDetailService {
  16 +
  17 + /**
  18 + * 创建计划频次明细
  19 + *
  20 + * @param createReqVO 创建信息
  21 + * @return 编号
  22 + */
  23 + Long createPlanRateDetail(@Valid PlanRateDetailSaveReqVO createReqVO);
  24 +
  25 + /**
  26 + * 更新计划频次明细
  27 + *
  28 + * @param updateReqVO 更新信息
  29 + */
  30 + void updatePlanRateDetail(@Valid PlanRateDetailSaveReqVO updateReqVO);
  31 +
  32 + /**
  33 + * 删除计划频次明细
  34 + *
  35 + * @param id 编号
  36 + */
  37 + void deletePlanRateDetail(Long id);
  38 +
  39 + /**
  40 + * 批量删除计划频次明细
  41 + *
  42 + * @param ids 编号
  43 + */
  44 + void deletePlanRateDetailListByIds(List<Long> ids);
  45 +
  46 + /**
  47 + * 获得计划频次明细
  48 + *
  49 + * @param id 编号
  50 + * @return 计划频次明细
  51 + */
  52 + PlanRateDetailDO getPlanRateDetail(Long id);
  53 +
  54 + /**
  55 + * 获得计划频次明细分页
  56 + *
  57 + * @param pageReqVO 分页查询
  58 + * @return 计划频次明细分页
  59 + */
  60 + PageResult<PlanRateDetailDO> getPlanRateDetailPage(PlanRateDetailPageReqVO pageReqVO);
  61 +
  62 + /**
  63 + * 获得计划频次明细
  64 + *
  65 + * @param rateNo 编号
  66 + * @return 计划频次明细列表
  67 + */
  68 + List<PlanRateDetailDO> getPlanRateDetailByRateNo(String rateNo);
  69 +
  70 +}
0 \ No newline at end of file 71 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateDetailServiceImpl.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.service.planrate;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4 +import org.springframework.stereotype.Service;
  5 +import jakarta.annotation.Resource;
  6 +import org.springframework.validation.annotation.Validated;
  7 +
  8 +import java.util.*;
  9 +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*;
  10 +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDetailDO;
  11 +import com.zteits.urbanops.framework.common.pojo.PageResult;
  12 +import com.zteits.urbanops.framework.common.util.object.BeanUtils;
  13 +
  14 +import com.zteits.urbanops.module.garden.dal.mysql.planrate.PlanRateDetailMapper;
  15 +
  16 +/**
  17 + * 计划频次明细 Service 实现类
  18 + *
  19 + * @author 超级管理员
  20 + */
  21 +@Service
  22 +@Validated
  23 +public class PlanRateDetailServiceImpl implements PlanRateDetailService {
  24 +
  25 + @Resource
  26 + private PlanRateDetailMapper planRateDetailMapper;
  27 +
  28 + @Override
  29 + public Long createPlanRateDetail(PlanRateDetailSaveReqVO createReqVO) {
  30 + // 插入
  31 + PlanRateDetailDO planRateDetail = BeanUtils.toBean(createReqVO, PlanRateDetailDO.class);
  32 + planRateDetailMapper.insert(planRateDetail);
  33 +
  34 + // 返回
  35 + return planRateDetail.getId();
  36 + }
  37 +
  38 + @Override
  39 + public void updatePlanRateDetail(PlanRateDetailSaveReqVO updateReqVO) {
  40 + // 校验存在
  41 + //validatePlanRateDetailExists(updateReqVO.getId());
  42 + // 更新
  43 + PlanRateDetailDO updateObj = BeanUtils.toBean(updateReqVO, PlanRateDetailDO.class);
  44 + planRateDetailMapper.updateById(updateObj);
  45 + }
  46 +
  47 + @Override
  48 + public void deletePlanRateDetail(Long id) {
  49 + // 校验存在
  50 + validatePlanRateDetailExists(id);
  51 + // 删除
  52 + planRateDetailMapper.deleteById(id);
  53 + }
  54 +
  55 + @Override
  56 + public void deletePlanRateDetailListByIds(List<Long> ids) {
  57 + // 删除
  58 + planRateDetailMapper.deleteByIds(ids);
  59 + }
  60 +
  61 +
  62 + private void validatePlanRateDetailExists(Long id) {
  63 + if (planRateDetailMapper.selectById(id) == null) {
  64 + //throw exception("");
  65 + }
  66 + }
  67 +
  68 + @Override
  69 + public PlanRateDetailDO getPlanRateDetail(Long id) {
  70 + return planRateDetailMapper.selectById(id);
  71 + }
  72 +
  73 + @Override
  74 + public PageResult<PlanRateDetailDO> getPlanRateDetailPage(PlanRateDetailPageReqVO pageReqVO) {
  75 + return planRateDetailMapper.selectPage(pageReqVO);
  76 + }
  77 +
  78 + @Override
  79 + public List<PlanRateDetailDO> getPlanRateDetailByRateNo(String rateNo) {
  80 + QueryWrapper<PlanRateDetailDO> sql = new QueryWrapper<>();
  81 + sql.lambda().eq(PlanRateDetailDO::getRateNo, rateNo);
  82 + return planRateDetailMapper.selectList(sql);
  83 + }
  84 +
  85 +}
0 \ No newline at end of file 86 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateService.java
@@ -27,7 +27,7 @@ public interface PlanRateService { @@ -27,7 +27,7 @@ public interface PlanRateService {
27 * 27 *
28 * @param updateReqVO 更新信息 28 * @param updateReqVO 更新信息
29 */ 29 */
30 - void updatePlanRate(@Valid PlanRateSaveReqVO updateReqVO); 30 + void updatePlanRate(@Valid PlanRateUpdateReqVO updateReqVO);
31 31
32 /** 32 /**
33 * 删除计划频次 33 * 删除计划频次
@@ -44,6 +44,13 @@ public interface PlanRateService { @@ -44,6 +44,13 @@ public interface PlanRateService {
44 void deletePlanRateListByIds(List<Long> ids); 44 void deletePlanRateListByIds(List<Long> ids);
45 45
46 /** 46 /**
  47 + * 批量删除计划频次
  48 + *
  49 + * @param rateNo 编号
  50 + */
  51 + void deletePlanRateByRateNo(String rateNo);
  52 +
  53 + /**
47 * 获得计划频次 54 * 获得计划频次
48 * 55 *
49 * @param id 编号 56 * @param id 编号
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateServiceImpl.java
1 package com.zteits.urbanops.module.garden.service.planrate; 1 package com.zteits.urbanops.module.garden.service.planrate;
2 2
3 -import cn.hutool.core.collection.CollUtil; 3 +import cn.hutool.core.date.DateUtil;
  4 +import cn.hutool.core.util.RandomUtil;
  5 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6 +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  7 +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils;
  8 +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDetailDO;
  9 +import com.zteits.urbanops.module.garden.dal.mysql.planrate.PlanRateDetailMapper;
4 import org.springframework.stereotype.Service; 10 import org.springframework.stereotype.Service;
5 import jakarta.annotation.Resource; 11 import jakarta.annotation.Resource;
6 import org.springframework.validation.annotation.Validated; 12 import org.springframework.validation.annotation.Validated;
7 import org.springframework.transaction.annotation.Transactional; 13 import org.springframework.transaction.annotation.Transactional;
8 14
  15 +import java.time.LocalDateTime;
9 import java.util.*; 16 import java.util.*;
  17 +
10 import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*; 18 import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*;
11 import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDO; 19 import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDO;
12 import com.zteits.urbanops.framework.common.pojo.PageResult; 20 import com.zteits.urbanops.framework.common.pojo.PageResult;
13 -import com.zteits.urbanops.framework.common.pojo.PageParam;  
14 -import com.zteits.urbanops.framework.common.util.object.BeanUtils;  
15 21
16 import com.zteits.urbanops.module.garden.dal.mysql.planrate.PlanRateMapper; 22 import com.zteits.urbanops.module.garden.dal.mysql.planrate.PlanRateMapper;
17 23
18 import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; 24 import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
19 -import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertList;  
20 -import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.diffList;  
21 import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; 25 import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*;
22 26
23 /** 27 /**
@@ -32,43 +36,111 @@ public class PlanRateServiceImpl implements PlanRateService { @@ -32,43 +36,111 @@ public class PlanRateServiceImpl implements PlanRateService {
32 @Resource 36 @Resource
33 private PlanRateMapper planRateMapper; 37 private PlanRateMapper planRateMapper;
34 38
  39 + @Resource
  40 + private PlanRateDetailMapper planRateDetailMapper;
  41 +
  42 + @Transactional(rollbackFor = Exception.class)
35 @Override 43 @Override
36 public Long createPlanRate(PlanRateSaveReqVO createReqVO) { 44 public Long createPlanRate(PlanRateSaveReqVO createReqVO) {
37 - // 插入  
38 - PlanRateDO planRate = BeanUtils.toBean(createReqVO, PlanRateDO.class); 45 + // 校验存在
  46 + validatePlanRateExists(createReqVO.getPlanTypeId(), createReqVO.getBusiLine());
  47 + LocalDateTime now = LocalDateTime.now();
  48 + String userName = SecurityFrameworkUtils.getLoginUserId() + "";
  49 + String rateNo = DateUtil.format(new Date(), "yyyyMMddHHmmssSSS") + RandomUtil.randomInt(1000);
  50 + PlanRateDO planRate = new PlanRateDO();
  51 + planRate.setRateNo(rateNo);
  52 + planRate.setStdPlan(createReqVO.getStdPlan());
  53 + planRate.setBusiLine(createReqVO.getBusiLine());
  54 + planRate.setPlanTypeId(createReqVO.getPlanTypeId());
  55 + planRate.setCreator(userName);
  56 + planRate.setCreateTime(now);
  57 + planRate.setUpdater(userName);
  58 + planRate.setUpdateTime(now);
  59 + /*1.插入频次主表*/
39 planRateMapper.insert(planRate); 60 planRateMapper.insert(planRate);
40 61
  62 + List<PlanRateDetailDO> list = new ArrayList<>();
  63 + createReqVO.getDetails().forEach(detail -> {
  64 + PlanRateDetailDO detailDO = new PlanRateDetailDO();
  65 + detailDO.setRateNo(rateNo);
  66 + detailDO.setBusiLine(createReqVO.getBusiLine());
  67 + detailDO.setPlanTypeId(createReqVO.getPlanTypeId());
  68 + detailDO.setLevelId(detail.getLevelId());
  69 + detailDO.setRate(detail.getRate());
  70 + detailDO.setCycleId(detail.getCycleId());
  71 + detailDO.setCreator(userName);
  72 + detailDO.setCreateTime(now);
  73 + detailDO.setUpdater(userName);
  74 + detailDO.setUpdateTime(now);
  75 + list.add(detailDO);
  76 + });
  77 + /*2.插入频次明细*/
  78 + planRateDetailMapper.insertBatch(list);
41 // 返回 79 // 返回
42 return planRate.getId(); 80 return planRate.getId();
43 } 81 }
44 82
  83 + @Transactional(rollbackFor = Exception.class)
45 @Override 84 @Override
46 - public void updatePlanRate(PlanRateSaveReqVO updateReqVO) {  
47 - // 校验存在  
48 - validatePlanRateExists(updateReqVO.getId()); 85 + public void updatePlanRate(PlanRateUpdateReqVO updateReqVO) {
  86 + /*1.删除明细*/
  87 + int count = planRateDetailMapper.deleteByRateNo(updateReqVO.getRateNo());
  88 + LocalDateTime now = LocalDateTime.now();
  89 + String userName = SecurityFrameworkUtils.getLoginUserId() + "";
  90 + UpdateWrapper<PlanRateDO> updateSql = new UpdateWrapper<>();
  91 + updateSql.lambda()
  92 + .set(PlanRateDO::getStdPlan, updateReqVO.getStdPlan())
  93 + .set(PlanRateDO::getUpdater, userName)
  94 + .set(PlanRateDO::getUpdateTime, now)
  95 + .eq(PlanRateDO::getRateNo, updateReqVO.getRateNo());
  96 + /*2.更新主表*/
  97 + planRateMapper.update(updateSql);
49 // 更新 98 // 更新
50 - PlanRateDO updateObj = BeanUtils.toBean(updateReqVO, PlanRateDO.class);  
51 - planRateMapper.updateById(updateObj); 99 + List<PlanRateDetailDO> list = new ArrayList<>();
  100 + updateReqVO.getDetails().forEach(detail -> {
  101 + PlanRateDetailDO detailDO = new PlanRateDetailDO();
  102 + detailDO.setRateNo(updateReqVO.getRateNo());
  103 + detailDO.setBusiLine(updateReqVO.getBusiLine());
  104 + detailDO.setPlanTypeId(updateReqVO.getPlanTypeId());
  105 + detailDO.setLevelId(detail.getLevelId());
  106 + detailDO.setRate(detail.getRate());
  107 + detailDO.setCycleId(detail.getCycleId());
  108 + detailDO.setCreator(userName);
  109 + detailDO.setCreateTime(now);
  110 + detailDO.setUpdater(userName);
  111 + detailDO.setUpdateTime(now);
  112 + list.add(detailDO);
  113 + });
  114 + /*3.插入频次明细*/
  115 + planRateDetailMapper.insertBatch(list);
52 } 116 }
53 117
54 @Override 118 @Override
55 public void deletePlanRate(Long id) { 119 public void deletePlanRate(Long id) {
56 // 校验存在 120 // 校验存在
57 - validatePlanRateExists(id); 121 + //validatePlanRateExists(id);
58 // 删除 122 // 删除
59 planRateMapper.deleteById(id); 123 planRateMapper.deleteById(id);
60 } 124 }
61 125
62 @Override 126 @Override
63 - public void deletePlanRateListByIds(List<Long> ids) { 127 + public void deletePlanRateListByIds(List<Long> ids) {
64 // 删除 128 // 删除
65 planRateMapper.deleteByIds(ids); 129 planRateMapper.deleteByIds(ids);
66 - } 130 + }
  131 +
  132 + @Override
  133 + public void deletePlanRateByRateNo(String rateNo) {
  134 + planRateMapper.deleteByRateNo(rateNo);
  135 + planRateDetailMapper.deleteByRateNo(rateNo);
  136 + }
67 137
68 138
69 - private void validatePlanRateExists(Long id) {  
70 - if (planRateMapper.selectById(id) == null) {  
71 - //throw exception(PLAN_RATE_NOT_EXISTS); 139 + private void validatePlanRateExists(Integer planTypeId, String busiLine) {
  140 + QueryWrapper<PlanRateDO> sql = new QueryWrapper<>();
  141 + sql.lambda().eq(PlanRateDO::getPlanTypeId, planTypeId).eq(PlanRateDO::getBusiLine, busiLine);
  142 + if (planRateMapper.selectCount(sql) > 0) {
  143 + throw exception(PLAN_RATE_EXISTS);
72 } 144 }
73 } 145 }
74 146
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/util/FieldDuplicateCheckerUtil.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.util;
  2 +import java.util.LinkedHashSet;
  3 +import java.util.List;
  4 +import java.util.Set;
  5 +import java.util.function.Function;
  6 +
  7 +public class FieldDuplicateCheckerUtil {
  8 +
  9 + /**
  10 + * 通用判断:指定字段是否存在重复值
  11 + * @param list 目标列表(可为 null/空)
  12 + * @param fieldExtractor 字段提取器(如 User::getId、User::getName)
  13 + * @param <T> 列表元素类型
  14 + * @param <R> 字段类型(需重写 equals/hashCode,如 Long、String、自定义类)
  15 + * @return true=存在重复,false=无重复
  16 + */
  17 + public static <T, R> boolean hasDuplicate(List<T> list, Function<T, R> fieldExtractor) {
  18 + // 边界条件:空列表或仅1个元素,直接返回无重复
  19 + if (list == null || list.size() <= 1) {
  20 + return false;
  21 + }
  22 +
  23 + Set<R> fieldSet = new LinkedHashSet<>(); // 用于存储已出现的字段值
  24 + for (T item : list) {
  25 + R fieldValue = fieldExtractor.apply(item); // 提取当前对象的字段值
  26 +
  27 + // 处理 null 值:多个 null 视为重复
  28 + if (fieldValue == null) {
  29 + // 统计 null 出现次数,>1 则返回重复
  30 + long nullCount = list.stream().filter(t -> fieldExtractor.apply(t) == null).count();
  31 + return nullCount > 1;
  32 + }
  33 +
  34 + // 非 null 值:添加到 Set 失败(已存在)→ 存在重复,短路返回
  35 + if (!fieldSet.add(fieldValue)) {
  36 + return true;
  37 + }
  38 + }
  39 +
  40 + // 遍历完成无重复
  41 + return false;
  42 + }
  43 +}
urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanDetailMapper.xml
@@ -8,5 +8,8 @@ @@ -8,5 +8,8 @@
8 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 8 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
9 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ 9 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
10 --> 10 -->
  11 + <delete id="deleteByBatchNo">
  12 + delete from garden_inspection_plan_detail where batch_no =#{batchNo}
  13 + </delete>
11 14
12 </mapper> 15 </mapper>
13 \ No newline at end of file 16 \ No newline at end of file
urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanMapper.xml
@@ -9,4 +9,8 @@ @@ -9,4 +9,8 @@
9 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ 9 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
10 --> 10 -->
11 11
  12 + <delete id="deleteByBatchNo">
  13 + delete from garden_inspection_plan where batch_no =#{batchNo}
  14 + </delete>
  15 +
12 </mapper> 16 </mapper>
13 \ No newline at end of file 17 \ No newline at end of file
urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanRoleMapper.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +<mapper namespace="com.zteits.urbanops.module.garden.dal.mysql.inspectionplan.InspectionPlanRoleMapper">
  4 +
  5 + <!--
  6 + 一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
  7 + 无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
  8 + 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
  9 + 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
  10 + -->
  11 + <delete id="deleteByBatchNo">
  12 + delete from garden_inspection_plan_role where batch_no =#{batchNo}
  13 + </delete>
  14 +
  15 +</mapper>
0 \ No newline at end of file 16 \ No newline at end of file
urbanops-module-garden/src/main/resources/mapper/planrate/PlanRateDetailMapper.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +<mapper namespace="com.zteits.urbanops.module.garden.dal.mysql.planrate.PlanRateDetailMapper">
  4 +
  5 + <!--
  6 + 一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
  7 + 无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
  8 + 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
  9 + 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
  10 + -->
  11 +
  12 + <delete id="deleteByRateNo">
  13 + delete from garden_plan_rate_detail where rate_no=#{rateNo}
  14 + </delete>
  15 +</mapper>
0 \ No newline at end of file 16 \ No newline at end of file
urbanops-module-garden/src/main/resources/mapper/planrate/PlanRateMapper.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +<mapper namespace="com.zteits.urbanops.module.garden.dal.mysql.planrate.PlanRateMapper">
  4 +
  5 + <!--
  6 + 一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
  7 + 无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
  8 + 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
  9 + 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
  10 + -->
  11 + <delete id="deleteByRateNo">
  12 + delete from garden_plan_rate_detail where rate_no=#{rateNo}
  13 + </delete>
  14 +</mapper>
0 \ No newline at end of file 15 \ No newline at end of file