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