From af1b082bc396d8709559d66a682f5739780c6624 Mon Sep 17 00:00:00 2001 From: yanhuiqing Date: Sat, 13 Dec 2025 11:46:39 +0800 Subject: [PATCH] 工单管理代码提交 --- urbanops-framework/urbanops-common/src/main/java/com/zteits/urbanops/framework/common/pojo/CommonResult.java | 2 +- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/api/constant/BpmCommonConstant.java | 8 ++++++-- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/garden/vo/BpmGardenWorkOrderCreateReqVO.java | 8 ++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoPageReqVO.java | 9 +++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoRespVO.java | 10 ++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoSaveReqVO.java | 9 +++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenWorkOrderReqVO.java | 8 ++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/convert/garden/BpmGardenWorkOrderConverter.java | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/garden/BpmGardenWorkOrderDO.java | 9 ++++++++- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoDO.java | 11 +++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoMapper.java | 6 +++++- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenServiceImpl.java | 81 +++++++++++++++++++++++++++++---------------------------------------------------- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/AutoCompleteTaskListener.java | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 13 files changed, 284 insertions(+), 57 deletions(-) create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/convert/garden/BpmGardenWorkOrderConverter.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/AutoCompleteTaskListener.java diff --git a/urbanops-framework/urbanops-common/src/main/java/com/zteits/urbanops/framework/common/pojo/CommonResult.java b/urbanops-framework/urbanops-common/src/main/java/com/zteits/urbanops/framework/common/pojo/CommonResult.java index 13e6322..96d4241 100644 --- a/urbanops-framework/urbanops-common/src/main/java/com/zteits/urbanops/framework/common/pojo/CommonResult.java +++ b/urbanops-framework/urbanops-common/src/main/java/com/zteits/urbanops/framework/common/pojo/CommonResult.java @@ -73,7 +73,7 @@ public class CommonResult implements Serializable { CommonResult result = new CommonResult<>(); result.code = GlobalErrorCodeConstants.SUCCESS.getCode(); result.data = data; - result.msg = ""; + result.msg = GlobalErrorCodeConstants.SUCCESS.getMsg(); return result; } 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 409d91d..e4636a6 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 @@ -24,13 +24,17 @@ public class BpmCommonConstant { */ public static final String BPM_MUNICIPAL_INSPECT_WO = "municipal_inspect_wo"; /** - * 园林问题单图片类型 + * 园林问题单处理前图片描述 */ public static final String PROBLEM_IMG_GROUP = "01"; /** + * 园林问题单处理中图片类型 + */ + public static final String HANDLE_IMG_GROUP = "02"; + /** * 园林处理结果图片类型 */ - public static final String RESULT_IMG_GROUP = "02"; + public static final String RESULT_IMG_GROUP = "03"; /** * 园林远景图片类型 */ 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 index 62605eb..3b65bdf 100644 --- 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 @@ -7,6 +7,7 @@ import lombok.Data; import org.hibernate.validator.constraints.Length; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -40,6 +41,10 @@ public class BpmGardenWorkOrderCreateReqVO { @Length(max = 500) private String remark; + @Schema(description = "工单完成结果描述", example = "已完成") + @Length(max = 500) + private String handleResult; + @Schema(description = "经纬度类型: 1:国标; 2:百度;3:高德;4:腾讯", example = "2") private Integer latLonType; @@ -70,6 +75,9 @@ public class BpmGardenWorkOrderCreateReqVO { @Schema(description = "三方工单ID") private String thirdWorkNo; + @Schema(description = "完成时间") + private LocalDateTime finishDate; + @Schema(description = "发起人自选审批人 Map", example = "{taskKey1: [1, 2]}") private Map> startUserSelectAssignees; diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoPageReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoPageReqVO.java index 83629e8..9c1d059 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoPageReqVO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoPageReqVO.java @@ -5,6 +5,8 @@ import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; import com.zteits.urbanops.framework.common.pojo.PageParam; import java.math.BigDecimal; + +import org.hibernate.validator.constraints.Length; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; @@ -51,6 +53,10 @@ public class MainInfoPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] commitDate; + @Schema(description = "完成时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] finishDate; + @Schema(description = "紧急程度:1:特急;2:紧急;3:一般", example = "2") private Integer pressingType; @@ -93,6 +99,9 @@ public class MainInfoPageReqVO extends PageParam { @Schema(description = "工单描述", example = "你说的对") private String remark; + @Schema(description = "工单完成结果描述", example = "已完成") + private String handleResult; + @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoRespVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoRespVO.java index f8d705c..55166ed 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoRespVO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoRespVO.java @@ -4,6 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import java.math.BigDecimal; + +import org.hibernate.validator.constraints.Length; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import cn.idev.excel.annotation.*; @@ -65,6 +67,10 @@ public class MainInfoRespVO { @ExcelProperty("提交日期") private LocalDateTime commitDate; + @Schema(description = "完成时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("完成时间") + private LocalDateTime finishDate; + @Schema(description = "紧急程度:1:特急;2:紧急;3:一般", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @ExcelProperty("紧急程度:1:特急;2:紧急;3:一般") private Integer pressingType; @@ -121,6 +127,10 @@ public class MainInfoRespVO { @ExcelProperty("工单描述") private String remark; + @Schema(description = "工单完成结果描述", example = "已完成") + @ExcelProperty("工单完成结果描述") + private String handleResult; + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") private LocalDateTime createTime; diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoSaveReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoSaveReqVO.java index 9a3e5e4..c8e11e8 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoSaveReqVO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoSaveReqVO.java @@ -5,6 +5,8 @@ import lombok.*; import java.util.*; import jakarta.validation.constraints.*; import java.math.BigDecimal; + +import org.hibernate.validator.constraints.Length; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; @@ -62,6 +64,9 @@ public class MainInfoSaveReqVO { @NotNull(message = "提交日期不能为空") private LocalDateTime commitDate; + @Schema(description = "完成时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime finishDate; + @Schema(description = "紧急程度:1:特急;2:紧急;3:一般", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @NotNull(message = "紧急程度:1:特急;2:紧急;3:一般不能为空") private Integer pressingType; @@ -113,4 +118,8 @@ public class MainInfoSaveReqVO { @NotEmpty(message = "工单描述不能为空") private String remark; + @Schema(description = "工单完成结果描述", example = "已完成") + @Length(max = 500) + private String handleResult; + } \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenWorkOrderReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenWorkOrderReqVO.java index 2cbd334..5c55689 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenWorkOrderReqVO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenWorkOrderReqVO.java @@ -7,6 +7,7 @@ import lombok.Data; import org.hibernate.validator.constraints.Length; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -39,6 +40,10 @@ public class AppGardenWorkOrderReqVO { @Length(max = 500) private String remark; + @Schema(description = "工单完成结果描述", example = "已完成") + @Length(max = 500) + private String handleResult; + @Schema(description = "经纬度类型: 1:国标; 2:百度;3:高德;4:腾讯", example = "2") private Integer latLonType; @@ -73,6 +78,9 @@ public class AppGardenWorkOrderReqVO { @Schema(description = "三方工单ID") private String thirdWorkNo; + @Schema(description = "完成时间") + private LocalDateTime finishDate; + /* @Schema(description = "发起人自选审批人 Map", example = "{taskKey1: [1, 2]}") private Map> startUserSelectAssignees; diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/convert/garden/BpmGardenWorkOrderConverter.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/convert/garden/BpmGardenWorkOrderConverter.java new file mode 100644 index 0000000..9321bdf --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/convert/garden/BpmGardenWorkOrderConverter.java @@ -0,0 +1,122 @@ +package com.zteits.urbanops.module.workorder.convert.garden; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant; +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 org.springframework.beans.BeanUtils; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 手动实现 MainInfoDO 到 BpmGardenWorkOrderDO 的转换 + * yanhuiqing + * 核心: + * 1. problemImgsList/completeImgsList 是 BpmGardenWorkOrderDO 扩展字段,通过查询附件赋值 + * 2. 明确转换方向:MainInfoDO(源)→ BpmGardenWorkOrderDO(目标) + */ +public class BpmGardenWorkOrderConverter { + + // 单例实例(保留原MapStruct的INSTANCE风格,也可改为Spring注入) + public static final BpmGardenWorkOrderConverter INSTANCE = new BpmGardenWorkOrderConverter(); + + // ========== 单对象转换(核心方法) ========== + /** + * MainInfoDO → BpmGardenWorkOrderDO + * @param source 源对象 + * @param attachmentMapper 附件Mapper,用于查询图片列表 + * @return 目标对象 + */ + public BpmGardenWorkOrderDO convert(MainInfoDO source, AttachmentMapper attachmentMapper) { + // 1. 源对象为空,直接返回null + if (source == null) { + return null; + } + + // 2. 初始化目标对象,复制父类/公共属性(使用BeanUtils简化属性拷贝) + BpmGardenWorkOrderDO target = new BpmGardenWorkOrderDO(); + // 拷贝MainInfoDO的所有属性到子类BpmGardenWorkOrderDO(需保证属性名和类型一致) + BeanUtils.copyProperties(source, target); + + // 3. 手动赋值扩展字段:查询问题图片列表和完成图片列表 + List problemImgsList = queryAttachment( + source.getBusiLine(), + BpmCommonConstant.PROBLEM_IMG_GROUP, + source.getOrderNo(), + attachmentMapper + ); + List completeImgsList = queryAttachment( + source.getBusiLine(), + BpmCommonConstant.RESULT_IMG_GROUP, + source.getOrderNo(), + attachmentMapper + ); + target.setProblemImgsList(problemImgsList); + target.setCompleteImgsList(completeImgsList); + + return target; + } + + // ========== 集合转换 ========== + /** + * 批量转换 MainInfoDO 列表到 BpmGardenWorkOrderDO 列表 + * @param sourceList 源列表 + * @param attachmentMapper 附件Mapper + * @return 目标列表 + */ + public List convertList(List sourceList, AttachmentMapper attachmentMapper) { + // 1. 源列表为空,返回空列表(避免NPE) + if (sourceList == null || sourceList.isEmpty()) { + return Collections.emptyList(); + } + + // 2. 遍历源列表,调用单对象转换方法 + return sourceList.stream() + .map(source -> convert(source, attachmentMapper)) + .collect(Collectors.toList()); + } + + // ========== 分页转换 ========== + /** + * 分页转换 MainInfoDO 分页对象到 BpmGardenWorkOrderDO 分页对象 + * @param sourcePage 源分页对象 + * @param attachmentMapper 附件Mapper + * @return 目标分页对象 + */ + public PageResult convertPage(PageResult sourcePage, AttachmentMapper attachmentMapper) { + // 1. 源分页对象为空,返回空分页 + if (sourcePage == null) { + return PageResult.empty(); + } + + // 2. 转换列表数据,保留分页参数(总数、页码、页大小等) + List targetList = convertList(sourcePage.getList(), attachmentMapper); + return new PageResult<>(targetList, sourcePage.getTotal()); + } + + // ========== 工具方法:查询附件列表(提取为私有方法,仅内部复用) ========== + private List queryAttachment(String busiLine, String busiType, String orderNo, AttachmentMapper attachmentMapper) { + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(AttachmentDO::getBusiLine, busiLine) + .eq(AttachmentDO::getBusiType, busiType) + .eq(AttachmentDO::getOrderNo, orderNo); + List attachments = attachmentMapper.selectList(queryWrapper); + if (attachments == null || attachments.isEmpty()) { + return List.of(); + } + return attachments.stream() + .map(AttachmentDO::getFileNames) + .filter(s -> s != null && !s.isEmpty()) + .flatMap(s -> Arrays.stream(s.split(",")).map(String::trim)) + .filter(s -> !s.isEmpty()) + .distinct() + .collect(Collectors.toList()); + } +} \ No newline at end of file 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 index 2b3ac0a..8da2268 100644 --- 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 @@ -2,7 +2,8 @@ package com.zteits.urbanops.module.workorder.dal.dataobject.garden; import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; +import lombok.*; +import lombok.experimental.SuperBuilder; import java.util.List; @@ -13,6 +14,12 @@ import java.util.List; * @date 2025/12/1 11:34 */ @Data +@NoArgsConstructor // 显式添加无参构造器 +@EqualsAndHashCode(callSuper = true) +@Getter +@Setter +@ToString +@AllArgsConstructor public class BpmGardenWorkOrderDO extends MainInfoDO { @Schema(description = "问题图片", example = "9184") diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoDO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoDO.java index d320ae3..f3e1a31 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoDO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoDO.java @@ -1,5 +1,6 @@ package com.zteits.urbanops.module.workorder.dal.dataobject.maininfo; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import java.time.LocalDateTime; @@ -9,6 +10,7 @@ import java.time.LocalDateTime; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO; +import org.hibernate.validator.constraints.Length; /** * 工单信息 DO @@ -78,6 +80,11 @@ public class MainInfoDO extends BaseDO { * 提交日期 */ private LocalDateTime commitDate; + + /** + * 完成时间 + */ + private LocalDateTime finishDate; /** * 紧急程度:1:特急;2:紧急;3:一般 */ @@ -134,6 +141,10 @@ public class MainInfoDO extends BaseDO { * 工单描述 */ private String remark; + /** + * 工单完成结果描述 + */ + private String handleResult; } \ No newline at end of file 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 b0bc884..7965090 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 @@ -31,6 +31,7 @@ public interface MainInfoMapper extends BaseMapperX { .eqIfPresent(MainInfoDO::getCuringLevelId, reqVO.getCuringLevelId()) .likeIfPresent(MainInfoDO::getCuringLevelName, reqVO.getCuringLevelName()) .betweenIfPresent(MainInfoDO::getCommitDate, reqVO.getCommitDate()) + .betweenIfPresent(MainInfoDO::getFinishDate, reqVO.getFinishDate()) .eqIfPresent(MainInfoDO::getPressingType, reqVO.getPressingType()) .eqIfPresent(MainInfoDO::getUserId, reqVO.getUserId()) .likeIfPresent(MainInfoDO::getUserName, reqVO.getUserName()) @@ -44,7 +45,8 @@ public interface MainInfoMapper extends BaseMapperX { .eqIfPresent(MainInfoDO::getBuzStatus, reqVO.getBuzStatus()) .eqIfPresent(MainInfoDO::getStatus, reqVO.getStatus()) .eqIfPresent(MainInfoDO::getProcessInstanceId, reqVO.getProcessInstanceId()) - .eqIfPresent(MainInfoDO::getRemark, reqVO.getRemark()) + .likeIfPresent(MainInfoDO::getRemark, reqVO.getRemark()) + .likeIfPresent(MainInfoDO::getHandleResult, reqVO.getHandleResult()) .betweenIfPresent(MainInfoDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(MainInfoDO::getId)); } @@ -63,6 +65,7 @@ public interface MainInfoMapper extends BaseMapperX { .eqIfPresent(MainInfoDO::getCuringLevelId, reqVO.getCuringLevelId()) .likeIfPresent(MainInfoDO::getCuringLevelName, reqVO.getCuringLevelName()) .betweenIfPresent(MainInfoDO::getCommitDate, reqVO.getCommitDate()) + .betweenIfPresent(MainInfoDO::getFinishDate, reqVO.getFinishDate()) .eqIfPresent(MainInfoDO::getPressingType, reqVO.getPressingType()) .eqIfPresent(MainInfoDO::getUserId, loginUserId) .likeIfPresent(MainInfoDO::getUserName, reqVO.getUserName()) @@ -77,6 +80,7 @@ public interface MainInfoMapper extends BaseMapperX { .eqIfPresent(MainInfoDO::getStatus, reqVO.getStatus()) .eqIfPresent(MainInfoDO::getProcessInstanceId, reqVO.getProcessInstanceId()) .likeIfPresent(MainInfoDO::getRemark, reqVO.getRemark()) + .likeIfPresent(MainInfoDO::getHandleResult, reqVO.getHandleResult()) .betweenIfPresent(MainInfoDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(MainInfoDO::getId)); } 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 index 3cdf198..53591ff 100644 --- 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 @@ -17,6 +17,7 @@ import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGarden import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoPageReqVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.AppGardenWorkOrderPageReqVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.AppGardenWorkOrderReqVO; +import com.zteits.urbanops.module.workorder.convert.garden.BpmGardenWorkOrderConverter; 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; @@ -46,7 +47,6 @@ import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.MAIN @Service @Validated public class BpmGardenServiceImpl implements BpmGardenService{ - @Resource private AttachmentMapper attachmentMapper; @Resource @@ -59,6 +59,7 @@ public class BpmGardenServiceImpl implements BpmGardenService{ @Resource private RoadApi roadApi; + @Override @Transactional(rollbackFor = Exception.class) public Long createWorkOrderQuick(AppGardenWorkOrderReqVO createRequestVo) { @@ -79,7 +80,9 @@ public class BpmGardenServiceImpl implements BpmGardenService{ workOrder.setBusiLine(SecurityFrameworkUtils.getBusiLine()); workOrder.setUserId(SecurityFrameworkUtils.getLoginUserId()); workOrder.setUserName(SecurityFrameworkUtils.getLoginUserNickname()); - workOrder.setCommitDate(LocalDateTime.now()); + LocalDateTime now = LocalDateTime.now(); + workOrder.setCommitDate(now); + workOrder.setFinishDate(now); String workOrderNum = workOrderApi.generateWONum(BpmCommonConstant.WORK_ORDER_PREFFIX_QUICK); workOrder.setOrderNo(workOrderNum); //workOrder.setOrderName("园林工单"); @@ -92,12 +95,16 @@ public class BpmGardenServiceImpl implements BpmGardenService{ processInstanceVariables.put("workOrder", workOrder); processInstanceVariables.put("imgList", imgList); processInstanceVariables.put("longRangeImgList", longRangeImgList); + processInstanceVariables.put("applyUserId", SecurityFrameworkUtils.getLoginUserId()); + String processInstanceId = processInstanceApi.createProcessInstance(SecurityFrameworkUtils.getLoginUserId(), new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(BpmCommonConstant.COMMON_QUICK_PROCESS) .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(workOrder.getId()))); // 将工作流的编号,更新到 工单中 workOrderMapper.updateById(new MainInfoDO().setId(workOrder.getId()).setProcessInstanceId(processInstanceId)); + + return workOrder.getId(); } @@ -188,34 +195,28 @@ public class BpmGardenServiceImpl implements BpmGardenService{ 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); -// } - List resultImgs = new java.util.ArrayList<>(); - if (ObjectUtils.isNotAllEmpty(streetImgList)) { - resultImgs.addAll(streetImgList); - } - if (ObjectUtils.isNotAllEmpty(longRangeImgList)) { - resultImgs.addAll(longRangeImgList); + //街道图片 + if(ObjectUtils.isNotAllEmpty(streetImgList)){ + AttachmentDO saveDO = new AttachmentDO(); + saveDO.setBusiLine(workOrder.getBusiLine()); + saveDO.setBusiType(BpmCommonConstant.HANDLE_IMG_GROUP); + 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.HANDLE_IMG_GROUP) + .eq(AttachmentDO::getOrderNo, workOrder.getOrderNo()); + attachmentMapper.delete(deleteWrapper); + attachmentMapper.insert(saveDO); } - if(ObjectUtils.isNotAllEmpty(resultImgs)){ + + if(ObjectUtils.isNotAllEmpty(longRangeImgList)){ AttachmentDO saveDO = new AttachmentDO(); saveDO.setBusiLine(workOrder.getBusiLine()); saveDO.setBusiType(BpmCommonConstant.RESULT_IMG_GROUP); saveDO.setOrderNo(workOrder.getOrderNo()); - String filePaths = String.join(",",resultImgs); + String filePaths = String.join(",",longRangeImgList); saveDO.setFileNames(filePaths); LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper() .eq(AttachmentDO::getBusiLine, workOrder.getBusiLine()) @@ -228,25 +229,6 @@ public class BpmGardenServiceImpl implements BpmGardenService{ } - private List attachmentGet(String busiLine, String busiType, String orderNo) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() - .eq(AttachmentDO::getBusiLine, busiLine) - .eq(AttachmentDO::getBusiType, busiType) - .eq(AttachmentDO::getOrderNo, orderNo); - List attachments = attachmentMapper.selectList(queryWrapper); - if (attachments == null || attachments.isEmpty()) { - return List.of(); - } - return attachments.stream() - .map(AttachmentDO::getFileNames) - .filter(s -> s != null && !s.isEmpty()) - .flatMap(s -> Arrays.stream(s.split(",")).map(String::trim)) - .filter(s -> !s.isEmpty()) - .distinct() - .collect(Collectors.toList()); - } - - @Override public void updateWorkOrderStatus(Long id, Integer status) { validateExists(id); @@ -261,18 +243,14 @@ public class BpmGardenServiceImpl implements BpmGardenService{ @Override public BpmGardenWorkOrderDO getWorkOrder(Long id) { MainInfoDO workOrder = workOrderMapper.selectById(id); - BpmGardenWorkOrderDO targetVo = BeanUtils.toBean(workOrder, BpmGardenWorkOrderDO.class); - targetVo.setProblemImgsList(attachmentGet(workOrder.getBusiLine(), BpmCommonConstant.PROBLEM_IMG_GROUP, workOrder.getOrderNo())); - targetVo.setCompleteImgsList(attachmentGet(workOrder.getBusiLine(), BpmCommonConstant.RESULT_IMG_GROUP, workOrder.getOrderNo())); - return targetVo; + return BpmGardenWorkOrderConverter.INSTANCE.convert(workOrder, attachmentMapper); } @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; + return BpmGardenWorkOrderConverter.INSTANCE.convertPage(pageList, attachmentMapper); } @Override @@ -303,8 +281,7 @@ public class BpmGardenServiceImpl implements BpmGardenService{ } } PageResult pageList = workOrderMapper.selectPage(loginUserId, mainInfoPageReqVo); - PageResult targetList = BeanUtils.toBean(pageList,BpmGardenWorkOrderDO.class); - return targetList; + return BpmGardenWorkOrderConverter.INSTANCE.convertPage(pageList, attachmentMapper); } diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/AutoCompleteTaskListener.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/AutoCompleteTaskListener.java new file mode 100644 index 0000000..ae7d4d2 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/AutoCompleteTaskListener.java @@ -0,0 +1,58 @@ +package com.zteits.urbanops.module.workorder.service.garden.listener; + +import com.zteits.urbanops.module.bpm.framework.flowable.core.util.FlowableUtils; +import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.TaskService; +import org.flowable.engine.impl.context.Context; +import org.flowable.task.service.delegate.DelegateTask; +import org.flowable.task.service.delegate.TaskListener; +import org.springframework.stereotype.Component; + +/** + * @author yanhuiqing + * @version 1.0 + * @description: 自动触发 + * @date 2025/12/11 11:17 + */ +@Slf4j +@Component +public class AutoCompleteTaskListener implements TaskListener { + + @Resource + private BpmGardenService gardenService; + @Override + public void notify(DelegateTask delegateTask) { + // 仅处理任务创建事件 + if (!"create".equals(delegateTask.getEventName())) { + return; + } + try { + Thread.sleep(5000); // 延迟200ms,确保任务持久化 + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + Long assigneeId = Long.parseLong(delegateTask.getAssignee()); + //FlowableUtils.executeAuthenticatedUserId(assigneeId, () -> { + // 完成任务(在认证上下文内执行) + TaskService taskService = Context.getProcessEngineConfiguration().getTaskService(); + taskService.complete(delegateTask.getId()); + // return assigneeId; + //}); + + // 1. 获取发起人变量(芋道流程中配置的initiator) + //String initiator = (String) delegateTask.getVariable("initiator"); + // 2. 当前任务处理人(即发起人) + //String currentAssignee = delegateTask.getAssignee(); + + // 3. 校验:处理人是发起人则自动完成任务 + // if (initiator != null && initiator.equals(currentAssignee)) { +// TaskService taskService = Context.getProcessEngineConfiguration().getTaskService(); + // 添加备注变量 + // delegateTask.setVariable("autoCompleteReason", "发起人自动完成任务"); + // 完成任务,触发流程流转到结束节点 + // taskService.complete(delegateTask.getId()); + // } + } +} -- libgit2 0.21.4