huangjn 3 年 前
コミット
13535446b6

+ 7 - 0
blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/NewFlowClient.java

@@ -22,6 +22,13 @@ public interface NewFlowClient {
     String TO_DO_LIST = API_PREFIX + "/to-do-list";
     String COMPLETE_APPROVAL_TASK = API_PREFIX + "/complete-approval-task";
     String QUERY_TASK_ID = API_PREFIX + "/query-task-id";
+    String DONE_LIST = API_PREFIX + "/done-list";
+
+    /**
+     * 获取待办
+     */
+    @PostMapping(DONE_LIST)
+    R<Object> selectDonePage(@RequestParam Integer current, @RequestParam Integer size);
 
     /**
      * 根据业务ID获取流程ID

+ 8 - 0
blade-ops/blade-flow/src/main/java/org/springblade/flow/business/feign/NewFlowClientImpl.java

@@ -32,6 +32,14 @@ public class NewFlowClientImpl implements NewFlowClient {
 
     private final TaskService taskService;
 
+    @Override
+    public R<Object> selectDonePage(Integer current, Integer size) {
+        Query query = new Query();
+        query.setCurrent(current);
+        query.setSize(size);
+        return R.data(this.flowBusinessService.selectDonePage(Condition.getPage(query), new BladeFlow()));
+    }
+
     @Override
     public String queryTaskIdByProcessInstanceId(String processInstanceId) {
         TaskQuery taskQuery = this.taskService.createTaskQuery().processInstanceId(processInstanceId).includeProcessVariables();

+ 30 - 7
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -62,6 +62,24 @@ public class TaskController extends BladeController {
 
 	private final NewFlowClient newFlowClient;
 
+	/**
+	 * 获取待办
+	 */
+	@GetMapping("/query-user-done-task-list")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "")
+	public R<IPage<TaskVO>> queryUserDoneTaskList(@RequestParam Integer current, @RequestParam Integer size){
+		//最终集合
+		List<TaskVO> finalResult = new ArrayList<>();
+		Query query = new Query();
+		query.setCurrent(current);
+		query.setSize(size);
+		//获取已办(基于原生已办)
+		R<Object> rObject = this.newFlowClient.selectDonePage(current, size);
+		//处理参数
+		return this.integrationMethod(rObject, query);
+	}
+
 	/**
 	 * 审批页详情
 	 */
