Browse Source

BPM:流程实例的 `status` 状态实现,使用 Flowable 的 `variables` 存储,移除 `bpm_process_instance_ext` 表

YunaiV 1 year ago
parent
commit
7967a2a195
17 changed files with 149 additions and 241 deletions
  1. 4 2
      yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceStatusEnum.java
  2. 28 0
      yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceStatusOldEnum.java
  3. 0 24
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/candidate/vo/BpmTaskCandidateRuleVO.java
  4. 27 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java
  5. 2 5
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageItemRespVO.java
  6. 2 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceRespVO.java
  7. 0 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java
  8. 18 17
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java
  9. 0 98
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java
  10. 0 34
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java
  11. 19 0
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmConstants.java
  12. 3 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnModelConstants.java
  13. 2 9
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmProcessInstanceEventListener.java
  14. 13 9
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionService.java
  15. 2 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java
  16. 29 36
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java
  17. 0 0
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java

+ 4 - 2
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceStatusEnum.java

@@ -4,7 +4,7 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 
 /**
- * 流程实例的状态
+ * 流程实例 ProcessInstance 的状态
  *
  * @author 芋道源码
  */
@@ -13,7 +13,9 @@ import lombok.Getter;
 public enum BpmProcessInstanceStatusEnum {
 
     RUNNING(1, "进行中"),
-    FINISH(2, "已完成");
+    APPROVE(2, "通过"),
+    REJECT(3, "不通过"),
+    CANCEL(4, "已取消");
 
     /**
      * 状态

+ 28 - 0
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceStatusOldEnum.java

@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.module.bpm.enums.task;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 流程实例的状态
+ *
+ * @author 芋道源码
+ */
+@Deprecated
+@Getter
+@AllArgsConstructor
+public enum BpmProcessInstanceStatusOldEnum {
+
+    RUNNING(1, "进行中"),
+    FINISH(2, "已完成");
+
+    /**
+     * 状态
+     */
+    private final Integer status;
+    /**
+     * 描述
+     */
+    private final String desc;
+
+}

+ 0 - 24
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/candidate/vo/BpmTaskCandidateRuleVO.java

@@ -1,24 +0,0 @@
-package cn.iocoder.yudao.module.bpm.controller.admin.candidate.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-import java.util.Set;
-
-/**
- * 流程任务分配规则 Base VO,提供给添加、修改、详细的子 VO 使用
- * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
- */
-@Data
-public class BpmTaskCandidateRuleVO {
-
-    @Schema(description = "规则类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "bpm_task_assign_rule_type")
-    @NotNull(message = "规则类型不能为空")
-    private Integer type;
-
-    @Schema(description = "规则值数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3")
-    @NotNull(message = "规则值数组不能为空")
-    private Set<Long> options;
-
-}

+ 27 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java

@@ -1,19 +1,31 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.task;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*;
+import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert;
+import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
 import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
+import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
 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.flowable.engine.history.HistoricProcessInstance;
+import org.flowable.engine.repository.ProcessDefinition;
+import org.flowable.task.api.Task;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+import java.util.Map;
+
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 
 @Tag(name = "管理后台 - 流程实例") // 流程实例,通过流程定义创建的一次“申请”
@@ -24,13 +36,27 @@ public class BpmProcessInstanceController {
 
     @Resource
     private BpmProcessInstanceService processInstanceService;
+    @Resource
+    private BpmTaskService taskService;
+    @Resource
+    private BpmProcessDefinitionService processDefinitionService;
 
     @GetMapping("/my-page")
     @Operation(summary = "获得我的实例分页列表", description = "在【我的流程】菜单中,进行调用")
     @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')")
     public CommonResult<PageResult<BpmProcessInstancePageItemRespVO>> getMyProcessInstancePage(
             @Valid BpmProcessInstanceMyPageReqVO pageReqVO) {
-        return success(processInstanceService.getMyProcessInstancePage(getLoginUserId(), pageReqVO));
+        PageResult<HistoricProcessInstance> pageResult = processInstanceService.getMyProcessInstancePage(getLoginUserId(), pageReqVO);
+        if (CollUtil.isEmpty(pageResult.getList())) {
+            return success(PageResult.empty(pageResult.getTotal()));
+        }
+
+        // 拼接返回
+        Map<String, List<Task>> taskMap = taskService.getTaskMapByProcessInstanceIds(
+                convertList(pageResult.getList(), HistoricProcessInstance::getId));
+        Map<String, ProcessDefinition> processDefinitionMap = processDefinitionService.getProcessDefinitionMap(
+                convertSet(pageResult.getList(), HistoricProcessInstance::getProcessDefinitionId));
+        return success(BpmProcessInstanceConvert.INSTANCE.convertPage(pageResult, processDefinitionMap, taskMap));
     }
 
     @PostMapping("/create")

+ 2 - 5
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageItemRespVO.java

@@ -23,13 +23,10 @@ public class BpmProcessInstancePageItemRespVO {
     private String category;
 
     @Schema(description = "流程实例的状态-参见 bpm_process_instance_status", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    private Integer status;
-
-    @Schema(description = "流程实例的结果-参见 bpm_process_instance_result", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
-    private Integer result;
+    private Integer status; // 参见 BpmProcessInstanceStatusEnum 枚举
 
     @Schema(description = "提交时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    private LocalDateTime createTime;
+    private LocalDateTime startTime;
 
     @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
     private LocalDateTime endTime;

+ 2 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceRespVO.java

@@ -20,8 +20,8 @@ public class BpmProcessInstanceRespVO {
     @Schema(description = "流程分类-参见 bpm_model_category 数据字典", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     private String category;
 
-    @Schema(description = "流程实例的状态-参见 bpm_process_instance_status", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    private Integer status;
+    @Schema(description = "流程实例的状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer status; // 参见 BpmProcessInstanceStatusEnum 枚举
 
     @Schema(description = "流程实例的结果-参见 bpm_process_instance_result", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
     private Integer result;

+ 0 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java

@@ -1,6 +1,5 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task;
 
-import cn.iocoder.yudao.module.bpm.controller.admin.candidate.vo.BpmTaskCandidateRuleVO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 

+ 18 - 17
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java

@@ -1,13 +1,15 @@
 package cn.iocoder.yudao.module.bpm.convert.task;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
 import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstancePageItemRespVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO;
 import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO;
-import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
 import cn.iocoder.yudao.module.bpm.event.BpmProcessInstanceResultEvent;
+import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants;
 import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO;
 import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO;
 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
@@ -34,25 +36,26 @@ public interface BpmProcessInstanceConvert {
 
     BpmProcessInstanceConvert INSTANCE = Mappers.getMapper(BpmProcessInstanceConvert.class);
 
-    default PageResult<BpmProcessInstancePageItemRespVO> convertPage(PageResult<BpmProcessInstanceExtDO> page,
+    default PageResult<BpmProcessInstancePageItemRespVO> convertPage(PageResult<HistoricProcessInstance> pageResult,
+                                                                     Map<String, ProcessDefinition> processDefinitionMap,
                                                                      Map<String, List<Task>> taskMap) {
-        List<BpmProcessInstancePageItemRespVO> list = convertList(page.getList());
-        list.forEach(respVO -> respVO.setTasks(convertList2(taskMap.get(respVO.getId()))));
-        return new PageResult<>(list, page.getTotal());
+        PageResult<BpmProcessInstancePageItemRespVO> vpPageResult = BeanUtils.toBean(pageResult, BpmProcessInstancePageItemRespVO.class);
+        for (int i = 0; i < pageResult.getList().size(); i++) {
+            BpmProcessInstancePageItemRespVO respVO = vpPageResult.getList().get(i);
+            respVO.setStatus((Integer) pageResult.getList().get(i).getProcessVariables().get(BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS));
+            MapUtils.findAndThen(processDefinitionMap, respVO.getProcessDefinitionId(),
+                    processDefinition -> respVO.setCategory(processDefinition.getCategory()));
+            respVO.setTasks(BeanUtils.toBean(taskMap.get(respVO.getId()), BpmProcessInstancePageItemRespVO.Task.class));
+        }
+        return vpPageResult;
     }
 
-    List<BpmProcessInstancePageItemRespVO> convertList(List<BpmProcessInstanceExtDO> list);
-
-    @Mapping(source = "processInstanceId", target = "id")
-    BpmProcessInstancePageItemRespVO convert(BpmProcessInstanceExtDO bean);
-
-    List<BpmProcessInstancePageItemRespVO.Task> convertList2(List<Task> tasks);
-
-    default BpmProcessInstanceRespVO convert2(HistoricProcessInstance processInstance, BpmProcessInstanceExtDO processInstanceExt,
+    default BpmProcessInstanceRespVO convert2(HistoricProcessInstance processInstance,
                                               ProcessDefinition processDefinition, BpmProcessDefinitionExtDO processDefinitionExt,
                                               String bpmnXml, AdminUserRespDTO startUser, DeptRespDTO dept) {
         BpmProcessInstanceRespVO respVO = convert2(processInstance);
-        copyTo(processInstanceExt, respVO);
+        respVO.setStatus((Integer) processInstance.getProcessVariables().get(BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS));
+        respVO.setFormVariables(processInstance.getProcessVariables()); // TODO 芋艿:真的这么搞么???formVariable 要不要换个 key 之类的
         // definition
         respVO.setProcessDefinition(convert2(processDefinition));
         copyTo(processDefinitionExt, respVO.getProcessDefinition());
@@ -69,9 +72,6 @@ public interface BpmProcessInstanceConvert {
 
     BpmProcessInstanceRespVO convert2(HistoricProcessInstance bean);
 
-    @Mapping(source = "from.id", target = "to.id", ignore = true)
-    void copyTo(BpmProcessInstanceExtDO from, @MappingTarget BpmProcessInstanceRespVO to);
-
     BpmProcessInstanceRespVO.ProcessDefinition convert2(ProcessDefinition bean);
 
     @Mapping(source = "from.id", target = "to.id", ignore = true)
@@ -88,6 +88,7 @@ public interface BpmProcessInstanceConvert {
         return event;
     }
 
+    // TODO @芋艿:需要改下 key!
     default BpmProcessInstanceResultEvent convert(Object source, ProcessInstance instance, Integer result) {
         BpmProcessInstanceResultEvent event = new BpmProcessInstanceResultEvent(source);
         event.setId(instance.getId());

+ 0 - 98
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java

@@ -1,98 +0,0 @@
-package cn.iocoder.yudao.module.bpm.dal.dataobject.task;
-
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
-import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Bpm 流程实例的拓展表
- * 主要解决 Activiti ProcessInstance 和 HistoricProcessInstance 不支持拓展字段,所以新建拓展表
- *
- * @author 芋道源码
- */
-@TableName(value = "bpm_process_instance_ext", autoResultMap = true)
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class BpmProcessInstanceExtDO extends BaseDO {
-
-    /**
-     * 编号,自增
-     */
-    @TableId
-    private Long id;
-    /**
-     * 发起流程的用户编号
-     *
-     * 冗余 HistoricProcessInstance 的 startUserId 属性
-     */
-    private Long startUserId;
-    /**
-     * 流程实例的名字
-     *
-     * 冗余 ProcessInstance 的 name 属性,用于筛选
-     */
-    private String name;
-    /**
-     * 流程实例的编号
-     *
-     * 关联 ProcessInstance 的 id 属性
-     */
-    private String processInstanceId;
-    /**
-     * 流程定义的编号
-     *
-     * 关联 ProcessDefinition 的 id 属性
-     */
-    private String processDefinitionId;
-    /**
-     * 流程分类
-     *
-     * 冗余 ProcessDefinition 的 category 属性
-     * 数据字典 bpm_model_category
-     */
-    private String category;
-    /**
-     * 流程实例的状态
-     *
-     * 枚举 {@link BpmProcessInstanceStatusEnum}
-     */
-    private Integer status;
-    /**
-     * 流程实例的结果
-     *
-     * 枚举 {@link BpmProcessInstanceResultEnum}
-     */
-    private Integer result;
-    /**
-     * 结束时间
-     *
-     * 冗余 HistoricProcessInstance 的 endTime 属性
-     */
-    private LocalDateTime endTime;
-
-    /**
-     * 提交的表单值
-     */
-    @TableField(typeHandler = JacksonTypeHandler.class)
-    private Map<String, Object> formVariables;
-
-    // TODO @hai:assignees 复数
-    /**
-     * 提前设定好的审批人
-     */
-    @TableField(typeHandler = JacksonTypeHandler.class, exist = false) // TODO 芋艿:临时 exist = false,避免 db 报错;
-    private Map<String, List<Long>> assignee;
-
-}

+ 0 - 34
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java

@@ -1,34 +0,0 @@
-package cn.iocoder.yudao.module.bpm.dal.mysql.task;
-
-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.task.vo.instance.BpmProcessInstanceMyPageReqVO;
-import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface BpmProcessInstanceExtMapper extends BaseMapperX<BpmProcessInstanceExtDO> {
-
-    default PageResult<BpmProcessInstanceExtDO> selectPage(Long userId, BpmProcessInstanceMyPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<BpmProcessInstanceExtDO>()
-                .eqIfPresent(BpmProcessInstanceExtDO::getStartUserId, userId)
-                .likeIfPresent(BpmProcessInstanceExtDO::getName, reqVO.getName())
-                .eqIfPresent(BpmProcessInstanceExtDO::getProcessDefinitionId, reqVO.getProcessDefinitionId())
-                .eqIfPresent(BpmProcessInstanceExtDO::getCategory, reqVO.getCategory())
-                .eqIfPresent(BpmProcessInstanceExtDO::getStatus, reqVO.getStatus())
-                .eqIfPresent(BpmProcessInstanceExtDO::getResult, reqVO.getResult())
-                .betweenIfPresent(BpmProcessInstanceExtDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(BpmProcessInstanceExtDO::getId));
-    }
-
-    default BpmProcessInstanceExtDO selectByProcessInstanceId(String processInstanceId) {
-        return selectOne(BpmProcessInstanceExtDO::getProcessInstanceId, processInstanceId);
-    }
-
-    default void updateByProcessInstanceId(BpmProcessInstanceExtDO updateObj) {
-        update(updateObj, new LambdaQueryWrapperX<BpmProcessInstanceExtDO>()
-                .eq(BpmProcessInstanceExtDO::getProcessInstanceId, updateObj.getProcessInstanceId()));
-    }
-
-}

+ 19 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmConstants.java

@@ -0,0 +1,19 @@
+package cn.iocoder.yudao.module.bpm.framework.flowable.core.enums;
+
+import org.flowable.engine.runtime.ProcessInstance;
+
+/**
+ * BPM 通用常量
+ *
+ * @author 芋道源码
+ */
+public class BpmConstants {
+
+    /**
+     * 流程实例的变量 - 状态
+     *
+     * @see ProcessInstance#getProcessVariables()
+     */
+    public static final String PROCESS_INSTANCE_VARIABLE_STATUS = "PROCESS_STATUS";
+
+}

+ 3 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnModelConstants.java

@@ -1,7 +1,9 @@
 package cn.iocoder.yudao.module.bpm.framework.flowable.core.enums;
 
 /**
- * 流程常量信息
+ * BPMN XML 常量信息
+ *
+ * @author 芋道源码
  */
 public interface BpmnModelConstants {
 

+ 2 - 9
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmProcessInstanceEventListener.java

@@ -1,8 +1,8 @@
 package cn.iocoder.yudao.module.bpm.framework.flowable.core.listener;
 
-import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
 import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
 import com.google.common.collect.ImmutableSet;
+import jakarta.annotation.Resource;
 import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent;
 import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType;
 import org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;
@@ -11,11 +11,10 @@ import org.flowable.engine.runtime.ProcessInstance;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
-import jakarta.annotation.Resource;
 import java.util.Set;
 
 /**
- * 监听 {@link ProcessInstance} 的开始与完成,创建与更新对应的 {@link BpmProcessInstanceExtDO} 记录
+ * 监听 {@link ProcessInstance} 的状态变更,更新其对应的 status 状态
  *
  * @author jason
  */
@@ -27,7 +26,6 @@ public class BpmProcessInstanceEventListener extends AbstractFlowableEngineEvent
     private BpmProcessInstanceService processInstanceService;
 
     public static final Set<FlowableEngineEventType> PROCESS_INSTANCE_EVENTS = ImmutableSet.<FlowableEngineEventType>builder()
-                     .add(FlowableEngineEventType.PROCESS_CREATED)
                      .add(FlowableEngineEventType.PROCESS_CANCELLED)
                      .add(FlowableEngineEventType.PROCESS_COMPLETED)
                      .build();
@@ -36,11 +34,6 @@ public class BpmProcessInstanceEventListener extends AbstractFlowableEngineEvent
         super(PROCESS_INSTANCE_EVENTS);
     }
 
-    @Override
-    protected void processCreated(FlowableEngineEntityEvent event) {
-        processInstanceService.createProcessInstanceExt((ProcessInstance)event.getEntity());
-    }
-
     @Override
     protected void processCancelled(FlowableCancelledEvent event) {
         processInstanceService.updateProcessInstanceExtCancel(event);

+ 13 - 9
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionService.java

@@ -1,21 +1,23 @@
 package cn.iocoder.yudao.module.bpm.service.definition;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionListReqVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageItemRespVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
 import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO;
 import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO;
+import jakarta.validation.Valid;
 import org.flowable.bpmn.model.BpmnModel;
 import org.flowable.engine.repository.Deployment;
 import org.flowable.engine.repository.ProcessDefinition;
 
-import jakarta.validation.Valid;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
+
 /**
  * Flowable流程定义接口
  *
@@ -90,14 +92,16 @@ public interface BpmProcessDefinitionService {
     ProcessDefinition getProcessDefinition(String id);
 
     /**
-     * 获得编号对应的 ProcessDefinition
-     *
-     * 相比 {@link #getProcessDefinition(String)} 方法,category 的取值是正确
+     * 获得 ids 对应的 ProcessDefinition 数组
      *
-     * @param id 编号
-     * @return 流程定义
+     * @param ids 编号的数组
+     * @return 流程定义的数组
      */
-    ProcessDefinition getProcessDefinition2(String id);
+    List<ProcessDefinition> getProcessDefinitionList(Set<String> ids);
+
+    default Map<String, ProcessDefinition> getProcessDefinitionMap(Set<String> ids) {
+        return convertMap(getProcessDefinitionList(ids), ProcessDefinition::getId);
+    }
 
     /**
      * 获得 deploymentId 对应的 ProcessDefinition
@@ -130,7 +134,7 @@ public interface BpmProcessDefinitionService {
      * @return 流程部署 Map
      */
     default Map<String, Deployment> getDeploymentMap(Set<String> ids) {
-        return CollectionUtils.convertMap(getDeployments(ids), Deployment::getId);
+        return convertMap(getDeployments(ids), Deployment::getId);
     }
 
     /**

+ 2 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java

@@ -66,8 +66,8 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ
     }
 
     @Override
-    public ProcessDefinition getProcessDefinition2(String id) {
-        return repositoryService.createProcessDefinitionQuery().processDefinitionId(id).singleResult();
+    public List<ProcessDefinition> getProcessDefinitionList(Set<String> ids) {
+        return repositoryService.createProcessDefinitionQuery().processDefinitionIds(ids).list();
     }
 
     @Override

+ 29 - 36
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java

@@ -4,11 +4,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*;
+import jakarta.validation.Valid;
 import org.flowable.engine.delegate.event.FlowableCancelledEvent;
 import org.flowable.engine.history.HistoricProcessInstance;
 import org.flowable.engine.runtime.ProcessInstance;
 
-import jakarta.validation.Valid;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -57,6 +57,32 @@ public interface BpmProcessInstanceService {
                 ProcessInstance::getProcessInstanceId, ProcessInstance::getName);
     }
 
+    /**
+     * 获得历史的流程实例
+     *
+     * @param id 流程实例的编号
+     * @return 历史的流程实例
+     */
+    HistoricProcessInstance getHistoricProcessInstance(String id);
+
+    /**
+     * 获得历史的流程实例列表
+     *
+     * @param ids 流程实例的编号集合
+     * @return 历史的流程实例列表
+     */
+    List<HistoricProcessInstance> getHistoricProcessInstances(Set<String> ids);
+
+    /**
+     * 获得历史的流程实例 Map
+     *
+     * @param ids 流程实例的编号集合
+     * @return 历史的流程实例列表 Map
+     */
+    default Map<String, HistoricProcessInstance> getHistoricProcessInstanceMap(Set<String> ids) {
+        return CollectionUtils.convertMap(getHistoricProcessInstances(ids), HistoricProcessInstance::getId);
+    }
+
     /**
      * 获得流程实例的分页
      *
@@ -64,8 +90,8 @@ public interface BpmProcessInstanceService {
      * @param pageReqVO 分页请求
      * @return 流程实例的分页
      */
-    PageResult<BpmProcessInstancePageItemRespVO> getMyProcessInstancePage(Long userId,
-                                                                          @Valid BpmProcessInstanceMyPageReqVO pageReqVO);
+    PageResult<HistoricProcessInstance> getMyProcessInstancePage(Long userId,
+                                                                 @Valid BpmProcessInstanceMyPageReqVO pageReqVO);
 
     /**
      * 创建流程实例(提供给前端)
@@ -101,39 +127,6 @@ public interface BpmProcessInstanceService {
      */
     void cancelProcessInstance(Long userId, @Valid BpmProcessInstanceCancelReqVO cancelReqVO);
 
-    /**
-     * 获得历史的流程实例
-     *
-     * @param id 流程实例的编号
-     * @return 历史的流程实例
-     */
-    HistoricProcessInstance getHistoricProcessInstance(String id);
-
-    /**
-     * 获得历史的流程实例列表
-     *
-     * @param ids 流程实例的编号集合
-     * @return 历史的流程实例列表
-     */
-    List<HistoricProcessInstance> getHistoricProcessInstances(Set<String> ids);
-
-    /**
-     * 获得历史的流程实例 Map
-     *
-     * @param ids 流程实例的编号集合
-     * @return 历史的流程实例列表 Map
-     */
-    default Map<String, HistoricProcessInstance> getHistoricProcessInstanceMap(Set<String> ids) {
-        return CollectionUtils.convertMap(getHistoricProcessInstances(ids), HistoricProcessInstance::getId);
-    }
-
-    /**
-     * 创建 ProcessInstance 拓展记录
-     *
-     * @param instance 流程任务
-     */
-    void createProcessInstanceExt(ProcessInstance instance);
-
     /**
      * 更新 ProcessInstance 拓展记录为取消
      *

File diff suppressed because it is too large
+ 0 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java


Some files were not shown because too many files changed in this diff