From 57d8d56d4137c7a26146197db95b1141aec2a49c Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Thu, 3 Sep 2020 13:22:00 +0800 Subject: [PATCH] fix wxcuser cache --- .../iformall/controller/BaseController.java | 8 ++- .../controller/WxUserGrantController.java | 56 ++++++++++--------- .../domain/po/base/BaseCUserEntity.java | 2 + .../java/com/iformall/enums/EnumAppPlat.java | 9 +++ .../iformall/service/CUserTokenService.java | 2 +- .../service/cuser/CUserServiceApapter.java | 12 ++++ .../service/cuser/CUserServiceFactory.java | 32 +++++++++++ .../cuser/wx/WxCUserServiceAdapter.java | 29 ++++++++++ .../service/impl/CUserTokenServiceImpl.java | 17 +++--- .../service/share/wx/WxPayShareService.java | 13 +++-- 10 files changed, 137 insertions(+), 43 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/service/cuser/CUserServiceApapter.java create mode 100644 mallinkService/src/main/java/com/iformall/service/cuser/CUserServiceFactory.java create mode 100644 mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java diff --git a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java index c93e18643..514e0a526 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java @@ -120,12 +120,16 @@ public class BaseController { */ public WxCUser getWxCUser() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); - WxCUser user = (WxCUser) request.getAttribute(Constant.REQUEST_WX_C_USER_KEY); + BaseCUserEntity baseuser = (BaseCUserEntity) request.getAttribute(Constant.REQUEST_WX_C_USER_KEY); // Long cUserId = getUserId(); // WxCUser user = wxCUserService.getById(cUserId); - if (user == null) { + if (baseuser == null) { throw new MallinkException(ErrorCode.USER_IS_EMPTY); } + if (baseuser.getRealUser() == null) { + throw new MallinkException(ErrorCode.USER_IS_EMPTY); + } + WxCUser user = (WxCUser) baseuser.getRealUser(); TenantEntity tenantEntity = getTenantInfo(); if (user.getTenantId() == null) { user.setTenantId(tenantEntity.getTenantId()); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index dd23a84b8..f454fd297 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -94,6 +94,9 @@ public class WxUserGrantController extends BaseController { @Autowired WxMallService mallService; + + @Autowired + private CUserTokenService cUserTokenService; /** @@ -398,36 +401,35 @@ public class WxUserGrantController extends BaseController { int score = wxCUserService.actionAfterLogin(newUser, null); resultMap.put("score", score); } - return new ResultData(resultMap); } - @PostMapping("/selectMall") - @ApiOperation(value = "用户选中子广场", notes = "{\"tenantId\":\"string\",\"parentTenantId\":\"string\"}") - public ResultData selectMall(@RequestBody Map map) { - logger.debug(map.toString()); - - String tenantId = map.get("tenantId"); - String parentTenantId = map.get("parentTenantId"); - - if (StringUtils.isBlank(tenantId)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "tenantId不能为空"); - } - if (StringUtils.isBlank(parentTenantId)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "parentTenantId不能为空"); - } - - WxCUser user = getWxCUser(); - if (user.getParentTenantId().equalsIgnoreCase(parentTenantId)) { - HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); - request.setAttribute(Constant.TENANT_ID, tenantId); - request.setAttribute(Constant.PARENT_TENANT_ID, parentTenantId); - user.setTenantId(tenantId); - wxCUserService.saveOrUpdate(user); - } - - return new ResultData(); - } +// @PostMapping("/selectMall") +// @ApiOperation(value = "用户选中子广场", notes = "{\"tenantId\":\"string\",\"parentTenantId\":\"string\"}") +// public ResultData selectMall(@RequestBody Map map) { +// logger.debug(map.toString()); +// +// String tenantId = map.get("tenantId"); +// String parentTenantId = map.get("parentTenantId"); +// +// if (StringUtils.isBlank(tenantId)) { +// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "tenantId不能为空"); +// } +// if (StringUtils.isBlank(parentTenantId)) { +// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "parentTenantId不能为空"); +// } +// +// WxCUser user = getWxCUser(); +// if (user.getParentTenantId().equalsIgnoreCase(parentTenantId)) { +// HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); +// request.setAttribute(Constant.TENANT_ID, tenantId); +// request.setAttribute(Constant.PARENT_TENANT_ID, parentTenantId); +// user.setTenantId(tenantId); +// wxCUserService.saveOrUpdate(user); +// } +// +// return new ResultData(); +// } @PostMapping("/updateScene") @ApiOperation(value = "用户更新scene", notes = "{\"scene\":\"string\"}") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/base/BaseCUserEntity.java b/mallinkService/src/main/java/com/iformall/domain/po/base/BaseCUserEntity.java index a4d014d35..be04e6ccc 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/base/BaseCUserEntity.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/base/BaseCUserEntity.java @@ -27,6 +27,8 @@ public class BaseCUserEntity extends TenantEntity { /*用户过期时间**/ @io.swagger.annotations.ApiModelProperty(value="用户过期时间",name="expireTime") private Date expireTime; + @io.swagger.annotations.ApiModelProperty(value="真实对象如wxCUser",name="expireTime") + private Object realUser; /** * 是否是会员 diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumAppPlat.java b/mallinkService/src/main/java/com/iformall/enums/EnumAppPlat.java index 6f10e07ba..f31f6b0fb 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumAppPlat.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumAppPlat.java @@ -26,4 +26,13 @@ public enum EnumAppPlat { public void setName(String name) { this.name = name; } + + public static EnumAppPlat getByCode(Integer code) { + for (EnumAppPlat e : EnumAppPlat.values()) { + if (e.getCode().intValue() == code.intValue()) { + return e; + } + } + return null; + } } diff --git a/mallinkService/src/main/java/com/iformall/service/CUserTokenService.java b/mallinkService/src/main/java/com/iformall/service/CUserTokenService.java index a4231bebc..76984757c 100644 --- a/mallinkService/src/main/java/com/iformall/service/CUserTokenService.java +++ b/mallinkService/src/main/java/com/iformall/service/CUserTokenService.java @@ -11,5 +11,5 @@ public interface CUserTokenService { * @return */ BaseCUserEntity getByToken(String token); - + } diff --git a/mallinkService/src/main/java/com/iformall/service/cuser/CUserServiceApapter.java b/mallinkService/src/main/java/com/iformall/service/cuser/CUserServiceApapter.java new file mode 100644 index 000000000..c816947ca --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/cuser/CUserServiceApapter.java @@ -0,0 +1,12 @@ +package com.iformall.service.cuser; + +import com.iformall.domain.po.base.BaseCUserEntity; + +/** + * C端用户操作 + * @author alascor + */ +public interface CUserServiceApapter { + + public BaseCUserEntity getToken(String token); +} diff --git a/mallinkService/src/main/java/com/iformall/service/cuser/CUserServiceFactory.java b/mallinkService/src/main/java/com/iformall/service/cuser/CUserServiceFactory.java new file mode 100644 index 000000000..c990f5cfa --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/cuser/CUserServiceFactory.java @@ -0,0 +1,32 @@ +package com.iformall.service.cuser; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.iformall.enums.EnumAppPlat; +import com.iformall.service.cuser.wx.WxCUserServiceAdapter; + +@Service +public class CUserServiceFactory { + + @Autowired + WxCUserServiceAdapter wxCuserService; + + private Map serviceMap ; + + public CUserServiceApapter getCUserService(EnumAppPlat plat) { + return getcUserServiceMap().get(plat); + } + + private Map getcUserServiceMap() { + if (null != serviceMap ) { + return serviceMap; + } + serviceMap = new ConcurrentHashMap(); + serviceMap.put(EnumAppPlat.WX.getCode(), wxCuserService); + return serviceMap; + } +} 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 new file mode 100644 index 000000000..205ac0be7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java @@ -0,0 +1,29 @@ +package com.iformall.service.cuser.wx; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.iformall.domain.po.WxCUser; +import com.iformall.domain.po.base.BaseCUserEntity; +import com.iformall.mapper.WxCUserMapper; +import com.iformall.service.cuser.CUserServiceApapter; + +@Service +public class WxCUserServiceAdapter implements CUserServiceApapter{ + + @Autowired + WxCUserMapper wxCUserMapper; + + @Override + public BaseCUserEntity getToken(String token) { + WxCUser wxCUser = wxCUserMapper.findByToken(token); + BaseCUserEntity entity = new BaseCUserEntity(); + entity.setId(wxCUser.getId()); + entity.setExpireTime(wxCUser.getExpireTime()); + entity.setUserId(wxCUser.getUserId()); + entity.setToken(wxCUser.getToken()); + entity.setRealUser(wxCUser); + return entity; + } + +} 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 dd42161c4..aeb9716b5 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/CUserTokenServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/CUserTokenServiceImpl.java @@ -1,9 +1,10 @@ package com.iformall.service.impl; -import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.base.BaseCUserEntity; +import com.iformall.enums.EnumAppPlat; import com.iformall.mapper.WxCUserMapper; import com.iformall.service.CUserTokenService; +import com.iformall.service.cuser.CUserServiceFactory; import com.iformall.utils.Constant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,6 +26,9 @@ public class CUserTokenServiceImpl implements CUserTokenService { @Autowired @Qualifier("baseCUserTokenRedisTemplate") RedisTemplate baseCUserTokenRedisTemplate; + + @Autowired + CUserServiceFactory cuserFactory; @Override public BaseCUserEntity getByToken(String token) { @@ -44,15 +48,14 @@ public class CUserTokenServiceImpl implements CUserTokenService { return baseUser; } if(token.endsWith(Constant.TOKEN_WXC_END)){ - WxCUser user = wxCUserMapper.findByToken(token); - operations.set(key, user, 3600, TimeUnit.SECONDS); - baseUser = user; + baseUser = cuserFactory.getCUserService(EnumAppPlat.WX).getToken(token); } // 插入缓存 + if (null != baseUser) { + operations.set(key, baseUser, 3600*24*3, TimeUnit.SECONDS); + } //operations.set(key, user, 3600, TimeUnit.SECONDS); - logger.info("DB中获取用户信息End-" + token); + //logger.info("DB中获取用户信息End-" + token); return baseUser; } - - } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/WxPayShareService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/WxPayShareService.java index f7b9242a3..eec4c1cc0 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/WxPayShareService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/WxPayShareService.java @@ -10,6 +10,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.iformall.common.ErrorCode; @@ -301,18 +302,18 @@ public class WxPayShareService extends PayShareBaseAdapterService{ Map returnMap = WxPayment.xmlToMap(response); String return_code = returnMap.get("return_code"); if (!"SUCCESS".equals(return_code)) { - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + returnMap.get("return_msg")); + log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + returnMap.get("return_msg")+":"+JSON.toJSONString(returnMap)); return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), returnMap.get("return_msg"), null); } String result_code = returnMap.get("result_code"); if (!"SUCCESS".equals(result_code)) { - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + returnMap.get("err_code_des")); + log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + returnMap.get("err_code_des")+":"+JSON.toJSONString(returnMap)); return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), returnMap.get("err_code_des"), null); } if (!WxPayment.verifyNotifyHMAC(returnMap, payAccount.getApiKey())) { - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + "verifyNotifyHMAC"); + log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + "verifyNotifyHMAC"+":"+JSON.toJSONString(returnMap)); return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage(), null); } @@ -355,7 +356,7 @@ public class WxPayShareService extends PayShareBaseAdapterService{ Map returnMap = WxPayment.xmlToMap(response); String return_code = returnMap.get("return_code"); if (!"SUCCESS".equals(return_code)) { - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + returnMap.get("return_msg")); + log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + returnMap.get("return_msg")+":"+JSON.toJSONString(returnMap)); return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), returnMap.get("return_msg"), null); } @@ -367,12 +368,12 @@ public class WxPayShareService extends PayShareBaseAdapterService{ receiver.setUpdateTime(new Date()); wxProfitSharingReceiverMapper.updateById(receiver); } - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + returnMap.get("err_code_des")); + log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + returnMap.get("err_code_des")+":"+JSON.toJSONString(returnMap)); return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), returnMap.get("err_code_des"), null); } if (!WxPayment.verifyNotifyHMAC(returnMap, payAccount.getApiKey())) { - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage()); + log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage()+":"+JSON.toJSONString(returnMap)); return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), "verifyNotifyHMAC", null); }