Bladeren bron

新增流程任务委派转办加签支持

hubin 1 jaar geleden
bovenliggende
commit
7a79c4b799

+ 6 - 0
src/main/java/com/aizuda/boot/modules/flw/FlowHelper.java

@@ -2,6 +2,7 @@ package com.aizuda.boot.modules.flw;
 
 import com.aizuda.service.web.UserSession;
 import com.flowlong.bpm.engine.core.FlowCreator;
+import com.flowlong.bpm.engine.entity.FlwTaskActor;
 
 /**
  * 工作流辅助类
@@ -12,4 +13,9 @@ public class FlowHelper {
         UserSession userSession = UserSession.getLoginInfo();
         return FlowCreator.of(userSession.getUserId(), userSession.getUsername());
     }
+
+    public static FlwTaskActor getFlwTaskActor() {
+        UserSession userSession = UserSession.getLoginInfo();
+        return FlwTaskActor.ofUser(null, userSession.getUserId(), userSession.getUsername());
+    }
 }

+ 23 - 16
src/main/java/com/aizuda/boot/modules/flw/controller/ProcessTaskController.java

@@ -74,30 +74,30 @@ public class ProcessTaskController extends ApiController {
 
     @Operation(summary = "审批评论")
     @Permission("flw:processTask:approval")
-    @PostMapping("/approval-comment")
-    public boolean approvalComment(@Validated @RequestBody TaskApprovalDTO dto) {
-        return processTaskService.approvalComment(dto);
+    @PostMapping("/comment")
+    public boolean comment(@Validated @RequestBody TaskApprovalDTO dto) {
+        return processTaskService.comment(dto);
     }
 
     @Operation(summary = "审批同意")
     @Permission("flw:processTask:approval")
-    @PostMapping("/approval-consent")
-    public boolean approvalConsent(@Validated @RequestBody TaskApprovalDTO dto) {
-        return processTaskService.approvalConsent(dto);
+    @PostMapping("/consent")
+    public boolean consent(@Validated @RequestBody TaskApprovalDTO dto) {
+        return processTaskService.consent(dto);
     }
 
     @Operation(summary = "审批拒绝")
     @Permission("flw:processTask:approval")
-    @PostMapping("/approval-rejection")
-    public boolean approvalRejection(@Validated @RequestBody TaskApprovalDTO dto) {
-        return processTaskService.approvalRejection(dto);
+    @PostMapping("/rejection")
+    public boolean rejection(@Validated @RequestBody TaskApprovalDTO dto) {
+        return processTaskService.rejection(dto);
     }
 
     @Operation(summary = "设置已阅读")
     @Permission("flw:processTask:viewed")
     @PostMapping("/viewed-{taskId}")
     public boolean viewed(@PathVariable("taskId") Long taskId) {
-        return processTaskService.viewed(taskId, FlowHelper.getFlowCreator());
+        return processTaskService.viewed(taskId);
     }
 
     @Operation(summary = "拿回任务")
@@ -117,29 +117,36 @@ public class ProcessTaskController extends ApiController {
     @Operation(summary = "转办任务")
     @Permission("flw:processTask:transfer")
     @PostMapping("/transfer")
-    public boolean transfer(@Validate @RequestBody AssigneeTaskDTO dto) {
-        return processTaskService.transfer(FlowHelper.getFlowCreator(), dto);
+    public boolean transfer(@Validate @RequestBody TaskAssigneeDTO dto) {
+        return processTaskService.transfer(dto);
     }
 
     @Operation(summary = "委派任务")
     @Permission("flw:processTask:resume")
     @PostMapping("/delegate")
-    public boolean delegate(@Validate @RequestBody AssigneeTaskDTO dto) {
-        return processTaskService.delegate(FlowHelper.getFlowCreator(), dto);
+    public boolean delegate(@Validate @RequestBody TaskAssigneeDTO dto) {
+        return processTaskService.delegate(dto);
     }
 
     @Operation(summary = "执行任务")
     @Permission("flw:processTask:execute")
     @PostMapping("/execute")
     public boolean execute(@Validate @RequestBody ExecuteTaskDTO dto) {
-        return processTaskService.execute(FlowHelper.getFlowCreator(), dto);
+        return processTaskService.execute(dto);
     }
 
     @Operation(summary = "驳回至上一步任务")
     @Permission("flw:processTask:reject")
     @PostMapping("/reject")
     public boolean reject(@Validate @RequestBody RejectTaskDTO dto) {
-        return processTaskService.reject(FlowHelper.getFlowCreator(), dto);
+        return processTaskService.reject(dto);
+    }
+
+    @Operation(summary = "审批加签")
+    @Permission("flw:processTask:appendNode")
+    @PostMapping("/append-node")
+    public boolean appendNode(@Validate @RequestBody TaskAppendNodeDTO dto) {
+        return processTaskService.appendNode(dto);
     }
 
     @Operation(summary = "查询流程实例ID的审批历史")

+ 0 - 2
src/main/java/com/aizuda/boot/modules/flw/entity/FlwProcessApproval.java

@@ -1,6 +1,5 @@
 package com.aizuda.boot.modules.flw.entity;
 
-import com.aizuda.core.bean.BaseEntity;
 import com.aizuda.core.bean.SuperEntity;
 import com.aizuda.core.validation.Create;
 import com.baomidou.mybatisplus.annotation.FieldFill;
@@ -10,7 +9,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.PositiveOrZero;
-import jakarta.validation.constraints.Size;
 import lombok.Getter;
 import lombok.Setter;
 

+ 0 - 27
src/main/java/com/aizuda/boot/modules/flw/entity/dto/AssigneeTaskDTO.java

@@ -1,27 +0,0 @@
-package com.aizuda.boot.modules.flw.entity.dto;
-
-import com.flowlong.bpm.engine.core.FlowCreator;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 执行分配任务DTO
- *
- * @author 青苗
- * @since 2024-01-09
- */
-@Getter
-@Setter
-public class AssigneeTaskDTO extends ExecuteTaskDTO {
-
-    @Schema(description = "委托人ID")
-    private Long assignorId;
-
-    @Schema(description = "委托人")
-    private String assignor;
-
-    public FlowCreator toFlowCreator() {
-        return FlowCreator.of(String.valueOf(this.assignorId), this.assignor);
-    }
-}

