package com.highdatas.mdm.service.act.impl; import com.highdatas.mdm.entity.TUser; import com.highdatas.mdm.pojo.CodeMsg; import com.highdatas.mdm.pojo.Result; import org.activiti.engine.IdentityService; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.identity.Group; import org.activiti.engine.identity.User; 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); } } @Override public Result addUser(String id) { try { User user = identityService.newUser(id); identityService.saveUser(user); return Result.success(null); }catch (Exception e){ e.printStackTrace(); return Result.error(new CodeMsg(6002, e.getMessage())); } } @Override public Result addRole(String id) { try { Group group = identityService.newGroup(id); identityService.saveGroup(group); return Result.success(null); }catch (Exception e){ e.printStackTrace(); return Result.error(new CodeMsg(6002, e.getMessage())); } } @Override public Result addUserRole(String roleId, String userId) { try { User user = identityService.createUserQuery().userId(userId).singleResult(); if (user == null) { return Result.error(new CodeMsg(3001, "当前用户不存在,请先创建用户")); } Group group = identityService.createGroupQuery().groupId(roleId).singleResult(); if (user == null) { return Result.error(new CodeMsg(3001, "当前角色不存在,请先角色用户")); } identityService.createMembership(userId,roleId); return Result.success(null); } catch (Exception e) { e.printStackTrace(); return Result.error(new CodeMsg(3002, e.getMessage())); } } @Override public Result deleteUser(String id) { try { User user = identityService.createUserQuery().userId(id).singleResult(); if (user == null) { return Result.error(new CodeMsg(3001, "当前用户不存在")); } identityService.deleteUser(id); return Result.success(null); }catch (Exception e){ e.printStackTrace(); return Result.error(new CodeMsg(3002, e.getMessage())); } } @Override public Result deleteRole(String id) { try { Group group = identityService.createGroupQuery().groupId(id).singleResult(); if (group == null) { return Result.error(new CodeMsg(3001, "当前角色不存在")); } identityService.deleteGroup(id); return Result.success(null); }catch (Exception e){ e.printStackTrace(); return Result.error(new CodeMsg(3002, e.getMessage())); } } @Override public Result deleteUserRole(String roleId, String userId) { try { User user = identityService.createUserQuery().userId(userId).singleResult(); if (user == null) { return Result.error(new CodeMsg(3001, "当前用户不存在,请先创建用户")); } Group group = identityService.createGroupQuery().groupId(roleId).singleResult(); if (user == null) { return Result.error(new CodeMsg(3001, "当前角色不存在,请先角色用户")); } identityService.deleteMembership(userId,roleId); return Result.success(null); } catch (Exception e) { e.printStackTrace(); return Result.error(new CodeMsg(3002, e.getMessage())); } } }