|
@ -46,15 +46,19 @@ import org.dromara.workflow.common.enums.TaskStatusEnum; |
|
|
import org.dromara.workflow.domain.bo.FlowCancelBo; |
|
|
import org.dromara.workflow.domain.bo.FlowCancelBo; |
|
|
import org.dromara.workflow.domain.bo.FlowInstanceBo; |
|
|
import org.dromara.workflow.domain.bo.FlowInstanceBo; |
|
|
import org.dromara.workflow.domain.bo.FlowInvalidBo; |
|
|
import org.dromara.workflow.domain.bo.FlowInvalidBo; |
|
|
|
|
|
import org.dromara.workflow.domain.bo.TaskOperationBo; |
|
|
import org.dromara.workflow.domain.vo.FlowHisTaskVo; |
|
|
import org.dromara.workflow.domain.vo.FlowHisTaskVo; |
|
|
import org.dromara.workflow.domain.vo.FlowInstanceVo; |
|
|
import org.dromara.workflow.domain.vo.FlowInstanceVo; |
|
|
import org.dromara.workflow.domain.vo.FlowVariableVo; |
|
|
import org.dromara.workflow.domain.vo.FlowVariableVo; |
|
|
import org.dromara.workflow.handler.FlowProcessEventHandler; |
|
|
import org.dromara.workflow.handler.FlowProcessEventHandler; |
|
|
import org.dromara.workflow.mapper.FlwCategoryMapper; |
|
|
import org.dromara.workflow.mapper.FlwCategoryMapper; |
|
|
import org.dromara.workflow.mapper.FlwInstanceMapper; |
|
|
import org.dromara.workflow.mapper.FlwInstanceMapper; |
|
|
|
|
|
import org.dromara.workflow.mapper.FlwTaskMapper; |
|
|
import org.dromara.workflow.service.IFlwCommonService; |
|
|
import org.dromara.workflow.service.IFlwCommonService; |
|
|
import org.dromara.workflow.service.IFlwInstanceService; |
|
|
import org.dromara.workflow.service.IFlwInstanceService; |
|
|
|
|
|
import org.dromara.workflow.service.IFlwTaskAssigneeService; |
|
|
import org.dromara.workflow.service.IFlwTaskService; |
|
|
import org.dromara.workflow.service.IFlwTaskService; |
|
|
|
|
|
import org.dromara.workflow.utils.BatchProcessorUtil; |
|
|
import org.dromara.workflow.utils.MinioUntil; |
|
|
import org.dromara.workflow.utils.MinioUntil; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
import org.springframework.transaction.annotation.Transactional; |
|
@ -78,12 +82,14 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { |
|
|
private final ChartService chartService; |
|
|
private final ChartService chartService; |
|
|
private final TaskService taskService; |
|
|
private final TaskService taskService; |
|
|
private final FlowHisTaskMapper flowHisTaskMapper; |
|
|
private final FlowHisTaskMapper flowHisTaskMapper; |
|
|
|
|
|
private final FlwTaskMapper flwTaskMapper; |
|
|
private final FlowInstanceMapper flowInstanceMapper; |
|
|
private final FlowInstanceMapper flowInstanceMapper; |
|
|
private final FlowProcessEventHandler flowProcessEventHandler; |
|
|
private final FlowProcessEventHandler flowProcessEventHandler; |
|
|
private final IFlwTaskService flwTaskService; |
|
|
private final IFlwTaskService flwTaskService; |
|
|
private final FlwInstanceMapper flwInstanceMapper; |
|
|
private final FlwInstanceMapper flwInstanceMapper; |
|
|
private final FlwCategoryMapper flwCategoryMapper; |
|
|
private final FlwCategoryMapper flwCategoryMapper; |
|
|
private final IFlwCommonService flwCommonService; |
|
|
private final IFlwCommonService flwCommonService; |
|
|
|
|
|
private final IFlwTaskAssigneeService flwTaskAssigneeService; |
|
|
@DubboReference |
|
|
@DubboReference |
|
|
private RemoteFileService remoteFileService; |
|
|
private RemoteFileService remoteFileService; |
|
|
|
|
|
|
|
@ -460,4 +466,77 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { |
|
|
throw new ServiceException(e.getMessage()); |
|
|
throw new ServiceException(e.getMessage()); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public Boolean batchAddSign(Long definitionId) { |
|
|
|
|
|
try { |
|
|
|
|
|
List<FlowInstanceVo> instanceList = flwInstanceMapper.listInsByDefinition(definitionId); |
|
|
|
|
|
|
|
|
|
|
|
if (ObjectUtil.isEmpty(instanceList)) { |
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//根据实例id查询所有的可执行的任务
|
|
|
|
|
|
List<Long> insIdList = instanceList.stream().map(FlowInstanceVo::getId).distinct().toList(); |
|
|
|
|
|
List<FlowTask> flowTasks = flwTaskService.selectByInstIdList(insIdList); |
|
|
|
|
|
|
|
|
|
|
|
//拿到任务之后进行批量加签
|
|
|
|
|
|
int startIndex = 0; |
|
|
|
|
|
int batchSize = 1000; |
|
|
|
|
|
boolean flag = BatchProcessorUtil.processBatches(flowTasks, batchSize, startIndex, batch -> { |
|
|
|
|
|
batch.forEach(flowTask1 -> { |
|
|
|
|
|
|
|
|
|
|
|
//判断是否有人员,进行加签
|
|
|
|
|
|
//获取当前任务的办理人
|
|
|
|
|
|
List<RemoteUserVo> currentTaskUser = flwTaskService.currentTaskAllUser(flowTask1.getId()); |
|
|
|
|
|
|
|
|
|
|
|
Instance ins = insService.getById(flowTask1.getInstanceId()); |
|
|
|
|
|
|
|
|
|
|
|
//根据配置的人员查询系统中的用户
|
|
|
|
|
|
String nodeCode = ins.getNodeCode(); |
|
|
|
|
|
Integer nodeType = ins.getNodeType(); |
|
|
|
|
|
List<String> permissionUser = flwTaskMapper.getPermissionFlag(definitionId,nodeCode,nodeType); |
|
|
|
|
|
String first = permissionUser.getFirst(); |
|
|
|
|
|
|
|
|
|
|
|
List<RemoteUserVo> totalUser = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
|
|
if (ObjectUtil.isNotEmpty(first)){ |
|
|
|
|
|
String[] split = first.split("@@"); |
|
|
|
|
|
for (String handleFlag : split) { |
|
|
|
|
|
if (!handleFlag.equals("${handler}")){ |
|
|
|
|
|
List<RemoteUserVo> remoteUserVos = flwTaskAssigneeService.fetchUsersByStorageId(handleFlag); |
|
|
|
|
|
totalUser.addAll(remoteUserVos); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//比较差值
|
|
|
|
|
|
List<RemoteUserVo> different = totalUser.stream() |
|
|
|
|
|
.filter(user -> currentTaskUser.stream().noneMatch(u -> u.getUserId().equals(user.getUserId()))) |
|
|
|
|
|
.toList(); |
|
|
|
|
|
|
|
|
|
|
|
List<String> userIds = different.stream() |
|
|
|
|
|
.map(RemoteUserVo::getUserId) |
|
|
|
|
|
.distinct() |
|
|
|
|
|
.map(String::valueOf) |
|
|
|
|
|
.toList(); |
|
|
|
|
|
|
|
|
|
|
|
//加签
|
|
|
|
|
|
if (ObjectUtil.isNotEmpty(userIds)){ |
|
|
|
|
|
TaskOperationBo taskOperationBo = new TaskOperationBo(); |
|
|
|
|
|
taskOperationBo.setUserIds(userIds); |
|
|
|
|
|
taskOperationBo.setTaskId(flowTask1.getId()); |
|
|
|
|
|
|
|
|
|
|
|
flwTaskService.taskOperation(taskOperationBo,"addSignature"); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
return flag; |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
log.error(e.getMessage(), e); |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|