+ 60 - 0
src/main/java/com/aizuda/boot/modules/flw/entity/dto/TaskAppendNodeDTO.java

@@ -0,0 +1,60 @@
+package com.aizuda.boot.modules.flw.entity.dto;
+
+import com.flowlong.bpm.engine.model.NodeAssignee;
+import com.flowlong.bpm.engine.model.NodeModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.PositiveOrZero;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Collections;
+
+/**
+ * 流程任务加签 DTO
+ *
+ * @author 青苗
+ * @since 2024-03-08
+ */
+@Getter
+@Setter
+public class TaskAppendNodeDTO {
+
+    @Schema(description = "流程任务ID")
+    @NotNull
+    @PositiveOrZero
+    private Long taskId;
+
+    @Schema(description = "用户ID")
+    @NotNull
+    @PositiveOrZero
+    private Long userId;
+
+    @Schema(description = "用户名")
+    @NotBlank
+    private String username;
+
+    @Schema(description = "加签类型 9,前加签 10,并加签 11,后加签")
+    @NotNull
+    @PositiveOrZero
+    private Integer type;
+
+    @Schema(description = "意见评论")
+    private String content;
+
+    /**
+     * 构建加签节点
+     */
+    public NodeModel toNodeModel(String nodeName) {
+        NodeModel nodeModel = new NodeModel();
+        nodeModel.setNodeName(nodeName);
+        nodeModel.setType(1);
+        nodeModel.setSetType(1);
+        NodeAssignee nodeAssignee = new NodeAssignee();
+        nodeAssignee.setId(String.valueOf(this.userId));
+        nodeAssignee.setName(this.username);
+        nodeModel.setNodeUserList(Collections.singletonList(nodeAssignee));
+        return nodeModel;
+    }
+}

+ 41 - 0
src/main/java/com/aizuda/boot/modules/flw/entity/dto/TaskAssigneeDTO.java

