From c0c57b53bde43b0bc844c788cd896b0862b36065 Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Thu, 3 Sep 2020 16:57:01 +0800 Subject: [PATCH] fix wxcuser cache --- .../iformall/controller/BaseController.java | 8 +++++ .../controller/WxUserGrantController.java | 30 +++++++++-------- .../iformall/service/CUserTokenService.java | 2 ++ .../service/cuser/CUserServiceApapter.java | 4 ++- .../cuser/wx/WxCUserServiceAdapter.java | 16 ++++++++-- .../service/impl/CUserTokenServiceImpl.java | 32 +++++++++++++++---- 6 files changed, 67 insertions(+), 25 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java index 0d69ab4a6..e1decd1b4 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java @@ -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 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 operations = cuserBasicInfoTemplate.opsForValue(); WxCUserBasicInfo member; diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index 7c847d094..e7f36031d 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -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); } diff --git a/mallinkService/src/main/java/com/iformall/service/CUserTokenService.java b/mallinkService/src/main/java/com/iformall/service/CUserTokenService.java index 97337db93..12c1c1ad3 100644 --- a/mallinkService/src/main/java/com/iformall/service/CUserTokenService.java +++ b/mallinkService/src/main/java/com/iformall/service/CUserTokenService.java @@ -14,4 +14,6 @@ public interface CUserTokenService { void removeTokenCache(String token); + void updateTokenCache(String token,Object updateCuser); + } diff --git a/mallinkService/src/main/java/com/iformall/service/cuser/CUserServiceApapter.java b/mallinkService/src/main/java/com/iformall/service/cuser/CUserServiceApapter.java index c816947ca..d8db476eb 100644 --- a/mallinkService/src/main/java/com/iformall/service/cuser/CUserServiceApapter.java +++ b/mallinkService/src/main/java/com/iformall/service/cuser/CUserServiceApapter.java @@ -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); } diff --git a/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java index bd56b22b0..88d6aa25d 100644 --- a/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java +++ b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java @@ -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); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/CUserTokenServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/CUserTokenServiceImpl.java index 46604236f..fee337687 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/CUserTokenServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/CUserTokenServiceImpl.java @@ -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 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); + } }