فهرست منبع

支付成功后刷新缓存个人信息

mingfu 1 روز پیش
والد
کامیت
cf8837f169

+ 12 - 0
ie-admin/src/main/java/com/ruoyi/web/service/SysLoginService.java

@@ -2,6 +2,7 @@ package com.ruoyi.web.service;
 
 import javax.annotation.Resource;
 
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysUser;
@@ -253,6 +254,17 @@ public class SysLoginService
         return AjaxResult.success();
     }
 
+    public void updateBindStatus(Long userId, Integer bindStatus) {
+        ZuserToken zuserToken = new ZuserToken();
+        zuserToken.setUserIds(Lists.newArrayList(userId));
+        List<ZuserToken> zuserTokenList = zuserTokenService.selectTopZuserTokenList(zuserToken);
+        for (ZuserToken zt : zuserTokenList) {
+            if(StringUtils.isNotNull(zt)){
+                tokenService.updateBindStatus(zt.getToken(), bindStatus);
+            }
+        }
+    }
+
     public AjaxResult resetTokens(List<SysUser> startUserList) {
         List<Long> userIds = startUserList.stream().map(SysUser::getUserId).collect(Collectors.toList());
         return resetTokensByUserIds(userIds);

+ 13 - 1
ie-admin/src/main/java/com/ruoyi/web/service/WeixinPayService.java

@@ -8,18 +8,22 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.text.Convert;
 import com.ruoyi.common.enums.BindStatus;
 import com.ruoyi.common.enums.ECardPayStatus;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.QRCodeUtils;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.dz.domain.DzCards;
 import com.ruoyi.dz.service.IDzCardsService;
 import com.ruoyi.enums.CardDistributeStatus;
 import com.ruoyi.enums.CardStatus;
+import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.service.IZuserTokenService;
 import com.ruoyi.voluntary.domain.BBusiPaymentOrders;
 import com.ruoyi.voluntary.service.IBBusiPaymentOrdersService;
 import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
@@ -69,13 +73,16 @@ public class WeixinPayService {
     @Autowired
     private IDzCardsService cardsService;
     private final ISysUserService sysUserService;
+    private final SysLoginService sysLoginService;
     private final ISysConfigService sysConfigService;
 
 
     public WeixinPayService(@Value("${wxpay.mchid}") String mchId, @Value("${wxpay.key}") String apiV3Key,
-                            @Value("${wxpay.mchsn}") String mchSerialNo, @Value("${wxpay.privateKey}") String privateKey, ISysUserService sysUserService, ISysConfigService sysConfigService) throws Exception {
+                            @Value("${wxpay.mchsn}") String mchSerialNo, @Value("${wxpay.privateKey}") String privateKey, ISysUserService sysUserService
+                            , SysLoginService sysLoginService, ISysConfigService sysConfigService) throws Exception {
         this.mchId = mchId;
         this.sysUserService = sysUserService;
+        this.sysLoginService = sysLoginService;
         this.sysConfigService = sysConfigService;
         // 加载商户私钥(privateKey:私钥字符串)
         // String privateKey = getKey();
@@ -173,6 +180,10 @@ public class WeixinPayService {
         }
         //查找一张未使用的电子卡
         DzCards eCard = cardsService.selectOneECard();
+        if(null == eCard) {
+            log.warn("WxPay 无有效电子卡 {}", orderId);
+            return;
+        }
         //修改电子卡已使用的状态。 电子卡新增时需要直接分配代理商,学生注册时year与outTime需要取b_busi_payment_orders里面的值(20220901已完成)
         eCard.setStatus(CardStatus.Free.getVal());
         eCard.setDistributeStatus(CardDistributeStatus.Assign.getVal());
@@ -192,6 +203,7 @@ public class WeixinPayService {
         upUser.setBindStatus(BindStatus.Pend.code());
         upUser.setCardId(eCard.getCardId());
         sysUserService.updateUserProfile(upUser);
+        sysLoginService.updateBindStatus(upUser.getUserId(), upUser.getBindStatus());
     }
 
     public void processPaySuccess(PayOrderReq payResult) {

+ 13 - 0
ie-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java

@@ -101,6 +101,19 @@ public class TokenService
         delLoginUser(uuid);
     }
 
+    public void updateBindStatus(String token, Integer bindStatus) {
+        Claims claims = parseToken(token);
+        // 解析对应的权限以及用户信息
+        String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
+        LoginUser user;
+        if (StringUtils.isNotEmpty(uuid) && null != (user = redisCache.getCacheObject(getTokenKey(uuid))))
+        {
+            user.getUser().setBindStatus(bindStatus);
+            refreshToken(user);
+        }
+    }
+
+
     /**
      * 删除用户身份信息
      */