| @@ -1,6 +1,7 @@ | |||
| package com.iformall.config; | |||
| import com.iformall.domain.po.PushLimit; | |||
| import com.iformall.domain.po.WxCUser; | |||
| import com.iformall.domain.po.WxScoreRules; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| @@ -86,4 +87,21 @@ public class RedisConfig extends CachingConfigurerSupport { | |||
| return template; | |||
| } | |||
| @Bean("cuserTokenRedisTemplate") | |||
| public RedisTemplate<String, WxCUser> getCUserTokenRedisTemplate(RedisConnectionFactory connectionFactory) { | |||
| RedisTemplate<String, WxCUser> template = new RedisTemplate<String, WxCUser>(); | |||
| Jackson2JsonRedisSerializer<WxScoreRules> j = new Jackson2JsonRedisSerializer<WxScoreRules>(WxScoreRules.class); | |||
| // value值的序列化 | |||
| template.setValueSerializer(j); | |||
| template.setHashKeySerializer(j); | |||
| // key的序列化 | |||
| template.setKeySerializer(new StringRedisSerializer()); | |||
| template.setHashKeySerializer(new StringRedisSerializer()); | |||
| template.setConnectionFactory(connectionFactory); | |||
| return template; | |||
| } | |||
| } | |||
| @@ -149,8 +149,7 @@ public class WxUserGrantController extends BaseController { | |||
| try { | |||
| WxCUser user1 = wxCUserService.getByOpenId(user); | |||
| if (user1 != null) { | |||
| user1.createToken(new Date()); | |||
| token = user1.getToken(); | |||
| token = user1.createToken(new Date()); | |||
| resultMap.put("token", token); | |||
| request.setAttribute(AuthorizationInterceptor.LOGIN_USER_KEY, user1.getId()); | |||
| @@ -181,8 +180,7 @@ public class WxUserGrantController extends BaseController { | |||
| wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_LOGIN,user1); | |||
| } else { | |||
| user.setTenantId(wxAppinfo.getTenantId()); | |||
| user.createToken(new Date()); | |||
| token = user.getToken(); | |||
| token = user.createToken(new Date()); | |||
| user.setRegisterIp(ipaddress); | |||
| if (user.getSceneAddress() == null || user.getSceneAddress().equals("undefined")) | |||
| @@ -223,6 +221,11 @@ public class WxUserGrantController extends BaseController { | |||
| return new ResultData(resultMap); | |||
| } | |||
| /** | |||
| * WxAppInfo更新accessToken | |||
| * @param wxAppinfo | |||
| * @param wxMaService | |||
| */ | |||
| private void updateAppAccessToken(WxAppinfo wxAppinfo, WxMaService wxMaService) { | |||
| try { | |||
| String accessToken = wxMaService.getAccessToken(true); | |||
| @@ -44,9 +44,6 @@ public class CouponSendSchedule { | |||
| @Autowired | |||
| private WxCUserBasicInfoMapper wxCUserBasicInfoMapper; | |||
| @Autowired | |||
| private WxCUserMapper wxCUserMapper; | |||
| @Autowired | |||
| private WxCouponSendMapper wxCouponSendMapper; | |||
| @@ -461,15 +461,14 @@ public class WxCUser implements Serializable { | |||
| } | |||
| } | |||
| public void createToken(Date currentDate) { | |||
| public String createToken(Date currentDate) { | |||
| if (expireTime == null || expireTime.getTime() < currentDate.getTime()) | |||
| { | |||
| //生成一个token | |||
| String token = UUID.randomUUID().toString(); | |||
| this.token = UUID.randomUUID().toString(); | |||
| //过期时间 | |||
| Date expireTime = new Date(currentDate.getTime() + BaseConstant.EXPIRE * 1000); | |||
| setToken(token); | |||
| setExpireTime(expireTime); | |||
| this.expireTime = new Date(currentDate.getTime() + BaseConstant.EXPIRE * 1000); | |||
| } | |||
| return this.token; | |||
| } | |||
| } | |||
| @@ -5,7 +5,6 @@ import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.domain.dto.WxCUserBasicInfoDto; | |||
| import com.iformall.domain.po.WxCUser; | |||
| import com.iformall.domain.po.WxScoreHistory; | |||
| import com.iformall.enums.EnumScoreType; | |||
| import com.iformall.mapper.WxCUserMapper; | |||
| import com.iformall.mapper.WxCouponOrderMapper; | |||
| @@ -13,14 +12,17 @@ import com.iformall.mapper.WxScoreHistoryMapper; | |||
| import com.iformall.mapper.WxScoreRulesMapper; | |||
| import com.iformall.service.WxCUserService; | |||
| import com.iformall.service.WxScoreRulesService; | |||
| import com.iformall.utils.BaseConstant; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.beans.factory.annotation.Qualifier; | |||
| import org.springframework.data.redis.core.RedisTemplate; | |||
| import org.springframework.data.redis.core.ValueOperations; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.Date; | |||
| import java.util.HashMap; | |||
| import java.util.List; | |||
| import java.util.concurrent.TimeUnit; | |||
| @Service | |||
| public class WxCUserServiceImpl implements WxCUserService { | |||
| @@ -42,6 +44,11 @@ public class WxCUserServiceImpl implements WxCUserService { | |||
| WxScoreHistoryMapper wxScoreHistoryMapper; | |||
| @Autowired | |||
| @Qualifier("cuserTokenRedisTemplate") | |||
| RedisTemplate<String, WxCUser> cUserTokenRedisTemplate; | |||
| @Override | |||
| public PageInfo<WxCUser> listAsPage(WxCUser record, Integer pageIndex, Integer pageSize) { | |||
| return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCUserMapper.findList(record)); | |||
| @@ -59,7 +66,22 @@ public class WxCUserServiceImpl implements WxCUserService { | |||
| @Override | |||
| public WxCUser getByToken(String token) { | |||
| return wxCUserMapper.findByToken(token); | |||
| logger.info("获取用户信息start ..."); | |||
| String key = "token_" + token; | |||
| ValueOperations<String, WxCUser> operations = cUserTokenRedisTemplate.opsForValue(); | |||
| // 缓存 | |||
| boolean hasKey = cUserTokenRedisTemplate.hasKey(key); | |||
| if(hasKey) { | |||
| // 从缓存获取用户信息 | |||
| WxCUser user = operations.get(key); | |||
| return user; | |||
| } | |||
| WxCUser user = wxCUserMapper.findByToken(token); | |||
| // 插入缓存 | |||
| operations.set(key, user, BaseConstant.EXPIRE, TimeUnit.SECONDS); | |||
| return user; | |||
| } | |||
| @Override | |||
| @@ -79,6 +101,13 @@ public class WxCUserServiceImpl implements WxCUserService { | |||
| user.setUpdateDate(curr); | |||
| ret = wxCUserMapper.updateByPrimaryKeySelective(user); | |||
| } | |||
| String key = "token_" + user.getToken(); | |||
| // 缓存已存在,删除 | |||
| boolean hasKey = cUserTokenRedisTemplate.hasKey(key); | |||
| if(hasKey) { | |||
| cUserTokenRedisTemplate.delete(key); | |||
| logger.info("更新用户,从缓存中删除用户 token >> " + user.getToken()); | |||
| } | |||
| return ret; | |||
| } | |||
| @@ -39,6 +39,9 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| @Autowired | |||
| WxCUserMapper wxCUserMapper; | |||
| @Autowired | |||
| WxCUserService wxCUserService; | |||
| @Autowired | |||
| WxPayAccountMapper wxPayAccountMapper; | |||
| @@ -1299,7 +1302,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| } else { | |||
| userQ.setIsSubscribe(EnumUserIsSubscribe.YES.getCode()); | |||
| } | |||
| wxCUserMapper.insertSelective(userQ); | |||
| wxCUserService.saveOrUpdate(userQ); | |||
| } else { | |||
| userQ.setId(user1.getId()); | |||
| userQ.setUpdateDate(curDate); | |||
| @@ -1308,7 +1311,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||
| } else { | |||
| userQ.setIsSubscribe(EnumUserIsSubscribe.YES.getCode()); | |||
| } | |||
| wxCUserMapper.updateByPrimaryKeySelective(userQ); | |||
| wxCUserService.saveOrUpdate(userQ); | |||
| } | |||
| record.setcUserId(userQ.getId()); | |||
| @@ -143,7 +143,7 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { | |||
| if (!list.isEmpty()) { | |||
| wxCUser = list.get(0); | |||
| wxCUser.setScore(scoreNumber); | |||
| wxCUserMapper.updateByPrimaryKeySelective(wxCUser); | |||
| wxCUserService.saveOrUpdate(wxCUser); | |||
| } | |||
| } | |||
| } | |||
| @@ -163,7 +163,7 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { | |||
| WxCUser wxCUser = new WxCUser(); | |||
| wxCUser.setId(user.getId()); | |||
| wxCUser.setScore(user.getPoins()); | |||
| wxCUserMapper.updateByPrimaryKeySelective(wxCUser); | |||
| wxCUserService.saveOrUpdate(wxCUser); | |||
| } | |||
| } | |||
| @@ -351,7 +351,7 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService { | |||
| wxCUser.setTenantId(userInfo.getTenantId()); | |||
| wxCUser.setPhone(userInfo.getPhone()); | |||
| wxCUser.setScore(score); | |||
| wxCUserMapper.updateByPrimaryKeySelective(wxCUser); | |||
| wxCUserService.saveOrUpdate(wxCUser);; | |||
| } | |||
| // 2. 记录历史 | |||