无关风月
2025-03-18 2e833e9cfd9ee9979f643b6ea363cfab0ee34eec
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;
@@ -274,6 +275,83 @@
            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);
@@ -902,16 +980,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());
@@ -1202,7 +1281,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 +1348,6 @@
            processTaskListVO.setContract(contract);
        }
        pageInfo.setRecords(processTaskListVOS);
        if (ObjectUtil.isEmpty(processTaskListVOS)) {
            return pageInfo;
        }
@@ -1287,13 +1364,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;
    }