@@ -0,0 +1,41 @@
+package com.aizuda.boot.modules.flw.entity.dto;
+
+import com.flowlong.bpm.engine.core.FlowCreator;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.PositiveOrZero;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 流程任务分派(委派、转办) DTO
+ *
+ * @author 青苗
+ * @since 2024-03-08
+ */
+@Getter
+@Setter
+public class TaskAssigneeDTO {
+
+    @Schema(description = "流程任务ID")
+    @NotNull
+    @PositiveOrZero
+    private Long taskId;
+
+    @Schema(description = "用户ID")
+    @NotNull
+    @PositiveOrZero
+    private Long userId;
+
+    @Schema(description = "用户名")
+    @NotBlank
+    private String username;
+
+    @Schema(description = "意见评论")
+    private String content;
+
+    public FlowCreator toFlowCreator() {
+        return FlowCreator.of(String.valueOf(this.userId), this.username);
+    }
+}

+ 17 - 0
src/main/java/com/aizuda/boot/modules/flw/service/IFlwProcessApprovalService.java

@@ -1,7 +1,9 @@
 package com.aizuda.boot.modules.flw.service;
 
 import com.aizuda.boot.modules.flw.entity.FlwProcessApproval;
+import com.aizuda.boot.modules.flw.entity.dto.TaskAppendNodeDTO;
 import com.aizuda.boot.modules.flw.entity.dto.TaskApprovalDTO;
+import com.aizuda.boot.modules.flw.entity.dto.TaskAssigneeDTO;
 import com.aizuda.service.service.IBaseService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
@@ -38,4 +40,19 @@ public interface IFlwProcessApprovalService extends IBaseService<FlwProcessAppro
      * 审批拒绝
      */
     boolean rejection(Long instanceId, TaskApprovalDTO dto);
+
+    /**
+     * 转办
+     */
+    boolean transfer(Long instanceId, TaskAssigneeDTO dto);
+
+    /**
+     * 委派
+     */
+    boolean delegate(Long instanceId, TaskAssigneeDTO dto);
+
+    /**
+     * 加签
+     */
+    boolean appendNode(Long instanceId, TaskAppendNodeDTO dto);
 }

+ 25 - 40
src/main/java/com/aizuda/boot/modules/flw/service/IProcessTaskService.java

@@ -52,27 +52,8 @@ public interface IProcessTaskService {
      * 设置任务为已阅状态
      *
      * @param taskId      任务ID
-     * @param flowCreator 流程创建者
      */
-    boolean viewed(Long taskId, FlowCreator flowCreator);
-
-    /**
-     * 转办任务
-     *
-     * @param taskId              任务ID
-     * @param flowCreator         任务参与者
-     * @param assigneeFlowCreator 任务办理人
-     */
-    boolean transfer(Long taskId, FlowCreator flowCreator, FlowCreator assigneeFlowCreator);
-
-    /**
-     * 委派任务
-     *
-     * @param taskId              任务ID
-     * @param flowCreator         任务参与者
-     * @param assigneeFlowCreator 任务办理人
-     */
-    boolean delegate(Long taskId, FlowCreator flowCreator, FlowCreator assigneeFlowCreator);
+    boolean viewed(Long taskId);
 
     /**
      * 拿回任务
@@ -95,50 +76,54 @@ public interface IProcessTaskService {
      *
      * @param taskId      任务ID
      * @param nodeName    节点名称
-     * @param flowCreator 任务创建者
      */
-    boolean executeJump(Long taskId, String nodeName, FlowCreator flowCreator);
+    boolean executeJump(Long taskId, String nodeName);
 
     /**
      * 执行流程任务
-     *
-     * @param flowCreator 流程创建者
-     * @param dto         执行任务对象 {@link ExecuteTaskDTO}
      */
-    boolean execute(FlowCreator flowCreator, ExecuteTaskDTO dto);
+    boolean execute( ExecuteTaskDTO dto);
 
     /**
-     * 驳回至上一步任务
+     * 查询流程实例ID的审批历史
      *
-     * @param flowCreator 流程创建者
-     * @param dto         执行任务对象 {@link RejectTaskDTO}
+     * @param instanceId 流程实例ID
+     * @return 审批历史VO列表
      */
-    boolean reject(FlowCreator flowCreator, RejectTaskDTO dto);
+    List<FlwHisTaskVO> listHisTaskByInstanceId(Long instanceId);
 
-    boolean transfer(FlowCreator flowCreator, AssigneeTaskDTO dto);
+    /**
+     * 驳回至上一步任务
+     */
+    boolean reject(RejectTaskDTO dto);
 
-    boolean delegate(FlowCreator flowCreator, AssigneeTaskDTO dto);
+    /**
+     * 转办
+     */
+    boolean transfer(TaskAssigneeDTO dto);
 
     /**
-     * 查询流程实例ID的审批历史
-     *
-     * @param instanceId 流程实例ID
-     * @return 审批历史VO列表
+     * 委派
      */
-    List<FlwHisTaskVO> listHisTaskByInstanceId(Long instanceId);
+    boolean delegate(TaskAssigneeDTO dto);
 
     /**
      * 审批评论
      */
-    boolean approvalComment(TaskApprovalDTO dto);
+    boolean comment(TaskApprovalDTO dto);
 
     /**
      * 审批同意
      */
-    boolean approvalConsent(TaskApprovalDTO dto);
+    boolean consent(TaskApprovalDTO dto);
 
     /**
      * 审批拒绝
      */
-    boolean approvalRejection(TaskApprovalDTO dto);
+    boolean rejection(TaskApprovalDTO dto);
+
+    /**
+     * 加签
+     */
+    boolean appendNode(TaskAppendNodeDTO dto);
 }

