|
@@ -22,6 +22,7 @@ import org.springblade.core.tool.support.Kv;
|
|
|
import org.springblade.core.tool.utils.DateUtil;
|
|
|
import org.springblade.core.tool.utils.Func;
|
|
|
import org.springblade.evisa.feign.EVisaClient;
|
|
|
+import org.springblade.evisa.redissionUtil.DistributedRedisLock;
|
|
|
import org.springblade.evisa.vo.EVisaTaskApprovalVO;
|
|
|
import org.springblade.flow.core.constant.ProcessConstant;
|
|
|
import org.springblade.flow.core.entity.BladeFlow;
|
|
@@ -39,8 +40,9 @@ import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
- /**
|
|
|
+/**
|
|
|
* 任务审核主表 服务实现类
|
|
|
*
|
|
|
* @author BladeX
|
|
@@ -90,7 +92,40 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
+ /**
|
|
|
+ * 任务专用
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public TaskApprovalVO queryBusinessDataTask(TaskApprovalVO taskApprovalVO) {
|
|
|
+ do {
|
|
|
+ //判断锁是否存在
|
|
|
+ if(!DistributedRedisLock.getLockStatus(taskApprovalVO.getFormDataId())){
|
|
|
+ //如果不存在,直接获取并上锁,由于这个查询方法是任务方面使用,所以解锁需要在对应数据使用结束后
|
|
|
+ DistributedRedisLock.acquire(taskApprovalVO.getFormDataId(), 20);
|
|
|
+ switch (taskApprovalVO.getApprovalType()){
|
|
|
+ case 1:
|
|
|
+ //填报数据
|
|
|
+ return this.queryProcessSubmitBusinessData(taskApprovalVO.getFormDataId());
|
|
|
+ case 2:
|
|
|
+ //工程文件
|
|
|
+ return this.queryArchiveFileBusinessData(taskApprovalVO.getFormDataId());
|
|
|
+ default:
|
|
|
+ //未找到数据,解锁
|
|
|
+ DistributedRedisLock.release(taskApprovalVO.getFormDataId());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ try{
|
|
|
+ //如果存在锁,则等待解锁
|
|
|
+ TimeUnit.MILLISECONDS.sleep(5);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } while (true);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public TaskApprovalVO queryBusinessData(TaskApprovalVO taskApprovalVO) {
|
|
|
switch (taskApprovalVO.getApprovalType()){
|
|
|
case 1:
|
|
@@ -157,7 +192,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
|
|
|
String[] formDataIdArray = formDataIds.split(",");
|
|
|
for(String formDataId : formDataIdArray){
|
|
|
Task task = this.baseMapper.queryTaskListByFormDataId(formDataId);
|
|
|
- if(!record.contains(task.getId())){
|
|
|
+ if(task != null && !record.contains(task.getId())){
|
|
|
record.add(task.getId());
|
|
|
result.add(task);
|
|
|
}
|
|
@@ -229,15 +264,22 @@ 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).set(TaskParallel::getUpdateTime, new Date()).eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId));
|
|
|
+ this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
|
|
|
+ .set(TaskParallel::getStatus, 2)
|
|
|
+ .set(TaskParallel::getEVisaStatus, 1)
|
|
|
+ .set(TaskParallel::getEVisaContent, "电签成功")
|
|
|
+ .set(TaskParallel::getUpdateTime, new Date())
|
|
|
+ .eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId)
|
|
|
+ );
|
|
|
|
|
|
//最后判断当前分支流程的主流程的其它分支是否都已经完成,如果都已完成则更改主流程状态并执行完成任务
|
|
|
|
|
|
//获取状态为1(待审批)的分支流程
|
|
|
List<TaskParallel> otherLink = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, currentLink.getProcessInstanceId()).eq(TaskParallel::getIsDeleted, 0).eq(TaskParallel::getStatus, 1));
|
|
|
+ //获取主流程
|
|
|
+ Task task = this.getOne(Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0).eq(Task::getProcessInstanceId, currentLink.getProcessInstanceId()));
|
|
|
if(otherLink == null || otherLink.size() == 0){
|
|
|
//说明都审批完成,将主表状态更改为已完成
|
|
|
- Task task = this.getOne(Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0).eq(Task::getProcessInstanceId, currentLink.getProcessInstanceId()));
|
|
|
//根据主表的业务ID(processInstanceId)获取主流程的taskId
|
|
|
String masterTaskId = this.newFlowClient.queryTaskIdByProcessInstanceId(task.getProcessInstanceId());
|
|
|
if(StringUtils.isNotEmpty(masterTaskId)){
|
|
@@ -248,11 +290,33 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
|
|
|
//修改对应的业务数据状态为已审批
|
|
|
this.updateBusinessDataByFormDataId(task, 2, eVisaStatus.contains("@@@@") ? eVisaStatus.split("@@@@")[1] : null);
|
|
|
}
|
|
|
+ } else {
|
|
|
+ //修改对应的业务数据状态为已审批
|
|
|
+ this.updateBusinessDataByFormDataId(task, 1, eVisaStatus.contains("@@@@") ? eVisaStatus.split("@@@@")[1] : null);
|
|
|
+ }
|
|
|
+ } else if("eVisaError".equals(eVisaStatus) || eVisaStatus.contains("eVisaError")){
|
|
|
+ //电签失败,将对应分支任务的电签状态修改为99并添加错误信息
|
|
|
+ String message = "电签失败";
|
|
|
+ if(eVisaStatus.contains("####")){
|
|
|
+ message = eVisaStatus.split("####")[1];
|
|
|
}
|
|
|
- } else if("error".equals(eVisaStatus)) {
|
|
|
- System.out.println("循环调用电签");
|
|
|
+ //修改
|
|
|
+ this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
|
|
|
+ .set(TaskParallel::getEVisaStatus, 99)
|
|
|
+ .set(TaskParallel::getEVisaContent, message)
|
|
|
+ .set(TaskParallel::getUpdateTime, new Date())
|
|
|
+ .eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId)
|
|
|
+ );
|
|
|
+
|
|
|
} else {
|
|
|
//notPfxOrFile,没有证书或证书文件过期等
|
|
|
+ //修改
|
|
|
+ this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
|
|
|
+ .set(TaskParallel::getEVisaStatus, 99)
|
|
|
+ .set(TaskParallel::getEVisaContent, "未找到证书或业务文件")
|
|
|
+ .set(TaskParallel::getUpdateTime, new Date())
|
|
|
+ .eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId)
|
|
|
+ );
|
|
|
return false;
|
|
|
}
|
|
|
} else {
|
|
@@ -423,6 +487,8 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
|
|
|
*/
|
|
|
private void updateWriteBusinessDataStatus(String formDataId, Integer status, String newFileUrl){
|
|
|
this.informationQueryService.update(Wrappers.<InformationQuery>lambdaUpdate().set(InformationQuery::getStatus, status).set(InformationQuery::getEVisaPdfUrl, newFileUrl).in(InformationQuery::getId, Arrays.asList(formDataId.split(","))));
|
|
|
+ //解锁
|
|
|
+ DistributedRedisLock.release(formDataId);
|
|
|
}
|
|
|
|
|
|
/**
|