From 0cc73a9ffcdd356e0b797e458b400acfb660da94 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期日, 15 六月 2025 02:26:06 +0800
Subject: [PATCH] 更新用户端功能

---
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java |  121 ++++++++++++++++++++--------------------
 1 files changed, 61 insertions(+), 60 deletions(-)

diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
index 09d779c..403529c 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
@@ -16,6 +16,7 @@
 import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.*;
 import com.stylefeng.guns.modular.system.util.*;
+import com.stylefeng.guns.modular.system.util.qianyuntong.SMSUtil;
 import com.stylefeng.guns.modular.system.warpper.LoginWarpper;
 import com.stylefeng.guns.modular.taxi.model.PaymentRecord;
 import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService;
@@ -28,8 +29,8 @@
 import org.apache.shiro.util.ByteSource;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
-import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.annotation.Resource;
 import javax.crypto.Cipher;
@@ -44,6 +45,7 @@
 import java.security.spec.AlgorithmParameterSpec;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
@@ -56,9 +58,9 @@
 
     @Resource
     private UserActivityInviteMapper userActivityInviteMapper;
-
+    
     @Autowired
-    private RedisUtil redisUtil;
+    private RedisTemplate redisTemplate;
 
     @Autowired
     private ALiSendSms aLiSendSms;
@@ -154,16 +156,17 @@
                 templateCode = "SMS_154775431";//修改密码
                 break;
         }
-        String sData = aLiSendSms.sendSms(phone, "SMS_229715276", "{\"code\":\"" + authCode + "\"}");
-        JSONObject jsonObject = JSON.parseObject(sData);
-        String message = jsonObject.getString("Message");
-        if(!"OK".equals(message)){
-            System.err.println(message);
-            return ResultUtil.error(message);
-        }
+//        String sData = aLiSendSms.sendSms(phone, "SMS_229715276", "{\"code\":\"" + authCode + "\"}");
+//        JSONObject jsonObject = JSON.parseObject(sData);
+//        String message = jsonObject.getString("Message");
+//        if(!"OK".equals(message)){
+//            System.err.println(message);
+//            return ResultUtil.error(message);
+//        }
+        SMSUtil.sendVerifyCode(phone);
         String sms = "短信验证码【" + authCode + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!";
         //发送验证码短信
-        redisUtil.setStrValue(phone, authCode, 5 * 60);//设置五分钟过期
+        redisTemplate.opsForValue().set(phone, authCode, 5, TimeUnit.MINUTES);//设置五分钟过期
         System.out.println("【" + phone + "】" + sms);
         return ResultUtil.success();
     }
@@ -178,7 +181,7 @@
      */
     @Override
     public boolean checkCaptcha(String phone, String code) throws Exception {
-        Object value = redisUtil.getValue(phone);
+        Object value = redisTemplate.opsForValue().get(phone);
         if("1234".equals(code)){
             return true;
         }
@@ -513,7 +516,7 @@
         }
 
         if(type == 2){//小程序登录
-            String value = redisUtil.getValue("appletOpenId");
+            String value = (String) redisTemplate.opsForValue().get("appletOpenId");
             JSONObject jsonObject = null;
             if(ToolUtil.isNotEmpty(value)){
                 jsonObject = JSON.parseObject(value);
@@ -521,7 +524,7 @@
                 jsonObject = new JSONObject();
             }
             jsonObject.put(userInfo.getId().toString(), userInfo.getAppletsOpenId());
-            redisUtil.setStrValue("appletOpenId", jsonObject.toJSONString());
+            redisTemplate.opsForValue().set("appletOpenId", jsonObject.toJSONString());
         }
 
         //调用单点登录的逻辑
@@ -650,7 +653,7 @@
         }
 
         if(type == 2){//小程序登录
-            String value = redisUtil.getValue("appletOpenId");
+            String value = (String) redisTemplate.opsForValue().get("appletOpenId");
             JSONObject jsonObject = null;
             if(ToolUtil.isNotEmpty(value)){
                 jsonObject = JSON.parseObject(value);
@@ -658,7 +661,7 @@
                 jsonObject = new JSONObject();
             }
             jsonObject.put(userInfo.getId().toString(), userInfo.getAppletsOpenId());
-            redisUtil.setStrValue("appletOpenId", jsonObject.toJSONString());
+            redisTemplate.opsForValue().set("appletOpenId", jsonObject.toJSONString());
         }
 
         //调用单点登录的逻辑
@@ -796,7 +799,7 @@
             this.updateById(userInfo1);
 
             if(ToolUtil.isNotEmpty(loginType) && loginType.equals("Applets")){//小程序登录后绑定手机号码
-                String value = redisUtil.getValue("appletOpenId");
+                String value = (String) redisTemplate.opsForValue().get("appletOpenId");
                 JSONObject jsonObject = null;
                 if(ToolUtil.isNotEmpty(value)){
                     jsonObject = JSON.parseObject(value);
@@ -805,7 +808,7 @@
                     jsonObject = new JSONObject();
                 }
                 jsonObject.put(userInfo1.getId().toString(), userInfo.getAppletsOpenId());
-                redisUtil.setStrValue("appletOpenId", jsonObject.toJSONString());
+                redisTemplate.opsForValue().set("appletOpenId", jsonObject.toJSONString());
             }
 
 
@@ -871,7 +874,7 @@
             }else{
                 key = requestHeader;
             }
