From 7ab86ea5cce3962ad4be2ec1b265370160671167 Mon Sep 17 00:00:00 2001 From: aikai Date: Sat, 21 Jun 2025 09:15:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(bpm):=20=E6=96=B0=E5=A2=9E=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E6=A8=A1=E5=9D=97=E8=AE=BE=E8=AE=A1=E5=92=8C=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加工单模块前端设计文档,详细描述了页面架构、权限设计和API调用流程 - 新增工单模块数据库表结构,包括工单主表、分配规则表和跟踪记录表 - 创建工单类型、状态和优先级的字典数据 - 添加示例分配规则数据 --- .../dal/mysql/oa/BpmOAWorkOrderMapper.java | 20 ++ .../service/oa/BpmOAWorkOrderServiceImpl.java | 75 +++---- .../BpmOAWorkOrderResultListener.java | 31 +++ .../mapper/oa/BpmOAWorkOrderMapper.xml | 200 ++++++++++++++++++ 4 files changed, 283 insertions(+), 43 deletions(-) create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAWorkOrderResultListener.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAWorkOrderMapper.xml diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAWorkOrderMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAWorkOrderMapper.java index 4d175aa6..f7fcb229 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAWorkOrderMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAWorkOrderMapper.java @@ -4,8 +4,10 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.workorder.BpmOAWorkOrderPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.workorder.BpmOAWorkOrderRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkOrderDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * BPM OA 工单 Mapper @@ -64,4 +66,22 @@ public interface BpmOAWorkOrderMapper extends BaseMapperX { .in(BpmOAWorkOrderDO::getStatus, 1, 2)); // 待分配和处理中 } + /** + * 工单分页查询(带关联信息)- XML实现 + */ + PageResult selectWorkOrderPage(@Param("loginUserId") Long loginUserId, + @Param("req") BpmOAWorkOrderPageReqVO req); + + /** + * 我发起的工单分页查询(带关联信息)- XML实现 + */ + PageResult selectMyWorkOrderPage(@Param("loginUserId") Long loginUserId, + @Param("req") BpmOAWorkOrderPageReqVO req); + + /** + * 分配给我的工单分页查询(带关联信息)- XML实现 + */ + PageResult selectAssignedWorkOrderPage(@Param("loginUserId") Long loginUserId, + @Param("req") BpmOAWorkOrderPageReqVO req); + } \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAWorkOrderServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAWorkOrderServiceImpl.java index 1eda3d56..353c3045 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAWorkOrderServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAWorkOrderServiceImpl.java @@ -16,6 +16,8 @@ import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import cn.iocoder.yudao.module.system.api.dict.DictDataApi; +import cn.iocoder.yudao.module.system.api.dict.dto.DictDataRespDTO; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -64,6 +66,9 @@ public class BpmOAWorkOrderServiceImpl extends BpmOABaseService implements BpmOA @Resource private DeptApi deptApi; + @Resource + private DictDataApi dictDataApi; + @Override @Transactional(rollbackFor = Exception.class) public Long createWorkOrder(Long userId, BpmOAWorkOrderCreateReqVO createReqVO) { @@ -186,20 +191,20 @@ public class BpmOAWorkOrderServiceImpl extends BpmOABaseService implements BpmOA @Override public PageResult getWorkOrderPage(Long loginUserId, BpmOAWorkOrderPageReqVO pageVO) { - PageResult pageResult = workOrderMapper.selectPage(loginUserId, pageVO); - return convertToPageResult(pageResult); + // 使用XML查询,直接返回带关联信息的VO数据 + return workOrderMapper.selectWorkOrderPage(loginUserId, pageVO); } @Override public PageResult getMyWorkOrderPage(Long loginUserId, BpmOAWorkOrderPageReqVO pageVO) { - PageResult pageResult = workOrderMapper.selectMyPage(loginUserId, pageVO); - return convertToPageResult(pageResult); + // 使用XML查询,直接返回带关联信息的VO数据 + return workOrderMapper.selectMyWorkOrderPage(loginUserId, pageVO); } @Override public PageResult getAssignedWorkOrderPage(Long loginUserId, BpmOAWorkOrderPageReqVO pageVO) { - PageResult pageResult = workOrderMapper.selectAssignedPage(loginUserId, pageVO); - return convertToPageResult(pageResult); + // 使用XML查询,直接返回带关联信息的VO数据 + return workOrderMapper.selectAssignedWorkOrderPage(loginUserId, pageVO); } @Override @@ -357,19 +362,15 @@ public class BpmOAWorkOrderServiceImpl extends BpmOABaseService implements BpmOA * 获取工单类型名称 */ private String getWorkOrderTypeName(String type) { - switch (type) { - case "it_support": - return "IT支持"; - case "equipment_repair": - return "设备维修"; - case "system_issue": - return "系统问题"; - case "permission_request": - return "权限申请"; - case "other": - return "其他"; - default: - return type; + if (type == null) { + return ""; + } + try { + DictDataRespDTO dictData = dictDataApi.getDictData("work_order_type", type).getCheckedData(); + return dictData != null ? dictData.getLabel() : type; + } catch (Exception e) { + // 如果字典查询失败,返回原值 + return type; } } @@ -380,17 +381,12 @@ public class BpmOAWorkOrderServiceImpl extends BpmOABaseService implements BpmOA if (level == null) { return ""; } - switch (level) { - case 1: - return "低"; - case 2: - return "中"; - case 3: - return "高"; - case 4: - return "紧急"; - default: - return String.valueOf(level); + try { + DictDataRespDTO dictData = dictDataApi.getDictData("work_order_level", String.valueOf(level)).getCheckedData(); + return dictData != null ? dictData.getLabel() : String.valueOf(level); + } catch (Exception e) { + // 如果字典查询失败,返回原值 + return String.valueOf(level); } } @@ -401,19 +397,12 @@ public class BpmOAWorkOrderServiceImpl extends BpmOABaseService implements BpmOA if (status == null) { return ""; } - switch (status) { - case 1: - return "待分配"; - case 2: - return "处理中"; - case 3: - return "已完成"; - case 4: - return "已取消"; - case 5: - return "已关闭"; - default: - return String.valueOf(status); + try { + DictDataRespDTO dictData = dictDataApi.getDictData("work_order_status", String.valueOf(status)).getCheckedData(); + return dictData != null ? dictData.getLabel() : String.valueOf(status); + } catch (Exception e) { + // 如果字典查询失败,返回原值 + return String.valueOf(status); } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAWorkOrderResultListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAWorkOrderResultListener.java new file mode 100644 index 00000000..6cb6e0da --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAWorkOrderResultListener.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.bpm.service.oa.listener; + +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEvent; +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAWorkOrderService; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAWorkOrderServiceImpl; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * OA 工单的结果的监听器实现类 + * + * @author 系统 + */ +@Component +public class BpmOAWorkOrderResultListener extends BpmProcessInstanceResultEventListener { + + @Resource + private BpmOAWorkOrderService workOrderService; + + @Override + protected String getProcessDefinitionKey() { + return BpmOAWorkOrderServiceImpl.PROCESS_KEY; + } + + @Override + protected void onEvent(BpmProcessInstanceResultEvent event) { + workOrderService.updateWorkOrderResult(Long.parseLong(event.getBusinessKey()), event.getResult()); + } +} \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAWorkOrderMapper.xml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAWorkOrderMapper.xml new file mode 100644 index 00000000..d06abbb0 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAWorkOrderMapper.xml @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file