Commit 3fe9c3e6bcd2c9bfaaf0fe309fb7280aeef977fe

Authored by 颜惠青
1 parent 53ec7c1b

AI工单 审批流程

urbanops-module-api/urbanops-module-workorder-api/src/main/java/com/zteits/urbanops/module/workorder/dto/AppGardenWorkOrderAIReqVO.java 0 → 100644
  1 +package com.zteits.urbanops.module.workorder.dto;
  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 +import org.hibernate.validator.constraints.Length;
  8 +
  9 +import java.math.BigDecimal;
  10 +import java.time.LocalDateTime;
  11 +import java.util.List;
  12 +
  13 +/**
  14 + * @author yanhuiqing
  15 + * @version 1.0
  16 + * @description: app AI端请求参数
  17 + * @date 2025/12/6 10:17
  18 + */
  19 +@Schema(description = "APP-园林AI工单请求创建 Request VO")
  20 +@Data
  21 +public class AppGardenWorkOrderAIReqVO {
  22 +
  23 +
  24 + @Schema(description = "道路ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21128")
  25 + @NotNull(message = "道路ID不能为空")
  26 + private Long roadId;
  27 +
  28 + /**
  29 + * 工单类型 Q:快速工单,C:普通工单,O:其他工单
  30 + */
  31 + private String orderType;
  32 +
  33 + @Schema(description = "道路名称", example = "测试道路")
  34 + private String roadName;
  35 +
  36 + @Schema(description = "问题图片", example = "9184")
  37 + private List<String> problemsImgs;
  38 +
  39 + @Schema(description = "工单描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
  40 + @NotEmpty(message = "工单描述不能为空")
  41 + @Length(max = 500)
  42 + private String remark;
  43 +
  44 + @Schema(description = "经纬度类型: 1:国标; 2:百度;3:高德;4:腾讯", example = "2")
  45 + private Integer latLonType;
  46 +
  47 + @Schema(description = "经度", requiredMode = Schema.RequiredMode.REQUIRED)
  48 + @NotNull(message = "经度不能为空")
  49 + private BigDecimal lat;
  50 +
  51 + @Schema(description = "维度", requiredMode = Schema.RequiredMode.REQUIRED)
  52 + @NotNull(message = "维度不能为空")
  53 + private BigDecimal lon;
  54 +
  55 + @Schema(description = "经纬度地址", requiredMode = Schema.RequiredMode.REQUIRED)
  56 + @NotEmpty(message = "经纬度地址不能为空")
  57 + private String lonLatAddress;
  58 +
  59 + @Schema(description = " 紧急程度:1:特急;2:紧急;3:一般", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
  60 + @NotNull(message = "紧急程度:1:特急;2:紧急;3:一般")
  61 + private Integer pressingType;
  62 +
  63 + @Schema(description = "工单名称", example = "绿地卫生")
  64 + private String orderName;
  65 +
  66 + @Schema(description = "来源ID 工单来源 1、巡查,2、游客居民,3、12345,4、网格", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  67 + //@NotNull(message = "来源ID不能为空")
  68 + private Integer sourceId;
  69 +
  70 + @Schema(description = "来源名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "园林")
  71 + //@NotEmpty(message = "来源名称不能为空")
  72 + private String sourceName;
  73 +
  74 + @Schema(description = "三方工单ID")
  75 + private String thirdWorkNo;
  76 +
  77 + @Schema(description = "希望完成时间", example = "1766505427000") // Swagger文档示例
  78 + private LocalDateTime expectedFinishDate;
  79 +
  80 + @NotNull
  81 + @Schema(description = "工单业务线", example = "yl")
  82 + private String busiLine;
  83 +
  84 +
  85 +
  86 +}
  87 +
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/annotation/AutoUpdateWorkerOrderAIBuzStatus.java 0 → 100644
  1 +package com.zteits.urbanops.module.workorder.annotation;
  2 +
  3 +import java.lang.annotation.*;
  4 +
  5 +/**
  6 + * 创 建 人:yanhuiqing
  7 + * 创建时间:2025/12/21 14:50
  8 + * 类描述:自动更新工单表业务状态
  9 + *
  10 + * @author yanhuiqing
  11 + */
  12 +@Target({ElementType.METHOD})
  13 +@Retention(RetentionPolicy.RUNTIME)
  14 +@Documented
  15 +public @interface AutoUpdateWorkerOrderAIBuzStatus {
  16 +}
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderAIController.java
... ... @@ -3,6 +3,7 @@ package com.zteits.urbanops.module.workorder.controller.app.garden;
3 3 import com.zteits.urbanops.framework.common.pojo.CommonResult;
4 4 import com.zteits.urbanops.framework.common.util.object.ObjectUtils;
5 5 import com.zteits.urbanops.module.garden.api.road.RoadApi;
  6 +import com.zteits.urbanops.module.workorder.annotation.AutoUpdateWorkerOrderAIBuzStatus;
6 7 import com.zteits.urbanops.module.workorder.annotation.AutoUpdateWorkerOrderInspectorBuzStatus;
7 8 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.common.AppUniversalApprovalReqVO;
8 9 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskReturnExtReqVO;
... ... @@ -11,6 +12,7 @@ import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.Ap
11 12 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskApproveReqVO;
12 13 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskInspectorApproveReqVO;
13 14 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskRegionMgrApproveReqVO;
  15 +import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderAIReqVO;
14 16 import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderInspectorReqVO;
15 17 import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderReqVO;
16 18 import com.zteits.urbanops.module.workorder.enums.AIOperateTypeEnum;
... ... @@ -67,13 +69,13 @@ public class AppGardenWorkOrderAIController {
67 69 @PostMapping("/create")
68 70 //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:create')")
69 71 @Operation(summary = "app-AI工单派发人员创建工单信息")
70   - public CommonResult<Long> createMainInfo(@Valid @RequestBody AppGardenWorkOrderInspectorReqVO createReqVO) {
  72 + public CommonResult<Long> createMainInfo(@Valid @RequestBody AppGardenWorkOrderAIReqVO createReqVO) {
71 73 return success(aiService.createWorkOrder(createReqVO));
72 74 }
73 75  
74 76 @Operation(summary = "app-统一审批入口")
75 77 @PostMapping("/universalApproval")
76   - @AutoUpdateWorkerOrderInspectorBuzStatus
  78 + @AutoUpdateWorkerOrderAIBuzStatus
77 79 @Transactional(rollbackFor = Exception.class)
78 80 //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')")
79 81 public CommonResult<Boolean> universalApproval(@Valid @RequestBody AppUniversalApprovalReqVO reqVO) {
... ... @@ -240,7 +242,7 @@ public class AppGardenWorkOrderAIController {
240 242 inspectReqVO.setId(reqVO.getTaskId());
241 243 inspectReqVO.setReturnImgs(reqVO.getReturnImgs());
242 244 gardenService.approveTask(inspectReqVO);
243   - log.info("当前操作:"+AIOperateTypeEnum.YL_INSPECTOR_START_FINISH.getDesc()+"<--结束");
  245 + log.info("当前操作:"+AIOperateTypeEnum.YL_INSPECTOR_CHECK_PASS.getDesc()+AIOperateTypeEnum.YL_INSPECTOR_CHECK_REJECT.getDesc()+"<--结束");
244 246 return success(true);
245 247 default:
246 248 throw exception(APP_OPERATOR_NOT_EXISTS);
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderInspectorController.java
... ... @@ -232,7 +232,7 @@ public class AppGardenWorkOrderInspectorController {
232 232 log.info("当前操作:"+InspectorOperateTypeEnum.YL_INSPECTOR_START_RELAUNCH.getDesc()+"<--结束");
233 233 return success(true);
234 234 case YL_INSPECTOR_CHECK_PASS , YL_INSPECTOR_CHECK_REJECT ://督察员验收通过,督察员验收不通过
235   - log.info("当前操作:全域巡查员验收通过 或全域巡查员验收不通过开始,是否同意:"+reqVO.getAgree()+"-->");
  235 + log.info("当前操作:全域督察员验收通过 或全域督察员验收不通过开始,是否同意:"+reqVO.getAgree()+"-->");
236 236 AppGardenTaskApproveReqVO inspectReqVO = new AppGardenTaskApproveReqVO();
237 237 Integer verifyStatus = reqVO.getAgree();
238 238 if (verifyStatus == null || (verifyStatus != 0 && verifyStatus != 1)) {
... ... @@ -243,7 +243,7 @@ public class AppGardenWorkOrderInspectorController {
243 243 inspectReqVO.setId(reqVO.getTaskId());
244 244 inspectReqVO.setReturnImgs(reqVO.getReturnImgs());
245 245 gardenService.approveTask(inspectReqVO);
246   - log.info("当前操作:"+InspectorOperateTypeEnum.YL_INSPECTOR_START_FINISH.getDesc()+"<--结束");
  246 + log.info("当前操作:"+InspectorOperateTypeEnum.YL_INSPECTOR_CHECK_PASS.getDesc()+InspectorOperateTypeEnum.YL_INSPECTOR_CHECK_REJECT.getDesc()+"<--结束");
247 247 return success(true);
248 248 default:
249 249 throw exception(APP_OPERATOR_NOT_EXISTS);
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/aop/AIBuzStatusUpdateAspect.java 0 → 100644
  1 +package com.zteits.urbanops.module.workorder.controller.app.garden.aop;
  2 +
  3 +import com.zteits.urbanops.framework.common.biz.system.dict.DictDataCommonApi;
  4 +import com.zteits.urbanops.framework.common.biz.system.dict.dto.DictDataRespDTO;
  5 +import com.zteits.urbanops.framework.common.util.object.BeanUtils;
  6 +import com.zteits.urbanops.framework.common.util.object.ObjectUtils;
  7 +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils;
  8 +import com.zteits.urbanops.module.garden.api.road.RoadApi;
  9 +import com.zteits.urbanops.module.garden.dto.road.RoadStreetRespDTO;
  10 +import com.zteits.urbanops.module.system.api.permission.RoleApi;
  11 +import com.zteits.urbanops.module.system.controller.admin.permission.vo.role.RoleRespVO;
  12 +import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant;
  13 +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.common.AppUniversalApprovalReqVO;
  14 +import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO;
  15 +import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper;
  16 +import com.zteits.urbanops.module.workorder.enums.AIOperateTypeEnum;
  17 +import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService;
  18 +import jakarta.annotation.Resource;
  19 +import jodd.util.StringUtil;
  20 +import lombok.RequiredArgsConstructor;
  21 +import org.aspectj.lang.ProceedingJoinPoint;
  22 +import org.aspectj.lang.annotation.Around;
  23 +import org.aspectj.lang.annotation.Aspect;
  24 +import org.aspectj.lang.annotation.Pointcut;
  25 +import org.springframework.stereotype.Component;
  26 +import org.springframework.transaction.annotation.Transactional;
  27 +
  28 +import java.time.LocalDateTime;
  29 +import java.util.List;
  30 +
  31 +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
  32 +import static com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant.CONSERVE_LEVEL;
  33 +import static com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant.ORDER_STATUS_INIT;
  34 +import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.APP_WORKER_LEVEL_ID_NOT_EXISTS;
  35 +import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.APP_WORK_ROAD_NOT_EXISTS;
  36 +
  37 +/**
  38 + * 类描述:切面更新工单表业务状态
  39 + * 创建人:yanhuiqing
  40 + * 创建时间:2025/12/21 14:53
  41 + * 修改人:yanhuiqing
  42 + * 修改时间:2025/12/21 14:53
  43 + * 修改备注:
  44 + *
  45 + * @author yanhuiqing
  46 + * @version 1.0
  47 + */
  48 +@Aspect
  49 +@Component
  50 +@RequiredArgsConstructor
  51 +public class AIBuzStatusUpdateAspect {
  52 +
  53 + @Resource
  54 + private MainInfoMapper mainInfoMapper;
  55 +
  56 + @Resource
  57 + private final RoadApi roadApi;
  58 +
  59 + @Resource
  60 + private BpmGardenService gardenService;
  61 +
  62 + @Resource
  63 + private final DictDataCommonApi dictDataCommonApi;
  64 +
  65 + @Resource
  66 + private RoleApi roleApi;
  67 +
  68 + // 切点:标注了@AutoUpdateBuzStatus的方法
  69 + @Pointcut("@annotation(com.zteits.urbanops.module.workorder.annotation.AutoUpdateWorkerOrderAIBuzStatus)")
  70 + public void buzStatusUpdatePointcut() {}
  71 +
  72 + @Around("buzStatusUpdatePointcut()")
  73 + @Transactional(rollbackFor = Exception.class)
  74 + public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
  75 + // 1. 获取方法参数(AppUniversalApprovalReqVO)
  76 + Object[] args = joinPoint.getArgs();
  77 + AppUniversalApprovalReqVO reqVO = null;
  78 + for (Object arg : args) {
  79 + if (arg instanceof AppUniversalApprovalReqVO) {
  80 + reqVO = (AppUniversalApprovalReqVO) arg;
  81 + break;
  82 + }
  83 + }
  84 + if (reqVO == null) {
  85 + throw new IllegalArgumentException("方法参数中未找到AppUniversalApprovalReqVO");
  86 + }
  87 +
  88 + // 2. 解析操作类型
  89 + AIOperateTypeEnum operateType = AIOperateTypeEnum.getByCode(reqVO.getOperateType());
  90 + Long workerDataId = reqVO.getWorkerDataId();
  91 + Integer buzStatus = operateType.getCode();
  92 +
  93 + // 3. 执行原有方法
  94 + Object result = joinPoint.proceed();
  95 + MainInfoDO dbData = mainInfoMapper.selectById(workerDataId);
  96 + MainInfoDO targeVO = new MainInfoDO();
  97 + targeVO.setId(workerDataId);
  98 + targeVO.setOrderNo(dbData.getOrderNo());
  99 + targeVO.setBusiLine(dbData.getBusiLine());
  100 + //大区经理分配
  101 + if(AIOperateTypeEnum.AI_REGION_MANAGER_ASSIGN.getCode().equals(reqVO.getOperateType())){
  102 + RoadStreetRespDTO roadStreetRespDTO = roadApi.getRoadInfoById(reqVO.getRoadId());
  103 + if(null == roadStreetRespDTO){
  104 + throw exception(APP_WORK_ROAD_NOT_EXISTS);
  105 + }
  106 + targeVO.setStreetId(roadStreetRespDTO.getStreetId());
  107 + targeVO.setStreetName(roadStreetRespDTO.getStreetName());
  108 + DictDataRespDTO dictData = dictDataCommonApi.getDictData(CONSERVE_LEVEL, roadStreetRespDTO.getLevelId().toString());
  109 + if(null == dictData){
  110 + throw exception(APP_WORKER_LEVEL_ID_NOT_EXISTS);
  111 + }
  112 + targeVO.setCuringLevelId(Integer.valueOf(dictData.getValue()));
  113 + targeVO.setCuringLevelName(dictData.getLabel());
  114 + targeVO.setBusiLine(reqVO.getBusiLine());
  115 +
  116 + targeVO.setRoadName(reqVO.getRoadName());
  117 + targeVO.setRoadId(reqVO.getRoadId());
  118 + targeVO.setPressingType(reqVO.getPressingType());
  119 + targeVO.setExpectedFinishDate(reqVO.getExpectedFinishDate());
  120 + }
  121 +
  122 + //大区经理退回
  123 + if(AIOperateTypeEnum.AI_REGION_MANAGER_RETURN.getCode().equals(reqVO.getOperateType())){
  124 +
  125 + }
  126 + //重新发起需更新表单数据
  127 + if(AIOperateTypeEnum.YL_INSPECTOR_START_RELAUNCH.getCode().equals(operateType.getCode())){
  128 + targeVO = BeanUtils.toBean(reqVO,MainInfoDO.class);
  129 + targeVO.setId(reqVO.getWorkerDataId());
  130 + targeVO.setOrderNo(dbData.getOrderNo());
  131 + RoadStreetRespDTO roadStreetRespDTO = roadApi.getRoadInfoById(reqVO.getRoadId());
  132 + if(null == roadStreetRespDTO){
  133 + throw exception(APP_WORK_ROAD_NOT_EXISTS);
  134 + }
  135 + targeVO.setStreetId(roadStreetRespDTO.getStreetId());
  136 + targeVO.setStreetName(roadStreetRespDTO.getStreetName());
  137 + targeVO.setBuzStatus(ORDER_STATUS_INIT);//工单业务初始化状态 后续操作状态 见 OperateTypeEnum
  138 +
  139 + DictDataRespDTO dictData = dictDataCommonApi.getDictData(CONSERVE_LEVEL, roadStreetRespDTO.getLevelId().toString());
  140 + if(null == dictData){
  141 + throw exception(APP_WORKER_LEVEL_ID_NOT_EXISTS);
  142 + }
  143 + targeVO.setCuringLevelId(Integer.valueOf(dictData.getValue()));
  144 + targeVO.setCuringLevelName(dictData.getLabel());
  145 + targeVO.setCommitDate(LocalDateTime.now());
  146 + targeVO.setCompanyId(SecurityFrameworkUtils.getCompanyId());
  147 +
  148 + targeVO.setDeptId(SecurityFrameworkUtils.getDeptId());
  149 + List<RoleRespVO> roleList = roleApi.getRoleListByUsrId(SecurityFrameworkUtils.getLoginUserId());
  150 + targeVO.setWoSourceId(roleList.get(0).getCode());
  151 + targeVO.setWoSourceName(roleList.get(0).getName());
  152 + String busiLine = reqVO.getBusiLine();
  153 + if(StringUtil.isEmpty(busiLine)){
  154 + busiLine = SecurityFrameworkUtils.getBusiLine();
  155 + }
  156 + targeVO.setBusiLine(busiLine);
  157 + targeVO.setUserId(SecurityFrameworkUtils.getLoginUserId());
  158 + targeVO.setUserName(SecurityFrameworkUtils.getLoginUserNickname());
  159 + if(ObjectUtils.isNotAllEmpty(reqVO.getExpectedFinishDate())){
  160 + targeVO.setExpectedFinishDate(reqVO.getExpectedFinishDate());
  161 + }
  162 +
  163 + List<String> problemsImgs = reqVO.getProblemsImgs();
  164 + if(ObjectUtils.isNotAllEmpty(problemsImgs) && problemsImgs.size()>0){
  165 + gardenService.attachmentInsertOrUpdate(problemsImgs,BpmCommonConstant.PROBLEM_IMG_GROUP,targeVO);
  166 + }
  167 + }
  168 + //养护组长分配需更新表单数据
  169 + if(AIOperateTypeEnum.YL_TEAM_LEADER_ASSIGN.getCode().equals(operateType.getCode())){
  170 + targeVO.setWorkerId(reqVO.getNextAssignee());
  171 + }
  172 + //养护组长验收不通过 需更新表单数据
  173 + if(AIOperateTypeEnum.YL_TEAM_LEADER_CONFIRM_REJECT.getCode().equals(operateType.getCode())){
  174 +
  175 + List<String> returnImgs = reqVO.getReturnImgs();
  176 + if(ObjectUtils.isNotAllEmpty(returnImgs) && returnImgs.size()>0){
  177 + gardenService.attachmentInsertOrUpdate(returnImgs,BpmCommonConstant.GARDEN_TEAMLEADER_RETURN_IMG,targeVO);
  178 + }
  179 + }
  180 + //养护员实施 需更新表单数据
  181 + if(AIOperateTypeEnum.YL_WORKER_IMPLEMENT.getCode().equals(operateType.getCode())){
  182 + //实施更新为实施人员部门
  183 + targeVO.setDeptId(SecurityFrameworkUtils.getDeptId());
  184 + //实施 审批已经执行 此处就无需执行
  185 + /*
  186 + List<String> problemsImgs = reqVO.getProblemsImgs();
  187 + List<String> startImgs = reqVO.getStartImgs();
  188 + List<String> processingImgs = reqVO.getProcessingImgs();
  189 + List<String> endImgs = reqVO.getEndImgs();
  190 + List<String> personImgs = reqVO.getPersonImgs();
  191 + List<String> materialImgs = reqVO.getMaterialImgs();
  192 +
  193 + targeVO.setHandleResult(reqVO.getHandleResult());
  194 + targeVO.setCoHandlers(reqVO.getCoHandlers());
  195 + targeVO.setWorkerId(SecurityFrameworkUtils.getLoginUserId());
  196 + targeVO.setWorkerName(SecurityFrameworkUtils.getLoginUserNickname());
  197 + targeVO.setWorkerCompanyId(SecurityFrameworkUtils.getCompanyId());
  198 + mainInfoMapper.updateById(targeVO);
  199 +
  200 + if(ObjectUtils.isNotAllEmpty(problemsImgs) && problemsImgs.size()>0){
  201 + gardenService.attachmentInsertOrUpdate(problemsImgs,BpmCommonConstant.PROBLEM_IMG_GROUP,targeVO);
  202 + }
  203 + if(ObjectUtils.isNotAllEmpty(startImgs) && startImgs.size()>0){
  204 + gardenService.attachmentInsertOrUpdate(startImgs,BpmCommonConstant.START_IMG_GROUP,targeVO);
  205 + }
  206 + if(ObjectUtils.isNotAllEmpty(processingImgs) && processingImgs.size()>0){
  207 + gardenService.attachmentInsertOrUpdate(processingImgs,BpmCommonConstant.PROCESS_IMG_GROUP,targeVO);
  208 + }
  209 +
  210 + if(ObjectUtils.isNotAllEmpty(endImgs) && endImgs.size()>0){
  211 + gardenService.attachmentInsertOrUpdate(endImgs,BpmCommonConstant.END_IMG_GROUP,targeVO);
  212 + }
  213 + if(ObjectUtils.isNotAllEmpty(personImgs) && personImgs.size()>0){
  214 + gardenService.attachmentInsertOrUpdate(personImgs,BpmCommonConstant.PERSON_IMG_GROUP,targeVO);
  215 + }
  216 + if(ObjectUtils.isNotAllEmpty(materialImgs) && materialImgs.size()>0){
  217 + gardenService.attachmentInsertOrUpdate(materialImgs,BpmCommonConstant.MATERIAL_IMG_GROUP,targeVO);
  218 + }*/
  219 + }
  220 + // 4. 自动更新buz_status
  221 + targeVO.setBuzStatus(buzStatus.toString());
  222 + mainInfoMapper.updateById(targeVO);
  223 +
  224 + return result;
  225 + }
  226 +}
0 227 \ No newline at end of file
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/EventSourceEnum.java 0 → 100644
  1 +package com.zteits.urbanops.module.workorder.enums;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonValue;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * 类描述:工单事件来源
  11 + * 创建人:yanhuiqing
  12 + * 创建时间:2025/12/30 19:22
  13 + * 修改人:yanhuiqing
  14 + * 修改时间:2025/12/30 19:22
  15 + * 修改备注:
  16 + *
  17 + * @author yanhuiqing
  18 + * @version 1.0
  19 + */
  20 +@Schema(description = "工单来源类型枚举")
  21 +@Getter
  22 +public enum EventSourceEnum {
  23 + PATROL(1, "巡查"),
  24 + TOURISTS(2, "游客居民"),
  25 + ONEFIVE(3, "12345"),
  26 + GRID(4, "网格"),
  27 + REGION(5, "大区经理"),
  28 + AI(6, "AI");
  29 +
  30 + @JsonValue // 序列化时返回code(前端接收数字)
  31 + private final Integer code;
  32 + private final String desc;
  33 +
  34 + EventSourceEnum(Integer code, String desc) {
  35 + this.code = code;
  36 + this.desc = desc;
  37 + }
  38 +
  39 + // 根据code获取枚举(业务层转换用)
  40 + public static EventSourceEnum getByCode(Integer code) {
  41 + return Arrays.stream(values())
  42 + .filter(e -> e.getCode().equals(code))
  43 + .findFirst()
  44 + .orElseThrow(() -> new IllegalArgumentException("无效的同意类型:" + code));
  45 + }
  46 +}
0 47 \ No newline at end of file
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmAIService.java
... ... @@ -2,6 +2,7 @@ package com.zteits.urbanops.module.workorder.service.garden;
2 2  
3 3 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskInspectorApproveReqVO;
4 4 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskRegionMgrApproveReqVO;
  5 +import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderAIReqVO;
5 6 import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderInspectorReqVO;
6 7 import jakarta.validation.Valid;
7 8  
... ... @@ -23,7 +24,7 @@ public interface BpmAIService {
23 24 * @param createRequestVo
24 25 * @return
25 26 */
26   - Long createWorkOrder(@Valid AppGardenWorkOrderInspectorReqVO createRequestVo);
  27 + Long createWorkOrder(@Valid AppGardenWorkOrderAIReqVO createRequestVo);
27 28  
28 29 /**
29 30 * 全域督察员工单分配
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmAIServiceImpl.java
... ... @@ -27,8 +27,10 @@ import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO;
27 27 import com.zteits.urbanops.module.workorder.dal.mysql.attachment.AttachmentMapper;
28 28 import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoExtMapper;
29 29 import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper;
  30 +import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderAIReqVO;
30 31 import com.zteits.urbanops.module.workorder.dto.AppGardenWorkOrderInspectorReqVO;
31 32 import com.zteits.urbanops.module.workorder.enums.BusiLineTeamLeaderRoleCodeEnum;
  33 +import com.zteits.urbanops.module.workorder.enums.EventSourceEnum;
32 34 import com.zteits.urbanops.module.workorder.util.RoleListUtils;
33 35 import jakarta.annotation.Resource;
34 36 import jodd.util.StringUtil;
... ... @@ -102,7 +104,7 @@ public class BpmAIServiceImpl implements BpmAIService{
102 104 @Resource
103 105 private DictDataCommonApi dictDataCommonApi;
104 106 @Override
105   - public Long createWorkOrder(AppGardenWorkOrderInspectorReqVO createRequestVo) {
  107 + public Long createWorkOrder(AppGardenWorkOrderAIReqVO createRequestVo) {
106 108 List<RoleRespVO> roleList = roleApi.getRoleListByUsrId(SecurityFrameworkUtils.getLoginUserId());
107 109 if(null == roleList || roleList.size()==0){
108 110 throw exception(APP_USER_ROLE_NOT_EXISTS);
... ... @@ -144,6 +146,8 @@ public class BpmAIServiceImpl implements BpmAIService{
144 146 workOrder.setCompanyId(SecurityFrameworkUtils.getCompanyId());
145 147  
146 148 workOrder.setDeptId(SecurityFrameworkUtils.getDeptId());
  149 + workOrder.setSourceId(EventSourceEnum.AI.getCode());
  150 + workOrder.setSourceName(EventSourceEnum.AI.getDesc());
147 151 workOrder.setWoSourceId(roleList.get(0).getCode());
148 152 workOrder.setWoSourceName(roleList.get(0).getName());
149 153 String busiLine = createRequestVo.getBusiLine();
... ...