package com.highdatas.mdm.service.act.impl; import com.highdatas.mdm.entity.TUser; import org.activiti.engine.IdentityService; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.repository.Model; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.runtime.ProcessInstance; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; @Service public class IdentityServiceImpl extends BaseServiceImpl implements com.highdatas.mdm.service.act.IdentityService{ @Autowired IdentityService identityService; @Autowired RuntimeService runtimeService; @Autowired RepositoryService repositoryService; @Override public String startProcess(String businessId, String key) { return startProcess(businessId, key, null, null); } @Override public String startProcess(String businessId, String key, String workflowStall, HashMap variables) { TUser user = getOnlineUser(); if (user == null) { error(" user is null"); return ""; } ProcessInstance processInstance = null; try { // add workflowstall if (StringUtils.isEmpty(workflowStall)) { workflowStall = "1"; } if (variables == null) { variables = new HashMap<>(); } int workflowStallInt = Integer.parseInt(workflowStall); variables.put("workflowstall", workflowStallInt); identityService.setAuthenticatedUserId(user.getUserId()); //get max version processDefinition List modelList = repositoryService.createModelQuery().modelKey(key).orderByModelVersion().desc().list(); ProcessDefinition processDefinition = null; for (Model model : modelList) { if (processDefinition == null && model.getDeploymentId() != null) { String deploymentId = model.getDeploymentId(); processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploymentId).singleResult(); } } processInstance = runtimeService.startProcessInstanceById(processDefinition.getId(), businessId, variables); String processInstanceId = processInstance.getId(); //TODO db // NamedSQL updateActinstUserSql = NamedSQL.getInstance("updateActinstUser"); // updateActinstUserSql.setParam("userid", user.getId()); // updateActinstUserSql.setParam("id", processInstanceId); // SQLRunner.execSQL(updateActinstUserSql); return processInstanceId; } finally { identityService.setAuthenticatedUserId(null); } } }