| | |
| | | package com.ruoyi.system.service.impl; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.IdUtil; |
| | | import cn.hutool.core.util.NumberUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.aizuda.bpm.engine.FlowLongEngine; |
| | | import com.aizuda.bpm.engine.TaskService; |
| | | import com.aizuda.bpm.engine.core.FlowCreator; |
| | | import com.aizuda.bpm.engine.core.enums.InstanceState; |
| | | import com.aizuda.bpm.engine.core.enums.TaskType; |
| | | import com.aizuda.bpm.engine.dao.FlwInstanceDao; |
| | | import com.aizuda.bpm.engine.entity.*; |
| | | import com.aizuda.bpm.engine.model.NodeModel; |
| | | import com.aizuda.bpm.mybatisplus.mapper.*; |
| | |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.google.common.collect.ImmutableMap; |
| | | import com.ruoyi.common.basic.PageInfo; |
| | | import com.ruoyi.common.core.domain.BaseModel; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.core.domain.model.LoginUser; |
| | | import com.ruoyi.common.core.domain.model.LoginUserApplet; |
| | | import com.ruoyi.common.enums.StateProcessActionEnum; |
| | | import com.ruoyi.common.enums.TaskEventType; |
| | | import com.ruoyi.common.exception.GlobalException; |
| | | import com.ruoyi.common.exception.state.StateErrorCode; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.uuid.IdUtils; |
| | | import com.ruoyi.system.bo.*; |
| | | import com.ruoyi.system.mapper.StateProcessTemplateMapper; |
| | | import com.ruoyi.system.mapper.TContractMapper; |
| | | import com.ruoyi.system.model.*; |
| | | import com.ruoyi.system.service.*; |
| | | import com.ruoyi.system.vo.ProcessDetailVO; |
| | | import com.ruoyi.system.vo.ProcessTaskListVO; |
| | | import lombok.AllArgsConstructor; |
| | | import org.apache.commons.io.IOUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | import java.util.function.Function; |
| | | import java.util.function.Supplier; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | | @AllArgsConstructor |
| | | public class StateProcessTemplateServiceImpl extends ServiceImpl<StateProcessTemplateMapper, StateProcessTemplate> implements StateProcessTemplateService { |
| | | |
| | | private final FlowLongEngine flowLongEngine; |
| | | private final StateProcessInstanceActionService stateProcessInstanceActionService; |
| | | private final StateProcessExtInstanceService stateProcessExtInstanceService; |
| | | private final FlwHisInstanceMapper flwHisInstanceMapper; |
| | | private final FlwTaskActorMapper flwTaskActorMapper; |
| | | private final FlwTaskMapper flwTaskMapper; |
| | | private final StateTaskCenterService stateTaskCenterService; |
| | | private final StateProcessModuleService stateProcessModuleService; |
| | | private final FlwHisTaskMapper flwHisTaskMapper; |
| | | private final FlwHisTaskActorMapper flwHisTaskActorMapper; |
| | | private final ISysUserService sysUserService; |
| | | @Autowired |
| | | private FlowLongEngine flowLongEngine; |
| | | @Autowired |
| | | private StateProcessInstanceActionService stateProcessInstanceActionService; |
| | | @Autowired |
| | | private StateProcessExtInstanceService stateProcessExtInstanceService; |
| | | @Autowired |
| | | private FlwHisInstanceMapper flwHisInstanceMapper; |
| | | @Autowired |
| | | private FlwTaskActorMapper flwTaskActorMapper; |
| | | @Autowired |
| | | private FlwTaskMapper flwTaskMapper; |
| | | @Autowired |
| | | private TaskService taskService; |
| | | @Autowired |
| | | private StateTaskCenterService stateTaskCenterService; |
| | | @Autowired |
| | | private StateProcessModuleService stateProcessModuleService; |
| | | @Autowired |
| | | private FlwHisTaskMapper flwHisTaskMapper; |
| | | @Autowired |
| | | private FlwHisTaskActorMapper flwHisTaskActorMapper; |
| | | @Autowired |
| | | private ISysUserService sysUserService; |
| | | @Autowired |
| | | private TContractMapper contractMapper; |
| | | |
| | | /** |
| | | * 流程模版分页 |
| | |
| | | |
| | | // 更新模板, version+1 |
| | | StateProcessTemplate processTemplate = new StateProcessTemplate(); |
| | | processTemplate.setId(IdUtils.simpleUUID()); |
| | | processTemplate.setId(processUpdateBO.getId()); |
| | | processTemplate.setWorkFlowId(deployId); |
| | | processTemplate.setWorkflowVersion(flwProcess.getProcessVersion()); |
| | | processTemplate.setTemplateName(processUpdateBO.getTemplateName()); |
| | |
| | | processTemplate.setUpdateBy(SecurityUtils.getLoginUser().getUsername()); |
| | | processTemplate.setUpdateTime(LocalDateTime.now()); |
| | | processTemplate.setTemplateVersion(temp.getTemplateVersion() + 1); |
| | | this.save(processTemplate); |
| | | return this.updateById(processTemplate); |
| | | |
| | | //查询版本是否绑定流程,更新 |
| | | LambdaQueryWrapper<StateProcessModule> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(StateProcessModule::getTemplateId, processUpdateBO.getId()); |
| | | List<StateProcessModule> stateProcessModules = stateProcessModuleService.list(queryWrapper); |
| | | if (Objects.isNull(stateProcessModules) || stateProcessModules.isEmpty()) { |
| | | return true; |
| | | } |
| | | for (StateProcessModule stateProcessModule : stateProcessModules) { |
| | | stateProcessModule.setTemplateId(processTemplate.getId()); |
| | | stateProcessModule.setTemplateName(processTemplate.getTemplateName()); |
| | | } |
| | | return stateProcessModuleService.updateBatchById(stateProcessModules); |
| | | // LambdaQueryWrapper<StateProcessModule> queryWrapper = new LambdaQueryWrapper<>(); |
| | | // queryWrapper.eq(StateProcessModule::getTemplateId, processUpdateBO.getId()); |
| | | // List<StateProcessModule> stateProcessModules = stateProcessModuleService.list(queryWrapper); |
| | | // if (Objects.isNull(stateProcessModules) || stateProcessModules.isEmpty()) { |
| | | // return true; |
| | | // } |
| | | // for (StateProcessModule stateProcessModule : stateProcessModules) { |
| | | // stateProcessModule.setTemplateId(processTemplate.getId()); |
| | | // stateProcessModule.setTemplateName(processTemplate.getTemplateName()); |
| | | // } |
| | | // return stateProcessModuleService.updateBatchById(stateProcessModules); |
| | | } |
| | | |
| | | /** |
| | |
| | | //监听器参数补全 |
| | | processStartBO.getVariable().put("category", processStartBO.getCategory()); |
| | | // 开启流程 |
| | | flowLongEngine.startInstanceById(flwProcess.getId(), creator, processStartBO.getVariable()).ifPresent(instance -> { |
| | | Optional<FlwInstance> flwInstanceOptional = flowLongEngine.startInstanceById(flwProcess.getId(), creator, processStartBO.getVariable()); |
| | | if(flwInstanceOptional.isPresent()){ |
| | | FlwInstance instance = flwInstanceOptional.get(); |
| | | //存储任务中心信息 |
| | | StateTaskCenter stateTaskCenter = new StateTaskCenter(); |
| | | stateTaskCenter.setId(IdUtils.simpleUUID()); |
| | |
| | | stateTaskCenter.setRemark(processStartBO.getRemark()); |
| | | stateTaskCenter.setCreateBy(loginUser.getUser().getNickName()); |
| | | stateTaskCenter.setVariable(JSONUtil.toJsonStr(processStartBO.getVariable())); |
| | | stateTaskCenter.setProjectId(JSONObject.parseObject(JSONUtil.toJsonStr(processStartBO.getVariable())).getString("projectId")); |
| | | stateTaskCenterService.save(stateTaskCenter); |
| | | |
| | | // action记录 |
| | |
| | | //保存version |
| | | stateProcessExtInstance.setProcessVersion(flwProcess.getProcessVersion()); |
| | | stateProcessExtInstanceService.save(stateProcessExtInstance); |
| | | }); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 启动流程 |
| | | * @param processStartBO |
| | | * @return |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Boolean startApplet(ProcessStartBO processStartBO) { |
| | | String userId = "1"; |
| | | String nickName = "admin"; |
| | | FlowCreator creator = FlowCreator.of(userId, nickName); |
| | | //查询流程绑定 |
| | | StateProcessModule stateProcessModule = stateProcessModuleService.getOne(Wrappers.<StateProcessModule>lambdaQuery() |
| | | .eq(StateProcessModule::getCategory, processStartBO.getCategory())); |
| | | if (ObjectUtil.isNull(stateProcessModule) || ObjectUtil.isEmpty(stateProcessModule.getTemplateId())) { |
| | | throw new GlobalException("请先配置流程引擎模版!"); |
| | | } |
| | | //查询模版,准备启动 |
| | | StateProcessTemplate template = this.getById(stateProcessModule.getTemplateId()); |
| | | StateProcessTemplate lastTemplate = this.getOne(Wrappers.<StateProcessTemplate>lambdaQuery() |
| | | .eq(StateProcessTemplate::getTemplateKey, template.getTemplateKey()) |
| | | .apply("(template_key, template_version) in(" + |
| | | "SELECT template_key, MAX(template_version) " + |
| | | "FROM state_process_template " + |
| | | "GROUP BY template_key)") |
| | | ); |
| | | |
| | | if (ObjectUtil.isNull(lastTemplate)) { |
| | | throw new GlobalException(StateErrorCode.PROCESS_TEMPLATE_NOT_EXISTS.getValue()); |
| | | } |
| | | FlwProcess flwProcess = flowLongEngine.processService().getProcessById(lastTemplate.getWorkFlowId()); |
| | | if (ObjectUtil.isNull(flwProcess)) { |
| | | throw new GlobalException(StateErrorCode.PROCESS_NOT_DEPLOY.getValue()); |
| | | } |
| | | if (!Objects.equals(lastTemplate.getWorkflowVersion(), flwProcess.getProcessVersion())) { |
| | | throw new GlobalException(StateErrorCode.PROCESS_VERSION_ERROR.getValue()); |
| | | } |
| | | //监听器参数补全 |
| | | processStartBO.getVariable().put("category", processStartBO.getCategory()); |
| | | // 开启流程 |
| | | Optional<FlwInstance> flwInstanceOptional = flowLongEngine.startInstanceById(flwProcess.getId(), creator, processStartBO.getVariable()); |
| | | if(flwInstanceOptional.isPresent()){ |
| | | FlwInstance instance = flwInstanceOptional.get(); |
| | | //存储任务中心信息 |
| | | StateTaskCenter stateTaskCenter = new StateTaskCenter(); |
| | | stateTaskCenter.setId(IdUtils.simpleUUID()); |
| | | stateTaskCenter.setName(processStartBO.getName()); |
| | | stateTaskCenter.setModuleName(processStartBO.getModuleName()); |
| | | stateTaskCenter.setCategory(processStartBO.getCategory()); |
| | | stateTaskCenter.setFlowId(instance.getId().toString()); |
| | | stateTaskCenter.setRemark(processStartBO.getRemark()); |
| | | stateTaskCenter.setCreateBy(nickName); |
| | | stateTaskCenter.setVariable(JSONUtil.toJsonStr(processStartBO.getVariable())); |
| | | stateTaskCenter.setProjectId(JSONObject.parseObject(JSONUtil.toJsonStr(processStartBO.getVariable())).getString("projectId")); |
| | | stateTaskCenterService.save(stateTaskCenter); |
| | | |
| | | // action记录 |
| | | StateProcessInstanceAction stateProcessInstanceAction = new StateProcessInstanceAction(); |
| | | stateProcessInstanceAction.setId(IdUtils.simpleUUID()); |
| | | stateProcessInstanceAction.setInstanceId(instance.getId().toString()); |
| | | stateProcessInstanceAction.setActionType(StateProcessActionEnum.START.getValue()); |
| | | stateProcessInstanceAction.setAuditorId(creator.getCreateId()); |
| | | stateProcessInstanceActionService.save(stateProcessInstanceAction); |
| | | |
| | | // 添加拓展信息 |
| | | StateProcessExtInstance stateProcessExtInstance = new StateProcessExtInstance(); |
| | | stateProcessExtInstance.setId(instance.getId().toString()); |
| | | stateProcessExtInstance.setTemplateId(lastTemplate.getId()); |
| | | stateProcessExtInstance.setProcessId(flwProcess.getId().toString()); |
| | | |
| | | //保存version |
| | | stateProcessExtInstance.setProcessVersion(flwProcess.getProcessVersion()); |
| | | stateProcessExtInstanceService.save(stateProcessExtInstance); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | |
| | | |
| | | //转换类 |
| | | List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class); |
| | | |
| | | // 查询合同信息 |
| | | for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { |
| | | // 查询合同信息 |
| | | TContract contract = contractMapper.selectById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId")); |
| | | processTaskListVO.setContract(contract); |
| | | } |
| | | |
| | | pageInfo.setRecords(processTaskListVOS); |
| | | |
| | | List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); |
| | | Map<Long, SysUser> sysUserMap; |
| | | if (!CollectionUtils.isEmpty(updateUserId)) { |
| | | //根据用户id查询更新人信息 |
| | | List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId); |
| | | |
| | | if (!CollectionUtils.isEmpty(sysUsers)) { |
| | | sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); |
| | | } else { |
| | | sysUserMap = new HashMap<>(); |
| | | } |
| | | } else { |
| | | sysUserMap = new HashMap<>(); |
| | | } |
| | | |
| | | |
| | | Map<Long, List<FlwTask>> flwHisTaskMap = flwTasks.stream().collect(Collectors.groupingBy(FlwTask::getInstanceId)); |
| | | |
| | | for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { |
| | | List<FlwTask> flwTask = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId())); |
| | | if (!CollectionUtils.isEmpty(flwTask) && ObjectUtil.isNotEmpty(flwTask.get(0))) { |
| | | //待审核 |
| | | processTaskListVO.setStatus("0"); |
| | | processTaskListVO.setNodeName(flwTask.get(0).getTaskName()); |
| | | processTaskListVO.setTaskId(flwTask.get(0).getId().toString()); |
| | | processTaskListVO.setVariable(flwTask.get(0).getVariable()); |
| | | } |
| | | SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy()); |
| | | if (Objects.nonNull(sysUser)) { |
| | | processTaskListVO.setCreateBy(sysUser.getNickName()); |
| | | } |
| | | } |
| | | return pageInfo; |
| | | } |
| | | /** |
| | | * 待办 |
| | | * @param processTaskListBO |
| | | * @return |
| | | */ |
| | | @Override |
| | | public PageInfo<ProcessTaskListVO> waitTaskPageApplet(ProcessTaskListBO processTaskListBO) { |
| | | |
| | | String startTime = null; |
| | | String endTime = null; |
| | | if(Objects.nonNull(processTaskListBO.getTimeType())){ |
| | | switch (processTaskListBO.getTimeType()){ |
| | | case 1: |
| | | startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 00:00:00"; |
| | | endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59"; |
| | | break; |
| | | case 2: |
| | | startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -7), "yyyy-MM-dd") + " 00:00:00"; |
| | | endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59"; |
| | | break; |
| | | case 3: |
| | | startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -30), "yyyy-MM-dd") + " 00:00:00"; |
| | | endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59"; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | //获取当前登录用户信息 |
| | | Long userId = SecurityUtils.getLoginUser().getUserId(); |
| | | |
| | | //或签时查询其他审批人是否通过(不能省略),比如 同一任务需要A,B审核,A通过了,B不用在审核了,在历史表查询A的审核记录 |
| | | LambdaQueryWrapper<FlwHisInstance> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime); |
| | | //待审核 |
| | | lambdaQueryWrapper.eq(FlwHisInstance::getInstanceState, 0); |
| | | |
| | | List<Long> flwHisInstances = flwHisInstanceMapper.selectList(lambdaQueryWrapper).stream() |
| | | .map(FlwHisInstance::getId).collect(Collectors.toList()); |
| | | if (ObjectUtil.isEmpty(flwHisInstances)) { |
| | | return new PageInfo<>(); |
| | | } |
| | | |
| | | //查询任务参与者 |
| | | LambdaQueryWrapper<FlwTaskActor> query = new LambdaQueryWrapper<>(); |
| | | query.and(qy -> qy.eq(FlwTaskActor::getActorId, userId) |
| | | //0指定用户 |
| | | .eq(FlwTaskActor::getActorType, 0) |
| | | .or().in(FlwTaskActor::getActorId, userId) |
| | | //1指定角色 |
| | | .eq(FlwTaskActor::getActorType, 1)); |
| | | if (ObjectUtil.isNotNull(processTaskListBO) && ObjectUtil.isNotNull(flwHisInstances)) { |
| | | // 添加条件 |
| | | query = query.in(FlwTaskActor::getInstanceId, flwHisInstances); |
| | | } |
| | | List<FlwTaskActor> flwTaskActorPage = flwTaskActorMapper.selectList(query); |
| | | if (ObjectUtil.isEmpty(flwTaskActorPage)) { |
| | | return new PageInfo<>(); |
| | | } |
| | | //查询任务信息 |
| | | List<FlwTask> flwTasks = flwTaskMapper.selectList(Wrappers.<FlwTask>lambdaQuery() |
| | | .orderByDesc(FlwTask::getCreateTime) |
| | | .in(FlwTask::getId, flwTaskActorPage.stream() |
| | | .map(FlwTaskActor::getTaskId).collect(Collectors.toList()))); |
| | | |
| | | if (ObjectUtil.isNull(flwTasks)) { |
| | | return new PageInfo<>(); |
| | | } |
| | | List<String> instanceIds = flwTasks.stream().map(FlwTask::getInstanceId) |
| | | .map(String::valueOf).collect(Collectors.toList()); |
| | | //分页查询任务中心任务 |
| | | LambdaQueryWrapper<StateTaskCenter> stateTaskQuery = new LambdaQueryWrapper<>(); |
| | | if (ObjectUtil.isNotEmpty(processTaskListBO.getName())) { |
| | | stateTaskQuery.like(StateTaskCenter::getName, processTaskListBO.getName()); |
| | | } |
| | | if (ObjectUtil.isNotEmpty(processTaskListBO.getModuleName())) { |
| | | stateTaskQuery.like(StateTaskCenter::getModuleName, processTaskListBO.getModuleName()); |
| | | } |
| | | if (ObjectUtil.isNotEmpty(processTaskListBO.getCreateBy())) { |
| | | stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy()); |
| | | } |
| | | if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) { |
| | | stateTaskQuery.between(StateTaskCenter::getCreateTime, startTime, endTime); |
| | | } |
| | | if(Objects.isNull(processTaskListBO.getSortBy())){ |
| | | processTaskListBO.setSortBy(2); |
| | | } |
| | | if (processTaskListBO.getSortBy() == 1) { |
| | | stateTaskQuery.orderByAsc(BaseModel::getCreateTime); |
| | | } |
| | | if (processTaskListBO.getSortBy() == 2) { |
| | | stateTaskQuery.orderByDesc(BaseModel::getCreateTime); |
| | | } |
| | | stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds); |
| | | PageInfo pageInfo = new PageInfo(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); |
| | | PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); |
| | | |
| | | //转换类 |
| | | List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class); |
| | | |
| | | // 查询合同信息 |
| | | for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { |
| | | // 查询合同信息 |
| | | TContract contract = contractMapper.selectById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId")); |
| | | processTaskListVO.setContract(contract); |
| | | } |
| | | |
| | | pageInfo.setRecords(processTaskListVOS); |
| | | |
| | | List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); |
| | |
| | | new PageInfo<>(); |
| | | } |
| | | |
| | | List<String> instanceIds = flwHisTaskList.stream().map(FlwTask::getInstanceId) |
| | | .map(String::valueOf).collect(Collectors.toList()); |
| | | //分页查询任务中心任务 |
| | | // LambdaQueryWrapper<StateTaskCenter> stateTaskQuery = new LambdaQueryWrapper<>(); |
| | | // if (ObjectUtil.isNotEmpty(processTaskListBO.getName())) { |
| | | // stateTaskQuery.like(StateTaskCenter::getName, processTaskListBO.getName()); |
| | | // } |
| | | // if (ObjectUtil.isNotEmpty(processTaskListBO.getModuleName())) { |
| | | // stateTaskQuery.like(StateTaskCenter::getModuleName, processTaskListBO.getModuleName()); |
| | | // } |
| | | // if (ObjectUtil.isNotEmpty(processTaskListBO.getCreateBy())) { |
| | | // stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy()); |
| | | // } |
| | | // if (ObjectUtil.isEmpty(instanceId)) { |
| | | // return new PageInfo<>(); |
| | | // } |
| | | // stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId); |
| | | // stateTaskQuery.orderByDesc(BaseModel::getCreateTime); |
| | | processTaskListBO.setInstanceIds(instanceIds); |
| | | PageInfo<ProcessTaskListVO> processTaskListVOS = stateTaskCenterService.pageList(processTaskListBO); |
| | | |
| | | if (ObjectUtil.isEmpty(processTaskListVOS)) { |
| | | return new PageInfo<>(); |
| | | } |
| | | Map<Long, List<FlwHisTask>> flwHisTaskMap = flwHisTaskList.stream().collect(Collectors.groupingBy(FlwHisTask::getInstanceId)); |
| | | //查询原因 |
| | | List<String> taskIds = flwHisTaskList.stream().map(FlowEntity::getId).map(String::valueOf).collect(Collectors.toList()); |
| | | List<StateProcessInstanceAction> actions = stateProcessInstanceActionService.list( |
| | | Wrappers.<StateProcessInstanceAction>lambdaQuery().in(StateProcessInstanceAction::getNodeId, taskIds)); |
| | | Map<String, StateProcessInstanceAction> actionMap = actions.stream().collect(Collectors.toMap(StateProcessInstanceAction::getNodeId, Function.identity())); |
| | | |
| | | List<String> updateUserId = processTaskListVOS.getRecords().stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); |
| | | Map<Long, SysUser> sysUserMap; |
| | | if (!CollectionUtils.isEmpty(updateUserId)) { |
| | | List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId); |
| | | |
| | | if (!CollectionUtils.isEmpty(sysUsers)) { |
| | | sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); |
| | | } else { |
| | | sysUserMap = new HashMap<>(); |
| | | } |
| | | } else { |
| | | sysUserMap = new HashMap<>(); |
| | | } |
| | | |
| | | for (ProcessTaskListVO processTaskListVO : processTaskListVOS.getRecords()) { |
| | | List<FlwHisTask> flwHisTasks = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId())); |
| | | if (ObjectUtil.isNotEmpty(flwHisTaskMap)) { |
| | | //当某个用户在同一个模块审批流的多个节点都存在时,多次审核后,已审核列表页报错 |
| | | for (FlwHisTask flwHisTask : flwHisTasks) { |
| | | if (flwHisTask.getInstanceId().toString().equals(processTaskListVO.getFlowId())) { |
| | | //10等于发起人与审批人一致自动审核完成 |
| | | processTaskListVO.setStatus(flwHisTask.getTaskState() == 10 ? "2" : flwHisTask.getTaskState().toString()); |
| | | processTaskListVO.setNodeName(flwHisTask.getTaskName()); |
| | | processTaskListVO.setTaskId(flwHisTask.getId().toString()); |
| | | processTaskListVO.setVariable(flwHisTask.getVariable()); |
| | | } |
| | | } |
| | | } |
| | | StateProcessInstanceAction action = actionMap.get(processTaskListVO.getTaskId()); |
| | | if (ObjectUtil.isNotEmpty(action)) { |
| | | processTaskListVO.setReason(action.getRemark()); |
| | | } |
| | | SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy()); |
| | | if (Objects.nonNull(sysUser)) { |
| | | processTaskListVO.setCreateBy(sysUser.getNickName()); |
| | | } |
| | | } |
| | | return processTaskListVOS; |
| | | } |
| | | @Override |
| | | public PageInfo<ProcessTaskListVO> dealTaskPageApplet(ProcessTaskListBO processTaskListBO) { |
| | | String startTime = null; |
| | | String endTime = null; |
| | | if(Objects.nonNull(processTaskListBO.getTimeType())){ |
| | | switch (processTaskListBO.getTimeType()){ |
| | | case 1: |
| | | startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 00:00:00"; |
| | | endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59"; |
| | | break; |
| | | case 2: |
| | | startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -7), "yyyy-MM-dd") + " 00:00:00"; |
| | | endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59"; |
| | | break; |
| | | case 3: |
| | | startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -30), "yyyy-MM-dd") + " 00:00:00"; |
| | | endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59"; |
| | | break; |
| | | } |
| | | } |
| | | //获取当前登录用户信息 |
| | | Long userId = SecurityUtils.getLoginUser().getUserId(); |
| | | LambdaQueryWrapper<FlwHisTaskActor> query = Wrappers.<FlwHisTaskActor>lambdaQuery() |
| | | .and(qy -> qy.eq(FlwTaskActor::getActorId, userId) |
| | | //0指定用户 |
| | | .eq(FlwTaskActor::getActorType, 0) |
| | | //指定角色 |
| | | .or().in(FlwTaskActor::getActorId, userId) |
| | | .eq(FlwTaskActor::getActorType, 1)); |
| | | List<FlwHisTaskActor> flwHisTaskActors = flwHisTaskActorMapper.selectList(query); |
| | | |
| | | List<Long> hisTaskIds = flwHisTaskActors.stream().map(FlwTaskActor::getTaskId).collect(Collectors.toList()); |
| | | |
| | | if (hisTaskIds.isEmpty()) { |
| | | return new PageInfo<>(); |
| | | } |
| | | |
| | | List<FlwHisTask> flwHisTaskList = flwHisTaskMapper.selectList( |
| | | Wrappers.<FlwHisTask>lambdaQuery() |
| | | .notIn(FlwHisTask::getTaskType, TaskType.cc.getValue(), TaskType.major.getValue()) |
| | | .orderByDesc(FlwHisTask::getCreateTime) |
| | | .in(FlwHisTask::getId, hisTaskIds)); |
| | | if (ObjectUtil.isEmpty(flwHisTaskList)) { |
| | | new PageInfo<>(); |
| | | } |
| | | |
| | | List<String> instanceId = flwHisTaskList.stream().map(FlwTask::getInstanceId) |
| | | .map(String::valueOf).collect(Collectors.toList()); |
| | | //分页查询任务中心任务 |
| | |
| | | if (ObjectUtil.isEmpty(instanceId)) { |
| | | return new PageInfo<>(); |
| | | } |
| | | if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) { |
| | | stateTaskQuery.between(StateTaskCenter::getCreateTime, startTime, endTime); |
| | | } |
| | | if(Objects.isNull(processTaskListBO.getSortBy())){ |
| | | processTaskListBO.setSortBy(2); |
| | | } |
| | | if (processTaskListBO.getSortBy() == 1) { |
| | | stateTaskQuery.orderByAsc(BaseModel::getCreateTime); |
| | | } |
| | | if (processTaskListBO.getSortBy() == 2) { |
| | | stateTaskQuery.orderByDesc(BaseModel::getCreateTime); |
| | | } |
| | | stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId); |
| | | stateTaskQuery.orderByDesc(BaseModel::getCreateTime); |
| | | PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); |
| | | PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); |
| | | //转换类 |
| | | List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class); |
| | | |
| | | // 查询合同信息 |
| | | for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { |
| | | // 查询合同信息 |
| | | TContract contract = contractMapper.selectById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId")); |
| | | processTaskListVO.setContract(contract); |
| | | } |
| | | |
| | | pageInfo.setRecords(processTaskListVOS); |
| | | |
| | | if (ObjectUtil.isEmpty(processTaskListVOS)) { |
| | |
| | | if (ObjectUtil.isNull(flwTask)) { |
| | | throw new GlobalException("任务已处理或者不存在"); |
| | | } |
| | | flowLongEngine.executeTask(taskId, currentFlowCreator()); |
| | | // 动作执行记录 |
| | | StateProcessInstanceAction stateProcessInstanceAction = new StateProcessInstanceAction(); |
| | | if(Objects.nonNull(processAgreeBO.getUserId())){ |
| | | flowLongEngine.executeTask(taskId, currentFlowCreator(processAgreeBO.getUserId())); |
| | | stateProcessInstanceAction.setAuditorId(String.valueOf(processAgreeBO.getUserId())); |
| | | }else { |
| | | stateProcessInstanceAction.setAuditorId(String.valueOf(SecurityUtils.getUserId())); |
| | | flowLongEngine.executeTask(taskId, currentFlowCreator()); |
| | | } |
| | | // 动作执行记录 |
| | | stateProcessInstanceAction.setId(IdUtils.simpleUUID()); |
| | | stateProcessInstanceAction.setInstanceId(flwTask.getInstanceId().toString()); |
| | | stateProcessInstanceAction.setAuditorId(String.valueOf(SecurityUtils.getUserId())); |
| | | stateProcessInstanceAction.setActionType(StateProcessActionEnum.APPROVED.getValue()); |
| | | stateProcessInstanceAction.setNodeId(processAgreeBO.getTaskId()); |
| | | stateProcessInstanceAction.setRemark(processAgreeBO.getRemark()); |
| | | stateProcessInstanceAction.setPictures(processAgreeBO.getPictures()); |
| | | stateProcessInstanceActionService.save(stateProcessInstanceAction); |
| | | } |
| | | |
| | |
| | | record.setActionType(StateProcessActionEnum.REJECTED.getValue()); |
| | | record.setNodeId(processRefuseBO.getTaskId()); |
| | | record.setRemark(processRefuseBO.getRemark()); |
| | | record.setPictures(processRefuseBO.getPictures()); |
| | | stateProcessInstanceActionService.save(record); |
| | | } |
| | | @Override |
| | | public void revoke(Long instanceId) { |
| | | FlowCreator flowCreator = FlowCreator.of(String.valueOf(SecurityUtils.getUserId()), SecurityUtils.getLoginUser().getUser().getNickName()); |
| | | flowLongEngine.runtimeService().revoke(instanceId, flowCreator); |
| | | } |
| | | |
| | | @Override |
| | | public PageInfo<ProcessTaskListVO> dealAndWaitTaskPage(ProcessTaskListBO processTaskListBO) { |
| | | //获取当前登录用户信息 |
| | | Long userId = SecurityUtils.getLoginUser().getUserId(); |
| | | |
| | | //或签时查询其他审批人是否通过(不能省略),比如 同一任务需要A,B审核,A通过了,B不用在审核了,在历史表查询A的审核记录 |
| | | LambdaQueryWrapper<FlwHisInstance> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime); |
| | | //待审核,通过,拒绝 |
| | | lambdaQueryWrapper.in(FlwHisInstance::getInstanceState, 0,1,2); |
| | | |
| | | List<Long> flwHisInstances = flwHisInstanceMapper.selectList(lambdaQueryWrapper).stream() |
| | | .map(FlwHisInstance::getId).collect(Collectors.toList()); |
| | | if (ObjectUtil.isEmpty(flwHisInstances)) { |
| | | return new PageInfo<>(); |
| | | } |
| | | |
| | | //查询任务参与者 |
| | | LambdaQueryWrapper<FlwTaskActor> query = new LambdaQueryWrapper<>(); |
| | | query.and(qy -> qy.eq(FlwTaskActor::getActorId, userId) |
| | | //0指定用户 |
| | | .eq(FlwTaskActor::getActorType, 0) |
| | | .or().in(FlwTaskActor::getActorId, userId) |
| | | //1指定角色 |
| | | .eq(FlwTaskActor::getActorType, 1)); |
| | | if (ObjectUtil.isNotNull(processTaskListBO) && ObjectUtil.isNotNull(flwHisInstances)) { |
| | | // 添加条件 |
| | | query = query.in(FlwTaskActor::getInstanceId, flwHisInstances); |
| | | } |
| | | List<FlwTaskActor> flwTaskActorPage = flwTaskActorMapper.selectList(query); |
| | | if (ObjectUtil.isEmpty(flwTaskActorPage)) { |
| | | return new PageInfo<>(); |
| | | } |
| | | //查询任务信息 |
| | | List<FlwTask> flwTasks = flwTaskMapper.selectList(Wrappers.<FlwTask>lambdaQuery() |
| | | .orderByDesc(FlwTask::getCreateTime) |
| | | .in(FlwTask::getId, flwTaskActorPage.stream() |
| | | .map(FlwTaskActor::getTaskId).collect(Collectors.toList()))); |
| | | |
| | | if (ObjectUtil.isNull(flwTasks)) { |
| | | return new PageInfo<>(); |
| | | } |
| | | List<String> instanceIds = flwTasks.stream().map(FlwTask::getInstanceId) |
| | | .map(String::valueOf).collect(Collectors.toList()); |
| | | //分页查询任务中心任务 |
| | | // LambdaQueryWrapper<StateTaskCenter> stateTaskQuery = new LambdaQueryWrapper<>(); |
| | | // if (ObjectUtil.isNotEmpty(processTaskListBO.getName())) { |
| | | // stateTaskQuery.like(StateTaskCenter::getName, processTaskListBO.getName()); |
| | | // } |
| | | // if (ObjectUtil.isNotEmpty(processTaskListBO.getModuleName())) { |
| | | // stateTaskQuery.like(StateTaskCenter::getModuleName, processTaskListBO.getModuleName()); |
| | | // } |
| | | // if (ObjectUtil.isNotEmpty(processTaskListBO.getCreateBy())) { |
| | | // stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy()); |
| | | // } |
| | | // stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds); |
| | | // stateTaskQuery.orderByDesc(BaseModel::getCreateTime); |
| | | processTaskListBO.setInstanceIds(instanceIds); |
| | | // PageInfo pageInfo = new PageInfo(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); |
| | | // PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); |
| | | // //转换类 |
| | | // List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class); |
| | | // // 查询合同信息 |
| | | // for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { |
| | | // // 查询合同信息 |
| | | // TContract contract = contractService.getById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId")); |
| | | // processTaskListVO.setContract(contract); |
| | | // } |
| | | // pageInfo.setRecords(processTaskListVOS); |
| | | |
| | | PageInfo<ProcessTaskListVO> processTaskListVOS = stateTaskCenterService.pageList(processTaskListBO); |
| | | |
| | | List<String> updateUserId = processTaskListVOS.getRecords().stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); |
| | | Map<Long, SysUser> sysUserMap; |
| | | if (!CollectionUtils.isEmpty(updateUserId)) { |
| | | //根据用户id查询更新人信息 |
| | | List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId); |
| | | |
| | | if (!CollectionUtils.isEmpty(sysUsers)) { |
| | | sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); |
| | | } else { |
| | | sysUserMap = new HashMap<>(); |
| | | } |
| | | } else { |
| | | sysUserMap = new HashMap<>(); |
| | | } |
| | | |
| | | |
| | | Map<Long, List<FlwTask>> flwHisTaskMap = flwTasks.stream().collect(Collectors.groupingBy(FlwTask::getInstanceId)); |
| | | |
| | | for (ProcessTaskListVO processTaskListVO : processTaskListVOS.getRecords()) { |
| | | List<FlwTask> flwTask = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId())); |
| | | if (!CollectionUtils.isEmpty(flwTask) && ObjectUtil.isNotEmpty(flwTask.get(0))) { |
| | | //待审核 |
| | | processTaskListVO.setStatus("0"); |
| | | processTaskListVO.setNodeName(flwTask.get(0).getTaskName()); |
| | | processTaskListVO.setTaskId(flwTask.get(0).getId().toString()); |
| | | processTaskListVO.setVariable(flwTask.get(0).getVariable()); |
| | | } |
| | | SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy()); |
| | | if (Objects.nonNull(sysUser)) { |
| | | processTaskListVO.setCreateBy(sysUser.getNickName()); |
| | | } |
| | | } |
| | | return processTaskListVOS; |
| | | } |
| | | |
| | | // @Override |
| | | // public PageInfo<ProcessTaskListVO> dealAndWaitTaskPage(ProcessTaskListBO processTaskListBO) { |
| | | // //获取当前登录用户信息 |
| | | // Long userId = SecurityUtils.getLoginUser().getUserId(); |
| | | // |
| | | // //或签时查询其他审批人是否通过(不能省略),比如 同一任务需要A,B审核,A通过了,B不用在审核了,在历史表查询A的审核记录 |
| | | // LambdaQueryWrapper<FlwHisInstance> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | // lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime); |
| | | // //待审核,通过,拒绝 |
| | | // lambdaQueryWrapper.in(FlwHisInstance::getInstanceState, 0,1,2); |
| | | // |
| | | // List<Long> flwHisInstances = flwHisInstanceMapper.selectList(lambdaQueryWrapper).stream() |
| | | // .map(FlwHisInstance::getId).collect(Collectors.toList()); |
| | | // |
| | | // //查询任务参与者 |
| | | // LambdaQueryWrapper<FlwTaskActor> query = new LambdaQueryWrapper<>(); |
| | | // query.and(qy -> qy.eq(FlwTaskActor::getActorId, userId) |
| | | // //0指定用户 |
| | | // .eq(FlwTaskActor::getActorType, 0) |
| | | // .or().in(FlwTaskActor::getActorId, userId) |
| | | // //1指定角色 |
| | | // .eq(FlwTaskActor::getActorType, 1)); |
| | | // if (ObjectUtil.isNotNull(processTaskListBO) && ObjectUtil.isNotNull(flwHisInstances)) { |
| | | // // 添加条件 |
| | | // query = query.in(FlwTaskActor::getInstanceId, flwHisInstances); |
| | | // } |
| | | // List<FlwTaskActor> flwTaskActorPage = flwTaskActorMapper.selectList(query); |
| | | // List<String> instanceIds = new ArrayList<>(); |
| | | // List<FlwTask> flwTasks = new ArrayList<>(); |
| | | // if (ObjectUtil.isNotEmpty(flwTaskActorPage)) { |
| | | // //查询任务信息 |
| | | // flwTasks = flwTaskMapper.selectList(Wrappers.<FlwTask>lambdaQuery() |
| | | // .orderByDesc(FlwTask::getCreateTime) |
| | | // .in(FlwTask::getId, flwTaskActorPage.stream() |
| | | // .map(FlwTaskActor::getTaskId).collect(Collectors.toList()))); |
| | | // if (ObjectUtil.isNotNull(flwTasks)) { |
| | | // instanceIds = flwTasks.stream().map(FlwTask::getInstanceId) |
| | | // .map(String::valueOf).collect(Collectors.toList()); |
| | | // } |
| | | // } |
| | | // |
| | | // LambdaQueryWrapper<FlwHisTaskActor> hisQuery= Wrappers.<FlwHisTaskActor>lambdaQuery() |
| | | // .and(qy -> qy.eq(FlwTaskActor::getActorId, userId) |
| | | // //0指定用户 |
| | | // .eq(FlwTaskActor::getActorType, 0) |
| | | // //指定角色 |
| | | // .or().in(FlwTaskActor::getActorId, userId) |
| | | // .eq(FlwTaskActor::getActorType, 1)); |
| | | // List<FlwHisTaskActor> flwHisTaskActors = flwHisTaskActorMapper.selectList(hisQuery); |
| | | // List<Long> hisTaskIds = flwHisTaskActors.stream().map(FlwTaskActor::getTaskId).collect(Collectors.toList()); |
| | | // |
| | | // if (!CollectionUtils.isEmpty(hisTaskIds)) { |
| | | // List<FlwHisTask> flwHisTaskList = flwHisTaskMapper.selectList( |
| | | // Wrappers.<FlwHisTask>lambdaQuery() |
| | | // .notIn(FlwHisTask::getTaskType, TaskType.cc.getValue(), TaskType.major.getValue()) |
| | | // .orderByDesc(FlwHisTask::getCreateTime) |
| | | // .in(FlwHisTask::getId, hisTaskIds)); |
| | | // if (ObjectUtil.isNotEmpty(flwHisTaskList)) { |
| | | // instanceIds.addAll(flwHisTaskList.stream().map(FlwHisTask::getInstanceId) |
| | | // .map(String::valueOf).collect(Collectors.toList())); |
| | | // } |
| | | // } |
| | | // |
| | | // |
| | | // //分页查询任务中心任务 |
| | | //// LambdaQueryWrapper<StateTaskCenter> stateTaskQuery = new LambdaQueryWrapper<>(); |
| | | //// if (ObjectUtil.isNotEmpty(processTaskListBO.getName())) { |
| | | //// stateTaskQuery.like(StateTaskCenter::getName, processTaskListBO.getName()); |
| | | //// } |
| | | //// if (ObjectUtil.isNotEmpty(processTaskListBO.getModuleName())) { |
| | | //// stateTaskQuery.like(StateTaskCenter::getModuleName, processTaskListBO.getModuleName()); |
| | | //// } |
| | | //// if (ObjectUtil.isNotEmpty(processTaskListBO.getCreateBy())) { |
| | | //// stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy()); |
| | | //// } |
| | | //// stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds); |
| | | //// stateTaskQuery.orderByDesc(BaseModel::getCreateTime); |
| | | // processTaskListBO.setInstanceIds(instanceIds); |
| | | //// PageInfo pageInfo = new PageInfo(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); |
| | | //// PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); |
| | | //// //转换类 |
| | | //// List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class); |
| | | //// // 查询合同信息 |
| | | //// for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { |
| | | //// // 查询合同信息 |
| | | //// TContract contract = contractService.getById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId")); |
| | | //// processTaskListVO.setContract(contract); |
| | | //// } |
| | | //// pageInfo.setRecords(processTaskListVOS); |
| | | // |
| | | // PageInfo<ProcessTaskListVO> processTaskListVOS = stateTaskCenterService.pageList(processTaskListBO); |
| | | // |
| | | // List<String> updateUserId = processTaskListVOS.getRecords().stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); |
| | | // Map<Long, SysUser> sysUserMap; |
| | | // if (!CollectionUtils.isEmpty(updateUserId)) { |
| | | // //根据用户id查询更新人信息 |
| | | // List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId); |
| | | // |
| | | // if (!CollectionUtils.isEmpty(sysUsers)) { |
| | | // sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); |
| | | // } else { |
| | | // sysUserMap = new HashMap<>(); |
| | | // } |
| | | // } else { |
| | | // sysUserMap = new HashMap<>(); |
| | | // } |
| | | // |
| | | // Map<Long, List<FlwTask>> flwHisTaskMap = new HashMap<>(); |
| | | // if(!CollectionUtils.isEmpty(flwTasks)){ |
| | | // flwHisTaskMap = flwTasks.stream().collect(Collectors.groupingBy(FlwTask::getInstanceId)); |
| | | // } |
| | | // |
| | | // for (ProcessTaskListVO processTaskListVO : processTaskListVOS.getRecords()) { |
| | | // if(!CollectionUtils.isEmpty(flwHisTaskMap)){ |
| | | // List<FlwTask> flwTask = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId())); |
| | | // if (!CollectionUtils.isEmpty(flwTask) && ObjectUtil.isNotEmpty(flwTask.get(0))) { |
| | | // //待审核 |
| | | // processTaskListVO.setStatus("0"); |
| | | // processTaskListVO.setNodeName(flwTask.get(0).getTaskName()); |
| | | // processTaskListVO.setTaskId(flwTask.get(0).getId().toString()); |
| | | // processTaskListVO.setVariable(flwTask.get(0).getVariable()); |
| | | // } |
| | | // } |
| | | // SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy()); |
| | | // if (Objects.nonNull(sysUser)) { |
| | | // processTaskListVO.setCreateBy(sysUser.getNickName()); |
| | | // } |
| | | // } |
| | | // return processTaskListVOS; |
| | | // } |
| | | |
| | | @Override |
| | | public ProcessDetailVO detail(String taskId) { |
| | | ProcessDetailVO processDetailVO = new ProcessDetailVO(); |
| | | FlwTask flwTask = flwTaskMapper.selectById(Long.valueOf(taskId)); |
| | | TContract contract; |
| | | Long instanceId; |
| | | if(Objects.nonNull(flwTask)){ |
| | | instanceId = flwTask.getInstanceId(); |
| | | // 查询合同信息 |
| | | contract = contractMapper.selectById(JSONObject.parseObject(flwTask.getVariable()).getString("projectId")); |
| | | }else { |
| | | FlwHisTask flwHisTask = flwHisTaskMapper.selectById(Long.valueOf(taskId)); |
| | | if(Objects.isNull(flwHisTask)){ |
| | | throw new GlobalException("流程不存在"); |
| | | } |
| | | instanceId = flwHisTask.getInstanceId(); |
| | | contract = contractMapper.selectById(Objects.requireNonNull(JSONObject.parseObject(flwHisTask.getVariable())).getString("projectId")); |
| | | } |
| | | BeanUtil.copyProperties(contract, processDetailVO); |
| | | |
| | | // 查询历史任务 |
| | | List<FlwHisTask> flwHisTasks = flwHisTaskMapper.selectList(Wrappers.<FlwHisTask>lambdaQuery().eq(FlwHisTask::getInstanceId, instanceId)); |
| | | processDetailVO.setInstanceId(String.valueOf(instanceId)); |
| | | processDetailVO.setFlwHisTasks(flwHisTasks); |
| | | |
| | | List<StateProcessInstanceAction> list = stateProcessInstanceActionService.list(Wrappers.<StateProcessInstanceAction>lambdaQuery().eq(StateProcessInstanceAction::getInstanceId, instanceId) |
| | | .orderByAsc(StateProcessInstanceAction::getCreateTime)); |
| | | for (StateProcessInstanceAction stateProcessInstanceAction : list) { |
| | | SysUser sysUser = sysUserService.selectUserById(Long.valueOf(stateProcessInstanceAction.getAuditorId())); |
| | | if(Objects.nonNull(sysUser)){ |
| | | stateProcessInstanceAction.setNickName(sysUser.getNickName()); |
| | | } |
| | | } |
| | | processDetailVO.setInstanceActions(list); |
| | | |
| | | return processDetailVO; |
| | | } |
| | | |
| | | @Override |
| | | public PageInfo<ProcessTaskListVO> initiateTaskPage(ProcessTaskListBO processTaskListBO) { |
| | | String startTime = null; |
| | | String endTime = null; |
| | | if(Objects.nonNull(processTaskListBO.getTimeType())){ |
| | | switch (processTaskListBO.getTimeType()){ |
| | | case 1: |
| | | startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 00:00:00"; |
| | | endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59"; |
| | | break; |
| | | case 2: |
| | | startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -7), "yyyy-MM-dd") + " 00:00:00"; |
| | | endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59"; |
| | | break; |
| | | case 3: |
| | | startTime = DateUtil.format(DateUtil.offsetDay(new Date(), -30), "yyyy-MM-dd") + " 00:00:00"; |
| | | endTime = DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd") + " 23:59:59"; |
| | | break; |
| | | } |
| | | } |
| | | //获取当前登录用户信息 |
| | | Long userId = SecurityUtils.getLoginUser().getUserId(); |
| | | |
| | | //分页查询任务中心任务 |
| | | LambdaQueryWrapper<FlwHisTask> stateTaskQuery = new LambdaQueryWrapper<>(); |
| | | if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) { |
| | | stateTaskQuery.between(FlwHisTask::getCreateTime, startTime, endTime); |
| | | } |
| | | if(Objects.isNull(processTaskListBO.getSortBy())){ |
| | | processTaskListBO.setSortBy(2); |
| | | } |
| | | if (processTaskListBO.getSortBy() == 1) { |
| | | stateTaskQuery.orderByAsc(FlwHisTask::getCreateTime); |
| | | } |
| | | if (processTaskListBO.getSortBy() == 2) { |
| | | stateTaskQuery.orderByDesc(FlwHisTask::getCreateTime); |
| | | } |
| | | stateTaskQuery.eq(FlwHisTask::getParentTaskId, 0L); |
| | | stateTaskQuery.like(FlwHisTask::getCreateId, userId); |
| | | PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); |
| | | PageInfo<FlwHisTask> taskCenters = flwHisTaskMapper.selectPage(pageInfo,stateTaskQuery); |
| | | //转换类 |
| | | List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class); |
| | | |
| | | // 查询合同信息 |
| | | for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { |
| | | // 查询合同信息 |
| | | TContract contract = contractMapper.selectById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId")); |
| | | processTaskListVO.setContract(contract); |
| | | } |
| | | |
| | | if (ObjectUtil.isEmpty(processTaskListVOS)) { |
| | | return pageInfo; |
| | | } |
| | | List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); |
| | | Map<Long, SysUser> sysUserMap; |
| | | if (!CollectionUtils.isEmpty(updateUserId)) { |
| | | List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId); |
| | | |
| | | if (!CollectionUtils.isEmpty(sysUsers)) { |
| | | sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); |
| | | } else { |
| | | sysUserMap = new HashMap<>(); |
| | | } |
| | | } else { |
| | | sysUserMap = new HashMap<>(); |
| | | } |
| | | for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { |
| | | processTaskListVO.setStatus(processTaskListVO.getTaskState() == 10 ? "2" : processTaskListVO.getTaskState().toString()); |
| | | processTaskListVO.setTaskId(processTaskListVO.getId()); |
| | | SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy()); |
| | | if (Objects.nonNull(sysUser)) { |
| | | processTaskListVO.setCreateBy(sysUser.getNickName()); |
| | | } |
| | | } |
| | | pageInfo.setRecords(processTaskListVOS); |
| | | return pageInfo; |
| | | } |
| | | |
| | | private FlowCreator currentFlowCreator() { |
| | |
| | | } |
| | | return FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName()); |
| | | } |
| | | private FlowCreator currentFlowCreator(Long userId) { |
| | | if (null == userId) { |
| | | throw new GlobalException("非法用户"); |
| | | } |
| | | SysUser sysUser = sysUserService.selectUserById(userId); |
| | | return FlowCreator.of(String.valueOf(sysUser.getUserId()), sysUser.getNickName()); |
| | | } |
| | | |
| | | } |