You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

178 lines
6.9 KiB

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<YTYiTuanEntity> ytYiTuanEntities = null;
try {
ytYiTuanEntities = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<YTYiTuanEntity>>() {
@Override
public List<YTYiTuanEntity> run(DAOContext daoContext) throws Exception {
return daoContext.getDAO(MyYiTuanDao.class).find(QueryFactory.create());
}
});
if (ytYiTuanEntities.isEmpty()) {
FineLoggerFactory.getLogger().info(" 用户同步 未配置任何的一团企业配置 ");
return;
}
List<String> 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<String> allUserId = getAllUserId();
allUserId.removeAll(fromCloud);
for (String id : allUserId) {
FineLoggerFactory.getLogger().info("同步用户--删除用户 {} ", id);
remove(id);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static List<String> getAllUserId() {
try {
List<YTUserEntity> ytUserEntities = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<YTUserEntity>>() {
public List<YTUserEntity> run(DAOContext content) throws Exception {
return content.getDAO(MyUserDao.class).find(QueryFactory.create());
}
});
int size = ytUserEntities.size();
ArrayList<String> 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<YTUserEntity>() {
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<YTUserEntity>() {
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<YTUserEntity>() {
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<YTUserEntity>() {
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<YTUserEntity>() {
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;
}
}