|
@@ -8,6 +8,8 @@ import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.apache.commons.lang.time.DateUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springblade.business.entity.*;
|
|
|
import org.springblade.business.mapper.TaskMapper;
|
|
|
import org.springblade.business.service.*;
|
|
@@ -38,6 +40,7 @@ import org.springblade.manager.entity.ProjectInfo;
|
|
|
import org.springblade.manager.feign.ContractClient;
|
|
|
import org.springblade.manager.feign.ProjectClient;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
@@ -45,6 +48,7 @@ import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 任务审核主表 服务实现类
|
|
@@ -57,6 +61,8 @@ import java.util.concurrent.TimeUnit;
|
|
|
@AllArgsConstructor
|
|
|
public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implements ITaskService {
|
|
|
|
|
|
+ private static final Logger logger = LoggerFactory.getLogger(TaskServiceImpl.class);
|
|
|
+
|
|
|
private final NewFlowClient newFlowClient;
|
|
|
|
|
|
private final IFlowClient flowClient;
|
|
@@ -79,6 +85,8 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
|
|
|
|
|
|
private final ContractClient contractClient;
|
|
|
|
|
|
+ private final ITaskBatchService taskBatchService;
|
|
|
+
|
|
|
@Override
|
|
|
public List<TaskParallel> queryApprovalUser(String formDataIds) {
|
|
|
//返回结果
|
|
@@ -275,7 +283,61 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Boolean completeApprovalTask(TaskApprovalVO taskApprovalVO) {
|
|
|
+ public Boolean batchCompleteApprovalTask(List<TaskApprovalVO> taskApprovalVOS) {
|
|
|
+ long batch = this.taskBatchService.count(Wrappers.<TaskBatch>lambdaQuery().eq(TaskBatch::getCreateUser, AuthUtil.getUserId()));
|
|
|
+ if(batch > 0){
|
|
|
+ List<String> taskIds = taskApprovalVOS.stream().map(TaskApprovalVO::getParallelProcessInstanceId).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ //修改电签状态
|
|
|
+ this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
|
|
|
+ .set(TaskParallel::getEVisaContent, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........")
|
|
|
+ .in(TaskParallel::getParallelProcessInstanceId, taskIds));
|
|
|
+ //保存批次
|
|
|
+ this.taskBatchService.save(new TaskBatch(null, JSONObject.toJSONString(taskApprovalVOS)));
|
|
|
+
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ //保存批次
|
|
|
+ TaskBatch taskBatch = new TaskBatch(null, JSONObject.toJSONString(taskApprovalVOS));
|
|
|
+ this.taskBatchService.save(taskBatch);
|
|
|
+
|
|
|
+ //执行电签,结束后检查在执行是否有新的等待批次
|
|
|
+ this.checkIsExsitTaskBatch(taskApprovalVOS, taskBatch.getId().toString());
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Async
|
|
|
+ public void checkIsExsitTaskBatch(List<TaskApprovalVO> taskApprovalVOS, String batchId){
|
|
|
+ boolean isContinue = true;
|
|
|
+ while (isContinue){
|
|
|
+ logger.info("【任务审核】当前批次开始电签。批次ID:" + batchId);
|
|
|
+ //执行电签
|
|
|
+ for(TaskApprovalVO taskApprovalVO : taskApprovalVOS){
|
|
|
+ this.completeApprovalTask(taskApprovalVO);
|
|
|
+ }
|
|
|
+ //删除掉对应批次
|
|
|
+ this.taskBatchService.deletedById(batchId);
|
|
|
+ try{
|
|
|
+ //查询是否还存在对应批次(时间升序)
|
|
|
+ List<TaskBatch> taskBatches = this.taskBatchService.list(Wrappers.<TaskBatch>lambdaQuery().eq(TaskBatch::getCreateUser, AuthUtil.getUserId()).orderByAsc(TaskBatch::getCreateTime));
|
|
|
+ if(taskBatches != null && taskBatches.size() > 0){
|
|
|
+ TaskBatch taskBatch = taskBatches.get(0);
|
|
|
+ //获取业务参数集合
|
|
|
+ taskApprovalVOS = JSONArray.parseArray(JSONObject.toJSONString(taskBatch.getJsonData()), TaskApprovalVO.class);
|
|
|
+ batchId = taskBatch.getId().toString();
|
|
|
+ } else {
|
|
|
+ logger.info("【任务审核】已无等待电签批次!当前线程结束即将释放。");
|
|
|
+ isContinue = false;
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ isContinue = false;
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void completeApprovalTask(TaskApprovalVO taskApprovalVO) {
|
|
|
//获取流程ID
|
|
|
String taskId = taskApprovalVO.getTaskId();
|
|
|
//获取业务实例ID
|
|
@@ -288,7 +350,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
|
|
|
//获取当前分支信息
|
|
|
TaskParallel currentLink = this.taskParallelService.getOne(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId).eq(TaskParallel::getIsDeleted, 0));
|
|
|
if(currentLink == null){
|
|
|
- return false;
|
|
|
+ return;
|
|
|
}
|
|
|
//获取主流程
|
|
|
Task masterTask = this.getOne(Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0).eq(Task::getProcessInstanceId, currentLink.getProcessInstanceId()));
|
|
@@ -377,8 +439,6 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
|
|
|
|
|
|
//解锁
|
|
|
DistributedRedisLock.release(masterTask.getFormDataId());
|
|
|
-
|
|
|
- return false;
|
|
|
}
|
|
|
} else {
|
|
|
//废除,遵循只要某一个分支流程废除,则主流程废除、其它分支流程均自动结束
|
|
@@ -386,6 +446,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, 3).set(TaskParallel::getUpdateUser, AuthUtil.getUserId()).set(TaskParallel::getUpdateTime, new Date()).eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId));
|
|
|
+
|
|
|
//获取除当前分支外的所有分支
|
|
|
List<TaskParallel> otherLink = this.taskParallelService.queryOtherLinkList(parallelProcessInstanceId);
|
|
|
//主流程实例ID
|
|
@@ -429,8 +490,6 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
|
|
|
this.abolishMessage(masterTask, currentLink, comment);
|
|
|
|
|
|
}
|
|
|
-
|
|
|
- return true;
|
|
|
}
|
|
|
|
|
|
/**
|