From 7657e1b2fa251a2ea372710ad75cb395a3c0e374 Mon Sep 17 00:00:00 2001
From: hyb <kk_huangyangbo@163.com>
Date: Fri, 30 Jan 2026 07:15:55 +0000
Subject: [PATCH] feat: 新增将两种加密方式合并一个脚本、新增批量修改邮箱功能

---
 测试组/脚本/Change_password/修改数据库的哈希密码和原始密码做桌面客户端源代码.py |   77 ++++++++++++++++++++++++++++++++------
 1 files changed, 64 insertions(+), 13 deletions(-)

diff --git "a/\346\265\213\350\257\225\347\273\204/\350\204\232\346\234\254/Change_password/\344\277\256\346\224\271\346\225\260\346\215\256\345\272\223\347\232\204\345\223\210\345\270\214\345\257\206\347\240\201\345\222\214\345\216\237\345\247\213\345\257\206\347\240\201\345\201\232\346\241\214\351\235\242\345\256\242\346\210\267\347\253\257\346\272\220\344\273\243\347\240\201.py" "b/\346\265\213\350\257\225\347\273\204/\350\204\232\346\234\254/Change_password/\344\277\256\346\224\271\346\225\260\346\215\256\345\272\223\347\232\204\345\223\210\345\270\214\345\257\206\347\240\201\345\222\214\345\216\237\345\247\213\345\257\206\347\240\201\345\201\232\346\241\214\351\235\242\345\256\242\346\210\267\347\253\257\346\272\220\344\273\243\347\240\201.py"
index 9ad0e66..c0db169 100644
--- "a/\346\265\213\350\257\225\347\273\204/\350\204\232\346\234\254/Change_password/\344\277\256\346\224\271\346\225\260\346\215\256\345\272\223\347\232\204\345\223\210\345\270\214\345\257\206\347\240\201\345\222\214\345\216\237\345\247\213\345\257\206\347\240\201\345\201\232\346\241\214\351\235\242\345\256\242\346\210\267\347\253\257\346\272\220\344\273\243\347\240\201.py"
+++ "b/\346\265\213\350\257\225\347\273\204/\350\204\232\346\234\254/Change_password/\344\277\256\346\224\271\346\225\260\346\215\256\345\272\223\347\232\204\345\223\210\345\270\214\345\257\206\347\240\201\345\222\214\345\216\237\345\247\213\345\257\206\347\240\201\345\201\232\346\241\214\351\235\242\345\256\242\346\210\267\347\253\257\346\272\220\344\273\243\347\240\201.py"
@@ -9,12 +9,40 @@
 from datetime import datetime
 from typing import List, Dict, Any, Optional
 import re
+import locale
 from PyQt5 import QtWidgets, QtCore, QtGui
 from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
                              QLabel, QLineEdit, QPushButton, QTextEdit, QListWidget,
                              QListWidgetItem, QCheckBox, QFileDialog, QMessageBox, QProgressBar,
                              QGroupBox, QRadioButton, QButtonGroup, QTabWidget)
 from PyQt5.QtCore import Qt, pyqtSignal, QThread
+
+# 【重要】在程序最开始就设置环境变量,避免任何pandas操作之前出现本地化问题
+# 强制设置为C语言环境,这是最安全的通用设置
+os.environ['LANG'] = 'C'
+os.environ['LC_ALL'] = 'C'
+os.environ['LC_CTYPE'] = 'C'
+os.environ['LC_NUMERIC'] = 'C'
+os.environ['LC_TIME'] = 'C'
+os.environ['LC_COLLATE'] = 'C'
+os.environ['LC_MONETARY'] = 'C'
+os.environ['LC_MESSAGES'] = 'C'
+os.environ['LC_PAPER'] = 'C'
+os.environ['LC_NAME'] = 'C'
+os.environ['LC_ADDRESS'] = 'C'
+os.environ['LC_TELEPHONE'] = 'C'
+os.environ['LC_MEASUREMENT'] = 'C'
+os.environ['LC_IDENTIFICATION'] = 'C'
+os.environ['PANDAS_USAGE_STATS'] = 'False'
+
+# 尝试设置locale,但如果失败也不影响,因为已经设置了环境变量
+try:
+    locale.setlocale(locale.LC_ALL, 'C')
+except Exception:
+    pass
+
+# 不再设置pandas选项,避免因版本差异导致的错误
+# 只保留必要的环境变量设置,确保本地化不会出现问题
 
 # 判断是否是打包后的可执行文件
 if getattr(sys, 'frozen', False):
@@ -86,24 +114,25 @@
             # 遍历所有数据库并刷新
             for db_index in range(db_count):
                 try:
-                    # 切换到指定数据库
-                    temp_client = self.redis_client.connection_pool.get_connection()
-                    temp_client.send_command('SELECT', db_index)
-                    temp_client.read_response()
-
+                    # 创建一个临时Redis客户端来操作指定数据库
+                    import redis
+                    temp_client = redis.Redis(
+                        host=REDIS_HOST,
+                        port=REDIS_PORT,
+                        password=REDIS_PASSWORD,
+                        db=db_index,
+                        decode_responses=True
+                    )
+                    
                     # 获取当前数据库的key数量
-                    temp_client.send_command('DBSIZE')
-                    key_count = temp_client.read_response()
+                    key_count = temp_client.dbsize()
 
                     if key_count > 0:
                         # 清空当前数据库
-                        temp_client.send_command('FLUSHDB')
-                        temp_client.read_response()
+                        temp_client.flushdb()
                         refreshed_dbs += 1
                         total_keys += key_count
                         print(f"已刷新数据库 {db_index}: 清除了 {key_count} 个键")
-
-                    self.redis_client.connection_pool.release(temp_client)
 
                 except Exception as e:
                     print(f"刷新数据库 {db_index} 时出错: {str(e)}")
@@ -140,6 +169,14 @@
     def run(self):
         """主运行方法"""
         try:
+            # 保存日志时可能会出现本地化问题,这里临时设置环境变量
+            original_lang = os.environ.get('LANG')
+            original_lc_all = os.environ.get('LC_ALL')
+            
+            # 强制设置为C语言环境,避免pandas本地化问题
+            os.environ['LANG'] = 'C'
+            os.environ['LC_ALL'] = 'C'
+            
             # 读取 Excel 数据
             try:
                 df = pd.read_excel(self.excel_path)
@@ -196,10 +233,24 @@
 
             # 保存日志
             if self.log_records:
-                pd.DataFrame(self.log_records).to_csv(DEFAULT_LOG_CSV_PATH, index=False, encoding='utf-8-sig')
-                self.log_signal.emit(f"所有更新日志已保存至 {DEFAULT_LOG_CSV_PATH}")
+                try:
+                    pd.DataFrame(self.log_records).to_csv(DEFAULT_LOG_CSV_PATH, index=False, encoding='utf-8-sig')
+                    self.log_signal.emit(f"所有更新日志已保存至 {DEFAULT_LOG_CSV_PATH}")
+                except Exception as e:
+                    self.log_signal.emit(f"保存日志失败:{str(e)}")
             else:
                 self.log_signal.emit("无任何更新记录生成")
+            
+            # 恢复原始环境变量
+            if original_lang:
+                os.environ['LANG'] = original_lang
+            else:
+                os.environ.pop('LANG', None)
+            
+            if original_lc_all:
+                os.environ['LC_ALL'] = original_lc_all
+            else:
+                os.environ.pop('LC_ALL', None)
 
             # 数据库更新完成后,自动刷新Redis缓存
             self.log_signal.emit("开始刷新Redis缓存...")

--
Gitblit v1.9.1