From 0ab9dfd8f122195e4e9f09bd50c59e0a47450bec Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期三, 19 三月 2025 15:50:03 +0800 Subject: [PATCH] fix: resolve merge conflicts in .gitignore --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java | 1394 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 1,394 insertions(+), 0 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java new file mode 100644 index 0000000..14e744d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java @@ -0,0 +1,1394 @@ +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<StateProcessTemplateMapper, StateProcessTemplate> 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<StateProcessTemplate> page(ProcessTemplatePageBO request) { + //查询流程模板列表 + Page<StateProcessTemplate> templatePage = this.baseMapper.page(new Page<>(request.getCurrentPage(), request.getPageSize()), request); + + //更新人id列表 + List<String> updateUserNameList = templatePage.getRecords().stream().map(BaseModel::getUpdateBy).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(updateUserNameList)) { + //根据用户id列表查询用户信息 + List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserNameList); + Map<String, SysUser> 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.<StateProcessTemplate>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<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); + } + + /** + * 创建并部署模版 + * @param processCreateBO + * @return + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Boolean create(ProcessCreateBO processCreateBO) { + //查询模版是否存在 + List<StateProcessTemplate> keys = this.list(Wrappers.<StateProcessTemplate>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.<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(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.<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; + } + + /** + * 待办 + * @param processTaskListBO + * @return + */ + @Override + public PageInfo<ProcessTaskListVO> waitTaskPage(ProcessTaskListBO processTaskListBO) { + //获取当前登录用户信息 + 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()); + } + stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds); + 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); + + 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()); + 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; + } + + @Override + public PageInfo<ProcessTaskListVO> dealTaskPage(ProcessTaskListBO processTaskListBO) { + //获取当前登录用户信息 + 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> 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()); + //分页查询任务中心任务 + 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<>(); + } + 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<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)) { + return 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.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) { + 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 pageInfo; + } + + @Override + public PageInfo<ProcessTaskListVO> copyTaskPage(ProcessTaskListBO processTaskListBO) { + Long userId = SecurityUtils.getUserId(); + QueryWrapper<FlwHisInstance> queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("create_time"); + List<Long> flwHisInstances = flwHisInstanceMapper.selectList(queryWrapper).stream() + .map(FlwHisInstance::getId).collect(Collectors.toList()); + + LambdaQueryWrapper<FlwHisTaskActor> query = Wrappers.<FlwHisTaskActor>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<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() + //2=抄送 + .eq(FlwHisTask::getTaskType, 2) + .in(FlwHisTask::getId, hisTaskIds)); + + if(ObjectUtil.isEmpty(flwHisTaskList)){ + return new PageInfo<>(); + } + List<String> instanceId = 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); + PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); + PageInfo taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); + //转换类 + List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class); + pageInfo.setRecords(processTaskListVOS); + + if (ObjectUtil.isEmpty(processTaskListVOS)) { + return pageInfo; + } + Map<Long, List<FlwHisTask>> flwHisTaskMap = flwHisTaskList.stream().collect(Collectors.groupingBy(FlwHisTask::getInstanceId)); + + 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<>(); + } + + //查询原因 + List<String> taskIds = flwHisTaskList.stream().map(FlwTask::getParentTaskId).filter(ObjectUtil::isNotEmpty).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())); + + + for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { + List<FlwHisTask> 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<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() { + 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()); + } + +} -- Gitblit v1.7.1