@@ -80,14 +98,23 @@ public class TaskController extends BladeController {
 	@ApiOperationSupport(order = 3)
 	@ApiOperation(value = "获取当前用户待办流程")
 	public R<IPage<TaskVO>> todoUserApprovalTask(@RequestParam Integer current, @RequestParam Integer size){
-		//最终集合
-		List<TaskVO> finalResult = new ArrayList<>();
+
 		Query query = new Query();
 		query.setCurrent(current);
 		query.setSize(size);
 
 		//获取待办(基于原生待办)
 		R<Object> rObject = this.newFlowClient.selectTodoPage(current, size);
+		//处理参数
+		return this.integrationMethod(rObject, query);
+	}
+
+	/**
+	 * 统合处理方法
+	 */
+	private R<IPage<TaskVO>> integrationMethod(R<Object> rObject, Query query){
+		//最终集合
+		List<TaskVO> finalResult = new ArrayList<>();
 		if(rObject.isSuccess()){
 			//新建一个IPage的实例
 			IPage<BladeFlow> newData = Condition.getPage(query);
@@ -112,9 +139,7 @@ public class TaskController extends BladeController {
 					//获取主流程下所有相关的审批人
 					List<TaskParallel> linkList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()).eq(TaskParallel::getIsDeleted, 0));
 					if(linkList != null && linkList.size() > 0){
-						linkList.forEach(link -> {
-							vo.setWaitingUserList(link.getTaskUserName(), new Integer("999").equals(link.getEVisaStatus()) ? 999 : new Integer("2").equals(taskParallel.getStatus()) ? 2 : 1);
-						});
+						linkList.forEach(link -> vo.setWaitingUserList(link.getTaskUserName(), new Integer("999").equals(link.getEVisaStatus()) ? 999 : new Integer("2").equals(link.getStatus()) ? 2 : 1));
 					}
 
 					//设置最终集合
@@ -131,11 +156,9 @@ public class TaskController extends BladeController {
 
 			return R.data(finalPage);
 		}
-
 		return R.data(null);
 	}
 
-
 	/**
 	 * 完成/审批任务
 	 */

+ 1 - 3
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskParallelMapper.java

@@ -18,9 +18,7 @@ package org.springblade.business.mapper;
 
 import io.lettuce.core.dynamic.annotation.Param;
 import org.springblade.business.entity.TaskParallel;
-import org.springblade.business.vo.TaskParallelVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import java.util.List;
 
 /**
@@ -31,6 +29,6 @@ import java.util.List;
  */
 public interface TaskParallelMapper extends BaseMapper<TaskParallel> {
 
-    List<String> queryOtherLinkList(@Param("parallelProcessInstanceId") String parallelProcessInstanceId);
+    List<TaskParallel> queryOtherLinkList(@Param("parallelProcessInstanceId") String parallelProcessInstanceId);
 
 }

+ 11 - 2
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskParallelMapper.xml

@@ -20,8 +20,17 @@
         <result column="task_user_name" property="taskUserName"/>
     </resultMap>
 
-    <select id="queryOtherLinkList" resultType="java.lang.String">
-
+    <select id="queryOtherLinkList" resultMap="taskParallelResultMap">
+        select
+            id,
+            process_instance_id,
+            parallel_process_instance_id,
+            status,
+            e_visa_status
+        from u_task_parallel
+        where is_deleted = 0
+        and process_instance_id = (select process_instance_id from u_task_parallel where parallel_process_instance_id = #{parallelProcessInstanceId})
+        and parallel_process_instance_id != #{parallelProcessInstanceId}
     </select>
 
 </mapper>

+ 1 - 3
blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskParallelService.java

@@ -17,9 +17,7 @@
 package org.springblade.business.service;
 
 import org.springblade.business.entity.TaskParallel;
-import org.springblade.business.vo.TaskParallelVO;
 import org.springblade.core.mp.base.BaseService;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import java.util.List;
 
@@ -31,6 +29,6 @@ import java.util.List;
  */
 public interface ITaskParallelService extends BaseService<TaskParallel> {
 
-    List<String> queryOtherLinkList(String parallelProcessInstanceId);
+    List<TaskParallel> queryOtherLinkList(String parallelProcessInstanceId);
 
 }

+ 1 - 3
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskParallelServiceImpl.java

@@ -17,12 +17,10 @@
 package org.springblade.business.service.impl;
 
 import org.springblade.business.entity.TaskParallel;
-import org.springblade.business.vo.TaskParallelVO;
 import org.springblade.business.mapper.TaskParallelMapper;
 import org.springblade.business.service.ITaskParallelService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import java.util.List;
 
@@ -36,7 +34,7 @@ import java.util.List;
 public class TaskParallelServiceImpl extends BaseServiceImpl<TaskParallelMapper, TaskParallel> implements ITaskParallelService {
 
     @Override
-    public List<String> queryOtherLinkList(String parallelProcessInstanceId) {
+    public List<TaskParallel> queryOtherLinkList(String parallelProcessInstanceId) {
         return this.baseMapper.queryOtherLinkList(parallelProcessInstanceId);
     }
 }

+ 43 - 5
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -98,7 +98,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                 //完成/审批当前分支流程
                 this.newFlowClient.completeApprovalTask(taskId, parallelProcessInstanceId, comment).getData();
                 //修改分支状态,改为已完成
-                this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate().set(TaskParallel::getStatus, 2).eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId));
+                this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate().set(TaskParallel::getStatus, 2).set(TaskParallel::getUpdateTime, new Date()).eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId));
 
                 //最后判断当前分支流程的主流程的其它分支是否都已经完成,如果都已完成则更改主流程状态并执行完成任务
 
