| @@ -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<String, BaseCUserEntity> baseCUserTokenRedisTemplate; | |||
| @Qualifier("cUserBasicInfoRedisTemplate") | |||
| RedisTemplate<String, WxCUserBasicInfo> 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<String, WxCUserBasicInfo> 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(); | |||
| } | |||
| } | |||
| @@ -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()); | |||
| } | |||
| @@ -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<String, String> 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); | |||
| @@ -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()); | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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()); | |||
| } | |||
| @@ -12,4 +12,6 @@ public interface CUserTokenService { | |||
| */ | |||
| BaseCUserEntity getByToken(String token); | |||
| void removeTokenCache(String token); | |||
| } | |||
| @@ -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); | |||
| } | |||
| } | |||
| } | |||