From 6634a23a0b7dbe1ae9ae4d33e9e4b820b8095414 Mon Sep 17 00:00:00 2001
From: qfrjava <13402782+qfrjava@user.noreply.gitee.com>
Date: 星期一, 17 三月 2025 10:33:52 +0800
Subject: [PATCH] feat(SMTAIServer):绑定微信账号时获取用户昵称

---
 JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTAIServerControl.java |   88 ++++++++++++++++++++++++++++++++------------
 1 files changed, 64 insertions(+), 24 deletions(-)

diff --git a/JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTAIServerControl.java b/JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTAIServerControl.java
index 3ce3022..7e4b557 100644
--- a/JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTAIServerControl.java
+++ b/JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTAIServerControl.java
@@ -3,10 +3,12 @@
 import java.util.*;
 import java.util.Map.Entry;
 
+import cn.hutool.http.HttpUtil;
 import com.smtaiserver.smtaiserver.weixinLogin.WeChatUtils;
 import org.apache.commons.text.similarity.JaccardSimilarity;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.springframework.boot.configurationprocessor.json.JSONException;
 import org.springframework.web.servlet.ModelAndView;
 
 import com.smtaiserver.smtaiserver.core.SMTAIServerApp;
@@ -211,11 +213,12 @@
     	jsonWr.addKeyValue("sex", recUser.getString("user_sex"));
     	jsonWr.addKeyValue("email", recUser.getString("user_email"));
     	jsonWr.addKeyValue("note", recUser.getString("note"));
-		boolean b = !recUser.getString("weixin_openid").isEmpty();
-		jsonWr.addKeyValue("weixin_openid",b);
+		if (recUser.getString("weixin_nickname")!=null)
+    	jsonWr.addKeyValue("weixin_nikename",recUser.getString("weixin_nickname") );
+		boolean b1 = recUser.getString("weixin_openid") != null;
+		jsonWr.addKeyValue("weixin_openid",b1);
     	jsonWr.addKeyValue("web_login", "Y".equals(recUser.getString("web_login")));
-    	
-	   	return tranReq.returnJson(jsonWr);   	
+	   	return tranReq.returnJson(jsonWr);
     }
     
     public ModelAndView loginSMS(SMTAIServerRequest tranReq) throws Exception 
