//package com.mosty.common.token;
//
//import com.google.common.base.Function;
//import com.google.common.cache.CacheBuilder;
//import com.google.common.cache.CacheLoader;
//import com.google.common.cache.LoadingCache;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.concurrent.TimeUnit;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.stereotype.Component;
//import org.springframework.util.StringUtils;
//
//@Component
//public class UserInfoCache {
//    private static final Logger log = LoggerFactory.getLogger(UserInfoCache.class);
//    private static final String KEY_MID = "_";
//    private final Map<Integer, Function<Integer, ResponseResult<UserInfoResp>>> func = new HashMap();
//    private final LoadingCache<String, UserInfoResp> cache;
//
//    public UserInfoCache(StoreUserInfoClient storeUserInfoClient, PlatformUserInfoClient platformUserInfoClient) {
//        this.cache = CacheBuilder.newBuilder().maximumSize(10000L).expireAfterWrite(3L, TimeUnit.MINUTES).build(new CacheLoader<String, UserInfoResp>() {
//            public UserInfoResp load(String key) {
//                if (StringUtils.isEmpty(key)) {
//                    return null;
//                } else {
//                    String[] vs = key.split("_");
//                    Integer type = Integer.valueOf(vs[0]);
//                    Integer userId = Integer.valueOf(vs[1]);
//                    UserType userType = UserType.toEnum(type);
//                    if (userType == null) {
//                        UserInfoCache.log.error("用户类型正确,type:{},userId:{}", type, userId);
//                        return null;
//                    } else {
//                        ResponseResult<UserInfoResp> result = (ResponseResult)((Function)UserInfoCache.this.func.get(type)).apply(userId);
//                        if (result != null) {
//                            if (result.isSuccess()) {
//                                return (UserInfoResp)result.getData();
//                            }
//
//                            UserInfoCache.log.error("调用{}后台用户失败:{},{}", new Object[]{userType.getName(), userId, result.getMessage()});
//                        }
//
//                        return null;
//                    }
//                }
//            }
//        });
//        if (storeUserInfoClient != null && platformUserInfoClient != null) {
//            this.func.put(UserType.store.getValue(), storeUserInfoClient::getUserInfo);
//            this.func.put(UserType.platform.getValue(), platformUserInfoClient::getUserInfo);
//        }
//
//    }
//
//    public UserInfoResp getUserInfo(Integer userId, UserType userType) {
//        if (userId != null && userType != null) {
//            try {
//                return (UserInfoResp)this.cache.getUnchecked(userType.value + "_" + userId);
//            } catch (Exception var4) {
//                log.error("key:{}/{} err", new Object[]{userId, userType, var4});
//                return null;
//            }
//        } else {
//            return null;
//        }
//    }
//}
