From ec1c0e3a8c6075965a721fbd68b3b9f41ea168b7 Mon Sep 17 00:00:00 2001 From: luofl <1442745593@qq.com> Date: 星期一, 07 四月 2025 22:17:24 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java | 99 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 93 insertions(+), 6 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 7c3da74..b7eb5cb 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 @@ -27,6 +27,7 @@ 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; @@ -300,6 +301,83 @@ } /** + * 启动流程 + * @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 @@ -502,6 +580,13 @@ if (processTaskListBO.getSortBy() == 2) { stateTaskQuery.orderByDesc(BaseModel::getCreateTime); } + // 查询合同信息 + List<TContract> tContracts = contractMapper.selectList(Wrappers.<TContract>lambdaQuery()); + List<String> contractIds = tContracts.stream().map(TContract::getId).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(contractIds)){ + return new PageInfo<>(); + } + stateTaskQuery.in(StateTaskCenter::getProjectId, contractIds); stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds); PageInfo pageInfo = new PageInfo(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); @@ -902,16 +987,17 @@ 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 stateProcessInstanceAction = new StateProcessInstanceAction(); stateProcessInstanceAction.setId(IdUtils.simpleUUID()); stateProcessInstanceAction.setInstanceId(flwTask.getInstanceId().toString()); - stateProcessInstanceAction.setAuditorId(String.valueOf(processAgreeBO.getUserId())); stateProcessInstanceAction.setActionType(StateProcessActionEnum.APPROVED.getValue()); stateProcessInstanceAction.setNodeId(processAgreeBO.getTaskId()); stateProcessInstanceAction.setRemark(processAgreeBO.getRemark()); @@ -925,6 +1011,7 @@ FlwTask flwTask = flwTaskMapper.selectById(taskId); // 直接拒绝当前流程 flowLongEngine.runtimeService().reject(flwTask.getInstanceId(), currentFlowCreator()); + flwTaskMapper.deleteById(taskId); // 动作执行记录 StateProcessInstanceAction record = new StateProcessInstanceAction(); record.setId(IdUtils.simpleUUID()); @@ -1202,7 +1289,7 @@ // 查询历史任务 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) @@ -1269,8 +1356,6 @@ processTaskListVO.setContract(contract); } - pageInfo.setRecords(processTaskListVOS); - if (ObjectUtil.isEmpty(processTaskListVOS)) { return pageInfo; } @@ -1287,13 +1372,15 @@ } 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; } -- Gitblit v1.7.1