+ 22 - 6
src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessApprovalServiceImpl.java

@@ -1,10 +1,11 @@
 package com.aizuda.boot.modules.flw.service.impl;
 
 import com.aizuda.boot.modules.flw.entity.FlwProcessApproval;
+import com.aizuda.boot.modules.flw.entity.dto.TaskAppendNodeDTO;
 import com.aizuda.boot.modules.flw.entity.dto.TaskApprovalDTO;
+import com.aizuda.boot.modules.flw.entity.dto.TaskAssigneeDTO;
 import com.aizuda.boot.modules.flw.mapper.FlwProcessApprovalMapper;
 import com.aizuda.boot.modules.flw.service.IFlwProcessApprovalService;
-import com.aizuda.core.api.ApiAssert;
 import com.aizuda.service.service.BaseServiceImpl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -33,26 +34,41 @@ public class FlwProcessApprovalServiceImpl extends BaseServiceImpl<FlwProcessApp
         return lambdaQuery().eq(FlwProcessApproval::getInstanceId, instanceId).list();
     }
 
-    private FlwProcessApproval getFlwProcessApproval(Long instanceId, Integer type, TaskApprovalDTO dto) {
+    private FlwProcessApproval getFlwProcessApproval(Long instanceId, Integer type, String content) {
         FlwProcessApproval fpa = new FlwProcessApproval();
         fpa.setInstanceId(instanceId);
         fpa.setType(type);
-        fpa.setContent(dto.getContent());
+        fpa.setContent(content);
         return fpa;
     }
 
     @Override
     public boolean comment(Long instanceId, TaskApprovalDTO dto) {
-        return super.save(getFlwProcessApproval(instanceId, 0, dto));
+        return super.save(getFlwProcessApproval(instanceId, 0, dto.getContent()));
     }
 
     @Override
     public boolean consent(Long instanceId, TaskApprovalDTO dto) {
-        return super.save(getFlwProcessApproval(instanceId, 2, dto));
+        return super.save(getFlwProcessApproval(instanceId, 2, dto.getContent()));
     }
 
     @Override
     public boolean rejection(Long instanceId, TaskApprovalDTO dto) {
-        return super.save(getFlwProcessApproval(instanceId, 3, dto));
+        return super.save(getFlwProcessApproval(instanceId, 3, dto.getContent()));
+    }
+
+    @Override
+    public boolean transfer(Long instanceId, TaskAssigneeDTO dto) {
+        return super.save(getFlwProcessApproval(instanceId, 4, dto.getContent()));
+    }
+
+    @Override
+    public boolean delegate(Long instanceId, TaskAssigneeDTO dto) {
+        return super.save(getFlwProcessApproval(instanceId, 5, dto.getContent()));
+    }
+
+    @Override
+    public boolean appendNode(Long instanceId, TaskAppendNodeDTO dto) {
+        return super.save(getFlwProcessApproval(instanceId, dto.getType(), dto.getContent()));
     }
 }

