package com.terra.common.service;
|
|
import com.terra.common.entity.all.RedisCacheKey;
|
import com.terra.common.entity.all.SettingData;
|
import com.terra.common.entity.lf.TokenPo;
|
import com.terra.common.entity.lf.UserPo;
|
import com.terra.common.helper.StringHelper;
|
import com.terra.common.helper.WebHelper;
|
import com.terra.common.mapper.CommonMapper;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* 通用服务类
|
* @author WWW
|
*/
|
@Component
|
public class CommonService {
|
@Resource
|
RedisService redisService;
|
|
@Resource
|
CommonMapper mapper;
|
|
public UserPo getCurrentUser(HttpServletRequest req) {
|
String token = WebHelper.getToken(req);
|
|
return getUserByToken(token);
|
}
|
|
public UserPo getUserByToken(String token) {
|
if (StringHelper.isNull(token)) return null;
|
|
TokenPo tokenPo = getTokenPo(token);
|
if (null == tokenPo) return null;
|
|
return getUser(token);
|
}
|
|
public TokenPo getTokenPo(String token) {
|
String tokenKey = RedisCacheKey.signTokenKey(token);
|
|
// redis
|
Object obj = redisService.get(tokenKey);
|
if (obj instanceof TokenPo) {
|
return (TokenPo) obj;
|
}
|
|
// db
|
TokenPo po = mapper.selectOneByToken(token);
|
if (null != po) {
|
long min = StringHelper.getMinuteDifference(po.getExpire());
|
redisService.put(tokenKey, po, min, TimeUnit.MINUTES);
|
}
|
|
return po;
|
}
|
|
public UserPo getUser(String token) {
|
String userKey = RedisCacheKey.signUserKey(token);
|
|
// redis
|
Object obj = redisService.get(userKey);
|
if (obj instanceof UserPo) {
|
return (UserPo) obj;
|
}
|
|
// db
|
UserPo po = mapper.selectByToken(token);
|
if (null != po) {
|
redisService.put(userKey, po, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES);
|
}
|
|
return po;
|
}
|
}
|