diff --git a/urbanops-framework/urbanops-spring-boot-starter-excel/src/main/java/com/zteits/urbanops/framework/excel/core/convert/ListToStringConverter.java b/urbanops-framework/urbanops-spring-boot-starter-excel/src/main/java/com/zteits/urbanops/framework/excel/core/convert/ListToStringConverter.java new file mode 100644 index 0000000..bf46808 --- /dev/null +++ b/urbanops-framework/urbanops-spring-boot-starter-excel/src/main/java/com/zteits/urbanops/framework/excel/core/convert/ListToStringConverter.java @@ -0,0 +1,40 @@ +package com.zteits.urbanops.framework.excel.core.convert; +import cn.idev.excel.converters.Converter; +import cn.hutool.core.collection.CollectionUtil; +import cn.idev.excel.enums.CellDataTypeEnum; +import cn.idev.excel.metadata.GlobalConfiguration; +import cn.idev.excel.metadata.data.WriteCellData; +import cn.idev.excel.metadata.property.ExcelContentProperty; + +import java.util.List; + +/** + * List 转 Excel 字符串转换器(将List用逗号拼接成字符串) + */ +public class ListToStringConverter implements Converter> { + + @Override + public Class supportJavaTypeKey() { + // 声明支持的Java类型:List + return List.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + // Excel单元格类型:字符串 + return CellDataTypeEnum.STRING; + } + + @Override + public WriteCellData convertToExcelData(List value, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + // 核心转换逻辑:List为空返回空字符串,否则用逗号拼接 + if (CollectionUtil.isEmpty(value)) { + return new WriteCellData<>(""); + } + String joinStr = String.join(",", value.stream() + .map(Object::toString) + .toArray(String[]::new)); + return new WriteCellData<>(joinStr); + } +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/EmergencyTaskController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/EmergencyTaskController.java new file mode 100644 index 0000000..c458f53 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/EmergencyTaskController.java @@ -0,0 +1,111 @@ +package com.zteits.urbanops.module.garden.controller.admin.emergencytask; + +import jodd.util.StringUtil; +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 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.EMERGENCY_TASK_NOT_EXISTS; + +import com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo.*; +import com.zteits.urbanops.module.garden.service.emergencytask.EmergencyTaskService; + +@Tag(name = "管理后台 - 抢险任务主") +@RestController +@RequestMapping("/garden/emergency-task") +@Validated +public class EmergencyTaskController { + + @Resource + private EmergencyTaskService emergencyTaskService; + + @PostMapping("/create") + @Operation(summary = "创建抢险任务主") + @PreAuthorize("@ss.hasPermission('garden:emergency-task:create')") + public CommonResult createEmergencyTask(@Valid @RequestBody EmergencyTaskSaveReqVO createReqVO) { + return success(emergencyTaskService.createEmergencyTask(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新抢险任务主") + @PreAuthorize("@ss.hasPermission('garden:emergency-task:update')") + public CommonResult updateEmergencyTask(@Valid @RequestBody EmergencyTaskSaveReqVO updateReqVO) { + emergencyTaskService.updateEmergencyTask(updateReqVO); + return success(true); + } + + @PostMapping("/approval") + @Operation(summary = "抢险任务审批") + @PreAuthorize("@ss.hasPermission('garden:emergency-task:approval')") + public CommonResult approvalEmergencyTask(@Valid @RequestBody EmergencyTaskApprovalReqVO createReqVO) { + return success(emergencyTaskService.approvalEmergencyTask(createReqVO)); + } + + @DeleteMapping("/delete/task_no") + @Operation(summary = "删除抢险任务主") + @Parameter(name = "task_no", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('garden:emergency-task:delete')") + public CommonResult deleteEmergencyTask(@RequestParam("task_no") String taskNo) { + emergencyTaskService.deleteEmergencyTaskByTaskNo(taskNo); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除抢险任务主") + @PreAuthorize("@ss.hasPermission('garden:emergency-task:delete')") + public CommonResult deleteEmergencyTaskList(@RequestParam("ids") List ids) { + emergencyTaskService.deleteEmergencyTaskListByIds(ids); + return success(true); + } + + @GetMapping("/get/task_no") + @Operation(summary = "获得抢险任务主") + @Parameter(name = "task_no", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('garden:emergency-task:query')") + public CommonResult getEmergencyTask(@RequestParam("task_no") String taskNo) { + EmergencyTaskRespVO emergencyTask = emergencyTaskService.getEmergencyTaskByTaskNo(taskNo); + return success(emergencyTask); + } + + @GetMapping("/page") + @Operation(summary = "获得抢险任务主分页") + //@PreAuthorize("@ss.hasPermission('garden:emergency-task:query')") + public CommonResult> getEmergencyTaskPage(@Valid EmergencyTaskPageReqVO pageReqVO) { + PageResult pageResult = emergencyTaskService.getEmergencyTaskPage(pageReqVO); + return success(pageResult); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出抢险任务主 Excel") + //@PreAuthorize("@ss.hasPermission('garden:emergency-task:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportEmergencyTaskExcel(@Valid EmergencyTaskPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = emergencyTaskService.getEmergencyTaskPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "抢险任务主.xls", "数据", EmergencyTaskRespVO.class, list); + } + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyMachineryPageReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyMachineryPageReqVO.java new file mode 100644 index 0000000..4ccc4cf --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyMachineryPageReqVO.java @@ -0,0 +1,35 @@ +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.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 EmergencyMachineryPageReqVO extends PageParam { + + @Schema(description = "关联任务主表ID", example = "24066") + private Long taskId; + + @Schema(description = "机械名称(如:三轮车)", example = "21485") + private Integer machineryNameId; + + @Schema(description = "机械数量", example = "28764") + private Integer machineryCount; + + @Schema(description = "创建者", example = "李四") + private String creatorName; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "更新者", example = "张三") + private String updaterName; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyMachineryRespVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyMachineryRespVO.java new file mode 100644 index 0000000..50f114f --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyMachineryRespVO.java @@ -0,0 +1,43 @@ +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.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 EmergencyMachineryRespVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1541") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "关联任务主表ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "24066") + @ExcelProperty("关联任务主表ID") + private Long taskId; + + @Schema(description = "机械名称(如:三轮车)", requiredMode = Schema.RequiredMode.REQUIRED, example = "21485") + @ExcelProperty("机械名称(如:三轮车)") + private Integer machineryNameId; + + @Schema(description = "机械数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "28764") + @ExcelProperty("机械数量") + private Integer machineryCount; + + @Schema(description = "创建者", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @ExcelProperty("创建者") + private String creatorName; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "更新者", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("更新者") + private String updaterName; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyMachinerySaveReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyMachinerySaveReqVO.java new file mode 100644 index 0000000..3923168 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyMachinerySaveReqVO.java @@ -0,0 +1,20 @@ +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.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 EmergencyMachinerySaveReqVO { + + @Schema(description = "机械名称(如:三轮车)", requiredMode = Schema.RequiredMode.REQUIRED, example = "21485") + @NotNull(message = "机械名称(如:三轮车)不能为空") + private Integer machineryNameId; + + @Schema(description = "机械数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "28764") + @NotNull(message = "机械数量不能为空") + private Integer machineryCount; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskApprovalReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskApprovalReqVO.java new file mode 100644 index 0000000..94be619 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskApprovalReqVO.java @@ -0,0 +1,25 @@ +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.*; +import lombok.Data; + +@Schema(description = "管理后台 - 抢险任务主新增/修改 Request VO") +@Data +public class EmergencyTaskApprovalReqVO { + + @Schema(description = "任务编号(唯一标识,如生成规则:TASK+时间戳)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "任务编号(唯一标识,如生成规则:TASK+时间戳)不能为空") + private String taskNo; + + + @Schema(description = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结 不能为空") + @Min(value = 1, message = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结不能小于 1") + @Max(value = 5, message = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结不能大于 5") + private Integer busiStatus; + + @Schema(description = "审批备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "审批备注") + private String approvalRemarks; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskPageReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskPageReqVO.java new file mode 100644 index 0000000..9ce1c48 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskPageReqVO.java @@ -0,0 +1,49 @@ +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo; + +import lombok.*; + +import java.time.LocalDate; +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; +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 抢险任务主分页 Request VO") +@Data +public class EmergencyTaskPageReqVO extends PageParam { + + @Schema(description = "任务编号(唯一标识,如生成规则:TASK+时间戳)") + private String taskNo; + + @Schema(description = "险情类型(如:树木倒伏)", example = "5209") + private Integer emergencyTypeId; + + @Schema(description = "险情危害(如:无)", example = "16325") + private Integer emergencyHarmId; + + @Schema(description = "树木权属(如:专业权属)", example = "19498") + private Integer treeOwnershipId; + + @Schema(description = "险情地点") + private String emergencyLocation; + + @Schema(description = "抢险开始时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + private LocalDate startTime; + + @Schema(description = "抢险结束时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + private LocalDate endTime; + + + @Schema(description = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结", example = "1") + private Integer busiStatus; + + @Schema(description = "归属(一级部门id)", example = "6353") + private Long companyId; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskRespVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskRespVO.java new file mode 100644 index 0000000..0969603 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskRespVO.java @@ -0,0 +1,140 @@ +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo; + +import com.zteits.urbanops.framework.excel.core.convert.ListToStringConverter; +import com.zteits.urbanops.module.garden.dal.dataobject.emergencytask.EmergencyMachineryDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 抢险任务主 Response VO") +@Data +@ExcelIgnoreUnannotated +public class EmergencyTaskRespVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10092") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "任务编号(唯一标识,如生成规则:TASK+时间戳)", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("任务编号(唯一标识,如生成规则:TASK+时间戳)") + private String taskNo; + + @Schema(description = "发现险情时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("发现险情时间") + private LocalDateTime discoveryTime; + + @Schema(description = "险情类型(如:树木倒伏)", requiredMode = Schema.RequiredMode.REQUIRED, example = "5209") + @ExcelProperty("险情类型:1:树木倒伏 2:树木折枝") + private Integer emergencyTypeId; + + @Schema(description = "险情危害(如:无)", requiredMode = Schema.RequiredMode.REQUIRED, example = "16325") + @ExcelProperty("险情危害(如:无)") + private Integer emergencyHarmId; + + @Schema(description = "树木权属(如:专业权属)", requiredMode = Schema.RequiredMode.REQUIRED, example = "19498") + @ExcelProperty("树木权属 1:砸车 2:砸房 3:砸人 4:无") + private Integer treeOwnershipId; + + @Schema(description = "险情地点", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("险情地点") + private String emergencyLocation; + + @Schema(description = "上报人", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("上报人") + private String reporter; + + @Schema(description = "联系电话", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("联系电话") + private String contactPhone; + + @Schema(description = "抢险开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("抢险开始时间") + private LocalDateTime rescueStartTime; + + @Schema(description = "抢险中照片", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty(value="抢险中照片", converter = ListToStringConverter.class) + private List emergencyImg; + + @Schema(description = "树种(如:国槐)") + @ExcelProperty("树种(如:国槐)") + private String treeSpecies; + + @Schema(description = "树木规格(如:胸径20厘米)") + @ExcelProperty("树木规格(如:胸径20厘米)") + private String treeSpec; + + @Schema(description = "抢险完成时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("抢险完成时间") + private LocalDateTime rescueCompleteTime; + + @Schema(description = "出动人员数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "3371") + @ExcelProperty("出动人员数量") + private Integer personnelCount; + + @Schema(description = "抢险结束照片", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty(value="抢险结束照片", converter = ListToStringConverter.class) + private List emergencyEndImg; + + @Schema(description = "备注") + @ExcelProperty("备注") + private String remarks; + + @Schema(description = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结") + private Integer busiStatus; + + @Schema(description = "工作流审批状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("工作流审批状态") + private Integer status; + + @Schema(description = "流程实例的编号", example = "30197") + @ExcelProperty("流程实例的编号") + private String processInstanceId; + + @Schema(description = "审批人ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20789") + @ExcelProperty("审批人ID") + private String approvalUserId; + + @Schema(description = "审批人", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @ExcelProperty("审批人") + private String approvalUserName; + + @Schema(description = "审批备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "审批备注") + @ExcelProperty("审批备注") + private String approvalRemarks; + + @Schema(description = "归属(一级部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "6353") + @ExcelProperty("归属(一级部门id)") + private Long companyId; + + @Schema(description = "部门ID(道路负责部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "27559") + @ExcelProperty("部门ID(道路负责部门id)") + private Long deptId; + + @Schema(description = "创建者", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @ExcelProperty("创建者") + private String creatorName; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "更新者", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("更新者") + private String updaterName; + + @ExcelProperty(value="机械信息", converter = ListToStringConverter.class) + private List emergencyMachineryList; + + @Schema(description = "归属(一级部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "20800") + @ExcelProperty("归属(一级部门id)") + private String companyName; + + + @Schema(description = "部门(道路负责部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "12055") + @ExcelProperty("部门") + private String deptName; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskSaveReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskSaveReqVO.java new file mode 100644 index 0000000..9d1d854 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskSaveReqVO.java @@ -0,0 +1,97 @@ +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 抢险任务主新增/修改 Request VO") +@Data +public class EmergencyTaskSaveReqVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "30197") + private String taskNo; + + @Schema(description = "发现险情时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "发现险情时间不能为空") + private LocalDateTime discoveryTime; + + @Schema(description = "险情类型(如:树木倒伏)", requiredMode = Schema.RequiredMode.REQUIRED, example = "5209") + @NotNull(message = "险情类型(如:树木倒伏)不能为空") + private Integer emergencyTypeId; + + @Schema(description = "险情危害(如:无)", requiredMode = Schema.RequiredMode.REQUIRED, example = "16325") + @NotNull(message = "险情危害(如:无)不能为空") + private Integer emergencyHarmId; + + @Schema(description = "树木权属(如:专业权属)", requiredMode = Schema.RequiredMode.REQUIRED, example = "19498") + @NotNull(message = "树木权属(如:专业权属)不能为空") + private Integer treeOwnershipId; + + @Schema(description = "险情地点", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "险情地点不能为空") + private String emergencyLocation; + + @Schema(description = "上报人", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "上报人不能为空") + private String reporter; + + @Schema(description = "联系电话", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "联系电话不能为空") + @Pattern(regexp = "^1[3-9]\\d{9}$", message = "联系电话格式不正确,应为 11 位手机号") + private String contactPhone; + + @Schema(description = "抢险开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "抢险开始时间不能为空") + private LocalDateTime rescueStartTime; + + @Schema(description = "抢险中照片", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "抢险中照片不能为空") + @Size(min = 1, message = "抢险中照片最少1张") + private List emergencyImg; + + @Schema(description = "树种(如:国槐)") + private String treeSpecies; + + @Schema(description = "树木规格(如:胸径20厘米)") + private String treeSpec; + + @Schema(description = "抢险完成时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "抢险完成时间不能为空") + private LocalDateTime rescueCompleteTime; + + @Schema(description = "出动人员数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "3371") + @NotNull(message = "出动人员数量不能为空") + private Integer personnelCount; + + @Schema(description = "抢险结束照片", requiredMode = Schema.RequiredMode.REQUIRED) + private List emergencyEndImg; + + @Schema(description = "备注") + private String remarks; + + @Schema(description = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结不能为空") + private Integer busiStatus; + + @Schema(description = "工作流审批状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "工作流审批状态不能为空") + private Integer status; + + @Schema(description = "流程实例的编号", example = "30197") + private String processInstanceId; + + @Schema(description = "审批人ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20789") + @NotEmpty(message = "审批人ID不能为空") + private String approvalUserId; + + @Schema(description = "审批人", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @NotEmpty(message = "审批人不能为空") + private String approvalUserName; + + @Schema(description = "使用机械", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + private List emergencyMachineryList; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/emergencytask/EmergencyMachineryDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/emergencytask/EmergencyMachineryDO.java new file mode 100644 index 0000000..09de353 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/emergencytask/EmergencyMachineryDO.java @@ -0,0 +1,52 @@ +package com.zteits.urbanops.module.garden.dal.dataobject.emergencytask; + +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_emergency_machinery") +@KeySequence("garden_emergency_machinery_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EmergencyMachineryDO extends BaseDO { + + /** + * 主键ID + */ + @TableId + private Long id; + /** + * 任务编号(唯一标识,如生成规则:TASK+时间戳) + */ + private String taskNo; + /** + * 机械名称(如:三轮车) + */ + private Integer machineryNameId; + /** + * 机械数量 + */ + private Integer machineryCount; + /** + * 创建者 + */ + private String creatorName; + /** + * 更新者 + */ + private String updaterName; + + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/emergencytask/EmergencyTaskDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/emergencytask/EmergencyTaskDO.java new file mode 100644 index 0000000..d19711d --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/emergencytask/EmergencyTaskDO.java @@ -0,0 +1,144 @@ +package com.zteits.urbanops.module.garden.dal.dataobject.emergencytask; + +import com.zteits.urbanops.framework.mybatis.core.type.StringArrayToListTypeHandler; +import com.zteits.urbanops.framework.mybatis.core.type.StringListTypeHandler; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +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(value="garden_emergency_task", autoResultMap = true) +@KeySequence("garden_emergency_task_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EmergencyTaskDO extends BaseDO { + + /** + * 主键ID + */ + @TableId + private Long id; + /** + * 任务编号(唯一标识,如生成规则:TASK+时间戳) + */ + private String taskNo; + /** + * 发现险情时间 + */ + private LocalDateTime discoveryTime; + /** + * 险情类型(如:树木倒伏) + */ + private Integer emergencyTypeId; + /** + * 险情危害(如:无) + */ + private Integer emergencyHarmId; + /** + * 树木权属(如:专业权属) + */ + private Integer treeOwnershipId; + /** + * 险情地点 + */ + private String emergencyLocation; + /** + * 上报人 + */ + private String reporter; + /** + * 联系电话 + */ + private String contactPhone; + /** + * 抢险开始时间 + */ + private LocalDateTime rescueStartTime; + /** + * 抢险中照片 + */ + @TableField(typeHandler = StringArrayToListTypeHandler.class) + private List emergencyImg; + /** + * 树种(如:国槐) + */ + private String treeSpecies; + /** + * 树木规格(如:胸径20厘米) + */ + private String treeSpec; + /** + * 抢险完成时间 + */ + private LocalDateTime rescueCompleteTime; + /** + * 出动人员数量 + */ + private Integer personnelCount; + /** + * 抢险结束照片 + */ + @TableField(typeHandler = StringArrayToListTypeHandler.class) + private List emergencyEndImg; + /** + * 备注 + */ + private String remarks; + /** + * 案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结 + */ + private Integer busiStatus; + /** + * 工作流审批状态 + */ + private Integer status; + /** + * 流程实例的编号 + */ + private String processInstanceId; + /** + * 审批人ID + */ + private String approvalUserId; + /** + * 审批人 + */ + private String approvalUserName; + + /** + * 审批备注 + */ + private String approvalRemarks; + /** + * 归属(一级部门id) + */ + private Long companyId; + /** + * 部门ID(道路负责部门id) + */ + private Long deptId; + /** + * 创建者 + */ + private String creatorName; + /** + * 更新者 + */ + private String updaterName; + + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/emergencytask/EmergencyMachineryMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/emergencytask/EmergencyMachineryMapper.java new file mode 100644 index 0000000..541ef64 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/emergencytask/EmergencyMachineryMapper.java @@ -0,0 +1,33 @@ +package com.zteits.urbanops.module.garden.dal.mysql.emergencytask; + +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.emergencytask.EmergencyMachineryDO; +import org.apache.ibatis.annotations.Mapper; +import com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo.*; +import org.apache.ibatis.annotations.Param; + +/** + * 抢险机械子 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface EmergencyMachineryMapper extends BaseMapperX { + + default PageResult selectPage(EmergencyMachineryPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(EmergencyMachineryDO::getMachineryNameId, reqVO.getMachineryNameId()) + .eqIfPresent(EmergencyMachineryDO::getMachineryCount, reqVO.getMachineryCount()) + .likeIfPresent(EmergencyMachineryDO::getCreatorName, reqVO.getCreatorName()) + .betweenIfPresent(EmergencyMachineryDO::getCreateTime, reqVO.getCreateTime()) + .likeIfPresent(EmergencyMachineryDO::getUpdaterName, reqVO.getUpdaterName()) + .orderByDesc(EmergencyMachineryDO::getId)); + } + + int deleteByTaskNo(@Param("taskNo") String taskNo); + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/emergencytask/EmergencyTaskMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/emergencytask/EmergencyTaskMapper.java new file mode 100644 index 0000000..2fa32d6 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/emergencytask/EmergencyTaskMapper.java @@ -0,0 +1,48 @@ +package com.zteits.urbanops.module.garden.dal.mysql.emergencytask; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +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.emergencytask.EmergencyTaskDO; +import org.apache.ibatis.annotations.Mapper; +import com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo.*; +import org.apache.ibatis.annotations.Param; + +/** + * 抢险任务主 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface EmergencyTaskMapper extends BaseMapperX { + + default PageResult selectPage(EmergencyTaskPageReqVO reqVO) { + LocalDateTime startDateTime = null; + LocalDateTime endDateTime = null; + if (reqVO.getStartTime() != null) { + startDateTime = reqVO.getStartTime().atStartOfDay(); + } + // 处理结束时间 (转为当天 23:59:59...) + if (reqVO.getEndTime() != null) { + endDateTime = reqVO.getEndTime().atTime(LocalTime.MAX); + } + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(EmergencyTaskDO::getTaskNo, reqVO.getTaskNo()) + .eqIfPresent(EmergencyTaskDO::getEmergencyTypeId, reqVO.getEmergencyTypeId()) + .eqIfPresent(EmergencyTaskDO::getEmergencyHarmId, reqVO.getEmergencyHarmId()) + .eqIfPresent(EmergencyTaskDO::getTreeOwnershipId, reqVO.getTreeOwnershipId()) + .likeIfPresent(EmergencyTaskDO::getEmergencyLocation, reqVO.getEmergencyLocation()) + .eqIfPresent(EmergencyTaskDO::getBusiStatus, reqVO.getBusiStatus()) + .eqIfPresent(EmergencyTaskDO::getCompanyId, reqVO.getCompanyId()) + .betweenIfPresent(EmergencyTaskDO::getDiscoveryTime, startDateTime, endDateTime) + .orderByDesc(EmergencyTaskDO::getId)); + } + + int deleteByTaskNo(@Param("taskNo") String taskNo); + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/device/DeviceClockRecordServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/device/DeviceClockRecordServiceImpl.java index 4fd4d26..6e9ba4c 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/device/DeviceClockRecordServiceImpl.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/device/DeviceClockRecordServiceImpl.java @@ -68,7 +68,7 @@ public class DeviceClockRecordServiceImpl implements DeviceClockRecordService { private void validateDeviceClockRecordExists(Integer id) { if (deviceClockRecordMapper.selectById(id) == null) { - throw exception(DEVICE_CLOCK_RECORD_NOT_EXISTS); + // throw exception(DEVICE_CLOCK_RECORD_NOT_EXISTS); } } @@ -82,4 +82,4 @@ public class DeviceClockRecordServiceImpl implements DeviceClockRecordService { return deviceClockRecordMapper.selectPage(pageReqVO); } -} \ No newline at end of file +} diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/emergencytask/EmergencyMachineryService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/emergencytask/EmergencyMachineryService.java new file mode 100644 index 0000000..9219a3a --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/emergencytask/EmergencyMachineryService.java @@ -0,0 +1,62 @@ +package com.zteits.urbanops.module.garden.service.emergencytask; + +import java.util.*; +import jakarta.validation.*; +import com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.emergencytask.EmergencyMachineryDO; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.pojo.PageParam; + +/** + * 抢险机械子 Service 接口 + * + * @author 超级管理员 + */ +public interface EmergencyMachineryService { + + /** + * 创建抢险机械子 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createEmergencyMachinery(@Valid EmergencyMachinerySaveReqVO createReqVO); + + /** + * 更新抢险机械子 + * + * @param updateReqVO 更新信息 + */ + void updateEmergencyMachinery(@Valid EmergencyMachinerySaveReqVO updateReqVO); + + /** + * 删除抢险机械子 + * + * @param id 编号 + */ + void deleteEmergencyMachinery(Long id); + + /** + * 批量删除抢险机械子 + * + * @param ids 编号 + */ + void deleteEmergencyMachineryListByIds(List ids); + + /** + * 获得抢险机械子 + * + * @param id 编号 + * @return 抢险机械子 + */ + EmergencyMachineryDO getEmergencyMachinery(Long id); + + /** + * 获得抢险机械子分页 + * + * @param pageReqVO 分页查询 + * @return 抢险机械子分页 + */ + PageResult getEmergencyMachineryPage(EmergencyMachineryPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/emergencytask/EmergencyMachineryServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/emergencytask/EmergencyMachineryServiceImpl.java new file mode 100644 index 0000000..7f60f1a --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/emergencytask/EmergencyMachineryServiceImpl.java @@ -0,0 +1,85 @@ +package com.zteits.urbanops.module.garden.service.emergencytask; + +import cn.hutool.core.collection.CollUtil; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.emergencytask.EmergencyMachineryDO; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.pojo.PageParam; +import com.zteits.urbanops.framework.common.util.object.BeanUtils; + +import com.zteits.urbanops.module.garden.dal.mysql.emergencytask.EmergencyMachineryMapper; + +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertList; +import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.diffList; +import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; + +/** + * 抢险机械子 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class EmergencyMachineryServiceImpl implements EmergencyMachineryService { + + @Resource + private EmergencyMachineryMapper emergencyMachineryMapper; + + @Override + public Long createEmergencyMachinery(EmergencyMachinerySaveReqVO createReqVO) { + // 插入 + EmergencyMachineryDO emergencyMachinery = BeanUtils.toBean(createReqVO, EmergencyMachineryDO.class); + emergencyMachineryMapper.insert(emergencyMachinery); + + // 返回 + return emergencyMachinery.getId(); + } + + @Override + public void updateEmergencyMachinery(EmergencyMachinerySaveReqVO updateReqVO) { + // 校验存在 + // validateEmergencyMachineryExists(updateReqVO.getId()); + // 更新 + EmergencyMachineryDO updateObj = BeanUtils.toBean(updateReqVO, EmergencyMachineryDO.class); + emergencyMachineryMapper.updateById(updateObj); + } + + @Override + public void deleteEmergencyMachinery(Long id) { + // 校验存在 + validateEmergencyMachineryExists(id); + // 删除 + emergencyMachineryMapper.deleteById(id); + } + + @Override + public void deleteEmergencyMachineryListByIds(List ids) { + // 删除 + emergencyMachineryMapper.deleteByIds(ids); + } + + + private void validateEmergencyMachineryExists(Long id) { + if (emergencyMachineryMapper.selectById(id) == null) { + //throw exception(EMERGENCY_MACHINERY_NOT_EXISTS); + } + } + + @Override + public EmergencyMachineryDO getEmergencyMachinery(Long id) { + return emergencyMachineryMapper.selectById(id); + } + + @Override + public PageResult getEmergencyMachineryPage(EmergencyMachineryPageReqVO pageReqVO) { + return emergencyMachineryMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/emergencytask/EmergencyTaskService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/emergencytask/EmergencyTaskService.java new file mode 100644 index 0000000..e601106 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/emergencytask/EmergencyTaskService.java @@ -0,0 +1,84 @@ +package com.zteits.urbanops.module.garden.service.emergencytask; + +import java.util.*; +import jakarta.validation.*; +import com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.emergencytask.EmergencyTaskDO; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.pojo.PageParam; + +/** + * 抢险任务主 Service 接口 + * + * @author 超级管理员 + */ +public interface EmergencyTaskService { + + /** + * 创建抢险任务主 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createEmergencyTask(@Valid EmergencyTaskSaveReqVO createReqVO); + + /** + * 集团审批 + * @param createReqVO + * @return + */ + int approvalEmergencyTask(EmergencyTaskApprovalReqVO createReqVO); + + /** + * 更新抢险任务主 + * + * @param updateReqVO 更新信息 + */ + void updateEmergencyTask(@Valid EmergencyTaskSaveReqVO updateReqVO); + + /** + * 删除抢险任务主 + * + * @param id 编号 + */ + void deleteEmergencyTask(Long id); + + /** + * 删除抢险任务主 + * + * @param taskNO 编号 + */ + void deleteEmergencyTaskByTaskNo(String taskNO); + + /** + * 批量删除抢险任务主 + * + * @param ids 编号 + */ + void deleteEmergencyTaskListByIds(List ids); + + /** + * 获得抢险任务主 + * + * @param id 编号 + * @return 抢险任务主 + */ + EmergencyTaskDO getEmergencyTask(Long id); + + /** + * 获得抢险任务主 + * + * @param taskNo 编号 + * @return 抢险任务主 + */ + EmergencyTaskRespVO getEmergencyTaskByTaskNo(String taskNo); + + /** + * 获得抢险任务主分页 + * + * @param pageReqVO 分页查询 + * @return 抢险任务主分页 + */ + PageResult getEmergencyTaskPage(EmergencyTaskPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/emergencytask/EmergencyTaskServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/emergencytask/EmergencyTaskServiceImpl.java new file mode 100644 index 0000000..3b10615 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/emergencytask/EmergencyTaskServiceImpl.java @@ -0,0 +1,247 @@ +package com.zteits.urbanops.module.garden.service.emergencytask; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.RandomUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; +import com.zteits.urbanops.module.garden.controller.admin.road.vo.RoadRespVO; +import com.zteits.urbanops.module.garden.dal.dataobject.emergencytask.EmergencyMachineryDO; +import com.zteits.urbanops.module.garden.dal.mysql.emergencytask.EmergencyMachineryMapper; +import com.zteits.urbanops.module.system.api.dept.DeptApi; +import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO; +import jodd.util.StringUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.util.CollectionUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +import com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.emergencytask.EmergencyTaskDO; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.pojo.PageParam; +import com.zteits.urbanops.framework.common.util.object.BeanUtils; + +import com.zteits.urbanops.module.garden.dal.mysql.emergencytask.EmergencyTaskMapper; + +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertList; +import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.diffList; +import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; + +/** + * 抢险任务主 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class EmergencyTaskServiceImpl implements EmergencyTaskService { + + @Resource + private EmergencyTaskMapper emergencyTaskMapper; + + @Resource + private EmergencyMachineryMapper emergencyMachineryMapper; + + @Resource + protected DeptApi deptApi; + + @Transactional(rollbackFor = Exception.class) + @Override + public Long createEmergencyTask(EmergencyTaskSaveReqVO createReqVO) { + String userId = SecurityFrameworkUtils.getLoginUserId() + ""; + String userName = SecurityFrameworkUtils.getLoginUserNickname(); + String taskNo = createReqVO.getTaskNo(); + if(StringUtils.isEmpty(createReqVO.getTaskNo())){ + taskNo = "T" + System.currentTimeMillis() + RandomUtil.randomInt(1000, 9999); + } + Long companyId = SecurityFrameworkUtils.getCompanyId(); + Long deptId = SecurityFrameworkUtils.getDeptId(); + // 插入 + EmergencyTaskDO emergencyTask = new EmergencyTaskDO(); + emergencyTask.setTaskNo(taskNo); + emergencyTask.setDiscoveryTime(createReqVO.getDiscoveryTime()); + emergencyTask.setEmergencyTypeId(createReqVO.getEmergencyTypeId()); + emergencyTask.setEmergencyHarmId(createReqVO.getEmergencyHarmId()); + emergencyTask.setTreeOwnershipId(createReqVO.getTreeOwnershipId()); + emergencyTask.setEmergencyLocation(createReqVO.getEmergencyLocation()); + emergencyTask.setReporter(createReqVO.getReporter()); + emergencyTask.setContactPhone(createReqVO.getContactPhone()); + emergencyTask.setRescueStartTime(createReqVO.getRescueStartTime()); + emergencyTask.setEmergencyImg(createReqVO.getEmergencyImg()); + emergencyTask.setTreeSpec(createReqVO.getTreeSpec()); + emergencyTask.setTreeSpecies(createReqVO.getTreeSpecies()); + emergencyTask.setRescueCompleteTime(createReqVO.getRescueCompleteTime()); + emergencyTask.setPersonnelCount(createReqVO.getPersonnelCount()); + emergencyTask.setEmergencyEndImg(createReqVO.getEmergencyEndImg()); + emergencyTask.setRemarks(createReqVO.getRemarks()); + emergencyTask.setBusiStatus(createReqVO.getBusiStatus()); + emergencyTask.setStatus(createReqVO.getStatus()); + emergencyTask.setCompanyId(companyId); + emergencyTask.setDeptId(deptId); + emergencyTask.setCreator(userId); + emergencyTask.setCreatorName(userName); + emergencyTask.setUpdater(userId); + emergencyTask.setUpdaterName(userName); + emergencyTask.setApprovalRemarks(""); + emergencyTaskMapper.insert(emergencyTask); + + List list = new ArrayList<>(); + String finalTaskNo = taskNo; + createReqVO.getEmergencyMachineryList().forEach(emergencyMachinery -> { + EmergencyMachineryDO emergencyMachineryDO = new EmergencyMachineryDO(); + emergencyMachineryDO.setTaskNo(finalTaskNo); + emergencyMachineryDO.setMachineryNameId(emergencyMachinery.getMachineryNameId()); + emergencyMachineryDO.setMachineryCount(emergencyMachinery.getMachineryCount()); + emergencyMachineryDO.setCreator(userId); + emergencyMachineryDO.setCreatorName(userName); + emergencyMachineryDO.setUpdater(userId); + emergencyMachineryDO.setUpdaterName(userName); + list.add(emergencyMachineryDO); + }); + + if(CollUtil.isNotEmpty(list)){ + emergencyMachineryMapper.insertBatch(list); + } + + + // 返回 + return emergencyTask.getId(); + } + + @Override + public int approvalEmergencyTask(EmergencyTaskApprovalReqVO createReqVO) { + String userId = SecurityFrameworkUtils.getLoginUserId() + ""; + String userName = SecurityFrameworkUtils.getLoginUserNickname(); + UpdateWrapper sqlWrapper = new UpdateWrapper<>(); + sqlWrapper.lambda().set(EmergencyTaskDO::getApprovalRemarks, createReqVO.getApprovalRemarks()) + .set(EmergencyTaskDO::getApprovalUserId, userId) + .set(EmergencyTaskDO::getApprovalUserName, userName) + .set(EmergencyTaskDO::getBusiStatus, createReqVO.getBusiStatus()) + .set(EmergencyTaskDO::getUpdateTime, new Date()) + .eq(EmergencyTaskDO::getTaskNo, createReqVO.getTaskNo()); + return emergencyTaskMapper.update(sqlWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateEmergencyTask(EmergencyTaskSaveReqVO updateReqVO) { + // 校验存在 + validateEmergencyTaskExists(updateReqVO.getTaskNo()); + this.deleteEmergencyTaskByTaskNo(updateReqVO.getTaskNo()); + this.createEmergencyTask(updateReqVO); + } + + @Override + public void deleteEmergencyTask(Long id) { + // 校验存在 + //validateEmergencyTaskExists(id); + // 删除 + emergencyTaskMapper.deleteById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteEmergencyTaskByTaskNo(String taskNO) { + emergencyTaskMapper.deleteByTaskNo(taskNO); + emergencyMachineryMapper.deleteByTaskNo(taskNO); + } + + @Override + public void deleteEmergencyTaskListByIds(List ids) { + // 删除 + emergencyTaskMapper.deleteByIds(ids); + } + + + private void validateEmergencyTaskExists(String taskNo) { + EmergencyTaskDO emergencyTaskDO = emergencyTaskMapper.selectOne(EmergencyTaskDO::getTaskNo, taskNo); + if(null == emergencyTaskDO){ + throw exception(EMERGENCY_TASK_NOT_EXISTS); + } + } + + @Override + public EmergencyTaskDO getEmergencyTask(Long id) { + return emergencyTaskMapper.selectById(id); + } + + @Override + public EmergencyTaskRespVO getEmergencyTaskByTaskNo(String taskNo) { + EmergencyTaskRespVO emergencyTaskRespVO = new EmergencyTaskRespVO(); + EmergencyTaskDO emergencyTaskDO = emergencyTaskMapper.selectOne(EmergencyTaskDO::getTaskNo, taskNo); + if(null != emergencyTaskDO){ + BeanUtils.copyProperties(emergencyTaskDO, emergencyTaskRespVO); + } + List detailList = emergencyMachineryMapper.selectList(EmergencyMachineryDO::getTaskNo, emergencyTaskRespVO.getTaskNo()); + if(!CollectionUtil.isEmpty(detailList)){ + emergencyTaskRespVO.setEmergencyMachineryList(detailList); + } + return emergencyTaskRespVO; + } + + @Override + public PageResult getEmergencyTaskPage(EmergencyTaskPageReqVO pageReqVO) { + Long companyId = SecurityFrameworkUtils.getCompanyId(); + //超级管理员全返回 + if(companyId != null && !companyId.equals(100L)){ + pageReqVO.setCompanyId(companyId); + } + PageResult page = emergencyTaskMapper.selectPage(pageReqVO); + + List list = page.getList(); + List listTwo = BeanUtils.toBean(list, EmergencyTaskRespVO.class); + + listTwo.forEach(emergencyTaskRespVO -> { + List detailList = emergencyMachineryMapper.selectList(EmergencyMachineryDO::getTaskNo, emergencyTaskRespVO.getTaskNo()); + if(!CollectionUtil.isEmpty(detailList)){ + emergencyTaskRespVO.setEmergencyMachineryList(detailList); + } + }); + addDataInspectionPlan(listTwo); + + // 转换返回 + return new PageResult<>(listTwo, page.getTotal()); + + } + + /** + * 回填部门/公司/角色 + * @param list 分页对象 + */ + private void addDataInspectionPlan(List list ){ + if(CollectionUtils.isEmpty(list)){ + return ; + } + //公司 + Set companyIds = list.stream().map(EmergencyTaskRespVO::getCompanyId).collect(Collectors.toSet()); + //部门 + Set deptIds = list.stream().map(EmergencyTaskRespVO::getDeptId).collect(Collectors.toSet()); + deptIds.addAll(companyIds); + /*1.获取部门*/ + Map deptMap = deptApi.getDeptMap(deptIds); + + list.forEach(plan -> { + DeptRespDTO dept = deptMap.get(plan.getDeptId()); + if (dept != null) { + plan.setDeptName(dept.getName()); + + } + DeptRespDTO company = deptMap.get(plan.getCompanyId()); + if(company != null){ + plan.setCompanyName(company.getName()); + } + }); + } + + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/resources/mapper/emergencytask/EmergencyMachineryMapper.xml b/urbanops-module-garden/src/main/resources/mapper/emergencytask/EmergencyMachineryMapper.xml new file mode 100644 index 0000000..1fec125 --- /dev/null +++ b/urbanops-module-garden/src/main/resources/mapper/emergencytask/EmergencyMachineryMapper.xml @@ -0,0 +1,15 @@ + + + + + + + DELETE FROM garden_emergency_machinery WHERE task_no = #{taskNo} + + + \ No newline at end of file diff --git a/urbanops-module-garden/src/main/resources/mapper/emergencytask/EmergencyTaskMapper.xml b/urbanops-module-garden/src/main/resources/mapper/emergencytask/EmergencyTaskMapper.xml new file mode 100644 index 0000000..1b05fce --- /dev/null +++ b/urbanops-module-garden/src/main/resources/mapper/emergencytask/EmergencyTaskMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + DELETE FROM garden_emergency_task WHERE task_no = #{taskNo} + + + \ No newline at end of file diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/user/vo/user/UserImportExcelVO.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/user/vo/user/UserImportExcelVO.java index fad3d2e..db721df 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/user/vo/user/UserImportExcelVO.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/user/vo/user/UserImportExcelVO.java @@ -41,4 +41,7 @@ public class UserImportExcelVO { @DictFormat(DictTypeConstants.COMMON_STATUS) private Integer status; + @ExcelProperty("业务线") + private String busiLine; + } diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/framework/justauth/core/AuthRequestFactory.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/framework/justauth/core/AuthRequestFactory.java index 693a092..481e4b2 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/framework/justauth/core/AuthRequestFactory.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/framework/justauth/core/AuthRequestFactory.java @@ -63,7 +63,7 @@ public class AuthRequestFactory { * * @return Oauth列表 */ - @SuppressWarnings({"unchecked", "rawtypes"}) + @SuppressWarnings({ "unchecked", "rawtypes" }) public List oauthList() { // 默认列表 List defaultList = new ArrayList<>(properties.getType().keySet()); @@ -100,9 +100,10 @@ public class AuthRequestFactory { AuthRequest authRequest = getDefaultRequest(source); // 如果获取不到则尝试取自定义的 -// if (authRequest == null) { -// authRequest = getExtendRequest(properties.getExtend().getEnumClass(), source); -// } + // if (authRequest == null) { + // authRequest = getExtendRequest(properties.getExtend().getEnumClass(), + // source); + // } if (authRequest == null) { throw new AuthException(AuthResponseStatus.UNSUPPORTED); @@ -118,7 +119,7 @@ public class AuthRequestFactory { * @param source {@link AuthSource} * @return {@link AuthRequest} */ - @SuppressWarnings({"unchecked", "rawtypes"}) + @SuppressWarnings({ "unchecked", "rawtypes" }) private AuthRequest getExtendRequest(Class clazz, String source) { String upperSource = source.toUpperCase(); try { @@ -151,7 +152,6 @@ public class AuthRequestFactory { return null; } - /** * 获取默认的 Request * @@ -272,13 +272,13 @@ public class AuthRequestFactory { case "OKTA": return new AuthOktaRequest(config, authStateCache); case "PROGINN": - return new AuthProginnRequest(config,authStateCache); + return new AuthProginnRequest(config, authStateCache); case "AFDIAN": - return new AuthAfDianRequest(config,authStateCache); + return new AuthAfDianRequest(config, authStateCache); case "APPLE": - return new AuthAppleRequest(config,authStateCache); + return new AuthAppleRequest(config, authStateCache); case "FIGMA": - return new AuthFigmaRequest(config,authStateCache); + return new AuthFigmaRequest(config, authStateCache); case "WECHAT_MINI_PROGRAM": config.setIgnoreCheckRedirectUri(true); config.setIgnoreCheckState(true); @@ -300,23 +300,26 @@ public class AuthRequestFactory { * @param authSource {@link AuthSource} * @param authConfig {@link AuthConfig} */ - private void configureHttpConfig(String authSource, AuthConfig authConfig, JustAuthProperties.JustAuthHttpConfig httpConfig) { + private void configureHttpConfig(String authSource, AuthConfig authConfig, + JustAuthProperties.JustAuthHttpConfig httpConfig) { if (null == httpConfig) { return; } - Map proxyConfigMap = httpConfig.getProxy(); - if (CollectionUtils.isEmpty(proxyConfigMap)) { - return; - } - JustAuthProperties.JustAuthProxyConfig proxyConfig = proxyConfigMap.get(authSource); - if (null == proxyConfig) { - return; + // 构建 HttpConfig,优先设置 timeout(独立于 proxy 配置) + HttpConfig.HttpConfigBuilder builder = HttpConfig.builder() + .timeout(httpConfig.getTimeout()); + + // 如果有代理配置,则设置代理 + Map proxyConfigMap = httpConfig.getProxy(); + if (!CollectionUtils.isEmpty(proxyConfigMap)) { + JustAuthProperties.JustAuthProxyConfig proxyConfig = proxyConfigMap.get(authSource); + if (null != proxyConfig) { + builder.proxy(new Proxy(Proxy.Type.valueOf(proxyConfig.getType()), + new InetSocketAddress(proxyConfig.getHostname(), proxyConfig.getPort()))); + } } - authConfig.setHttpConfig(HttpConfig.builder() - .timeout(httpConfig.getTimeout()) - .proxy(new Proxy(Proxy.Type.valueOf(proxyConfig.getType()), new InetSocketAddress(proxyConfig.getHostname(), proxyConfig.getPort()))) - .build()); + authConfig.setHttpConfig(builder.build()); } } diff --git a/urbanops-server/src/main/resources/application-dev.yaml b/urbanops-server/src/main/resources/application-dev.yaml index 4bcaf6b..c760e6d 100644 --- a/urbanops-server/src/main/resources/application-dev.yaml +++ b/urbanops-server/src/main/resources/application-dev.yaml @@ -200,7 +200,8 @@ justauth: type: REDIS prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 - + http-config: + timeout: 30000 # sso: client: switchState: on diff --git a/urbanops-server/src/main/resources/application-prod.yaml b/urbanops-server/src/main/resources/application-prod.yaml index 5cd9670..b76511d 100644 --- a/urbanops-server/src/main/resources/application-prod.yaml +++ b/urbanops-server/src/main/resources/application-prod.yaml @@ -237,7 +237,8 @@ justauth: type: REDIS prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 - + http-config: + timeout: 30000 # sso: client: switchState: on