同步系统用户角色到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);
    }
}

 

posted @ 2020-10-15 11:37  悠悠乃  阅读(817)  评论(0编辑  收藏  举报