| @@ -14,6 +14,7 @@ import com.iformall.service.CUserTokenService; | |||
| import com.iformall.service.WxAppinfoService; | |||
| import com.iformall.service.WxCUserBasicInfoService; | |||
| import com.iformall.service.WxCUserService; | |||
| import com.iformall.service.cuser.CUserServiceFactory; | |||
| import com.iformall.service.wechat.FmOpenService; | |||
| import com.iformall.utils.Constant; | |||
| import com.iformall.utils.IPUtil; | |||
| @@ -56,6 +57,9 @@ public class BaseController { | |||
| @Autowired | |||
| private CUserTokenService cUserTokenService; | |||
| @Autowired | |||
| private CUserServiceFactory cuserFactory; | |||
| @Autowired | |||
| @Qualifier("cUserBasicInfoRedisTemplate") | |||
| RedisTemplate<String, WxCUserBasicInfo> cuserBasicInfoTemplate; | |||
| @@ -147,6 +151,10 @@ public class BaseController { | |||
| cUserTokenService.removeTokenCache(baseuser.getToken()); | |||
| } | |||
| public void updateCacheCUser(String token,Object cuser) { | |||
| cUserTokenService.updateTokenCache(token, cuser); | |||
| } | |||
| private WxCUserBasicInfo getCacheMember(Long memberId,String key,long seconds) throws Exception { | |||
| ValueOperations<String, WxCUserBasicInfo> operations = cuserBasicInfoTemplate.opsForValue(); | |||
| WxCUserBasicInfo member; | |||
| @@ -173,7 +173,7 @@ public class WxUserGrantController extends BaseController { | |||
| return new ResultData(ErrorCode.APP_ID_NOT_ENABLE); | |||
| } | |||
| wxAppinfo = wxAppinfoService.getByAppIdFromRedis(appId); | |||
| wxAppinfo = wxAppinfoService.getByAppId(appId); | |||
| if(wxAppinfo == null){ | |||
| return new ResultData(ErrorCode.APP_ID_NOT_FOUND); | |||
| } | |||
| @@ -239,9 +239,9 @@ public class WxUserGrantController extends BaseController { | |||
| session_key = session.getSessionKey(); | |||
| openId = session.getOpenid(); | |||
| unionId = session.getUnionid(); | |||
| if (StringUtils.isNotBlank(unionId)) { | |||
| boolHaveUnionId = true; | |||
| } | |||
| // if (StringUtils.isNotBlank(unionId)) { | |||
| // boolHaveUnionId = true; | |||
| // } | |||
| logger.info("session_key: " + session_key + ", openId: " + openId + ", unionId: " + unionId); | |||
| resultMap.put("openId", openId); | |||
| @@ -262,16 +262,16 @@ public class WxUserGrantController extends BaseController { | |||
| } | |||
| WxCUser oldUser = null; | |||
| if (boolHaveUnionId) { | |||
| // 优先根据unionId查询 | |||
| WxCUser userQ = new WxCUser(); | |||
| userQ.updateTenantInfo(wxMall.getTenantInfo()); | |||
| userQ.setUnionId(unionId); | |||
| oldUser = wxCUserService.getByObject(userQ); | |||
| if(oldUser != null) { | |||
| boolFindByUnionId = true; | |||
| } | |||
| } | |||
| // if (boolHaveUnionId) { | |||
| // // 优先根据unionId查询 | |||
| // WxCUser userQ = new WxCUser(); | |||
| // userQ.updateTenantInfo(wxMall.getTenantInfo()); | |||
| // userQ.setUnionId(unionId); | |||
| // oldUser = wxCUserService.getByObject(userQ); | |||
| // if(oldUser != null) { | |||
| // boolFindByUnionId = true; | |||
| // } | |||
| // } | |||
| if (oldUser == null) { | |||
| oldUser = wxCUserService.getByOpenId(newUser); | |||
| } | |||
| @@ -349,6 +349,7 @@ public class WxUserGrantController extends BaseController { | |||
| // 登录后处理 | |||
| int score = wxCUserService.actionAfterLogin(oldUser, boolFindByUnionId); | |||
| updateCacheCUser(token, oldUser); | |||
| resultMap.put("score", score); | |||
| } else { | |||
| // 新用户 | |||
| @@ -403,6 +404,7 @@ public class WxUserGrantController extends BaseController { | |||
| // 登录后处理 | |||
| int score = wxCUserService.actionAfterLogin(newUser, null); | |||
| resultMap.put("score", score); | |||
| updateCacheCUser(token, newUser); | |||
| } | |||
| return new ResultData(resultMap); | |||
| } | |||
| @@ -14,4 +14,6 @@ public interface CUserTokenService { | |||
| void removeTokenCache(String token); | |||
| void updateTokenCache(String token,Object updateCuser); | |||
| } | |||
| @@ -8,5 +8,7 @@ import com.iformall.domain.po.base.BaseCUserEntity; | |||
| */ | |||
| public interface CUserServiceApapter { | |||
| public BaseCUserEntity getToken(String token); | |||
| public BaseCUserEntity getByToken(String token); | |||
| public BaseCUserEntity getByObj(Object cuser); | |||
| } | |||
| @@ -18,9 +18,7 @@ public class WxCUserServiceAdapter implements CUserServiceApapter{ | |||
| @Autowired | |||
| WxCUserMapper wxCUserMapper; | |||
| @Override | |||
| public BaseCUserEntity getToken(String token) { | |||
| WxCUser wxCUser = wxCUserMapper.findByToken(token); | |||
| private BaseCUserEntity generateBaseEntity(WxCUser wxCUser) { | |||
| BaseCUserEntity entity = new BaseCUserEntity(); | |||
| entity.setId(wxCUser.getId()); | |||
| entity.setExpireTime(wxCUser.getExpireTime()); | |||
| @@ -29,5 +27,17 @@ public class WxCUserServiceAdapter implements CUserServiceApapter{ | |||
| entity.setRealUser(JSON.parseObject(JSON.toJSONString(wxCUser, SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteMapNullValue), Map.class)); | |||
| return entity; | |||
| } | |||
| @Override | |||
| public BaseCUserEntity getByToken(String token) { | |||
| WxCUser wxCUser = wxCUserMapper.findByToken(token); | |||
| return generateBaseEntity(wxCUser); | |||
| } | |||
| @Override | |||
| public BaseCUserEntity getByObj(Object cuser) { | |||
| WxCUser wxCUser = (WxCUser) cuser; | |||
| return generateBaseEntity(wxCUser); | |||
| } | |||
| } | |||
| @@ -1,7 +1,9 @@ | |||
| package com.iformall.service.impl; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.domain.po.base.BaseCUserEntity; | |||
| import com.iformall.enums.EnumAppPlat; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.mapper.WxCUserMapper; | |||
| import com.iformall.service.CUserTokenService; | |||
| import com.iformall.service.cuser.CUserServiceFactory; | |||
| @@ -30,6 +32,21 @@ public class CUserTokenServiceImpl implements CUserTokenService { | |||
| @Autowired | |||
| CUserServiceFactory cuserFactory; | |||
| private EnumAppPlat getPlat(String token) { | |||
| if(token.endsWith(Constant.TOKEN_WXC_END)){ | |||
| return EnumAppPlat.WX; | |||
| } | |||
| throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), token+"token解析错误") ; | |||
| } | |||
| private void setCache(String token,BaseCUserEntity baseUser) { | |||
| if (null != baseUser) { | |||
| String key = Constant.tokenPrev + token; | |||
| ValueOperations<String, BaseCUserEntity> operations = baseCUserTokenRedisTemplate.opsForValue(); | |||
| operations.set(key, baseUser, 3600*24*3, TimeUnit.SECONDS); | |||
| } | |||
| } | |||
| @Override | |||
| public BaseCUserEntity getByToken(String token) { | |||
| @@ -47,13 +64,8 @@ public class CUserTokenServiceImpl implements CUserTokenService { | |||
| logger.info("缓存中获取用户信息End-" + token); | |||
| return baseUser; | |||
| } | |||
| if(token.endsWith(Constant.TOKEN_WXC_END)){ | |||
| baseUser = cuserFactory.getCUserService(EnumAppPlat.WX).getToken(token); | |||
| } | |||
| // 插入缓存 | |||
| if (null != baseUser) { | |||
| operations.set(key, baseUser, 3600*24*3, TimeUnit.SECONDS); | |||
| } | |||
| baseUser = cuserFactory.getCUserService(getPlat(token)).getByToken(token); | |||
| setCache(token,baseUser); | |||
| //operations.set(key, user, 3600, TimeUnit.SECONDS); | |||
| //logger.info("DB中获取用户信息End-" + token); | |||
| return baseUser; | |||
| @@ -67,4 +79,10 @@ public class CUserTokenServiceImpl implements CUserTokenService { | |||
| baseCUserTokenRedisTemplate.delete(key); | |||
| } | |||
| } | |||
| @Override | |||
| public void updateTokenCache(String token,Object cuser) { | |||
| BaseCUserEntity baseUser = cuserFactory.getCUserService(getPlat(token)).getByObj(cuser); | |||
| setCache(token,baseUser); | |||
| } | |||
| } | |||