package com.hotent.runtime.job; import javax.annotation.Resource; import org.springframework.stereotype.Component; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.hotent.base.constants.SystemConstants; import com.hotent.base.exception.BaseException; import com.hotent.base.util.BeanUtils; import com.hotent.base.util.JsonUtil; import com.hotent.base.util.StringUtil; import com.hotent.runtime.controller.InstanceController; import com.hotent.runtime.params.StartFlowParamObject; import com.hotent.runtime.params.StartResult; import com.hotent.uc.api.impl.util.ContextUtil; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.log.XxlJobLogger; /** * 定时启动流程 * * @company 广州宏天软件股份有限公司 * @author jason * @email liygui@jee-soft.cn * @date 2020年5月28日 */ @Component public class FlowStartXxlJob { @Resource InstanceController instanceController; /** * 1、简单任务示例(Bean模式) */ @XxlJob("flowStartXxlJob") public ReturnT flowStartXxlJob(String param) throws Exception { XxlJobLogger.log("XXL-JOB, 开始执行定时启动流程."); String defaultAccount = SystemConstants.SYSTEM_ACCOUNT; JsonNode jsonNode = JsonUtil.toJsonNode(param); String flowkey = jsonNode.get("flowkey").asText(); String startAccount = jsonNode.get("startAccount").asText(); if(StringUtil.isNotEmpty(startAccount)) { defaultAccount = startAccount; } // 定时任务中没有当前登录用户,所以需要设置到当前用户上下文中 ContextUtil.setCurrentUserByAccount(defaultAccount); if(BeanUtils.isEmpty(flowkey)) { throw new BaseException("定时启动流程的自动任务中必须配置flowkey来指定要启动的流程."); } startFlow(flowkey, defaultAccount); return ReturnT.SUCCESS; } private void startFlow(String flowKey, String account) throws Exception { // 构建启动流程的参数 ObjectNode startFlowParam = JsonUtil.getMapper().createObjectNode(); startFlowParam.put("flowKey", flowKey); startFlowParam.put("account", account); StartFlowParamObject startFlowParamObject = new StartFlowParamObject(); startFlowParamObject.setFlowKey(flowKey); startFlowParamObject.setAccount(account); // 调用接口启动流程 StartResult startFlowResult = instanceController.start(startFlowParamObject); if(BeanUtils.isNotEmpty(startFlowResult) && !startFlowResult.getState()) { String message = "流程启动失败"; if(BeanUtils.isNotEmpty(startFlowResult) && BeanUtils.isNotEmpty(startFlowResult.getMessage())) { message += ":" + startFlowResult.getMessage(); } throw new BaseException(message); } } }