Commit 3a3e8b2a authored by tianbo's avatar tianbo

登记类修改并发问题-维保备案提交按钮处理

parent 3ba29968
......@@ -448,26 +448,47 @@ public class JgMaintenanceContractServiceImpl extends BaseService<JgMaintenanceC
BeanUtil.copyProperties(contract, bean);
createTaskModel(bean, taskName, "1", nextUserIds);
} else {
// 有InstanceId,执行一步
ProcessTaskDTO processTaskDTO = this.submit("0", contract);
String nextTaskId = processTaskDTO.getNextTask().get(0).getId();
String taskName = processTaskDTO.getNextTask().get(0).getName();
this.buildRoleList(Collections.singletonList(processTaskDTO), roleListNext, roleListAll);
List<WorkflowResultDto> workflowResultDtos = commonService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO));
String nextUserIds = workflowResultDtos.get(0).getNextExecutorUserIds();
// 查询下节点任务
if (!ObjectUtils.isEmpty(contract.getInstanceStatus())) {
contract.setInstanceStatus(contract.getInstanceStatus() + "," + String.join("", roleListNext));
} else {
contract.setInstanceStatus(String.join(",", roleListAll));
String lockKey = CommonServiceImpl.buildJgExecuteLockKey(contract.getInstanceId());
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if(!isLocked){
throw new BadRequest("当前流程已经被执行!");
}
// 流程执行时,状态及权限校验
commonService.checkForExecuteFlow(String.valueOf(map.get("nextTaskId")), contract.getInstanceId());
// 有InstanceId,执行一步
ProcessTaskDTO processTaskDTO = this.submit("0", contract);
String nextTaskId = processTaskDTO.getNextTask().get(0).getId();
String taskName = processTaskDTO.getNextTask().get(0).getName();
this.buildRoleList(Collections.singletonList(processTaskDTO), roleListNext, roleListAll);
List<WorkflowResultDto> workflowResultDtos = commonService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO));
String nextUserIds = workflowResultDtos.get(0).getNextExecutorUserIds();
// 查询下节点任务
if (!ObjectUtils.isEmpty(contract.getInstanceStatus())) {
contract.setInstanceStatus(contract.getInstanceStatus() + "," + String.join("", roleListNext));
} else {
contract.setInstanceStatus(String.join(",", roleListAll));
}
contract.setPromoter(RequestContext.getExeUserId());
contract.setNextExecuteIds(String.join(",", roleListNext));
contract.setStatus(String.valueOf(WorkFlowStatusEnum.MAIN_RECEIVE.getPass()));
contract.setNextTaskId(nextTaskId);
contract.setNextExecuteUserIds(nextUserIds);
commonService.deleteTaskModel(contract.getSequenceNbr() + "");
executeOneStep(contract, taskName, nextUserIds, "0");
// redis流程实时数据更新
commonService.saveExecuteFlowData2Redis(contract.getInstanceId(), this.buildInstanceRuntimeData(contract));
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if(lock.isHeldByCurrentThread()){
lock.unlock();
}
}
contract.setPromoter(RequestContext.getExeUserId());
contract.setNextExecuteIds(String.join(",", roleListNext));
contract.setStatus(String.valueOf(WorkFlowStatusEnum.MAIN_RECEIVE.getPass()));
contract.setNextTaskId(nextTaskId);
contract.setNextExecuteUserIds(nextUserIds);
commonService.deleteTaskModel(contract.getSequenceNbr() + "");
executeOneStep(contract, taskName, nextUserIds, "0");
}
} else {
List<TaskModelDto> modelDtos = new ArrayList<>();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment