diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/vo/InspectionPlanSaveReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/vo/InspectionPlanSaveReqVO.java index d860813..0da49ed 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/vo/InspectionPlanSaveReqVO.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/vo/InspectionPlanSaveReqVO.java @@ -33,6 +33,7 @@ public class InspectionPlanSaveReqVO { private Long companyId; @Schema(description = "道路信息", requiredMode = Schema.RequiredMode.REQUIRED, example = "[{\"deptId\":11,\"roadId\":1,\"roadName\":\"测试\"}]") + @NotNull @Size(min = 1) @Valid private List roadListReqVO; diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/PlanRateController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/PlanRateController.java new file mode 100644 index 0000000..dd638d1 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/PlanRateController.java @@ -0,0 +1,109 @@ +package com.zteits.urbanops.module.garden.controller.admin.planrate; + +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import jakarta.validation.*; +import jakarta.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.zteits.urbanops.framework.common.pojo.PageParam; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.pojo.CommonResult; +import com.zteits.urbanops.framework.common.util.object.BeanUtils; + +import static com.zteits.urbanops.framework.common.pojo.CommonResult.error; +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; + +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; + +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; +import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.PLAN_RATE_LEVEL_ID_DUPLICATE; + +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDO; +import com.zteits.urbanops.module.garden.service.planrate.PlanRateService; + +@Tag(name = "管理后台 - 计划频次") +@RestController +@RequestMapping("/garden/plan-rate") +@Validated +public class PlanRateController { + + @Resource + private PlanRateService planRateService; + + @PostMapping("/create") + @Operation(summary = "创建计划频次") + @PreAuthorize("@ss.hasPermission('garden:plan-rate:create')") + public CommonResult createPlanRate(@Valid @RequestBody PlanRateSaveReqVO createReqVO) { + return success(planRateService.createPlanRate(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新计划频次") + @PreAuthorize("@ss.hasPermission('garden:plan-rate:update')") + public CommonResult updatePlanRate(@Valid @RequestBody PlanRateUpdateReqVO updateReqVO) { + if(updateReqVO.verify()){ + return error(PLAN_RATE_LEVEL_ID_DUPLICATE); + } + planRateService.updatePlanRate(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete-rate-no") + @Operation(summary = "删除计划频次") + @Parameter(name = "rateNo", description = "频次编号", required = true) + @PreAuthorize("@ss.hasPermission('garden:plan-rate:delete')") + public CommonResult deletePlanRate(@RequestParam("rateNo") String rateNo) { + planRateService.deletePlanRateByRateNo(rateNo); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除计划频次") + @PreAuthorize("@ss.hasPermission('garden:plan-rate:delete')") + public CommonResult deletePlanRateList(@RequestParam("ids") List ids) { + planRateService.deletePlanRateListByIds(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得计划频次") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('garden:plan-rate:query')") + public CommonResult getPlanRate(@RequestParam("id") Long id) { + PlanRateDO planRate = planRateService.getPlanRate(id); + return success(BeanUtils.toBean(planRate, PlanRateRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得计划频次分页") + @PreAuthorize("@ss.hasPermission('garden:plan-rate:query')") + public CommonResult> getPlanRatePage(@Valid PlanRatePageReqVO pageReqVO) { + PageResult pageResult = planRateService.getPlanRatePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PlanRateRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出计划频次 Excel") + @PreAuthorize("@ss.hasPermission('garden:plan-rate:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPlanRateExcel(@Valid PlanRatePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = planRateService.getPlanRatePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "计划频次.xls", "数据", PlanRateRespVO.class, + BeanUtils.toBean(list, PlanRateRespVO.class)); + } + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/PlanRateDetailController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/PlanRateDetailController.java new file mode 100644 index 0000000..fee8534 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/PlanRateDetailController.java @@ -0,0 +1,104 @@ +package com.zteits.urbanops.module.garden.controller.admin.planrate; + +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import jakarta.validation.constraints.*; +import jakarta.validation.*; +import jakarta.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.zteits.urbanops.framework.common.pojo.PageParam; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.pojo.CommonResult; +import com.zteits.urbanops.framework.common.util.object.BeanUtils; +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; + +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; + +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; + +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDetailDO; +import com.zteits.urbanops.module.garden.service.planrate.PlanRateDetailService; + +@Tag(name = "管理后台 - 计划频次明细") +@RestController +@RequestMapping("/garden/plan-rate-detail") +@Validated +public class PlanRateDetailController { + + @Resource + private PlanRateDetailService planRateDetailService; + + @PostMapping("/create") + @Operation(summary = "创建计划频次明细") + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:create')") + public CommonResult createPlanRateDetail(@Valid @RequestBody PlanRateDetailSaveReqVO createReqVO) { + return success(planRateDetailService.createPlanRateDetail(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新计划频次明细") + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:update')") + public CommonResult updatePlanRateDetail(@Valid @RequestBody PlanRateDetailSaveReqVO updateReqVO) { + planRateDetailService.updatePlanRateDetail(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除计划频次明细") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:delete')") + public CommonResult deletePlanRateDetail(@RequestParam("id") Long id) { + planRateDetailService.deletePlanRateDetail(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除计划频次明细") + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:delete')") + public CommonResult deletePlanRateDetailList(@RequestParam("ids") List ids) { + planRateDetailService.deletePlanRateDetailListByIds(ids); + return success(true); + } + + @GetMapping("/get-rateNo") + @Operation(summary = "获得计划频次明细") + @Parameter(name = "rateNo", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:query')") + public CommonResult> getPlanRateDetail(@RequestParam("rateNo") @NotBlank String rateNo) { + List detailList = planRateDetailService.getPlanRateDetailByRateNo(rateNo); + return success(BeanUtils.toBean(detailList, PlanRateDetailRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得计划频次明细分页") + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:query')") + public CommonResult> getPlanRateDetailPage(@Valid PlanRateDetailPageReqVO pageReqVO) { + PageResult pageResult = planRateDetailService.getPlanRateDetailPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PlanRateDetailRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出计划频次明细 Excel") + @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPlanRateDetailExcel(@Valid PlanRateDetailPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = planRateDetailService.getPlanRateDetailPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "计划频次明细.xls", "数据", PlanRateDetailRespVO.class, + BeanUtils.toBean(list, PlanRateDetailRespVO.class)); + } + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateDetailPageReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateDetailPageReqVO.java new file mode 100644 index 0000000..e391b93 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateDetailPageReqVO.java @@ -0,0 +1,35 @@ +package com.zteits.urbanops.module.garden.controller.admin.planrate.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.zteits.urbanops.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 计划频次明细分页 Request VO") +@Data +public class PlanRateDetailPageReqVO extends PageParam { + + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政") + private String busiLine; + + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", example = "7693") + private Integer planTypeId; + + @Schema(description = "级别: 10:特级;11:一级:12:二级;13:三级", example = "26893") + private Integer levelId; + + @Schema(description = "次数 如:1/3等") + private String rate; + + @Schema(description = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次", example = "11235") + private Integer cycleId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateDetailRespVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateDetailRespVO.java new file mode 100644 index 0000000..222f3b0 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateDetailRespVO.java @@ -0,0 +1,50 @@ +package com.zteits.urbanops.module.garden.controller.admin.planrate.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 计划频次明细 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PlanRateDetailRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6428") + @ExcelProperty("ID") + private Long id; + + /** + * 频次编号 + */ + @Schema(description = "频次编号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("频次编号") + private String rateNo; + + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("业务线: yl-园林;wy-物业:sz-市政") + private String busiLine; + + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", requiredMode = Schema.RequiredMode.REQUIRED, example = "7693") + @ExcelProperty("养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;") + private Integer planTypeId; + + @Schema(description = "级别: 10:特级;11:一级:12:二级;13:三级", requiredMode = Schema.RequiredMode.REQUIRED, example = "26893") + @ExcelProperty("级别: 10:特级;11:一级:12:二级;13:三级") + private Integer levelId; + + @Schema(description = "次数 如:1/3等") + @ExcelProperty("次数 如:1/3等") + private String rate; + + @Schema(description = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次", requiredMode = Schema.RequiredMode.REQUIRED, example = "11235") + @ExcelProperty("周期ID: 1:日/次;2:周/次;3:月/次;4:年/次") + private Integer cycleId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateDetailSaveReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateDetailSaveReqVO.java new file mode 100644 index 0000000..9b7a18c --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateDetailSaveReqVO.java @@ -0,0 +1,25 @@ +package com.zteits.urbanops.module.garden.controller.admin.planrate.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - 计划频次明细新增/修改 Request VO") +@Data +public class PlanRateDetailSaveReqVO { + + + @Schema(description = "级别: 10:特级;11:一级:12:二级;13:三级", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @NotNull(message = "级别: 10:特级;11:一级:12:二级;13:三级不能为空") + private Integer levelId; + + @Schema(description = "次数 如:1/3等") + @NotEmpty(message = "次数不能为空") + private String rate; + + @Schema(description = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "周期ID: 1:日/次;2:周/次;3:月/次;4:年/次不能为空") + private Integer cycleId; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRatePageReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRatePageReqVO.java new file mode 100644 index 0000000..1afb7c4 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRatePageReqVO.java @@ -0,0 +1,28 @@ +package com.zteits.urbanops.module.garden.controller.admin.planrate.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.zteits.urbanops.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 计划频次分页 Request VO") +@Data +public class PlanRatePageReqVO extends PageParam { + + @Schema(description = "频次编号") + private String rateNo; + + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政") + private String busiLine; + + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", example = "16546") + private Integer planTypeId; + + @Schema(description = "是否为标准计划: 1:是;2:否") + private Integer stdPlan; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateRespVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateRespVO.java new file mode 100644 index 0000000..4ad804d --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateRespVO.java @@ -0,0 +1,39 @@ +package com.zteits.urbanops.module.garden.controller.admin.planrate.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 计划频次 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PlanRateRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18948") + @ExcelProperty("ID") + private Long id; + + @Schema(description = "频次编号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("频次编号") + private String rateNo; + + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("业务线: yl-园林;wy-物业:sz-市政") + private String busiLine; + + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", requiredMode = Schema.RequiredMode.REQUIRED, example = "16546") + @ExcelProperty("养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;") + private Integer planTypeId; + + @Schema(description = "是否为标准计划: 1:是;2:否", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否为标准计划: 1:是;2:否") + private Integer stdPlan; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateSaveReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateSaveReqVO.java new file mode 100644 index 0000000..98a52b9 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateSaveReqVO.java @@ -0,0 +1,31 @@ +package com.zteits.urbanops.module.garden.controller.admin.planrate.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - 计划频次新增/修改 Request VO") +@Data +public class PlanRateSaveReqVO { + + + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "业务线: yl-园林;wy-物业:sz-市政不能为空") + private String busiLine; + + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", requiredMode = Schema.RequiredMode.REQUIRED, example = "16546") + @NotNull(message = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;不能为空") + private Integer planTypeId; + + @Schema(description = "是否为标准计划: 1:是;2:否", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否为标准计划: 1:是;2:否不能为空") + private Integer stdPlan; + + @NotNull@NotNull(message = "频次明细不能为空") + @Size(min = 1) + @Valid + private List details; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateUpdateReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateUpdateReqVO.java new file mode 100644 index 0000000..2ba031c --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateUpdateReqVO.java @@ -0,0 +1,48 @@ +package com.zteits.urbanops.module.garden.controller.admin.planrate.vo; + +import com.zteits.urbanops.module.garden.util.FieldDuplicateCheckerUtil; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +@Schema(description = "管理后台 - 计划频次新增/修改 Request VO") +@Data +public class PlanRateUpdateReqVO { + /** + * 频次编号 + */ + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "频次编号不能为空") + private String rateNo; + + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "业务线: yl-园林;wy-物业:sz-市政不能为空") + private String busiLine; + + @Schema(description = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;", requiredMode = Schema.RequiredMode.REQUIRED, example = "16546") + @NotNull(message = "养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视;不能为空") + private Integer planTypeId; + + @Schema(description = "是否为标准计划: 1:是;2:否", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否为标准计划: 1:是;2:否不能为空") + private Integer stdPlan; + + @NotNull@NotNull(message = "频次明细不能为空") + @Size(min = 1) + @Valid + private List details; + + public boolean verify() { + return FieldDuplicateCheckerUtil.hasDuplicate(details, PlanRateDetailSaveReqVO::getLevelId); + } + + + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/planrate/PlanRateDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/planrate/PlanRateDO.java new file mode 100644 index 0000000..e866671 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/planrate/PlanRateDO.java @@ -0,0 +1,48 @@ +package com.zteits.urbanops.module.garden.dal.dataobject.planrate; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO; + +/** + * 计划频次 DO + * + * @author 超级管理员 + */ +@TableName("garden_plan_rate") +@KeySequence("garden_plan_rate_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PlanRateDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 频次编号 + */ + private String rateNo; + /** + * 业务线: yl-园林;wy-物业:sz-市政 + */ + private String busiLine; + /** + * 养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视; + */ + private Integer planTypeId; + /** + * 是否为标准计划: 1:是;2:否 + */ + private Integer stdPlan; + + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/planrate/PlanRateDetailDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/planrate/PlanRateDetailDO.java new file mode 100644 index 0000000..b6eff76 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/planrate/PlanRateDetailDO.java @@ -0,0 +1,56 @@ +package com.zteits.urbanops.module.garden.dal.dataobject.planrate; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO; + +/** + * 计划频次明细 DO + * + * @author 超级管理员 + */ +@TableName("garden_plan_rate_detail") +@KeySequence("garden_plan_rate_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PlanRateDetailDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 频次编号 + */ + private String rateNo; + /** + * 业务线: yl-园林;wy-物业:sz-市政 + */ + private String busiLine; + /** + * 养护类型:2001:浇水;2002:施肥;2003:有害生物防治;2004:修剪;2005:中耕除草;2006:打孔梳草;2007:绿地保洁;2008:园林废弃物收集运输 ;2009:补植;3001:绿地巡视; + */ + private Integer planTypeId; + /** + * 级别: 10:特级;11:一级:12:二级;13:三级 + */ + private Integer levelId; + /** + * 次数 如:1/3等 + */ + private String rate; + /** + * 周期ID: 1:日/次;2:周/次;3:月/次;4:年/次 + */ + private Integer cycleId; + + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/inspectionplan/InspectionPlanDetailMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/inspectionplan/InspectionPlanDetailMapper.java index 134d027..e077e78 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/inspectionplan/InspectionPlanDetailMapper.java +++ b/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; import com.zteits.urbanops.module.garden.dal.dataobject.inspectionplan.InspectionPlanDetailDO; import org.apache.ibatis.annotations.Mapper; import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.*; +import org.apache.ibatis.annotations.Param; /** * 巡检计划 Mapper @@ -33,4 +34,6 @@ public interface InspectionPlanDetailMapper extends BaseMapperX { .orderByDesc(InspectionPlanDO::getId)); } + int deleteByBatchNo(@Param("batchNo") String batchNo); + } \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/inspectionplan/InspectionPlanRoleMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/inspectionplan/InspectionPlanRoleMapper.java index af39264..962ced0 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/inspectionplan/InspectionPlanRoleMapper.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/inspectionplan/InspectionPlanRoleMapper.java @@ -1,6 +1,5 @@ package com.zteits.urbanops.module.garden.dal.mysql.inspectionplan; -import java.util.*; import com.zteits.urbanops.framework.common.pojo.PageResult; import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -8,6 +7,7 @@ import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX; import com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.InspectionPlanRolePageReqVO; import com.zteits.urbanops.module.garden.dal.dataobject.inspectionplan.InspectionPlanRoleDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 巡检计划角色 Mapper @@ -27,4 +27,6 @@ public interface InspectionPlanRoleMapper extends BaseMapperX { + + default PageResult selectPage(PlanRateDetailPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PlanRateDetailDO::getBusiLine, reqVO.getBusiLine()) + .eqIfPresent(PlanRateDetailDO::getPlanTypeId, reqVO.getPlanTypeId()) + .eqIfPresent(PlanRateDetailDO::getLevelId, reqVO.getLevelId()) + .eqIfPresent(PlanRateDetailDO::getRate, reqVO.getRate()) + .eqIfPresent(PlanRateDetailDO::getCycleId, reqVO.getCycleId()) + .betweenIfPresent(PlanRateDetailDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(PlanRateDetailDO::getId)); + } + + int deleteByRateNo(@Param("rateNo") String rateNo); + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/planrate/PlanRateMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/planrate/PlanRateMapper.java new file mode 100644 index 0000000..85786a7 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/planrate/PlanRateMapper.java @@ -0,0 +1,32 @@ +package com.zteits.urbanops.module.garden.dal.mysql.planrate; + +import java.util.*; + +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX; +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDO; +import org.apache.ibatis.annotations.Mapper; +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*; +import org.apache.ibatis.annotations.Param; + +/** + * 计划频次 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface PlanRateMapper extends BaseMapperX { + + default PageResult selectPage(PlanRatePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PlanRateDO::getRateNo, reqVO.getRateNo()) + .eqIfPresent(PlanRateDO::getBusiLine, reqVO.getBusiLine()) + .eqIfPresent(PlanRateDO::getPlanTypeId, reqVO.getPlanTypeId()) + .eqIfPresent(PlanRateDO::getStdPlan, reqVO.getStdPlan()) + .orderByDesc(PlanRateDO::getId)); + } + + int deleteByRateNo(@Param("rateNo") String rateNo); + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java index f4f000e..71c906b 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java @@ -63,4 +63,9 @@ public interface ErrorCodeConstants { ErrorCode INSPECTION_CYCLE_ID_ERROR = new ErrorCode(1-200-100-002, "周期id错误"); ErrorCode INSPECTION_CYCLE_ERROR = new ErrorCode(1-200-100-003, "获取两个时间之间间隔天数错误"); ErrorCode INSPECTION_PLAN_EXISTS = new ErrorCode(1-200-100-004, "道路对应类型已存在记录"); + + //========== 频次 TODO 补充编号 ========== + ErrorCode PLAN_RATE_EXISTS = new ErrorCode(1-200-200-001, "养护频次已存在"); + ErrorCode PLAN_RATE_LEVEL_ID_DUPLICATE = new ErrorCode(1-200-200-002, "养护等级重复"); + } diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/inspectionplan/InspectionPlanServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/inspectionplan/InspectionPlanServiceImpl.java index a053192..9c9cd42 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/inspectionplan/InspectionPlanServiceImpl.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/inspectionplan/InspectionPlanServiceImpl.java @@ -174,7 +174,8 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { QueryWrapper sql = new QueryWrapper<>(); sql.lambda().eq(InspectionPlanDO::getPlanTypeId, req.getPlanTypeId()) .in(InspectionPlanDO::getRoadId, roadIds) - .between(InspectionPlanDO::getBeginTime, req.getBeginTime(), req.getEndTime()); + .le(InspectionPlanDO::getBeginTime, req.getEndTime()) // start_time <= endTime + .ge(InspectionPlanDO::getEndTime, req.getBeginTime()); // end_time >= startTime Long count = inspectionPlanMapper.selectCount(sql); if (count > 0) { @@ -201,9 +202,9 @@ public class InspectionPlanServiceImpl implements InspectionPlanService { @Override public void deleteInspectionPlanByBatchNo(String batchNo) { - inspectionPlanMapper.delete(InspectionPlanDO::getBatchNo, batchNo); - inspectionPlanDetailMapper.delete(InspectionPlanDetailDO::getBatchNo, batchNo); - inspectionPlanRoleMapper.delete(InspectionPlanRoleDO::getBatchNo, batchNo); + inspectionPlanMapper.deleteByBatchNo(batchNo); + inspectionPlanDetailMapper.deleteByBatchNo(batchNo); + inspectionPlanRoleMapper.deleteByBatchNo(batchNo); } } \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateDetailService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateDetailService.java new file mode 100644 index 0000000..304848b --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateDetailService.java @@ -0,0 +1,70 @@ +package com.zteits.urbanops.module.garden.service.planrate; + +import java.util.*; +import jakarta.validation.*; +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDetailDO; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.pojo.PageParam; + +/** + * 计划频次明细 Service 接口 + * + * @author 超级管理员 + */ +public interface PlanRateDetailService { + + /** + * 创建计划频次明细 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPlanRateDetail(@Valid PlanRateDetailSaveReqVO createReqVO); + + /** + * 更新计划频次明细 + * + * @param updateReqVO 更新信息 + */ + void updatePlanRateDetail(@Valid PlanRateDetailSaveReqVO updateReqVO); + + /** + * 删除计划频次明细 + * + * @param id 编号 + */ + void deletePlanRateDetail(Long id); + + /** + * 批量删除计划频次明细 + * + * @param ids 编号 + */ + void deletePlanRateDetailListByIds(List ids); + + /** + * 获得计划频次明细 + * + * @param id 编号 + * @return 计划频次明细 + */ + PlanRateDetailDO getPlanRateDetail(Long id); + + /** + * 获得计划频次明细分页 + * + * @param pageReqVO 分页查询 + * @return 计划频次明细分页 + */ + PageResult getPlanRateDetailPage(PlanRateDetailPageReqVO pageReqVO); + + /** + * 获得计划频次明细 + * + * @param rateNo 编号 + * @return 计划频次明细列表 + */ + List getPlanRateDetailByRateNo(String rateNo); + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateDetailServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateDetailServiceImpl.java new file mode 100644 index 0000000..e2cd5eb --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateDetailServiceImpl.java @@ -0,0 +1,85 @@ +package com.zteits.urbanops.module.garden.service.planrate; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDetailDO; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.util.object.BeanUtils; + +import com.zteits.urbanops.module.garden.dal.mysql.planrate.PlanRateDetailMapper; + +/** + * 计划频次明细 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class PlanRateDetailServiceImpl implements PlanRateDetailService { + + @Resource + private PlanRateDetailMapper planRateDetailMapper; + + @Override + public Long createPlanRateDetail(PlanRateDetailSaveReqVO createReqVO) { + // 插入 + PlanRateDetailDO planRateDetail = BeanUtils.toBean(createReqVO, PlanRateDetailDO.class); + planRateDetailMapper.insert(planRateDetail); + + // 返回 + return planRateDetail.getId(); + } + + @Override + public void updatePlanRateDetail(PlanRateDetailSaveReqVO updateReqVO) { + // 校验存在 + //validatePlanRateDetailExists(updateReqVO.getId()); + // 更新 + PlanRateDetailDO updateObj = BeanUtils.toBean(updateReqVO, PlanRateDetailDO.class); + planRateDetailMapper.updateById(updateObj); + } + + @Override + public void deletePlanRateDetail(Long id) { + // 校验存在 + validatePlanRateDetailExists(id); + // 删除 + planRateDetailMapper.deleteById(id); + } + + @Override + public void deletePlanRateDetailListByIds(List ids) { + // 删除 + planRateDetailMapper.deleteByIds(ids); + } + + + private void validatePlanRateDetailExists(Long id) { + if (planRateDetailMapper.selectById(id) == null) { + //throw exception(""); + } + } + + @Override + public PlanRateDetailDO getPlanRateDetail(Long id) { + return planRateDetailMapper.selectById(id); + } + + @Override + public PageResult getPlanRateDetailPage(PlanRateDetailPageReqVO pageReqVO) { + return planRateDetailMapper.selectPage(pageReqVO); + } + + @Override + public List getPlanRateDetailByRateNo(String rateNo) { + QueryWrapper sql = new QueryWrapper<>(); + sql.lambda().eq(PlanRateDetailDO::getRateNo, rateNo); + return planRateDetailMapper.selectList(sql); + } + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateService.java new file mode 100644 index 0000000..e825434 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateService.java @@ -0,0 +1,69 @@ +package com.zteits.urbanops.module.garden.service.planrate; + +import java.util.*; +import jakarta.validation.*; +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDO; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.pojo.PageParam; + +/** + * 计划频次 Service 接口 + * + * @author 超级管理员 + */ +public interface PlanRateService { + + /** + * 创建计划频次 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPlanRate(@Valid PlanRateSaveReqVO createReqVO); + + /** + * 更新计划频次 + * + * @param updateReqVO 更新信息 + */ + void updatePlanRate(@Valid PlanRateUpdateReqVO updateReqVO); + + /** + * 删除计划频次 + * + * @param id 编号 + */ + void deletePlanRate(Long id); + + /** + * 批量删除计划频次 + * + * @param ids 编号 + */ + void deletePlanRateListByIds(List ids); + + /** + * 批量删除计划频次 + * + * @param rateNo 编号 + */ + void deletePlanRateByRateNo(String rateNo); + + /** + * 获得计划频次 + * + * @param id 编号 + * @return 计划频次 + */ + PlanRateDO getPlanRate(Long id); + + /** + * 获得计划频次分页 + * + * @param pageReqVO 分页查询 + * @return 计划频次分页 + */ + PageResult getPlanRatePage(PlanRatePageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateServiceImpl.java new file mode 100644 index 0000000..2bca383 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/planrate/PlanRateServiceImpl.java @@ -0,0 +1,157 @@ +package com.zteits.urbanops.module.garden.service.planrate; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.RandomUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDetailDO; +import com.zteits.urbanops.module.garden.dal.mysql.planrate.PlanRateDetailMapper; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.*; + +import com.zteits.urbanops.module.garden.controller.admin.planrate.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.planrate.PlanRateDO; +import com.zteits.urbanops.framework.common.pojo.PageResult; + +import com.zteits.urbanops.module.garden.dal.mysql.planrate.PlanRateMapper; + +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; + +/** + * 计划频次 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class PlanRateServiceImpl implements PlanRateService { + + @Resource + private PlanRateMapper planRateMapper; + + @Resource + private PlanRateDetailMapper planRateDetailMapper; + + @Transactional(rollbackFor = Exception.class) + @Override + public Long createPlanRate(PlanRateSaveReqVO createReqVO) { + // 校验存在 + validatePlanRateExists(createReqVO.getPlanTypeId(), createReqVO.getBusiLine()); + LocalDateTime now = LocalDateTime.now(); + String userName = SecurityFrameworkUtils.getLoginUserId() + ""; + String rateNo = DateUtil.format(new Date(), "yyyyMMddHHmmssSSS") + RandomUtil.randomInt(1000); + PlanRateDO planRate = new PlanRateDO(); + planRate.setRateNo(rateNo); + planRate.setStdPlan(createReqVO.getStdPlan()); + planRate.setBusiLine(createReqVO.getBusiLine()); + planRate.setPlanTypeId(createReqVO.getPlanTypeId()); + planRate.setCreator(userName); + planRate.setCreateTime(now); + planRate.setUpdater(userName); + planRate.setUpdateTime(now); + /*1.插入频次主表*/ + planRateMapper.insert(planRate); + + List list = new ArrayList<>(); + createReqVO.getDetails().forEach(detail -> { + PlanRateDetailDO detailDO = new PlanRateDetailDO(); + detailDO.setRateNo(rateNo); + detailDO.setBusiLine(createReqVO.getBusiLine()); + detailDO.setPlanTypeId(createReqVO.getPlanTypeId()); + detailDO.setLevelId(detail.getLevelId()); + detailDO.setRate(detail.getRate()); + detailDO.setCycleId(detail.getCycleId()); + detailDO.setCreator(userName); + detailDO.setCreateTime(now); + detailDO.setUpdater(userName); + detailDO.setUpdateTime(now); + list.add(detailDO); + }); + /*2.插入频次明细*/ + planRateDetailMapper.insertBatch(list); + // 返回 + return planRate.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updatePlanRate(PlanRateUpdateReqVO updateReqVO) { + /*1.删除明细*/ + int count = planRateDetailMapper.deleteByRateNo(updateReqVO.getRateNo()); + LocalDateTime now = LocalDateTime.now(); + String userName = SecurityFrameworkUtils.getLoginUserId() + ""; + UpdateWrapper updateSql = new UpdateWrapper<>(); + updateSql.lambda() + .set(PlanRateDO::getStdPlan, updateReqVO.getStdPlan()) + .set(PlanRateDO::getUpdater, userName) + .set(PlanRateDO::getUpdateTime, now) + .eq(PlanRateDO::getRateNo, updateReqVO.getRateNo()); + /*2.更新主表*/ + planRateMapper.update(updateSql); + // 更新 + List list = new ArrayList<>(); + updateReqVO.getDetails().forEach(detail -> { + PlanRateDetailDO detailDO = new PlanRateDetailDO(); + detailDO.setRateNo(updateReqVO.getRateNo()); + detailDO.setBusiLine(updateReqVO.getBusiLine()); + detailDO.setPlanTypeId(updateReqVO.getPlanTypeId()); + detailDO.setLevelId(detail.getLevelId()); + detailDO.setRate(detail.getRate()); + detailDO.setCycleId(detail.getCycleId()); + detailDO.setCreator(userName); + detailDO.setCreateTime(now); + detailDO.setUpdater(userName); + detailDO.setUpdateTime(now); + list.add(detailDO); + }); + /*3.插入频次明细*/ + planRateDetailMapper.insertBatch(list); + } + + @Override + public void deletePlanRate(Long id) { + // 校验存在 + //validatePlanRateExists(id); + // 删除 + planRateMapper.deleteById(id); + } + + @Override + public void deletePlanRateListByIds(List ids) { + // 删除 + planRateMapper.deleteByIds(ids); + } + + @Override + public void deletePlanRateByRateNo(String rateNo) { + planRateMapper.deleteByRateNo(rateNo); + planRateDetailMapper.deleteByRateNo(rateNo); + } + + + private void validatePlanRateExists(Integer planTypeId, String busiLine) { + QueryWrapper sql = new QueryWrapper<>(); + sql.lambda().eq(PlanRateDO::getPlanTypeId, planTypeId).eq(PlanRateDO::getBusiLine, busiLine); + if (planRateMapper.selectCount(sql) > 0) { + throw exception(PLAN_RATE_EXISTS); + } + } + + @Override + public PlanRateDO getPlanRate(Long id) { + return planRateMapper.selectById(id); + } + + @Override + public PageResult getPlanRatePage(PlanRatePageReqVO pageReqVO) { + return planRateMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/util/FieldDuplicateCheckerUtil.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/util/FieldDuplicateCheckerUtil.java new file mode 100644 index 0000000..84cc2fb --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/util/FieldDuplicateCheckerUtil.java @@ -0,0 +1,43 @@ +package com.zteits.urbanops.module.garden.util; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import java.util.function.Function; + +public class FieldDuplicateCheckerUtil { + + /** + * 通用判断:指定字段是否存在重复值 + * @param list 目标列表(可为 null/空) + * @param fieldExtractor 字段提取器(如 User::getId、User::getName) + * @param 列表元素类型 + * @param 字段类型(需重写 equals/hashCode,如 Long、String、自定义类) + * @return true=存在重复,false=无重复 + */ + public static boolean hasDuplicate(List list, Function fieldExtractor) { + // 边界条件:空列表或仅1个元素,直接返回无重复 + if (list == null || list.size() <= 1) { + return false; + } + + Set fieldSet = new LinkedHashSet<>(); // 用于存储已出现的字段值 + for (T item : list) { + R fieldValue = fieldExtractor.apply(item); // 提取当前对象的字段值 + + // 处理 null 值:多个 null 视为重复 + if (fieldValue == null) { + // 统计 null 出现次数,>1 则返回重复 + long nullCount = list.stream().filter(t -> fieldExtractor.apply(t) == null).count(); + return nullCount > 1; + } + + // 非 null 值:添加到 Set 失败(已存在)→ 存在重复,短路返回 + if (!fieldSet.add(fieldValue)) { + return true; + } + } + + // 遍历完成无重复 + return false; + } +} diff --git a/urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanDetailMapper.xml b/urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanDetailMapper.xml index b693066..675da41 100644 --- a/urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanDetailMapper.xml +++ b/urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanDetailMapper.xml @@ -8,5 +8,8 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + delete from garden_inspection_plan_detail where batch_no =#{batchNo} + \ No newline at end of file diff --git a/urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanMapper.xml b/urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanMapper.xml index 32bfd65..bf1ca03 100644 --- a/urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanMapper.xml +++ b/urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanMapper.xml @@ -9,4 +9,8 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + delete from garden_inspection_plan where batch_no =#{batchNo} + + \ No newline at end of file diff --git a/urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanRoleMapper.xml b/urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanRoleMapper.xml new file mode 100644 index 0000000..74436eb --- /dev/null +++ b/urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanRoleMapper.xml @@ -0,0 +1,15 @@ + + + + + + + delete from garden_inspection_plan_role where batch_no =#{batchNo} + + + \ No newline at end of file diff --git a/urbanops-module-garden/src/main/resources/mapper/planrate/PlanRateDetailMapper.xml b/urbanops-module-garden/src/main/resources/mapper/planrate/PlanRateDetailMapper.xml new file mode 100644 index 0000000..cb72a7f --- /dev/null +++ b/urbanops-module-garden/src/main/resources/mapper/planrate/PlanRateDetailMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + delete from garden_plan_rate_detail where rate_no=#{rateNo} + + \ No newline at end of file diff --git a/urbanops-module-garden/src/main/resources/mapper/planrate/PlanRateMapper.xml b/urbanops-module-garden/src/main/resources/mapper/planrate/PlanRateMapper.xml new file mode 100644 index 0000000..77006c5 --- /dev/null +++ b/urbanops-module-garden/src/main/resources/mapper/planrate/PlanRateMapper.xml @@ -0,0 +1,14 @@ + + + + + + + delete from garden_plan_rate_detail where rate_no=#{rateNo} + + \ No newline at end of file diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/dept/DeptController.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/dept/DeptController.java index e8340b1..784ebdc 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/dept/DeptController.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/dept/DeptController.java @@ -90,4 +90,12 @@ public class DeptController { return success(BeanUtils.toBean(dept, DeptRespVO.class)); } + @GetMapping("/sub-list") + @Operation(summary = "获取二级部门列表") + @PreAuthorize("@ss.hasPermission('system:dept:query')") + public CommonResult> getSubDeptList() { + List list = deptService.getSubDeptList(); + return success(BeanUtils.toBean(list, DeptRespVO.class)); + } + } diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptService.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptService.java index e6ad4cf..6c8e72e 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptService.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptService.java @@ -60,6 +60,12 @@ public interface DeptService { List getDeptList(Collection ids); /** + * 获取二级部门 + * @return 部门信息数组 + */ + List getSubDeptList(); + + /** * 筛选部门列表 * * @param reqVO 筛选条件请求 VO diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptServiceImpl.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptServiceImpl.java index 9e83704..75b00cc 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptServiceImpl.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptServiceImpl.java @@ -178,6 +178,11 @@ public class DeptServiceImpl implements DeptService { } @Override + public List getSubDeptList() { + return deptMapper.selectList(DeptDO::getParentId,100); + } + + @Override public List getDeptList(DeptListReqVO reqVO) { List list = deptMapper.selectList(reqVO); list.sort(Comparator.comparing(DeptDO::getSort));