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; } }