-            String value = redisUtil.getValue(key);
+            String value = (String) redisTemplate.opsForValue().get(key);
             return null != value ? Integer.valueOf(value) : null;
         }else{
             return null;
@@ -931,7 +934,7 @@
             return ResultUtil.error("支付金额必须大于0元");
         }
         if(payType == 1){//微信支付
-            String value = redisUtil.getValue("appletOpenId");
+            String value = (String) redisTemplate.opsForValue().get("appletOpenId");
             String appletsOpenId = null;
             if(ToolUtil.isNotEmpty(value)){
                 JSONObject jsonObject = JSON.parseObject(value);
@@ -1150,7 +1153,7 @@
         String openid = map.get("openid");
         String unionid = map.get("unionid");
         //将当前小程序openid存储到缓存中用后面的支付时使用
-        String value = redisUtil.getValue("appletOpenId");
+        String value = (String) redisTemplate.opsForValue().get("appletOpenId");
         JSONObject jsonObject = null;
         if(ToolUtil.isNotEmpty(value)){
             jsonObject = JSON.parseObject(value);
@@ -1158,7 +1161,7 @@
             jsonObject = new JSONObject();
         }
         jsonObject.put(userId.toString(), openid);
-        redisUtil.setStrValue("appletOpenId", jsonObject.toJSONString());
+        redisTemplate.opsForValue().set("appletOpenId", jsonObject.toJSONString());
         return ResultUtil.success();
     }
 
@@ -1348,33 +1351,22 @@
         return "JYX" + String.valueOf(num).substring(1);
     }
 
-
     /**
-     * 获取token
-     * @param userInfo
-     * @param password
-     * @return
+     * 单点登录
+     * @param id
      */
-    private String getToken(UserInfo userInfo, String password,String type) throws Exception{
+    private void singlePointLogin(Integer id,String type) throws Exception{
         if(ToolUtil.isEmpty(type))type="APP";
-        //封装请求账号密码为shiro可验证的token
-        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(userInfo.getPhone(), password.toCharArray());
-        String credentials = userInfo.getPassWord();
-        ByteSource credentialsSalt = new Md5Hash(salt);
-        SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(
-                new ShiroUser(), credentials, credentialsSalt, "");
-
-        //校验用户账号密码
-        HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher();
-        md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName);
-        md5CredentialsMatcher.setHashIterations(ShiroKit.hashIterations);
-        boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch(
-                usernamePasswordToken, simpleAuthenticationInfo);
-        String s = JwtTokenUtil.generateToken(String.valueOf(userInfo.getId()));
-        redisUtil.setStrValue(s.substring(s.length() - 32), String.valueOf(userInfo.getId()), 180 * 24 * 60 * 60);
-        redisUtil.setStrValue("USER_"+type+"_" + userInfo.getPhone(), s.substring(s.length() - 32));
-        redisUtil.setStrValue("USER_"+type +"_"+ userInfo.getId(), s);
-        return s;
+        //开始验证当前账号是否在别处登录
+        String value = (String) redisTemplate.opsForValue().get("USER_" + type + "_" + id);
+        if(ToolUtil.isNotEmpty(value)) {//将另外设备上的强迫下线
+            //开始清除redis中无效的数据
+            UserInfo userInfo = userInfoMapper.selectById(id);
+            String key = (String) redisTemplate.opsForValue().get("USER_" + type + "_" + userInfo.getPhone());
+            redisTemplate.delete(key);//删除个人信息数据
+            redisTemplate.delete("USER_" + type + "_" + userInfo.getPhone());//删除后台冻结相关缓存
+            redisTemplate.delete("USER_" + type + "_" + id);//清除存储的token
+        }
     }
 
 
@@ -1438,23 +1430,32 @@
         }
     }
 
-
     /**
-     * 单点登录
-     * @param id
+     * 获取token
+     * @param userInfo
+     * @param password
+     * @return
      */
-    private void singlePointLogin(Integer id,String type) throws Exception{
+    private String getToken(UserInfo userInfo, String password,String type) throws Exception{
         if(ToolUtil.isEmpty(type))type="APP";
-        //开始验证当前账号是否在别处登录
-        String value = redisUtil.getValue("USER_"+type+"_" + id);
-        if(ToolUtil.isNotEmpty(value)){//将另外设备上的强迫下线
-            //开始清除redis中无效的数据
-            UserInfo userInfo = userInfoMapper.selectById(id);
-            String key = redisUtil.getValue("USER_"+type+"_" + userInfo.getPhone());
-            redisUtil.remove(key);//删除个人信息数据
-            redisUtil.remove("USER_"+type+"_" + userInfo.getPhone());//删除后台冻结相关缓存
-            redisUtil.remove("USER_"+type+"_" + id);//清除存储的token
-        }
+        //封装请求账号密码为shiro可验证的token
+        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(userInfo.getPhone(), password.toCharArray());
+        String credentials = userInfo.getPassWord();
+        ByteSource credentialsSalt = new Md5Hash(salt);
+        SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(
+                new ShiroUser(), credentials, credentialsSalt, "");
+    
+        //校验用户账号密码
+        HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher();
+        md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName);
+        md5CredentialsMatcher.setHashIterations(ShiroKit.hashIterations);
+        boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch(
+                usernamePasswordToken, simpleAuthenticationInfo);
+        String s = JwtTokenUtil.generateToken(String.valueOf(userInfo.getId()));
+        redisTemplate.opsForValue().set(s.substring(s.length() - 32), String.valueOf(userInfo.getId()), 180, TimeUnit.DAYS);
+        redisTemplate.opsForValue().set("USER_" + type + "_" + userInfo.getPhone(), s.substring(s.length() - 32));
+        redisTemplate.opsForValue().set("USER_" + type + "_" + userInfo.getId(), s);
+        return s;
     }
 
     @Override

--
Gitblit v1.7.1