diff --git a/urbanops-module-workorder/pom.xml b/urbanops-module-workorder/pom.xml
index b8e6f0d..b481e7c 100644
--- a/urbanops-module-workorder/pom.xml
+++ b/urbanops-module-workorder/pom.xml
@@ -126,6 +126,12 @@
urbanops-module-system
${revision}
+
+ com.zteits.boot
+ urbanops-module-bpm
+ ${revision}
+
+
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
new file mode 100644
index 0000000..ead6f8a
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/api/constant/BpmCommonConstant.java
@@ -0,0 +1,35 @@
+package com.zteits.urbanops.module.workorder.api.constant;
+
+/**
+ * @author yanhuiqing
+ * @version 1.0
+ * @description: 流程业务定义key
+ * @date 2025/12/3 10:35
+ */
+public class BpmCommonConstant {
+ /**
+ * 园林巡检工单 流程业务key
+ */
+ public static final String BPM_GARDEN_INSPECT_WO = "garden_inspect_wo";
+ /**
+ * 物业巡检工单 流程业务key
+ */
+ public static final String BPM_PROPERTY_INSPECT_WO = "property_inspect_wo";
+ /**
+ * 市政巡检工单 流程业务key
+ */
+ public static final String BPM_MUNICIPAL_INSPECT_WO = "municipal_inspect_wo";
+ /**
+ * 园林问题单图片类型
+ */
+ public static final String GARDEN_INSPECT_WO_ATTACH1 = "01";
+ /**
+ * 园林街道图片类型
+ */
+ public static final String GARDEN_INSPECT_WO_ATTACH2 = "02";
+ /**
+ * 园林远景图片类型
+ */
+ public static final String GARDEN_INSPECT_WO_ATTACH3 = "03";
+
+}
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/BpmGardenInspectController.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/BpmGardenInspectController.java
new file mode 100644
index 0000000..82e0240
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/BpmGardenInspectController.java
@@ -0,0 +1,64 @@
+package com.zteits.urbanops.module.workorder.controller.admin.garden;
+
+import com.zteits.urbanops.framework.common.pojo.CommonResult;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.util.object.BeanUtils;
+import com.zteits.urbanops.module.bpm.controller.admin.oa.vo.BpmOALeaveCreateReqVO;
+import com.zteits.urbanops.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO;
+import com.zteits.urbanops.module.bpm.controller.admin.oa.vo.BpmOALeaveRespVO;
+import com.zteits.urbanops.module.bpm.dal.dataobject.oa.BpmOALeaveDO;
+import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderCreateReqVo;
+import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO;
+import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderRespVO;
+import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO;
+import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
+import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
+
+/**
+ * @author yanhuiqing
+ * @version 1.0
+ * @description: 园林巡检工单
+ * @date 2025/12/3 11:03
+ */
+@Tag(name = "管理后台 - 园林巡检工单")
+@RestController
+@RequestMapping("/bpm/garden/inspection")
+@Validated
+public class BpmGardenInspectController {
+ @Resource
+ private BpmGardenService gardenService;
+
+ @PostMapping("/create")
+ @PreAuthorize("@ss.hasPermission('bpm:garden-inspection:create')")
+ @Operation(summary = "创建请求申请")
+ public CommonResult createGardenInspection(@Valid @RequestBody BpmGardenWorkOrderCreateReqVo createReqVO) {
+ return success(gardenService.createWorkOrder(getLoginUserId(), createReqVO));
+ }
+
+ @GetMapping("/get")
+ @PreAuthorize("@ss.hasPermission('bpm:garden-inspection:query')")
+ @Operation(summary = "获得园林工单申请")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ public CommonResult getGardenInspection(@RequestParam("id") Long id) {
+ BpmGardenWorkOrderDO gardenInspection = gardenService.getWorkOrder(id);
+ return success(BeanUtils.toBean(gardenInspection, BpmGardenWorkOrderRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @PreAuthorize("@ss.hasPermission('bpm:garden-inspection:query')")
+ @Operation(summary = "获得园林巡检工单申请分页")
+ public CommonResult> getGardenInspectionPage(@Valid BpmGardenWorkOrderPageReqVO pageVO) {
+ PageResult pageResult = gardenService.getGardenInspectionPage(getLoginUserId(), pageVO);
+ return success(BeanUtils.toBean(pageResult, BpmGardenWorkOrderRespVO.class));
+ }
+}
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenWorkOrderCreateReqVo.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenWorkOrderCreateReqVo.java
new file mode 100644
index 0000000..7ef247d
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenWorkOrderCreateReqVo.java
@@ -0,0 +1,80 @@
+package com.zteits.urbanops.module.workorder.controller.admin.garden.vo;
+
+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.util.List;
+import java.util.Map;
+
+/**
+ * @author yanhuiqing
+ * @version 1.0
+ * @description: 园林工单请求创建 Request VO
+ * @date 2025/12/1 11:17
+ */
+@Schema(description = "园林工单请求创建 Request VO")
+@Data
+public class BpmGardenWorkOrderCreateReqVo {
+
+ @Schema(description = "业务线:yl 园林,wy 物业,sz 市政 ", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "业务线:yl 园林,wy 物业,sz 市政 不能为空")
+ private String busiLine;
+
+ @Schema(description = "道路ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21128")
+ @NotNull(message = "道路ID不能为空")
+ private Long roadId;
+
+ @Schema(description = "上传图片", example = "9184")
+ private List imgs;
+ @Schema(description = "街道照片", example = "9184")
+ private List streetImgList;
+ @Schema(description = "远景照片", example = "9184")
+ private List longRangeImgList;
+
+ @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 = "紧急程度:1:特急;2:紧急;3:一般", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @NotNull(message = "紧急程度:1:特急;2:紧急;3:一般不能为空")
+ private Integer pressingType;
+
+ @Schema(description = "来源ID", 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;
+
+ @Schema(description = "发起人自选审批人 Map", example = "{taskKey1: [1, 2]}")
+ private Map> startUserSelectAssignees;
+
+ @Schema(description = "是否需要养护人员修复,'0' 是,'1' 否")
+ private String isYesOrNo;
+
+
+}
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenWorkOrderPageReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenWorkOrderPageReqVO.java
new file mode 100644
index 0000000..459683a
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenWorkOrderPageReqVO.java
@@ -0,0 +1,16 @@
+package com.zteits.urbanops.module.workorder.controller.admin.garden.vo;
+
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author yanhuiqing
+ * @version 1.0
+ * @description: 园林工单申请分页 Request VO
+ * @date 2025/12/3 11:32
+ */
+@Schema(description = "管理后台 - 园林工单申请分页 Request VO")
+@Data
+public class BpmGardenWorkOrderPageReqVO extends PageParam {
+}
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenWorkOrderRespVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenWorkOrderRespVO.java
new file mode 100644
index 0000000..30bbe4e
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenWorkOrderRespVO.java
@@ -0,0 +1,15 @@
+package com.zteits.urbanops.module.workorder.controller.admin.garden.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author yanhuiqing
+ * @version 1.0
+ * @description: 园林工单流程 Response VO
+ * @date 2025/12/3 11:31
+ */
+@Schema(description = "管理后台 - 园林工单流程 Response VO")
+@Data
+public class BpmGardenWorkOrderRespVO {
+}
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/garden/BpmGardenWorkOrderDO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/garden/BpmGardenWorkOrderDO.java
new file mode 100644
index 0000000..8f52d51
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/garden/BpmGardenWorkOrderDO.java
@@ -0,0 +1,12 @@
+package com.zteits.urbanops.module.workorder.dal.dataobject.garden;
+
+import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO;
+
+/**
+ * @author yanhuiqing
+ * @version 1.0
+ * @description: TODO
+ * @date 2025/12/1 11:34
+ */
+public class BpmGardenWorkOrderDO extends MainInfoDO {
+}
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoMapper.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoMapper.java
index 70d1a17..aac2cf7 100644
--- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoMapper.java
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoMapper.java
@@ -49,4 +49,36 @@ public interface MainInfoMapper extends BaseMapperX {
.orderByDesc(MainInfoDO::getId));
}
+ default PageResult selectPage(Long loginUserId,MainInfoPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(MainInfoDO::getBusiLine, reqVO.getBusiLine())
+ .eqIfPresent(MainInfoDO::getOrderNo, reqVO.getOrderNo())
+ .likeIfPresent(MainInfoDO::getOrderName, reqVO.getOrderName())
+ .eqIfPresent(MainInfoDO::getSourceId, reqVO.getSourceId())
+ .likeIfPresent(MainInfoDO::getSourceName, reqVO.getSourceName())
+ .eqIfPresent(MainInfoDO::getRoadId, reqVO.getRoadId())
+ .likeIfPresent(MainInfoDO::getRoadName, reqVO.getRoadName())
+ .eqIfPresent(MainInfoDO::getStreetId, reqVO.getStreetId())
+ .likeIfPresent(MainInfoDO::getStreetName, reqVO.getStreetName())
+ .eqIfPresent(MainInfoDO::getCuringLevelId, reqVO.getCuringLevelId())
+ .likeIfPresent(MainInfoDO::getCuringLevelName, reqVO.getCuringLevelName())
+ .betweenIfPresent(MainInfoDO::getCommitDate, reqVO.getCommitDate())
+ .eqIfPresent(MainInfoDO::getPressingType, reqVO.getPressingType())
+ .eqIfPresent(MainInfoDO::getUserId, loginUserId)
+ .likeIfPresent(MainInfoDO::getUserName, reqVO.getUserName())
+ .eqIfPresent(MainInfoDO::getCompanyId, reqVO.getCompanyId())
+ .eqIfPresent(MainInfoDO::getLatLonType, reqVO.getLatLonType())
+ .eqIfPresent(MainInfoDO::getLat, reqVO.getLat())
+ .eqIfPresent(MainInfoDO::getLon, reqVO.getLon())
+ .eqIfPresent(MainInfoDO::getLonLatAddress, reqVO.getLonLatAddress())
+ .eqIfPresent(MainInfoDO::getThirdWorkNo, reqVO.getThirdWorkNo())
+ .eqIfPresent(MainInfoDO::getThirdPushState, reqVO.getThirdPushState())
+ .eqIfPresent(MainInfoDO::getBuzStatus, reqVO.getBuzStatus())
+ .eqIfPresent(MainInfoDO::getStatus, reqVO.getStatus())
+ .eqIfPresent(MainInfoDO::getProcessInstanceId, reqVO.getProcessInstanceId())
+ .eqIfPresent(MainInfoDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(MainInfoDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(MainInfoDO::getId));
+ }
+
}
\ 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 9ebffe2..1fc204b 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
@@ -11,9 +11,9 @@ import com.zteits.urbanops.framework.common.exception.ErrorCode;
public interface ErrorCodeConstants {
// ========== server 工单 1-100-001-000 ==========
- ErrorCode MAIN_INFO_NOT_EXISTS = new ErrorCode(1-100-001-000, "工单信息不存在");
+ ErrorCode MAIN_INFO_NOT_EXISTS = new ErrorCode(1-900-001-000, "工单信息不存在");
- ErrorCode ATTACHMENT_NOT_EXISTS = new ErrorCode(1-100-002-000, "工单附件信息不存在");
+ ErrorCode ATTACHMENT_NOT_EXISTS = new ErrorCode(1-900-001-001, "工单附件信息不存在");
- ErrorCode MATERIAL_DETAIL_NOT_EXISTS = new ErrorCode(1-100-003-000, "工单耗材明细不存在");
+ ErrorCode MATERIAL_DETAIL_NOT_EXISTS = new ErrorCode(1-900-001-002, "工单耗材明细不存在");
}
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenService.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenService.java
new file mode 100644
index 0000000..ac24566
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenService.java
@@ -0,0 +1,46 @@
+package com.zteits.urbanops.module.workorder.service.garden;
+
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderCreateReqVo;
+import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO;
+import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO;
+import jakarta.validation.Valid;
+/**
+ * @author yanhuiqing
+ * @version 1.0
+ * @description: 园林工作流
+ * @date 2025/12/1 11:13
+ */
+public interface BpmGardenService {
+ /**
+ * 园林工单申请 Service 接口
+ * @param userId
+ * @param createRequestVo
+ * @return
+ */
+ Long createWorkOrder(Long userId,@Valid BpmGardenWorkOrderCreateReqVo createRequestVo);
+
+ /**
+ * 更新工单申请的状态
+ *
+ * @param id 编号
+ * @param status 结果
+ */
+ void updateWorkOrderStatus(Long id, Integer status);
+
+ /**
+ * 获得工单详情
+ *
+ * @param id 编号
+ * @return 工单详情
+ */
+ BpmGardenWorkOrderDO getWorkOrder(Long id);
+
+ /**
+ * 获得工单分页数据
+ * @param loginUserId
+ * @param pageVO
+ * @return
+ */
+ PageResult getGardenInspectionPage(Long loginUserId, BpmGardenWorkOrderPageReqVO pageVO);
+}
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenServiceImpl.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenServiceImpl.java
new file mode 100644
index 0000000..4f6fb7d
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenServiceImpl.java
@@ -0,0 +1,163 @@
+package com.zteits.urbanops.module.workorder.service.garden;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.util.object.BeanUtils;
+import com.zteits.urbanops.framework.common.util.object.ObjectUtils;
+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.enums.task.BpmTaskStatusEnum;
+import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant;
+import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderCreateReqVo;
+import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO;
+import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoPageReqVO;
+import com.zteits.urbanops.module.workorder.dal.dataobject.attachment.AttachmentDO;
+import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO;
+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.MainInfoMapper;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.MAIN_INFO_NOT_EXISTS;
+
+/**
+ * @author yanhuiqing
+ * @version 1.0
+ * @description: 园林工作流实现类
+ * @date 2025/12/1 11:38
+ */
+@Service
+@Validated
+public class BpmGardenServiceImpl implements BpmGardenService{
+
+ @Resource
+ private AttachmentMapper attachmentMapper;
+ @Resource
+ private MainInfoMapper workOrderMapper;
+ @Resource
+ private BpmProcessInstanceApi processInstanceApi;
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Long createWorkOrder(Long userId, BpmGardenWorkOrderCreateReqVo createRequestVo) {
+ List imgList = createRequestVo.getImgs();
+ List streetImgList = createRequestVo.getStreetImgList();
+ List longRangeImgList = createRequestVo.getLongRangeImgList();
+ String isYesOrNo = createRequestVo.getIsYesOrNo();
+ // 插入 工单
+ MainInfoDO workOrder = BeanUtils.toBean(createRequestVo, MainInfoDO.class)
+ .setStatus(BpmTaskStatusEnum.RUNNING.getStatus());
+ //TODO 设置其它值 需从道路表获取
+ workOrder.setStreetId("test");
+ workOrder.setBuzStatus("t1");//需给出映射关系
+ workOrder.setCommitDate(LocalDateTime.now());
+ workOrderMapper.insert(workOrder);
+
+ //附件插入
+ attachmentApend(imgList,streetImgList,longRangeImgList,workOrder);
+ // 发起 BPM 流程
+ Map processInstanceVariables = new HashMap<>();
+ processInstanceVariables.put("isYesOrNo", isYesOrNo);
+ String processInstanceId = processInstanceApi.createProcessInstance(userId,
+ new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(BpmCommonConstant.BPM_GARDEN_INSPECT_WO)
+ .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(workOrder.getId()))
+ .setStartUserSelectAssignees(createRequestVo.getStartUserSelectAssignees()));
+
+ // 将工作流的编号,更新到 工单中
+ workOrderMapper.updateById(new MainInfoDO().setId(workOrder.getId()).setProcessInstanceId(processInstanceId));
+ return workOrder.getId();
+ }
+
+ /**
+ * 附件插入
+ * @param imgList 问题照片 P1
+ * @param streetImgList 街道照片 P2
+ * @param longRangeImgList 远景照片 P3
+ * @param workOrder
+ */
+ private void attachmentApend(List imgList, List streetImgList, List longRangeImgList, MainInfoDO workOrder) {
+ //问题图片
+ if(ObjectUtils.isNotAllEmpty(imgList)){
+ AttachmentDO saveDO = new AttachmentDO();
+ saveDO.setBusiLine(workOrder.getBusiLine());
+ saveDO.setBusiType(BpmCommonConstant.GARDEN_INSPECT_WO_ATTACH1);
+ saveDO.setOrderNo(workOrder.getOrderNo());
+ String filePaths = String.join(",",imgList);
+ saveDO.setFileNames(filePaths);
+ LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper()
+ .eq(AttachmentDO::getBusiLine, workOrder.getBusiLine())
+ .eq(AttachmentDO::getBusiType, BpmCommonConstant.GARDEN_INSPECT_WO_ATTACH1)
+ .eq(AttachmentDO::getOrderNo, workOrder.getOrderNo());
+ attachmentMapper.delete(deleteWrapper);
+ attachmentMapper.insert(saveDO);
+ }
+ //街道图片
+ if(ObjectUtils.isNotAllEmpty(streetImgList)){
+ AttachmentDO saveDO = new AttachmentDO();
+ saveDO.setBusiLine(workOrder.getBusiLine());
+ saveDO.setBusiType(BpmCommonConstant.GARDEN_INSPECT_WO_ATTACH2);
+ saveDO.setOrderNo(workOrder.getOrderNo());
+ String filePaths = String.join(",",streetImgList);
+ saveDO.setFileNames(filePaths);
+ LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper()
+ .eq(AttachmentDO::getBusiLine, workOrder.getBusiLine())
+ .eq(AttachmentDO::getBusiType, BpmCommonConstant.GARDEN_INSPECT_WO_ATTACH2)
+ .eq(AttachmentDO::getOrderNo, workOrder.getOrderNo());
+ attachmentMapper.delete(deleteWrapper);
+ attachmentMapper.insert(saveDO);
+ }
+ //远景图片
+ if(ObjectUtils.isNotAllEmpty(longRangeImgList)){
+ AttachmentDO saveDO = new AttachmentDO();
+ saveDO.setBusiLine(workOrder.getBusiLine());
+ saveDO.setBusiType(BpmCommonConstant.GARDEN_INSPECT_WO_ATTACH3);
+ saveDO.setOrderNo(workOrder.getOrderNo());
+ String filePaths = String.join(",",longRangeImgList);
+ saveDO.setFileNames(filePaths);
+ LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper()
+ .eq(AttachmentDO::getBusiLine, workOrder.getBusiLine())
+ .eq(AttachmentDO::getBusiType, BpmCommonConstant.GARDEN_INSPECT_WO_ATTACH3)
+ .eq(AttachmentDO::getOrderNo, workOrder.getOrderNo());
+ attachmentMapper.delete(deleteWrapper);
+ attachmentMapper.insert(saveDO);
+ }
+
+
+ }
+
+
+ @Override
+ public void updateWorkOrderStatus(Long id, Integer status) {
+ validateExists(id);
+ workOrderMapper.updateById(new MainInfoDO().setId(id).setStatus(status));
+ }
+ private void validateExists(Long id) {
+ if (workOrderMapper.selectById(id) == null) {
+ throw exception(MAIN_INFO_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public BpmGardenWorkOrderDO getWorkOrder(Long id) {
+ MainInfoDO workOrder = workOrderMapper.selectById(id);
+ BpmGardenWorkOrderDO targetVo = BeanUtils.toBean(workOrder, BpmGardenWorkOrderDO.class);
+ //TODO 定义页面展示字段在此扩展
+ return targetVo;
+ }
+
+ @Override
+ public PageResult getGardenInspectionPage(Long loginUserId, BpmGardenWorkOrderPageReqVO pageVO) {
+ MainInfoPageReqVO mainInfoPageReqVo = BeanUtils.toBean(pageVO,MainInfoPageReqVO.class);
+ PageResult pageList = workOrderMapper.selectPage(loginUserId, mainInfoPageReqVo);
+ PageResult targetList = BeanUtils.toBean(pageList,BpmGardenWorkOrderDO.class);
+ return targetList;
+ }
+}
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BomGardenWorkOrderStatusListener.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BomGardenWorkOrderStatusListener.java
new file mode 100644
index 0000000..75d3a54
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/BomGardenWorkOrderStatusListener.java
@@ -0,0 +1,29 @@
+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.service.garden.BpmGardenService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author yanhuiqing
+ * @version 1.0
+ * @description: 工作流状态监听类
+ * @date 2025/12/1 11:45
+ */
+@Component
+public class BomGardenWorkOrderStatusListener extends BpmProcessInstanceStatusEventListener {
+ @Resource
+ private BpmGardenService gardenService;
+ @Override
+ protected String getProcessDefinitionKey() {
+
+ return null;
+ }
+
+ @Override
+ protected void onEvent(BpmProcessInstanceStatusEvent event) {
+ gardenService.updateWorkOrderStatus(Long.parseLong(event.getBusinessKey()), event.getStatus());
+ }
+}