@@ -111,9 +111,9 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                     String masterTaskId = this.newFlowClient.queryTaskIdByProcessInstanceId(task.getProcessInstanceId());
                     if(StringUtils.isNotEmpty(masterTaskId)){
                         //完成流程
-                        this.newFlowClient.completeApprovalTask(taskId, task.getProcessInstanceId(), "完成任务");
+                        this.newFlowClient.completeApprovalTask(taskId, task.getProcessInstanceId(), "审批完成");
                         //修改主流程状态为已完成
-                        this.update(Wrappers.<Task>lambdaUpdate().set(Task::getStatus, 2).eq(Task::getId, task.getId()));
+                        this.update(Wrappers.<Task>lambdaUpdate().set(Task::getStatus, 2).set(Task::getUpdateTime, new Date()).eq(Task::getId, task.getId()));
                     }
                 }
             } else {
@@ -124,9 +124,47 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             //完成/审批当前分支流程
             this.newFlowClient.completeApprovalTask(taskId, parallelProcessInstanceId, comment).getData();
             //将分支状态更改为已废除
-            this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate().set(TaskParallel::getStatus, 3).eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId));
+            this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate().set(TaskParallel::getStatus, 3).set(TaskParallel::getUpdateTime, new Date()).eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId));
             //获取除当前分支外的所有分支
-            List<String> otherLink = this.taskParallelService.queryOtherLinkList(parallelProcessInstanceId);
+            List<TaskParallel> otherLink = this.taskParallelService.queryOtherLinkList(parallelProcessInstanceId);
+            //主流程实例ID
+            String masterProcessInstanceId;
+            if(otherLink != null && otherLink.size() > 0){
+                masterProcessInstanceId = otherLink.get(0).getProcessInstanceId();
+                for(TaskParallel parallel : otherLink){
+                    if(parallel.getEVisaStatus() != null && parallel.getEVisaStatus() != -1){
+                        //不为空说明已经执行电签,需要撤签
+                        // todo =================== 撤签调用 ===================
+                        // todo =================== 撤签调用 ===================
+                    }
+                    //修改所有状态为已废除
+                    this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate().set(TaskParallel::getStatus, 3).set(TaskParallel::getUpdateTime, new Date()).eq(TaskParallel::getId, parallel.getId()));
+
+                    if(new Integer("1").equals(parallel.getStatus())){
+                        //存在未审批的情况,自动执行其分支流程
+                        //获取流程ID
+                        String parallelTaskId = this.newFlowClient.queryTaskIdByProcessInstanceId(parallel.getParallelProcessInstanceId());
+                        if(StringUtils.isNotEmpty(parallelTaskId)){
+                            //执行流程
+                            this.newFlowClient.completeApprovalTask(parallelTaskId, parallel.getParallelProcessInstanceId(), "废除");
+                        }
+                    }
+                }
+            } else {
+                //获取主流程数据
+                Task task = this.getOne(Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0).eq(Task::getProcessInstanceId, currentLink.getProcessInstanceId()));
+                //找到实例ID
+                masterProcessInstanceId = task.getProcessInstanceId();
+            }
+
+            //处理完分支流程后,将主流程结束并设置状态为废除
+            //获取主流程的taskId
+            String masterTaskId = this.newFlowClient.queryTaskIdByProcessInstanceId(masterProcessInstanceId);
+            if(StringUtils.isNotEmpty(masterTaskId)){
+                //执行流程
+                this.newFlowClient.completeApprovalTask(masterTaskId, masterProcessInstanceId, "废除任务");
+            }
+            this.update(Wrappers.<Task>lambdaUpdate().set(Task::getStatus, 3).set(Task::getUpdateTime, new Date()).eq(Task::getProcessInstanceId, masterProcessInstanceId));
         }
 
         return true;