Commit 72d5114e0d041f4a5a7c991f8bd1eca1e1207307
1 parent
4e125469
PC端增加代办接口
Showing
8 changed files
with
566 additions
and
1 deletions
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/BpmGardenInspectController.java
| @@ -3,19 +3,34 @@ package com.zteits.urbanops.module.workorder.controller.admin.garden; | @@ -3,19 +3,34 @@ package com.zteits.urbanops.module.workorder.controller.admin.garden; | ||
| 3 | import com.zteits.urbanops.framework.common.pojo.CommonResult; | 3 | import com.zteits.urbanops.framework.common.pojo.CommonResult; |
| 4 | import com.zteits.urbanops.framework.common.pojo.PageResult; | 4 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| 5 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; | 5 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; |
| 6 | -import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderCreateReqVO; | 6 | +import com.zteits.urbanops.module.bpm.api.task.BpmTaskApi; |
| 7 | +import com.zteits.urbanops.module.bpm.api.task.dto.BpmUserSimpleReqDTO; | ||
| 8 | +import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenTaskAssignReqVO; | ||
| 7 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; | 9 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; |
| 8 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderRespVO; | 10 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderRespVO; |
| 11 | +import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.task.AdminGardenTaskApproveReqVO; | ||
| 12 | +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskApproveReqVO; | ||
| 13 | +import com.zteits.urbanops.module.workorder.dal.dataobject.attachment.AttachmentDO; | ||
| 9 | import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO; | 14 | import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO; |
| 15 | +import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoExtDO; | ||
| 16 | +import com.zteits.urbanops.module.workorder.service.attachment.AttachmentService; | ||
| 17 | +import com.zteits.urbanops.module.workorder.service.garden.BpmGardenAdminService; | ||
| 10 | import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService; | 18 | import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService; |
| 11 | import io.swagger.v3.oas.annotations.Operation; | 19 | import io.swagger.v3.oas.annotations.Operation; |
| 12 | import io.swagger.v3.oas.annotations.Parameter; | 20 | import io.swagger.v3.oas.annotations.Parameter; |
| 13 | import io.swagger.v3.oas.annotations.tags.Tag; | 21 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 14 | import jakarta.annotation.Resource; | 22 | import jakarta.annotation.Resource; |
| 15 | import jakarta.validation.Valid; | 23 | import jakarta.validation.Valid; |
| 24 | +import org.apache.commons.collections4.CollectionUtils; | ||
| 16 | import org.springframework.security.access.prepost.PreAuthorize; | 25 | import org.springframework.security.access.prepost.PreAuthorize; |
| 17 | import org.springframework.validation.annotation.Validated; | 26 | import org.springframework.validation.annotation.Validated; |
| 18 | import org.springframework.web.bind.annotation.*; | 27 | import org.springframework.web.bind.annotation.*; |
| 28 | +import com.zteits.urbanops.module.workorder.convert.garden.AdminGardenTaskConvert; | ||
| 29 | + | ||
| 30 | +import java.util.Collections; | ||
| 31 | +import java.util.List; | ||
| 32 | +import java.util.Map; | ||
| 33 | +import java.util.stream.Collectors; | ||
| 19 | 34 | ||
| 20 | import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; | 35 | import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; |
| 21 | import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | 36 | import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| @@ -34,6 +49,15 @@ public class BpmGardenInspectController { | @@ -34,6 +49,15 @@ public class BpmGardenInspectController { | ||
| 34 | @Resource | 49 | @Resource |
| 35 | private BpmGardenService gardenService; | 50 | private BpmGardenService gardenService; |
| 36 | 51 | ||
| 52 | + @Resource | ||
| 53 | + BpmGardenAdminService gardenAdminService; | ||
| 54 | + | ||
| 55 | + @Resource | ||
| 56 | + AttachmentService attachmentService; | ||
| 57 | + | ||
| 58 | + @Resource | ||
| 59 | + private BpmTaskApi bpmTaskApi; | ||
| 60 | + | ||
| 37 | /*@PostMapping("/create") | 61 | /*@PostMapping("/create") |
| 38 | @PreAuthorize("@ss.hasPermission('bpm:garden-inspection:create')") | 62 | @PreAuthorize("@ss.hasPermission('bpm:garden-inspection:create')") |
| 39 | @Operation(summary = "创建请求申请") | 63 | @Operation(summary = "创建请求申请") |
| @@ -57,4 +81,64 @@ public class BpmGardenInspectController { | @@ -57,4 +81,64 @@ public class BpmGardenInspectController { | ||
| 57 | PageResult<BpmGardenWorkOrderDO> pageResult = gardenService.getGardenInspectionPage(getLoginUserId(), pageVO); | 81 | PageResult<BpmGardenWorkOrderDO> pageResult = gardenService.getGardenInspectionPage(getLoginUserId(), pageVO); |
| 58 | return success(BeanUtils.toBean(pageResult, BpmGardenWorkOrderRespVO.class)); | 82 | return success(BeanUtils.toBean(pageResult, BpmGardenWorkOrderRespVO.class)); |
| 59 | } | 83 | } |
| 84 | + | ||
| 85 | + | ||
| 86 | + @GetMapping("todoBuzSimplePage") | ||
| 87 | + @Operation(summary = "PC - 获取工单业务待办任务分页") | ||
| 88 | + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:query')") | ||
| 89 | + public CommonResult<PageResult<BpmGardenWorkOrderRespVO>> getTaskTodoBuzSimplePage(@Valid BpmGardenWorkOrderPageReqVO pageVO) { | ||
| 90 | + PageResult<MainInfoExtDO> pageResult = gardenAdminService.getTaskTodoBuzSimplePage(pageVO); | ||
| 91 | + if (pageResult == null) { | ||
| 92 | + return success(PageResult.empty()); | ||
| 93 | + } | ||
| 94 | + // 2. 初始化附件映射(默认空Map,避免后续空指针) | ||
| 95 | + Map<String, AttachmentDO> attachmentMap = Collections.emptyMap(); | ||
| 96 | + | ||
| 97 | + // 3. 空值防护:分页结果非空且列表非空时,才查询附件 | ||
| 98 | + if (pageResult != null && !CollectionUtils.isEmpty(pageResult.getList())) { | ||
| 99 | + // 提取订单号列表 | ||
| 100 | + List<String> orderNoList = pageResult.getList().stream() | ||
| 101 | + .map(MainInfoExtDO::getOrderNo) | ||
| 102 | + .filter(orderNo -> orderNo != null && !orderNo.isBlank()) | ||
| 103 | + .collect(Collectors.toList()); | ||
| 104 | + | ||
| 105 | + // 若订单号列表非空,查询附件;否则跳过 | ||
| 106 | + if (!CollectionUtils.isEmpty(orderNoList)) { | ||
| 107 | + List<AttachmentDO> attachmentDOList = attachmentService.getAttachmentByOrderNo(orderNoList); | ||
| 108 | + // 构建订单号→附件对象的映射(处理重复key,取第一个对象) | ||
| 109 | + if (!CollectionUtils.isEmpty(attachmentDOList)) { | ||
| 110 | + attachmentMap = attachmentDOList.stream() | ||
| 111 | + .filter(attachmentDO -> "01".equals(attachmentDO.getBusiType())) | ||
| 112 | + .collect(Collectors.toMap( | ||
| 113 | + AttachmentDO::getOrderNo, // key:订单号 | ||
| 114 | + attachmentDO -> attachmentDO, // value:附件对象 | ||
| 115 | + (existing, replacement) -> existing // 重复key时保留已有值 | ||
| 116 | + )); | ||
| 117 | + } | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + //4. 查询处理人 | ||
| 121 | + List<String> processInstanceIdList = pageResult.getList().stream() | ||
| 122 | + .map(MainInfoExtDO::getProcessInstanceId) | ||
| 123 | + .filter(orderNo -> orderNo != null && !orderNo.isBlank()) | ||
| 124 | + .collect(Collectors.toList()); | ||
| 125 | + | ||
| 126 | + //Map<String, BpmUserSimpleReqDTO> bpmTaskRespVOS = bpmTaskApi.getLastTaskMapByProcessInstanceId(processInstanceIdList); | ||
| 127 | + return success(AdminGardenTaskConvert.INSTANCE.buildMainInfoPage(pageResult, attachmentMap, null)); | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + @PutMapping("assignWOrder") | ||
| 131 | + @Operation(summary = "分配工单提交任务") | ||
| 132 | + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") | ||
| 133 | + public CommonResult<Boolean> assignWOrder(@Valid @RequestBody List<BpmGardenTaskAssignReqVO> reqVO) { | ||
| 134 | + return success(gardenAdminService.assignWOrder(reqVO)); | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + @PutMapping("/approve") | ||
| 138 | + @Operation(summary = "app - 审批通过任务") | ||
| 139 | + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") | ||
| 140 | + public CommonResult<Boolean> approveTask(@Valid @RequestBody AdminGardenTaskApproveReqVO reqVO) { | ||
| 141 | + //gardenService.approveTask(reqVO); | ||
| 142 | + return success(true); | ||
| 143 | + } | ||
| 60 | } | 144 | } |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenTaskAssignReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.workorder.controller.admin.garden.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import jakarta.validation.constraints.NotEmpty; | ||
| 5 | +import jakarta.validation.constraints.NotNull; | ||
| 6 | +import lombok.Data; | ||
| 7 | + | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * @Author wangqian | ||
| 12 | + * @Description 分配任务请求reqVO | ||
| 13 | + * @Date 2025/12/20 10:14 | ||
| 14 | + * @Param null | ||
| 15 | + * @Return | ||
| 16 | + */ | ||
| 17 | +@Schema(description = "分配工单流程任务的 Request VO") | ||
| 18 | +@Data | ||
| 19 | +public class BpmGardenTaskAssignReqVO { | ||
| 20 | + | ||
| 21 | + @Schema(description = "工单表主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 22 | + @NotNull(message = "id不能为空") | ||
| 23 | + private Long id; | ||
| 24 | + | ||
| 25 | + @Schema(description = "工单处理方", requiredMode = Schema.RequiredMode.REQUIRED, example = "yl") | ||
| 26 | + @NotEmpty(message = "工单处理方不能为空") | ||
| 27 | + private String busiLine; | ||
| 28 | + | ||
| 29 | + @Schema(description = "道路ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21128") | ||
| 30 | + @NotNull(message = "道路ID不能为空") | ||
| 31 | + private Long roadId; | ||
| 32 | + | ||
| 33 | + @Schema(description = "道路名称", example = "测试道路") | ||
| 34 | + private String roadName; | ||
| 35 | + | ||
| 36 | + @Schema(description = "紧急程度:1:特急;2:紧急;3:一般", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ||
| 37 | + @NotNull(message = "紧急程度:1:特急;2:紧急;3:一般不能为空") | ||
| 38 | + private Integer pressingType; | ||
| 39 | + | ||
| 40 | + @Schema(description = "完成时间") | ||
| 41 | + private LocalDateTime finishDate; | ||
| 42 | + | ||
| 43 | +} |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenWorkOrderPageReqVO.java
| @@ -13,4 +13,25 @@ import lombok.Data; | @@ -13,4 +13,25 @@ import lombok.Data; | ||
| 13 | @Schema(description = "管理后台 - 园林工单申请分页 Request VO") | 13 | @Schema(description = "管理后台 - 园林工单申请分页 Request VO") |
| 14 | @Data | 14 | @Data |
| 15 | public class BpmGardenWorkOrderPageReqVO extends PageParam { | 15 | public class BpmGardenWorkOrderPageReqVO extends PageParam { |
| 16 | + | ||
| 17 | + @Schema(description = "工单号") | ||
| 18 | + private String orderNo; | ||
| 19 | + | ||
| 20 | + @Schema(description = "工单名称", example = "张三") | ||
| 21 | + private String orderName; | ||
| 22 | + @Schema(description = "工单描述", example = "你说的对") | ||
| 23 | + private String remark; | ||
| 24 | + @Schema(description = "来源ID", example = "1") | ||
| 25 | + private Integer sourceId; | ||
| 26 | + | ||
| 27 | + @Schema(description = "街道ID", example = "27852") | ||
| 28 | + private String streetId; | ||
| 29 | + | ||
| 30 | + @Schema(description = "养护级别ID", example = "1") | ||
| 31 | + private Integer curingLevelId; | ||
| 32 | + @Schema(description = "紧急程度:1:特急;2:紧急;3:一般", example = "2") | ||
| 33 | + private Integer pressingType; | ||
| 34 | + | ||
| 35 | + @Schema(description = "审批状态", example = "2") | ||
| 36 | + private Integer status; | ||
| 16 | } | 37 | } |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenWorkOrderRespVO.java
| 1 | package com.zteits.urbanops.module.workorder.controller.admin.garden.vo; | 1 | package com.zteits.urbanops.module.workorder.controller.admin.garden.vo; |
| 2 | 2 | ||
| 3 | +import cn.idev.excel.annotation.ExcelProperty; | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | import lombok.Data; | 5 | import lombok.Data; |
| 5 | 6 | ||
| 7 | +import java.math.BigDecimal; | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | +import java.util.List; | ||
| 10 | +import java.util.Set; | ||
| 11 | + | ||
| 6 | /** | 12 | /** |
| 7 | * @author yanhuiqing | 13 | * @author yanhuiqing |
| 8 | * @version 1.0 | 14 | * @version 1.0 |
| @@ -12,4 +18,188 @@ import lombok.Data; | @@ -12,4 +18,188 @@ import lombok.Data; | ||
| 12 | @Schema(description = "管理后台 - 园林工单流程 Response VO") | 18 | @Schema(description = "管理后台 - 园林工单流程 Response VO") |
| 13 | @Data | 19 | @Data |
| 14 | public class BpmGardenWorkOrderRespVO { | 20 | public class BpmGardenWorkOrderRespVO { |
| 21 | + | ||
| 22 | + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7114") | ||
| 23 | + @ExcelProperty("ID") | ||
| 24 | + private Long id; | ||
| 25 | + | ||
| 26 | + @Schema(description = "业务线:yl 园林,wy 物业,sz 市政 ", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 27 | + @ExcelProperty("业务线:yl 园林,wy 物业,sz 市政 ") | ||
| 28 | + private String busiLine; | ||
| 29 | + | ||
| 30 | + @Schema(description = "工单号", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 31 | + @ExcelProperty("工单号") | ||
| 32 | + private String orderNo; | ||
| 33 | + | ||
| 34 | + @Schema(description = "工单名称", example = "张三") | ||
| 35 | + @ExcelProperty("工单名称") | ||
| 36 | + private String orderName; | ||
| 37 | + | ||
| 38 | + /** | ||
| 39 | + * 工单类型 Q:快速工单,C:普通工单,O:其他工单 | ||
| 40 | + */ | ||
| 41 | + private String orderType; | ||
| 42 | + | ||
| 43 | + @Schema(description = "来源ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1828") | ||
| 44 | + @ExcelProperty("来源ID 问题来源 1、巡查,2、游客居民,3、12345,4、网格 5、大区经理") | ||
| 45 | + private Integer sourceId; | ||
| 46 | + | ||
| 47 | + @Schema(description = "来源名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") | ||
| 48 | + @ExcelProperty("来源名称") | ||
| 49 | + private String sourceName; | ||
| 50 | + | ||
| 51 | + @Schema(description = "道路ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21128") | ||
| 52 | + @ExcelProperty("道路ID") | ||
| 53 | + private Long roadId; | ||
| 54 | + | ||
| 55 | + @Schema(description = "道路名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") | ||
| 56 | + @ExcelProperty("道路名称") | ||
| 57 | + private String roadName; | ||
| 58 | + | ||
| 59 | + @Schema(description = "街道ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27852") | ||
| 60 | + @ExcelProperty("街道ID") | ||
| 61 | + private String streetId; | ||
| 62 | + | ||
| 63 | + @Schema(description = "街道名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") | ||
| 64 | + @ExcelProperty("街道名称") | ||
| 65 | + private String streetName; | ||
| 66 | + | ||
| 67 | + @Schema(description = "养护级别ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28278") | ||
| 68 | + @ExcelProperty("养护级别ID") | ||
| 69 | + private Integer curingLevelId; | ||
| 70 | + | ||
| 71 | + @Schema(description = "养护级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") | ||
| 72 | + @ExcelProperty("养护级别") | ||
| 73 | + private String curingLevelName; | ||
| 74 | + | ||
| 75 | + @Schema(description = "提交日期", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 76 | + @ExcelProperty("提交日期") | ||
| 77 | + private LocalDateTime commitDate; | ||
| 78 | + | ||
| 79 | + @Schema(description = "希望完成时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 80 | + @ExcelProperty("希望完成时间") | ||
| 81 | + private LocalDateTime expectedFinishDate; | ||
| 82 | + | ||
| 83 | + @Schema(description = "完成时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 84 | + @ExcelProperty("完成时间") | ||
| 85 | + private LocalDateTime finishDate; | ||
| 86 | + | ||
| 87 | + @Schema(description = "紧急程度:1:特急;2:紧急;3:一般", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ||
| 88 | + @ExcelProperty("紧急程度:1:特急;2:紧急;3:一般") | ||
| 89 | + private Integer pressingType; | ||
| 90 | + | ||
| 91 | + @Schema(description = "提交用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12757") | ||
| 92 | + private Long userId; | ||
| 93 | + | ||
| 94 | + @Schema(description = "提交用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") | ||
| 95 | + @ExcelProperty("提交用户名称") | ||
| 96 | + private String userName; | ||
| 97 | + | ||
| 98 | + @Schema(description = "部门id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26936") | ||
| 99 | + private Long companyId; | ||
| 100 | + | ||
| 101 | + @Schema(description = "单位名称") | ||
| 102 | + @ExcelProperty("单位名称") | ||
| 103 | + private String companyName; | ||
| 104 | + | ||
| 105 | + @Schema(description = "经纬度类型: 1:国标; 2:百度;3:高德;4:腾讯", example = "2") | ||
| 106 | + @ExcelProperty("经纬度类型: 1:国标; 2:百度;3:高德;4:腾讯") | ||
| 107 | + private Integer latLonType; | ||
| 108 | + | ||
| 109 | + @Schema(description = "经度", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 110 | + @ExcelProperty("经度") | ||
| 111 | + private BigDecimal lat; | ||
| 112 | + | ||
| 113 | + @Schema(description = "维度", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 114 | + @ExcelProperty("维度") | ||
| 115 | + private BigDecimal lon; | ||
| 116 | + | ||
| 117 | + @Schema(description = "经纬度地址", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 118 | + @ExcelProperty("经纬度地址") | ||
| 119 | + private String lonLatAddress; | ||
| 120 | + | ||
| 121 | + @Schema(description = "三方工单ID") | ||
| 122 | + @ExcelProperty("三方工单ID") | ||
| 123 | + private String thirdWorkNo; | ||
| 124 | + | ||
| 125 | + @Schema(description = "三方工单结果上报状态:1:待推送;2:推送成功;3:推送失败") | ||
| 126 | + @ExcelProperty("三方工单结果上报状态:1:待推送;2:推送成功;3:推送失败") | ||
| 127 | + private Integer thirdPushState; | ||
| 128 | + | ||
| 129 | + @Schema(description = "业务状态", example = "1") | ||
| 130 | + @ExcelProperty("业务状态") | ||
| 131 | + private String buzStatus; | ||
| 132 | + | ||
| 133 | + @Schema(description = "审批状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ||
| 134 | + @ExcelProperty("审批状态") | ||
| 135 | + private Integer status; | ||
| 136 | + | ||
| 137 | + @Schema(description = "流程实例的编号", example = "9184") | ||
| 138 | + @ExcelProperty("流程实例的编号") | ||
| 139 | + private String processInstanceId; | ||
| 140 | + | ||
| 141 | + @Schema(description = "工单描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") | ||
| 142 | + @ExcelProperty("工单描述") | ||
| 143 | + private String remark; | ||
| 144 | + | ||
| 145 | + @Schema(description = "工单完成结果描述", example = "已完成") | ||
| 146 | + @ExcelProperty("工单完成结果描述") | ||
| 147 | + private String handleResult; | ||
| 148 | + | ||
| 149 | + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 150 | + @ExcelProperty("创建时间") | ||
| 151 | + private LocalDateTime createTime; | ||
| 152 | + | ||
| 153 | + @Schema(description = "文件名称") | ||
| 154 | + private List<String> fileNames; | ||
| 155 | + | ||
| 156 | + @Schema(description = "共同处理人") | ||
| 157 | + private Set<Long> coHandlers; | ||
| 158 | + @Schema(description = "共同处理人名称,多个为数组") | ||
| 159 | + private List<String> coHandlersName; | ||
| 160 | + | ||
| 161 | + @Schema(description = "提交人电话") | ||
| 162 | + private String userMobile; | ||
| 163 | + | ||
| 164 | + @Schema(description = "养护员") | ||
| 165 | + private String workerName; | ||
| 166 | + | ||
| 167 | + @Schema(description = "实施人员部门id") | ||
| 168 | + private Long workerCompanyId; | ||
| 169 | + | ||
| 170 | + @Schema(description = "处理人") | ||
| 171 | + private String assigneeName; | ||
| 172 | + | ||
| 173 | + @Schema(description = "审批节点") | ||
| 174 | + private String approvalNode; | ||
| 175 | + | ||
| 176 | + | ||
| 177 | + /** | ||
| 178 | + * 任务id | ||
| 179 | + */ | ||
| 180 | + private String taskId; | ||
| 181 | + /** | ||
| 182 | + * 任务名称 | ||
| 183 | + */ | ||
| 184 | + private String taskName; | ||
| 185 | + /** | ||
| 186 | + * 任务key | ||
| 187 | + */ | ||
| 188 | + private String taskKey; | ||
| 189 | + /** | ||
| 190 | + * 流程定义名称 | ||
| 191 | + */ | ||
| 192 | + private String processDefinitionName; | ||
| 193 | + /** | ||
| 194 | + * 任务开始时间 | ||
| 195 | + */ | ||
| 196 | + private LocalDateTime startTime; | ||
| 197 | + /** | ||
| 198 | + * 任务结束时间 | ||
| 199 | + */ | ||
| 200 | + private LocalDateTime endTime; | ||
| 201 | + /** | ||
| 202 | + * 流程定义key | ||
| 203 | + */ | ||
| 204 | + private String key_; | ||
| 15 | } | 205 | } |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/task/AdminGardenTaskApproveReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.workorder.controller.admin.garden.vo.task; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import jakarta.validation.constraints.NotEmpty; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +import java.util.List; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * 类描述:园林pc端工单任务审批通过VO | ||
| 11 | + * 创建人:yanhuiqing | ||
| 12 | + * 创建时间:2025/12/13 21:33 | ||
| 13 | + * 修改人:yanhuiqing | ||
| 14 | + * 修改时间:2025/12/13 21:33 | ||
| 15 | + * 修改备注: | ||
| 16 | + * | ||
| 17 | + * @author yanhuiqing | ||
| 18 | + * @version 1.0 | ||
| 19 | + */ | ||
| 20 | +@Schema(description = "PC - 通过流程任务的 Request VO") | ||
| 21 | +@Data | ||
| 22 | +public class AdminGardenTaskApproveReqVO { | ||
| 23 | + | ||
| 24 | + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 25 | + @NotEmpty(message = "任务编号不能为空") | ||
| 26 | + private String id; | ||
| 27 | + | ||
| 28 | + @Schema(description = "审批意见", example = "通过!") | ||
| 29 | + private String reason; | ||
| 30 | + | ||
| 31 | + @Schema(description = "同意选择类型:0 同意,1 不同意", example = "0") | ||
| 32 | + //@NotNull(message = "同意选择类型不能为空") | ||
| 33 | + private Integer agree; | ||
| 34 | + | ||
| 35 | + @Schema(description = "工单的数据id", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 36 | + //@NotEmpty(message = "工单的数据id不能为空") | ||
| 37 | + private Long workerDataId; | ||
| 38 | + | ||
| 39 | + @Schema(description = "退回时的拍照图片") | ||
| 40 | + private List<String> returnImgs; | ||
| 41 | + | ||
| 42 | +} |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/convert/garden/AdminGardenTaskConvert.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.workorder.convert.garden; | ||
| 2 | + | ||
| 3 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 4 | +import com.zteits.urbanops.framework.common.util.collection.CollectionUtils; | ||
| 5 | +import com.zteits.urbanops.framework.common.util.object.BeanUtils; | ||
| 6 | +import com.zteits.urbanops.module.bpm.api.task.dto.BpmUserSimpleReqDTO; | ||
| 7 | +import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderRespVO; | ||
| 8 | +import com.zteits.urbanops.module.workorder.convert.maininfo.MainInfoConvert; | ||
| 9 | +import com.zteits.urbanops.module.workorder.dal.dataobject.attachment.AttachmentDO; | ||
| 10 | +import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoExtDO; | ||
| 11 | +import org.mapstruct.Mapper; | ||
| 12 | +import org.mapstruct.factory.Mappers; | ||
| 13 | + | ||
| 14 | +import java.util.Arrays; | ||
| 15 | +import java.util.List; | ||
| 16 | +import java.util.Map; | ||
| 17 | +import java.util.stream.Collectors; | ||
| 18 | + | ||
| 19 | +/** | ||
| 20 | + * @Classname AdminGardenTaskConvert | ||
| 21 | + * @Description PC端代办 | ||
| 22 | + * @Date 2025/12/26 16:51 | ||
| 23 | + * @Created by wangqian | ||
| 24 | + */ | ||
| 25 | +@Mapper | ||
| 26 | +public class AdminGardenTaskConvert { | ||
| 27 | + public static final AdminGardenTaskConvert INSTANCE = Mappers.getMapper(AdminGardenTaskConvert.class); | ||
| 28 | + | ||
| 29 | + public PageResult<BpmGardenWorkOrderRespVO> buildMainInfoPage(PageResult<MainInfoExtDO> pageResult, Map<String, AttachmentDO> attachmentMap, Map<String, BpmUserSimpleReqDTO> bpmTaskRespVOS) { | ||
| 30 | + List<BpmGardenWorkOrderRespVO> mainInfoVOList = CollectionUtils.convertList(pageResult.getList(), mainInfoDO -> { | ||
| 31 | + BpmGardenWorkOrderRespVO mainInfoVo = BeanUtils.toBean(mainInfoDO, BpmGardenWorkOrderRespVO.class); | ||
| 32 | + if (attachmentMap != null && !attachmentMap.isEmpty()) { | ||
| 33 | + AttachmentDO attachmentDO = attachmentMap.get(mainInfoDO.getOrderNo()); | ||
| 34 | + if (attachmentDO != null) { | ||
| 35 | + String fileNamesStr = attachmentDO.getFileNames(); | ||
| 36 | + List<String> fileNameList = fileNamesStr == null | ||
| 37 | + ? List.of() | ||
| 38 | + : Arrays.stream(fileNamesStr.split(",")) | ||
| 39 | + .filter(fileName -> fileName != null && !fileName.trim().isEmpty()) // 过滤空字符串和空白 | ||
| 40 | + .collect(Collectors.toList()); | ||
| 41 | + mainInfoVo.setFileNames(fileNameList); | ||
| 42 | + } | ||
| 43 | + if (bpmTaskRespVOS != null && !bpmTaskRespVOS.isEmpty()) { | ||
| 44 | + BpmUserSimpleReqDTO bpmUserSimpleReqDTO = bpmTaskRespVOS.get(mainInfoDO.getProcessInstanceId()); | ||
| 45 | + if (bpmUserSimpleReqDTO != null) { | ||
| 46 | + mainInfoVo.setAssigneeName(bpmUserSimpleReqDTO.getAssigneeName()); | ||
| 47 | + mainInfoVo.setApprovalNode(bpmUserSimpleReqDTO.getName()); | ||
| 48 | + mainInfoVo.setStatus(bpmUserSimpleReqDTO.getTaskStatus()); | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + } | ||
| 52 | + return mainInfoVo; | ||
| 53 | + }); | ||
| 54 | + return new PageResult<>(mainInfoVOList, pageResult.getTotal()); | ||
| 55 | + } | ||
| 56 | +} |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenAdminService.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.workorder.service.garden; | ||
| 2 | + | ||
| 3 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 4 | +import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenTaskAssignReqVO; | ||
| 5 | +import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; | ||
| 6 | +import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderRespVO; | ||
| 7 | +import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoExtDO; | ||
| 8 | + | ||
| 9 | +import java.util.List; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * @Classname BpmGardenAdminService | ||
| 13 | + * @Description PC端流程操作 | ||
| 14 | + * @Date 2025/12/20 10:27 | ||
| 15 | + * @Created by wangqian | ||
| 16 | + */ | ||
| 17 | +public interface BpmGardenAdminService { | ||
| 18 | + | ||
| 19 | + /** | ||
| 20 | + * 工单业务待办 列表 -pc端 | ||
| 21 | + * @param pageVO | ||
| 22 | + * @return | ||
| 23 | + */ | ||
| 24 | + PageResult<MainInfoExtDO> getTaskTodoBuzSimplePage(BpmGardenWorkOrderPageReqVO pageVO); | ||
| 25 | + | ||
| 26 | + /** | ||
| 27 | + * @Author wangqian | ||
| 28 | + * @Description 分配工单 | ||
| 29 | + * @Date 2025/12/20 10:43 | ||
| 30 | + * @Param reqVO | ||
| 31 | + * @Return java.lang.Boolean | ||
| 32 | + */ | ||
| 33 | + public Boolean assignWOrder(List<BpmGardenTaskAssignReqVO> reqVO); | ||
| 34 | + | ||
| 35 | + | ||
| 36 | +} |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenAdminServiceImpl.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.workorder.service.garden; | ||
| 2 | + | ||
| 3 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 4 | +import com.zteits.urbanops.framework.common.util.object.ObjectUtils; | ||
| 5 | +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; | ||
| 6 | +import com.zteits.urbanops.module.system.api.user.AdminUserApi; | ||
| 7 | +import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant; | ||
| 8 | +import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenTaskAssignReqVO; | ||
| 9 | +import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; | ||
| 10 | +import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderRespVO; | ||
| 11 | +import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoHasTaskPageReqVO; | ||
| 12 | +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.AppGardenWorkOrderPageReqVO; | ||
| 13 | +import com.zteits.urbanops.module.workorder.convert.garden.AppGardenTaskConvert; | ||
| 14 | +import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; | ||
| 15 | +import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoExtDO; | ||
| 16 | +import com.zteits.urbanops.module.workorder.dal.mysql.attachment.AttachmentMapper; | ||
| 17 | +import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoExtMapper; | ||
| 18 | +import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper; | ||
| 19 | +import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderRespVO; | ||
| 20 | +import com.zteits.urbanops.module.workorder.service.maininfo.MainInfoService; | ||
| 21 | +import jakarta.annotation.Resource; | ||
| 22 | +import org.apache.commons.collections4.CollectionUtils; | ||
| 23 | +import org.springframework.stereotype.Service; | ||
| 24 | +import org.springframework.transaction.annotation.Transactional; | ||
| 25 | + | ||
| 26 | +import java.util.List; | ||
| 27 | + | ||
| 28 | +import static com.zteits.urbanops.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST; | ||
| 29 | +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception0; | ||
| 30 | + | ||
| 31 | +/** | ||
| 32 | + * @Classname BpmGardenAdminServiceImpl | ||
| 33 | + * @Description PC端流程操作 | ||
| 34 | + * @Date 2025/12/20 10:28 | ||
| 35 | + * @Created by wangqian | ||
| 36 | + */ | ||
| 37 | +@Service | ||
| 38 | +public class BpmGardenAdminServiceImpl implements BpmGardenAdminService { | ||
| 39 | + | ||
| 40 | + @Resource | ||
| 41 | + private MainInfoService mainInfoService; | ||
| 42 | + | ||
| 43 | + @Resource | ||
| 44 | + private MainInfoMapper mainInfoMapper; | ||
| 45 | + @Resource | ||
| 46 | + private MainInfoExtMapper workOrderExtMapper; | ||
| 47 | + | ||
| 48 | + @Override | ||
| 49 | + public PageResult<MainInfoExtDO> getTaskTodoBuzSimplePage(BpmGardenWorkOrderPageReqVO pageVO) { | ||
| 50 | + MainInfoHasTaskPageReqVO taskBuzReqVO = new MainInfoHasTaskPageReqVO(); | ||
| 51 | + | ||
| 52 | + taskBuzReqVO.setUserId(SecurityFrameworkUtils.getLoginUserId()); | ||
| 53 | + //只查普通工单 | ||
| 54 | + taskBuzReqVO.setOrderType(BpmCommonConstant.ORDER_TYPE_C); | ||
| 55 | + return workOrderExtMapper.selectWorkOrderTodoPage(pageVO,taskBuzReqVO); | ||
| 56 | + } | ||
| 57 | + /** | ||
| 58 | + * @Author wangqian | ||
| 59 | + * @Description 分配工单 | ||
| 60 | + * @Date 2025/12/20 10:32 | ||
| 61 | + * @Param reqVO | ||
| 62 | + * @Return void | ||
| 63 | + */ | ||
| 64 | + @Override | ||
| 65 | + @Transactional | ||
| 66 | + public Boolean assignWOrder(List<BpmGardenTaskAssignReqVO> reqVO) { | ||
| 67 | + if (CollectionUtils.isEmpty(reqVO) || reqVO.size() > 1) { | ||
| 68 | + throw exception0(BAD_REQUEST.getCode(),"分配工单参数异常"); | ||
| 69 | + } | ||
| 70 | + //获取工单信息 | ||
| 71 | + MainInfoDO mainInfo = mainInfoService.getMainInfo(reqVO.get(0).getId()); | ||
| 72 | + if (mainInfo == null) { | ||
| 73 | + throw exception0(BAD_REQUEST.getCode(),"工单信息不存在"); | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + //分配工单 | ||
| 77 | + for (BpmGardenTaskAssignReqVO assignReqVO : reqVO) { | ||
| 78 | + //bmp推进工作流 | ||
| 79 | + | ||
| 80 | + //跟新工单信息 | ||
| 81 | + MainInfoDO mainInfoDO = new MainInfoDO(); | ||
| 82 | + mainInfoDO.setRoadId(assignReqVO.getRoadId()); | ||
| 83 | + mainInfoDO.setRoadName(assignReqVO.getRoadName()); | ||
| 84 | + mainInfoDO.setBusiLine(assignReqVO.getBusiLine()); | ||
| 85 | + mainInfoDO.setPressingType(assignReqVO.getPressingType()); | ||
| 86 | + mainInfoMapper.updateById(mainInfoDO); | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + return Boolean.TRUE; | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + | ||
| 93 | +} |