# WechatAlarm **Repository Path**: reneryan/wechat-alarm ## Basic Information - **Project Name**: WechatAlarm - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-05 - **Last Updated**: 2025-08-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WeChatAlarm - 微信告警推送系统 ## 项目简介 WeChatAlarm 是一个基于 Python 开发的微信告警推送系统,用于定时从数据库中获取告警信息并通过微信发送给指定联系人或群组。系统运行在 Windows 环境下,使用wxauto技术实现,可以检测和显示微信客户端登录状态,如果未登录,会提示用户登录。系统支持图形界面操作,可实现自动检测微信客户端并定时推送告警信息。 ## 功能特点 1. **微信客户端集成**: - 自动检测Windows微信客户端状态 - 支持自动启动微信客户端 - 监控微信登录状态 2. **数据库连接与查询**: - 定时连接MySQL数据库,查询告警信息 - 获取当前小时内的所有告警记录 - 支持配置查询频率和条件 3. **消息推送**: - 支持配置微信消息接收人(个人联系人和群) - 将告警内容推送给指定的微信联系人或群组 - 支持手动发送消息和定时自动推送 4. **系统管理**: - 简洁直观的图形界面 - 记录发送日志,方便追踪 - 支持手动触发推送 ## 数据库配置信息 系统使用以下数据库配置连接到MySQL: ```json { "database": { "host": "localhost", "port": 3306, "user": "root", "password": "1234!@#$", "database": "xt_dust", "table_name": "t_warning_info", "charset": "utf8mb4" } } ``` ### 告警表结构 系统使用的告警表结构如下(`t_warning_info`): ```sql CREATE TABLE `t_warning_info` ( `record_id` int NOT NULL AUTO_INCREMENT COMMENT '一条具体的报警记录id', `device_name` varchar(150) DEFAULT NULL COMMENT '设备名称', `site_name` varchar(150) DEFAULT NULL COMMENT '工地名称', `warning_type` varchar(20) DEFAULT NULL COMMENT '报警类型', `create_time` timestamp NULL DEFAULT NULL COMMENT '报警创建时间', `content` varchar(300) DEFAULT NULL COMMENT '报警内容', `area` varchar(20) DEFAULT NULL COMMENT '报警区县', `warning_set_id` int DEFAULT NULL COMMENT 'set_id,便于发送时候查找相关信息', PRIMARY KEY (`record_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; ``` ## 安装与使用 ### 环境要求 - Windows 操作系统 - Python 3.8+ - 微信PC客户端(已登录) - MySQL数据库 ### 安装步骤 1. 克隆或下载代码库 2. 运行安装脚本:`start_wxauto.bat`(自动安装所需依赖) 3. 配置`config/config.ini`文件,设置数据库连接信息和微信配置 ### 使用方法 1. 启动微信PC客户端并登录 2. 运行程序:双击`start_wxauto.bat`或执行`python src/main.py` 3. 系统会自动检测微信客户端状态 4. 在"联系人"选项卡中设置接收告警的微信联系人或群组 5. 在"消息"选项卡中可以手动发送消息或查询最新告警 ## 主要功能说明 ### 微信消息接收人配置 系统支持配置多个接收人,包括个人联系人和群组: 1. 在"联系人"选项卡中添加/删除接收人(使用微信中显示的确切名称) 2. 输入联系人名称,点击"添加"按钮 3. 可以选择联系人并点击"删除"按钮移除 4. 完成配置后点击"保存配置"按钮保存 ### 手动发送消息 可以直接向配置的接收人发送即时消息: 1. 在"消息"选项卡中选择接收人 2. 输入消息内容或点击"查询最新告警"自动填充告警信息 3. 点击"发送消息"按钮 ### 日志记录 系统会记录所有发送的消息和操作日志: 1. 在"日志"选项卡可查看详细记录 2. 包含发送时间、接收人、消息内容等信息 3. 可点击"刷新日志"查看最新日志 ## 技术实现 - **GUI框架**:使用Tkinter构建图形界面 - **微信接口**:使用wxauto库控制微信PC客户端 - **数据库连接**:使用PyMySQL - **定时任务**:使用APScheduler ## 常见问题解答 ### 无法检测到微信客户端 - 确保微信客户端已正常启动并登录 - 在"状态"选项卡中点击"启动微信"或"显示微信窗口"按钮 ### 消息发送失败 - 检查接收人名称是否与微信中完全一致 - 确认微信客户端处于正常状态 - 查看日志了解具体错误原因 ### 数据库连接失败 - 检查数据库配置信息是否正确 - 确认MySQL服务是否正常运行 - 尝试在"状态"选项卡中点击"连接"按钮重新连接 ## 会话总结 ### 会话1 - **会话的主要目的**:根据需求创建微信告警推送系统的基础架构 - **完成的主要任务**: - 创建项目基础结构和目录 - 实现配置管理模块 - 实现日志管理模块 - 实现数据库连接和查询模块 - 实现微信登录和消息发送模块 - 实现定时任务调度模块 - 实现图形用户界面 - 创建项目入口文件和配置文件 - 创建启动脚本和Git忽略文件 - **关键决策和解决方案**: - 使用itchat库作为微信接口,同时兼容PyWeChatSpy - 采用Tkinter作为GUI框架,适合Windows环境 - 使用APScheduler管理定时任务 - 采用模块化设计,便于维护和扩展 - **使用的技术栈**: - Python 3.8+ - itchat/PyWeChatSpy - PyMySQL - APScheduler - Tkinter - Pillow - ConfigParser - **修改了哪些文件**: - 创建了项目基础结构和所有核心模块 - src/utils/config.py:配置管理模块 - src/utils/logger.py:日志管理模块 - src/database/mysql.py:数据库连接模块 - src/wechat/login.py:微信登录模块 - src/wechat/message.py:微信消息模块 - src/scheduler/tasks.py:定时任务模块 - src/ui/main_window.py:主窗口模块 - src/ui/login_window.py:登录窗口模块 - src/main.py:主程序入口 - config/config.ini:配置文件 - requirements.txt:依赖列表 - start.bat:Windows启动脚本 - .gitignore:Git忽略文件 - README.md:项目说明文档 ### 会话2 - **会话的主要目的**:解决微信告警推送系统的Python环境和微信登录问题 - **完成的主要任务**: - 修复了src/wechat/login.py中的global变量声明顺序问题 - 完善了src/ui/login_window.py的登录窗口实现 - 创建了运行脚本run_conda_local.bat - 创建了安装依赖脚本install_requirements.bat - **关键决策和解决方案**: - 修复了global变量声明位置,确保在使用前声明 - 优化了微信登录流程,增加了全局标志避免重复登录 - 使用队列和线程安全机制处理UI更新 - 禁用了热登录功能,解决登录超时问题 - **使用的技术栈**: - Python 3.8+ (通过Conda环境管理) - Tkinter (UI界面) - itchat 1.3.10 (稳定版微信接口) - 线程安全队列 (Queue) - PIL/Pillow (图像处理) - **修改了哪些文件**: - src/wechat/login.py:修复global声明顺序问题 - src/ui/login_window.py:完善登录窗口实现 - run_conda_local.bat:创建Conda环境运行脚本 - install_requirements.bat:创建安装依赖脚本 ### 会话3 - **会话的主要目的**:根据官方的wxauto文档修正微信自动化使用方式 - **完成的主要任务**: - 修改了微信登录模块,使用wxauto v2版本的API - 优化了消息发送模块,支持新版API的直接发送方式 - 添加了消息监听功能和消息获取增强功能 - 创建了wxauto v2版本的测试脚本 - 更新了启动脚本,支持选择不同的测试方式 - **关键决策和解决方案**: - 采用wxauto v2版本API的推荐使用方式 - 保留了向下兼容的代码,确保在不同版本下都能运行 - 使用新版API的who参数直接发送消息,提高效率 - 增加了对Message对象的处理,支持新版API返回的消息格式 - **使用的技术栈**: - Python 3.8+ - wxauto v2版本 - Windows API (win32gui, win32con) - **修改了哪些文件**: - src/wechat/login.py:更新微信登录和状态监测方法 - src/wechat/message.py:增强消息发送和接收功能 - test_wxauto_v2.py:新建v2版本测试脚本 - start_wxauto.bat:更新启动脚本,增加选项 - README.md:更新文档 ### 会话4 - **会话的主要目的**:改进微信登录窗口功能和修复环境问题 - **完成的主要任务**: - 修复了批处理脚本编码问题和乱码问题 - 创建了一站式安装和运行脚本 - 添加了手动刷新微信二维码功能 - 解决了关闭登录窗口后无法重新登录的问题 - **关键决策和解决方案**: - 创建正确编码的批处理脚本,解决乱码问题 - 实现一站式安装脚本,自动安装Miniconda和所有依赖 - 添加reset_login_status方法,允许重置登录状态 - 添加refresh_qrcode方法,支持手动刷新二维码 - 改进登录窗口UI,添加刷新和取消按钮 - **使用的技术栈**: - Python 3.8 (Conda环境) - Tkinter (UI界面) - itchat-uos (微信接口) - 批处理脚本 (环境配置) - **修改了哪些文件**: - src/wechat/login.py:添加重置登录状态和刷新二维码功能 - src/ui/login_window.py:改进登录窗口,添加刷新和取消按钮 - src/ui/main_window.py:改进登录窗口管理逻辑 - 创建install_miniconda.bat:安装Miniconda脚本 - 创建install_dependencies.bat:安装依赖脚本 - 创建run_conda_fixed.bat:修复编码问题的运行脚本 - 创建install_and_run.bat:一站式安装和运行脚本 ### 会话5 - **会话的主要目的**:修改告警联系人获取方式和消息发送逻辑 - **完成的主要任务**: - 取消了手动输入告警联系人的功能 - 修改了自定义消息模块,接收人固定为"文件传输助手" - 实现了从数据库三表联表查询获取告警联系人的功能 - 修改了告警发送逻辑,每条告警单独发送 - **关键决策和解决方案**: - 根据告警的warning_set_id从t_warning_wx和t_wx_set表中查询对应的联系人 - 移除了UI中的告警联系人设置部分 - 简化了自定义消息发送功能,固定接收人为"文件传输助手" - 取消了告警合并发送功能,每条告警单独发送,只发送content字段内容 - **使用的技术栈**: - Python 3.8+ - Tkinter (UI界面) - wxauto (微信自动化) - MySQL (数据库查询) - **修改了哪些文件**: - src/scheduler/tasks.py:修改告警查询和发送逻辑,添加联表查询获取联系人功能 - src/ui/main_window.py:移除告警联系人设置部分,修改自定义消息模块 - README.md:更新文档 ### 会话6 - **会话的主要目的**:解决微信重复登录和已登录状态识别问题 - **完成的主要任务**: - 修复了"itchat has already logged in"问题 - 添加了强制注销功能,解决登录冲突 - 改进了登录窗口UI,增加强制注销按钮 - 添加了主界面的注销功能 - 优化了登录状态管理逻辑 - **关键决策和解决方案**: - 添加force_logout方法,彻底清理登录状态 - 修改登录逻辑,检测并处理已登录状态 - 添加登录缓存文件清理功能 - 实现UI层的强制注销功能,提升用户体验 - 重置itchat内部状态,解决重复登录问题 - **使用的技术栈**: - Python 3.8 (Conda环境) - Tkinter (UI界面) - itchat-uos (微信接口) - 线程安全和状态管理 - **修改了哪些文件**: - src/wechat/login.py:添加强制注销功能,完善登录状态管理 - src/ui/login_window.py:改进登录窗口,添加强制注销按钮 - src/ui/main_window.py:添加注销功能,优化状态更新逻辑 ### 会话7 - **会话的主要目的**:清理环境,使用本地Python环境替代Conda环境 - **完成的主要任务**: - 清理了所有与Conda环境相关的批处理脚本和目录 - 创建了适用于本地Python环境的安装和运行脚本 - 修复了itchat登录超时问题 - 简化了整体环境配置流程 - **关键决策和解决方案**: - 使用本地Python环境替代Conda环境,简化部署 - 保留了itchat登录超时问题的修复方案 - 创建了一键安装和运行脚本,提升用户体验 - 清理了所有无用的临时文件和缓存 - **使用的技术栈**: - Python 3.8+ (本地环境) - itchat/itchat-uos (微信接口) - 批处理脚本 (环境配置) - **修改了哪些文件**: - 创建clean_environment.bat:清理环境脚本 - 创建setup.bat:本地环境安装脚本 - 创建run.bat:简化运行脚本 - 创建fix_itchat_login.bat:修复itchat登录问题 - 创建install_and_run.bat:一键安装和运行脚本 - 更新README.md:添加环境清理和使用说明 ### 会话8 - **会话的主要目的**:修复微信告警推送系统中的itchat库错误 - **完成的主要任务**: - 解决了itchat库login.py文件中的缩进错误问题 - 卸载原有的itchat库并安装itchat-uos替代版本 - 修改src/wechat/login.py文件适配新的API - 更新了requirements.txt文件以使用itchat-uos - 清理了多余的修复脚本文件 - **关键决策和解决方案**: - 使用fix_install.py脚本自动化修复过程 - 改进itchat库的导入方式,使用importlib安全导入 - 使用全局itchat实例替代new_instance()方法 - 改进错误处理和属性检查,增强系统稳定性 - 修改消息发送逻辑以适配itchat-uos的API变化 - **使用的技术栈**: - Python 3.8+ (本地环境) - itchat-uos (微信API替代版本) - importlib (动态导入模块) - Tkinter (UI界面) - **修改了哪些文件**: - src/wechat/login.py:修改以适配itchat-uos - src/wechat/message.py:更新消息发送方法 - requirements.txt:更新依赖为itchat-uos - 删除了多余的fix_*.ps1文件 - README.md:更新会话总结 ### 会话9 - **会话的主要目的**:将微信告警推送系统从已不可用的itchat/itchat-uos库切换到wxauto库 - **完成的主要任务**: - 清理了项目中所有与itchat相关的修复脚本文件 - 更新了requirements.txt,将itchat-uos替换为wxauto - 重写了src/wechat/message.py以使用wxauto发送消息 - 重写了src/wechat/login.py以使用wxauto管理微信客户端 - 修改了登录窗口UI,适配PC微信客户端 - 创建了测试脚本test_wxauto.py - **关键决策和解决方案**: - 使用wxauto库控制本地PC微信客户端,替代不可用的Web接口 - 实现了微信客户端自动启动和状态检测功能 - 改进了消息发送方式,支持直接发送到PC微信联系人/群组 - 使用线程和状态检查,保持微信客户端连接状态 - 简化了登录流程,直接使用已登录的PC微信客户端 - **使用的技术栈**: - Python 3.8+ (本地环境) - wxauto (微信PC客户端操作库) - PyWin32 (Windows API接口) - 线程和队列 (状态管理) - Tkinter (UI界面) - **修改了哪些文件**: - src/wechat/login.py:重写为使用wxauto管理微信客户端 - src/wechat/message.py:重写为使用wxauto发送消息 - src/ui/login_window.py:修改UI以适配PC微信客户端 - src/ui/main_window.py:调整登录流程 - requirements.txt:更新依赖为wxauto - 创建test_wxauto.py:测试脚本 - 删除了各种fix_*修复脚本文件 ### 会话10 - **会话的主要目的**:测试wxauto库功能并优化微信告警推送系统 - **完成的主要任务**: - 测试了wxauto库与PC微信客户端的交互功能 - 修复了login_window.py中的语法错误 - 实现了wxauto的消息发送功能 - 创建了新的启动脚本start_wxauto.bat - 修改了微信注销功能为关闭微信客户端 - 添加了wxauto使用说明文档 - **关键决策和解决方案**: - 成功实现了向文件传输助手和联系人发送消息 - 优化了登录窗口的错误处理 - 使用Close方法替代原有的logout方法 - 提供了wxauto使用的详细说明和常见问题解答 - 添加了自动检测微信客户端的功能 - **使用的技术栈**: - Python 3.8+ (本地环境) - wxauto (微信PC客户端操作库) - Windows批处理脚本 - 错误处理和异常管理 - **修改了哪些文件**: - src/ui/login_window.py:修复语法错误 - src/ui/main_window.py:修改注销功能 - src/wechat/login.py:添加force_logout方法 - 创建start_wxauto.bat:自动化启动脚本 - README.md:添加wxauto使用说明 - test_wxauto.py:测试并验证wxauto功能 ### 会话11 - **会话的主要目的**:重新设计和简化微信告警推送系统的GUI界面 - **完成的主要任务**: - 重写了README.md文件,明确新的功能需求和使用方法 - 规划了简化版GUI界面的设计和功能 - 明确了微信消息接收人配置功能 - 添加了手动发送消息功能说明 - 完善了日志记录和查看功能 - **关键决策和解决方案**: - 采用更简洁的界面设计,专注于核心功能 - 保留关键功能:配置接收人、手动发送消息、记录日志 - 提供清晰的用户操作指引 - 优化wxauto与微信客户端的交互方式 - **使用的技术栈**: - Python 3.8+ (本地环境) - wxauto (微信PC客户端操作库) - Tkinter (简化后的UI界面) - Windows批处理脚本 - **修改了哪些文件**: - README.md:完全重写,明确新的功能需求和使用方法 ### 会话12 - **会话的主要目的**:实现新版简化GUI界面并补充数据库配置信息 - **完成的主要任务**: - 重新设计并实现了简化版的主窗口界面 - 优化了微信客户端检测和控制功能 - 实现了联系人管理功能 - 实现了消息发送和查询功能 - 添加了数据库配置信息到README文件 - **关键决策和解决方案**: - 使用选项卡界面组织不同功能模块 - 简化操作流程,提高用户体验 - 实现了联系人管理和保存功能 - 添加了查询最新告警的功能 - 详细记录了数据库配置和表结构 - **使用的技术栈**: - Python 3.8+ (本地环境) - wxauto (微信PC客户端操作库) - Tkinter (Tab风格的UI界面) - PyMySQL (数据库连接) - 线程安全的UI更新 - **修改了哪些文件**: - src/ui/main_window.py:完全重写,实现简化版GUI - README.md:添加数据库配置信息和表结构说明 ### 会话13 - **会话的主要目的**:重新设计微信告警推送系统的GUI界面 - **完成的主要任务**: - 删除了旧的GUI界面相关文件 - 创建了全新的主窗口界面 - 实现了系统状态显示(微信状态、监控状态、数据库状态) - 添加了监控控制功能(启动/停止监控、立即检查、显示微信) - 实现了调度设置功能(配置检查分钟) - 添加了告警联系人管理功能 - 实现了运行日志实时显示 - **关键决策和解决方案**: - 使用单一窗口设计,避免多窗口问题 - 采用分区布局,清晰展示不同功能模块 - 实现了后台线程监控微信状态和数据库连接 - 使用线程安全的日志显示机制 - 添加了实时日志文件监控功能 - **使用的技术栈**: - Python 3.8+ (本地环境) - wxauto (微信PC客户端操作库) - Tkinter (UI界面) - 线程和队列 (后台任务和状态监控) - APScheduler (定时任务调度) - **修改了哪些文件**: - src/ui/main_window.py:创建全新的主窗口界面 - 删除了src/ui/login_window.py等旧文件 ### 会话14 - **会话的主要目的**:优化微信告警推送系统的告警检测逻辑 - **完成的主要任务**: - 修改了告警检测逻辑,从检测最近15分钟改为检测全天告警 - 添加了已发送告警记录功能,避免重复发送同一条告警 - 实现了按日期管理已发送告警记录 - 添加了自动清理旧告警记录的功能 - **关键决策和解决方案**: - 使用SQL的DATE函数筛选当天告警 - 采用JSON文件存储已发送告警记录 - 按日期分组存储告警ID,便于管理和清理 - 实现了7天自动清理机制,避免记录文件过大 - 优化了日志输出,提供更清晰的告警状态信息 - **使用的技术栈**: - Python 3.8+ (本地环境) - JSON (存储告警记录) - MySQL (数据库查询) - 文件IO操作 (记录管理) - **修改了哪些文件**: - src/scheduler/tasks.py:修改告警检测逻辑,添加已发送告警记录功能 ### 会话15 - **会话的主要目的**:完善微信告警推送系统的功能需求 - **完成的主要任务**: - 添加了"是否重复发送当日消息"配置项和功能实现 - 清理了config.ini中未使用的配置项 - 增加了告警级别选择功能(全部告警、中高级告警、仅高级告警) - 实现了自定义发送消息功能,可以指定接收人和发送内容 - 优化了告警检测逻辑,支持按告警级别过滤 - 修复了show_wechat方法中的错误,增强了兼容性 - **关键决策和解决方案**: - 使用JSON文件存储已发送告警记录,避免重复发送 - 实现了按告警级别筛选的SQL查询条件 - 使用单选按钮和复选框实现直观的配置界面 - 使用下拉框和文本框实现自定义消息发送功能 - 添加了动态更新配置的功能,实现实时生效 - 优化了wxauto库的兼容性,处理不同版本API差异 - **使用的技术栈**: - Python 3.8+ (本地环境) - Tkinter (UI界面组件) - wxauto (微信PC客户端操作库) - JSON (存储告警记录) - MySQL (按条件查询告警) - **修改了哪些文件**: - config/config.ini:添加配置项,清理未使用配置 - src/scheduler/tasks.py:实现告警级别筛选和重复发送控制 - src/ui/main_window.py:添加告警级别选择和自定义消息功能 - src/wechat/login.py:修复show_wechat方法,增强兼容性 ### 会话16 - **会话的主要目的**:优化微信告警推送系统的功能和界面 - **完成的主要任务**: - 移除了告警级别相关配置和功能,改为日志级别配置 - 增加了日志级别设置功能,支持动态调整日志级别 - 调整了窗口大小和布局,从800x600增加到900x700,改善界面自适应性 - 优化了日志模块,支持动态更新日志级别 - 重构了日志处理器设置逻辑,提高了代码可维护性 - **关键决策和解决方案**: - 使用下拉框实现日志级别选择,支持DEBUG、INFO、WARNING、ERROR、CRITICAL五个级别 - 增加了日志级别动态调整功能,无需重启应用即可生效 - 优化了窗口布局,确保所有控件都能完整显示 - 重构了日志模块,支持运行时更新日志级别 - 使用配置文件存储日志级别设置,保证重启后设置仍然有效 - **使用的技术栈**: - Python 3.8+ (本地环境) - Tkinter (UI界面组件) - Python logging模块 (日志管理) - ConfigParser (配置管理) - **修改了哪些文件**: - config/config.ini:移除告警级别配置,保留日志级别配置 - src/scheduler/tasks.py:移除告警级别相关代码,保留重复发送功能 - src/ui/main_window.py:增加日志级别设置,调整窗口大小和布局 - src/utils/logger.py:重构日志模块,支持动态更新日志级别 ### 会话17 - **会话的主要目的**:优化界面布局和修复微信客户端相关问题 - **完成的主要任务**: - 优化了界面布局,将状态信息放在一行 - 调整了"重复发送当日告警"位置,放在保存设置按钮后面 - 增加了运行日志区域高度,提高可读性 - 修复了微信客户端掉线重新登录后的窗口句柄错误问题 - 改进了显示微信窗口功能,使用Win32 API直接激活窗口 - 增强了消息发送模块的容错能力,添加自动重试机制 - **关键决策和解决方案**: - 使用Win32 API (win32gui和win32con) 直接操作微信窗口,解决显示问题 - 实现微信窗口句柄有效性检测,确保窗口句柄可用 - 添加消息发送失败自动重试机制,提高消息发送成功率 - 优化界面布局,使所有控件合理分布,提升用户体验 - 增加窗口默认大小,从900x700增加到900x700 - **使用的技术栈**: - Python 3.8+ (本地环境) - Tkinter (UI界面布局优化) - PyWin32 (Win32 API调用) - wxauto (微信PC客户端操作) - 异常处理和重试机制 - **修改了哪些文件**: - src/ui/main_window.py:优化界面布局和组件排列 - src/wechat/login.py:修复微信窗口句柄问题,改进显示微信窗口功能 - src/wechat/message.py:增强消息发送模块的容错能力,添加自动重试机制 ### 会话18 - **会话的主要目的**:优化日志记录和显示功能 - **完成的主要任务**: - 修改了日志加载逻辑,每次启动不再加载所有历史日志 - 增加了系统启动分隔线,便于区分不同启动时的日志 - 实现了日志级别动态更新,修改配置文件后立即生效 - 统一了日志记录路径,将wxauto_logs目录下的日志合并到主日志中 - 增加了日志显示区域高度,从15行增加到40行 - 配置wxauto库使用系统统一的日志目录 - **关键决策和解决方案**: - 使用文件大小定位,只从文件末尾开始监控新增日志 - 添加启动分隔线,清晰标记每次系统启动 - 实现日志处理器级别动态更新,确保所有处理器使用相同级别 - 使用符号链接技术,将wxauto日志重定向到主日志目录 - 合并现有wxauto日志到主日志,保留历史记录 - **使用的技术栈**: - Python 3.8+ (本地环境) - Python logging模块 (日志管理) - 文件操作和符号链接 (日志统一) - 线程安全的日志监控 - 动态配置更新 - **修改了哪些文件**: - src/ui/main_window.py:修改日志加载逻辑,增加日志显示区域高度 - src/utils/logger.py:实现日志级别动态更新和日志统一 - src/wechat/login.py:配置wxauto库使用系统统一的日志目录 ### 会话19 - **会话的主要目的**:优化日志目录结构,移除不必要的wxauto_logs目录 - **完成的主要任务**: - 移除了对wxauto_logs目录的依赖,统一使用logs目录 - 删除了不必要的日志合并代码,简化了日志模块 - 创建了清理wxauto_logs目录的脚本和批处理文件 - 配置wxauto库直接使用系统的logs目录 - 添加了自动清理wxauto_logs目录的代码 - **关键决策和解决方案**: - 移除_unify_logs方法,不再需要合并wxauto_logs目录下的日志 - 使用shutil.rmtree和os.unlink清理wxauto_logs目录 - 创建独立的清理脚本,方便手动清理 - 在程序启动时自动检测并清理wxauto_logs目录 - 直接配置wxauto库使用logs目录,避免生成额外的日志文件 - **使用的技术栈**: - Python 3.8+ (本地环境) - 文件操作和目录管理 - 批处理脚本 - 异常处理 - **修改了哪些文件**: - src/utils/logger.py:移除_unify_logs方法和相关代码 - src/wechat/login.py:修改wxauto日志配置,添加自动清理wxauto_logs目录的代码 - clean_logs.py:创建清理wxauto_logs目录的脚本 - clean_wxauto_logs.bat:创建运行清理脚本的批处理文件 ### 会话20 - **会话的主要目的**:统一日志记录机制,确保UI日志与系统日志同步 - **完成的主要任务**: - 修改了`main_window.py`中的`log`方法,使其同时使用`logger.py`中的日志对象 - 为各种操作添加了适当级别的日志记录 - 确保错误和警告同时记录到UI和系统日志文件中 - 保持日志记录的一致性和完整性 - **关键决策和解决方案**: - 在UI日志方法中添加对系统日志对象的调用 - 为错误情况添加`logger.error`调用 - 为警告情况添加`logger.warning`调用 - 保留原有UI日志显示功能,同时增强系统日志记录 - **使用的技术栈**: - Python 3.8+ (本地环境) - Python logging模块 (日志管理) - Tkinter (UI界面) - 多线程日志处理 - **修改了哪些文件**: - src/ui/main_window.py:修改日志记录方法,统一日志记录机制 ### 会话21 - **会话的主要目的**:重构日志记录系统,完全统一日志记录机制 - **完成的主要任务**: - 重构了`main_window.py`中的`log`方法,支持不同级别的日志记录 - 将所有直接调用`self.log`的地方替换为先调用`logger.xxx`再调用`self.log` - 修改了`_start_log_monitor`方法,直接更新UI而不再通过`self.log`记录文件日志 - 为每个日志记录添加了适当的日志级别 - **关键决策和解决方案**: - 将`self.log`方法改为接受日志级别参数,并根据级别调用对应的`logger`方法 - 优化了日志文件监控逻辑,避免重复记录日志 - 直接操作UI文本框更新日志显示,提高效率 - 保持日志记录的一致性,确保所有日志都通过`logger`对象记录 - **使用的技术栈**: - Python 3.8+ (本地环境) - Python logging模块 (日志管理) - Tkinter (UI界面) - 多线程日志处理 - **修改了哪些文件**: - src/ui/main_window.py:重构日志记录方法,统一日志记录机制 ### 会话22 - **会话的主要目的**:进一步优化日志系统,移除冗余UI日志更新代码 - **完成的主要任务**: - 注释掉所有`_update_ui_log`方法的调用,因为日志文件监控已能自动显示日志 - 调整主窗口尺寸从900x700增加到1000x800,提供更大的显示空间 - 修复了代码中可能存在的缩进错误 - 测试了系统运行状态,确保所有功能正常工作 - **关键决策和解决方案**: - 利用日志文件监控机制自动更新UI日志显示,无需额外调用 - 保留`_update_ui_log`方法但注释掉所有调用,便于需要时恢复 - 增大窗口尺寸,提升用户体验 - 通过运行测试验证系统功能正常 - **使用的技术栈**: - Python 3.8+ (本地环境) - Python logging模块 (日志管理) - Tkinter (UI界面) - 多线程日志处理 - **修改了哪些文件**: - src/ui/main_window.py:注释掉所有`_update_ui_log`方法调用,调整窗口尺寸 ### 会话23 - **会话的主要目的**:修复数据库连表查询错误和优化告警发送逻辑 - **完成的主要任务**: - 修复了连表查询SQL语句中的列名错误(将`ww.vx_set_id`修正为`ww.wx_set_id`) - 优化了告警发送逻辑,只有发送成功才记录为已发送 - 移除了提前记录告警ID的代码,避免发送失败时误记录 - 改进了日志输出,使用统一的告警ID变量 - **关键决策和解决方案**: - 根据数据库表结构修正了连表查询SQL语句中的列名 - 修改了告警记录逻辑,只在发送成功后才添加到已发送列表 - 优化了代码结构,提高可读性和可维护性 - **使用的技术栈**: - Python 3.8+ - MySQL (数据库查询) - SQL联表查询 - **修改了哪些文件**: - src/scheduler/tasks.py:修复连表查询SQL语句,优化告警发送和记录逻辑 - README.md:更新文档 ### 会话24 - **会话的主要目的**:优化告警发送逻辑,按warning_set_id分组发送消息 - **完成的主要任务**: - 实现了按warning_set_id分组告警数据的功能 - 优化了告警发送逻辑,每组告警按批次发送,每批最多10条 - 添加了批量告警消息构建功能,将同一warning_set_id的告警合并发送 - 改进了已发送告警记录逻辑,统一在发送完成后记录 - **关键决策和解决方案**: - 创建了_group_alarms_by_warning_set_id方法,实现按告警类型分组 - 实现了_build_batch_message方法,构建批量告警消息 - 优化了发送流程,减少了消息发送次数,提高效率 - 改进了告警记录逻辑,集中管理已发送告警ID - **使用的技术栈**: - Python 3.8+ - 字典和列表处理 - 批量数据处理 - **修改了哪些文件**: - src/scheduler/tasks.py:添加按warning_set_id分组功能,优化告警发送逻辑 - README.md:更新文档 ### 会话25 - **会话的主要目的**:修复"立即检查"功能中联系人成功率显示问题 - **完成的主要任务**: - 修复了"立即检查"功能中发送成功联系人个数显示为0/0的问题 - 添加了联系人成功率统计功能,分别计算总联系人数和成功发送的联系人数 - 优化了结果信息显示,同时显示组成功率和联系人成功率 - 更新了UI中的结果展示逻辑,确保正确显示联系人成功率 - **关键决策和解决方案**: - 添加了total_contacts和success_contacts计数器,准确统计联系人数量 - 只在第一批消息发送成功时计数联系人,避免重复计算 - 更新了返回结果字典中的字段,提供更详细的成功率信息 - 修改了UI中的结果展示逻辑,同时显示组成功率和联系人成功率 - **使用的技术栈**: - Python 3.8+ - Tkinter (UI界面) - 多线程和异步处理 - **修改了哪些文件**: - src/scheduler/tasks.py:添加联系人成功率统计功能,更新结果字典 - src/ui/main_window.py:修改结果显示逻辑,正确显示联系人成功率 - README.md:更新文档 ### 会话26 - **会话的主要目的**:优化"重复发送当日告警"功能和UI文本 - **完成的主要任务**: - 修改了"重复发送当日告警"开关的实现逻辑,使其在切换时立即生效 - 将"立即检查"按钮文本和相关方法名改为"立即检测" - 无论"重复发送当日告警"开关如何,都记录所有发送的告警ID - 在查询时根据开关状态决定是否过滤已发送的告警 - **关键决策和解决方案**: - 修改了告警检测逻辑,无论开关状态如何都记录已发送告警 - 移除了在切换开关时清空已发送记录的功能 - 统一了UI界面和代码中的"检查"/"检测"术语,提高一致性 - 优化了用户体验,使功能开关变化立即生效 - **使用的技术栈**: - Python 3.8+ - Tkinter (UI界面) - JSON (存储告警记录) - **修改了哪些文件**: - src/scheduler/tasks.py:修改告警检测逻辑和记录机制 - src/ui/main_window.py:更新按钮文本和方法名 ### 会话27 - **会话的主要目的**:优化自定义消息发送功能 - **完成的主要任务**: - 修改自定义消息部分,添加接收人输入框 - 设置接收人默认值为"文件传输助手" - 允许用户自定义输入消息接收人 - 移除了TaskScheduler中的send_custom_message方法,改为直接使用wechat_message.send_text - **关键决策和解决方案**: - 添加接收人输入框,提高灵活性 - 保留默认接收人为"文件传输助手",方便快速测试 - 优化消息发送逻辑,直接使用底层发送接口 - 简化代码结构,移除冗余方法 - **使用的技术栈**: - Python 3.8+ - Tkinter (UI界面) - wxauto (微信消息发送) - **修改了哪些文件**: - src/ui/main_window.py:添加接收人输入框,修改消息发送逻辑 - src/scheduler/tasks.py:移除send_custom_message方法 ### 会话28 - **会话的主要目的**:优化告警消息显示格式和内容 - **完成的主要任务**: - 根据warning_set_id从t_warning_set表中获取description字段 - 修改告警消息第一行,将"检测到{len(alarms)}条告警"替换为description字段值 - 为每条告警内容前添加序号(1,2,3...),提高可读性 - 添加了查询description的方法,增强告警信息的可读性 - **关键决策和解决方案**: - 创建_get_warning_description方法,根据warning_set_id查询告警描述 - 修改_build_batch_message方法,使用description替换默认消息标题 - 为告警内容添加序号,提高消息可读性 - 保留默认消息标题作为备选,确保在无法获取description时仍能正常显示 - **使用的技术栈**: - Python 3.8+ - MySQL (数据库查询) - 字符串格式化 - **修改了哪些文件**: - src/scheduler/tasks.py:添加_get_warning_description方法,修改_build_batch_message方法 - README.md:更新文档 ### 会话29 - **会话的主要目的**:修改告警记录和发送策略 - **完成的主要任务**: - 修改已发送告警记录规则:只记录最后(最大)一个record_id,发送时只发送这个record_id之后的记录 - 修改发送策略:发送失败的消息不重复发送,只记录日志 - 优化告警ID记录机制,支持人工修改最大record_id - 重构相关方法以支持新的记录和发送策略 - **关键决策和解决方案**: - 将记录结构从Dict[str, List[int]]修改为Dict[str, int],只存储每天最大的record_id - 修改_add_sent_alarm方法,只在新ID大于已存在ID时更新 - 修改_is_alarm_sent方法,通过比较ID大小判断是否已发送 - 优化发送逻辑,发送失败时记录详细日志但不重试发送 - 无论发送是否成功,都记录处理过的最大告警ID - **使用的技术栈**: - Python 3.8+ - JSON (存储告警记录) - 日志管理 - **修改了哪些文件**: - src/scheduler/tasks.py:修改已发送告警记录结构和相关方法,优化发送策略 ## 生成可执行文件 为了方便使用,本项目支持生成独立的可执行文件,无需安装Python环境即可运行。 ### 构建步骤 1. 确保已安装Python 3.8或更高版本 2. 运行`build.bat`批处理文件,该文件会自动: - 安装所需依赖 - 安装PyInstaller打包工具 - 执行打包过程 - 复制必要的配置文件和资源 ### 运行可执行文件 构建完成后,可执行文件位于`dist/WeChatAlarm/WeChatAlarm.exe`。直接双击即可运行微信告警推送系统。 ### 注意事项 - 首次运行时会自动创建配置文件 - 请确保运行前已安装并登录微信客户端 - 日志文件会保存在可执行文件同目录下的`logs`文件夹中 - 如需修改配置,可编辑`config/config.ini`文件 ## 会话总结2025-07-10 ### 主要目的 解决日志中发现的任务执行问题和数据库连接异常。 ### 完成的主要任务 1. 分析日志中出现的 "maximum number of running instances reached (1)" 和 "数据库连接异常: (1040, 'ny connections')" 错误 2. 修复任务调度器中的任务堆积问题 3. 增强数据库连接管理机制,避免连接池耗尽 ### 关键决策和解决方案 1. 在定时任务中添加 `max_instances=1` 配置,限制同一任务最大并行实例数为1 2. 使用 try-finally 结构确保任务执行结束后释放数据库连接 3. 为数据库连接添加超时设置和重试机制,特别对"too many connections"错误进行专门处理 4. 改进数据库查询方法,移除每次查询前重新建立连接的机制,改为检查连接有效性并提供查询重试 ## 会话总结2025-07-11 ### 主要目的 优化微信窗口检查机制,减少微信窗口自动弹出的频率。 ### 完成的主要任务 1. 增加微信状态检查的时间间隔,减少检查频率 2. 修改微信窗口显示逻辑,区分手动和自动检查场景 3. 实现智能窗口显示控制,只在手动操作时显示微信窗口 ### 关键决策和解决方案 1. 将初始检查间隔从30秒增加到120秒(2分钟) 2. 登录状态下检查间隔增加到300秒(5分钟) 3. 使用调用栈分析,识别调用来源,只在手动操作时显示窗口 4. 增加异常处理,确保COM环境正确释放 5. 添加日志级别控制,减少日志输出量 ### 使用的技术栈 - Python - Win32 API (窗口控制) - 调用栈分析 - 线程管理 ### 修改的文件 - src/wechat/login.py - 优化微信窗口检查和显示逻辑