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.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONWriter; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.io.InputStream; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.util.*; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; @Service public class StateProcessTemplateServiceImpl extends ServiceImpl implements StateProcessTemplateService { @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; /** * 流程模版分页 * @param request * @return */ @Override public Page page(ProcessTemplatePageBO request) { //查询流程模板列表 Page templatePage = this.baseMapper.page(new Page<>(request.getCurrentPage(), request.getPageSize()), request); //更新人id列表 List updateUserNameList = templatePage.getRecords().stream().map(BaseModel::getUpdateBy).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(updateUserNameList)) { //根据用户id列表查询用户信息 List sysUsers = sysUserService.selectUserByUserNameList(updateUserNameList); Map sysUserMap; if (!CollectionUtils.isEmpty(sysUsers)) { sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserName, Function.identity())); } else { sysUserMap = new HashMap<>(); } //遍历列表,设置更新人名称 templatePage.getRecords().forEach(e -> { SysUser sysUser = sysUserMap.get(e.getUpdateBy()); if (Objects.nonNull(sysUser)) { e.setUpdateBy(sysUser.getNickName()); } }); } return templatePage; } /** * 修改并部署模版 * @param processUpdateBO * @return */ @Transactional(rollbackFor = Exception.class) @Override public Boolean update(ProcessUpdateBO processUpdateBO) { //查询流程模板 StateProcessTemplate temp = this.getById(processUpdateBO.getId()); //根据template_key查询最新版本的模板 StateProcessTemplate template = this.getOne(Wrappers.lambdaQuery() .eq(StateProcessTemplate::getTemplateKey, temp.getTemplateKey()) .apply("(template_key, template_version) in(" + "SELECT template_key, MAX(template_version) " + "FROM state_process_template " + "GROUP BY template_key)")); if (Objects.isNull(template)) { throw new GlobalException(StateErrorCode.PROCESS_TEMPLATE_NOT_EXISTS.getValue()); } // 部署流程 LoginUser loginUser = SecurityUtils.getLoginUser(); FlowCreator creator = FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName()); DeployBO deployBO = new DeployBO(); deployBO.setKey(template.getTemplateKey()); deployBO.setName(processUpdateBO.getTemplateName()); deployBO.setNodeConfig(JSONObject.parseObject(processUpdateBO.getProcess(), NodeModel.class)); String deployResult = JSONObject.toJSONString(deployBO, JSONWriter.Feature.WriteMapNullValue); InputStream inputStream = IOUtils.toInputStream(deployResult, StandardCharsets.UTF_8.name()); Long deployId = flowLongEngine.processService().deploy(inputStream, creator, true, null); FlwProcess flwProcess = flowLongEngine.processService().getProcessById(deployId); // 更新模板, version+1 StateProcessTemplate processTemplate = new StateProcessTemplate(); processTemplate.setId(processUpdateBO.getId()); processTemplate.setWorkFlowId(deployId); processTemplate.setWorkflowVersion(flwProcess.getProcessVersion()); processTemplate.setTemplateName(processUpdateBO.getTemplateName()); processTemplate.setTemplateKey(template.getTemplateKey()); processTemplate.setProcess(processUpdateBO.getProcess()); processTemplate.setRemark(processUpdateBO.getRemark()); processTemplate.setUpdateBy(SecurityUtils.getLoginUser().getUsername()); processTemplate.setUpdateTime(LocalDateTime.now()); processTemplate.setTemplateVersion(temp.getTemplateVersion() + 1); return this.updateById(processTemplate); //查询版本是否绑定流程,更新 // LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); // queryWrapper.eq(StateProcessModule::getTemplateId, processUpdateBO.getId()); // List 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); } /** * 创建并部署模版 * @param processCreateBO * @return */ @Transactional(rollbackFor = Exception.class) @Override public Boolean create(ProcessCreateBO processCreateBO) { //查询模版是否存在 List keys = this.list(Wrappers.lambdaQuery(). eq(StateProcessTemplate::getTemplateName, processCreateBO.getTemplateName())); if (!CollectionUtils.isEmpty(keys)) { throw new GlobalException(StateErrorCode.PROCESS_TEMPLATE_KEY_EXISTS.getValue()); } LoginUser loginUser = SecurityUtils.getLoginUser(); FlowCreator creator = FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName()); DeployBO deployBO = new DeployBO(); deployBO.setKey(IdUtil.simpleUUID()); deployBO.setName(processCreateBO.getTemplateName()); deployBO.setNodeConfig(JSONObject.parseObject(processCreateBO.getProcess(), NodeModel.class)); String deployResult = JSONObject.toJSONString(deployBO, JSONWriter.Feature.WriteMapNullValue); InputStream inputStream = IOUtils.toInputStream(deployResult, StandardCharsets.UTF_8.name()); Long deployId = flowLongEngine.processService().deploy(inputStream, creator, false); FlwProcess flwProcess = flowLongEngine.processService().getProcessById(deployId); StateProcessTemplate processTemplate = new StateProcessTemplate(); processTemplate.setId(IdUtils.simpleUUID()); processTemplate.setWorkFlowId(deployId); processTemplate.setWorkflowVersion(flwProcess.getProcessVersion()); processTemplate.setTemplateName(deployBO.getName()); processTemplate.setTemplateKey(deployBO.getKey()); processTemplate.setProcess(processCreateBO.getProcess()); processTemplate.setRemark(processCreateBO.getRemark()); processTemplate.setUpdateBy(loginUser.getUser().getUserName()); processTemplate.setUpdateTime(LocalDateTime.now()); return this.save(processTemplate); } /** * 启动流程 * @param processStartBO * @return */ @Transactional(rollbackFor = Exception.class) @Override public Boolean start(ProcessStartBO processStartBO) { LoginUser loginUser = SecurityUtils.getLoginUser(); FlowCreator creator = FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName()); //查询流程绑定 StateProcessModule stateProcessModule = stateProcessModuleService.getOne(Wrappers.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.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 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(loginUser.getUser().getNickName()); 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; } /** * 启动流程 * @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.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.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 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; } /** * 待办 * @param processTaskListBO * @return */ @Override public PageInfo waitTaskPage(ProcessTaskListBO processTaskListBO) { //获取当前登录用户信息 Long userId = SecurityUtils.getLoginUser().getUserId(); //或签时查询其他审批人是否通过(不能省略),比如 同一任务需要A,B审核,A通过了,B不用在审核了,在历史表查询A的审核记录 LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime); //待审核 lambdaQueryWrapper.eq(FlwHisInstance::getInstanceState, 0); List flwHisInstances = flwHisInstanceMapper.selectList(lambdaQueryWrapper).stream() .map(FlwHisInstance::getId).collect(Collectors.toList()); if (ObjectUtil.isEmpty(flwHisInstances)) { return new PageInfo<>(); } //查询任务参与者 LambdaQueryWrapper 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 flwTaskActorPage = flwTaskActorMapper.selectList(query); if (ObjectUtil.isEmpty(flwTaskActorPage)) { return new PageInfo<>(); } //查询任务信息 List flwTasks = flwTaskMapper.selectList(Wrappers.lambdaQuery() .orderByDesc(FlwTask::getCreateTime) .in(FlwTask::getId, flwTaskActorPage.stream() .map(FlwTaskActor::getTaskId).collect(Collectors.toList()))); if (ObjectUtil.isNull(flwTasks)) { return new PageInfo<>(); } List instanceIds = flwTasks.stream().map(FlwTask::getInstanceId) .map(String::valueOf).collect(Collectors.toList()); //分页查询任务中心任务 LambdaQueryWrapper 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); PageInfo pageInfo = new PageInfo(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); PageInfo taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); //转换类 List 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 updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); Map sysUserMap; if (!CollectionUtils.isEmpty(updateUserId)) { //根据用户id查询更新人信息 List 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> flwHisTaskMap = flwTasks.stream().collect(Collectors.groupingBy(FlwTask::getInstanceId)); for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { List 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 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 lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime); //待审核 lambdaQueryWrapper.eq(FlwHisInstance::getInstanceState, 0); List flwHisInstances = flwHisInstanceMapper.selectList(lambdaQueryWrapper).stream() .map(FlwHisInstance::getId).collect(Collectors.toList()); if (ObjectUtil.isEmpty(flwHisInstances)) { return new PageInfo<>(); } //查询任务参与者 LambdaQueryWrapper 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 flwTaskActorPage = flwTaskActorMapper.selectList(query); if (ObjectUtil.isEmpty(flwTaskActorPage)) { return new PageInfo<>(); } //查询任务信息 List flwTasks = flwTaskMapper.selectList(Wrappers.lambdaQuery() .orderByDesc(FlwTask::getCreateTime) .in(FlwTask::getId, flwTaskActorPage.stream() .map(FlwTaskActor::getTaskId).collect(Collectors.toList()))); if (ObjectUtil.isNull(flwTasks)) { return new PageInfo<>(); } List instanceIds = flwTasks.stream().map(FlwTask::getInstanceId) .map(String::valueOf).collect(Collectors.toList()); //分页查询任务中心任务 LambdaQueryWrapper 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 taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); //转换类 List 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 updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); Map sysUserMap; if (!CollectionUtils.isEmpty(updateUserId)) { //根据用户id查询更新人信息 List 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> flwHisTaskMap = flwTasks.stream().collect(Collectors.groupingBy(FlwTask::getInstanceId)); for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { List 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; } @Override public PageInfo dealTaskPage(ProcessTaskListBO processTaskListBO) { //获取当前登录用户信息 Long userId = SecurityUtils.getLoginUser().getUserId(); LambdaQueryWrapper query = Wrappers.lambdaQuery() .and(qy -> qy.eq(FlwTaskActor::getActorId, userId) //0指定用户 .eq(FlwTaskActor::getActorType, 0) //指定角色 .or().in(FlwTaskActor::getActorId, userId) .eq(FlwTaskActor::getActorType, 1)); List flwHisTaskActors = flwHisTaskActorMapper.selectList(query); List hisTaskIds = flwHisTaskActors.stream().map(FlwTaskActor::getTaskId).collect(Collectors.toList()); if (hisTaskIds.isEmpty()) { return new PageInfo<>(); } List flwHisTaskList = flwHisTaskMapper.selectList( Wrappers.lambdaQuery() .notIn(FlwHisTask::getTaskType, TaskType.cc.getValue(), TaskType.major.getValue()) .orderByDesc(FlwHisTask::getCreateTime) .in(FlwHisTask::getId, hisTaskIds)); if (ObjectUtil.isEmpty(flwHisTaskList)) { new PageInfo<>(); } List instanceIds = flwHisTaskList.stream().map(FlwTask::getInstanceId) .map(String::valueOf).collect(Collectors.toList()); //分页查询任务中心任务 // LambdaQueryWrapper 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 processTaskListVOS = stateTaskCenterService.pageList(processTaskListBO); if (ObjectUtil.isEmpty(processTaskListVOS)) { return new PageInfo<>(); } Map> flwHisTaskMap = flwHisTaskList.stream().collect(Collectors.groupingBy(FlwHisTask::getInstanceId)); //查询原因 List taskIds = flwHisTaskList.stream().map(FlowEntity::getId).map(String::valueOf).collect(Collectors.toList()); List actions = stateProcessInstanceActionService.list( Wrappers.lambdaQuery().in(StateProcessInstanceAction::getNodeId, taskIds)); Map actionMap = actions.stream().collect(Collectors.toMap(StateProcessInstanceAction::getNodeId, Function.identity())); List updateUserId = processTaskListVOS.getRecords().stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); Map sysUserMap; if (!CollectionUtils.isEmpty(updateUserId)) { List 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 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 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 query = Wrappers.lambdaQuery() .and(qy -> qy.eq(FlwTaskActor::getActorId, userId) //0指定用户 .eq(FlwTaskActor::getActorType, 0) //指定角色 .or().in(FlwTaskActor::getActorId, userId) .eq(FlwTaskActor::getActorType, 1)); List flwHisTaskActors = flwHisTaskActorMapper.selectList(query); List hisTaskIds = flwHisTaskActors.stream().map(FlwTaskActor::getTaskId).collect(Collectors.toList()); if (hisTaskIds.isEmpty()) { return new PageInfo<>(); } List flwHisTaskList = flwHisTaskMapper.selectList( Wrappers.lambdaQuery() .notIn(FlwHisTask::getTaskType, TaskType.cc.getValue(), TaskType.major.getValue()) .orderByDesc(FlwHisTask::getCreateTime) .in(FlwHisTask::getId, hisTaskIds)); if (ObjectUtil.isEmpty(flwHisTaskList)) { new PageInfo<>(); } List instanceId = flwHisTaskList.stream().map(FlwTask::getInstanceId) .map(String::valueOf).collect(Collectors.toList()); //分页查询任务中心任务 LambdaQueryWrapper 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<>(); } 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); PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); PageInfo taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); //转换类 List 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)) { return pageInfo; } Map> flwHisTaskMap = flwHisTaskList.stream().collect(Collectors.groupingBy(FlwHisTask::getInstanceId)); //查询原因 List taskIds = flwHisTaskList.stream().map(FlowEntity::getId).map(String::valueOf).collect(Collectors.toList()); List actions = stateProcessInstanceActionService.list( Wrappers.lambdaQuery().in(StateProcessInstanceAction::getNodeId, taskIds)); Map actionMap = actions.stream().collect(Collectors.toMap(StateProcessInstanceAction::getNodeId, Function.identity())); List updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); Map sysUserMap; if (!CollectionUtils.isEmpty(updateUserId)) { List 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) { List 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 pageInfo; } @Override public PageInfo copyTaskPage(ProcessTaskListBO processTaskListBO) { Long userId = SecurityUtils.getUserId(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.orderByDesc("create_time"); List flwHisInstances = flwHisInstanceMapper.selectList(queryWrapper).stream() .map(FlwHisInstance::getId).collect(Collectors.toList()); LambdaQueryWrapper query = Wrappers.lambdaQuery() .and(qy -> qy.eq(FlwTaskActor::getActorId, userId) .eq(FlwTaskActor::getActorType, 0) .or().in(FlwTaskActor::getActorId, userId) .eq(FlwTaskActor::getActorType, 1)); query = query.in(FlwHisTaskActor::getInstanceId, flwHisInstances); List flwHisTaskActors = flwHisTaskActorMapper.selectList(query); List hisTaskIds = flwHisTaskActors.stream().map(FlwTaskActor::getTaskId).collect(Collectors.toList()); if (hisTaskIds.isEmpty()) { return new PageInfo<>(); } List flwHisTaskList = flwHisTaskMapper.selectList( Wrappers.lambdaQuery() //2=抄送 .eq(FlwHisTask::getTaskType, 2) .in(FlwHisTask::getId, hisTaskIds)); if(ObjectUtil.isEmpty(flwHisTaskList)){ return new PageInfo<>(); } List instanceId = flwHisTaskList.stream().map(FlwTask::getInstanceId) .map(String::valueOf).collect(Collectors.toList()); //分页查询任务中心任务 LambdaQueryWrapper 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); PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); PageInfo taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); //转换类 List processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class); pageInfo.setRecords(processTaskListVOS); if (ObjectUtil.isEmpty(processTaskListVOS)) { return pageInfo; } Map> flwHisTaskMap = flwHisTaskList.stream().collect(Collectors.groupingBy(FlwHisTask::getInstanceId)); List updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); Map sysUserMap; if (!CollectionUtils.isEmpty(updateUserId)) { List 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<>(); } //查询原因 List taskIds = flwHisTaskList.stream().map(FlwTask::getParentTaskId).filter(ObjectUtil::isNotEmpty).map(String::valueOf).collect(Collectors.toList()); List actions = stateProcessInstanceActionService.list( Wrappers.lambdaQuery().in(StateProcessInstanceAction::getNodeId, taskIds)); Map actionMap = actions.stream().collect(Collectors.toMap(StateProcessInstanceAction::getNodeId, Function.identity())); for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { List flwHisTasks = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId())); if (ObjectUtil.isNotEmpty(flwHisTaskMap)) { //当某个用户在同一个模块审批流的多个节点都存在时,多次审核后,已审核列表页报错 for (FlwHisTask flwHisTask : flwHisTasks) { if (flwHisTask.getInstanceId().toString().equals(processTaskListVO.getFlowId())) { processTaskListVO.setStatus(flwHisTask.getTaskState().toString()); processTaskListVO.setNodeName(flwHisTask.getTaskName()); processTaskListVO.setParentTaskId(flwHisTask.getParentTaskId().toString()); processTaskListVO.setTaskId(flwHisTask.getId().toString()); processTaskListVO.setVariable(flwHisTask.getVariable()); } } } StateProcessInstanceAction action = actionMap.get(processTaskListVO.getParentTaskId()); if (ObjectUtil.isNotEmpty(action)) { processTaskListVO.setReason(action.getRemark()); } SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy()); if (Objects.nonNull(sysUser)) { processTaskListVO.setCreateBy(sysUser.getNickName()); } } return pageInfo; } @Override public void agree(ProcessAgreeBO processAgreeBO) { Long taskId = Long.valueOf(processAgreeBO.getTaskId()); FlwTask flwTask = flwTaskMapper.selectById(taskId); if (ObjectUtil.isNull(flwTask)) { throw new GlobalException("任务已处理或者不存在"); } 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.setActionType(StateProcessActionEnum.APPROVED.getValue()); stateProcessInstanceAction.setNodeId(processAgreeBO.getTaskId()); stateProcessInstanceAction.setRemark(processAgreeBO.getRemark()); stateProcessInstanceAction.setPictures(processAgreeBO.getPictures()); stateProcessInstanceActionService.save(stateProcessInstanceAction); } @Override public void refuse(ProcessRefuseBO processRefuseBO) { Long taskId = Long.valueOf(processRefuseBO.getTaskId()); FlwTask flwTask = flwTaskMapper.selectById(taskId); // 直接拒绝当前流程 flowLongEngine.runtimeService().reject(flwTask.getInstanceId(), currentFlowCreator()); // 动作执行记录 StateProcessInstanceAction record = new StateProcessInstanceAction(); record.setId(IdUtils.simpleUUID()); record.setInstanceId(flwTask.getInstanceId().toString()); record.setAuditorId(String.valueOf(SecurityUtils.getUserId())); 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 dealAndWaitTaskPage(ProcessTaskListBO processTaskListBO) { //获取当前登录用户信息 Long userId = SecurityUtils.getLoginUser().getUserId(); //或签时查询其他审批人是否通过(不能省略),比如 同一任务需要A,B审核,A通过了,B不用在审核了,在历史表查询A的审核记录 LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime); //待审核,通过,拒绝 lambdaQueryWrapper.in(FlwHisInstance::getInstanceState, 0,1,2); List flwHisInstances = flwHisInstanceMapper.selectList(lambdaQueryWrapper).stream() .map(FlwHisInstance::getId).collect(Collectors.toList()); if (ObjectUtil.isEmpty(flwHisInstances)) { return new PageInfo<>(); } //查询任务参与者 LambdaQueryWrapper 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 flwTaskActorPage = flwTaskActorMapper.selectList(query); if (ObjectUtil.isEmpty(flwTaskActorPage)) { return new PageInfo<>(); } //查询任务信息 List flwTasks = flwTaskMapper.selectList(Wrappers.lambdaQuery() .orderByDesc(FlwTask::getCreateTime) .in(FlwTask::getId, flwTaskActorPage.stream() .map(FlwTaskActor::getTaskId).collect(Collectors.toList()))); if (ObjectUtil.isNull(flwTasks)) { return new PageInfo<>(); } List instanceIds = flwTasks.stream().map(FlwTask::getInstanceId) .map(String::valueOf).collect(Collectors.toList()); //分页查询任务中心任务 // LambdaQueryWrapper 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 taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); // //转换类 // List 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 processTaskListVOS = stateTaskCenterService.pageList(processTaskListBO); List updateUserId = processTaskListVOS.getRecords().stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); Map sysUserMap; if (!CollectionUtils.isEmpty(updateUserId)) { //根据用户id查询更新人信息 List 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> flwHisTaskMap = flwTasks.stream().collect(Collectors.groupingBy(FlwTask::getInstanceId)); for (ProcessTaskListVO processTaskListVO : processTaskListVOS.getRecords()) { List 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 dealAndWaitTaskPage(ProcessTaskListBO processTaskListBO) { // //获取当前登录用户信息 // Long userId = SecurityUtils.getLoginUser().getUserId(); // // //或签时查询其他审批人是否通过(不能省略),比如 同一任务需要A,B审核,A通过了,B不用在审核了,在历史表查询A的审核记录 // LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); // lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime); // //待审核,通过,拒绝 // lambdaQueryWrapper.in(FlwHisInstance::getInstanceState, 0,1,2); // // List flwHisInstances = flwHisInstanceMapper.selectList(lambdaQueryWrapper).stream() // .map(FlwHisInstance::getId).collect(Collectors.toList()); // // //查询任务参与者 // LambdaQueryWrapper 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 flwTaskActorPage = flwTaskActorMapper.selectList(query); // List instanceIds = new ArrayList<>(); // List flwTasks = new ArrayList<>(); // if (ObjectUtil.isNotEmpty(flwTaskActorPage)) { // //查询任务信息 // flwTasks = flwTaskMapper.selectList(Wrappers.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 hisQuery= Wrappers.lambdaQuery() // .and(qy -> qy.eq(FlwTaskActor::getActorId, userId) // //0指定用户 // .eq(FlwTaskActor::getActorType, 0) // //指定角色 // .or().in(FlwTaskActor::getActorId, userId) // .eq(FlwTaskActor::getActorType, 1)); // List flwHisTaskActors = flwHisTaskActorMapper.selectList(hisQuery); // List hisTaskIds = flwHisTaskActors.stream().map(FlwTaskActor::getTaskId).collect(Collectors.toList()); // // if (!CollectionUtils.isEmpty(hisTaskIds)) { // List flwHisTaskList = flwHisTaskMapper.selectList( // Wrappers.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 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 taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); //// //转换类 //// List 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 processTaskListVOS = stateTaskCenterService.pageList(processTaskListBO); // // List updateUserId = processTaskListVOS.getRecords().stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); // Map sysUserMap; // if (!CollectionUtils.isEmpty(updateUserId)) { // //根据用户id查询更新人信息 // List 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> 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 = 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 flwHisTasks = flwHisTaskMapper.selectList(Wrappers.lambdaQuery().eq(FlwHisTask::getInstanceId, instanceId)); processDetailVO.setInstanceId(String.valueOf(instanceId)); processDetailVO.setFlwHisTasks(flwHisTasks); List list = stateProcessInstanceActionService.list(Wrappers.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 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 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 taskCenters = flwHisTaskMapper.selectPage(pageInfo,stateTaskQuery); //转换类 List 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 updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); Map sysUserMap; if (!CollectionUtils.isEmpty(updateUserId)) { List 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() { LoginUser loginUser = SecurityUtils.getLoginUser(); if (null == loginUser || null == loginUser.getUser().getUserId()) { throw new GlobalException("非法用户"); } 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()); } }