package chat.user;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import chat.medeasy.HttpClientUtil;
|
import chat.module.ModuleLoader;
|
import chat.module.entity.Group;
|
import chat.module.entity.Member;
|
import chat.module.entity.MessageContainer;
|
import chat.module.entity.PrivateFriend;
|
import chat.redis.RedisUtil;
|
import frame.object.data.DataObject;
|
import frame.object.data.Entity;
|
import frame.persist.NamedSQL;
|
|
public class UserStore {
|
|
private static Map<String, User> idUserMap;
|
private static Map<String, User> phoneUserMap;
|
private static Map<String, User> extraUserMap;
|
private static User cachedUser;
|
private static String cachedUserId;
|
|
static {
|
init();
|
}
|
|
private static void init() {
|
idUserMap = new ConcurrentHashMap<String, User>();
|
phoneUserMap = new ConcurrentHashMap<String, User>();
|
extraUserMap = new ConcurrentHashMap<String, User>();
|
}
|
|
public static void loadOne(Entity entity) {
|
String id = entity.getString("id");
|
|
User user = new User(id);
|
user.load(entity);
|
|
addOne(user);
|
}
|
|
public static void addOne(User user) {
|
if (user == null) {
|
return;
|
}
|
|
String id = user.getId();
|
idUserMap.put(id, user);
|
|
String phone = user.getMobile();
|
if (phone != null) {
|
phoneUserMap.put(phone, user);
|
}
|
|
String extra = user.getExtra();
|
if (extra != null) {
|
extraUserMap.put(extra, user);
|
}
|
}
|
|
public static User getOrCreate(User user) throws Exception {
|
String userId = user.getId();
|
String phone = user.getMobile();
|
//String bizid = user.getBizid();
|
String flag = "";
|
|
User userResult = null;
|
|
//1. get user by id
|
if (userId != null) {
|
//1.1 get from cache
|
userResult = getById(userId);
|
|
//1.2 get from database
|
if (userResult == null) {
|
userResult = loadOneUserById(userId);
|
}
|
}
|
//2. get user by phone
|
else if (phone != null) {
|
//2.1 get from cache
|
userResult = getByPhone(phone);
|
|
//2.2 get from database
|
if (userResult == null) {
|
userResult = loadOneUserByPhone(phone);
|
}
|
}
|
|
//3. create new user
|
if (userResult == null) {
|
userResult = user;
|
|
userResult.setDefaultValues();
|
userResult = createOneUser(userResult);
|
|
//调用医视无忧接口,同步创建账号 需等接口调通 希望用调用修改
|
Map<String, String> heads = new HashMap<String, String>();
|
heads.put("Content-Type", "application/json");
|
String json = "{\"doctorMobile\":\""+phone+"\",\"certificateStatus\": 0,\"sourceType\": 2}";
|
HttpClientUtil.execHttpClient(json, "http://api-test.medeasy123.com/doctor/api/save", heads);
|
|
if (!userResult.getRoletype().equals("")) {
|
Map<String, String> userMap = user.getRoleUserId(userResult.getMobile(), userResult.getRoletype());
|
userResult.setExtra(userMap.get("id"));
|
userResult.setName(userMap.get("name"));
|
userResult.setDisplayName(userMap.get("name"));
|
}
|
|
//修改extra
|
int resultRecord = UserStore.modifyUser(userResult, "id", null);
|
|
if (user.getRoletype().equals("1")) {
|
flag = "doctor:id:" + user.getExtra();
|
} else if (user.getRoletype().equals("2")) {
|
flag = "client:id:" + user.getExtra();
|
}
|
String jsonStr = "{\"id\": \""+user.getExtra()+"\", \"name\" : \""+user.getName()+"\", \"portrait\": \""+user.getPortrait()+"\", \"roletype\": \""+user.getRoletype()+"\",\"mobile\": \""+user.getMobile()+"\"}";
|
RedisUtil.createRedisKey(flag, jsonStr);
|
|
UserStore.addOne(user);
|
}
|
|
return userResult;
|
}
|
|
public static User getCachedById(String userId) {
|
if (userId == null) {
|
return null;
|
}
|
|
if (userId.equals(cachedUserId)) {
|
return cachedUser;
|
}
|
|
cachedUserId = userId;
|
cachedUser = idUserMap.get(cachedUserId);
|
|
return cachedUser;
|
}
|
|
public static User getById(String userId) {
|
if (userId == null) {
|
return null;
|
}
|
|
return idUserMap.get(userId);
|
}
|
|
public static User getByExtra(String extra) {
|
if (extra == null) {
|
return null;
|
}
|
|
return extraUserMap.get(extra);
|
}
|
|
private static User getByPhone(String phone) {
|
if (phone == null) {
|
return null;
|
}
|
|
return phoneUserMap.get(phone);
|
}
|
|
private static User loadOneUserById(String userId) throws Exception {
|
if (userId == null) {
|
return null;
|
}
|
|
NamedSQL namedSQL = NamedSQL.getInstance("getOneUserById");
|
namedSQL.setParam("id", userId);
|
Entity entity = namedSQL.getEntity();
|
|
if (entity == null) {
|
return null;
|
}
|
|
User user = new User(userId);
|
user.load(entity);
|
|
return user;
|
}
|
|
private static User loadOneUserByPhone(String phone) throws Exception {
|
if (phone == null) {
|
return null;
|
}
|
|
NamedSQL namedSQL = NamedSQL.getInstance("getOneUserByPhone");
|
namedSQL.setParam("phone", phone);
|
Entity entity = namedSQL.getEntity();
|
|
if (entity == null) {
|
return null;
|
}
|
|
User user = new User(null);
|
user.load(entity);
|
|
return user;
|
}
|
|
public static User createOneUser(User user) {
|
String flag = "";
|
MessageContainer messageContainer;
|
try {
|
DataObject dataObject = DataObject.getInstance("usr");
|
|
Entity entity = dataObject.newEntity();
|
user.pushTo(entity);
|
dataObject.insertToDataBase(entity);
|
|
UserStore.addOne(user);
|
|
//1.创建chatspace 单聊
|
PrivateFriend privateGroup = new PrivateFriend("医生助理", user);
|
privateGroup.createPrivateFriend();
|
ModuleLoader.getPrivateFriendBucket().addOne(privateGroup.getId(), privateGroup);
|
|
//2.创建member
|
List<String> userList = new ArrayList<String>();
|
userList.add(user.getId());
|
userList.add("user004");
|
messageContainer = ModuleLoader.getPrivateFriendBucket().getOne(privateGroup.getId());
|
messageContainer.addInitMembers(privateGroup.getId(), userList);
|
|
//3?.需要发一条消息暂时需不需要
|
|
//4.创建frienship
|
user.createInitFrieldShip(user);
|
|
return user;
|
} catch(Exception e) {
|
return null;
|
}
|
}
|
|
public static int modifyUser(User user, String pointColumn) {
|
return modifyUser(user, pointColumn, null);
|
}
|
|
/**
|
*
|
* @param userId
|
* @return
|
*/
|
public static int modifyUser(User user, String pointColumn, Map<String, String> excludeColumn) {
|
if (user == null) {
|
return -2;
|
}
|
|
try {
|
DataObject dataObject = DataObject.getInstance("usr");
|
Entity entity = dataObject.newEntity();
|
user.pushToModify(entity);
|
int result = dataObject.updateToDateBaseWill(entity, pointColumn, excludeColumn);
|
|
return result;
|
} catch (Exception e) {
|
return 0;
|
}
|
}
|
|
public static boolean contains(String userId) {
|
if (userId == null) {
|
return false;
|
}
|
|
return idUserMap.containsKey(userId);
|
}
|
|
public static Map<String, User> getIdUserMap() {
|
return idUserMap;
|
}
|
|
}
|