Răsfoiți Sursa

流程任务新增驳回设置任务为已阅接口

hubin 1 an în urmă
părinte
comite
8e202ba27f

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

@@ -3,6 +3,7 @@ package com.aizuda.boot.modules.flw.controller;
 import com.aizuda.boot.modules.flw.FlowHelper;
 import com.aizuda.boot.modules.flw.entity.dto.ExecuteTaskDTO;
 import com.aizuda.boot.modules.flw.entity.dto.ProcessTaskDTO;
+import com.aizuda.boot.modules.flw.entity.dto.RejectTaskDTO;
 import com.aizuda.boot.modules.flw.entity.vo.ProcessTaskVO;
 import com.aizuda.boot.modules.flw.service.IProcessTaskService;
 import com.aizuda.core.api.ApiController;
@@ -13,10 +14,7 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.AllArgsConstructor;
 import org.simpleframework.xml.core.Validate;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 流程任务 前端控制器
@@ -66,10 +64,24 @@ public class ProcessTaskController extends ApiController {
         return processTaskService.pageApproved(pageParam);
     }
 
+    @Operation(summary = "设置已阅读")
+    @Permission("flw:processTask:viewed")
+    @PostMapping("/viewed-{taskId}")
+    public boolean viewed(@PathVariable("taskId") Long taskId) {
+        return processTaskService.viewed(FlowHelper.getFlowCreator(), taskId);
+    }
+
     @Operation(summary = "执行任务")
     @Permission("flw:processTask:execute")
     @PostMapping("/execute")
     public boolean execute(@Validate @RequestBody ExecuteTaskDTO dto) {
         return processTaskService.execute(FlowHelper.getFlowCreator(), dto);
     }
+
+    @Operation(summary = "驳回至上一步任务")
+    @Permission("flw:processTask:reject")
+    @PostMapping("/reject")
+    public boolean reject(@Validate @RequestBody RejectTaskDTO dto) {
+        return processTaskService.reject(FlowHelper.getFlowCreator(), dto);
+    }
 }

+ 32 - 0
src/main/java/com/aizuda/boot/modules/flw/entity/dto/RejectTaskDTO.java

@@ -0,0 +1,32 @@
+package com.aizuda.boot.modules.flw.entity.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.PositiveOrZero;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+/**
+ * 驳回流程任务DTO
+ *
+ * @author 青苗
+ * @since 2023-12-31
+ */
+@Getter
+@Setter
+public class RejectTaskDTO {
+
+    @Schema(description = "流程任务ID")
+    @NotNull
+    @PositiveOrZero
+    private Long taskId;
+
+    @Schema(description = "执行参数")
+    private Map<String, Object> args;
+
+    @Schema(description = "原因")
+    private String reason;
+
+}

+ 17 - 1
src/main/java/com/aizuda/boot/modules/flw/service/IProcessTaskService.java

@@ -2,6 +2,7 @@ package com.aizuda.boot.modules.flw.service;
 
 import com.aizuda.boot.modules.flw.entity.dto.ExecuteTaskDTO;
 import com.aizuda.boot.modules.flw.entity.dto.ProcessTaskDTO;
+import com.aizuda.boot.modules.flw.entity.dto.RejectTaskDTO;
 import com.aizuda.boot.modules.flw.entity.vo.ProcessTaskVO;
 import com.aizuda.core.api.PageParam;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -40,12 +41,27 @@ public interface IProcessTaskService {
      */
     Page<ProcessTaskVO> pageApproved(PageParam<ProcessTaskDTO> pageParam);
 
+    /**
+     * 设置任务为已阅状态
+     *
+     * @param flowCreator 流程创建者
+     * @param taskId      任务ID
+     */
+    boolean viewed(FlowCreator flowCreator, Long taskId);
+
     /**
      * 执行流程任务
      *
      * @param flowCreator 流程创建者
      * @param dto         执行任务对象 {@link ExecuteTaskDTO}
-     * @return
      */
     boolean execute(FlowCreator flowCreator, ExecuteTaskDTO dto);
+
+    /**
+     * 驳回至上一步任务
+     *
+     * @param flowCreator 流程创建者
+     * @param dto         执行任务对象 {@link RejectTaskDTO}
+     */
+    boolean reject(FlowCreator flowCreator, RejectTaskDTO dto);
 }

+ 18 - 4
src/main/java/com/aizuda/boot/modules/flw/service/impl/ProcessTaskServiceImpl.java

@@ -2,21 +2,22 @@ package com.aizuda.boot.modules.flw.service.impl;
 
 import com.aizuda.boot.modules.flw.entity.dto.ExecuteTaskDTO;
 import com.aizuda.boot.modules.flw.entity.dto.ProcessTaskDTO;
+import com.aizuda.boot.modules.flw.entity.dto.RejectTaskDTO;
 import com.aizuda.boot.modules.flw.entity.vo.ProcessTaskVO;
 import com.aizuda.boot.modules.flw.mapper.FlowlongMapper;
 import com.aizuda.boot.modules.flw.service.IProcessTaskService;
+import com.aizuda.core.api.ApiAssert;
 import com.aizuda.core.api.PageParam;
 import com.aizuda.service.web.UserSession;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.flowlong.bpm.engine.FlowLongEngine;
+import com.flowlong.bpm.engine.TaskService;
 import com.flowlong.bpm.engine.core.FlowCreator;
+import com.flowlong.bpm.engine.entity.FlwTask;
+import com.flowlong.bpm.engine.entity.FlwTaskActor;
 import jakarta.annotation.Resource;
-import org.apache.commons.collections.MapUtils;
 import org.springframework.stereotype.Service;
 
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * 流程任务 服务实现类
  *
@@ -60,6 +61,11 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
         return flowlongMapper.selectPageApproved(pageParam.page(), dto);
     }
 
+    @Override
+    public boolean viewed(FlowCreator flowCreator, Long taskId) {
+        return flowLongEngine.taskService().viewTask(taskId, FlwTaskActor.ofFlowCreator(flowCreator));
+    }
+
     /**
      * 获取流程任务DTO
      */
@@ -77,4 +83,12 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
     public boolean execute(FlowCreator flowCreator, ExecuteTaskDTO dto) {
         return flowLongEngine.executeTask(dto.getTaskId(), flowCreator, dto.getArgs());
     }
+
+    @Override
+    public boolean reject(FlowCreator flowCreator, 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();
+    }
 }