Commit 37275c2e5c02bb1457c4fea94901539d8debc5b8

Authored by 王富生
2 parents a7316779 43845f6a

Merge branch 'de_wangfs_202511' into dev

Showing 32 changed files with 1153 additions and 5 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 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.*;
  12 +import jakarta.servlet.http.*;
  13 +import java.util.*;
  14 +import java.io.IOException;
  15 +
  16 +import com.zteits.urbanops.framework.common.pojo.PageParam;
  17 +import com.zteits.urbanops.framework.common.pojo.PageResult;
  18 +import com.zteits.urbanops.framework.common.pojo.CommonResult;
  19 +import com.zteits.urbanops.framework.common.util.object.BeanUtils;
  20 +
  21 +import static com.zteits.urbanops.framework.common.pojo.CommonResult.error;
  22 +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
  23 +
  24 +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
  25 +
  26 +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog;
  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;
  29 +
  30 +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*;
  31 +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDO;
  32 +import com.zteits.urbanops.module.garden.service.planrate.PlanRateService;
  33 +
  34 +@Tag(name = "管理后台 - 计划频次")
  35 +@RestController
  36 +@RequestMapping("/garden/plan-rate")
  37 +@Validated
  38 +public class PlanRateController {
  39 +
  40 + @Resource
  41 + private PlanRateService planRateService;
  42 +
  43 + @PostMapping("/create")
  44 + @Operation(summary = "创建计划频次")
  45 + @PreAuthorize("@ss.hasPermission('garden:plan-rate:create')")
  46 + public CommonResult<Long> createPlanRate(@Valid @RequestBody PlanRateSaveReqVO createReqVO) {
  47 + return success(planRateService.createPlanRate(createReqVO));
  48 + }
  49 +
  50 + @PutMapping("/update")
  51 + @Operation(summary = "更新计划频次")
  52 + @PreAuthorize("@ss.hasPermission('garden:plan-rate:update')")
  53 + public CommonResult<Boolean> updatePlanRate(@Valid @RequestBody PlanRateUpdateReqVO updateReqVO) {
  54 + if(updateReqVO.verify()){
  55 + return error(PLAN_RATE_LEVEL_ID_DUPLICATE);
  56 + }
  57 + planRateService.updatePlanRate(updateReqVO);
  58 + return success(true);
  59 + }
  60 +
  61 + @DeleteMapping("/delete-rate-no")
  62 + @Operation(summary = "删除计划频次")
  63 + @Parameter(name = "rateNo", description = "频次编号", required = true)
  64 + @PreAuthorize("@ss.hasPermission('garden:plan-rate:delete')")
  65 + public CommonResult<Boolean> deletePlanRate(@RequestParam("rateNo") String rateNo) {
  66 + planRateService.deletePlanRateByRateNo(rateNo);
  67 + return success(true);
  68 + }
  69 +
  70 + @DeleteMapping("/delete-list")
  71 + @Parameter(name = "ids", description = "编号", required = true)
  72 + @Operation(summary = "批量删除计划频次")
  73 + @PreAuthorize("@ss.hasPermission('garden:plan-rate:delete')")
  74 + public CommonResult<Boolean> deletePlanRateList(@RequestParam("ids") List<Long> ids) {
  75 + planRateService.deletePlanRateListByIds(ids);
  76 + return success(true);
  77 + }
  78 +
  79 + @GetMapping("/get")
  80 + @Operation(summary = "获得计划频次")
  81 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  82 + @PreAuthorize("@ss.hasPermission('garden:plan-rate:query')")
  83 + public CommonResult<PlanRateRespVO> getPlanRate(@RequestParam("id") Long id) {
  84 + PlanRateDO planRate = planRateService.getPlanRate(id);
  85 + return success(BeanUtils.toBean(planRate, PlanRateRespVO.class));
  86 + }
  87 +
  88 + @GetMapping("/page")
  89 + @Operation(summary = "获得计划频次分页")
  90 + @PreAuthorize("@ss.hasPermission('garden:plan-rate:query')")
  91 + public CommonResult<PageResult<PlanRateRespVO>> getPlanRatePage(@Valid PlanRatePageReqVO pageReqVO) {
  92 + PageResult<PlanRateDO> pageResult = planRateService.getPlanRatePage(pageReqVO);
  93 + return success(BeanUtils.toBean(pageResult, PlanRateRespVO.class));
  94 + }
  95 +
  96 + @GetMapping("/export-excel")
  97 + @Operation(summary = "导出计划频次 Excel")
  98 + @PreAuthorize("@ss.hasPermission('garden:plan-rate:export')")
  99 + @ApiAccessLog(operateType = EXPORT)
  100 + public void exportPlanRateExcel(@Valid PlanRatePageReqVO pageReqVO,
  101 + HttpServletResponse response) throws IOException {
  102 + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
  103 + List<PlanRateDO> list = planRateService.getPlanRatePage(pageReqVO).getList();
  104 + // 导出 Excel
  105 + ExcelUtils.write(response, "计划频次.xls", "数据", PlanRateRespVO.class,
  106 + BeanUtils.toBean(list, PlanRateRespVO.class));
  107 + }
  108 +
  109 +}