@@ -298,10 +301,13 @@
      	SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
     	try
     	{
+			boolean is_weixin=false;
 			// 寰俊鎵爜鐧诲綍
 			if (weixinCode != null) {
 				Map<String, String> accessTokenMap = WeChatUtils.getAccessToken(weixinCode);
 				String openid = accessTokenMap.get("openid");
+				String accessToken = accessTokenMap.get("access_token");
+				String nikename = getUserInfo(accessToken, openid);
 
 				if (openid == null || openid.isEmpty()) {
 					return tranReq.returnJsonState(false, "鐧诲綍澶辫触, 鏃犳晥鐨勫井淇′簩缁寸爜", null);
@@ -312,11 +318,14 @@
 				if (userByOpenid.getRowCount() == 0) {
 					return tranReq.returnJsonState(false, "鐧诲綍澶辫触, 璇风粦瀹氳处鍙�", null);
 				}
-
 				// 鑾峰彇鐢ㄦ埛鍚嶅拰瀵嗙爜
 				username = userByOpenid.getRecord(0).getString("user_name");
 				password = userByOpenid.getRecord(0).getString("user_pass");
-
+				db.executeSQL("UPDATE sys_user_info SET weixin_nikcname=? WHERE user_name=?", new Object[] {
+						nikename,
+						username
+				});
+				is_weixin=true;
 			}
 
 
@@ -335,7 +344,7 @@
     		
     		db.executeSQL("INSERT INTO sys_operate_log(op_id, op_type, op_time, op_user, op_note, client_ip, op_from)VALUES(?,?,?,?,?,?, ?)", new Object[] {
     			SMTStatic.newUUID(),
-    			"瀵嗙爜鐧诲綍",
+					is_weixin?"寰俊鐧诲綍":"瀵嗙爜鐧诲綍",
     			new Date(),
     			recs.getRecord(0).getString("user_id"),
     			"鐢ㄦ埛閫氳繃" + client + "鐢ㄥ瘑鐮佺櫥褰�",
@@ -352,8 +361,23 @@
     	}
     	
     }
-   
-    public ModelAndView  getLLMList(SMTAIServerRequest tranReq) throws Exception 
+
+  public static String getUserInfo(String accessToken, String openId) throws JSONException {
+    // 鎷兼帴璇锋眰鍦板潃
+    String requestUrl =
+        "https://api.weixin.qq.com/sns/userinfo?access_token="
+            + accessToken
+            + "&openid="
+            + openId
+            + "&lang=zh_CN";
+    String result = HttpUtil.get(requestUrl);
+    Json.Reader reader = new Json.Reader();
+    Json read = (Json) reader.read(result, null);
+    //    JSONObject jsonObject = new JSONObject(result);
+    return read.safeGetStr("nickname", null);
+  }
+
+    public ModelAndView  getLLMList(SMTAIServerRequest tranReq) throws Exception
     {
     	SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
     	jsonWr.beginArray("llm_list");
@@ -987,19 +1011,35 @@
 
     }
 
-	public ModelAndView userBindingWeChatAccount(SMTAIServerRequest tranReq) throws Exception {
-		String weixinCode = tranReq.convParamToString("weixin_code", true);
-		String userName = tranReq.convParamToString("user_name", true);
-		Map<String, String> accessTokenMap = WeChatUtils.getAccessToken(weixinCode);
-		String openid = accessTokenMap.get("openid");
-
-		if (openid == null || openid.isEmpty()) {
-			return tranReq.returnJsonState(false, "缁戝畾澶辫触, 鏃犳晥鐨勫井淇′簩缁寸爜", null);
-		}
-		try (SMTDatabase db = SMTAIServerApp.getApp().allocDatabase()) {
-			int executeSQL = db.executeSQL("UPDATE sys_user_info set weixin_openid =? where user_name=?", new Object[]{openid, userName});
-		}
-		return tranReq.returnText("缁戝畾鎴愬姛");
-	}
-
+	/**
+	 * 缁戝畾寰俊openid鍜宯ickname
+	 * @param tranReq
+	 * @return
+	 * @throws Exception
+	 */
+  public ModelAndView userBindingWeChatAccount(SMTAIServerRequest tranReq) throws Exception {
+    String weixinCode = tranReq.convParamToString("weixin_code", true);
+    String userName;
+    try (SMTDatabase db = SMTAIServerApp.getApp().allocDatabase()) {
+      String loginUserId = tranReq.getLoginUserId();
+      DBRecords dbRecords =
+          db.querySQL("select * from sys_user_info where user_id =?", new Object[] {loginUserId});
+      if (dbRecords.getRowCount() > 0) {
+        userName = (String) dbRecords.getRecords().get(0).getValue("user_name");
+      } else {
+        return tranReq.returnJsonState(false, "缁戝畾澶辫触, 鐢ㄦ埛淇℃伅寮傚父", null);
+      }
+      Map<String, String> accessTokenMap = WeChatUtils.getAccessToken(weixinCode);
+      String openid = accessTokenMap.get("openid");
+      String accessToken = accessTokenMap.get("access_token");
+      String nikcname = getUserInfo(accessToken, openid);
+      if (openid == null || openid.isEmpty()) {
+        return tranReq.returnJsonState(false, "缁戝畾澶辫触, 鏃犳晥鐨勫井淇′簩缁寸爜", null);
+      }
+          db.executeSQL(
+              "UPDATE sys_user_info set weixin_openid =?,weixin_nickname=?  where user_name=?",
+              new Object[] {openid, nikcname, userName});
+    }
+    return tranReq.returnJsonState(true, "缁戝畾鎴愬姛", null);
+  }
 }

--
Gitblit v1.9.3