From 8ba82237cf391fb55e0cd862981ebbc96b20858f Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Thu, 3 Sep 2020 15:44:39 +0800 Subject: [PATCH] fix wxcuser cache --- .../iformall/controller/BaseController.java | 71 +++++++++++++++---- .../controller/WxActivityJoinController.java | 2 +- .../iformall/controller/WxCarController.java | 6 +- .../controller/WxCouponOrderController.java | 2 +- .../WxMsgValidationcodeController.java | 8 +-- .../controller/WxUserGrantController.java | 48 +++++++------ .../iformall/service/CUserTokenService.java | 2 + .../service/impl/CUserTokenServiceImpl.java | 9 +++ 8 files changed, 106 insertions(+), 42 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java index 5bffa9d3e..0d69ab4a6 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java @@ -5,6 +5,7 @@ import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.domain.po.base.BaseCUserEntity; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumAppPlat; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxCUserBasicInfo; @@ -54,10 +55,10 @@ public class BaseController { @Autowired private CUserTokenService cUserTokenService; - + @Autowired - @Qualifier("baseCUserTokenRedisTemplate") - RedisTemplate baseCUserTokenRedisTemplate; + @Qualifier("cUserBasicInfoRedisTemplate") + RedisTemplate cuserBasicInfoTemplate; @InitBinder public void InitBinder(WebDataBinder dataBinder) { @@ -140,17 +141,61 @@ public class BaseController { return user; } - /** - * - */ - public WxCUserBasicInfo getMember() throws Exception { - Long memberId = getMemberId(); - WxCUserBasicInfo member = wxCUserBasicInfoService.getById(memberId); - if (member == null) { - throw new MallinkException(ErrorCode.USER_IS_EMPTY); + public void removeCacheCUser() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + BaseCUserEntity baseuser = (BaseCUserEntity) request.getAttribute(Constant.REQUEST_C_USER_KEY); + cUserTokenService.removeTokenCache(baseuser.getToken()); + } + + private WxCUserBasicInfo getCacheMember(Long memberId,String key,long seconds) throws Exception { + ValueOperations operations = cuserBasicInfoTemplate.opsForValue(); + WxCUserBasicInfo member; + // 缓存 + boolean hasKey = cuserBasicInfoTemplate.hasKey(key); + if(hasKey) { + member = operations.get(key); + return member; + }else { + member = wxCUserBasicInfoService.getById(memberId); + if (member == null) { + throw new MallinkException(ErrorCode.USER_IS_EMPTY); + } + operations.set(key, member, seconds, TimeUnit.SECONDS); } - return member; + return operations.get(key); + } + + public WxCUserBasicInfo getCacheMember() throws Exception { + Long memberId = getMemberId(); + String key = "webapp:member:"+memberId; + return getCacheMember(memberId, key, 3600*24*3); + } + + /*此处缓存短暂时间,因为积分、成长值记录*/ + public WxCUserBasicInfo getShortCacheMember(Long memberId) throws Exception { + String key = "webapp:short:member:"+memberId; + return getCacheMember(memberId, key, 100); + } + + public void removeCacheMember(Long memberId) { + String key = "webapp:member:"+memberId; + if (cuserBasicInfoTemplate.hasKey(key)) { + cuserBasicInfoTemplate.delete(key); + } + + String shortKey = "webapp:short:member:"+memberId; + if (cuserBasicInfoTemplate.hasKey(shortKey)) { + cuserBasicInfoTemplate.delete(shortKey); + } } +// public WxCUserBasicInfo getMember() throws Exception { +// Long memberId = getMemberId(); +// WxCUserBasicInfo member = wxCUserBasicInfoService.getById(memberId); +// if (member == null) { +// throw new MallinkException(ErrorCode.USER_IS_EMPTY); +// } +// return member; +// } public WxAppinfo getAppInfo(String appId) { return wxAppinfoService.getByAppId(appId); @@ -221,6 +266,7 @@ public class BaseController { byId.setAvatarUrl(avatarUrl); byId.setSex(sex); wxCUserBasicInfoService.update(byId); + removeCacheMember(byId.getId()); return byId.getId(); }else{ Date cur = new Date(); @@ -237,6 +283,7 @@ public class BaseController { basicInfo.setCreateDate(cur); basicInfo.setUpdateDate(cur); wxCUserBasicInfoService.save(basicInfo); + removeCacheMember(basicInfo.getId()); return basicInfo.getId(); } } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxActivityJoinController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxActivityJoinController.java index 06b85c644..c7c86f6e2 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxActivityJoinController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxActivityJoinController.java @@ -68,7 +68,7 @@ public class WxActivityJoinController extends BaseController { WxCUserBasicInfo member; try { - member = getMember(); + member = getCacheMember(); } catch (Exception e1) { return new ResultData(Result.ERROR,e1.getMessage()); } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 0bb984019..ca01d2ee2 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -118,7 +118,7 @@ public class WxCarController extends BaseController { return etcpHelper.initForEtcp(paramMap, memberId, park); }else { try { - String vendorPersonId = parkFactory.getParkService(park.getVendorType()).initLogin(paramMap, park, getMember()); + String vendorPersonId = parkFactory.getParkService(park.getVendorType()).initLogin(paramMap, park, getCacheMember()); Map resultMap = new HashMap(); resultMap.put("vendor", park.getVendorType()); //有的厂家没有初始化 @@ -146,7 +146,7 @@ public class WxCarController extends BaseController { public ResultData bindCar(@RequestBody Map paramMap) { WxCUserBasicInfo member; try { - member = getMember(); + member = getCacheMember(); } catch (Exception e1) { return new ResultData(Result.ERROR,e1.getMessage()); } @@ -199,7 +199,7 @@ public class WxCarController extends BaseController { return etcpHelper.etcpUnbindCar(paramMap, park, memberId); } else { try { - parkFactory.getParkService(park.getVendorType()).unbindCar(paramMap, park, getMember()); + parkFactory.getParkService(park.getVendorType()).unbindCar(paramMap, park, getCacheMember()); return parkHelper.unbindCar(paramMap, park, getMemberId()); } catch (Exception e) { logger.error("park unbindCar error",e); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index 345e5b70f..ddacb5bac 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -376,7 +376,7 @@ public class WxCouponOrderController extends BaseController { TenantEntity tenantEntity = getTenantInfo(); WxCUserBasicInfo member; try { - member = getMember(); + member = getCacheMember(); } catch (Exception e) { return new ResultData(Result.ERROR,e.getMessage()); } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxMsgValidationcodeController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxMsgValidationcodeController.java index 24c625d5f..da6a7d3b6 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxMsgValidationcodeController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxMsgValidationcodeController.java @@ -38,6 +38,9 @@ public class WxMsgValidationcodeController extends BaseController { @Autowired private WxAppinfoService WxAppinfoService; + + @Autowired + private CUserTokenService cUserTokenService; @GetMapping("sendvalidationcode") @ApiImplicitParams({ @@ -90,10 +93,7 @@ public class WxMsgValidationcodeController extends BaseController { wxCUserService.saveOrUpdate(user); wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_PHONE,user); - String key = Constant.tokenPrev + user.getToken(); - if(baseCUserTokenRedisTemplate.hasKey(key)){ - baseCUserTokenRedisTemplate.delete(key); - } + cUserTokenService.removeTokenCache(user.getToken()); } return rd; } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index f454fd297..039862b4f 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -444,6 +444,7 @@ public class WxUserGrantController extends BaseController { if(StringUtils.isNotBlank(scene) && scene.equalsIgnoreCase(Constant.UNDEFINED)) { user.setScene(scene); wxCUserService.updateScene(user); + removeCacheCUser(); } } return new ResultData(); @@ -463,6 +464,7 @@ public class WxUserGrantController extends BaseController { if (!StringUtils.isBlank(latitude)) user.setLatitude(BigDecimal.valueOf(Double.valueOf(latitude))); wxCUserService.updateLBS(user); + removeCacheCUser(); return new ResultData(); } @@ -480,6 +482,7 @@ public class WxUserGrantController extends BaseController { user.setExtraInfo(extraInfo.toJSONString()); } wxCUserService.updateExtInfo(user); + removeCacheCUser(); return new ResultData(); } @@ -573,12 +576,10 @@ public class WxUserGrantController extends BaseController { wxCUserBasicInfo.setSex(user.getGender()); wxCUserBasicInfo.setAvatarUrl(user.getAvatarUrl()); wxCUserBasicInfoService.update(wxCUserBasicInfo); + removeCacheMember(user.getUserId()); } - String key = Constant.tokenPrev + user.getToken(); - if(baseCUserTokenRedisTemplate.hasKey(key)){ - baseCUserTokenRedisTemplate.delete(key); - } + removeCacheCUser(); if(bFirstNickName) { // 首次获取昵称 @@ -587,7 +588,6 @@ public class WxUserGrantController extends BaseController { //增加积分 wxCUserService.addCredit(user, EnumScoreType.WECHAT_PERSION); } - resultMap.put("openId", user.getOpenId()); resultMap.put("unionId", user.getUnionId()); resultMap.put("msg", "获取用户信息成功!"); @@ -678,10 +678,8 @@ public class WxUserGrantController extends BaseController { wxCUserService.saveOrUpdate(user); wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_PHONE, user); } - String key = Constant.tokenPrev + user.getToken(); - if(baseCUserTokenRedisTemplate.hasKey(key)){ - baseCUserTokenRedisTemplate.delete(key); - } + + removeCacheCUser(); if(isFirstPhone) { // 首次授权, 增加成长值及积分 @@ -792,16 +790,23 @@ public class WxUserGrantController extends BaseController { userVo.setScore(0); userVo.setCredit(0); if(user.basicInfoIs()){ - WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(user.getUserId()); - if (wxCUserBasicInfo != null) { - userVo.setScore(wxCUserBasicInfo.getPoins()); - userVo.setCredit(wxCUserBasicInfo.getCredit()); - userVo.setName(wxCUserBasicInfo.getName()); - userVo.setBirthdate(wxCUserBasicInfo.getBirthdate()); - userVo.setSex(wxCUserBasicInfo.getSex()); - userVo.setAddress(wxCUserBasicInfo.getAddress()); - userVo.setStatus(wxCUserBasicInfo.getStatus()); - } + WxCUserBasicInfo wxCUserBasicInfo; + try { + wxCUserBasicInfo = getShortCacheMember(user.getUserId()); + //WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(user.getUserId()); + if (wxCUserBasicInfo != null) { + userVo.setScore(wxCUserBasicInfo.getPoins()); + userVo.setCredit(wxCUserBasicInfo.getCredit()); + userVo.setName(wxCUserBasicInfo.getName()); + userVo.setBirthdate(wxCUserBasicInfo.getBirthdate()); + userVo.setSex(wxCUserBasicInfo.getSex()); + userVo.setAddress(wxCUserBasicInfo.getAddress()); + userVo.setStatus(wxCUserBasicInfo.getStatus()); + } + } catch (Exception e) { + logger.error("userinfo error.",e); + } + } if (userVo.getScore() == null) @@ -842,7 +847,7 @@ public class WxUserGrantController extends BaseController { public ResultData carCount() { WxCUserBasicInfo member; try { - member = getMember(); + member = getCacheMember(); } catch (Exception e) { return new ResultData(Result.ERROR,e.getMessage()); } @@ -974,7 +979,8 @@ public class WxUserGrantController extends BaseController { public ResultData getDiscountInfo() { WxCUserBasicInfo member; try { - member = getMember(); + Long memberId = getMemberId(); + member = wxCUserBasicInfoService.getById(memberId); } catch (Exception e) { return new ResultData(Result.ERROR,e.getMessage()); } diff --git a/mallinkService/src/main/java/com/iformall/service/CUserTokenService.java b/mallinkService/src/main/java/com/iformall/service/CUserTokenService.java index 76984757c..97337db93 100644 --- a/mallinkService/src/main/java/com/iformall/service/CUserTokenService.java +++ b/mallinkService/src/main/java/com/iformall/service/CUserTokenService.java @@ -12,4 +12,6 @@ public interface CUserTokenService { */ BaseCUserEntity getByToken(String token); + void removeTokenCache(String token); + } 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 aeb9716b5..aa73a6da9 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/CUserTokenServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/CUserTokenServiceImpl.java @@ -58,4 +58,13 @@ public class CUserTokenServiceImpl implements CUserTokenService { //logger.info("DB中获取用户信息End-" + token); return baseUser; } + + @Override + public void removeTokenCache(String token) { + String key = Constant.tokenPrev + token; + boolean hasKey = baseCUserTokenRedisTemplate.hasKey(key); + if (hasKey) { + baseCUserTokenRedisTemplate.delete(key); + } + } }