0 \ No newline at end of file 110 \ No newline at end of file
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 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 PlanRatePageReqVO extends PageParam {
  15 +
  16 + @Schema(description = "频次编号")
  17 + private String rateNo;
  18 +
  19 + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政")
  20 + private String busiLine;
  21 +
  22 + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", example = "16546")
  23 + private Integer planTypeId;
  24 +
  25 + @Schema(description = "是否为标准计划: 1:是;2:否")
  26 + private Integer stdPlan;
  27 +
  28 +}
0 \ 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 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 PlanRateRespVO {
  14 +
  15 + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18948")
  16 + @ExcelProperty("ID")
  17 + private Long id;
  18 +
  19 + @Schema(description = "频次编号", requiredMode = Schema.RequiredMode.REQUIRED)
  20 + @ExcelProperty("频次编号")
  21 + private String rateNo;
  22 +
  23 + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED)
  24 + @ExcelProperty("业务线: yl-园林;wy-物业:sz-市政")
  25 + private String busiLine;
  26 +
  27 + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", requiredMode = Schema.RequiredMode.REQUIRED, example = "16546")
  28 + @ExcelProperty("养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;")
  29 + private Integer planTypeId;
  30 +
  31 + @Schema(description = "是否为标准计划: 1:是;2:否", requiredMode = Schema.RequiredMode.REQUIRED)
  32 + @ExcelProperty("是否为标准计划: 1:是;2:否")
  33 + private Integer stdPlan;
  34 +
  35 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  36 + @ExcelProperty("创建时间")
  37 + private LocalDateTime createTime;
  38 +
  39 +}
0 \ No newline at end of file 40 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateSaveReqVO.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 jakarta.validation.Valid;
  5 +import lombok.*;
  6 +import java.util.*;
  7 +import jakarta.validation.constraints.*;
  8 +
  9 +@Schema(description = "管理后台 - 计划频次新增/修改 Request VO")
  10 +@Data
  11 +public class PlanRateSaveReqVO {
  12 +
  13 +
  14 + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED)
  15 + @NotEmpty(message = "业务线: yl-园林;wy-物业:sz-市政不能为空")
  16 + private String busiLine;
  17 +
  18 + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", requiredMode = Schema.RequiredMode.REQUIRED, example = "16546")
  19 + @NotNull(message = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;不能为空")
  20 + private Integer planTypeId;
  21 +
  22 + @Schema(description = "是否为标准计划: 1:是;2:否", requiredMode = Schema.RequiredMode.REQUIRED)
  23 + @NotNull(message = "是否为标准计划: 1:是;2:否不能为空")
  24 + private Integer stdPlan;
  25 +
  26 + @NotNull@NotNull(message = "频次明细不能为空")
  27 + @Size(min = 1)
  28 + @Valid
  29 + private List<PlanRateDetailSaveReqVO> details;
  30 +
  31 +}
