Explorar el Código

仿钉钉流程设计- 流程抄送增加流程活动 Id 字段

jason hace 9 meses
padre
commit
6b0520d779

+ 6 - 0
sql/mysql/bpm_update.sql

@@ -0,0 +1,6 @@
+-- ----------------------------
+-- 流程抄送表新加流程活动编号
+-- ----------------------------
+ALTER TABLE `pro-test`.`bpm_process_instance_copy`
+    ADD COLUMN `activity_id` varchar(64) NULL COMMENT '流程活动编号' AFTER `category`,
+    MODIFY COLUMN `task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '任务编号' AFTER `category`;

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

@@ -157,8 +157,7 @@ public class BpmProcessInstanceController {
         return success(true);
     }
 
-    // TODO @jason:有个 get-form-fields-permission
-    @GetMapping("/form-fields-permission")
+    @GetMapping("/get-form-fields-permission")
     @Operation(summary = "获得流程实例表单字段权限", description = "在【我的流程】菜单中,进行调用")
     @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')")
     public CommonResult<Map<String, String>> getProcessInstanceFormFieldsPermission(

+ 8 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceCopyDO.java

@@ -48,10 +48,16 @@ public class BpmProcessInstanceCopyDO extends BaseDO {
      * 冗余 ProcessInstance 的 category 字段
      */
     private String category;
-
+    /**
+     * 流程活动编号
+     * <p/>
+     * 对应 BPMN XML 节点 Id, 用于查询抄送节点的表单字段权限
+     * 这里冗余的原因。如果是钉钉易搭的抄送节点 (ServiceTask) 。 使用 taskId 可能查不到对应的 activityId
+     */
+    private String activityId;
     /**
      * 任务主键
-     *
+     * // @芋艿  这个 taskId 是不是可以去掉了
      * 关联 Task 的 id 属性
      */
     private String taskId;

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmCopyTaskDelegate.java

@@ -41,7 +41,7 @@ public class BpmCopyTaskDelegate implements JavaDelegate {
         // 2. 执行抄送
         FlowElement currentFlowElement = execution.getCurrentFlowElement();
         processInstanceCopyService.createProcessInstanceCopy(userIds, execution.getProcessInstanceId(),
-                currentFlowElement.getId(), currentFlowElement.getName());
+                currentFlowElement.getId(), null, currentFlowElement.getName());
     }
 
 }

+ 3 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyService.java

@@ -26,10 +26,12 @@ public interface BpmProcessInstanceCopyService {
      *
      * @param userIds 抄送的用户编号
      * @param processInstanceId 流程编号
+     * @param activityId 流程活动编号 id (对应 BPMN XML 节点 Id)
+     * // TODO 芋艿这个 taskId 是不是可以不要了
      * @param taskId 任务编号
      * @param taskName 任务名称
      */
-    void createProcessInstanceCopy(Collection<Long> userIds, String processInstanceId, String taskId, String taskName);
+    void createProcessInstanceCopy(Collection<Long> userIds, String processInstanceId, String activityId, String taskId, String taskName);
 
     /**
      * 获得抄送的流程的分页

+ 4 - 3
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyServiceImpl.java

@@ -53,11 +53,11 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
             throw exception(ErrorCodeConstants.TASK_NOT_EXISTS);
         }
         String processInstanceId = task.getProcessInstanceId();
-        createProcessInstanceCopy(userIds, processInstanceId, task.getId(), task.getName());
+        createProcessInstanceCopy(userIds, processInstanceId, task.getTaskDefinitionKey(), task.getId(), task.getName());
     }
 
     @Override
-    public void createProcessInstanceCopy(Collection<Long> userIds, String processInstanceId, String taskId, String taskName) {
+    public void createProcessInstanceCopy(Collection<Long> userIds, String processInstanceId, String activityId, String taskId, String taskName) {
         // 1.1 校验流程实例存在
         ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId);
         if (processInstance == null) {
@@ -74,7 +74,8 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
         List<BpmProcessInstanceCopyDO> copyList = convertList(userIds, userId -> new BpmProcessInstanceCopyDO()
                 .setUserId(userId).setStartUserId(Long.valueOf(processInstance.getStartUserId()))
                 .setProcessInstanceId(processInstanceId).setProcessInstanceName(processInstance.getName())
-                .setCategory(processDefinition.getCategory()).setTaskId(taskId).setTaskName(taskName));
+                .setCategory(processDefinition.getCategory()).setActivityId(activityId)
+                .setTaskId(taskId).setTaskName(taskName));
         processInstanceCopyMapper.insertBatch(copyList);
     }