zoukankan      html  css  js  c++  java
  • 同步系统用户角色到activiti用户角色中

    描述:我的需求只是把系統的角色用戶同步到activiti的角色用戶表并且生成角色用户关联关系。

    1.rest接口:

    @RequestMapping(value = "/updateUser" , method = RequestMethod.GET)
        @ResponseBody
        @ApiOperation(value="用户列表信息",produces="application/json",httpMethod="GET")
        public ResponseEntity<?> updateUser() {
            List<TSRoleUser> listUsers=userService.getList(TSRoleUser.class);
            for (TSRoleUser tsUser : listUsers) {
                TSUser user = tsUser.getTSUser();
                TSRole role = tsUser.getTSRole();
                String roleName = role.getRoleName();
                String roleCode = role.getRoleCode();
                
                String userName = user.getUserName();
                String realName = user.getRealName();
                //同步数据到表
                accountService.saveUser(userName, userName,realName, roleCode,roleName);
                try{Thread.sleep(1000);}catch(Exception e){}
            }
            JSONObject o = new JSONObject();
            o.put("flag", true);
            o.put("msg", "用户角色同步到工作流完成。");
            return new ResponseEntity(o, HttpStatus.OK);
        }

    2.接口:

    public interface AccountService {
    
        //userName, userName,realName, roleCode,roleName
        public void saveUser(String userId,String userName,String realName,String roleIds,String roleName);
        
        
    }

    3.接口实现:

    @Service
    @Transactional 
    public class AccountServiceImpl implements AccountService{
        private static final Logger logger = Logger.getLogger(AccountServiceImpl.class);
        @Autowired
        protected IdentityService identityService;
        
        public void saveUser(String userId,String userName,String realName,String roleIds,String roleName) {
            UserQuery userQuery = identityService.createUserQuery();
            List<org.activiti.engine.identity.User> activitiUsers = userQuery.userId(userId).list();
            if(activitiUsers.size() == 1) {
                 updateActivitiData(userId,userName,realName, roleIds,roleName,activitiUsers.get(0));
            }else if (activitiUsers.size() > 1) {
                String errorMsg = "发现重复用户:id="+ userId;
                logger.error(errorMsg);
                throw new RuntimeException(errorMsg);
            }else{
                newActivitiUser(userId,userName,realName, roleIds,roleName);
                
            }
        }
        private void newActivitiUser(String userId,String userName,String realName,String roleIds,String roleName) {
            // 添加用户
            saveActivitiUser(userId,userName,realName, roleIds,roleName);
        }
         private void saveActivitiUser(String userId,String userName,String realName,String roleIds,String roleName) {
             org.activiti.engine.identity.User activitiUser = identityService.newUser(userId);
             cloneAndSaveActivitiUser(userName,realName, activitiUser);
             logger.debug("add activiti user: "+ ToStringBuilder.reflectionToString(activitiUser));
         }
         private void cloneAndSaveActivitiUser(String userName,String realName, org.activiti.engine.identity.User activitiUser) {
                activitiUser.setFirstName(realName);
                activitiUser.setLastName(realName);
                identityService.saveUser(activitiUser);
         }
        private void updateActivitiData(String userId,String userName,String realName,String roleIds,String roleName,org.activiti.engine.identity.User activitiUser) {
            // 更新用户主体信息  
            cloneAndSaveActivitiUser(userName, realName,activitiUser); 
            // 删除用户的membership
            List<Group> activitiGroups = identityService.createGroupQuery().groupId(roleIds).list();//.groupMember(userId).list();
            if(activitiGroups.size() == 0) {
                Group group = identityService.newGroup(roleIds);
                group.setName(roleName);
                identityService.saveGroup(group);
            }
            // 添加membership
            addMembershipToIdentify(roleIds, userId);
        }
        
        private void addMembershipToIdentify(String roleIds, String userId) {
            identityService.deleteMembership(userId, roleIds);
            identityService.createMembership(userId, roleIds);
        }
    }
  • 相关阅读:
    Linux提供两个格式化错误信息的函数
    warning: incompatible implicit declaration of built-in function ‘exit’
    RDMA的ibv_post_send() 函数
    (C语言)结构体成员的引用->(箭头)和 .(点)
    bcopy函数
    bzero函数
    利用GCC编译器生成动态链接库和静态链接库
    GCC编译器编译链接
    结构体类型定义(C语言)
    C语言编译链接
  • 原文地址:https://www.cnblogs.com/baixiuhua/p/13819607.html
Copyright © 2011-2022 走看看