package com.fr.plugin.utils; import com.fr.log.FineLoggerFactory; import com.fr.plugin.dao.MyUserDao; import com.fr.plugin.dao.MyYiTuanDao; import com.fr.plugin.entitys.YTUserEntity; import com.fr.plugin.entitys.YTYiTuanEntity; import com.fr.plugin.yt.MyCoreDBAccess; import com.fr.stable.db.action.DBAction; import com.fr.stable.db.dao.DAOContext; import com.fr.stable.query.QueryFactory; import com.fr.stable.query.condition.QueryCondition; import com.fr.stable.query.restriction.RestrictionFactory; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; public class UserSync { public static void startSyncUser() { YiTuanMaManager manager = YiTuanMaManager.getInstance(); /** * 循环所有的agent */ List ytYiTuanEntities = null; try { ytYiTuanEntities = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction>() { @Override public List run(DAOContext daoContext) throws Exception { return daoContext.getDAO(MyYiTuanDao.class).find(QueryFactory.create()); } }); if (ytYiTuanEntities.isEmpty()) { FineLoggerFactory.getLogger().info(" 用户同步 未配置任何的一团企业配置 "); return; } List fromCloud = new ArrayList<>(); for (YTYiTuanEntity ytYiTuanEntity : ytYiTuanEntities) { String access_token = YiTuanMaUtils.getAccessToken(ytYiTuanEntity.getClientId()); FineLoggerFactory.getLogger().info("同步用户获取的accessTOken:{} ", access_token); try { JSONArray userInfo = YiTuanMaUtils.getUserInfo(ytYiTuanEntity.getClientId() , access_token); int length = userInfo.length(); FineLoggerFactory.getLogger().info("同步用户获取的数量:{} ", length); for (int i = 0; i < length; i++) { JSONObject userModel = userInfo.getJSONObject(i); String userid; if (userModel.has("id")) { userid = userModel.getString("id"); userModel.put("userId", userid); userModel.remove("id"); } else { userid = userModel.getString("userId"); } fromCloud.add(userid); String name = userModel.getString("name"); String mobile = userModel.getString("mobile"); YTUserEntity entity = new YTUserEntity(); entity.setId(userid); entity.setName(name); entity.setPhone(mobile); FineLoggerFactory.getLogger().info("同步用户:{} name{} mob:{} ", userid, name, mobile); if (existEntity(userid)) { update(entity); } else { save(entity); } } } catch (Exception e) { e.printStackTrace(); } } List allUserId = getAllUserId(); allUserId.removeAll(fromCloud); for (String id : allUserId) { FineLoggerFactory.getLogger().info("同步用户--删除用户 {} ", id); remove(id); } } catch (Exception e) { e.printStackTrace(); } } private static List getAllUserId() { try { List ytUserEntities = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction>() { public List run(DAOContext content) throws Exception { return content.getDAO(MyUserDao.class).find(QueryFactory.create()); } }); int size = ytUserEntities.size(); ArrayList objects = new ArrayList<>(size); for (int i = 0; i < size; i++) { YTUserEntity entity = ytUserEntities.get(i); objects.add(entity.getId()); } return objects; } catch (Exception e) { e.printStackTrace(); } return new ArrayList<>(); } private static boolean existEntity(String id) { try { YTUserEntity entity = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction() { public YTUserEntity run(DAOContext content) throws Exception { return content.getDAO(MyUserDao.class).findOne(QueryFactory.create().addRestriction(RestrictionFactory.eq("id", id))); } }); return entity != null; } catch (Exception e) { e.printStackTrace(); } return false; } private static void remove(String id) { try { MyCoreDBAccess.getAccessor().runDMLAction(new DBAction() { public YTUserEntity run(DAOContext content) throws Exception { content.getDAO(MyUserDao.class).remove(id); return null; } }); } catch (Exception e) { e.printStackTrace(); } } private static void save(YTUserEntity entity) { try { MyCoreDBAccess.getAccessor().runDMLAction(new DBAction() { public YTUserEntity run(DAOContext content) throws Exception { content.getDAO(MyUserDao.class).add(entity); return null; } }); } catch (Exception e) { e.printStackTrace(); } } private static void update(YTUserEntity entity) { try { MyCoreDBAccess.getAccessor().runDMLAction(new DBAction() { public YTUserEntity run(DAOContext content) throws Exception { content.getDAO(MyUserDao.class).update(entity); return null; } }); } catch (Exception e) { e.printStackTrace(); } } public static YTUserEntity findById(String id) { try { YTUserEntity entity = MyCoreDBAccess.getAccessor().runDMLAction(new DBAction() { public YTUserEntity run(DAOContext content) throws Exception { QueryCondition queryCondition = QueryFactory.create().addRestriction(RestrictionFactory.eq("id", id)); return content.getDAO(MyUserDao.class).findOne(queryCondition); } }); return entity; } catch (Exception e) { e.printStackTrace(); } return null; } }