From a4b961262680c1bc4ed47a423dfc43c986062769 Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期三, 26 二月 2025 14:01:19 +0800 Subject: [PATCH] 审批流 --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java | 142 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 142 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 index b25418c..3597645 100644 --- 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 @@ -31,6 +31,7 @@ import com.ruoyi.system.mapper.StateProcessTemplateMapper; 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; @@ -71,6 +72,8 @@ private FlwHisTaskActorMapper flwHisTaskActorMapper; @Autowired private ISysUserService sysUserService; + @Autowired + private TContractService contractService; /** * 流程模版分页 @@ -262,6 +265,7 @@ 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记录 @@ -352,6 +356,14 @@ //转换类 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); List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); @@ -439,6 +451,14 @@ 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); if (ObjectUtil.isEmpty(processTaskListVOS)) { @@ -632,6 +652,128 @@ stateProcessInstanceActionService.save(record); } + @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 ProcessDetailVO detail(String taskId) { + ProcessDetailVO processDetailVO = new ProcessDetailVO(); + FlwTask flwTask = flwTaskMapper.selectById(Long.valueOf(taskId)); + // 查询合同信息 + TContract contract = contractService.getById(JSONObject.parseObject(flwTask.getVariable()).getString("projectId")); + BeanUtil.copyProperties(contract, processDetailVO); + + List<StateProcessInstanceAction> list = stateProcessInstanceActionService.list(Wrappers.<StateProcessInstanceAction>lambdaQuery().eq(StateProcessInstanceAction::getInstanceId, flwTask.getInstanceId()) + .orderByDesc(StateProcessInstanceAction::getCreateTime)); + processDetailVO.setInstanceActions(list); + + return processDetailVO; + } + private FlowCreator currentFlowCreator() { LoginUser loginUser = SecurityUtils.getLoginUser(); if (null == loginUser || null == loginUser.getUser().getUserId()) { -- Gitblit v1.7.1