From 5c22d0b6292b0b3598d563728ffa678ca02e0cc3 Mon Sep 17 00:00:00 2001 From: yanhuiqing Date: Mon, 29 Dec 2025 16:39:04 +0800 Subject: [PATCH] 全域巡查员流程 和业务线变动改造 --- urbanops-module-api/urbanops-module-workorder-api/src/main/java/com/zteits/urbanops/module/workorder/dto/AppGardenWorkOrderUniversalReqVO.java | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/api/road/RoadApiImpl.java | 2 +- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/road/RoadService.java | 7 +++++++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/road/RoadServiceImpl.java | 9 ++++++++- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/annotation/AutoUpdateWorkerOrderUniversalBuzStatus.java | 16 ++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/api/constant/BpmCommonConstant.java | 6 ++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderRegionMgrController.java | 12 ++++++------ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderUniversalController.java | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/aop/BuzStatusUpdateAspect.java | 30 ++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/aop/UniversalBuzStatusUpdateAspect.java | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskRegionMgrApproveReqVO.java | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/ErrorCodeConstants.java | 8 ++++++-- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/UniversalOperateTypeEnum.java | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmRegionMgrServiceImpl.java | 4 ++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmUniversalService.java | 11 ++++++++++- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmUniversalServiceImpl.java | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BpmProcessTaskAutoCompleteRegionMgrListener.java | 35 +++++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BpmProcessTaskAutoCompleteUniversalListener.java | 35 +++++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/util/RoleListUtils.java | 26 ++++++++++++++++++++++++++ 19 files changed, 835 insertions(+), 66 deletions(-) create mode 100644 urbanops-module-api/urbanops-module-workorder-api/src/main/java/com/zteits/urbanops/module/workorder/dto/AppGardenWorkOrderUniversalReqVO.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/annotation/AutoUpdateWorkerOrderUniversalBuzStatus.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/aop/UniversalBuzStatusUpdateAspect.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskRegionMgrApproveReqVO.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/UniversalOperateTypeEnum.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BpmProcessTaskAutoCompleteRegionMgrListener.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BpmProcessTaskAutoCompleteUniversalListener.java diff --git a/urbanops-module-api/urbanops-module-workorder-api/src/main/java/com/zteits/urbanops/module/workorder/dto/AppGardenWorkOrderUniversalReqVO.java b/urbanops-module-api/urbanops-module-workorder-api/src/main/java/com/zteits/urbanops/module/workorder/dto/AppGardenWorkOrderUniversalReqVO.java new file mode 100644 index 0000000..306f8a6 --- /dev/null +++ b/urbanops-module-api/urbanops-module-workorder-api/src/main/java/com/zteits/urbanops/module/workorder/dto/AppGardenWorkOrderUniversalReqVO.java @@ -0,0 +1,68 @@ +package com.zteits.urbanops.module.workorder.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author yanhuiqing + * @version 1.0 + * @description: app- 全域巡查员端请求参数 + * @date 2025/12/6 10:17 + */ +@Schema(description = "APP-园林工单全域巡查员请求创建 Request VO") +@Data +public class AppGardenWorkOrderUniversalReqVO { + + + /** + * 工单类型 Q:快速工单,C:普通工单,O:其他工单 + */ + private String orderType; + + @Schema(description = "问题图片", example = "9184") + private List problemsImgs; + + @Schema(description = "工单描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") + @NotEmpty(message = "工单描述不能为空") + @Length(max = 500) + private String remark; + + @Schema(description = "经纬度类型: 1:国标; 2:百度;3:高德;4:腾讯", example = "2") + private Integer latLonType; + + @Schema(description = "经度", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "经度不能为空") + private BigDecimal lat; + + @Schema(description = "维度", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "维度不能为空") + private BigDecimal lon; + + @Schema(description = "经纬度地址", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "经纬度地址不能为空") + private String lonLatAddress; + + @Schema(description = "工单名称", example = "绿地卫生") + private String orderName; + + @Schema(description = "来源ID 工单来源 1、巡查,2、游客居民,3、12345,4、网格", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + //@NotNull(message = "来源ID不能为空") + private Integer sourceId; + + @Schema(description = "来源名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "园林") + //@NotEmpty(message = "来源名称不能为空") + private String sourceName; + + @Schema(description = "三方工单ID") + private String thirdWorkNo; + + +} + diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/api/road/RoadApiImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/api/road/RoadApiImpl.java index a0ce625..5f39f15 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/api/road/RoadApiImpl.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/api/road/RoadApiImpl.java @@ -63,7 +63,7 @@ public class RoadApiImpl implements RoadApi { @Override public RoadStreetRespDTO getRoadInfoById(Long id) { - RoadRespVO roadRespVO = roadService.getRoad(id); + RoadRespVO roadRespVO = roadService.getUniqueRoad(id); return BeanUtils.toBean(roadRespVO, RoadStreetRespDTO.class); } } diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/road/RoadService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/road/RoadService.java index e7a97b1..708995d 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/road/RoadService.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/road/RoadService.java @@ -66,4 +66,11 @@ public interface RoadService { */ List getRoadList(RoadListReqVO reqVO); + /** + * 只获取道路信息 + * + * @param id 编号 + * @return 道路管理 + */ + RoadRespVO getUniqueRoad(Long id); } \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/road/RoadServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/road/RoadServiceImpl.java index 1a97bf3..4d07a79 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/road/RoadServiceImpl.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/road/RoadServiceImpl.java @@ -111,7 +111,12 @@ public class RoadServiceImpl implements RoadService { addDataInspectionPlan(list); return respVO; } - + @Override + public RoadRespVO getUniqueRoad(Long id) { + RoadDO roadDO = roadMapper.selectById(id); + RoadRespVO respVO = BeanUtils.toBean(roadDO, RoadRespVO.class); + return respVO; + } @Override public PageResult getRoadPage(RoadPageReqVO pageReqVO) { PageResult pageResult = roadInterceptMapper.selectForPage(pageReqVO); @@ -161,4 +166,6 @@ public class RoadServiceImpl implements RoadService { return roadMapper.selectList(sql); } + + } \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/annotation/AutoUpdateWorkerOrderUniversalBuzStatus.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/annotation/AutoUpdateWorkerOrderUniversalBuzStatus.java new file mode 100644 index 0000000..8f01576 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/annotation/AutoUpdateWorkerOrderUniversalBuzStatus.java @@ -0,0 +1,16 @@ +package com.zteits.urbanops.module.workorder.annotation; + +import java.lang.annotation.*; + +/** + * 创 建 人:yanhuiqing + * 创建时间:2025/12/21 14:50 + * 类描述:自动更新工单表业务状态 + * + * @author yanhuiqing + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface AutoUpdateWorkerOrderUniversalBuzStatus { +} diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/api/constant/BpmCommonConstant.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/api/constant/BpmCommonConstant.java index 49404b6..101a2dc 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/api/constant/BpmCommonConstant.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/api/constant/BpmCommonConstant.java @@ -61,10 +61,16 @@ public class BpmCommonConstant { public static final String BPM_COMMON_PROD_ISVERIFY = "isVerify"; /** + * 流转通过 + */ + public static final String BMP_COMMON_PROD_ISPASS = "isPass"; + /** * 是否全域的大区经理 key */ public static final String BPM_COMMON_PROD_GLOBAL = "isGlobal"; + public static final String BPM_COMMON_PROD_BUSILINE = "busiLine"; + //----------------------------------------工单初始化流程变量key---------------------- /** diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderRegionMgrController.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderRegionMgrController.java index 71f8eb6..d5d3d5c 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderRegionMgrController.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderRegionMgrController.java @@ -76,7 +76,7 @@ public class AppGardenWorkOrderRegionMgrController { //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") public CommonResult universalApproval(@Valid @RequestBody AppUniversalApprovalReqVO reqVO) { - log.info("【园林统一审批】接收前端请求,入参:curTaskKey={}, taskId={}, operateType={}, agree={}, reason={}", + log.info("【园林大区经理审批】接收前端请求,入参:curTaskKey={}, taskId={}, operateType={}, agree={}, reason={}", reqVO.getTaskKey(), reqVO.getTaskId(), reqVO.getOperateType(), reqVO.getAgree(), reqVO.getReason()); OperateTypeEnum operateType = OperateTypeEnum.getByCode(reqVO.getOperateType()); @@ -162,8 +162,8 @@ public class AppGardenWorkOrderRegionMgrController { gardenService.approveTask(returnApproveReqVO); log.info("当前操作:"+OperateTypeEnum.YL_TEAM_LEADER_RETURN.getDesc()+"<--结束"); return success(true); - case YL_INSPECTOR_START_FINISH : //巡查员结束工单 - log.info("当前操作:养护组长结束工单(不同意)或巡查员重新发起(同意)开始,是否同意:"+reqVO.getAgree()+"-->"); + case YL_INSPECTOR_START_FINISH : //大区经理结束工单 + log.info("当前操作:养护组长结束工单(不同意)或大区经理重新发起(同意)开始,是否同意:"+reqVO.getAgree()+"-->"); AppGardenTaskApproveReqVO inspectStartReqVO = new AppGardenTaskApproveReqVO(); Integer revokeStatus = reqVO.getAgree(); if (revokeStatus == null || (revokeStatus != 0 && revokeStatus != 1)) { @@ -176,7 +176,7 @@ public class AppGardenWorkOrderRegionMgrController { gardenService.approveTask(inspectStartReqVO); log.info("当前操作:"+OperateTypeEnum.YL_INSPECTOR_START_FINISH.getDesc()+"<--结束"); return success(true); - case YL_INSPECTOR_START_RELAUNCH : //巡查员重新发起 需修改更新工单数据 见切面 + case YL_INSPECTOR_START_RELAUNCH : //大区经理重新发起 需修改更新工单数据 见切面 log.info("当前操作:"+OperateTypeEnum.YL_INSPECTOR_START_RELAUNCH.getDesc()+"开始,操作类型:"+OperateTypeEnum.YL_INSPECTOR_START_RELAUNCH.getCode()+"-->"); AppGardenTaskApproveReqVO reStartReqVO = new AppGardenTaskApproveReqVO(); Integer reStatus = reqVO.getAgree(); @@ -194,8 +194,8 @@ public class AppGardenWorkOrderRegionMgrController { gardenService.approveTask(reStartReqVO); log.info("当前操作:"+OperateTypeEnum.YL_INSPECTOR_START_RELAUNCH.getDesc()+"<--结束"); return success(true); - case YL_INSPECTOR_CHECK_PASS , YL_INSPECTOR_CHECK_REJECT ://巡查员验收通过,巡查员验收不通过 - log.info("当前操作:巡查员验收通过 或巡查员验收不通过开始,是否同意:"+reqVO.getAgree()+"-->"); + case YL_INSPECTOR_CHECK_PASS , YL_INSPECTOR_CHECK_REJECT ://大区经理验收通过,大区经理验收不通过 + log.info("当前操作:大区经理验收通过 或大区经理验收不通过开始,是否同意:"+reqVO.getAgree()+"-->"); AppGardenTaskApproveReqVO inspectReqVO = new AppGardenTaskApproveReqVO(); Integer verifyStatus = reqVO.getAgree(); if (verifyStatus == null || (verifyStatus != 0 && verifyStatus != 1)) { diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderUniversalController.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderUniversalController.java index 5b2fe90..4d60592 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderUniversalController.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderUniversalController.java @@ -1,8 +1,19 @@ package com.zteits.urbanops.module.workorder.controller.app.garden; import com.zteits.urbanops.framework.common.pojo.CommonResult; +import com.zteits.urbanops.framework.common.util.object.ObjectUtils; import com.zteits.urbanops.module.garden.api.road.RoadApi; +import com.zteits.urbanops.module.workorder.annotation.AutoUpdateWorkerOrderBuzStatus; +import com.zteits.urbanops.module.workorder.annotation.AutoUpdateWorkerOrderUniversalBuzStatus; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.common.AppUniversalApprovalReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskReturnExtReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskTeamLeaderAssignReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskWorkerExcuteReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskApproveReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskRegionMgrApproveReqVO; import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderReqVO; +import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderUniversalReqVO; +import com.zteits.urbanops.module.workorder.enums.UniversalOperateTypeEnum; import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService; import com.zteits.urbanops.module.workorder.service.garden.BpmUniversalService; import io.swagger.v3.oas.annotations.Operation; @@ -10,12 +21,17 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; +import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.*; /** * 类描述:园林 全域工单管理入口 @@ -49,9 +65,183 @@ public class AppGardenWorkOrderUniversalController { @PostMapping("/create") //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:create')") - @Operation(summary = "app-创建工单信息") - public CommonResult createMainInfo(@Valid @RequestBody AppGardenWorkOrderReqVO createReqVO) { + @Operation(summary = "app-全域巡查员创建工单信息") + public CommonResult createMainInfo(@Valid @RequestBody AppGardenWorkOrderUniversalReqVO createReqVO) { return success(universalService.createWorkOrder(createReqVO)); } + @Operation(summary = "app-统一审批入口") + @PostMapping("/universalApproval") + @AutoUpdateWorkerOrderUniversalBuzStatus + @Transactional(rollbackFor = Exception.class) + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") + public CommonResult universalApproval(@Valid @RequestBody AppUniversalApprovalReqVO reqVO) { + + log.info("【园林大区经理审批】接收前端请求,入参:curTaskKey={}, taskId={}, operateType={}, agree={}, reason={}", + reqVO.getTaskKey(), reqVO.getTaskId(), reqVO.getOperateType(), reqVO.getAgree(), reqVO.getReason()); + + UniversalOperateTypeEnum operateType = UniversalOperateTypeEnum.getByCode(reqVO.getOperateType()); + + switch (operateType) { + case REGION_MANAGER_ASSIGN://大区经理审批通过 + log.info("当前操作:"+UniversalOperateTypeEnum.REGION_MANAGER_ASSIGN.getDesc()+"开始,操作类型:"+UniversalOperateTypeEnum.REGION_MANAGER_ASSIGN.getCode()+"-->"); + AppGardenTaskRegionMgrApproveReqVO regionPassReqVO = new AppGardenTaskRegionMgrApproveReqVO(); + Integer passStatus = reqVO.getAgree(); + if (passStatus == null || (passStatus != 0 && passStatus != 1)) { + throw exception(APP_AGREE_CHOOSE); + } + regionPassReqVO.setBusiLine(reqVO.getBusiLine()); + regionPassReqVO.setRoadId(reqVO.getRoadId()); + regionPassReqVO.setAgree(passStatus); + regionPassReqVO.setReason(reqVO.getReason()); + regionPassReqVO.setId(reqVO.getTaskId()); + regionPassReqVO.setReturnImgs(reqVO.getReturnImgs()); + universalService.approveTask2TeamLeader(regionPassReqVO); + log.info("当前操作:"+UniversalOperateTypeEnum.REGION_MANAGER_ASSIGN.getDesc()+"<--结束"); + return success(true); + case REGION_MANAGER_RETURN://大区经理退回 + log.info("当前操作:"+UniversalOperateTypeEnum.REGION_MANAGER_RETURN.getDesc()+"开始,操作类型:"+UniversalOperateTypeEnum.REGION_MANAGER_RETURN.getCode()+"-->"); + AppGardenTaskRegionMgrApproveReqVO regionArroveReqVO = new AppGardenTaskRegionMgrApproveReqVO(); + Integer regionStatus = reqVO.getAgree(); + if (regionStatus == null || (regionStatus != 0 && regionStatus != 1)) { + throw exception(APP_AGREE_CHOOSE); + } + regionArroveReqVO.setAgree(regionStatus); + regionArroveReqVO.setReason(reqVO.getReason()); + regionArroveReqVO.setId(reqVO.getTaskId()); + regionArroveReqVO.setReturnImgs(reqVO.getReturnImgs()); + universalService.approveTask2TeamLeader(regionArroveReqVO); + log.info("当前操作:"+UniversalOperateTypeEnum.REGION_MANAGER_RETURN.getDesc()+"<--结束"); + return success(true); + case YL_WORKER_RETURN:// 养护员退回 + log.info("当前操作:"+UniversalOperateTypeEnum.YL_WORKER_RETURN.getDesc()+"开始,操作类型:"+UniversalOperateTypeEnum.YL_WORKER_RETURN.getCode()+"-->"); + AppGardenTaskReturnExtReqVO retReqVO = new AppGardenTaskReturnExtReqVO(); + retReqVO.setId(reqVO.getTaskId()); + retReqVO.setCurTaskKey(reqVO.getTaskKey()); + retReqVO.setReason(reqVO.getReason()); + retReqVO.setWorkerDataId(reqVO.getWorkerDataId()); + retReqVO.setReturnImgs(reqVO.getReturnImgs()); + gardenService.returnPreviousNode(retReqVO); + log.info("当前操作:"+UniversalOperateTypeEnum.YL_WORKER_RETURN.getDesc()+"<--结束"); + return success(true); + case YL_WORKER_IMPLEMENT://养护员实施 需修改更新工单数据 见切面 + log.info("当前操作:"+UniversalOperateTypeEnum.YL_WORKER_IMPLEMENT.getDesc()+"开始,操作类型:"+UniversalOperateTypeEnum.YL_WORKER_IMPLEMENT.getCode()+"-->"); + AppGardenTaskWorkerExcuteReqVO workerExcuteReqVO = new AppGardenTaskWorkerExcuteReqVO(); + workerExcuteReqVO.setWorkerDataId(reqVO.getWorkerDataId()); + workerExcuteReqVO.setId(reqVO.getTaskId()); + workerExcuteReqVO.setCoHandlers(reqVO.getCoHandlers()); + workerExcuteReqVO.setHandleResult(reqVO.getHandleResult()); + workerExcuteReqVO.setProblemsImgs(reqVO.getProblemsImgs()); + workerExcuteReqVO.setStartImgs(reqVO.getStartImgs()); + workerExcuteReqVO.setProcessingImgs(reqVO.getProcessingImgs()); + workerExcuteReqVO.setEndImgs(reqVO.getEndImgs()); + workerExcuteReqVO.setPersonImgs(reqVO.getPersonImgs()); + workerExcuteReqVO.setMaterialImgs(reqVO.getMaterialImgs()); + gardenService.ylWorkerExcuteWOrder(workerExcuteReqVO); + log.info("当前操作:"+UniversalOperateTypeEnum.YL_WORKER_IMPLEMENT.getDesc()+"<--结束"); + return success(true); + case YL_TEAM_LEADER_CONFIRM_PASS://养护组长验收通过 + log.info("当前操作:"+UniversalOperateTypeEnum.YL_TEAM_LEADER_CONFIRM_PASS.getDesc()+"开始,操作类型:"+UniversalOperateTypeEnum.YL_TEAM_LEADER_CONFIRM_PASS.getCode()+"-->"); + AppGardenTaskApproveReqVO approveReqVO = new AppGardenTaskApproveReqVO(); + approveReqVO.setReason(reqVO.getReason()); + approveReqVO.setId(reqVO.getTaskId()); + gardenService.approveTask(approveReqVO); + log.info("当前操作:"+UniversalOperateTypeEnum.YL_TEAM_LEADER_CONFIRM_PASS.getDesc()+"<--结束"); + return success(true); + case YL_TEAM_LEADER_CONFIRM_REJECT://养护组长验收不通过 需修改更新工单数据 见切面 + log.info("当前操作:"+UniversalOperateTypeEnum.YL_TEAM_LEADER_CONFIRM_REJECT.getDesc()+"开始,操作类型:"+UniversalOperateTypeEnum.YL_TEAM_LEADER_CONFIRM_REJECT.getCode()+"-->"); + AppGardenTaskReturnExtReqVO rejReqVO = new AppGardenTaskReturnExtReqVO(); + rejReqVO.setId(reqVO.getTaskId()); + rejReqVO.setCurTaskKey(reqVO.getTaskKey()); + rejReqVO.setReason(reqVO.getReason()); + rejReqVO.setWorkerDataId(reqVO.getWorkerDataId()); + List returnImgs = reqVO.getReturnImgs(); + rejReqVO.setReturnImgs(returnImgs); + gardenService.returnPreviousNode(rejReqVO); + log.info("当前操作:"+UniversalOperateTypeEnum.YL_TEAM_LEADER_CONFIRM_REJECT.getDesc()+"<--结束"); + return success(true); + case YL_TEAM_LEADER_ASSIGN: //养护组长分配 需修改更新工单数据 见切面 + log.info("当前操作:"+UniversalOperateTypeEnum.YL_TEAM_LEADER_ASSIGN.getDesc()+"开始,操作类型:"+UniversalOperateTypeEnum.YL_TEAM_LEADER_ASSIGN.getCode()+"-->"); + AppGardenTaskTeamLeaderAssignReqVO assignReqVO = new AppGardenTaskTeamLeaderAssignReqVO(); + assignReqVO.setId(reqVO.getTaskId()); + assignReqVO.setReason(reqVO.getReason()); + Long userId = reqVO.getNextAssignee(); + if(!ObjectUtils.isNotAllEmpty(userId)){ + throw exception(APP_WORKER_NOT_EXISTS); + } + assignReqVO.setNextAssignee(reqVO.getNextAssignee()); + Integer status = reqVO.getAgree(); + if (status == null || (status != 0 && status != 1)) { + throw exception(APP_AGREE_CHOOSE); + } + assignReqVO.setAgree(status); + gardenService.ylTeamLeaderAssignWOrder(assignReqVO); + log.info("当前操作:"+UniversalOperateTypeEnum.YL_TEAM_LEADER_ASSIGN.getDesc()+"<--结束"); + return success(true); + + case YL_TEAM_LEADER_RETURN://养护组长退回 + log.info("当前操作:"+UniversalOperateTypeEnum.YL_TEAM_LEADER_RETURN.getDesc()+"开始,操作类型:"+UniversalOperateTypeEnum.YL_TEAM_LEADER_RETURN.getCode()+"-->"); + AppGardenTaskApproveReqVO returnApproveReqVO = new AppGardenTaskApproveReqVO(); + Integer approveStatus = reqVO.getAgree(); + if (approveStatus == null || (approveStatus != 0 && approveStatus != 1)) { + throw exception(APP_AGREE_CHOOSE); + } + returnApproveReqVO.setAgree(approveStatus); + returnApproveReqVO.setReason(reqVO.getReason()); + returnApproveReqVO.setId(reqVO.getTaskId()); + returnApproveReqVO.setReturnImgs(reqVO.getReturnImgs()); + gardenService.approveTask(returnApproveReqVO); + log.info("当前操作:"+UniversalOperateTypeEnum.YL_TEAM_LEADER_RETURN.getDesc()+"<--结束"); + return success(true); + case YL_INSPECTOR_START_FINISH : //巡查员结束工单 + log.info("当前操作:养护组长结束工单(不同意)或大区经理重新发起(同意)开始,是否同意:"+reqVO.getAgree()+"-->"); + AppGardenTaskApproveReqVO inspectStartReqVO = new AppGardenTaskApproveReqVO(); + Integer revokeStatus = reqVO.getAgree(); + if (revokeStatus == null || (revokeStatus != 0 && revokeStatus != 1)) { + throw exception(APP_AGREE_CHOOSE); + } + inspectStartReqVO.setAgree(revokeStatus); + inspectStartReqVO.setReason(reqVO.getReason()); + inspectStartReqVO.setId(reqVO.getTaskId()); + inspectStartReqVO.setReturnImgs(reqVO.getReturnImgs()); + gardenService.approveTask(inspectStartReqVO); + log.info("当前操作:"+UniversalOperateTypeEnum.YL_INSPECTOR_START_FINISH.getDesc()+"<--结束"); + return success(true); + case YL_INSPECTOR_START_RELAUNCH : //全域巡查员重新发起 需修改更新工单数据 见切面 + log.info("当前操作:"+UniversalOperateTypeEnum.YL_INSPECTOR_START_RELAUNCH.getDesc()+"开始,操作类型:"+UniversalOperateTypeEnum.YL_INSPECTOR_START_RELAUNCH.getCode()+"-->"); + AppGardenTaskApproveReqVO reStartReqVO = new AppGardenTaskApproveReqVO(); + Integer reStatus = reqVO.getAgree(); + if (reStatus == null || (reStatus != 0 && reStatus != 1)) { + throw exception(APP_AGREE_CHOOSE); + } + Long id = reqVO.getWorkerDataId(); + if (id == null) { + throw exception(APP_WORKER_ID_NOT_EMPTY); + } + reStartReqVO.setWorkerDataId(id); + reStartReqVO.setAgree(reStatus); + reStartReqVO.setReason(reqVO.getReason()); + reStartReqVO.setId(reqVO.getTaskId()); + gardenService.approveTask(reStartReqVO); + log.info("当前操作:"+UniversalOperateTypeEnum.YL_INSPECTOR_START_RELAUNCH.getDesc()+"<--结束"); + return success(true); + case YL_INSPECTOR_CHECK_PASS , YL_INSPECTOR_CHECK_REJECT ://大区经理验收通过,大区经理验收不通过 + log.info("当前操作:全域巡查员验收通过 或全域巡查员验收不通过开始,是否同意:"+reqVO.getAgree()+"-->"); + AppGardenTaskApproveReqVO inspectReqVO = new AppGardenTaskApproveReqVO(); + Integer verifyStatus = reqVO.getAgree(); + if (verifyStatus == null || (verifyStatus != 0 && verifyStatus != 1)) { + throw exception(APP_AGREE_CHOOSE); + } + inspectReqVO.setAgree(verifyStatus); + inspectReqVO.setReason(reqVO.getReason()); + inspectReqVO.setId(reqVO.getTaskId()); + inspectReqVO.setReturnImgs(reqVO.getReturnImgs()); + gardenService.approveTask(inspectReqVO); + log.info("当前操作:"+UniversalOperateTypeEnum.YL_INSPECTOR_START_FINISH.getDesc()+"<--结束"); + return success(true); + default: + throw exception(APP_OPERATOR_NOT_EXISTS); + } + } + } \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/aop/BuzStatusUpdateAspect.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/aop/BuzStatusUpdateAspect.java index 38d323a..02e9f5d 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/aop/BuzStatusUpdateAspect.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/aop/BuzStatusUpdateAspect.java @@ -13,6 +13,7 @@ import com.zteits.urbanops.module.workorder.controller.app.garden.vo.common.AppU import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper; import com.zteits.urbanops.module.workorder.enums.OperateTypeEnum; +import com.zteits.urbanops.module.workorder.enums.UniversalOperateTypeEnum; import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService; import com.zteits.urbanops.module.workorder.service.maininfo.MainInfoService; import jakarta.annotation.Resource; @@ -83,6 +84,7 @@ public class BuzStatusUpdateAspect { // 2. 解析操作类型 OperateTypeEnum operateType = OperateTypeEnum.getByCode(reqVO.getOperateType()); + UniversalOperateTypeEnum universalOperateTypeEnum = UniversalOperateTypeEnum.getByCode(reqVO.getOperateType()); Long workerDataId = reqVO.getWorkerDataId(); Integer buzStatus = operateType.getCode(); @@ -93,11 +95,39 @@ public class BuzStatusUpdateAspect { targeVO.setId(workerDataId); targeVO.setOrderNo(dbData.getOrderNo()); targeVO.setBusiLine(dbData.getBusiLine()); + //大区经理分配 + if(UniversalOperateTypeEnum.REGION_MANAGER_ASSIGN.getCode().equals(reqVO.getOperateType())){ + buzStatus = universalOperateTypeEnum.getCode(); + RoadStreetRespDTO roadStreetRespDTO = roadApi.getRoadInfoById(reqVO.getRoadId()); + targeVO.setStreetId(roadStreetRespDTO.getStreetId()); + targeVO.setStreetName(roadStreetRespDTO.getStreetName()); + DictDataRespDTO dictData = dictDataCommonApi.getDictData(CONSERVE_LEVEL, roadStreetRespDTO.getLevelId().toString()); + if(null == dictData){ + throw exception(APP_WORKER_LEVEL_ID_NOT_EXISTS); + } + targeVO.setCuringLevelId(Integer.valueOf(dictData.getValue())); + targeVO.setCuringLevelName(dictData.getLabel()); + targeVO.setBusiLine(reqVO.getBusiLine()); + + targeVO.setRoadName(reqVO.getRoadName()); + targeVO.setRoadId(reqVO.getRoadId()); + targeVO.setPressingType(reqVO.getPressingType()); + targeVO.setExpectedFinishDate(reqVO.getExpectedFinishDate()); + } + + //大区经理退回 + if(UniversalOperateTypeEnum.REGION_MANAGER_RETURN.getCode().equals(reqVO.getOperateType())){ + buzStatus = universalOperateTypeEnum.getCode(); + } //重新发起需更新表单数据 if(OperateTypeEnum.YL_INSPECTOR_START_RELAUNCH.getCode().equals(operateType.getCode())){ RoadStreetRespDTO roadStreetRespDTO = roadApi.getRoadInfoById(reqVO.getRoadId()); targeVO = BeanUtils.toBean(reqVO,MainInfoDO.class); targeVO.setId(reqVO.getWorkerDataId()); + + targeVO.setRoadName(reqVO.getRoadName()); + targeVO.setRoadId(reqVO.getRoadId()); + targeVO.setOrderNo(dbData.getOrderNo()); targeVO.setStreetId(roadStreetRespDTO.getStreetId()); targeVO.setStreetName(roadStreetRespDTO.getStreetName()); diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/aop/UniversalBuzStatusUpdateAspect.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/aop/UniversalBuzStatusUpdateAspect.java new file mode 100644 index 0000000..b737152 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/aop/UniversalBuzStatusUpdateAspect.java @@ -0,0 +1,197 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.aop; + +import com.zteits.urbanops.framework.common.biz.system.dict.DictDataCommonApi; +import com.zteits.urbanops.framework.common.biz.system.dict.dto.DictDataRespDTO; +import com.zteits.urbanops.framework.common.util.object.BeanUtils; +import com.zteits.urbanops.framework.common.util.object.ObjectUtils; +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; +import com.zteits.urbanops.module.garden.api.road.RoadApi; +import com.zteits.urbanops.module.garden.dto.road.RoadStreetRespDTO; +import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.common.AppUniversalApprovalReqVO; +import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; +import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper; +import com.zteits.urbanops.module.workorder.enums.OperateTypeEnum; +import com.zteits.urbanops.module.workorder.enums.UniversalOperateTypeEnum; +import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService; +import jakarta.annotation.Resource; +import jodd.util.StringUtil; +import lombok.RequiredArgsConstructor; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.List; + +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant.CONSERVE_LEVEL; +import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.APP_WORKER_LEVEL_ID_NOT_EXISTS; + +/** + * 类描述:切面更新工单表业务状态 + * 创建人:yanhuiqing + * 创建时间:2025/12/21 14:53 + * 修改人:yanhuiqing + * 修改时间:2025/12/21 14:53 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Aspect +@Component +@RequiredArgsConstructor +public class UniversalBuzStatusUpdateAspect { + + @Resource + private MainInfoMapper mainInfoMapper; + + @Resource + private final RoadApi roadApi; + + @Resource + private BpmGardenService gardenService; + + @Resource + private final DictDataCommonApi dictDataCommonApi; + + // 切点:标注了@AutoUpdateBuzStatus的方法 + @Pointcut("@annotation(com.zteits.urbanops.module.workorder.annotation.AutoUpdateWorkerOrderUniversalBuzStatus)") + public void buzStatusUpdatePointcut() {} + + @Around("buzStatusUpdatePointcut()") + @Transactional(rollbackFor = Exception.class) + public Object around(ProceedingJoinPoint joinPoint) throws Throwable { + // 1. 获取方法参数(AppUniversalApprovalReqVO) + Object[] args = joinPoint.getArgs(); + AppUniversalApprovalReqVO reqVO = null; + for (Object arg : args) { + if (arg instanceof AppUniversalApprovalReqVO) { + reqVO = (AppUniversalApprovalReqVO) arg; + break; + } + } + if (reqVO == null) { + throw new IllegalArgumentException("方法参数中未找到AppUniversalApprovalReqVO"); + } + + // 2. 解析操作类型 + UniversalOperateTypeEnum operateType = UniversalOperateTypeEnum.getByCode(reqVO.getOperateType()); + Long workerDataId = reqVO.getWorkerDataId(); + Integer buzStatus = operateType.getCode(); + + // 3. 执行原有方法 + Object result = joinPoint.proceed(); + MainInfoDO dbData = mainInfoMapper.selectById(workerDataId); + MainInfoDO targeVO = new MainInfoDO(); + targeVO.setId(workerDataId); + targeVO.setOrderNo(dbData.getOrderNo()); + targeVO.setBusiLine(dbData.getBusiLine()); + //大区经理分配 + if(UniversalOperateTypeEnum.REGION_MANAGER_ASSIGN.getCode().equals(reqVO.getOperateType())){ + RoadStreetRespDTO roadStreetRespDTO = roadApi.getRoadInfoById(reqVO.getRoadId()); + targeVO.setStreetId(roadStreetRespDTO.getStreetId()); + targeVO.setStreetName(roadStreetRespDTO.getStreetName()); + DictDataRespDTO dictData = dictDataCommonApi.getDictData(CONSERVE_LEVEL, roadStreetRespDTO.getLevelId().toString()); + if(null == dictData){ + throw exception(APP_WORKER_LEVEL_ID_NOT_EXISTS); + } + targeVO.setCuringLevelId(Integer.valueOf(dictData.getValue())); + targeVO.setCuringLevelName(dictData.getLabel()); + targeVO.setBusiLine(reqVO.getBusiLine()); + + targeVO.setRoadName(reqVO.getRoadName()); + targeVO.setRoadId(reqVO.getRoadId()); + targeVO.setPressingType(reqVO.getPressingType()); + targeVO.setExpectedFinishDate(reqVO.getExpectedFinishDate()); + } + + //大区经理退回 + if(UniversalOperateTypeEnum.REGION_MANAGER_RETURN.getCode().equals(reqVO.getOperateType())){ + + } + //重新发起需更新表单数据 + if(UniversalOperateTypeEnum.YL_INSPECTOR_START_RELAUNCH.getCode().equals(operateType.getCode())){ + targeVO = BeanUtils.toBean(reqVO,MainInfoDO.class); + targeVO.setId(reqVO.getWorkerDataId()); + targeVO.setOrderNo(dbData.getOrderNo()); + targeVO.setCommitDate(LocalDateTime.now()); + if(reqVO.getExpectedFinishDate() != null){ + targeVO.setExpectedFinishDate(reqVO.getExpectedFinishDate());//重新发起的期望时间 + } + targeVO.setCompanyId(SecurityFrameworkUtils.getCompanyId()); + + targeVO.setUserId(SecurityFrameworkUtils.getLoginUserId()); + targeVO.setUserName(SecurityFrameworkUtils.getLoginUserNickname()); + if(reqVO.getFinishDate() != null){ + targeVO.setFinishDate(reqVO.getFinishDate()); + } + + List problemsImgs = reqVO.getProblemsImgs(); + if(ObjectUtils.isNotAllEmpty(problemsImgs) && problemsImgs.size()>0){ + gardenService.attachmentInsertOrUpdate(problemsImgs,BpmCommonConstant.PROBLEM_IMG_GROUP,targeVO); + } + } + //养护组长分配需更新表单数据 + if(UniversalOperateTypeEnum.YL_TEAM_LEADER_ASSIGN.getCode().equals(operateType.getCode())){ + targeVO.setWorkerId(reqVO.getNextAssignee()); + } + //养护组长验收不通过 需更新表单数据 + if(UniversalOperateTypeEnum.YL_TEAM_LEADER_CONFIRM_REJECT.getCode().equals(operateType.getCode())){ + + List returnImgs = reqVO.getReturnImgs(); + if(ObjectUtils.isNotAllEmpty(returnImgs) && returnImgs.size()>0){ + gardenService.attachmentInsertOrUpdate(returnImgs,BpmCommonConstant.GARDEN_TEAMLEADER_RETURN_IMG,targeVO); + } + } + //养护员实施 需更新表单数据 + if(UniversalOperateTypeEnum.YL_WORKER_IMPLEMENT.getCode().equals(operateType.getCode())){ + //实施更新为实施人员部门 + targeVO.setDeptId(SecurityFrameworkUtils.getDeptId()); + //实施 审批已经执行 此处就无需执行 + /* + List problemsImgs = reqVO.getProblemsImgs(); + List startImgs = reqVO.getStartImgs(); + List processingImgs = reqVO.getProcessingImgs(); + List endImgs = reqVO.getEndImgs(); + List personImgs = reqVO.getPersonImgs(); + List materialImgs = reqVO.getMaterialImgs(); + + targeVO.setHandleResult(reqVO.getHandleResult()); + targeVO.setCoHandlers(reqVO.getCoHandlers()); + targeVO.setWorkerId(SecurityFrameworkUtils.getLoginUserId()); + targeVO.setWorkerName(SecurityFrameworkUtils.getLoginUserNickname()); + targeVO.setWorkerCompanyId(SecurityFrameworkUtils.getCompanyId()); + mainInfoMapper.updateById(targeVO); + + if(ObjectUtils.isNotAllEmpty(problemsImgs) && problemsImgs.size()>0){ + gardenService.attachmentInsertOrUpdate(problemsImgs,BpmCommonConstant.PROBLEM_IMG_GROUP,targeVO); + } + if(ObjectUtils.isNotAllEmpty(startImgs) && startImgs.size()>0){ + gardenService.attachmentInsertOrUpdate(startImgs,BpmCommonConstant.START_IMG_GROUP,targeVO); + } + if(ObjectUtils.isNotAllEmpty(processingImgs) && processingImgs.size()>0){ + gardenService.attachmentInsertOrUpdate(processingImgs,BpmCommonConstant.PROCESS_IMG_GROUP,targeVO); + } + + if(ObjectUtils.isNotAllEmpty(endImgs) && endImgs.size()>0){ + gardenService.attachmentInsertOrUpdate(endImgs,BpmCommonConstant.END_IMG_GROUP,targeVO); + } + if(ObjectUtils.isNotAllEmpty(personImgs) && personImgs.size()>0){ + gardenService.attachmentInsertOrUpdate(personImgs,BpmCommonConstant.PERSON_IMG_GROUP,targeVO); + } + if(ObjectUtils.isNotAllEmpty(materialImgs) && materialImgs.size()>0){ + gardenService.attachmentInsertOrUpdate(materialImgs,BpmCommonConstant.MATERIAL_IMG_GROUP,targeVO); + }*/ + } + // 4. 自动更新buz_status + targeVO.setBuzStatus(buzStatus.toString()); + mainInfoMapper.updateById(targeVO); + + return result; + } +} \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskRegionMgrApproveReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskRegionMgrApproveReqVO.java new file mode 100644 index 0000000..670347a --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskRegionMgrApproveReqVO.java @@ -0,0 +1,63 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 类描述:园林APP端工单任务审批通过VO + * 创建人:yanhuiqing + * 创建时间:2025/12/13 21:33 + * 修改人:yanhuiqing + * 修改时间:2025/12/13 21:33 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "APP - 通过流程任务的 Request VO") +@Data +public class AppGardenTaskRegionMgrApproveReqVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "审批意见", example = "通过!") + private String reason; + + @Schema(description = "同意选择类型:0 同意,1 不同意", example = "0") + //@NotNull(message = "同意选择类型不能为空") + private Integer agree; + + @Schema(description = "工单的数据id", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "工单的数据id不能为空") + private Long workerDataId; + + @Schema(description = "道路ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21128") + @NotNull(message = "道路ID不能为空") + private Long roadId; + + @Schema(description = "道路名称", example = "测试道路") + private String roadName; + + @Schema(description = " 紧急程度:1:特急;2:紧急;3:一般", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "紧急程度:1:特急;2:紧急;3:一般") + private Integer pressingType; + + @NotNull + @Schema(description = "工单业务线", example = "yl") + private String busiLine; + + @Schema(description = "希望完成时间", example = "1766505427000") // Swagger文档示例 + private LocalDateTime expectedFinishDate; + + + @Schema(description = "退回时的拍照图片") + private List returnImgs; + +} \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/ErrorCodeConstants.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/ErrorCodeConstants.java index e39ac75..bc1da1e 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/ErrorCodeConstants.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/ErrorCodeConstants.java @@ -35,7 +35,11 @@ public interface ErrorCodeConstants { ErrorCode APP_WORK_ORADER_NO_NOT_EXISTS = new ErrorCode(1-900-002-003, "工单编号不能为空!"); - ErrorCode APP_WORK_ORADER_ROLE_ILLEGLE = new ErrorCode(1-900-002-004, "该登录人即是 大区经理 角色,又是 全域督察员,无法处理流程!"); + ErrorCode APP_WORK_ORADER_ROLE_ILLEGLE = new ErrorCode(1-900-002-004, "该登录人即是 大区经理 角色,又是 全域督察员,无法发起流程!"); - ErrorCode APP_WORK_ORADER_ROLE_NOT_EXSITS = new ErrorCode(1-900-002-005, "该登录人即不是 大区经理 角色,又不是 全域督察员,无法处理流程!"); + ErrorCode APP_WORK_ORADER_ROLE_NOT_EXSITS = new ErrorCode(1-900-002-005, "该登录人即不是 大区经理 角色,又不是 全域督察员,无法发起流程!"); + + ErrorCode APP_UNIVERSAL_USER_ROLE_ERROR = new ErrorCode(1-900-002-006, "该登录人不是 全域巡查员,无法发起流程!"); + + ErrorCode APP_REGIONMGR_USER_ROLE_ERROR = new ErrorCode(1-900-002-007, "该登录人不是 大区经理,无法发起流程!"); } diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/UniversalOperateTypeEnum.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/UniversalOperateTypeEnum.java new file mode 100644 index 0000000..c712c02 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/UniversalOperateTypeEnum.java @@ -0,0 +1,52 @@ +package com.zteits.urbanops.module.workorder.enums; + +import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 类描述:全域巡查员审批操作类型枚举 + * 创建人:yanhuiqing + * 创建时间:2025/12/29 9:56 + * 修改人:yanhuiqing + * 修改时间:2025/12/29 9:56 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "全域巡查员操作类型枚举") +@Getter +public enum UniversalOperateTypeEnum { + REGION_MANAGER_ASSIGN(80,"大区经理分配"), + REGION_MANAGER_RETURN(90,"大区经理退回"), + YL_TEAM_LEADER_ASSIGN(110, "养护组长分配"), + YL_TEAM_LEADER_RETURN(210, "养护组长退回"), + YL_WORKER_IMPLEMENT(120, "养护员实施"), + YL_WORKER_RETURN(220, "养护员退回"), + YL_TEAM_LEADER_CONFIRM_PASS(130, "养护组长验收通过"), + YL_TEAM_LEADER_CONFIRM_REJECT(230, "养护组长验收不通过"), + YL_INSPECTOR_CHECK_PASS(140, "全域巡查员验收通过"), + YL_INSPECTOR_CHECK_REJECT(240, "全域巡查员验收不通过"), + YL_INSPECTOR_START_FINISH(200, "全域巡查员结束工单(不同意)"), + YL_INSPECTOR_START_RELAUNCH(100, "全域巡查员重新发起(同意)"); + + @JsonValue // 序列化时返回code(前端接收数字) + private final Integer code; + private final String desc; + + UniversalOperateTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + // 根据code获取枚举(业务层转换用) + public static UniversalOperateTypeEnum getByCode(Integer code) { + return Arrays.stream(values()) + .filter(e -> e.getCode().equals(code)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("无效的操作类型:" + code)); + } +} \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmRegionMgrServiceImpl.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmRegionMgrServiceImpl.java index 991bcd3..795c495 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmRegionMgrServiceImpl.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmRegionMgrServiceImpl.java @@ -25,6 +25,7 @@ import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoExtMapper import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper; import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderReqVO; import com.zteits.urbanops.module.workorder.enums.BusiLineTeamLeaderRoleCodeEnum; +import com.zteits.urbanops.module.workorder.util.RoleListUtils; import jakarta.annotation.Resource; import jodd.util.StringUtil; import org.flowable.engine.RuntimeService; @@ -130,6 +131,9 @@ public class BpmRegionMgrServiceImpl implements BpmRegionMgrService{ if(null == roleList || roleList.size()==0){ throw exception(APP_USER_ROLE_NOT_EXISTS); } + if(!RoleListUtils.containsCode(roleList,REGIONAL_MANAGER)){ + throw exception(APP_REGIONMGR_USER_ROLE_ERROR); + } workOrder.setWoSourceId(roleList.get(0).getCode()); workOrder.setWoSourceName(roleList.get(0).getName()); String busiLine = createRequestVo.getBusiLine(); diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmUniversalService.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmUniversalService.java index 29dc4ee..603a18c 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmUniversalService.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmUniversalService.java @@ -1,6 +1,9 @@ package com.zteits.urbanops.module.workorder.service.garden; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskApproveReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskRegionMgrApproveReqVO; import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderReqVO; +import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderUniversalReqVO; import jakarta.validation.Valid; /** @@ -21,6 +24,12 @@ public interface BpmUniversalService { * @param createRequestVo * @return */ - Long createWorkOrder(@Valid AppGardenWorkOrderReqVO createRequestVo); + Long createWorkOrder(@Valid AppGardenWorkOrderUniversalReqVO createRequestVo); + + /** + * 大区经理审批 -app端 + * @param reqVO + */ + void approveTask2TeamLeader(AppGardenTaskRegionMgrApproveReqVO reqVO); } \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmUniversalServiceImpl.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmUniversalServiceImpl.java index ca765af..5b98e51 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmUniversalServiceImpl.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmUniversalServiceImpl.java @@ -7,7 +7,10 @@ import com.zteits.urbanops.framework.common.util.object.ObjectUtils; import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; import com.zteits.urbanops.module.bpm.api.task.BpmProcessInstanceApi; import com.zteits.urbanops.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO; import com.zteits.urbanops.module.bpm.enums.task.BpmTaskStatusEnum; +import com.zteits.urbanops.module.bpm.framework.flowable.core.enums.BpmnVariableConstants; +import com.zteits.urbanops.module.bpm.framework.flowable.core.util.FlowableUtils; import com.zteits.urbanops.module.bpm.service.definition.BpmProcessDefinitionService; import com.zteits.urbanops.module.bpm.service.task.BpmProcessInstanceService; import com.zteits.urbanops.module.bpm.service.task.BpmTaskService; @@ -19,16 +22,20 @@ import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO; import com.zteits.urbanops.module.system.controller.admin.permission.vo.role.RoleRespVO; import com.zteits.urbanops.module.workorder.api.WorkOrderApi; import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskApproveReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskRegionMgrApproveReqVO; import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; import com.zteits.urbanops.module.workorder.dal.mysql.attachment.AttachmentMapper; import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoExtMapper; import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper; import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderReqVO; +import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderUniversalReqVO; import com.zteits.urbanops.module.workorder.enums.BusiLineTeamLeaderRoleCodeEnum; import com.zteits.urbanops.module.workorder.util.RoleListUtils; import jakarta.annotation.Resource; import jodd.util.StringUtil; import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -68,6 +75,9 @@ public class BpmUniversalServiceImpl implements BpmUniversalService{ private MainInfoExtMapper workOrderExtMapper; @Resource private BpmProcessInstanceApi processInstanceApi; + + @Resource + private BpmProcessDefinitionService processDefinitionService; @Resource private WorkOrderApi workOrderApi; @@ -78,9 +88,6 @@ public class BpmUniversalServiceImpl implements BpmUniversalService{ private BpmTaskService taskService; @Resource - private BpmProcessDefinitionService processDefinitionService; - - @Resource private AdminUserApi adminUserApi; @Resource @@ -98,15 +105,11 @@ public class BpmUniversalServiceImpl implements BpmUniversalService{ @Resource private DictDataCommonApi dictDataCommonApi; @Override - public Long createWorkOrder(AppGardenWorkOrderReqVO createRequestVo) { + public Long createWorkOrder(AppGardenWorkOrderUniversalReqVO createRequestVo) { List problemsImgsList = createRequestVo.getProblemsImgs(); MainInfoDO workOrder = BeanUtils.toBean(createRequestVo, MainInfoDO.class) .setStatus(BpmTaskStatusEnum.RUNNING.getStatus()); - RoadStreetRespDTO roadStreetRespDTO = roadApi.getRoadInfoById(createRequestVo.getRoadId()); - - workOrder.setStreetId(roadStreetRespDTO.getStreetId()); - workOrder.setStreetName(roadStreetRespDTO.getStreetName()); workOrder.setBuzStatus(ORDER_STATUS_INIT);//工单业务初始化状态 后续操作状态 见 OperateTypeEnum if(StringUtil.isEmpty(createRequestVo.getOrderType())){ workOrder.setOrderType(BpmCommonConstant.ORDER_TYPE_C); @@ -116,12 +119,6 @@ public class BpmUniversalServiceImpl implements BpmUniversalService{ } workOrder.setOrderType(createRequestVo.getOrderType()); } - DictDataRespDTO dictData = dictDataCommonApi.getDictData(CONSERVE_LEVEL, roadStreetRespDTO.getLevelId().toString()); - if(null == dictData){ - throw exception(APP_WORKER_LEVEL_ID_NOT_EXISTS); - } - workOrder.setCuringLevelId(Integer.valueOf(dictData.getValue())); - workOrder.setCuringLevelName(dictData.getLabel()); workOrder.setCommitDate(LocalDateTime.now()); workOrder.setCompanyId(SecurityFrameworkUtils.getCompanyId()); @@ -130,25 +127,22 @@ public class BpmUniversalServiceImpl implements BpmUniversalService{ if(null == roleList || roleList.size()==0){ throw exception(APP_USER_ROLE_NOT_EXISTS); } + + if(!RoleListUtils.containsCode(roleList,PARTROL_GLOBAL)){ + throw exception(APP_UNIVERSAL_USER_ROLE_ERROR); + } //校验人员不能有 双重角色 - if(RoleListUtils.containsCodeOr(roleList, REGIONAL_MANAGER, PARTROL_GLOBAL)){ + if(RoleListUtils.containsBothCodes(roleList, REGIONAL_MANAGER, PARTROL_GLOBAL)){ throw exception(APP_WORK_ORADER_ROLE_ILLEGLE); } - if(!(RoleListUtils.containsCode(roleList,REGIONAL_MANAGER) || RoleListUtils.containsCode(roleList,PARTROL_GLOBAL))){ - throw exception(APP_WORK_ORADER_ROLE_NOT_EXSITS); - } + workOrder.setWoSourceId(roleList.get(0).getCode()); workOrder.setWoSourceName(roleList.get(0).getName()); - String busiLine = createRequestVo.getBusiLine(); - if(StringUtil.isEmpty(busiLine)){ - busiLine = SecurityFrameworkUtils.getBusiLine(); - } - workOrder.setBusiLine(busiLine); workOrder.setUserId(SecurityFrameworkUtils.getLoginUserId()); workOrder.setUserName(SecurityFrameworkUtils.getLoginUserNickname()); - if(ObjectUtils.isNotAllEmpty(createRequestVo.getExpectedFinishDate())){ - workOrder.setExpectedFinishDate(createRequestVo.getExpectedFinishDate()); - } + workOrder.setStreetId(""); + workOrder.setStreetName(""); + String workOrderNum = workOrderApi.generateWONum(BpmCommonConstant.WORK_ORDER_PREFFIX_UNIVERSE); workOrder.setOrderNo(workOrderNum); workOrderMapper.insert(workOrder); @@ -159,40 +153,66 @@ public class BpmUniversalServiceImpl implements BpmUniversalService{ Long userId = SecurityFrameworkUtils.getLoginUserId(); Map processInstanceVariables = new HashMap<>(); - String isGlobal = BPM_COMMON_PROD_GLOBAL; - if(RoleListUtils.containsCode(roleList, REGIONAL_MANAGER)){//大区经理 - processInstanceVariables.put(isGlobal,true); - }else{//全域巡查员 - processInstanceVariables.put(isGlobal,false); - } - - processInstanceVariables.put(BPM_COMMON_PROD_ROADID, workOrder.getRoadId()); processInstanceVariables.put(BPM_COMMON_PROD_APPLYUSERID, userId); - processInstanceVariables.put(BPM_COMMON_PROD_ISNEED,null); - Map> startUserSelectAssignees = new HashMap<>(); - String roleCode = BusiLineTeamLeaderRoleCodeEnum.getByCode(busiLine).getRoleCode(); - if(StringUtil.isEmpty(roleCode)){// 找不到 默认为园林组长的角色 - roleCode = BpmCommonConstant.TEAM_LEADER_YL; - } - List userList = workOrderExtMapper.getUserByRoadIdAndRoleCode(workOrder.getRoadId(),roleCode,createRequestVo.getBusiLine()); - if(org.springframework.util.ObjectUtils.isEmpty(userList)){ - throw exception(TEAM_LEADER_YL_NOT_EXISTS); - } - // 提取id到List - List idList = userList.stream() - // 映射:将AdminUserRespDTO对象转为其id属性 - .map(AdminUserRespDTO::getId) - // 收集结果到List - .collect(Collectors.toList()); - processInstanceVariables.put(BPM_COMMON_PROD_LEADERID, idList.get(0));//养护组长分配 + processInstanceVariables.put(BMP_COMMON_PROD_ISPASS,null); + String processInstanceId = processInstanceApi.createProcessInstance(userId, // new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(BpmCommonConstant.BPM_GARDEN_INSPECT_WO) new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(BpmCommonConstant.BPM_UNIVERSE_WO) - .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(workOrder.getId())) - .setStartUserSelectAssignees(startUserSelectAssignees)); + .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(workOrder.getId()))); // 将工作流的编号,更新到 工单中 workOrderMapper.updateById(new MainInfoDO().setId(workOrder.getId()).setProcessInstanceId(processInstanceId)); return workOrder.getId(); } + + @Override + public void approveTask2TeamLeader(AppGardenTaskRegionMgrApproveReqVO reqVO) { + BpmTaskApproveReqVO targetVO = BeanUtils.toBean(reqVO,BpmTaskApproveReqVO.class); + Map variables = new HashMap<>(); + //审批通过 + variables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS,BpmTaskStatusEnum.APPROVE.getStatus()); + Integer status = reqVO.getAgree(); + if(status == null || status == 1){//status == null 此处是为了兼容老接口,防止前段少改造 + variables.put(BMP_COMMON_PROD_ISPASS,false); + variables.put(BPM_COMMON_PROD_ISREVOKE,null);//不通过后 初始化重新发起变量 + }else { + variables.put(BMP_COMMON_PROD_ISPASS,true); + variables.put(BPM_COMMON_PROD_ISNEED,null); + String instanceId = taskService.getTask(reqVO.getId()).getProcessInstanceId(); + ProcessInstance processInstance = processInstanceService.getProcessInstance(instanceId); + Map processInstanceVariables = processInstance.getProcessVariables(); + //String busiLine = (String)processInstanceVariables.get(BPM_COMMON_PROD_BUSILINE); + //Long roadId = (Long) processInstanceVariables.get(BPM_COMMON_PROD_ROADID); + String busiLine = reqVO.getBusiLine(); + Long roadId = reqVO.getRoadId(); + String roleCode = BusiLineTeamLeaderRoleCodeEnum.getByCode(busiLine).getRoleCode(); + + if(StringUtil.isEmpty(roleCode)){// 找不到 默认为园林组长的角色 + roleCode = BpmCommonConstant.TEAM_LEADER_YL; + } + List userList = workOrderExtMapper.getUserByRoadIdAndRoleCode(roadId,roleCode,busiLine); + if(org.springframework.util.ObjectUtils.isEmpty(userList)){ + throw exception(TEAM_LEADER_YL_NOT_EXISTS); + } + // 提取id到List + List idList = userList.stream() + // 映射:将AdminUserRespDTO对象转为其id属性 + .map(AdminUserRespDTO::getId) + // 收集结果到List + .collect(Collectors.toList()); + processInstanceVariables.put(BPM_COMMON_PROD_LEADERID, idList.get(0));//养护组长分配 + //流程变量重新赋值 + runtimeService.setVariables(instanceId,processInstanceVariables); + + } + + targetVO.setVariables(variables); + //TODO 审批候选人需要赋值 + Map> nextAssignees = new HashMap<>(); + targetVO.setNextAssignees(nextAssignees); + targetVO.setAttattmentUrls(reqVO.getReturnImgs()); + taskService.approveTask(SecurityFrameworkUtils.getLoginUserId(),targetVO); + } + } \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BpmProcessTaskAutoCompleteRegionMgrListener.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BpmProcessTaskAutoCompleteRegionMgrListener.java new file mode 100644 index 0000000..d074df2 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BpmProcessTaskAutoCompleteRegionMgrListener.java @@ -0,0 +1,35 @@ +package com.zteits.urbanops.module.workorder.service.garden.listener; + +import com.zteits.urbanops.module.bpm.api.event.BpmProcessInstanceStatusEvent; +import com.zteits.urbanops.module.bpm.api.event.BpmProcessInstanceStatusEventListener; +import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant; +import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author yanhuiqing + * @version 1.0 + * @description: 处理流程的任务自动完成监听器 + * @date 2025/12/6 14:00 + */ +@Component +@Slf4j +public class BpmProcessTaskAutoCompleteRegionMgrListener extends BpmProcessInstanceStatusEventListener { + @Resource + private BpmGardenService gardenService; + @Override + protected String getProcessDefinitionKey() { + + //return BpmCommonConstant.BPM_GARDEN_INSPECT_WO; + return BpmCommonConstant.BPM_REGION_MGR_WO; + } + + @Override + protected void onEvent(BpmProcessInstanceStatusEvent event) { + log.info("业务ID:"+event.getBusinessKey()+",业务状态"+event.getStatus()); + gardenService.updateWorkOrderStatus(Long.parseLong(event.getBusinessKey()), event.getStatus()); + + } +} diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BpmProcessTaskAutoCompleteUniversalListener.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BpmProcessTaskAutoCompleteUniversalListener.java new file mode 100644 index 0000000..2135ab8 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BpmProcessTaskAutoCompleteUniversalListener.java @@ -0,0 +1,35 @@ +package com.zteits.urbanops.module.workorder.service.garden.listener; + +import com.zteits.urbanops.module.bpm.api.event.BpmProcessInstanceStatusEvent; +import com.zteits.urbanops.module.bpm.api.event.BpmProcessInstanceStatusEventListener; +import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant; +import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author yanhuiqing + * @version 1.0 + * @description: 处理流程的任务自动完成监听器 + * @date 2025/12/6 14:00 + */ +@Component +@Slf4j +public class BpmProcessTaskAutoCompleteUniversalListener extends BpmProcessInstanceStatusEventListener { + @Resource + private BpmGardenService gardenService; + @Override + protected String getProcessDefinitionKey() { + + //return BpmCommonConstant.BPM_GARDEN_INSPECT_WO; + return BpmCommonConstant.BPM_UNIVERSE_WO; + } + + @Override + protected void onEvent(BpmProcessInstanceStatusEvent event) { + log.info("业务ID:"+event.getBusinessKey()+",业务状态"+event.getStatus()); + gardenService.updateWorkOrderStatus(Long.parseLong(event.getBusinessKey()), event.getStatus()); + + } +} diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/util/RoleListUtils.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/util/RoleListUtils.java index 7aeb32d..742347c 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/util/RoleListUtils.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/util/RoleListUtils.java @@ -4,6 +4,8 @@ import com.zteits.urbanops.module.system.controller.admin.permission.vo.role.Rol import java.util.List; import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; /** * 类描述:判断角色包含关系工具类 @@ -51,4 +53,28 @@ public class RoleListUtils { .filter(Objects::nonNull) .anyMatch(code -> code1.equals(code) || code2.equals(code)); } + /** + * 方法:判断角色列表中是否同时包含 code = code1 且 code = code2 的元素 + * @param roleList 角色列表(允许为 null/空) + * @param code1 第一个要校验的编码(允许为 null,此时要求列表中存在 null 的 code) + * @param code2 第二个要校验的编码(允许为 null,此时要求列表中存在 null 的 code) + * @return true=同时包含code1和code2;false=不同时包含/列表为空/列表为null + */ + public static boolean containsBothCodes(List roleList, String code1, String code2) { + // 1. 列表为null/空,直接返回false + if (roleList == null || roleList.isEmpty()) { + return false; + } + + // 2. 提取角色列表中所有非空/空的 code,存入 Set 提高查询效率(去重不影响结果) + Set roleCodeSet = roleList.stream() + .map(RoleRespVO::getCode) // 提取每个角色的 code + .collect(Collectors.toSet()); // 转 Set 去重,优化 contains 性能 + + // 3. 核心逻辑:判断 Set 中同时包含 code1 和 code2(兼容 code1/code2 为 null 的场景) + boolean containsCode1 = roleCodeSet.contains(code1); + boolean containsCode2 = roleCodeSet.contains(code2); + + return containsCode1 && containsCode2; + } } \ No newline at end of file -- libgit2 0.21.4