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 idUserMap; private static Map phoneUserMap; private static Map extraUserMap; private static User cachedUser; private static String cachedUserId; static { init(); } private static void init() { idUserMap = new ConcurrentHashMap(); phoneUserMap = new ConcurrentHashMap(); extraUserMap = new ConcurrentHashMap(); } 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 heads = new HashMap(); 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 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 userList = new ArrayList(); 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 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 getIdUserMap() { return idUserMap; } }