0 \ 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 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")
  16 +@KeySequence("garden_plan_rate_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 PlanRateDO 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 + * 是否为标准计划: 1:是;2:否
  44 + */
  45 + private Integer stdPlan;
  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/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 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.PlanRateDO;
  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 PlanRateMapper extends BaseMapperX<PlanRateDO> {
  20 +
  21 + default PageResult<PlanRateDO> selectPage(PlanRatePageReqVO reqVO) {
  22 + return selectPage(reqVO, new LambdaQueryWrapperX<PlanRateDO>()
  23 + .eqIfPresent(PlanRateDO::getRateNo, reqVO.getRateNo())
  24 + .eqIfPresent(PlanRateDO::getBusiLine, reqVO.getBusiLine())
  25 + .eqIfPresent(PlanRateDO::getPlanTypeId, reqVO.getPlanTypeId())
  26 + .eqIfPresent(PlanRateDO::getStdPlan, reqVO.getStdPlan())
  27 + .orderByDesc(PlanRateDO::getId));
  28 + }
  29 +
  30 + int deleteByRateNo(@Param("rateNo") String rateNo);
  31 +
  32 +}
0 \ 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
@@ -60,4 +60,9 @@ public interface ErrorCodeConstants { @@ -60,4 +60,9 @@ public interface ErrorCodeConstants {
60 ErrorCode INSPECTION_CYCLE_ID_ERROR = new ErrorCode(1-200-100-002, "周期id错误"); 60 ErrorCode INSPECTION_CYCLE_ID_ERROR = new ErrorCode(1-200-100-002, "周期id错误");
61 ErrorCode INSPECTION_CYCLE_ERROR = new ErrorCode(1-200-100-003, "获取两个时间之间间隔天数错误"); 61 ErrorCode INSPECTION_CYCLE_ERROR = new ErrorCode(1-200-100-003, "获取两个时间之间间隔天数错误");
62 ErrorCode INSPECTION_PLAN_EXISTS = new ErrorCode(1-200-100-004, "道路对应类型已存在记录"); 62 ErrorCode INSPECTION_PLAN_EXISTS = new ErrorCode(1-200-100-004, "道路对应类型已存在记录");
  63 +
  64 + //========== 频次 TODO 补充编号 ==========
  65 + ErrorCode PLAN_RATE_EXISTS = new ErrorCode(1-200-200-001, "养护频次已存在");
  66 + ErrorCode PLAN_RATE_LEVEL_ID_DUPLICATE = new ErrorCode(1-200-200-002, "养护等级重复");
  67 +
63 } 68 }
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 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.PlanRateDO;
  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 PlanRateService {
  16 +
  17 + /**
  18 + * 创建计划频次
  19 + *
  20 + * @param createReqVO 创建信息
  21 + * @return 编号
  22 + */
  23 + Long createPlanRate(@Valid PlanRateSaveReqVO createReqVO);
  24 +
  25 + /**
  26 + * 更新计划频次
  27 + *
  28 + * @param updateReqVO 更新信息
  29 + */
  30 + void updatePlanRate(@Valid PlanRateUpdateReqVO updateReqVO);
  31 +
  32 + /**
  33 + * 删除计划频次
  34 + *
  35 + * @param id 编号
  36 + */
  37 + void deletePlanRate(Long id);
  38 +
  39 + /**
  40 + * 批量删除计划频次
  41 + *
  42 + * @param ids 编号
  43 + */
  44 + void deletePlanRateListByIds(List<Long> ids);
  45 +
  46 + /**
  47 + * 批量删除计划频次
  48 + *
  49 + * @param rateNo 编号
  50 + */
  51 + void deletePlanRateByRateNo(String rateNo);
  52 +
  53 + /**
  54 + * 获得计划频次
  55 + *
  56 + * @param id 编号
  57 + * @return 计划频次
  58 + */
  59 + PlanRateDO getPlanRate(Long id);
  60 +
  61 + /**
  62 + * 获得计划频次分页
  63 + *
  64 + * @param pageReqVO 分页查询
  65 + * @return 计划频次分页
  66 + */
  67 + PageResult<PlanRateDO> getPlanRatePage(PlanRatePageReqVO pageReqVO);
  68 +
  69 +}
0 \ No newline at end of file 70 \ No newline at end of file
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateServiceImpl.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.service.planrate;
  2 +
  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;
  10 +import org.springframework.stereotype.Service;
  11 +import jakarta.annotation.Resource;
  12 +import org.springframework.validation.annotation.Validated;
  13 +import org.springframework.transaction.annotation.Transactional;
  14 +
  15 +import java.time.LocalDateTime;
  16 +import java.util.*;
  17 +
  18 +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*;
  19 +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDO;
  20 +import com.zteits.urbanops.framework.common.pojo.PageResult;
  21 +
  22 +import com.zteits.urbanops.module.garden.dal.mysql.planrate.PlanRateMapper;
  23 +
  24 +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
  25 +import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*;
  26 +
  27 +/**
  28 + * 计划频次 Service 实现类
  29 + *
  30 + * @author 超级管理员
  31 + */
  32 +@Service
  33 +@Validated
  34 +public class PlanRateServiceImpl implements PlanRateService {
  35 +
  36 + @Resource
  37 + private PlanRateMapper planRateMapper;
  38 +
  39 + @Resource
  40 + private PlanRateDetailMapper planRateDetailMapper;
  41 +
  42 + @Transactional(rollbackFor = Exception.class)
  43 + @Override
  44 + public Long createPlanRate(PlanRateSaveReqVO createReqVO) {
  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.插入频次主表*/
  60 + planRateMapper.insert(planRate);
  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);
  79 + // 返回
  80 + return planRate.getId();
  81 + }
  82 +
  83 + @Transactional(rollbackFor = Exception.class)
  84 + @Override
  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);
  98 + // 更新
  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);
  116 + }
  117 +
  118 + @Override
  119 + public void deletePlanRate(Long id) {
  120 + // 校验存在
  121 + //validatePlanRateExists(id);
  122 + // 删除
  123 + planRateMapper.deleteById(id);
  124 + }
  125 +
  126 + @Override
  127 + public void deletePlanRateListByIds(List<Long> ids) {
  128 + // 删除
  129 + planRateMapper.deleteByIds(ids);
  130 + }
  131 +
  132 + @Override
  133 + public void deletePlanRateByRateNo(String rateNo) {
  134 + planRateMapper.deleteByRateNo(rateNo);
  135 + planRateDetailMapper.deleteByRateNo(rateNo);
  136 + }
  137 +
  138 +
  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);
  144 + }
  145 + }
  146 +
  147 + @Override
  148 + public PlanRateDO getPlanRate(Long id) {
  149 + return planRateMapper.selectById(id);
  150 + }
  151 +
  152 + @Override
  153 + public PageResult<PlanRateDO> getPlanRatePage(PlanRatePageReqVO pageReqVO) {
  154 + return planRateMapper.selectPage(pageReqVO);
  155 + }
  156 +
  157 +}