+ 42 - 44
src/main/java/com/aizuda/boot/modules/flw/service/impl/ProcessTaskServiceImpl.java

@@ -17,11 +17,9 @@ import com.flowlong.bpm.engine.TaskService;
 import com.flowlong.bpm.engine.core.FlowCreator;
 import com.flowlong.bpm.engine.entity.FlwExtInstance;
 import com.flowlong.bpm.engine.entity.FlwTask;
-import com.flowlong.bpm.engine.entity.FlwTaskActor;
 import com.flowlong.bpm.engine.model.NodeModel;
 import com.flowlong.bpm.engine.model.ProcessModel;
 import com.flowlong.bpm.mybatisplus.mapper.FlwExtInstanceMapper;
-import com.flowlong.bpm.mybatisplus.mapper.FlwTaskMapper;
 import jakarta.annotation.Resource;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
@@ -110,8 +108,8 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
     }
 
     @Override
-    public boolean viewed(Long taskId, FlowCreator flowCreator) {
-        return flowLongEngine.taskService().viewTask(taskId, FlwTaskActor.ofFlowCreator(flowCreator));
+    public boolean viewed(Long taskId) {
+        return flowLongEngine.taskService().viewTask(taskId, FlowHelper.getFlwTaskActor());
     }
 
     /**
@@ -127,20 +125,6 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
         return dto;
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public boolean transfer(Long taskId, FlowCreator flowCreator, FlowCreator assigneeFlowCreator) {
-        TaskService taskService = flowLongEngine.taskService();
-        return taskService.transferTask(taskId, flowCreator, assigneeFlowCreator);
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public boolean delegate(Long taskId, FlowCreator flowCreator, FlowCreator assigneeFlowCreator) {
-        TaskService taskService = flowLongEngine.taskService();
-        return taskService.delegateTask(taskId, flowCreator, assigneeFlowCreator);
-    }
-
     @Transactional(rollbackFor = Exception.class)
     @Override
     public boolean reclaim(Long taskId, FlowCreator flowCreator) {
@@ -157,50 +141,54 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public boolean executeJump(Long taskId, String nodeName, FlowCreator flowCreator) {
-        return flowLongEngine.executeJumpTask(taskId, nodeName, flowCreator);
+    public boolean executeJump(Long taskId, String nodeName) {
+        return flowLongEngine.executeJumpTask(taskId, nodeName, FlowHelper.getFlowCreator());
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public boolean execute(FlowCreator flowCreator, ExecuteTaskDTO dto) {
-        return flowLongEngine.executeTask(dto.getTaskId(), flowCreator, dto.getArgs());
+    public boolean execute(ExecuteTaskDTO dto) {
+        return flowLongEngine.executeTask(dto.getTaskId(), FlowHelper.getFlowCreator(), dto.getArgs());
+    }
+
+    @Override
+    public List<FlwHisTaskVO> listHisTaskByInstanceId(Long instanceId) {
+        List<FlwHisTaskVO> voList = flowlongMapper.selectListHisTaskByInstanceId(instanceId);
+        if (CollectionUtils.isNotEmpty(voList)) {
+            List<FlwHisTaskActorVO> actorList = flowlongMapper.selectListHisTaskActorVOByInstanceId(instanceId);
+            if (CollectionUtils.isNotEmpty(actorList)) {
+                voList.forEach(t -> t.setActorList(actorList.stream().filter(v -> Objects.equals(v.getTaskId(), t.getId()))
+                        .collect(Collectors.toList())));
+            }
+        }
+        return voList;
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public boolean reject(FlowCreator flowCreator, RejectTaskDTO dto) {
+    public boolean reject(RejectTaskDTO dto) {
         FlwTask flwTask = flowLongEngine.queryService().getTask(dto.getTaskId());
         ApiAssert.isEmpty(flwTask, "当前ID执行任务不存在");
         TaskService taskService = flowLongEngine.taskService();
-        return taskService.rejectTask(flwTask, flowCreator, dto.getArgs()).isPresent();
+        return taskService.rejectTask(flwTask, FlowHelper.getFlowCreator(), dto.getArgs()).isPresent();
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public boolean transfer(FlowCreator flowCreator, AssigneeTaskDTO dto) {
+    public boolean transfer(TaskAssigneeDTO dto) {
+        FlwTask flwTask = this.getFlwTask(dto.getTaskId());
         TaskService taskService = flowLongEngine.taskService();
-        return taskService.transferTask(dto.getTaskId(), flowCreator, dto.toFlowCreator());
+        taskService.transferTask(dto.getTaskId(), FlowHelper.getFlowCreator(), dto.toFlowCreator());
+        return flwProcessApprovalService.transfer(flwTask.getInstanceId(), dto);
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public boolean delegate(FlowCreator flowCreator, AssigneeTaskDTO dto) {
+    public boolean delegate(TaskAssigneeDTO dto) {
+        FlwTask flwTask = this.getFlwTask(dto.getTaskId());
         TaskService taskService = flowLongEngine.taskService();
-        return taskService.delegateTask(dto.getTaskId(), flowCreator, dto.toFlowCreator());
-    }
-
-    @Override
-    public List<FlwHisTaskVO> listHisTaskByInstanceId(Long instanceId) {
-        List<FlwHisTaskVO> voList = flowlongMapper.selectListHisTaskByInstanceId(instanceId);
-        if (CollectionUtils.isNotEmpty(voList)) {
-            List<FlwHisTaskActorVO> actorList = flowlongMapper.selectListHisTaskActorVOByInstanceId(instanceId);
-            if (CollectionUtils.isNotEmpty(actorList)) {
-                voList.forEach(t -> t.setActorList(actorList.stream().filter(v -> Objects.equals(v.getTaskId(), t.getId()))
-                        .collect(Collectors.toList())));
-            }
-        }
-        return voList;
+        taskService.delegateTask(dto.getTaskId(), FlowHelper.getFlowCreator(), dto.toFlowCreator());
+        return flwProcessApprovalService.delegate(flwTask.getInstanceId(), dto);
     }
 
     private FlwTask getFlwTask(Long taskId) {
@@ -209,8 +197,9 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
         return flwTask;
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
-    public boolean approvalComment(TaskApprovalDTO dto) {
+    public boolean comment(TaskApprovalDTO dto) {
         ApiAssert.isEmpty(dto.getContent(), "评论不能为空");
         FlwTask flwTask = this.getFlwTask(dto.getTaskId());
         return flwProcessApprovalService.comment(flwTask.getInstanceId(), dto);
@@ -218,7 +207,7 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public boolean approvalConsent(TaskApprovalDTO dto) {
+    public boolean consent(TaskApprovalDTO dto) {
         FlwTask flwTask = this.getFlwTask(dto.getTaskId());
         ApiAssert.fail(!flowLongEngine.executeTask(dto.getTaskId(), FlowHelper.getFlowCreator()), "执行任务审批失败");
         return flwProcessApprovalService.consent(flwTask.getInstanceId(), dto);
@@ -226,10 +215,19 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public boolean approvalRejection(TaskApprovalDTO dto) {
+    public boolean rejection(TaskApprovalDTO dto) {
         FlwTask flwTask = this.getFlwTask(dto.getTaskId());
         TaskService taskService = flowLongEngine.taskService();
         ApiAssert.fail(taskService.rejectTask(flwTask, FlowHelper.getFlowCreator()).isEmpty(), "执行驳回任务失败");
         return flwProcessApprovalService.rejection(flwTask.getInstanceId(), dto);
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean appendNode(TaskAppendNodeDTO dto) {
+        FlwTask flwTask = this.getFlwTask(dto.getTaskId());
+        ApiAssert.fail(flowLongEngine.executeAppendNodeModel(flwTask.getId(), dto.toNodeModel("前置加签"),
+                FlowHelper.getFlowCreator(), dto.getType() == 9), "执行任务加签失败");
+        return flwProcessApprovalService.appendNode(flwTask.getInstanceId(), dto);
+    }
 }