0 \ No newline at end of file 158 \ No newline at end of file
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
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/dept/DeptController.java
@@ -90,4 +90,12 @@ public class DeptController { @@ -90,4 +90,12 @@ public class DeptController {
90 return success(BeanUtils.toBean(dept, DeptRespVO.class)); 90 return success(BeanUtils.toBean(dept, DeptRespVO.class));
91 } 91 }
92 92
  93 + @GetMapping("/sub-list")
  94 + @Operation(summary = "获取二级部门列表")
  95 + @PreAuthorize("@ss.hasPermission('system:dept:query')")
  96 + public CommonResult<List<DeptRespVO>> getSubDeptList() {
  97 + List<DeptDO> list = deptService.getSubDeptList();
  98 + return success(BeanUtils.toBean(list, DeptRespVO.class));
  99 + }
  100 +
93 } 101 }
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptService.java
@@ -60,6 +60,12 @@ public interface DeptService { @@ -60,6 +60,12 @@ public interface DeptService {
60 List<DeptDO> getDeptList(Collection<Long> ids); 60 List<DeptDO> getDeptList(Collection<Long> ids);
61 61
62 /** 62 /**
  63 + * 获取二级部门
  64 + * @return 部门信息数组
  65 + */
  66 + List<DeptDO> getSubDeptList();
  67 +
  68 + /**
63 * 筛选部门列表 69 * 筛选部门列表
64 * 70 *
65 * @param reqVO 筛选条件请求 VO 71 * @param reqVO 筛选条件请求 VO
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptServiceImpl.java
@@ -178,6 +178,11 @@ public class DeptServiceImpl implements DeptService { @@ -178,6 +178,11 @@ public class DeptServiceImpl implements DeptService {
178 } 178 }
179 179
180 @Override 180 @Override
  181 + public List<DeptDO> getSubDeptList() {
  182 + return deptMapper.selectList(DeptDO::getParentId,100);
  183 + }
  184 +
  185 + @Override
181 public List<DeptDO> getDeptList(DeptListReqVO reqVO) { 186 public List<DeptDO> getDeptList(DeptListReqVO reqVO) {
182 List<DeptDO> list = deptMapper.selectList(reqVO); 187 List<DeptDO> list = deptMapper.selectList(reqVO);
183 list.sort(Comparator.comparing(DeptDO::getSort)); 188 list.sort(Comparator.comparing(DeptDO::getSort));