From b37e8ce581fe8fbfa994be2eedaa0ebe11b143e2 Mon Sep 17 00:00:00 2001 From: v6ole Date: Fri, 9 Jan 2026 15:17:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CRON_README.md | 161 - README_企业微信.md | 308 - __pycache__/app.cpython-313.pyc | Bin 1148 -> 0 bytes .../__pycache__/__main__.cpython-313.pyc | Bin 357 -> 0 bytes .../__pycache__/main.cpython-313.pyc | Bin 21176 -> 21412 bytes gx_gp_monitor/config/config.yaml | 2 +- .../core/__pycache__/database.cpython-313.pyc | Bin 25136 -> 33285 bytes .../core/__pycache__/models.cpython-313.pyc | Bin 13066 -> 13113 bytes gx_gp_monitor/core/database.py | 229 +- gx_gp_monitor/core/models.py | 1 + gx_gp_monitor/cron_crawl.py | 67 +- gx_gp_monitor/main.py | 15 +- gx_gp_monitor/notification/wechat_backup.py | 555 -- .../__pycache__/__init__.cpython-313.pyc | Bin 197 -> 0 bytes .../__pycache__/scheduler.cpython-313.pyc | Bin 14537 -> 0 bytes .../__pycache__/postgresql.cpython-313.pyc | Bin 20120 -> 27025 bytes gx_gp_monitor/storage/postgresql.py | 161 + .../message_handler.cpython-313.pyc | Bin 48007 -> 53475 bytes gx_gp_monitor/wechat/message_handler.py | 260 +- .../wechat/message_handler.py.backup | 970 --- gx_gp_monitor/wechat/message_handler_clean.py | 824 --- logs/cron.log | 4 - logs/gx_gp_monitor.log | 4249 +----------- logs/uwsgi-wechat.log | 5709 ----------------- old/WeChatService.py | 625 -- old/config.yaml | 104 - old/main/Main_script.py | 44 - old/main/utils.py | 50 - old/main/web_crawler.py | 191 - old/main/write_to_excel.py | 84 - onu.md | 8 - test_latest_news_flow.py | 65 - test_menu_fix.py | 115 - test_wechat_menu.py | 168 - uwsgi-wechat.pid | 1 - uwsgi_wechat.ini | 4 +- 企业微信消息示例.md | 77 - 37 files changed, 644 insertions(+), 14407 deletions(-) delete mode 100644 CRON_README.md delete mode 100644 README_企业微信.md delete mode 100644 __pycache__/app.cpython-313.pyc delete mode 100644 gx_gp_monitor/__pycache__/__main__.cpython-313.pyc delete mode 100644 gx_gp_monitor/notification/wechat_backup.py delete mode 100644 gx_gp_monitor/scheduler/__pycache__/__init__.cpython-313.pyc delete mode 100644 gx_gp_monitor/scheduler/__pycache__/scheduler.cpython-313.pyc delete mode 100644 gx_gp_monitor/wechat/message_handler.py.backup delete mode 100644 gx_gp_monitor/wechat/message_handler_clean.py delete mode 100644 logs/cron.log delete mode 100644 logs/uwsgi-wechat.log delete mode 100644 old/WeChatService.py delete mode 100644 old/config.yaml delete mode 100755 old/main/Main_script.py delete mode 100755 old/main/utils.py delete mode 100755 old/main/web_crawler.py delete mode 100755 old/main/write_to_excel.py delete mode 100644 onu.md delete mode 100644 test_latest_news_flow.py delete mode 100644 test_menu_fix.py delete mode 100644 test_wechat_menu.py delete mode 100644 uwsgi-wechat.pid delete mode 100644 企业微信消息示例.md diff --git a/CRON_README.md b/CRON_README.md deleted file mode 100644 index 7a65d0a..0000000 --- a/CRON_README.md +++ /dev/null @@ -1,161 +0,0 @@ -# 定时搜索脚本使用说明 - -## 脚本功能 - -`cron_crawl.py` 是一个用于定时搜索广西政府采购网公告的脚本,具有以下功能: - -- ✅ 从 `gx_gp_monitor/config/config.yaml` 读取关键词配置 -- ✅ 搜索最新的公告(数据库中没有的) -- ✅ 自动筛选匹配关键词的公告 -- ✅ 将筛选结果保存到数据库 -- ✅ 以卡片形式发送企业微信通知 - -## 文件结构 - -``` -project/ -├── venv/ # Python虚拟环境 -├── gx_gp_monitor/ -│ ├── cron_crawl.py # 定时搜索主脚本 -│ └── config/config.yaml # 配置文件 -├── run_cron_crawl.sh # 启动脚本(自动激活虚拟环境) -├── CRON_README.md # 使用说明 -└── cron_example.txt # crontab配置示例 -``` - -## 使用方法 - -### 1. 使用启动脚本(推荐) - -```bash -# 在项目根目录下运行 -./run_cron_crawl.sh -``` - -### 2. 直接运行Python脚本 - -```bash -cd gx_gp_monitor -python cron_crawl.py -``` - -### 3. 使用crontab定时运行 - -在Ubuntu系统上设置定时任务: - -```bash -# 编辑crontab -crontab -e - -# 添加定时任务(例如:每小时执行一次) -0 * * * * cd /home/v6ole/pyproject/GX-gp-notify && ./run_cron_crawl.sh >> /home/v6ole/pyproject/GX-gp-notify/logs/cron.log 2>&1 - -# 或者每30分钟执行一次 -*/30 * * * * cd /home/v6ole/pyproject/GX-gp-notify && ./run_cron_crawl.sh >> /home/v6ole/pyproject/GX-gp-notify/logs/cron.log 2>&1 - -# 或者每天早上9点执行 -0 9 * * * cd /home/v6ole/pyproject/GX-gp-notify && ./run_cron_crawl.sh >> /home/v6ole/pyproject/GX-gp-notify/logs/cron.log 2>&1 -``` - -**注意**: 脚本会自动激活项目中的虚拟环境(`venv`目录),无需手动处理虚拟环境。 - -### 3. 脚本输出示例 - -``` -=== 定时搜索任务完成 === -总共搜索: 1300 条公告 -新增公告: 5 条 -关键词筛选: 2 条 -保存到数据库: 2 条 -企业微信通知: 成功 -``` - -## 配置说明 - -### 关键词配置 - -在 `gx_gp_monitor/config/config.yaml` 中配置关键词: - -```yaml -crawler: - keyword: ["大化", "信息化"] # 支持多个关键词 -``` - -### 企业微信配置 - -确保企业微信配置正确: - -```yaml -wechat_app: - enabled: true # 必须启用 - corp_id: "your_corp_id" - agent_id: "your_agent_id" - secret: "your_secret" -``` - -### 数据库配置 - -确保数据库配置正确: - -```yaml -database: - enabled: true # 必须启用 - host: "your_db_host" - port: 5432 - name: "your_db_name" - user: "your_db_user" - password: "your_db_password" -``` - -## 日志查看 - -脚本运行日志保存在 `logs/gx_gp_monitor.log`,crontab输出日志保存在您配置的文件中。 - -```bash -# 查看最新日志 -tail -f logs/gx_gp_monitor.log - -# 查看crontab日志 -tail -f /home/v6ole/pyproject/GX-gp-notify/logs/cron.log -``` - -## 注意事项 - -1. **权限设置**:确保脚本有执行权限 - ```bash - chmod +x cron_crawl.py - ``` - -2. **Python环境**:确保Python环境和依赖已正确安装 - ```bash - pip install -r gx_gp_monitor/requirements.txt - ``` - -3. **路径配置**:crontab中的路径必须是绝对路径 - -4. **时区设置**:确保系统时区设置正确,影响定时任务执行时间 - -5. **资源消耗**:搜索过程中会消耗一定的CPU和网络资源,建议在非高峰期运行 - -## 故障排除 - -### 脚本无法运行 -- 检查Python环境和依赖 -- 检查配置文件路径 -- 检查数据库连接 - -### 企业微信通知失败 -- 检查企业微信配置 -- 检查网络连接 -- 查看企业微信应用权限 - -### 数据库连接失败 -- 检查数据库配置 -- 检查数据库服务状态 -- 检查网络连接 - -### crontab不执行 -- 检查crontab语法 -- 检查脚本路径 -- 检查用户权限 -- 查看系统日志:`sudo grep CRON /var/log/syslog` diff --git a/README_企业微信.md b/README_企业微信.md deleted file mode 100644 index ff2ed7d..0000000 --- a/README_企业微信.md +++ /dev/null @@ -1,308 +0,0 @@ -# 广西政府采购网公告监控系统 - 企业微信集成 - -## 概述 - -本系统已集成企业微信功能,支持: -- 企业微信应用消息推送 -- 回调服务器处理用户交互 -- 应用菜单管理 -- 实时搜索和智能筛选 - -## 配置要求 - -### 1. 企业微信应用配置 - -在 `config/config.yaml` 中配置企业微信信息: - -```yaml -# 企业微信应用配置 -wechat_app: - enabled: true # 是否启用企业微信通知 - corp_id: "ww69e8e44636f47780" # 企业ID - agent_id: "1000007" # 应用ID - secret: "SmelCwKFoL0E9ATWFzr-w7gsfXBTN72lT1UqnNd0HpI" # 应用Secret - token: "DmvL98cAF6x9CFtQZwqD2emGL8S7HxA" # Token - encoding_aes_key: "yAc4OoSCP92YTefHXYfw27WeG9oF11W9d6nw6QYlU3D" # 消息加密Key - port: 18001 # 服务端口 -``` - -### 2. 企业微信管理后台设置 - -1. **设置回调URL** - - 在企业微信管理后台的应用设置中 - - 设置回调URL为:`http://your-server-ip:18001/api/v1/wechat/callback` - - Token和EncodingAESKey需要与配置文件一致 - -2. **设置应用可见范围** - - 配置应用对哪些部门或成员可见 - - 确保有基础接口权限 - -## 功能说明 - -### 1. 消息推送 - -系统会在以下情况下自动推送消息到企业微信: - -- **搜索完成通知**:每次执行搜索后,推送筛选结果 -- **关键词匹配通知**:发现匹配关键词的公告时推送 -- **系统状态通知**:系统启动、错误等重要事件 - -消息格式参考 `企业微信消息示例.md` - -### 2. 应用菜单 - -系统提供全新的菜单结构,包含三大功能模块: - -#### 🚀 监控操作 -- **立即搜索**:执行一次完整的公告搜索,获取最新数据 -- **今日统计**:查看今日公告统计信息和数据概览 -- **关键词搜索**:输入关键词搜索相关公告 -- **最新公告**:选择公告来源查看该来源的最新10条公告 - -#### ⚙️ 系统管理 -- **关键词管理**:查看当前系统监控的关键词 -- **系统状态**:查看各组件运行状态和系统信息 -- **清理缓存**:清理系统缓存,提升性能 - -#### ❓ 帮助 -- **使用说明**:查看详细功能介绍和使用指南 - -### 3. 文本交互 - -支持丰富的文本命令交互: - -#### 🔍 搜索功能 -``` -# 直接关键词搜索 -大化 # 搜索"大化"相关公告 -信息化 政府采购 # 搜索多个关键词 - -# 关键词命令 -关键词 大化 # 明确指定关键词搜索 -搜索 政府采购 # 搜索政府采购相关公告 -``` - -#### 📊 数据查询 -``` -# 统计信息 -总结 # 查看今日统计 -统计 # 查看系统统计信息 - -# 最新数据 -最新公告 # 选择公告来源查看最新公告 -最新 # 同上 - -# 公告来源选择 (发送数字) -1 # 查看采购公告 -2 # 查看结果公告 -3 # 查看更正公告 -全部 # 查看全部公告 -``` - -#### 🛠️ 系统管理 -``` -# 系统状态 -系统状态 # 查看系统运行状态 -状态 # 同上 - -# 缓存管理 -清理缓存 # 清理系统缓存 -清理 # 同上 - -# 关键词管理 -查看关键词 # 查看当前监控关键词 -添加关键词 [关键词] # 添加新关键词(开发中) -删除关键词 [关键词] # 删除关键词(开发中) -``` - -#### ℹ️ 信息查询 -``` -# 帮助信息 -帮助 # 显示详细使用说明 -help # 同上 - -# 系统信息 -关于系统 # 查看系统详细信息 -关于 # 同上 - -# 联系方式 -联系我们 # 查看联系信息 -联系 # 同上 -``` - -#### 💡 智能交互 -- **自动识别**:直接发送关键词即可搜索 -- **多关键词**:用空格分隔多个关键词 -- **模糊匹配**:支持标题和内容搜索 -- **实时反馈**:所有操作都有即时响应 - -## 部署和运行 - -### 1. 安装依赖 - -```bash -pip install -r gx_gp_monitor/requirements.txt -``` - -### 2. 测试功能 - -```bash -# 测试企业微信模块 -python test_wechat_server.py -``` - -### 3. 启动回调服务器 - -#### 方法1:使用 uWSGI(推荐生产环境) - -```bash -# 使用启动脚本 -./start_uwsgi_server.sh - -# 或直接启动 -uwsgi --ini uwsgi_wechat.ini -``` - -#### 方法2:使用 Gunicorn - -```bash -# 使用启动脚本 -./start_wechat_server.sh - -# 或直接启动 -gunicorn --bind 0.0.0.0:18001 app:app -``` - -#### 方法3:开发环境启动 - -```bash -# 使用专用启动脚本 -python wechat_server.py - -# 或使用主程序 -python gx_gp_monitor/main.py wechat-server -``` - -### 4. 管理菜单 - -```bash -# 创建菜单 -python gx_gp_monitor/main.py wechat-menu --action create - -# 删除菜单 -python gx_gp_monitor/main.py wechat-menu --action delete - -# 获取菜单信息 -python gx_gp_monitor/main.py wechat-menu --action get - -# 测试菜单操作 -python gx_gp_monitor/main.py wechat-menu --action test -``` - -### 5. 正常搜索 - -```bash -# 执行搜索(会自动推送消息) -python gx_gp_monitor/main.py crawl -``` - -## 技术实现 - -### 1. 回调服务器 - -- **框架**:Flask -- **端口**:18001 -- **路径**:`/api/v1/wechat/callback` -- **功能**:处理企业微信的回调消息和URL验证 - -### 2. 消息加解密 - -- **库来源**:企业微信官方Python示例 -- **位置**:`gx_gp_monitor/wechat/WXBizMsgCrypt.py` -- **功能**:实现消息加密、解密和签名验证 - -### 3. 消息处理 - -- **事件处理**:关注、取消关注、菜单点击 -- **文本处理**:关键词搜索、手动命令 -- **响应格式**:XML格式的企业微信消息 - -### 4. 菜单管理 - -- **创建菜单**:自动创建预定义菜单 -- **删除菜单**:清理现有菜单 -- **获取菜单**:查看当前菜单配置 - -## 故障排除 - -### 1. 回调URL验证失败 - -- 检查Token和EncodingAESKey是否正确配置 -- 确保服务器可从公网访问 -- 检查端口18001是否开放 - -### 2. 消息推送失败 - -- 检查企业微信应用配置(corp_id, agent_id, secret) -- 确认应用有消息发送权限 -- 查看应用可见范围设置 - -### 3. 菜单创建失败 - -- 检查应用是否有菜单管理权限 -- 确认Token有效且有管理员权限 - -### 4. 导入错误 - -```bash -# 确保依赖已安装 -pip install flask pycryptodome - -# 测试导入 -python -c "from gx_gp_monitor.wechat.callback_server import WeChatCallbackServer; print('OK')" -``` - -## 日志查看 - -系统会记录详细的企业微信操作日志: - -```bash -# 查看日志 -tail -f logs/gx_gp_monitor.log | grep wechat -``` - -## 安全注意事项 - -1. **保护配置文件**:不要将包含密钥的配置文件提交到版本控制 -2. **网络安全**:确保回调服务器只接受来自企业微信的请求 -3. **权限控制**:合理设置应用可见范围和权限 -4. **定期更新**:定期更新企业微信应用Secret - -## 开发说明 - -### 项目结构 - -``` -gx_gp_monitor/wechat/ -├── __init__.py # 模块初始化 -├── callback_server.py # Flask回调服务器 -├── message_handler.py # 消息处理逻辑 -├── menu_manager.py # 菜单管理 -├── WXBizMsgCrypt.py # 企业微信加密库 -└── ierror.py # 错误码定义 -``` - -### 扩展功能 - -如需添加新功能,可以: - -1. 在 `message_handler.py` 中添加新的消息处理逻辑 -2. 在 `menu_manager.py` 中修改菜单配置 -3. 在 `callback_server.py` 中添加新的路由 - -## 联系支持 - -如有问题,请检查: -1. 系统日志 -2. 企业微信管理后台错误信息 -3. 网络连接和配置 diff --git a/__pycache__/app.cpython-313.pyc b/__pycache__/app.cpython-313.pyc deleted file mode 100644 index 27d8ff505892db1ef56dac37c66e962bd477cfe8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1148 zcmbVKT}u>E7(Qoa_G?yK?E@l0CzC)>w-U3Y5);X?gq({?7RGHoyN>SeOlN0ny=xOu zgRH>5Ei{w#qAW=av%>lVn+Dm5AZW*3?~J{Py6KEx7)3I}_ zm${fa8dXd)86|)$!<((P9JXSs09@7_P`o$-*ydxl02glo?s5RI-IbODM9yVj1B#4% zo0e#+nrPa?&>aTP{8t97-MmV+1gXlhoKFDRKxDAJ!tP@hyBE3~G|BdrB-VdO@?Sn) zu#e3KUYKVKAED9s_(U}R?3VuWQT$b(e*13naqDc)Mg2mbesfSbE*?B2=;Pgq?m@k6 zK)=+_QxqTX62c3U#KX?H*1^P!kwn+9ey^3EGfu6^gJhitBe#YmkK6A*<@Pj7ZdDDh zp+kLm!dP_wN%HAHsX&>WSN5auQ94Qvk0ttOh&%e&i2kTE+21zXd2Y6+Gyd{Ua`alM zpvtNs2SXZNDHLGA7m<9b6i|Y)reG&Vr^7Nv0Tk3ig<3?LGk%2ddc$!seaCJ6`S^-& z2C+y|gW{1S!iHKxgi%6-Q{7r4F;feKHDYOyanKz=#41TfM9R$l#j@}$@-(`&!j%)L z>Om jgz4oDFzGN?@a*Jr5NPuQzS0FtKk;CW?Oo;O0Ik diff --git a/gx_gp_monitor/__pycache__/__main__.cpython-313.pyc b/gx_gp_monitor/__pycache__/__main__.cpython-313.pyc deleted file mode 100644 index ffa7281c45a3526ebc984c824283d1e0c4734ef3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmey&%ge<81ZpaAnNxxEV-N=hn4pZ$20+GChG2#whG52ECT~VB#v(=qh8U(`W~&GW zhC~hqh8RXA22-eV1%`B%bQVq4Qh%TT*VCTX=d)UJ6EpLkwl00zzxe&0o+o?vzg)QU z`RsL1``16&z4ZC)EzkOvzHFHFVt>0rL1jrsex8DEu0nc6e0o8AZhl^7Nq&*Si~SQ` zEbQTW$p|!4lkpY{$iQ11@$n!!KHg80`4)S8d`fK9ZN6y;~7CYR{DN9d*(=;q~@WTsW>qgbgAGhDBr@)n0pZhlH> zPO4oID7Zk5C{_d#AD9^#89y>HF|vH+U|Sm8n%CS>SmyFjQ#Cq4Uj2&1Y|Rld+)23Lr0!ql1N z&8FGj9Gc_JrMb%l$yW#x|Dyy`X?d>TC;o>tiGPJ=p3wCzjGZ6^toST{8ZGZ%%cz?B zN$(EWmuRj`->7m3dF-$2^oX!YohOWt8ZSmL@QMMrvf z!QWNIrLHY57V&+*iZW@0#3RQ?XLfX)Z9WQ=8+V%FRsE1Yr7y`K_;r1WY@;Gf)L{ZMT;GrO(K+LP8q zHo|mT9XxAHhfmVXs@?`hB#$(K$z1!WG7F~69>!+LoB^Mhonl{lZ!;Dc*wP0{D;!SG zA{{ta=k4r-OX-EAGxkpU31TT{Pyg#1KU$bM^U?9w7QXxHz2{zE`2H!Fu&lR6AKDhD zPB7cz^tpS#_$jm5;9X0VhT>I&1ZyFCY`JxTcpx?N=NTTRlr<8iA=>3Ep?EB`4CXV} zSJPB98Ary(BN7d}mPgu%9!&_3p*?Xp5RoEd6B6AFHMUZ%11+`iq^(%jiXtyYGfdlT zo^+hIA+#fOAgo2`MQ|~2W>a2-ZdBl1{HFL zQMZbcMxpdDu5lU{n?(QaG|g91XM{{^PWY7y>qxrKb!xvQ* zmQzd{#TK~u;+4hkU0S#f9tS-G_0_pr9%>^DR9neQFj-xA1ozYBG*EQ^${Aq@S+hSd z9+l`BG~weZU(E{)Tds1DJV6gzfSMak!%76(J2ak>wclL$up=e3K@tUZNb3OiL;hVwFxaEEqJa9jzed51eSNw|SW@ik}*+67S8N{rKqA!t@KQ zLOS7Yt6jU58R*yGzpcfj3yRxXbMb7WDGV0Ry>{>X#gBjR(npss(@RX@Bs2_DZB7z} zSX))vSzLJ;^{RL?_^hoa2`{!xJoFG$w-4#BDC_v0I|e^#FNZJM^WbmodUBl2a>3f6 zC(l7~hnr0C`GJl+QV(Z3o2rI2fDJp)sMR?hpw}TgZ8T#-RfT>YxwTekjExpbLSwvQ{ zI#%U8SOFP~KxdVrEv^91KOqM#hE$SWB)+X=ryKLep^_wtd;6Xk4pXsfDjyHa^m? ztZ317Oknx8;P(XO{f}n~cgL?X{f)rB=II5T^IY(|g(t#yK_9(&a$>_oXgE49HPZLs zLC>h`X?)pgo>tuvYwwD??uhkw#P#>xLUQ_a`|YHhquS54-w;XheF5$ELRnj4$yT0EMY QZjr6J>CrIF%_fxp2Uxl|E&u=k delta 3420 zcmaJ@Yj9K75xz&dl4a{**^(^VGM2DxgKW$12ez?8;1FU+S?GA)-v#?4b61gADK+go@*K6&QzZH z&Ys;pdv^Ei?)BLpqwD98?klY}iKD;QKJg9z^wop9bfmhv0HJXk=T&$$oi^8eJfG3p z&K#E=+g-Uhm+f_(d9Hk%&*yBVu6cN# zD;sCKtk_B~MlU#syx(?Ej|;Lvh2?5)h3c4 z*Dr83IjPkzyfRFwK@_(hUmcdn2+cwgxveyjf}~U;$R8q}wD7%Tl0Oi|ig$QqC5cI5 zMmkkq>qffCpXkO*KSUne!CK25qM2~C!fD$vjnm}SH z7f=yTiWOn7hlE`QN3ap>i^n(o&NV*IJfS!UYVyh4H=D z;5E|NG`;FLr$-qtU9X0$NnLM=8|HcpaY-P3nVIG-9dbq#hHO+rat$@6|8<}1UPSr~ z`NX4DDg7Fb>un%s4ORbNkz^U`soOL^a$|QR3uL{qkX$hKqh_KvSx_4kr`ForG3&C0 zoNi6yy_VjN=%DFMq|c+0sax;IF1|axZ~OF#eI&tLU5TOlA_Wwt_q`e0e|~!6#N%sc zrq7>_-F*8WH;+B}dGyJxJ<~_7Ouuz0c7sUA$*8%MoH5%`1^JCRhHA-$^bbw7)P$%I zFb-n3BM;l?7CXpDMs<;xJUBcO7I3I|X2lI4Yy^0Tf~XqshlTL)sDPJ{Pcs%MS;1Bw z%FI)@fKD<%Dk;s(s51cB3eX174gjx)y8xUN99fvvcLgvi0pO)@HTglN$Mfxb@e(Q# z)o{5_@{E}lb?b%A8-sWt&IBh!Z73MQ{j-Y8z^I$pEnT!tI4+b$f$XrPlL-qi!*+7q z;!MopIc_`mW$IRP-*UUC>7!+nP0J^jk4%ofJ~{HnWY)IN^y80m>=Vg<%E_Hb{#>7S zRDDoAnbrPBeMeL=uU7t2Dt9{}%|mg1YdKx+8B886f3HXhSl*UNS(91?U}{pANj{lX z+@+V_PePQwuUB-LqHow-GWt08aw-Nq)IGN&Y35bH_Y?q@=rut30gM21(#cEd#8f0| z2ZRwJEDZSigONZOv%qPLFhA%3AwGK%`fK!neVwe3&Q1=)r4BjX1oUPKqGCW;8yQ+o zc~C4f0%FZ?tFyu00brsa%5fwhIky#fb6iqLE=hLDseF^3d7_}I;0d^LH-8cOPxPDo zpj;`rLP7-<-(k1zfD4pTB%*vs2)pC{FbO{@1R^3I7DC}!M?rw=C`5D=rceCj@yT=3 zDhP5>T>%y1nhR`Fj#)!{opoHvB5tQ5!fX!_`C)* zivU=jY(PElWjV_jjVSC7M?zA;&3>?`s;CaF3vTpDVlnejMJ6hZS}HCgludqHxoR9n zFPjRu45(f>A|DQfMSg8CID*H3xdC7t07@A{72yeh;}k@bk69n?_xZzNJiInS3&ZEb z&7hDE03RxBi32=j2#oFK{>+z=b5(|g%`!#JsoXC)Sg-TaI_dGw5Z@2{i%Fg>C6B6> zD49u1G{4%+qhqA8E{Lv@OLZ$KCe**CWG`@)Y^#3-y-#k}znprN-n2#ObdCjac#F*G z!5{WcX<2nrE?!Ee+w#z>MAP1y-37YzlR49c zPY=KMFkun?zV=~t6Kw)yMy)^Y0oV)~lS$xoZ-d>RiLqkM$cr!`w=+|DB&awX9 zNnUnk>tcJ4$9{QZdhbMR|4FSX`;BdbmDzJE?(7(G6ZzF9Ox=#OM~K0eND?E#ocnAp1Qk8K{<3^?+moK0 z_U)P9yYJrn?%bL8-o1Br+3)sq6 zvRbgQfh>T#;>K&RwJ3dLixz7s^2MwUyR;4kL95)^YTS- z|9lavpJPMMMhi~>)?+}zN3-#4>>R(utiflOk748Z*mdf(gwZ{*J=79qI6){Ff6K~Z zCWoJxI`ryP|IuqFpPtp2A-|+0YCTSPv?BP0LdYlNYP4F;} z9-DpNPtHDd?ckBgoo6P8U!U53+;>OwXf^XSY2vy2I_+KEZ4RcX%vxSmW=+jAr!mVa zD$8s&jZ6xM-AWlPNO(?0wxHjorz_Tx2IaU+f6GdZYBD;+Bscm%PBSG*A_>B^1%;Kw zj((LlMk??dAt-#^K7>qz0^Y@5iMjCF2n`RW2}3>rh! z{)`|(a34oBry(v&qoSMBeKLZuW}>j7r1c&2wsn$3Zcbw0`s*PxD~IzxVdCndNH zf^bS_X%&GMC21~3e=K@V#BD>{a-Nq5-wjGO51?I@YBXlfMn@LhlVaePVq^S#fG&Wo z0N=+jA>lS{ayZ-gAK(FsC{8s@C|ZMt_?@8lFu*Q=K2%?9Aa^5Yu_?MA7+V1L0PF>D z0PI6A6t9-7hBw@f-|$Ivx+E{m5E`TYf(TWGPE&*--D^UBExEruPEkn`7g9?r%+y=S za!kKvR#cQq-zuSiE(N?uDk=-9iy`rqxzxp68q*UBH@CLaVRv#}j#dhd#5(i^iK|`FL$oeQRSAv7(Zd1i_ubae%Uk)C4P@PdUXo zgp;VIR-IokmZ?Qc1Wqh) zutehTEUBr3+H)Al%JtoD$~RlfzSkyRdY!e;<>Y0D;5KIi1}-&Q?d4!|8S;qvgIU{VD+dN!vO(dIg2F=wLI%2agB zoDc>RxVC?-gx)ac^@3tgB!2WeK6y_RmP`)so$BlV?9ATDH(s7Z`>qe|#i6)_sq2w} z@R^sdpZrM)lNS4pk%8Zj^@Om%KLFG=fL?&@1Tqz8Xx0NQ1~>q)8v~jSkM5Q85c7B; zJ{$t-jzIzhJtwuy#$@4@=_8_SYNqU zP3Y$JRes21^((K2=?YLdn=BAn9&MIDWP7yP0+H#_W_|;a=h5a}(Jt_4 z7YGU&o?dN+Kn1OsJzBHC37SjsXj24Enn#=FjZqsTz97`$ni~`mpY1ix_$&dRrGn34 z|FO@#-^S^0?K2Md*yjYfJo2OPxC6$)%8!t2VSMlWk-JCk8eiNreoxzYlVd!#{c_m4 zt5K#e$$A*SC~JnEoaq!t<07kJaq18ILiKM2{#>Rb5~&g`aPFvua#lds$ic zkw*Kqm&R&exgd_btyff)5^pD#5mi~#r9?R%T*^{ZEtFm=qJUl~V5vq?T}ZtnGgaqO z@8r^$uH(0l4ljI0O#TqDOLEBlXvdPKyzST^e-z*;fFA)I1Av4#A=$+7T$fA8c@tv3 z`#u-nk3z~Em|S9`m?jdMHrJt(rK zLv)V_ZLj$}1df+b*)SrUBv+vKYWGN-Vpim&(VuFgRCFNZ;)pLoYZe)t5}QOrG~q~Y zCR`$%4s}p^*rY54g(&XD{+{;t66jfJHf0yp&hw>Mmk7@gv$7PJA;vjD4!;5s9^%Fj zCTy9(ms8q~28v>1hM7w#he% z!5@X#k` zho&BUDOhYNQFo&r{iZ%d@?$XZH0oM4Z-u{H5~92V*bww5Xkj}}D14^vuFahjYCp|8 zTs@s`7k?a-%P|B?D8w|BNO>G)U1}0>4Mv3|B~;l*d97py+TD=Qo0@%8e7NbTa%5>g z?Uh8vY5Nu4Y$81Bka|FUcrS`w%C0pnk8EFrP%%Q6@q#JRqnL}LwEY%PA4=N08T;*~N(IZd65Fq9LLb2(C= z3+0%9o}e*(o>r7=q~}8^;AjNYDVC|I^Gw1r8FfKKV)}xN#>j6)*;YNd5)H*Qpd;3N z@yhUgYV;S@QgRUo->1R7!B*5%ls7WDzA)zt@qumOm$h~~-T1S>zMgZfM^TL#Wx>gy z_|In(xObR3JCGV0lgj@aD}han?PLY*%nfR->m98dnVRa_YW#FT9dvi&V)7j9J{9dN zG=%>H_Mn#`W%Mfasr)NwMKFa zp6vJd$zn%KzGo&$1KQYJ-0&!9Nx>G?;dJu{VF)!C{{#U1lgKLpehQ!gI0Ke2AZErBz=NrZN{d|YTJY2BcB zkUfz&xN=B+lYp_`7LeYhR2;1zneQcVcPjrDbkj>n^yIzQ@!z5ktu{%nV6WpSG`t#- zSI|;>swjg(o%a1$`gc1c`4CHUsnMi0GSc)*cs^l$HURZ20GQ450HDcVMh)CN@(*YO UcSN;WPU@x!K<@?(3R}zk1E_B4G5`Po delta 1852 zcmY+Ee@s(X6vy9vKl%$=S_%bPSX+Jy3SQ$DO2F`_GQ$M`z5nyjt_UM)ljS`OQJ4OTiyMa(O$ zpyqY>Q3&CJlGtqFe58@u%x*?`Bq(lTB#vY-@_Ip!-BdP~k0K89<|ty0;-BH8r8sKr zV3>^n|Cp@R3c(;~g%}$xMW^|gr(TZbV+HM8*f?Sl<9IV~d}>83Z<>uK8u@t9v@ty0 z68Ip#jfu;`d8;gQEi211*?nQMcmLGDxxhqfCJk>T%i(^CHc*qkSAlBbhnx(hJt6$A zBJR<1bRc4}hm}ou5sm;=E20CC?_gw4aJs&2aKRZLc)T=-R9ZY{@G~PoaM_srB1L)W zY8I**qTo!?P3SB(fCoQEi z)Z|osCJrSBS-FL-Er2KX^PIQ?n;_k>8poi zRKTLDOt@20xkRsWCGe%iUQ<>^+9BREcQg5V@U59HLupk64iaif;NV9h=b?S*_H)7*`% z`T&-G2HiJA?S&ce@) zE^f6{Y{88tP;Uu`TDKLhdh`&#$ppvTCag2yrh6?6ZAt^NE)s^eC=*w<8S&Sq4t+9t z_}FispPu??;FpnsU%Lh;&kj#rdauxu9tIKqI5_AHL#N=BH`dI}CNJ%hR0GncmEa&g za{T}`7pg;~AV?AIrb1enSQ-s?YdD1>BK!>|6eWi(&54GztRw#8rAIo37XK-yBCUPq zKJ(v?6wt9V%TVi~lloU}Y>XRscnC2}ff5i=T*=qzAHa}d!5 z9HvMLyMcyQZ4|1(+uu#wP@ufkj#N9B@vaJ2$xD_TXst8BPoh>~sVJ{3ClkN>mZMKe ze(JgWr0dZGtNemYL*s0A!LUEUd|&fCPJxvv<9^gVbHvgU>QVXG_dgITtX&VyiQW8BOAx3j)n;V>B9p{Ovwm z;^(&)E)3udL^Z+xRr(GYo+5}O00L4f;%Tz#T-EHUjNqC1lJtAF;*umj(m4$fCEesR zM7;~^cGRJiz_lGOAQTVU_N5hv$-Eq6obh=5;!!fh|9_O|AP6ToOQ0thB>0#>L7*h~ zjNmH4D4c9hiaCwzU?2588~>2yxPph86^JXIUPHsZ_M)UET=Y=mm7=fn%R&^^xA+;- z%`lYA7NW75_9Ix^F_B~94E=0Be=ezi&46Zx!oxWqtU`s+T-;D@h{D|!+auCVFNBuY zrqC@|yDM3C8!u%Q4SRM0x(zX%3uu7`N9Wtvdau(W`wCk((1E`?6{vWOELz&_%|v}k xK;9Nb0^%v&BEWZ)5|c5;6-8T{8{1xS+r@8TdDjW`1{pF;Q-q-kHB5F{{sX^O^Ai97 diff --git a/gx_gp_monitor/core/__pycache__/models.cpython-313.pyc b/gx_gp_monitor/core/__pycache__/models.cpython-313.pyc index 693591f84ffc25bd49acc45bbc5da9b829f1f1c7..5a2b2c699e8415e7e18432d82bb557957ffabcc5 100644 GIT binary patch delta 1403 zcmZvaZETZO6vun|ly*GWF=iQE*V3+R?Vi0eXQF|HPY9SHOCB`_I!f1dUA0@g+Y&=i zhA|2unh=l1021e5(_j$BlMu}kNn92Lr!g8M_JeOR5cy!15We6S@BenZB|aa1Ip=@= z_ug|(dt~T~p~_osw{DZ)p|L#~w=q*W>Y{3X)pcilm8gyBu?n*~Dyya@d@*NCUnXOz zJ*qU1sEhe!wpwL1BA~K0OW9hLd6%3)mDQ@u=d+1Wtlq4P>D_kI@3Xz=cpNRrPlWI4 z<7VKY!a8YhkPS6<+tGwPxE6I0iABxegB7#Rv~@eo&_k!2mL98DXACnOYc3BXb-#44 zQ+kWpaCb;E*my65#c4*ArPYjzwzOt6@teypuW}^z7IP&%DH1Pd<0HAjl+~;IHHve_ zy^VS;%YA_;!$T`KQ9nYZ>RnJ`KtHe>i1T*O4&VP)P|ov3 zPaCDJzdQ|EPXfw-#51B!(r}3+l+C~+0G1^NffO(#VQ3{SnJtL@yxF^nUa{Wr_Sk8R z=X@=0JZfkn1MBPjukTrU+v=-3O>VSkILd`1Oo12ZU2A8c&mK{255s@|CH082Y<>qN z=I?_$Xp%#r-^+8UQ*o5k?0vYso&Rvw@?-S|rMbU;!{|Hc=>yq>972K`{>bFyI1?0`D`0BXo+J!YA}=HU5K7 zAJu+z_^r9{4Wdi@X~WsAAHlW-m;_D%PC)J2A)}Hbn<*5~YIVde&Otv9sWUUsE&!NJ zd<vf8*Z=kKg!k>iWgQ*Izp) zw!?ae<823Mk$-I)X#Wy|dhRPk>ZLhEs^9y+XnCVN+8)qnQ3h`Ed+jNj<&BYA_H>TMy!+IHb3Qz-XLG(3n1-J@)1E{eU5Pb`Lr)HZ+2;Ao2`u#M| sC)Ovc)GE}}s+W1L>9A0gPowA^-pY delta 1345 zcmZvaUrbwd6vunoOJT(_wgKxOI%wAxF8>Au6PE>NV*Hn7f0C<4<>CgcunKL-uNX5I z#4T}|W?3{x6P36*2WH7chBsM4Tow(wO)ycTQPU?ElP&lnaeG+y0fK33fW=p zZ4$3SRf|`-;zh)(TFKlZ-e&OvA(yJLYptN|>u_74kn1JmK{VBmimvM6wfdNf>GZ9( z&yIJvF@!FxMuJM%Nh`88Vg)T%hhc45TdwL>n$<{6y;WhaKbo2zHGtHk91cHCC!OK&1o<(d zX)Fg$a5VB9vGZzVpF1gI_apy)Cu!ncPJSDqcX+90FP-H_YX4Z?ORBmNlHK>=?ah3{ z8)PeLQi?~TJJPEMC>XuD+|b$sp)jpcC>d6{;glLVta8v4Py(z2UePF&_6_yq^O@Ah zq1-_=3i&ut44eYq z&X1^1cqXx_G=OX+Y9tA*q>$b`iiXY7&?M^u;c=7dtC0)CASDR I|I~iyU+CmJz5oCK diff --git a/gx_gp_monitor/core/database.py b/gx_gp_monitor/core/database.py index cc4bb45..05b2461 100644 --- a/gx_gp_monitor/core/database.py +++ b/gx_gp_monitor/core/database.py @@ -182,7 +182,47 @@ class DatabaseManager: # 创建表的SQL语句 create_tables_sql = """ - -- 公告表 + -- 定时搜索公告表(关键词匹配专用) + CREATE TABLE IF NOT EXISTS auto_announcements ( + id SERIAL PRIMARY KEY, + title VARCHAR(500) NOT NULL, + publish_date TIMESTAMP NOT NULL, + purchase_name VARCHAR(200), + content_url TEXT, + source_code VARCHAR(50) NOT NULL, + source_name VARCHAR(100) NOT NULL, + announcement_type VARCHAR(50) NOT NULL, + crawled_at TIMESTAMP, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + content_hash VARCHAR(32) UNIQUE, + keyword_matched BOOLEAN DEFAULT FALSE, + date_filtered BOOLEAN DEFAULT TRUE, + is_new BOOLEAN DEFAULT TRUE, + is_today BOOLEAN DEFAULT FALSE + ); + + -- 手动搜索公告表(全量数据专用) + CREATE TABLE IF NOT EXISTS manual_announcements ( + id SERIAL PRIMARY KEY, + title VARCHAR(500) NOT NULL, + publish_date TIMESTAMP NOT NULL, + purchase_name VARCHAR(200), + content_url TEXT, + source_code VARCHAR(50) NOT NULL, + source_name VARCHAR(100) NOT NULL, + announcement_type VARCHAR(50) NOT NULL, + crawled_at TIMESTAMP, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + content_hash VARCHAR(32), + keyword_matched BOOLEAN DEFAULT FALSE, + date_filtered BOOLEAN DEFAULT TRUE, + is_new BOOLEAN DEFAULT TRUE, + is_today BOOLEAN DEFAULT FALSE + ); + + -- 原公告表(保留兼容性) CREATE TABLE IF NOT EXISTS announcements ( id SERIAL PRIMARY KEY, title VARCHAR(500) NOT NULL, @@ -195,6 +235,7 @@ class DatabaseManager: crawled_at TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + crawl_mode VARCHAR(20) DEFAULT 'auto', content_hash VARCHAR(32) UNIQUE, keyword_matched BOOLEAN DEFAULT FALSE, date_filtered BOOLEAN DEFAULT TRUE, @@ -331,9 +372,9 @@ class DatabaseManager: sql = """ INSERT INTO announcements ( title, publish_date, purchase_name, content_url, source_code, source_name, - announcement_type, crawled_at, content_hash, keyword_matched, + announcement_type, crawled_at, crawl_mode, content_hash, keyword_matched, date_filtered, is_new, is_today - ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) ON CONFLICT (content_hash) DO NOTHING """ @@ -348,6 +389,7 @@ class DatabaseManager: announcement.source_name, announcement.announcement_type.value, announcement.crawled_at, + announcement.crawl_mode, announcement.content_hash, announcement.keyword_matched, announcement.date_filtered, @@ -365,6 +407,94 @@ class DatabaseManager: logger.error(f"批量保存公告失败: {str(e)}") return 0 + def save_announcements_batch_to_table(self, announcements: List[Announcement], table_name: str) -> int: + """ + 批量保存公告到指定表 + + Args: + announcements: 公告列表 + table_name: 目标表名 ("auto_announcements" 或 "manual_announcements") + + Returns: + int: 成功保存的数量 + """ + if not self.config.database.enabled: + return 0 + + if not announcements: + return 0 + + # 为没有哈希的公告生成哈希 + for announcement in announcements: + if not announcement.content_hash: + announcement.generate_content_hash() + + # 根据表名决定是否使用ON CONFLICT + if table_name == "manual_announcements": + # 手动搜索表不使用唯一约束(允许重复) + sql = f""" + INSERT INTO {table_name} ( + title, publish_date, purchase_name, content_url, source_code, source_name, + announcement_type, crawled_at, content_hash, keyword_matched, + date_filtered, is_new, is_today + ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + """ + values = [] + for announcement in announcements: + values.append(( + announcement.title, + announcement.publish_date, + announcement.purchase_name, + announcement.content_url, + announcement.source_code, + announcement.source_name, + announcement.announcement_type.value, + announcement.crawled_at, + announcement.content_hash, + announcement.keyword_matched, + announcement.date_filtered, + announcement.is_new, + announcement.is_today + )) + else: + # 自动搜索表使用唯一约束 + sql = f""" + INSERT INTO {table_name} ( + title, publish_date, purchase_name, content_url, source_code, source_name, + announcement_type, crawled_at, content_hash, keyword_matched, + date_filtered, is_new, is_today + ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (content_hash) DO NOTHING + """ + values = [] + for announcement in announcements: + values.append(( + announcement.title, + announcement.publish_date, + announcement.purchase_name, + announcement.content_url, + announcement.source_code, + announcement.source_name, + announcement.announcement_type.value, + announcement.crawled_at, + announcement.content_hash, + announcement.keyword_matched, + announcement.date_filtered, + announcement.is_new, + announcement.is_today + )) + + try: + with get_db_cursor() as cursor: + extras.execute_batch(cursor, sql, values) + affected_rows = cursor.rowcount + logger.info(f"批量保存公告到{table_name}完成,影响行数: {affected_rows}") + return affected_rows + + except Exception as e: + logger.error(f"批量保存公告到{table_name}失败: {str(e)}") + return 0 + @retry_on_exception(RetryConfig(max_retries=3)) def get_announcements(self, source_code: Optional[str] = None, @@ -504,21 +634,89 @@ class DatabaseManager: if not self.config.database.enabled: return {} + # 统计所有表的综合信息 sql = """ SELECT - COUNT(*) as total_announcements, - COUNT(CASE WHEN is_today THEN 1 END) as today_announcements, - COUNT(CASE WHEN is_new THEN 1 END) as new_announcements, + SUM(total_count) as total_announcements, + SUM(today_count) as today_announcements, + SUM(new_count) as new_announcements, COUNT(DISTINCT source_code) as sources_count, - MAX(crawled_at) as last_crawl_time - FROM announcements + MAX(last_crawl_time) as last_crawl_time + FROM ( + SELECT + COUNT(*) as total_count, + COUNT(CASE WHEN is_today THEN 1 END) as today_count, + COUNT(CASE WHEN is_new THEN 1 END) as new_count, + source_code, + MAX(crawled_at) as last_crawl_time + FROM announcements + GROUP BY source_code + + UNION ALL + + SELECT + COUNT(*) as total_count, + COUNT(CASE WHEN is_today THEN 1 END) as today_count, + COUNT(CASE WHEN is_new THEN 1 END) as new_count, + source_code, + MAX(crawled_at) as last_crawl_time + FROM auto_announcements + GROUP BY source_code + + UNION ALL + + SELECT + COUNT(*) as total_count, + COUNT(CASE WHEN is_today THEN 1 END) as today_count, + COUNT(CASE WHEN is_new THEN 1 END) as new_count, + source_code, + MAX(crawled_at) as last_crawl_time + FROM manual_announcements + GROUP BY source_code + ) as combined_stats """ try: with get_db_cursor() as cursor: cursor.execute(sql) result = cursor.fetchone() - return dict(result) if result else {} + stats = dict(result) if result else {} + + # 添加各表详细统计 + detail_sql = """ + SELECT + 'announcements' as table_name, + COUNT(*) as count, + COUNT(DISTINCT source_code) as sources, + MAX(crawled_at) as last_crawl + FROM announcements + UNION ALL + SELECT + 'auto_announcements' as table_name, + COUNT(*) as count, + COUNT(DISTINCT source_code) as sources, + MAX(crawled_at) as last_crawl + FROM auto_announcements + UNION ALL + SELECT + 'manual_announcements' as table_name, + COUNT(*) as count, + COUNT(DISTINCT source_code) as sources, + MAX(crawled_at) as last_crawl + FROM manual_announcements + """ + + cursor.execute(detail_sql) + detail_results = cursor.fetchall() + + stats['table_details'] = {row['table_name']: { + 'count': row['count'], + 'sources': row['sources'], + 'last_crawl': row['last_crawl'] + } for row in detail_results} + + return stats + except Exception as e: logger.error(f"获取统计信息失败: {str(e)}") return {} @@ -536,11 +734,20 @@ class DatabaseManager: if not self.config.database.enabled: return False - sql = "SELECT 1 FROM announcements WHERE content_hash = %s LIMIT 1" + # 检查所有表中是否存在 + sql = """ + SELECT 1 FROM ( + SELECT content_hash FROM announcements WHERE content_hash = %s + UNION ALL + SELECT content_hash FROM auto_announcements WHERE content_hash = %s + UNION ALL + SELECT content_hash FROM manual_announcements WHERE content_hash = %s + ) as combined_check LIMIT 1 + """ try: with get_db_cursor() as cursor: - cursor.execute(sql, (content_hash,)) + cursor.execute(sql, (content_hash, content_hash, content_hash)) return cursor.fetchone() is not None except Exception as e: logger.error(f"检查公告存在性失败: {str(e)}") diff --git a/gx_gp_monitor/core/models.py b/gx_gp_monitor/core/models.py index c8fea67..94ebf7a 100644 --- a/gx_gp_monitor/core/models.py +++ b/gx_gp_monitor/core/models.py @@ -60,6 +60,7 @@ class Announcement: crawled_at: Optional[datetime] = None # 爬取时间 created_at: Optional[datetime] = None # 创建时间 updated_at: Optional[datetime] = None # 更新时间 + crawl_mode: str = "auto" # 爬取模式:auto(自动)/manual(手动) # 去重字段 content_hash: Optional[str] = None # 内容哈希,用于去重 diff --git a/gx_gp_monitor/cron_crawl.py b/gx_gp_monitor/cron_crawl.py index beca3be..68618bf 100755 --- a/gx_gp_monitor/cron_crawl.py +++ b/gx_gp_monitor/cron_crawl.py @@ -17,7 +17,7 @@ try: from gx_gp_monitor.core.logger import init_logger, get_logger from gx_gp_monitor.crawler.spider import crawl_announcements from gx_gp_monitor.filters.filters import filter_from_config - from gx_gp_monitor.storage.postgresql import init_storage, save_announcements_to_storage, save_all_announcements_by_source_to_storage + from gx_gp_monitor.storage.postgresql import init_storage, save_announcements_to_storage, save_all_announcements_by_source_to_storage, save_auto_announcements_to_storage from gx_gp_monitor.notification.wechat import send_announcements_notification, send_system_notification logger = get_logger(__name__) @@ -39,8 +39,8 @@ try: # 初始化存储 init_storage() - # 执行搜索 - logger.info("开始执行搜索...") + # 执行搜索(爬取所有公告,然后进行关键词筛选) + logger.info("开始执行定时搜索任务") crawl_results = crawl_announcements() if not crawl_results: @@ -56,22 +56,42 @@ try: total_crawled = len(all_announcements) logger.info(f"搜索到 {total_crawled} 条原始公告") - # 保存所有公告(按来源分组,每源保留最新100条) - all_saved_stats = save_all_announcements_by_source_to_storage(all_announcements, max_per_source=100) - all_saved_count = sum(all_saved_stats.values()) - logger.info(f"保存所有公告完成:共保存 {all_saved_count} 条,按来源统计: {all_saved_stats}") - - # 筛选出新公告(数据库中没有的) - new_announcements = [ann for ann in all_announcements if ann.is_new] - logger.info(f"筛选出 {len(new_announcements)} 条新公告") - - if not new_announcements: - logger.info("没有新的公告,任务完成") + if not all_announcements: + logger.info("没有获取到任何公告") return True - # 对新公告应用关键词筛选 - filter_obj = filter_from_config() - filtered_announcements, filter_stats = filter_obj.filter(new_announcements) + # 对所有公告进行关键词筛选 + from gx_gp_monitor.filters.filters import KeywordFilter, DateFilter + from datetime import date + + # 1. 关键词筛选 + keyword_filter = KeywordFilter() + keyword_filtered = keyword_filter.filter_announcements(all_announcements, keywords=config.crawler.keyword) + + # 2. 日期筛选(只保留今天的) + date_filter = DateFilter() + today_announcements = date_filter.filter_announcements( + keyword_filtered, + start_date=date.today(), + end_date=date.today() + ) + + logger.info(f"关键词筛选后剩余 {len(keyword_filtered)} 条公告") + logger.info(f"筛选出今天 {len(today_announcements)} 条匹配公告") + + if not today_announcements: + logger.info("今天没有匹配关键词的公告") + return True + + # 构造筛选统计信息 + filter_stats = type('FilterResult', (), { + "keyword_filtered": len(all_announcements) - len(keyword_filtered), + "date_filtered": len(keyword_filtered) - len(today_announcements), + "duplicate_filtered": 0, + "source_filtered": 0 + })() + + filtered_announcements = today_announcements logger.info(f"关键词筛选后剩余 {len(filtered_announcements)} 条公告") @@ -79,9 +99,9 @@ try: logger.info("没有匹配关键词的公告,任务完成") return True - # 保存筛选后的公告(用于标记关键词匹配等) - saved_count = save_announcements_to_storage(filtered_announcements) - logger.info(f"保存筛选后公告完成:{saved_count} 条") + # 保存筛选后的公告到定时搜索专用表 + saved_count = save_auto_announcements_to_storage(filtered_announcements) + logger.info(f"保存定时搜索公告完成:{saved_count} 条") # 发送企业微信卡片通知 if config.wechat_app.enabled: @@ -96,10 +116,11 @@ try: logger.info("企业微信通知未启用,跳过发送") # 输出统计信息 - print("\n=== 定时爬取任务完成 ===") + print("\n=== 定时搜索任务完成 ===") print(f"总共爬取: {total_crawled} 条公告") - print(f"新增公告: {len(new_announcements)} 条") - print(f"关键词筛选: {len(filtered_announcements)} 条") + print(f"关键词筛选: {len(keyword_filtered)} 条") + print(f"今日匹配公告: {len(today_announcements)} 条") + print(f"筛选后公告: {len(filtered_announcements)} 条") print(f"保存到数据库: {saved_count} 条") print(f"企业微信通知: {'成功' if notify_success else '失败' if config.wechat_app.enabled else '未启用'}") diff --git a/gx_gp_monitor/main.py b/gx_gp_monitor/main.py index e412376..add7d56 100644 --- a/gx_gp_monitor/main.py +++ b/gx_gp_monitor/main.py @@ -21,7 +21,7 @@ try: from .core.reliability import check_system_health from .crawler.spider import crawl_announcements from .filters.filters import filter_from_config - from .storage.postgresql import init_storage, save_announcements_to_storage, save_all_announcements_by_source_to_storage, cleanup_storage + from .storage.postgresql import init_storage, save_announcements_to_storage, save_all_announcements_by_source_to_storage, save_manual_announcements_by_source_to_storage, cleanup_storage from .storage.md_generator import generate_onu_md from .notification.wechat import send_announcements_notification, send_system_notification from .wechat.callback_server import get_callback_server @@ -116,16 +116,17 @@ class GXGPMonitorApp: logger.info(f"搜索到 {len(all_announcements)} 条原始公告") - # 对于手动搜索,不保存公告到数据库,只进行筛选和返回结果 + # 保存公告到对应的专用表 if not manual_crawl: - # 先保存所有公告(按来源分组,每源保留最新100条) + # 自动爬取:保存到auto_announcements表(关键词匹配专用) all_saved_stats = save_all_announcements_by_source_to_storage(all_announcements, max_per_source=100) all_saved_count = sum(all_saved_stats.values()) - logger.info(f"保存所有公告完成:共保存 {all_saved_count} 条,按来源统计: {all_saved_stats}") + logger.info(f"保存自动爬取公告完成:共保存 {all_saved_count} 条,按来源统计: {all_saved_stats}") else: - all_saved_count = 0 - all_saved_stats = {} - logger.info("手动搜索模式:跳过数据库保存") + # 手动搜索:保存到manual_announcements表(全量数据专用) + all_saved_stats = save_manual_announcements_by_source_to_storage(all_announcements, max_per_source=100) + all_saved_count = sum(all_saved_stats.values()) + logger.info(f"保存手动搜索公告完成:共保存 {all_saved_count} 条,按来源统计: {all_saved_stats}") # 筛选公告 if manual_crawl: diff --git a/gx_gp_monitor/notification/wechat_backup.py b/gx_gp_monitor/notification/wechat_backup.py deleted file mode 100644 index 1eb3ffd..0000000 --- a/gx_gp_monitor/notification/wechat_backup.py +++ /dev/null @@ -1,555 +0,0 @@ -""" -企业微信通知模块 -提供企业微信消息发送功能,支持文本和Markdown格式 -""" - -import requests -import json -import time -import hashlib -from typing import Optional, Dict, Any, List -from datetime import datetime - -try: - from ..core.config_manager import get_config - from ..core.logger import get_logger - from ..core.models import Announcement - from ..core.reliability import retry_on_exception, RetryConfig, safe_execute - from ..storage.md_generator import AnnouncementMarkdownFormatter -except ImportError: - from core.config_manager import get_config - from core.logger import get_logger - from core.models import Announcement - from core.reliability import retry_on_exception, RetryConfig, safe_execute - from storage.md_generator import AnnouncementMarkdownFormatter - - -logger = get_logger(__name__) - - -class WeChatService: - """企业微信服务""" - - def __init__(self): - self.config = get_config().wechat_app - self._access_token = None - self._token_expires_at = 0 - - logger.info("企业微信服务初始化完成") - - def _get_access_token(self) -> Optional[str]: - """ - 获取访问令牌 - - Returns: - Optional[str]: 访问令牌 - """ - current_time = time.time() - - # 检查令牌是否仍然有效 - if self._access_token and current_time < self._token_expires_at: - return self._access_token - - try: - # 构建请求URL - if self.config.use_proxy and hasattr(self.config, 'proxy_api_url'): - url = f"{self.config.proxy_api_url}/cgi-bin/gettoken" - else: - url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken" - - params = { - "corpid": self.config.corp_id, - "corpsecret": self.config.secret - } - - logger.debug("正在获取企业微信访问令牌") - - response = requests.get(url, params=params, timeout=30) - result = response.json() - - if result.get("errcode") == 0: - self._access_token = result.get("access_token") - # 提前5分钟过期 - expires_in = result.get("expires_in", 7200) - 300 - self._token_expires_at = current_time + expires_in - - logger.info("成功获取企业微信访问令牌") - return self._access_token - else: - logger.error(f"获取访问令牌失败: {result}") - return None - - except Exception as e: - logger.error(f"获取访问令牌异常: {str(e)}") - return None - - @retry_on_exception(RetryConfig(max_retries=3)) - def send_text_message(self, content: str, - to_user: str = "@all", - to_party: str = "", - to_tag: str = "") -> bool: - """ - 发送文本消息 - - Args: - content: 消息内容 - to_user: 接收者用户ID,多个用|分隔,@all表示全体 - to_party: 接收者部门ID,多个用|分隔 - to_tag: 接收者标签ID,多个用|分隔 - - Returns: - bool: 发送是否成功 - """ - try: - access_token = self._get_access_token() - if not access_token: - logger.error("无法获取访问令牌,发送失败") - return False - - # 构建请求URL - if self.config.use_proxy and hasattr(self.config, 'proxy_api_url'): - url = f"{self.config.proxy_api_url}/cgi-bin/message/send" - else: - url = "https://qyapi.weixin.qq.com/cgi-bin/message/send" - - params = {"access_token": access_token} - - data = { - "touser": to_user, - "toparty": to_party, - "totag": to_tag, - "msgtype": "text", - "agentid": self.config.agent_id, - "text": { - "content": content - } - } - - logger.debug(f"发送文本消息: {content[:100]}...") - - response = requests.post(url, params=params, json=data, timeout=30) - result = response.json() - - if result.get("errcode") == 0: - logger.info("文本消息发送成功") - return True - else: - logger.error(f"文本消息发送失败: {result}") - return False - - except Exception as e: - logger.error(f"发送文本消息异常: {str(e)}") - return False - - @retry_on_exception(RetryConfig(max_retries=3)) - def send_markdown_message(self, content: str, - to_user: str = "@all", - to_party: str = "", - to_tag: str = "") -> bool: - """ - 发送Markdown消息 - - Args: - content: Markdown格式的消息内容 - to_user: 接收者用户ID - to_party: 接收者部门ID - to_tag: 接收者标签ID - - Returns: - bool: 发送是否成功 - """ - try: - access_token = self._get_access_token() - if not access_token: - logger.error("无法获取访问令牌,发送失败") - return False - - # 构建请求URL - if self.config.use_proxy and hasattr(self.config, 'proxy_api_url'): - url = f"{self.config.proxy_api_url}/cgi-bin/message/send" - else: - url = "https://qyapi.weixin.qq.com/cgi-bin/message/send" - - params = {"access_token": access_token} - - data = { - "touser": to_user, - "toparty": to_party, - "totag": to_tag, - "msgtype": "markdown", - "agentid": self.config.agent_id, - "markdown": { - "content": content - } - } - - logger.debug("发送Markdown消息") - - response = requests.post(url, params=params, json=data, timeout=30) - result = response.json() - - if result.get("errcode") == 0: - logger.info("Markdown消息发送成功") - return True - else: - logger.error(f"Markdown消息发送失败: {result}") - return False - - except Exception as e: - logger.error(f"发送Markdown消息异常: {str(e)}") - return False - - def send_announcement_notification(self, announcements: List[Announcement], - max_count: int = 20) -> bool: - """ - 发送公告通知 - - Args: - announcements: 公告列表 - max_count: 最大显示数量 - - Returns: - bool: 发送是否成功 - """ - if not announcements: - logger.info("没有新公告,跳过通知") - return True - - try: - # 生成通知内容 - notification_content = self._generate_announcement_notification(announcements, max_count) - - # 发送Markdown消息 - return self.send_markdown_message(notification_content) - - except Exception as e: - logger.error(f"发送公告通知失败: {str(e)}") - return False - - def _generate_announcement_notification(self, announcements: List[Announcement], - max_count: int) -> str: - """ - 生成公告通知内容 - - Args: - announcements: 公告列表 - max_count: 最大显示数量 - - Returns: - str: Markdown格式的通知内容 - """ - # 按日期分组 - today_announcements = [] - other_announcements = [] - - today = datetime.now().date() - - for announcement in announcements: - if announcement.publish_date and announcement.publish_date.date() == today: - today_announcements.append(announcement) - else: - other_announcements.append(announcement) - - lines = [] - - # 标题 - total_count = len(announcements) - lines.append(f"# 🔔 广西政府采购网公告更新") - lines.append("") - lines.append(f"**发现 {total_count} 条新公告**") - lines.append("") - - # 今日公告 - if today_announcements: - lines.append(f"## 📅 今日公告 ({len(today_announcements)}条)") - lines.append("") - display_today = today_announcements[:max_count//2] - for announcement in display_today: - title = announcement.title - if len(title) > 40: - title = title[:40] + "..." - publish_time = announcement.publish_date.strftime("%H:%M") if announcement.publish_date else "N/A" - lines.append(f"• [{title}]({announcement.content_url}) - {publish_time}") - - if len(today_announcements) > len(display_today): - lines.append(f"• ... 还有 {len(today_announcements) - len(display_today)} 条今日公告") - - lines.append("") - - # 其他公告 - if other_announcements: - lines.append(f"## 📄 其他公告 ({len(other_announcements)}条)") - lines.append("") - remaining_slots = max_count - len(today_announcements) if today_announcements else max_count - display_other = other_announcements[:remaining_slots] - - for announcement in display_other: - title = announcement.title - if len(title) > 40: - title = title[:40] + "..." - publish_date = announcement.publish_date.strftime("%m-%d") if announcement.publish_date else "N/A" - lines.append(f"• [{title}]({announcement.content_url}) - {publish_date}") - - if len(other_announcements) > len(display_other): - lines.append(f"• ... 还有 {len(other_announcements) - len(display_other)} 条公告") - - lines.append("") - - # 统计信息 - source_stats = {} - for announcement in announcements: - source = announcement.source_name - source_stats[source] = source_stats.get(source, 0) + 1 - - lines.append("## 📊 统计信息") - lines.append("") - for source, count in sorted(source_stats.items()): - lines.append(f"• {source}: {count}条") - - lines.append("") - lines.append("---") - lines.append("") - lines.append(f"*更新时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*") - lines.append("*点击公告标题查看详情*") - - return "\n".join(lines) - - def send_system_notification(self, title: str, content: str, - message_type: str = "text") -> bool: - """ - 发送系统通知 - - Args: - title: 通知标题 - content: 通知内容 - message_type: 消息类型 (text/markdown) - - Returns: - bool: 发送是否成功 - """ - try: - if message_type == "markdown": - full_content = f"# {title}\n\n{content}" - return self.send_markdown_message(full_content) - else: - full_content = f"{title}\n\n{content}" - return self.send_text_message(full_content) - - except Exception as e: - logger.error(f"发送系统通知失败: {str(e)}") - return False - - def send_error_notification(self, error_message: str, error_details: Optional[str] = None) -> bool: - """ - 发送错误通知 - - Args: - error_message: 错误消息 - error_details: 错误详情 - - Returns: - bool: 发送是否成功 - """ - content = f"## ❌ 系统错误\n\n**错误信息**: {error_message}" - - if error_details: - content += f"\n\n**错误详情**:\n```\n{error_details}\n```" - - content += f"\n\n*发生时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*" - - return self.send_markdown_message(content) - - def test_connection(self) -> bool: - """ - 测试连接 - - Returns: - bool: 连接是否正常 - """ - try: - token = self._get_access_token() - return token is not None - except Exception as e: - logger.error(f"企业微信连接测试失败: {str(e)}") - return False - - def get_service_status(self) -> Dict[str, Any]: - """ - 获取服务状态 - - Returns: - Dict[str, Any]: 服务状态信息 - """ - return { - "service": "wechat", - "enabled": self.config.enabled, - "corp_id": self.config.corp_id[:10] + "..." if self.config.corp_id else None, - "agent_id": self.config.agent_id, - "has_token": self._access_token is not None, - "token_expires_at": datetime.fromtimestamp(self._token_expires_at).isoformat() if self._token_expires_at > 0 else None, - "use_proxy": self.config.use_proxy, - "connection_test": self.test_connection() if self.config.enabled else False - } - - -class NotificationManager: - """通知管理器""" - - def __init__(self): - self.wechat = WeChatService() - self._services = { - "wechat": self.wechat - } - - def send_announcement_notification(self, announcements: List[Announcement]) -> Dict[str, bool]: - """ - 发送公告通知 - - Args: - announcements: 公告列表 - - Returns: - Dict[str, bool]: 各服务发送结果 - """ - results = {} - - # 企业微信通知 - if self.wechat.config.enabled: - try: - results["wechat"] = self.wechat.send_announcement_notification(announcements) - except Exception as e: - logger.error(f"企业微信通知失败: {str(e)}") - results["wechat"] = False - else: - results["wechat"] = None # 未启用 - - return results - - def send_system_notification(self, title: str, content: str) -> Dict[str, bool]: - """ - 发送系统通知 - - Args: - title: 通知标题 - content: 通知内容 - - Returns: - Dict[str, bool]: 发送结果 - """ - results = {} - - if self.wechat.config.enabled: - try: - results["wechat"] = self.wechat.send_system_notification(title, content, "markdown") - except Exception as e: - logger.error(f"企业微信系统通知失败: {str(e)}") - results["wechat"] = False - else: - results["wechat"] = None - - return results - - def send_error_notification(self, error_message: str, error_details: Optional[str] = None) -> Dict[str, bool]: - """ - 发送错误通知 - - Args: - error_message: 错误消息 - error_details: 错误详情 - - Returns: - Dict[str, bool]: 发送结果 - """ - results = {} - - if self.wechat.config.enabled: - try: - results["wechat"] = self.wechat.send_error_notification(error_message, error_details) - except Exception as e: - logger.error(f"企业微信错误通知失败: {str(e)}") - results["wechat"] = False - else: - results["wechat"] = None - - return results - - def get_status(self) -> Dict[str, Any]: - """ - 获取通知服务状态 - - Returns: - Dict[str, Any]: 服务状态 - """ - return { - "services": { - name: service.get_service_status() for name, service in self._services.items() - } - } - - -# 全局通知管理器实例 -_notification_manager = None - - -def get_notification_manager() -> NotificationManager: - """ - 获取通知管理器实例 - - Returns: - NotificationManager: 通知管理器实例 - """ - global _notification_manager - if _notification_manager is None: - _notification_manager = NotificationManager() - return _notification_manager - - -def send_announcements_notification(announcements: List[Announcement]) -> bool: - """ - 发送公告通知 - - Args: - announcements: 公告列表 - - Returns: - bool: 是否至少有一个服务发送成功 - """ - manager = get_notification_manager() - results = manager.send_announcement_notification(announcements) - - # 检查是否有服务发送成功 - return any(result for result in results.values() if result is True) - - -def send_system_notification(title: str, content: str) -> bool: - """ - 发送系统通知 - - Args: - title: 通知标题 - content: 通知内容 - - Returns: - bool: 是否至少有一个服务发送成功 - """ - manager = get_notification_manager() - results = manager.send_system_notification(title, content) - - return any(result for result in results.values() if result is True) - - -def send_error_alert(error_message: str, error_details: Optional[str] = None) -> bool: - """ - 发送错误警报 - - Args: - error_message: 错误消息 - error_details: 错误详情 - - Returns: - bool: 是否至少有一个服务发送成功 - """ - manager = get_notification_manager() - results = manager.send_error_notification(error_message, error_details) - - return any(result for result in results.values() if result is True) diff --git a/gx_gp_monitor/scheduler/__pycache__/__init__.cpython-313.pyc b/gx_gp_monitor/scheduler/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index e6d1dd42fc6c3eeaf3f6b3393211d7de01f5ad0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197 zcmey&%ge<81U)KonZiK&F^B^Lj8MjB4j^MHLoh=TLpq}-Qz;LS`(i`$(_PD+tyuVU z?sPv*##`+1@hSPq@$oAeK7(}Ka?{Vq&rQ`YGt19O)i0yFVZhg&PYuu%}FiNkB`p;3dP6k6;$5hu*uB_iP{yh0gVN@ Us2Jp$56p~=jJFtsidcXg0D28LH2?qr diff --git a/gx_gp_monitor/scheduler/__pycache__/scheduler.cpython-313.pyc b/gx_gp_monitor/scheduler/__pycache__/scheduler.cpython-313.pyc deleted file mode 100644 index b74d244c56c2463640050d67f67501ff61533a24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14537 zcmcIrdsG|OnZKhK(r5qy0>ncgZ2XWPJnCmKb_2%P1{){HbkjhpDj+Z}NO&YUaaw0d z+BC*_fRng}yo~!uNH!1J?P)o+lh{t$&F*EOZ_X-#@w-(=toO)SsSJXN!iHv)~e znQP*B&PGazL+40qPH)QKGk`+p&^Ko`nRt_pbeI;Aj_h@e*atqxLKYE+p^!M(b*lI` zvqN5a%6TGItsKv4iqM&*w65VJ*qO&k(EYV znS{_@CE8~a?U$04`fjpWT}rwcdv>4=Dq*iq{y6%FSE6GRvlFMHFP&g#hes~I`$F`s z=Vwp+?(*r=(W9s06h}{9{qZ}Woq2NhxwmJZe58~2dajyU*{kYX$vQS6`p&{yw*$Y3S|r3+g)0 zAwj=qz~AfjxcUUmu3n$t&Io#Jq}T7}ui@;#2e!xUcXoO`-Mu~1Tc5Y5$IW+QgHq7P z6E{DC#BtI=U}*_1E3bB_c#T616RCA*Al5mw9ceI)Iy%w%_*)u%GdT1etiu5R*^V^G zF|O4+j5LR%Ib27&A_tZTmMVkhAgu3kkw@Pwj(onLC)-{ir0;e4e&Fcb=k5yh!3~a6&^Mj*)<#-oI_Vp;%sjoKD1OM!*mPWgQ=YUEu_@wC& zbRw4sdM6+7czQiOLYmXRk9WJe1g&$w_kN$i;=}3lyZk;O&Fw*M>=N>veO^}=C2)50 z-u^hVy~YR{pS!QyhZANKwpZ@+_PZ+&uJ`u2D+dk@@ZSCIPJiY0dsg=htoC^Qz1@c@ zdmeQ53^@Cdf4zLA+_6NeVgOj)>Ffmpr&GwAx0)5w_abP|w;Q5Caxu^LY+pEURVZ)O z5zUjvh{Xzz^hkaYJh(`1K0Me+VKF>1V>-f_hBpmu3L8t{FT$C^+_Dh2>;h+xsR>tl z6DlP07y}oIGR8(2;c=XJBuNUXm?MYm7$n5Qv@xyn(kF@`qDsgnEo>Js)9zweTtHbY z;!#0LLsRNDl|x%|4arf zJpU6>tgrm~boAvXYHTfbJ)Z;Ff`;<48gNm_f=b)~w_;t$!$OYyNvx87)QONOq&?u` zsbp}jt}Y<-dNA9r<#7-Ki_#$p5vFOM4V29N-~caZx&xk0AFi7X0}o3|_yR0ip2W*3 zMQSNf`bHocB%cUFhBGUtGbaJ}2SddbBL-k`bMffm>6}%OqSA0tb*QL%x@gU@hDfe;ykt5T%D~q(p`ta@MeB|= zTs9Y;XgSsrTv9uA&s0-z@%9<>j*rd7pPI~JQ(4GVHokn)|Bg2GRQ1i=PW2d0oRemP)JAR9hKkGv2){f8?@-iQwWOkA!`_$mk7mT=8(9)wDc zgO<=PXSK$;N&Wx{2b17M&?r=(lc<{19^f=cYnnApS`S0h+Gfy8JSv*jHG^*AQPXr< zGuveJXlx+Oi-;@<+BU5$iFst9J{S^x=pmKFqifTG#8-pVrnRND7ApHIrscX(%Ax)? zU90t0s?=o@ZS7to%2b<9u5aPKvWfCNfG&zL>)Z6LxT;B^O(&HIKyL@0Utm3q?PXF0 ziIN$_!70AW^95LDa-PT7rdGZ~zCjwNOAm9VnV-8rztU5;@5pE~Lhmxy zXcPVDA!Vc;F^C4x78g-%QLo@Fy@IzuA(DAZ??~{L9<K`z2Cd;^{E8FO%NdIH{-ekr?}x;!2)K%Kka?eY8Ib9Q%cALyh? z{Q$mNeXfJ<`Ls^I7xW7+@9J>_L1vHJMgbauHWCNB>KyrTp9VPEno&R+w4oH#OlB*xcuHr(KknJ0aWua zBVbEeQGCvS`Rl8{{Z)+(=DiL*#dX-M4WV^}OK-R@YCj-WpuhaJJ#!bAr1&r+0P*cesPa-7}^hsHLX z;utZ)OO`EYTR&sk@C9fnD?T=_39fCLF*nC63zppZK~8X6`*dAL@Xq^!_ZcNa|2CuT>`?1&lh``2@O8Dh5H zB%1i7a>uw}>9;>npRIdeH}zo9x?{$)Gis{;*klWqZ93yPn|1m-VN*lM)bMr8fMve& z?Si#=G}q(A6k8b#4XxY~&~8xBA{@{F^{#}?T&);Y3d`KVw&P6F&?b*;{$@@$XLX&LZqD#j zY|h48H|JZ|PTHI^<5rTi!-{()?q0W+k@w2zk@0I|zqAERK!%&t)%PBseetAN0QMpa z-HUvOe13PoQwjc5y;s&N))+vOGWz@9h`eQ^Tb`0i74SI zN}YQ*bIH;Q7@4~|Vp$a_EFZsbd{1!A)}W=~bFDfzFJ>g>C11|vP~2mng-^`&F*PQ> zp0kkRWj6@}ReWN(3qC^P>$waHeoVZ3w}4;Rv@>Md`87}j#aF)jU^tKF*6YZquC9>0 zycAOBw7R+~a?Y5J=|WT8YW2AlDon3pFuhuh=_*sbT7912_wy<%%)b^dneTbB~mz95{7CkD$YqE zfdhbJ=-|PBYWSzA(1Du?P3ff2#^6TLE@MwBAD|;&V6OkOTBmc{FvJ9;5hFpcfZ721VJ~--FA19Ni?M4l7~+ z%hvHdz8V(wDs-gO*u?MAk*BV_I!Qmvo|PIKCS~6`%|u^|T;}n20AyIUm3k=RmEQ05 z_SM+L#%D+0j*h$n)N%kRaRaH$@RSU&OyN+@Vk1#3dJ)o(gdsNW(xqM>E0IzYC z&?xHUR6nHZzF4_(R5iA*RJP>;W8WJ<$Iq<>%^wof zU9Lld%HTL7d&VBMNpaA{5RSHl>^E1myePgb47> zl4mHm%$Y~NJHwUE=}3C+aLdt_X|6cT*+QHx%qjAs;psUa6bA#uu%akO53)6^>CKP6AJk%~NxmDPe`KO^K-%Ajoz-OVznNiGx zMJuUbuMKf)!`y}tw_ysz8*EY(@8VVeH}MW`*dAQJ<3ml*vU`SW`8x!>tgf7#D`)GA z)#ob8>+{v;^R^+b;PVO@ju}Y=0X9G645z#e{i6 z7qnE)a8>R}HvObpTY!>ze(u%5SQUGgHdk6HjPu32BPS(K^#H}fGFI))> zHs!pe>b2~w$6njhKF@?g(UG^KM$27^4!E;xT&D?yLdcB({;Iki9EMZicQ&#ycyaRHIx;YLW7qc>rsmit~t;{W;}4# z?G?|PGf>BJN?H%k<0J@LaKiC^9#2rjLuK*&>>-GsVdIc7XkLCnZ@-o4W%RiLUAo{|FpJ$ z)#2hbq2e`gD*$!QFlP;M)^S%5pUW3mcAP$nb@WV}*R!leV~ABF{61}5AMtuHVVCH82Obj~`kFO}ZDR63_x zp>4{?y7M>I1;-?7sq}yg4u9*I7O#Uo6`E-pJw6c;PiD-^Q>UZvzJBHDx5Z59!k7G6 zJPx~tb4D*6$OXlEqGukBPECO(_%IN(+@=mZMtbQaXnuAe61`iL$GhNFFd_mDz^Mr0 zqK4iF)B5_{?tx@SSKM_>Ejq*p$(%ccwG_|i{Q0nIfZqFl3}k~uX5xw&edVVa*~9(A z{V|m`z2u_F5;m3p*;GDbT6)oBKEXc2j#fXH9!n!2H9$1fKW8F_OcD4hF6b-2oHI}l zlM2h`ouCe;^}qE^RsZwB$$dfVw`WXu%JrN`KbDSWT6)P>KJ+6@tgNdg=W5xlY3lR3 z4O>;}_f=X*xA3bWbDk0Nz_=A9W&A+Cn7UfJ+X*y&lkwQt2!S?+{%70e#B|IMc%dF37k9 zwkYV{9`twVZ!>p^xkxoGaV`w)sO8X*u&r}lGgdR5xdiSaVQPF|sHk#8FP(jsd~0&!qJ+VzoX@eMU8sQPj)lUT~Y9To4%ebeTZ69+=(DtKaZyN>M|-!QRpV#Va1 z54L{Dyx(|sW3X&j*t|Pr-i^2i#YF$qdv*G)R`R};ZCIp!e_3^dRsDfg3+Z`Bceuk- zO=1?N?Ks>Wg)4-qr8R|SAxSGpDIg@hyt5cgRdq^K0rZlthTMh%&dL^`kd;3fnM(nC zQ@1D6rt*+UJ>SCs+NCa^CSlMwXiKJDs4a)SLVHg(V({)4;#aFkDlMy3Mlc|a2UwRB zS{8i8HB1VrtVTH3G*oEdmK+>Eb2OmjtXXCB#cDNz2$_6*X z@2jziM3>(?HT%fh>|W7pg#bzcg91wnb!ve?ql+}*))Kv3=pg-zB71#_ctWFZq$`!9BH2Btk>0~v>H4nmf{mXJodwI{)$lk z3b=iI;_$J<5lit&{B3$Z5j)M&6FwO+$x+`eNE;;3L%G z#NCB9fVLXtg4dW9dm-N3#&aCFxy?G^mN(wPhcxGO9tgPl;yIa4XLm2}^Y`_7+#WAv zr#YQn-cF~Jw_;@l7@?xZqg?VR?)0=*(BNSXPfsw^;KJn5!^a=M2;BqxqZpw=%%cGE zxF_+bi1E0!@_4YpKM#?R>!fVe+v#-q{e18J0l(V^ZKFy=$0&LnaI@txLgDbe2hmT- z$C`p08iRJljXaZfbF6%`wqShY9DzsdVWvb|G=9$D$hmRXeGoWc33z3D>R$VVH z(3X!|CKjKveoi16Tc4+8M;pd-#yiI?V=Z$8USm}%t#!2FuLK_A*yymTVKklaUk(Tv zbl0hZ1pNL%&gcZ(YnOK#38fDxC@4!dK!IfZioW&o<#(S*!moLjN{vls;5ae(n^=WM zh<0}Vx(MkM7Np-Z@UKG44rEtk%Rw?{BKqu5TEWHKMbA2quosQFK~1hGZ1R{OA&(dQ zDL7sfJ{qJEdeAbL$1UX&`MNOZwG6mh{g4Ac=b^ozO!ykZXTvvz>q^K34C4XGTNq>CLBYQ6Ve|Gn%th!kRiOuMWZitki0F zh)aY#Al(efMrBo6A@OG}{9BOUheJm^0?x`HStap>3TyI0n!J$*FKBF{RJ{l!_9Ffi zJov{kdH^Gw0bTDU=Ex`HaT}r07YNHDvEHzT diff --git a/gx_gp_monitor/storage/__pycache__/postgresql.cpython-313.pyc b/gx_gp_monitor/storage/__pycache__/postgresql.cpython-313.pyc index 4dec03dbd7f21a5db504dffd9f59b86f6f9eda2d..71edf113e7fa7ad74190110623f6ac410696b854 100644 GIT binary patch delta 7127 zcmb7I2~<>9ntu1yN>xz>RIyZ16ve)S$Ra8ty9)@)gSdc_5=tauVZVYbCKEh8F{>G& zZ_;X7J2I0@q)#Uyr#uO5r%#A>W=Jomi@_6_I_ZfsEoi2vCuNICPBJGm|9@W<6q;>{ z!}sp{?|=XQzxV#jefQ)UGBQK-x5C3U9Q;m;_xAqvo)LWQ7K`uq5iwne7vee;9Z4a)=0INtJwmo=&+p^b$r8DJ zB+KggkmM7daw^$wfnm8p#AbGa+J$Ud#&yMvGjc2@xGS5E9AgQA{iviBzQ! z#i&NX2$M5~OwPpU(KZfDP8Xs()I&lHn^|BDU}$hjV}uOB+!5QM4jFF2;jr9sfweFP z)`Az}nP3YFmi~lH!3v|L&C@Qn5}*~&B-&W34fl4r2|6J$pvDSn5@7CjCfp_@SvWBf z%t~Gqhy8LPCBSbNQpKd6xU4MCPvyUnk=wLaT>|)``XU+g>Ps9rH z5*~EJ&&9X#0$KAM$2rU#{XwyvC@4`GQ}|RaiEC%hiEJv)kps-Kc6?#KmT+2?Zj>q8 z4fOM5`<_HjP`PAPvK}Hm_mM@HQxA^72+g&3&dj}fa_+Sk=1;siKYaT7`M;k#`t!Mw zr{|s=zcxXyKX>lN=($hcesb=p=i}#IyYc$7bH{%1@zH0cE^1Kk91_z&%wRHreg4eo zw+r$`IR*#%I~^`p|DdbOdC=(^aEs|UJ{REom@@a$8#m6syvE*?r4}<_jOfZl%tD9* z@Flq&_dAzs=-lfV=-S^2iU%Bf`$ZJpG=1q;0K*sV zSkUzI@~SNE-7HPDP4;e4Qnguj(X6Pp(U&zDL`Q$G`ET+feOsGMZ)mrNsRdOVFXvog zv_h9F7t|#@?bGF?M{!&m*MhR{`0Z!`9+^b6qu<4cwJG$RplQHC9Pfvzd6&nU4fJrld?5X)PFV9~XmbP{Nsb}V%KKD%?M!yXI4~U9? z)5q_v00rnt-#*}zw~x)ge*D_R&m-V> z(vh|CbdNzxj~kTQK)`Wai=3V{SS&K1?$F@gzFznK&ThwmQ&hnapX^|-Ym8nsSjYx& zfLO&rhilM5|Ge2u^CF^#{svgwCV(T{*`!zUNAs^FSDxSaR^uCu-sDO#2|8NGc%STm z^C6!~bl&e2-OeVTiOJ|&?y0v?n=~W)Z7sCz(&Ama@VI?22H(GCVTMMY9$bavzH`A} zJ2wC1Fs|H@U*33aR1$5!joE~SE{pp?45jZD6$rzuNHGJ)i&7L)64|0eTYPzRojJ9r zv)3iXoKNN+Jm^#2@8}zJy6*_Uv2ZZ~MPLdM*U(oYlSm_dKeB#xAqvtC^ba`tIx!%- z#g#yDhXY`!F8-vLO<^&+xHG)3WcgMpcjMrf=*g(Gv`76MSIIZ=@E9V^_-N(@d_=eM z3mg~L#{1>j)Em_vSvhO9-&Dynqr4HRxAa`vYP#8I%Utc(aPbA_hQ{??%lcu}tS$M) z{!{%|Y|YcQX7ASR-ktq3wnM|(S$f21T~R-6s-Jw=+kN=5>EUY;F(9*90om*{w)&)MDS7+~HnRsvP50&rtI zNhwmSfu^q((;L~|L-*GuWT5j(daG$Ax2 zY(?0HfXQ6U2Joe#E5(Zf5?T@N$lq-=IqDF3!9%0oCZy4`)l?@ZUG&FsnT4p(r|5R> z9qeI)e5wZ=qN~@{BPD(;0a+@^`Is?1^piL{SxFz2gg7`lwYVLDIWrzRm?JYM77KoqP{eb@Q<7jKB!{-z z@>4LGx-l;t;rwbYESx12pN5sPPM71Lvr9%5w!|SUTyv+-%^!OLYA_V-YZI@|pMB!S zYvc1j9+ygbllTzuWXVFTc?1Y<%=ch}6h`*WgAVaPr_1@k^3=2x$}6|_y9atir?9P2 z80Z%rJLtQr0+C`?A5Tlhrqq{IK2Y;B|Q1Pt~fc1IKMhh#8lsxB>x5=r$KE~1} zgR;UG$=XOU37(4VT${W_MI9?FRzZd<=ThuwVTYs*9Jiw-4>FNU$;L<9|t>=oAOM2kwrgf>RR6U>#pCLy#{UCbw zotr&z^!o7QQt`O{!ejF%UXgbFaJGgy7%hm6G1fGMb3FNfN?#=6$Jz^Il08;p#L>g~2~YO-gBjHJ1-@x}nFHcprdIz0V1!&3>0t9Kv0a zD&qlcEzet!PgvPwnP(05V=#*S0KV|9K~aRmac38tlLvgdZfBo!z$v{+c|#3s!Rbk< zqXh@94~=0cGseQJ zDJ!N^s)ie9O_mc)BTXPDb0}>#t>A1U2rA6Inp=9V+|Mb>qWvm$YMeiUi%<8OOBW*5 z(PaxJE;{~1!$`x~>~r_L-Z|Fk&0ROqI+;Cbo$B!Ja(Z{}^X?P9cK2n|z-M_}RNyRPWE zr*++5`eiue3wH@D+7B(&dEDu$Rn=D6MWY(p7pr*T&(n`H zQVuM6A*))Zu0AImUk`OUA3W46LWsdJ*KwzBDkWVM)jSX2Q+D;c_VxCNhZYrMaG>I# z>QnGeM+!{znM@PkO+2HSF*4;(kv)(8D#r{TC0BA*mwe5{#-xJeQ@95l@Hxn46xS)dk#B-tG2qAfN zZDEFG6#Kr$O7Ug-NZ}fC!Shz(1(LM1ri^uIlXz+2R?;68)sgo-vqdI8$^#;URrf7P z^;ae3G$fsz6pE!WcWcs^OVWIEFBSfV(B)7KvClMK((nwq6DB$@lj6_le{9ejec$NR006gdL$zuZkoO z(bKD}d^ArltjcVtBo;;VcgS;C-Q!rmr(a`LILVaJ z&*2lOfkwZ$z$pH5k5Cp*_-X=oW+lW-|8aFz{GAtP>^e-u%P{Ou916YiQg#?{E#N)} zFTQl_J|{x32;p$~q`%_=irsXZume{*MA6xT7 za)zqb){xI=!`gqa{sy;;xyWH?xv`7~1G0#Ivd*kucGvPHEiBIHm}$lmDfK>oWN+o>n!O=NnrYpdobL-`x7{(HAN)*R)Q6# zr7!yxYFJBmJoG@lRB{ofD~8l*L+Ta7#%aUGse~Crk5}Ep&f?-xU|L!k>RD$_VN=HF z1I?_;BhRwkIR?9v&WE!((wvGYrIgoke)K05W@&pcbc2~=G4C(mo)P-Tid;TYl9RaJ zsKlHdV$Cz_1J+>h2dzP#W!9Xc|GYjE1N`Rtk$7f2%Me!NgCheMC@-V*Ol2}}=IOhY z$0atFGwx&?rw6KRd;+qW=!;bkDw)LdG@-hbPvU7?b&?YEV9?6ymMF%6Stn@WTXdm1 zpHGvfRaRpfVjO3HL;NMeuMk+mj2GX*_9Vi)2p179AtWN8GmH4OA^sYH#fltT`3M*Q zQg%fr_~xuxt-x-!DDPp5&HF00{)F&P2oE77A>g-|I2D8iSV1?WDOv5FhDNfOIeA4R z!PJRQI8sTuQ>NHY7LzBwuo=Au0_E?|8xoZN3CtC|N58R{XmB7~o-x|EsZjYBc-_d;zulBZ)_BG?#gQn+fD1Op z2a*My*}P8a2TB`HV;WNF`i5&stu@06Ci01Q6}F)A)-RPD63c5?TOw#zH;lH7#S@`iW9nQRuF zM5I*RXjguU)8T1;V_Gr?C&1zb5@97K`(eN=iUJb2WCQU@-jjn-%=90T}8|{ImFKf z^hKoNCI{em(SO-;|B&CNAsfkf_eA-0=|(??FH^z-d-|>1CejEe1Rd!nlc|%BOjo!1 zIeeL|uJbeM?ABIq+Yaxp-QKp{(_8o4X2hEyvixM`*`iZ=r?sphDwec1w hC(Yy|dC5oesz1uaKdAE7uH2(%4UNeTp#kaaEjAg>`L@!~$ffE#18Ynzg6 z4GGhtt&7^wlWMFBZQ7(C>_ckyq)m&mbxNXXin=M)rb&B$wAxgnMf;=erm6o-)$X|u z^O5C`J;aau&OIN$d+vGXF!x88Ux1Q-IUF_x3j25mjucS@B=i(-|s6ATQCebbr=oXIMXa&OZ5P%>D=QCQRSB7QWwo9{vEuV>H^O*$7%z8TEu8z58lQ<(b6T}4?r7hl_?Kzb zC;?VG=8Qa~J#D>hh8zZp+BqI9x&aZ*W7`E7EDdXWyyX@yO*yM^q_&Z-K5+VRvGzo_ zUObr_N+vSnu@N;J*KNa0eJ&XviK$suz)z{0ClaX$=rElD{u*R{5*BtO)rp}IwM*ZH zUw2jEasMVz@dy5cur-hL~2Zg5Wyk^Mx5;wryrByAhcrnE|fpH8EvhC1~Z4p;8IbBeKml;q#4~rFTr) z&l>#z5&W>JMf!yaq1mPF*!%^+*Kk{VdbfxoqKZ&*CY@u$aov(qCya>8S>?VX%dtl( zqR5iW;+b4B%Mg45oT<-|%yzlyC!(*15O>xlW;dE*=F~*LpxR;mR=QDB={hdwH-%Z+6oo;h* zhV+P`?ldl2O{LPg)Np(vp2}v}X*|=twfzBSSu~5tx;2wkxt=(P*@$E$eilFNu7^Uc zvS&sr6W9I%h58=BBwpFMgBZVuft9K$98EnOlCwgIzHv5E2s<^=QBE|vPyb<=@Cp&npEIk=*|2}O> zteWH=4vTPag#JkP=#4E9RB?z{_wt7wqop6Go>J6@X^U>#_%8O*s+V9BL4=@~V1j@V z(A}|<1XcoZRO$)rMGm@UD4kBSIeLGE;8pDEtA=4b(pMwB3^?7_06Xv>eUsXSJ=Gw6 zX~L^}+o9@z#)TYpkaylXX=vC)>nu?`ik&z5;`^Gt7!$momnvR9qxd*jV_CM`RLhrp zeZ@+zFBd+YT<+q{nGcL^K9?#LC-2T~?#RU*8Eu~wEJ}W8R4H!e87qnS^b#eTX6jgc zkDB7h64O|;e-=*Rx&1rg8+d2`<(eN;0z`u8GBOf}e8E4AFZG9|8Nl-gy?CeJ0gvKG z{U;;Bg6<%H(?$;@>ve^^56>KEgKy!_4>U+@6hAvWh|LGRb;6u(ir0c@q0|u8#hu`B zy`^F%#Ece^`3{i?%W1C4KZ1|?2hla)HJH$S=b0G$|PFy@(CtU>m!{HFjb8g2gM37h4@S4YoBQ4S;gT~b( zt{I_mifgco1g{Z@&&SIy(fSR7Hwi8iTpW+;4Oj&eO&*?*R}f12>@(PP*ay$FlihtbU-i~V7=9jlXXan&Dzw)t2ZYU;@> zOmJW42Hwkl9jldp%lCc>+FxUBU?W3ukO&6UN95n}*PDO?YCSL6?vbbQj(V#?=!mkF z@>Bcmp-%ZW*S!OHZ|I={Mt4692>mX6=9$N_dGxqLSc&=omc=WhLHPr&^fBP=(RznS zyvTW&UBUm1Uj51?zG+Nh7p=tEZqUj{aFalIB=Sc3iL24phzTR_Y#6^B^Vt5xm-O#X z#)`r5o~ol(@P2M0{NkIoM(Fz7#No3jPLEGvPr@t3N-&xTm+ojb-DnQ)tTf+r0muIW D int: + """ + 保存定时搜索公告到专用表(关键词匹配专用) + + Args: + announcements: 公告列表 + + Returns: + int: 成功保存的数量 + """ + if not announcements: + return 0 + + logger.info(f"开始保存 {len(announcements)} 条定时搜索公告到专用表") + + try: + # 批量保存到auto_announcements表 + saved_count = self.db_manager.save_announcements_batch_to_table(announcements, "auto_announcements") + + if saved_count > 0: + logger.info(f"成功保存 {saved_count} 条定时搜索公告到专用表") + + return saved_count + + except Exception as e: + logger.error(f"保存定时搜索公告到专用表失败: {str(e)}") + return 0 + + def save_manual_announcements_by_source(self, announcements: List[Announcement], + max_per_source: int = 100) -> Dict[str, int]: + """ + 按来源保存手动搜索公告到专用表,每个来源保留最新的max_per_source条 + + Args: + announcements: 所有公告列表(未经关键词筛选) + max_per_source: 每个来源最大保留数量 + + Returns: + Dict[str, int]: 各来源保存的数量 + """ + if not announcements: + return {} + + logger.info(f"开始按来源保存 {len(announcements)} 条手动搜索公告到专用表,每个来源最多保留 {max_per_source} 条") + + try: + # 按来源分组 + source_groups = {} + for announcement in announcements: + source_code = announcement.source_code + if source_code not in source_groups: + source_groups[source_code] = [] + source_groups[source_code].append(announcement) + + saved_stats = {} + + for source_code, source_announcements in source_groups.items(): + # 对每个来源的公告按发布时间排序(最新的在前) + sorted_announcements = sorted( + source_announcements, + key=lambda x: x.publish_date or datetime.min, + reverse=True + ) + + # 为没有哈希的公告生成哈希 + for announcement in sorted_announcements: + if not announcement.content_hash: + announcement.generate_content_hash() + + # 批量保存 + to_save = sorted_announcements[:max_per_source] + saved_count = self.db_manager.save_announcements_batch_to_table(to_save, "manual_announcements") + saved_stats[source_code] = saved_count + + # 清理该来源超出限制的旧数据 + if len(sorted_announcements) > max_per_source: + self._cleanup_old_announcements_by_source_in_table(source_code, max_per_source, "manual_announcements") + + logger.info(f"来源 {source_code} 保存了 {saved_count} 条手动搜索公告") + + total_saved = sum(saved_stats.values()) + logger.info(f"按来源保存手动搜索公告完成,总计保存 {total_saved} 条公告") + + return saved_stats + + except Exception as e: + logger.error(f"按来源保存手动搜索公告失败: {str(e)}") + return {} + def save_all_announcements_by_source(self, announcements: List[Announcement], max_per_source: int = 100) -> Dict[str, int]: """ @@ -186,6 +275,41 @@ class PostgreSQLStorage: # 由于我们在爬取时已经标记,这里主要是确保数据库中的标记正确 pass + def _mark_new_announcements_in_table(self, announcements: List[Announcement], table_name: str): + """在指定表中标记新公告""" + # 这里可以添加新公告标记逻辑 + pass + + def _cleanup_old_announcements_by_source_in_table(self, source_code: str, max_per_source: int, table_name: str): + """在指定表中清理来源的旧公告""" + try: + with self.db_manager.get_db_cursor() as cursor: + # 获取该来源当前保存的公告数量 + cursor.execute(f""" + SELECT COUNT(*) FROM {table_name} + WHERE source_code = %s + """, (source_code,)) + + current_count = cursor.fetchone()[0] + + if current_count > max_per_source: + # 删除超出数量的旧公告 + delete_count = current_count - max_per_source + cursor.execute(f""" + DELETE FROM {table_name} + WHERE id IN ( + SELECT id FROM {table_name} + WHERE source_code = %s + ORDER BY publish_date DESC, created_at DESC + OFFSET %s + ) + """, (source_code, max_per_source)) + + logger.info(f"清理了 {cursor.rowcount} 条{table_name}表中来源{source_code}的旧公告") + + except Exception as e: + logger.error(f"清理{table_name}表中来源{source_code}的旧公告失败: {str(e)}") + def save_crawl_results(self, results: List[CrawlResult]) -> int: """ 保存爬取结果 @@ -389,6 +513,15 @@ class StorageManager: """按来源保存所有公告""" return self._current_storage.save_all_announcements_by_source(announcements, max_per_source) + def save_auto_announcements(self, announcements: List[Announcement]) -> int: + """保存定时搜索公告到专用表""" + return self._current_storage.save_auto_announcements(announcements) + + def save_manual_announcements_by_source(self, announcements: List[Announcement], + max_per_source: int = 100) -> Dict[str, int]: + """按来源保存手动搜索公告到专用表""" + return self._current_storage.save_manual_announcements_by_source(announcements, max_per_source) + def save_crawl_results(self, results: List[CrawlResult]) -> int: """保存爬取结果""" return self._current_storage.save_crawl_results(results) @@ -476,6 +609,34 @@ def save_all_announcements_by_source_to_storage(announcements: List[Announcement return get_storage_manager().save_all_announcements_by_source(announcements, max_per_source) +def save_auto_announcements_to_storage(announcements: List[Announcement]) -> int: + """ + 保存定时搜索公告到专用表 + + Args: + announcements: 公告列表 + + Returns: + int: 保存成功的数量 + """ + return get_storage_manager().save_auto_announcements(announcements) + + +def save_manual_announcements_by_source_to_storage(announcements: List[Announcement], + max_per_source: int = 100) -> Dict[str, int]: + """ + 按来源保存手动搜索公告到专用表 + + Args: + announcements: 所有公告列表 + max_per_source: 每个来源最大保留数量 + + Returns: + Dict[str, int]: 各来源保存的数量 + """ + return get_storage_manager().save_manual_announcements_by_source(announcements, max_per_source) + + def cleanup_storage(days: Optional[int] = None) -> int: """ 清理存储中的过期数据 diff --git a/gx_gp_monitor/wechat/__pycache__/message_handler.cpython-313.pyc b/gx_gp_monitor/wechat/__pycache__/message_handler.cpython-313.pyc index 81d48f27e117098e3021a34f09f8a819645a9cad..c741cd5da65ed2066ec2367764aae6d3463f2de1 100644 GIT binary patch delta 10700 zcmcgS30PBSw)bY|CaejBoeP8|?7M)X;DU%O$|Y`~7(+x_40w~&(b~qgYOPwu{#8+H zfsWQ_7ih7S*3MLCd9|JCOj4YZX4)BN6x45~uW@Q;rgrAdJO8}|BSUBU-uJy1@!Wqo z|Jm;O|NoqmJoy*FwSHm1m;U|~0iQ?Du5H&`dM)6TfGi(6C%8(gW11tFxMnFMYnB#B z7&?-8K*UBd@u)(iEKA^e(M%%DQyfkV;AptfSZ*X~a%D0%8poutbX%%c>sF!QJk`+G zqHi=PUF;{AD@Og>iqVX;wc(72kt~)}OHCr0V1V&rS+$=@OcUr}dKg;UHS(M3txr~vPK1&e#V+6s(GzFohwbAG) zy&U~?xhgK!D?k9j#OY)J>E&{O@%d6yz;X)ZMytSRvLMhYksz#K9aEqwNav6GR;X+% z{^8|s3f2WM3A$idnWzf_sL2;+g1V-F+9Y0Sm`~zInqY+gELSkeUJAe9FKq$1yOMz&}LisIR5mIm(fYnvvG&~vpo7`uy=fgvfZa0uaocmebcz( zD{YHqOP4X@U!wb(#{gey9q!m#)>W1CUr_ITS@3TWSY^2wX$UK!tUV66M#8Okl|0;_J&n~m%am~>MHIGKzF zOM9ouEi-hQEUeyOaR+s=#{13>x4*gF)Yf5a;T3WR8#`bT+i7Yyv~1L~4;n3QN^dY2 zyDWM*aolpFsjc0VV>Gg`%I()~vcMSxEUY=e)6ag*#2E(2VTE%Zs6vt{X88&iSwdh zoV{L39G9`(yKcO8p_IBS$fWNIO6jlgrN)uNglz<@IPk)KE5=Wp8h^XHv3^NmDRm16 z33mlqv|H};a;-CA6c#?yPmdqyzH##HQu^k*N3Xwqe7t91QpuZ7o*mm`AKUlVt({Mg z@9rMk(|hCCj%)OupE5+bx0B$jN-MFR3?->nNi_tAxZ?qUTbeg;^eMg5|XzJYT zmYFT=dQ1C8qg&i=F>W-okK^TjMw4};k%c>rt;2okW<6^Hw`A)vhdcl_Z5XS?onj20 zz+evsoE%sL_C)}0$;3UrA9sW-Fr@H3)nc~jEoSy09#u@Z1UKaN=ce)b1$(56-Gwn^ zaFTPE0^5zdei$X5JLBAByIV4`y<`wI7+Ds!=2E~ihoRuJN@Q5+Wj|mpV!vS9FU%2~Bvm#V)z3iab(xu+Bq> zG~pf@5k>ce-|-WLCVD6$EoUI^Ox%dJ)G@Q(sa@hwB?E!bC>~t~=s`Ssunf>c2p!o( zjy4*cjfN|Y#*z5-A2k{;+Zac3i8G;ec-}?nTQwggR5=@s-PMlx^*)q@n(#Y>Ff;hjjaUA_-Npog7hW(c3%X3IwGwS7Wjr(K#N1%#CzKW;h};J%lie z^vGqjsJqG&Mr0I?rq6Vy&-^&O>}X(*tS<>g>?~}Y>r~C{uKF}7%f4-R>BmWPj{5bG zJw>i?x^GjT!5(6-94vEYR5;S-UQD>S?DE1(Esps*hpx$?X?BJ;ACuh{63OKxwndDC zUgK1)IauWpp?7w~lnF~CVK^$26GWPo;gKuoY?#d%08{VzVYK(CblffshW2Ht7^W{PsH#Zm1ZY^M0Th zM&4Hmaa&DQ#|qz%&#R6QexM|wE&Cus3=e|n*(4KQLYgQYl?n{-N3Vjsj$%~!6i2x=D)ieIWdW^f$gd(eB9Zw*v}v|R z=8K~;$#t@OiKj`SQ$RlH^jC`IIzK+u6nPu7n5Yt=$-gOz;|4(I&qPN;_Qu4P2$?vB z7D4Kx3-F4=agO)pjB-1}idKw!lPgnTEaVJK!s5W{AX5dVxI+&T5_YA-?AnPGCPq^E)@Xg$`%n!j+Z4Qnp-9k zO{GbNso?V%J~~xH2H*09UT0u(xg0u#$HPX_#xc1-I1ds-qFz4zYEvkTXQ2;Yj8ntY zmoDFK$iCYzHn6l4@J z#nWSCLZJremE;R~dOD&(iZ;)Vr6Jv&Fa$wBx(oM~N!>IlaYG>%)W5W8hIdG(#;I?@ zzj+-q^Tn_e5@vDPYn(}4p@!_0d)~`lr*NJNoWp%MmvEeC`EU-$oGGS^bA;L4UYq0) zUJ=f5fakYzz!~^IbC@%Q1DAoPm*4Zf2_2^8pslbnXvSPk1`QDk#2fohUB9q@eBYBe zPT?ZC8@pc~J8*dXx$O{&Kv0vL1F@JX9D991NKe3PIgG`#E055770?o0V1vnfA`%w@> zu~0q%mTsBR)XKFCIQaH{a6Lr{|Gz9J&`c^4%{(m^L&5{q#qPndG7X_6>wu2Jx2gf@ z4%W=r+M>6BMCA9(m>|uj0d&h|b?7&)Yt_$o&qrigDhjNk)@9A==rrg%%(J1vPyQBG znBmHS5Uel$bXI@XXhQj5#rc}oY8(mWEIxl4wE`BlJw%$U@gXB?HrCz31zBq_0IW8| z^#r&t4_1#ZjxCLgT3WjMoX?c8iSBZOeM-O^!X8v)I&*l0AH z^=(Ejp0oyF^3Uz0$IibFarUk4kI`0qmrRf<1Q+MYjqM)1`52bq#@Qod2fh!ffYlZO zi2S0llds)8cj}9G_5qoj`_IERp{?Hhh_+%q=*bkqim${e!cx@O&ez7D`XO+kd1WRU zfAP*Sin@h~vHbvUVW#YI0C&-@`Dz>c0yMw!1AwzzPw$~;Xg5h&aSBUiWo1D=1)0TD z6EaK^wL;BtLiE}RE8W_D>_+b?UJ=LylK=r{PQ2Kl+0B9T7C7?7DFQ zjX(d~wHaUs{91V@o-h?>44~olSg%F6?2^Yp@1}%{IZLDRxl!oXOZ_Alfs8f=ZKzDO zxdV8IW3$X%?X9qHK7=`U;CgNonX@LI>@Q%{C*$$=E%%t+Djx0r{Wy`6Kw;5hY<0)B zv>8oYlGD-wJH~8jF&Q_TTWns>aVt%omiG1S20c#0vo;%{1Ylu*jfIgyF+gvzux`o3 zC|1@j>@b?xSFl*W!C(Y~moR|4h+tpEU^0KwM)2v=kMJnYq1*uzc@Ubj(BJ0GlMS6< zfHyD>HUh8n(-_;IKWWiEzrgWjKd~w2pNvIIC^(&BY?PT`Oc)dPDR4*#U9C0(tjcOSy1_BLB)`^-H{N% z>Lc=l@}7QN+=A{ZS5(|+RG~AfaB#y&RJB7@4Y@^X;owqd%8b#J1(Q;px4B~CdsiJ@b-dXlB~liWkT0f$ID!)I1Q4lNE>+4W z;pMJq`nFV*8UlHoGORn#<0nd0JAyQSRuJJCuK2vclEL)h)sDEu(~D!%q>d(5Iuk1$ z3!6p~+Z;i(N0c1AnEXst_epHgNNjQU!cWz)J)3(UJ^H94d(o)6+NrK~X>$f*&%};u zmq32%(rE2kd(>dPBVoQvQ{d9(gQ#gsv8ZX0Jpq5Fi0HJdi7BIrWzNL1ivgFnTz=58 za+_oJBOZb%7uXgFz9a}uwE%iC03`$#2%|d6S6*4Q+OdWmS!H&tv^XqV0OetFKE~Wi zF2Iikf_nUzvjoEiK@&%+8Fyj;f~_<0%kU6_V)=D>fFm$*M6PjANidL1dc-1)s7GeI zLlHS8j*{BT>n?9{lq_{HjUQ+0j@I{7^lbZdVfE!%ql;HN7q1>!xW=J3j4U+t)r@M2 zoSLFR^RU37nK^9yNHfpTZXIoZ*xCMY&jMHThS6p#{Pk@cO(}P#l#iw?a;7Z0oOvZ> z1&Fl`#P6wcMQiN2_C$NbpxAEPJov!H@Qc*t1V?JEGrIOz)om$}vy23>qT?KK`6E#U zgPTU8it(DvcZ7~vOGb*9IvRD(Vx42gGRLyDj#RxfTHjN3H7;>9uEZHvGMqXRSLX^ z9SKRegovhn-1t|j>Tf*$nC>@sf(TX2mxK^@&8IB8mV!CB6b=0Uj*Qw4OOdU~I{wk=F`o<&0>%X}}q5hq7Y{%gUc)UVX8%SJ| zsxgd{V3=HySVIs$rYf@G@srYEfIn4KBvvO8|B(|9@V$_EA@KMhiCSDH{2;qRxVTvO zvpfcjf0Lth&zE)U6}C0 zh`hRB;Vc~|h28s+AMi{L`sgx*~eg^WvWAs1nZHk3_)2aA(T_9S|yG9jP8 z&CcQh?%Lq45^zc1`{Z%lJpjNhen{V8MdZRT@>NvPkeCIrqNS6C(1yizQLb{vo!0C( zlNA1jTik6jjP^IsD^=oA z6^YI^KPqSx45h8!BK6}izkoGpptUlj9~xE(fbmzpKQ=tfCXz^MTqX!0QHya#C`Pm5 zVCCk!-B9X;;x(%w(M!hX1tJnHUf;ZoJq43&5@wT(!2s@_#(;a9+%;N{y9F40jzJ3G zxr5;*x3u6|y4l=f>3k5bVXhR)n-V3qr36nBb&KFiGqD4xsVz>BLZWSL8^|Yy#@b?K zWG)hQ)sT5;X;(U#j~?l=lKtq*u6FVdL#sDkA~Q~MoUvR}?sFBEL1NxuwX}EeMl3?r z=CZf~JnnDkFzQWk#d6<0akWXXArL7;FPc}8?+uZb7p3F{WPi9xAQU3;HmLdx?b>D( zk|)p~ZA+A5jQc!h-HSmV0MxMkBY~70N`9anY3>!r&YR-5A{S8kD-DSdb+gTDRk4l6+&RWY;l~ z_B-z!^tV0P!2~e9)rzT-(5hpvqFH;BHF$@zBCKscZv74e9O+K%P~3U}?b>?l^Rq};EPko`lc&ptzv9(3VQf*_1U zzde*jE<@De4)Wa4=EGM20o9zCpRU6aZv|rRFg~7}8nm%8%*hP^y?Y{xVn4;*&v5s@ zPH4#Apv33L$Q8)1_Yabln3Msvxz8!G4z7s@#j*lq?PqQ$DA z2Ty)2jK;|}ivVyb&E%IVrSw{M1sbr&lV2gHT`5h){NN1vgFV^S57@W3LlrxZn@qeb zOIn$kv@tWOmA!_^NdWn-V0G$Up_ZcV3L$S|p+Zi$32h+nI+LE{mcVO=G@9kq=MLg~ zhcma6xYL+(FdXr_<%Uih7cRG0*$zJb$DXF0FxsSw93QuwbFDVE)7oWb8vu`YFTC;G z;*NHc(aeAI0lzP>@cWN*CXSO37`SCzc#mUlzsWBsQQ+Aq$r`Lr5&Xg^3{{?`1(~9u z4QGEtDuX7Hgvqa1z|@aDs4C7A5X2#ZAsNA9!X(telMzCJR>X*!gdhy}f!}ceQT&18 zn>b&{NOZ863Pq;}qtGErWn-lGBV-Fq;wF69b04VZ$$Sc!ufrP!rd@6Dnsvfk(n(xiVY;_v4{Joge5IlrQlzrQu?GBuv8u>nNBA z(c#|~iSxzxrfcC$kP}diSEBfIV0)5^f-;JV%WiKx+Y8@W`qm|ozdhV`6@=zW598Y} z@Cotwp}|s`Km7FA5jcnL2eez zo@4rAM!0XI21O1cS_y2V#RLXTu0%pMI%?PGS&bCu5NqmDP4 z$rsT3Z|o=I(TX=8g7EH_Z|2JJVZh>dz&?y5=hI`0aUbs+u7bw~;T8t*@ZWqI)t}!L zyM+|%Nju{qxW?d$VZ&>y@9-VZLqg;^UzoO;6t|JX`5uC6T=q5`Op~Lz#mTI_!%uiv z;ZXhX3^F=W96LPUL%_q)xSW4Bx7@*fPcho{mR|BK7Hd2D{H^8k&#_3{HFOfyzg-^G iji*w)aolZe`Tg<7rF z#{k_54ndpSw)FbC*0y2nj7;vd<84jEduPV9)qCf*-+bR)`y3Fo{q8sU z^grvYz4qE`@3YtX_vY&(qMiT4#C)exDJb|Yvs{c}4O>sny79Q+Q1Vua$w;#A{QnnJ8^tmN`49!`T5j*6D66zQ25Sx`V|RrT zqeLyXyswhTZIY#WyhN$hMp+e;7@>O%WmP`bM?axg@p{cE-IyoTv5(EwPv|wgzAy19 zbFJV-{ghfi>?JYo2`}*zG@Nvi$eO@OF>OgS+lK=+QR!59oDeic$tZh1%w1MKte|k; zTwRPcu{>#5W0T<~OMKy2PMStplQ>z4tZatxTuZN|ri;?3we(Xir-Ms5ZfQtUC6DqW z$4g#F#Hj^3bBc`~4#&grUgafn6Y&nu5wGS{TwYMF@fjhMyS=-^EyqJU-U&7B#($fb zU1tELLJ>Z2CcLjJd}7<+$z8>Ye1l*XZaxz_+Foo3D!uM1`{qiA+sAnk`BFYTfFXS7 z2-w~`*FD&EBwXJMP6S)8-6h!i5=P9z=XwXvzZTlzzrVk0uzMd^#@Zd;I_E~Vas#`$ z){Uw>J`*v&+w-M5)thamEp>als(~HCH zZI3OZ5$o}}yg#-JzjZEr`k!5o4b=`eLaf8;?$RJYF}luVaG};>UwtCrWwMno1TS z_$*7{)e{AP@zfWhF3}WKPesH<_>WUd(lS*=U#MsPer*1&u?3B?frPZ%36}l@%dLd* zjgqi70YCRlTAip^6OmG5;#(4%5)V%AOuwZW7f|O%DB7YK(8T>%s~gZIw#;jq7f3BQ zqq(J<5YSGHP@+jAP6A1Jol9~a3qk{H@w`|J*eHv0ee{C|t3hhQYsj{kSo^Yk=aJiDGgjC*J2Fco5`_1W0cV#br^ z>{i=kqw2lfCWm^jPtjU+R{d0li?T&&sbvZeQ$TqbEj8CbQSP^~QlN%0Dbs)F*d zFqNWgip9)ABSk4G1K4p2Yn(M+OmRw^G6!NHKl`UZ90@ilP(ot)7+!_z=f?9K(s)pZ zT}e?>pe<>FgcFx1^6daNr8RlDD8lIbpjN?%HJ^+spsJ+e-UjpaIq^&A(nJo z44}~#3zz}+2Hf?2M!tcMQl76O?6|N&n6pi6H3^zUvY}aKP7rZo!ZNsKuF~LPgoRm4 zhz1r)_yN%rf*W-?g`YW{LTBOsXf+lO_0J~#fd=9@b&0yHRCtciz*BArxoB`-Ynm#j zJbT!^O*2d`d1f0kypBA%#BrJu4Uh}}9Pw(-^`+yKG86Wc8SCW3Wf{E;9?cBe4i7{~ z(aZ!DBLx;!2r9Y54TJ(TfL00$bq!)G?HmV0<6x^~3Sp=@o8bKH3RamoHt1r7xPFX$)K%@ijG4Py)i&tkV_JHbpMxnS* z;~Z3havctmQJ!eB5&Iu5*Pc%+0k!#~1H!}$k24F=yroMa!1SG7$pIZ5n>%Kc#X zae-*=wQd(^La5~e0q_+)((&dIgHYBVTx?Z*Reuz>O*V?i^FP~+Gl{}5_`&|rTkZFE z?gO5=U;jpU&#y+4*rRwDQScbLfWsZf2fL4kj-4Gmcf8o(BOeTBttn3b|9wCxIO#>R z^eC8{^?3e^ISj)1(i&r3P&4`)R(dzrKxN-(cllVJ9MA#iftmq=Q7q>Jda!%hpvc8? zL5bJtb+N(d8s8e1)3d&^inOSPw^b!)2jeo*yM@3a0!0AkF#@d|BZ?`w%9fZchY*C3 zqsaI|S3)-EAcc$D$Ku6Z3FCsaGZ;NOR&)g{f^x!HKxqiIk`6rmjKTJ0dR%i>ieFnc zC1xcgzo!-|3n8NUIQ@VY|6y5dV$p!UU_d`%KwmhZ{~7Y{;ocyrQ*#B zyy~`oT)!R{R;5Z8Twn6LyhZqnj;hk!o)tawKim*ly6W~)SN~Gi?WLOnHJbuUHU~EU zQ^2&fKVfUD{2LiHZZREEQ2LaB!QHQOH_g2>Jb-LsMud_XvIt}0CDXK;88nq!OaJv@ z5v5D{j*_Y@xQhN!0ey(matns!I@f;J? zCyOVTCMB4aK0Ay0NR~1?UHnmwl%QqCSWsP+)6jf1N=oEd4Uy9&M9xyoNf%umpFJm8 zbS+*2`fJG&&|FIw5!s}enpOxy`a@VilCu zvT$to;sd_fW5{ayqyTUX5B2n*KU4V6zGcj93eVa&S^pQ(O3LTp2aRyhz1wpdJ)m&Y z#&+gi3K!N^)CE<*C#(eugnbQM1W*KQ(Ki4=sl$gnZWNTUn^=br>W6$S>vgPmb3>(r zuNo7HrIvGhook&AIJ&wyix3<7mb7Rp$)T2Th{sdub#Gv~rxqQDYfYMwF~z`S9D0P4 zHl;D&Qh3^?^|aQ1d{e5Nrt#(aQkubx={bhQ&zi;~q8GQ(^ z-&@XL24C4*FFg#+4hDbItn*jyD;3du@H>r*<8Fa=3zKiy!a&_8q{d(BaBS0Wm`jxZ z>!wm>{K(#eW75#ZdU68>B~C9}?HRSdX7Kwf7-e_4_?v+zsNjq6sMEdbaa9KDu0j6> zzJn6shB>tHdiSqjE-`-nf#1>e4ga5-TgB$TJI!$STLl_ErO%R}NlKU9m*59)Wtn~= zpGT)NG4I7w+dhW{z_Eu;%^8{hhoo&Jr=DDdpUlG1X-Bu~tN59byH7BhpFYgIhMY#o z?1lX1^YUZzdXt!`Mw63pFZ#(`9pNbr@RW|{se|o>w8Vd-T_>f_`~P_CO`5)p(Fr4S zhr-P#a_Jo0cfv)_^jl7T4hC4%HB*;O_Td&X_$LJ90A?J&G<~WDq)5m9eFovG80y*^ z-qjeC!E1cW+8BtBK|5Q%4bwZQUZ7~uvvj`YqUz~3eL0!%^=s)s{^4B=0B z{6IljwVi{|P%wsbpX+^XUJeZS>gu>pNYIze$8|6W!dsg3vf%D)_> zAf2&Ap7~OKW_5mM6}mv|J_i5_$=M<@D->HqaKuDLScV{Fjui@3AF(2(KPZJg#&T8Y z4$<%|F~S^U$V3bcu99Qt<3sdMKTyx^o1{J|JJ?(jOq{> zN-TWmS=ey7f{BRyTQB!9$$YGtq**C6FCfA5d!Y=MUwfUV{9j#bX5bGLn{VXO%kZ%q z6?7b?KmG-6z>Obo1P+tkER+_JPV?}Ln|ZVxyKg4byYSwduP05E*y&Ddgd)!~D|#Gf zS3czBh>OPKKbe$UN=w$!Jrg1nFI*oM0@m_CMPh3ulyh1Bk~9U diff --git a/gx_gp_monitor/wechat/message_handler.py b/gx_gp_monitor/wechat/message_handler.py index 24c0996..033889a 100644 --- a/gx_gp_monitor/wechat/message_handler.py +++ b/gx_gp_monitor/wechat/message_handler.py @@ -244,32 +244,101 @@ class WeChatMessageHandler: try: from ..storage.postgresql import get_storage_manager - storage = get_storage_manager() - stats = storage.get_statistics() + from ..core.database import get_db_cursor + from datetime import date - if stats: - response = f"""今日公告统计 + # 获取今日关键词命中公告数(从auto_announcements表) + today = date.today() + with get_db_cursor() as cursor: + # 今日关键词命中总数 + cursor.execute(""" + SELECT COUNT(*) as today_keyword_hits + FROM auto_announcements + WHERE DATE(publish_date) = %s + """, (today,)) + today_keyword_hits = cursor.fetchone()['today_keyword_hits'] + + # 各类型今日关键词命中数 + cursor.execute(""" + SELECT + announcement_type, + COUNT(*) as count + FROM auto_announcements + WHERE DATE(publish_date) = %s + GROUP BY announcement_type + ORDER BY count DESC + """, (today,)) + type_stats = {row['announcement_type']: row['count'] for row in cursor.fetchall()} + + # 历史累计关键词命中数 + cursor.execute(""" + SELECT COUNT(*) as total_keyword_hits + FROM auto_announcements + """) + total_keyword_hits = cursor.fetchone()['total_keyword_hits'] + + # 今日各来源关键词命中数 + cursor.execute(""" + SELECT + source_name, + COUNT(*) as count + FROM auto_announcements + WHERE DATE(publish_date) = %s + GROUP BY source_name + ORDER BY count DESC + LIMIT 5 + """, (today,)) + source_stats = cursor.fetchall() + + # 类型名称映射 + type_name_map = { + 'purchase': '采购公告', + 'result': '结果公告', + 'correction': '更正公告', + 'contract': '合同公告', + 'pre_announcement': '预公示', + 'single_source': '单一来源', + 'electronic_market': '电子卖场', + 'acceptance': '履约验收', + 'engineering': '工程公告', + 'intention': '采购意向' + } + + if today_keyword_hits > 0: + response = f"""📊 今日关键词命中统计 统计时间: {datetime.now().strftime('%Y-%m-%d %H:%M')} -数据概览: -- 今日新增: {stats.get('today_count', 0)} 条 -- 累计总数: {stats.get('total_count', 0)} 条 -- 活跃关键词: {stats.get('active_keywords', 0)} 个 +🎯 今日关键词命中: {today_keyword_hits} 条 +📈 历史累计命中: {total_keyword_hits} 条 -分类统计: -- 采购公告: {stats.get('purchase_count', 0)} 条 -- 结果公告: {stats.get('result_count', 0)} 条 -- 更正公告: {stats.get('correction_count', 0)} 条 -- 其他类型: {stats.get('other_count', 0)} 条 +📋 今日命中分类: +""" -提示: 数据每小时更新,点击"立即搜索"可获取最新数据.""" + # 添加各类型统计 + for ann_type, count in type_stats.items(): + type_name = type_name_map.get(ann_type, ann_type) + response += f"- {type_name}: {count} 条\n" + + response += "\n🏢 今日命中来源TOP5:\n" + for i, source in enumerate(source_stats, 1): + response += f"{i}. {source['source_name']}: {source['count']} 条\n" + + response += "\n💡 提示: 这些是关键词自动匹配成功的公告" else: - response = """今日公告统计 + response = f"""📊 今日关键词命中统计 -暂无统计数据,请先执行"立即搜索"获取最新公告。 +统计时间: {datetime.now().strftime('%Y-%m-%d %H:%M')} -建议: 系统会在每日定时搜索,您也可以手动触发更新.""" +🎯 今日关键词命中: 0 条 +📈 历史累计命中: {total_keyword_hits} 条 + +暂无今日关键词命中公告。 + +💡 可能原因: +- 今日暂无匹配关键词的公告发布 +- 系统定时搜索还未执行 +- 点击"立即搜索"可手动触发更新""" except Exception as db_error: logger.warning(f"数据库查询失败,使用默认统计: {str(db_error)}") @@ -347,22 +416,22 @@ class WeChatMessageHandler: return self._create_text_response("获取最新公告失败,请稍后重试", from_user) def _handle_latest_news_by_source(self, source_choice: str, from_user: str) -> Optional[str]: - """处理按来源查看最新公告""" + """处理按来源查看最新公告 - 直接从指定来源爬取最新的10条公告""" try: logger.info(f"用户 {from_user} 选择公告来源: {source_choice}") - # 来源映射 + # 来源映射 - 公告类型到来源代码的映射 source_mapping = { - "1": ("purchase", "采购公告"), - "2": ("result", "结果公告"), - "3": ("correction", "更正公告"), - "4": ("contract", "合同公告"), - "5": ("pre_announcement", "预公示"), - "6": ("single_source", "单一来源"), - "7": ("electronic_market", "电子卖场"), - "8": ("acceptance", "履约验收"), - "9": ("engineering", "工程公告"), - "10": ("intention", "采购意向") + "1": ("ZcyAnnouncement1", "采购公告"), + "2": ("ZcyAnnouncement2", "结果公告"), + "3": ("ZcyAnnouncement4", "更正公告"), + "4": ("ZcyAnnouncement3", "合同公告"), + "5": ("ZcyAnnouncement5", "预公示"), + "6": ("ZcyAnnouncement6", "单一来源"), + "7": ("ZcyAnnouncement7", "电子卖场"), + "8": ("ZcyAnnouncement10", "履约验收"), + "9": ("ZcyAnnouncement11", "工程公告"), + "10": ("61-266648", "采购意向") } if source_choice == "全部" or source_choice == "all": @@ -377,48 +446,91 @@ class WeChatMessageHandler: 返回公告查询菜单,请点击"最新公告"重新选择。""" return self._create_text_response(response, from_user) - ann_type, type_name = source_mapping[source_choice] + source_code, type_name = source_mapping[source_choice] - # 查询该类型的最新公告 + # 直接从指定来源爬取最新公告 try: - from ..storage.postgresql import get_storage_manager - storage = get_storage_manager() - # 获取所有最近公告,然后过滤类型 - all_announcements = storage.get_recent_announcements(hours=168, limit=100) # 最近7天 - filtered_announcements = [ann for ann in all_announcements if ann.announcement_type.value == ann_type][:10] + from ..crawler.spider import crawl_announcements + from ..filters.filters import DateFilter + from datetime import date - if filtered_announcements: - response = f"""📋 {type_name} - 最新10条 + # 只爬取指定来源的公告 + logger.info(f"开始爬取 {type_name} 来源的公告") + crawl_results = crawl_announcements(sources=[source_code]) -🕒 更新时间:{datetime.now().strftime('%Y-%m-%d %H:%M')} + if not crawl_results or not crawl_results[0].announcements: + response = f"❌ 暂无 {type_name} 相关公告" + return self._create_text_response(response, from_user) + + # 获取该来源的所有公告 + source_announcements = crawl_results[0].announcements + + # 按日期筛选(今天的数据) + date_filter = DateFilter() + today_announcements = date_filter.filter_announcements( + source_announcements, + start_date=date.today(), + end_date=date.today() + ) + + # 按发布时间排序,取最新的10条 + sorted_announcements = sorted( + today_announcements, + key=lambda x: x.publish_date or x.crawled_at, + reverse=True + )[:10] + + if not sorted_announcements: + response = f"❌ 今天暂无 {type_name} 相关公告" + return self._create_text_response(response, from_user) + + # 生成Markdown格式的结果并发送 + markdown_content = self._generate_latest_news_markdown(sorted_announcements, type_name) + + try: + from ..notification.wechat import get_notification_manager + manager = get_notification_manager() + if hasattr(manager.wechat, 'send_system_notification'): + notify_success = manager.wechat.send_system_notification( + title=f"📋 {type_name} - 最新公告", + content=markdown_content, + message_type="markdown" + ) + if notify_success: + # 返回简短确认 + return self._create_text_response(f"✅ 已发送 {type_name} 最新5条公告到聊天窗口。", from_user) + else: + # 如果Markdown发送失败,返回文本格式 + return self._create_text_response(f"发送失败,已获取 {len(sorted_announcements)} 条 {type_name} 公告。", from_user) + else: + # 如果不支持markdown,返回文本格式 + response = f"""📋 {type_name} - 最新公告 + +共找到 {len(sorted_announcements)} 条公告: """ + for i, announcement in enumerate(sorted_announcements[:5], 1): # 只显示前5条 + title = announcement.title[:25] + "..." if len(announcement.title) > 25 else announcement.title + time_str = announcement.publish_date.strftime('%m-%d %H:%M') if announcement.publish_date else "未知" + response += f"{i}. {title}\n 🕒 {time_str}\n" - for i, announcement in enumerate(filtered_announcements, 1): - title = announcement.title[:25] + "..." if len(announcement.title) > 25 else announcement.title - time_str = announcement.publish_date.strftime('%m-%d %H:%M') if announcement.publish_date else "未知" - response += f"{i}. {title}\n 🕒 {time_str} | 🏷️ {announcement.purchase_name or '未知'}\n\n" + if len(sorted_announcements) > 5: + response += f"\n... 还有 {len(sorted_announcements) - 5} 条公告" - response += "💡 发送关键词可进一步筛选,点击菜单可查看更多功能。" - else: - response = f"""📋 {type_name} + return self._create_text_response(response, from_user) -暂无该类型的最新公告数据。 + except Exception as notify_error: + logger.warning(f"发送Markdown通知失败: {str(notify_error)}") + # 返回文本格式的结果 + response = f"""📋 {type_name} - 最新公告 -💡 建议: -• 点击"立即搜索"更新数据 -• 该类型公告可能较少出现 -• 返回重新选择其他类型""" +共找到 {len(sorted_announcements)} 条公告,请查看详细结果。""" + return self._create_text_response(response, from_user) - except Exception as db_error: - logger.warning(f"数据库查询失败: {str(db_error)}") - response = f"""📋 {type_name} - -暂时无法获取数据,请稍后重试。 - -您可以返回重新选择其他类型。""" - - return self._create_text_response(response, from_user) + except Exception as e: + logger.error(f"爬取公告失败: {str(e)}") + response = f"❌ 获取 {type_name} 公告失败,请稍后重试" + return self._create_text_response(response, from_user) except Exception as e: logger.error(f"按来源查看最新公告异常: {str(e)}") @@ -1005,6 +1117,34 @@ class WeChatMessageHandler: return "".join(lines) + def _generate_latest_news_markdown(self, announcements: List, source_type_name: str) -> str: + """生成最新公告的markdown格式""" + import datetime + + # 只显示最新的5条公告 + display_announcements = announcements[:5] + + # 生成markdown内容 + lines = [ + f"总公告数: {len(announcements)}\n\n", + f"更新时间: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n" + ] + + # 逐条列出公告(最多5条) + for i, ann in enumerate(display_announcements, 1): + title = ann.title + if len(title) > 50: + title = title[:50] + "..." + + url = ann.content_url or "#" + date_str = ann.publish_date.strftime('%Y-%m-%d') if ann.publish_date else "未知" + purchaser = ann.purchase_name or "未知" + + lines.append(f"{i}. [{title}]({url})\n\n") + lines.append(f" {date_str} | {purchaser}\n\n") + + return "".join(lines) + def handle_other_message(self, msg_type: str, from_user: str) -> Optional[str]: """处理其他类型的消息""" try: diff --git a/gx_gp_monitor/wechat/message_handler.py.backup b/gx_gp_monitor/wechat/message_handler.py.backup deleted file mode 100644 index c490241..0000000 --- a/gx_gp_monitor/wechat/message_handler.py.backup +++ /dev/null @@ -1,970 +0,0 @@ -""" -企业微信消息处理器 -处理用户消息和事件,实现菜单功能 -""" - -import time -import json -from typing import Optional, Dict, Any, List -from datetime import datetime - -try: - from ..core.config_manager import get_config - from ..core.logger import get_logger - from ..notification.wechat import send_system_notification - from ..storage.postgresql import save_all_announcements_by_source_to_storage - from ..storage.md_generator import generate_onu_md - from ..core.models import Announcement -except ImportError: - try: - from core.config_manager import get_config - from core.logger import get_logger - from notification.wechat import send_system_notification - from storage.postgresql import save_all_announcements_by_source_to_storage - from storage.md_generator import generate_onu_md - from core.models import Announcement - except ImportError as e: - raise ImportError(f"消息处理器导入失败: {e}") - - -logger = get_logger(__name__) - - -class WeChatMessageHandler: - """企业微信消息处理器""" - - def __init__(self): - self.config = get_config() - self.monitor_app = None - - # 菜单配置 - self.menu_config = { - "crawl_now": { - "key": "crawl_now", - "name": " 立即搜索", - "description": "立即执行一次公告搜索" - }, - "today_stats": { - "key": "today_stats", - "name": " 今日统计", - "description": "查看今日公告统计信息" - }, - "keyword_search": { - "key": "keyword_search", - "name": " 关键词搜索", - "description": "输入关键词搜索公告" - }, - "latest_news": { - "key": "latest_news", - "name": " 最新公告", - "description": "查看最新发布的公告" - }, - "keyword_manage": { - "key": "keyword_manage", - "name": " 关键词管理", - "description": "管理监控关键词" - }, - "system_status": { - "key": "system_status", - "name": " 系统状态", - "description": "查看系统运行状态" - }, - "clear_cache": { - "key": "clear_cache", - "name": " 清理缓存", - "description": "清理系统缓存数据" - }, - "help_guide": { - "key": "help_guide", - "name": " 使用说明", - "description": "查看详细使用说明" - } - } - - logger.info("企业微信消息处理器初始化完成") - - def _get_monitor_app(self): - """获取监控应用实例""" - if self.monitor_app is None: - # 动态导入避免循环导入 - try: - from ..main import GXGPMonitorApp - self.monitor_app = GXGPMonitorApp() - # 初始化但不启动服务器 - if not self.monitor_app.initialize(): - logger.error("监控应用初始化失败") - return None - except ImportError: - logger.error("无法导入监控应用") - return None - return self.monitor_app - - def handle_event(self, event: str, event_key: Optional[str], from_user: str) -> Optional[str]: - """处理事件消息""" - try: - logger.info(f"处理事件: {event}, key: {event_key}, user: {from_user}") - - if event == 'click': - # 菜单点击事件 - if event_key == 'crawl_now': - return self._handle_crawl_now(from_user) - elif event_key == 'today_stats': - return self._handle_today_stats(from_user) - elif event_key == 'keyword_search': - return self._handle_keyword_search_menu(from_user) - elif event_key == 'latest_news': - return self._handle_latest_news(from_user) - elif event_key == 'latest_announcements': - # 兼容旧菜单key - return self._handle_latest_news(from_user) - elif event_key == 'keyword_manage': - return self._handle_keyword_manage(from_user) - elif event_key == 'system_status': - return self._handle_system_status(from_user) - elif event_key == 'clear_cache': - return self._handle_clear_cache(from_user) - elif event_key == 'help_guide': - return self._handle_help_guide(from_user) - elif event_key == 'keyword_search': - return self._handle_keyword_search_menu(from_user) - elif event_key == 'search_announcements': - # 兼容旧菜单key - return self._handle_keyword_search_menu(from_user) - elif event_key == 'announcements_by_type': - # 兼容旧菜单key - 按类型查看公告 - return self._handle_announcements_by_type(from_user) - else: - return self._create_text_response("未知菜单项", from_user) - - elif event == 'subscribe': - # 关注事件 - welcome_msg = """欢迎关注广西政府采购网公告监控! - -我可以帮您: -- 自动监控最新采购公告 -- 筛选您关心的关键词信息 -- 及时推送重要更新 - -点击下方菜单开始使用.""" - return self._create_text_response(welcome_msg, from_user) - - elif event == 'unsubscribe': - # 取消关注事件 - logger.info(f"用户 {from_user} 取消关注") - return None - - else: - logger.info(f"未处理的event类型: {event}") - return None - - except Exception as e: - logger.error(f"事件处理异常: {str(e)}") - return self._create_text_response("处理失败,请稍后重试", from_user) - - def handle_text_message(self, content: str, from_user: str) -> Optional[str]: - """处理文本消息""" - try: - logger.info(f"处理文本消息: {content}, user: {from_user}") - - # 移除前后空格 - content = content.strip() - - if content == "帮助" or content == "help": - return self._handle_help_guide(from_user) - elif content.startswith("爬取"): - return self._handle_manual_crawl(content, from_user) - elif content.startswith("总结") or content == "统计": - return self._handle_today_stats(from_user) - elif content.startswith("最新公告") or content.startswith("最新"): - return self._handle_latest_news(from_user) - elif content.startswith("系统状态") or content.startswith("状态"): - return self._handle_system_status(from_user) - elif content.startswith("关键词"): - return self._handle_keyword_search(content, from_user) - elif content.startswith("添加关键词"): - # 这里可以实现关键词添加逻辑 - return self._create_text_response("关键词管理功能正在开发中,请联系管理员", from_user) - elif content.startswith("删除关键词"): - # 这里可以实现关键词删除逻辑 - return self._create_text_response("关键词管理功能正在开发中,请联系管理员", from_user) - elif content == "查看关键词": - # 这里可以实现关键词查看逻辑 - return self._create_text_response("当前监控关键词:政府采购大化南宁信息化", from_user) - elif content.startswith("清理缓存") or content.startswith("清理"): - return self._handle_clear_cache(from_user) - elif content in ["采购公告", "结果公告", "更正公告", "合同公告", "预公示", "单一来源", "电子卖场", "履约验收", "工程公告"]: - # 按类型查询公告 - return self._handle_search_by_type(content, from_user) - else: - # 默认当作关键词搜索 - return self._handle_keyword_search(f"关键词 {content}", from_user) - - except Exception as e: - logger.error(f"文本消息处理异常: {str(e)}") - return self._create_text_response("处理失败,请稍后重试", from_user) - - def handle_other_message(self, msg_type: str, from_user: str) -> Optional[str]: - """处理其他类型的消息""" - try: - logger.info(f"处理其他消息类型: {msg_type}, user: {from_user}") - - if msg_type == 'image': - return self._create_text_response("收到图片消息,但我只能处理文本消息", from_user) - elif msg_type == 'voice': - return self._create_text_response("收到语音消息,但我只能处理文本消息", from_user) - else: - return self._create_text_response(f"收到{msg_type}消息,暂不支持此类型", from_user) - - except Exception as e: - logger.error(f"其他消息处理异常: {str(e)}") - return self._create_text_response("处理失败,请稍后重试", from_user) - - def _handle_crawl_now(self, from_user: str) -> Optional[str]: - """处理立即爬取菜单""" - try: - logger.info(f"用户 {from_user} 触发立即搜索") - - # 获取监控应用 - app = self._get_monitor_app() - if not app: - return self._create_text_response("系统初始化失败,请稍后重试", from_user) - - # 执行搜索 - result = app.run_crawl() - - if result.get("success"): - total = result.get("total_crawled", 0) - filtered = result.get("filtered", 0) - saved = result.get("saved", 0) - - response = f"""OK 搜索完成! - - 统计信息: -- 总共发现: {total} 条公告 -- 关键词筛选: {filtered} 条 -- 已保存: {saved} 条 - -如有匹配的公告,我会及时推送通知.""" - else: - error = result.get("error", "未知错误") - response = f"FAIL 搜索失败: {error}" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"立即搜索处理异常: {str(e)}") - return self._create_text_response("搜索失败,请稍后重试", from_user) - - def _handle_today_stats(self, from_user: str) -> Optional[str]: - """处理今日统计菜单""" - try: - logger.info(f"用户 {from_user} 请求今日统计") - - # 获取监控应用 - app = self._get_monitor_app() - if not app: - return self._create_text_response("系统初始化失败,请稍后重试", from_user) - - # 查询今日统计数据 - try: - from ..storage.postgresql import get_storage_manager - storage = get_storage_manager() - stats = storage.get_statistics() - - if stats: - response = f""" 今日公告统计 - - 统计时间:{datetime.now().strftime('%Y-%m-%d %H:%M')} - - 数据概览: -- 今日新增:{stats.get('today_count', 0)} 条 -- 累计总数:{stats.get('total_count', 0)} 条 -- 活跃关键词:{stats.get('active_keywords', 0)} 个 - - 分类统计: -- 采购公告:{stats.get('purchase_count', 0)} 条 -- 结果公告:{stats.get('result_count', 0)} 条 -- 更正公告:{stats.get('correction_count', 0)} 条 -- 其他类型:{stats.get('other_count', 0)} 条 - - 热门地区: -{chr(10).join([f"- {region}: {count}条" for region, count in stats.get('region_stats', {}).items()][:5])} - - 提示:数据每小时更新,点击"立即搜索"可获取最新数据.""" - else: - response = """ 今日公告统计 - -暂无统计数据,请先执行"立即搜索"获取最新公告. - - 建议:系统会在每日定时搜索,您也可以手动触发更新.""" - - except Exception as db_error: - logger.warning(f"数据库查询失败,使用默认统计: {str(db_error)}") - response = """ 系统状态 - -数据库连接中,请稍后查看详细统计. - - 您可以: -- 点击"立即搜索"更新数据 -- 查看"系统状态"了解服务运行情况""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"今日统计处理异常: {str(e)}") - return self._create_text_response("获取统计失败,请稍后重试", from_user) - - def _handle_custom_crawl(self, event_key: str, from_user: str) -> Optional[str]: - """处理自定义搜索菜单""" - try: - logger.info(f"用户 {from_user} 触发自定义搜索") - - response = """ 自定义搜索 - -请回复您想要搜索的关键词,我将为您执行搜索并筛选相关公告. - -例如: -- 大化 -- 信息化 -- 政府采购 - -发送关键词开始搜索.""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"自定义搜索处理异常: {str(e)}") - return self._create_text_response("操作失败,请稍后重试", from_user) - - def _handle_help(self, from_user: str) -> Optional[str]: - """处理帮助命令(兼容旧版本)""" - return self._handle_help_guide(from_user) - - def _handle_manual_crawl(self, content: str, from_user: str) -> Optional[str]: - """处理手动搜索命令""" - try: - # 解析关键词 - parts = content.split() - if len(parts) < 2: - return self._create_text_response("请指定搜索关键词,例如:搜索 大化", from_user) - - keywords = parts[1:] - logger.info(f"用户 {from_user} 手动搜索关键词: {keywords}") - - # 获取监控应用 - app = self._get_monitor_app() - if not app: - return self._create_text_response("系统初始化失败,请稍后重试", from_user) - - # 执行搜索(手动搜索,只筛选今天的公告) - result = app.run_crawl(keywords=keywords, manual_crawl=True) - - if result.get("success"): - total = result.get("total_crawled", 0) - filtered = result.get("filtered", 0) - filtered_announcements = result.get("filtered_announcements", []) - - # 获取今天的日期范围 - from datetime import datetime, date - today = date.today() - time_period = f"{today.strftime('%Y-%m-%d')} 00:00 至 {datetime.now().strftime('%Y-%m-%d %H:%M')}" - - if filtered > 0: - # 生成markdown汇总消息并发送 - try: - from ..storage.md_generator import MarkdownGenerator - from ..notification.wechat import send_system_notification - - # 生成markdown内容 - md_generator = MarkdownGenerator() - title = f"手动搜索结果 - 关键词: {' '.join(keywords)}" - markdown_content = md_generator.generate_markdown(filtered_announcements, title, time_period) - - # 发送markdown消息 - notify_success = send_system_notification( - title=" 搜索完成", - content=markdown_content - ) - - if notify_success: - # 成功发送markdown消息,返回空响应(不发送额外文本消息) - response = "" - else: - response = f"""OK 搜索完成! - - 搜索条件: -- 关键词: {' '.join(keywords)} -- 时间段: {time_period} - - 统计结果: -- 总共发现: {total} 条公告 -- 匹配筛选: {filtered} 条 - - 公告汇总推送失败,但数据已生成.""" - except Exception as notify_error: - logger.error(f"生成或发送公告汇总失败: {notify_error}") - # 降级处理:手动构建简单的文本响应 - announcement_list = [] - for i, ann in enumerate(filtered_announcements[:10], 1): # 最多显示10条 - announcement_list.append(f"{i}. {ann.title[:50]}...") - - remaining = len(filtered_announcements) - 10 - if remaining > 0: - announcement_list.append(f"... 还有 {remaining} 条公告") - - response = f"""OK 搜索完成! - - 搜索条件: -- 关键词: {' '.join(keywords)} -- 时间段: {time_period} - - 统计结果: -- 总共发现: {total} 条公告 -- 匹配筛选: {filtered} 条 - - 匹配公告: -{chr(10).join(announcement_list)} - - 公告详情已保存,可通过其他方式查看.""" - else: - # 没有找到匹配的公告,发送markdown格式的空结果 - try: - from ..storage.md_generator import MarkdownGenerator - from ..notification.wechat import send_system_notification - - md_generator = MarkdownGenerator() - title = f"手动搜索结果 - 关键词: {' '.join(keywords)}" - markdown_content = md_generator.generate_markdown([], title, time_period) - - notify_success = send_system_notification( - title=" 搜索完成", - content=markdown_content - ) - - if notify_success: - response = "" - else: - response = f"""OK 搜索完成! - - 搜索条件: -- 关键词: {' '.join(keywords)} -- 时间段: {time_period} - - 统计结果: -- 总共发现: {total} 条公告 -- 匹配筛选: 0 条 - -FAIL 在指定时间段内没有找到匹配的公告.""" - except Exception as notify_error: - logger.error(f"生成或发送公告汇总失败: {notify_error}") - response = f"""OK 搜索完成! - - 搜索条件: -- 关键词: {' '.join(keywords)} -- 时间段: {time_period} - - 统计结果: -- 总共发现: {total} 条公告 -- 匹配筛选: 0 条 - -FAIL 在指定时间段内没有找到匹配的公告.""" - else: - error = result.get("error", "未知错误") - response = f"FAIL 搜索失败: {error}" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"手动爬取处理异常: {str(e)}") - return self._create_text_response("搜索失败,请稍后重试", from_user) - - def _handle_keyword_search(self, content: str, from_user: str) -> Optional[str]: - """处理关键词搜索""" - try: - # 解析关键词 - parts = content.split() - keywords = parts[1:] if len(parts) > 1 else parts - - if not keywords: - return self._create_text_response("请提供搜索关键词", from_user) - - logger.info(f"用户 {from_user} 关键词搜索: {keywords}") - - # 这里可以实现关键词搜索逻辑 - # 目前先返回提示信息 - response = f""" 关键词搜索 - -搜索关键词: {' '.join(keywords)} - -由于系统正在优化中,搜索功能暂时不可用. - -您可以: -- 使用"搜索 [关键词]"执行新的搜索 -- 点击菜单中的"立即搜索" -- 发送"帮助"查看更多功能""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"关键词搜索处理异常: {str(e)}") - return self._create_text_response("搜索失败,请稍后重试", from_user) - - def _handle_keyword_search_menu(self, from_user: str) -> Optional[str]: - """处理关键词搜索菜单""" - try: - logger.info(f"用户 {from_user} 触发关键词搜索菜单") - - response = """ 关键词搜索 - -请直接发送您想要搜索的关键词,我将为您查找相关的公告信息. - - 支持的搜索方式: -- 单个关键词:如 "信息化" -- 多个关键词:如 "大数据 云计算" -- 精确短语:如 "政府采购" - - 搜索提示: -- 关键词不区分大小写 -- 支持模糊匹配 -- 结果按时间倒序显示 -- 可同时搜索标题和内容""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"关键词搜索菜单处理异常: {str(e)}") - return self._create_text_response("操作失败,请稍后重试", from_user) - - def _handle_announcements_by_type(self, from_user: str) -> Optional[str]: - """处理按类型查看公告菜单""" - try: - logger.info(f"用户 {from_user} 请求按类型查看公告") - - # 查询不同类型的公告统计 - try: - from ..storage.postgresql import get_storage_manager - storage = get_storage_manager() - all_stats = storage.get_statistics() - # 从统计信息中提取类型统计 - type_stats = all_stats.get('announcement_types', {}) - - if type_stats: - response = f""" 公告类型统计 - - 统计时间:{datetime.now().strftime('%Y-%m-%d %H:%M')} - - 各类型公告数量: - -""" - - type_name_map = { - 'purchase': '采购公告', - 'result': '结果公告', - 'correction': '更正公告', - 'contract': '合同公告', - 'pre_announcement': '预公示', - 'single_source': '单一来源', - 'electronic_market': '电子卖场', - 'acceptance': '履约验收', - 'engineering': '工程公告' - } - - for ann_type, count in type_stats.items(): - type_name = type_name_map.get(ann_type, ann_type) - response += f"- {type_name}: {count} 条\n" - - response += f"\n 发送公告类型名称可查看详情,如发送\"采购公告\"" - - else: - response = """ 公告类型统计 - -暂无类型统计数据. - - 建议: -- 点击"立即搜索"更新数据 -- 系统将自动分类统计各种公告""" - - except Exception as db_error: - logger.warning(f"数据库查询失败: {str(db_error)}") - # 提供默认的类型说明 - response = """ 公告类型说明 - -系统支持以下类型的政府采购公告: - - 采购公告:招标采购等采购信息 - 结果公告:中标成交等结果信息 - 更正公告:变更澄清等修改信息 - 合同公告:合同签订等信息 - 预公示:招标文件预公示 - 单一来源:单一来源采购公示 - 电子卖场:电子化采购平台 -OK 履约验收:项目验收信息 - 工程公告:工程建设相关 - - 发送具体类型名称可搜索相关公告.""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"按类型查看公告处理异常: {str(e)}") - return self._create_text_response("获取类型统计失败,请稍后重试", from_user) - - def _handle_search_by_type(self, type_name: str, from_user: str) -> Optional[str]: - """处理按类型搜索公告""" - try: - logger.info(f"用户 {from_user} 按类型搜索公告: {type_name}") - - # 类型映射 - type_mapping = { - "采购公告": "purchase", - "结果公告": "result", - "更正公告": "correction", - "合同公告": "contract", - "预公示": "pre_announcement", - "单一来源": "single_source", - "电子卖场": "electronic_market", - "履约验收": "acceptance", - "工程公告": "engineering" - } - - ann_type = type_mapping.get(type_name) - if not ann_type: - return self._create_text_response(f"未知的公告类型: {type_name}", from_user) - - # 查询该类型的公告 - try: - from ..storage.postgresql import get_storage_manager - storage = get_storage_manager() - # 获取所有最近公告,然后过滤类型 - all_announcements = storage.get_recent_announcements(hours=168, limit=100) # 最近7天 - announcements = [ann for ann in all_announcements if ann.announcement_type.value == ann_type][:5] - - if announcements: - response = f""" {type_name} (最近5条) - - 更新时间:{datetime.now().strftime('%Y-%m-%d %H:%M')} - -""" - - for i, announcement in enumerate(announcements, 1): - title = announcement.title[:25] + "..." if len(announcement.title) > 25 else announcement.title - time_str = announcement.publish_date.strftime('%m-%d %H:%M') if announcement.publish_date else "未知" - response += f"{i}. {title}\n {time_str} | {announcement.purchase_name or '未知'}\n\n" - - response += " 发送关键词可进一步筛选,点击菜单可查看更多功能." - else: - response = f""" {type_name} - -暂无该类型的公告数据. - - 建议: -- 点击"立即搜索"更新数据 -- 该类型公告可能较少出现""" - - except Exception as db_error: - logger.warning(f"数据库查询失败: {str(db_error)}") - response = f""" {type_name} - -暂时无法获取数据,请稍后重试. - - 您可以先尝试"立即爬取"更新数据.""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"按类型搜索公告处理异常: {str(e)}") - return self._create_text_response("搜索失败,请稍后重试", from_user) - - def _handle_latest_news(self, from_user: str) -> Optional[str]: - """处理最新公告菜单""" - try: - logger.info(f"用户 {from_user} 请求最新公告") - - # 查询最新的公告 - try: - from ..storage.postgresql import get_storage_manager - storage = get_storage_manager() - latest_announcements = storage.get_recent_announcements(hours=168, limit=10) # 最近7天 - - if latest_announcements: - response = f""" 最新公告 (最近10条) - - 更新时间:{datetime.now().strftime('%Y-%m-%d %H:%M')} - -""" - - for i, announcement in enumerate(latest_announcements, 1): - title = announcement.title[:25] + "..." if len(announcement.title) > 25 else announcement.title - time_str = announcement.publish_date.strftime('%m-%d %H:%M') if announcement.publish_date else "未知" - response += f"{i}. {title}\n {time_str} | {announcement.purchase_name or '未知'}\n\n" - - response += " 发送关键词可搜索相关公告,点击菜单可查看更多功能." - else: - response = """ 最新公告 - -暂无最新公告数据. - - 建议: -- 点击"立即搜索"更新数据 -- 检查系统状态确保服务正常""" - - except Exception as db_error: - logger.warning(f"数据库查询失败: {str(db_error)}") - response = """ 最新公告 - -暂时无法获取数据,请稍后重试. - - 您可以先尝试"立即爬取"更新数据.""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"最新公告处理异常: {str(e)}") - return self._create_text_response("获取最新公告失败,请稍后重试", from_user) - - def _handle_keyword_manage(self, from_user: str) -> Optional[str]: - """处理关键词管理菜单""" - try: - logger.info(f"用户 {from_user} 请求关键词管理") - - # 获取当前配置的关键词 - current_keywords = self.config.crawler.keyword if hasattr(self.config, 'crawler') and self.config.crawler else ["大化", "信息化"] - - keywords_str = "".join(current_keywords) if current_keywords else "暂无关键词" - - response = f""" 系统关键词配置 - - 当前监控关键词: -{keywords_str} - - 监控状态: -- 自动监控:系统会定期扫描匹配的公告 -- 实时推送:发现匹配公告立即推送 -- 多关键词:支持同时监控多个关键词 - - 关键词说明: -- 关键词区分大小写 -- 支持模糊匹配 -- 多个关键词用""分隔 -- 系统每天定时搜索相关公告 - - 修改关键词: -如需修改关键词配置,请联系系统管理员.""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"关键词管理处理异常: {str(e)}") - return self._create_text_response("关键词管理功能暂时不可用", from_user) - - def _handle_system_status(self, from_user: str) -> Optional[str]: - """处理系统状态菜单""" - try: - logger.info(f"用户 {from_user} 请求系统状态") - - # 检查各种系统组件状态 - status_info = { - "database": "检查中...", - "crawler": "检查中...", - "wechat": "检查中...", - "scheduler": "检查中..." - } - - # 检查数据库连接 - try: - from ..storage.postgresql import test_database_connection - status_info["database"] = "正常" if test_database_connection() else "异常" - except Exception as e: - status_info["database"] = f"连接失败: {str(e)[:20]}..." - - # 检查爬虫状态 - try: - app = self._get_monitor_app() - status_info["crawler"] = "正常" if app else "初始化失败" - except Exception as e: - status_info["crawler"] = f"异常: {str(e)[:20]}..." - - # 检查微信服务状态 - try: - from ..notification.wechat import WeChatService - wechat_service = WeChatService() - token = wechat_service._get_access_token() - status_info["wechat"] = "正常" if token else "Token获取失败" - except Exception as e: - status_info["wechat"] = f"异常: {str(e)[:20]}..." - - # 检查调度器状态(简化检查) - status_info["scheduler"] = "运行中" # 假设调度器正常运行 - - response = f""" 系统状态报告 - - 检查时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} - - 组件状态: -- 数据库:{status_info['database']} -- 爬虫服务:{status_info['crawler']} -- 微信服务:{status_info['wechat']} -- 调度器:{status_info['scheduler']} - - 系统信息: -- 版本:v2.0.0 -- 运行时间:正常 -- 内存使用:正常 -- 磁盘空间:正常 - - 维护操作: -- 如遇问题可尝试"清理缓存" -- 严重故障可尝试"重启服务" -- 技术问题请查看"使用说明" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"系统状态处理异常: {str(e)}") - return self._create_text_response("获取系统状态失败,请稍后重试", from_user) - - def _handle_clear_cache(self, from_user: str) -> Optional[str]: - """处理清理缓存菜单""" - try: - logger.info(f"用户 {from_user} 请求清理缓存") - - # 执行缓存清理操作 - cache_cleared = { - "database_cache": False, - "file_cache": False, - "memory_cache": False - } - - # 清理数据库缓存(如果有的话) - try: - from ..storage.postgresql import clear_database_cache - cache_cleared["database_cache"] = clear_database_cache() - except Exception as e: - logger.warning(f"数据库缓存清理失败: {str(e)}") - - # 清理文件缓存 - try: - import os - import shutil - cache_dirs = ["cache", "__pycache__", "*.pyc"] - # 这里可以实现具体的文件清理逻辑 - cache_cleared["file_cache"] = True # 暂时标记为成功 - except Exception as e: - logger.warning(f"文件缓存清理失败: {str(e)}") - - # 清理内存缓存 - try: - # 清理可能存在的内存缓存 - if hasattr(self, '_cache'): - self._cache.clear() - cache_cleared["memory_cache"] = True - except Exception as e: - logger.warning(f"内存缓存清理失败: {str(e)}") - - success_count = sum(1 for cleared in cache_cleared.values() if cleared) - - response = f"""缓存清理完成 - -清理结果: -- 数据库缓存:{"成功" if cache_cleared["database_cache"] else "失败"} -- 文件缓存:{"成功" if cache_cleared["file_cache"] else "失败"} -- 内存缓存:{"成功" if cache_cleared["memory_cache"] else "失败"} - -总体结果:{success_count}/3 项清理成功 - -清理缓存可以: -- 释放系统资源 -- 解决数据不一致问题 -- 提升系统性能 - -如有问题,请查看系统状态或联系技术支持.""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"清理缓存处理异常: {str(e)}") - return self._create_text_response("缓存清理失败,请稍后重试", from_user) - - def _handle_help_guide(self, from_user: str) -> Optional[str]: - """处理使用说明菜单""" - try: - logger.info(f"用户 {from_user} 请求使用说明") - - help_text = """ 广西政府采购网公告监控助手 - 使用说明 - - 功能概述: -我是一个智能的政府采购公告监控助手,能够自动监控广西政府采购网的最新公告,并根据您的需求推送相关信息. - - 快速开始: -1. 点击"立即搜索"获取最新公告 -2. 发送关键词进行智能搜索 -3. 查看"今日统计"了解数据概况 - - 菜单功能详解: - - 监控操作: -- 立即搜索:手动触发公告搜索,获取最新数据 -- 今日统计:查看今日公告统计信息和数据概览 -- 关键词搜索:输入关键词搜索相关公告 -- 最新公告:浏览最近发布的10条公告 - - 系统管理: -- 关键词管理:管理监控关键词(需管理员权限) -- 系统状态:查看各组件运行状态 -- 清理缓存:清理系统缓存,提升性能 -- 重启服务:重启监控服务(需管理员权限) - - 帮助支持: -- 使用说明:查看详细功能介绍 - - 文本命令: -- 发送关键词直接搜索 -- "搜索 [关键词]" 指定关键词搜索 -- "总结" 查看今日统计 -- "帮助" 显示此说明 - - 智能推送: -系统会自动监控匹配关键词的公告,并通过企业微信实时推送. - - 安全提醒: -- 管理员功能需要相应权限 -- 请妥善保管企业微信应用信息 -- 定期检查系统运行状态 - - 使用技巧: -- 关键词支持中英文混合 -- 可同时搜索多个关键词 -- 公告按时间倒序排列 -- 点击公告可查看详情 - - 常见问题: -Q: 为什么收不到推送? -A: 检查关键词设置和系统状态 - -Q: 数据不准确怎么办? -A: 尝试"立即爬取"更新数据 - -Q: 搜索不到结果? -A: 检查关键词拼写,尝试更通用的关键词 - -如有其他问题,请点击"使用说明"获取帮助.""" - - return self._create_text_response(help_text, from_user) - - except Exception as e: - logger.error(f"使用说明处理异常: {str(e)}") - return self._create_text_response("获取帮助信息失败,请稍后重试", from_user) - - def _create_text_response(self, content: str, to_user: str) -> str: - """创建文本消息响应""" - timestamp = str(int(time.time())) - - response_xml = f""" - - -{timestamp} - - -""" - - return response_xml diff --git a/gx_gp_monitor/wechat/message_handler_clean.py b/gx_gp_monitor/wechat/message_handler_clean.py deleted file mode 100644 index d3433a1..0000000 --- a/gx_gp_monitor/wechat/message_handler_clean.py +++ /dev/null @@ -1,824 +0,0 @@ -""" -企业微信消息处理器 -处理用户消息和事件,实现菜单功能 -""" - -import time -import json -from typing import Optional, Dict, Any, List -from datetime import datetime - -try: - from ..core.config_manager import get_config - from ..core.logger import get_logger - from ..notification.wechat import send_system_notification - from ..storage.postgresql import save_all_announcements_by_source_to_storage - from ..storage.md_generator import generate_onu_md - from ..core.models import Announcement -except ImportError: - try: - from core.config_manager import get_config - from core.logger import get_logger - from notification.wechat import send_system_notification - from storage.postgresql import save_all_announcements_by_source_to_storage - from storage.md_generator import generate_onu_md - from core.models import Announcement - except ImportError as e: - raise ImportError(f"消息处理器导入失败: {e}") - - -logger = get_logger(__name__) - - -class WeChatMessageHandler: - """企业微信消息处理器""" - - def __init__(self): - self.config = get_config() - self.monitor_app = None - - # 菜单配置 - self.menu_config = { - "crawl_now": { - "key": "crawl_now", - "name": "立即搜索", - "description": "立即执行一次公告搜索" - }, - "today_stats": { - "key": "today_stats", - "name": "今日统计", - "description": "查看今日公告统计信息" - }, - "keyword_search": { - "key": "keyword_search", - "name": "关键词搜索", - "description": "输入关键词搜索公告" - }, - "latest_news": { - "key": "latest_news", - "name": "最新公告", - "description": "查看最新发布的公告" - }, - "keyword_manage": { - "key": "keyword_manage", - "name": "关键词管理", - "description": "管理监控关键词" - }, - "system_status": { - "key": "system_status", - "name": "系统状态", - "description": "查看系统运行状态" - }, - "clear_cache": { - "key": "clear_cache", - "name": "清理缓存", - "description": "清理系统缓存数据" - }, - "help_guide": { - "key": "help_guide", - "name": "使用说明", - "description": "查看详细使用说明" - } - } - - logger.info("企业微信消息处理器初始化完成") - - def _get_monitor_app(self): - """获取监控应用实例""" - if self.monitor_app is None: - try: - from ..main import GXGPMonitorApp - self.monitor_app = GXGPMonitorApp() - if not self.monitor_app.initialize(): - logger.error("监控应用初始化失败") - return None - except ImportError: - logger.error("无法导入监控应用") - return None - return self.monitor_app - - def handle_event(self, event: str, event_key: Optional[str], from_user: str) -> Optional[str]: - """处理事件消息""" - try: - logger.info(f"处理事件: {event}, key: {event_key}, user: {from_user}") - - if event == 'click': - if event_key == 'crawl_now': - return self._handle_crawl_now(from_user) - elif event_key == 'today_stats': - return self._handle_today_stats(from_user) - elif event_key == 'keyword_search': - return self._handle_keyword_search_menu(from_user) - elif event_key == 'latest_news': - return self._handle_latest_news(from_user) - elif event_key == 'keyword_manage': - return self._handle_keyword_manage(from_user) - elif event_key == 'system_status': - return self._handle_system_status(from_user) - elif event_key == 'clear_cache': - return self._handle_clear_cache(from_user) - elif event_key == 'help_guide': - return self._handle_help_guide(from_user) - elif event_key == 'latest_announcements': - return self._handle_latest_news(from_user) - elif event_key == 'announcements_by_type': - return self._handle_announcements_by_type(from_user) - elif event_key == 'search_announcements': - return self._handle_keyword_search_menu(from_user) - else: - return self._create_text_response("未知菜单项", from_user) - - elif event == 'subscribe': - welcome_msg = """欢迎关注广西政府采购网公告监控! - -我可以帮您: -- 自动监控最新采购公告 -- 筛选您关心的关键词信息 -- 及时推送重要更新 - -点击下方菜单开始使用.""" - return self._create_text_response(welcome_msg, from_user) - - elif event == 'unsubscribe': - logger.info(f"用户 {from_user} 取消关注") - return None - - else: - logger.info(f"未处理的event类型: {event}") - return None - - except Exception as e: - logger.error(f"事件处理异常: {str(e)}") - return self._create_text_response("处理失败,请稍后重试", from_user) - - def handle_text_message(self, content: str, from_user: str) -> Optional[str]: - """处理文本消息""" - try: - logger.info(f"处理文本消息: {content}, user: {from_user}") - - content = content.strip() - - if content == "帮助" or content == "help": - return self._handle_help_guide(from_user) - elif content.startswith("爬取") or content.startswith("搜索"): - return self._handle_manual_crawl(content, from_user) - elif content.startswith("总结") or content == "统计": - return self._handle_today_stats(from_user) - elif content.startswith("最新公告") or content.startswith("最新"): - return self._handle_latest_news(from_user) - elif content.startswith("系统状态") or content.startswith("状态"): - return self._handle_system_status(from_user) - elif content.startswith("关键词"): - return self._handle_keyword_search(content, from_user) - elif content.startswith("添加关键词"): - return self._create_text_response("关键词管理功能正在开发中,请联系管理员", from_user) - elif content.startswith("删除关键词"): - return self._create_text_response("关键词管理功能正在开发中,请联系管理员", from_user) - elif content == "查看关键词": - return self._create_text_response("当前监控关键词: 政府采购、大化、南宁、信息化", from_user) - elif content.startswith("清理缓存") or content.startswith("清理"): - return self._handle_clear_cache(from_user) - elif content in ["采购公告", "结果公告", "更正公告", "合同公告", "预公示", "单一来源", "电子卖场", "履约验收", "工程公告"]: - return self._handle_search_by_type(content, from_user) - else: - return self._handle_keyword_search(f"关键词 {content}", from_user) - - except Exception as e: - logger.error(f"文本消息处理异常: {str(e)}") - return self._create_text_response("处理失败,请稍后重试", from_user) - - def _handle_crawl_now(self, from_user: str) -> Optional[str]: - """处理立即搜索菜单""" - try: - logger.info(f"用户 {from_user} 触发立即搜索") - - app = self._get_monitor_app() - if not app: - return self._create_text_response("系统初始化失败,请稍后重试", from_user) - - result = app.run_crawl() - - if result.get("success"): - total = result.get("total_crawled", 0) - filtered = result.get("filtered", 0) - saved = result.get("saved", 0) - - response = f"""搜索完成! - -统计信息: -- 总共发现: {total} 条公告 -- 关键词筛选: {filtered} 条 -- 已保存: {saved} 条 - -如有匹配的公告,我会及时推送通知.""" - else: - error = result.get("error", "未知错误") - response = f"搜索失败: {error}" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"立即搜索处理异常: {str(e)}") - return self._create_text_response("搜索失败,请稍后重试", from_user) - - def _handle_today_stats(self, from_user: str) -> Optional[str]: - """处理今日统计菜单""" - try: - logger.info(f"用户 {from_user} 请求今日统计") - - app = self._get_monitor_app() - if not app: - return self._create_text_response("系统初始化失败,请稍后重试", from_user) - - try: - from ..storage.postgresql import get_storage_manager - storage = get_storage_manager() - stats = storage.get_statistics() - - if stats: - response = f"""今日公告统计 - -统计时间: {datetime.now().strftime('%Y-%m-%d %H:%M')} - -数据概览: -- 今日新增: {stats.get('today_count', 0)} 条 -- 累计总数: {stats.get('total_count', 0)} 条 -- 活跃关键词: {stats.get('active_keywords', 0)} 个 - -分类统计: -- 采购公告: {stats.get('purchase_count', 0)} 条 -- 结果公告: {stats.get('result_count', 0)} 条 -- 更正公告: {stats.get('correction_count', 0)} 条 -- 其他类型: {stats.get('other_count', 0)} 条 - -提示: 数据每小时更新,点击"立即搜索"可获取最新数据.""" - else: - response = """今日公告统计 - -暂无统计数据,请先执行"立即搜索"获取最新公告。 - -建议: 系统会在每日定时搜索,您也可以手动触发更新.""" - - except Exception as db_error: - logger.warning(f"数据库查询失败,使用默认统计: {str(db_error)}") - response = """系统状态 - -数据库连接中,请稍后查看详细统计。 - -您可以: -- 点击"立即搜索"更新数据 -- 查看"系统状态"了解服务运行情况""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"今日统计处理异常: {str(e)}") - return self._create_text_response("获取统计失败,请稍后重试", from_user) - - def _handle_keyword_search_menu(self, from_user: str) -> Optional[str]: - """处理关键词搜索菜单""" - try: - logger.info(f"用户 {from_user} 触发关键词搜索菜单") - - response = """关键词搜索 - -请直接发送您想要搜索的关键词,我将为您查找相关的公告信息。 - -支持的搜索方式: -- 单个关键词: 如 "信息化" -- 多个关键词: 如 "大数据 云计算" -- 精确短语: 如 "政府采购" - -搜索提示: -- 关键词不区分大小写 -- 支持模糊匹配 -- 结果按时间倒序显示 -- 可同时搜索标题和内容""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"关键词搜索菜单处理异常: {str(e)}") - return self._create_text_response("操作失败,请稍后重试", from_user) - - def _handle_latest_news(self, from_user: str) -> Optional[str]: - """处理最新公告菜单""" - try: - logger.info(f"用户 {from_user} 请求最新公告") - - try: - from ..storage.postgresql import get_storage_manager - storage = get_storage_manager() - latest_announcements = storage.get_recent_announcements(hours=168, limit=10) - - if latest_announcements: - response = f"""最新公告 (最近10条) - -更新时间: {datetime.now().strftime('%Y-%m-%d %H:%M')} - -""" - - for i, announcement in enumerate(latest_announcements, 1): - title = announcement.title[:25] + "..." if len(announcement.title) > 25 else announcement.title - time_str = announcement.publish_date.strftime('%m-%d %H:%M') if announcement.publish_date else "未知" - response += f"{i}. {title}\n {time_str} | {announcement.purchase_name or '未知'}\n\n" - - response += "发送关键词可搜索相关公告,点击菜单可查看更多功能。" - else: - response = """最新公告 - -暂无最新公告数据。 - -建议: -- 点击"立即搜索"更新数据 -- 检查系统状态确保服务正常""" - - except Exception as db_error: - logger.warning(f"数据库查询失败: {str(db_error)}") - response = """最新公告 - -暂时无法获取数据,请稍后重试。 - -您可以先尝试"立即搜索"更新数据。""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"最新公告处理异常: {str(e)}") - return self._create_text_response("获取最新公告失败,请稍后重试", from_user) - - def _handle_keyword_manage(self, from_user: str) -> Optional[str]: - """处理关键词管理菜单""" - try: - logger.info(f"用户 {from_user} 请求关键词管理") - - current_keywords = self.config.crawler.keyword if hasattr(self.config, 'crawler') and self.config.crawler else ["大化", "信息化"] - - keywords_str = "、".join(current_keywords) if current_keywords else "暂无关键词" - - response = f"""系统关键词配置 - -当前监控关键词: -{keywords_str} - -监控状态: -- 自动监控: 系统会定期扫描匹配的公告 -- 实时推送: 发现匹配公告立即推送 -- 多关键词: 支持同时监控多个关键词 - -关键词说明: -- 关键词区分大小写 -- 支持模糊匹配 -- 多个关键词用"、"分隔 -- 系统每天定时搜索相关公告 - -修改关键词: -如需修改关键词配置,请联系系统管理员.""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"关键词管理处理异常: {str(e)}") - return self._create_text_response("关键词管理功能暂时不可用", from_user) - - def _handle_system_status(self, from_user: str) -> Optional[str]: - """处理系统状态菜单""" - try: - logger.info(f"用户 {from_user} 请求系统状态") - - status_info = { - "database": "检查中...", - "crawler": "检查中...", - "wechat": "检查中...", - "scheduler": "检查中..." - } - - try: - from ..storage.postgresql import test_database_connection - status_info["database"] = "正常" if test_database_connection() else "异常" - except Exception as e: - status_info["database"] = f"连接失败: {str(e)[:20]}..." - - try: - app = self._get_monitor_app() - status_info["crawler"] = "正常" if app else "初始化失败" - except Exception as e: - status_info["crawler"] = f"异常: {str(e)[:20]}..." - - try: - from ..notification.wechat import WeChatService - wechat_service = WeChatService() - token = wechat_service._get_access_token() - status_info["wechat"] = "正常" if token else "Token获取失败" - except Exception as e: - status_info["wechat"] = f"异常: {str(e)[:20]}..." - - status_info["scheduler"] = "运行中" - - response = f"""系统状态报告 - -检查时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} - -组件状态: -- 数据库: {status_info['database']} -- 爬虫服务: {status_info['crawler']} -- 微信服务: {status_info['wechat']} -- 调度器: {status_info['scheduler']} - -系统信息: -- 版本: v2.0.0 -- 运行时间: 正常 -- 内存使用: 正常 -- 磁盘空间: 正常 - -维护操作: -- 如遇问题可尝试"清理缓存" -- 严重故障可尝试"重启服务" -- 技术问题请查看"使用说明".""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"系统状态处理异常: {str(e)}") - return self._create_text_response("获取系统状态失败,请稍后重试", from_user) - - def _handle_clear_cache(self, from_user: str) -> Optional[str]: - """处理清理缓存菜单""" - try: - logger.info(f"用户 {from_user} 请求清理缓存") - - cache_cleared = { - "database_cache": False, - "file_cache": False, - "memory_cache": False - } - - try: - from ..storage.postgresql import clear_database_cache - cache_cleared["database_cache"] = clear_database_cache() - except Exception as e: - logger.warning(f"数据库缓存清理失败: {str(e)}") - - try: - import os - import shutil - cache_cleared["file_cache"] = True - except Exception as e: - logger.warning(f"文件缓存清理失败: {str(e)}") - - try: - if hasattr(self, '_cache'): - self._cache.clear() - cache_cleared["memory_cache"] = True - except Exception as e: - logger.warning(f"内存缓存清理失败: {str(e)}") - - success_count = sum(1 for cleared in cache_cleared.values() if cleared) - - response = f"""缓存清理完成 - -清理结果: -- 数据库缓存: {"成功" if cache_cleared["database_cache"] else "失败"} -- 文件缓存: {"成功" if cache_cleared["file_cache"] else "失败"} -- 内存缓存: {"成功" if cache_cleared["memory_cache"] else "失败"} - -总体结果: {success_count}/3 项清理成功 - -清理缓存可以: -- 释放系统资源 -- 解决数据不一致问题 -- 提升系统性能 - -如有问题,请查看系统状态或联系技术支持.""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"清理缓存处理异常: {str(e)}") - return self._create_text_response("缓存清理失败,请稍后重试", from_user) - - def _handle_help_guide(self, from_user: str) -> Optional[str]: - """处理使用说明菜单""" - try: - logger.info(f"用户 {from_user} 请求使用说明") - - help_text = """广西政府采购网公告监控助手 - 使用说明 - -功能概述: -我是一个智能的政府采购公告监控助手,能够自动监控广西政府采购网的最新公告,并根据您的需求推送相关信息。 - -快速开始: -1. 点击"立即搜索"获取最新公告 -2. 发送关键词进行智能搜索 -3. 查看"今日统计"了解数据概况 - -菜单功能详解: - -监控操作: -- 立即搜索: 手动触发公告搜索,获取最新数据 -- 今日统计: 查看今日公告统计信息和数据概览 -- 关键词搜索: 输入关键词搜索相关公告 -- 最新公告: 浏览最近发布的10条公告 - -系统管理: -- 关键词管理: 管理监控关键词(需管理员权限) -- 系统状态: 查看各组件运行状态 -- 清理缓存: 清理系统缓存,提升性能 - -帮助: -- 使用说明: 查看详细功能介绍 - -文本命令: -- 发送关键词直接搜索 -- "搜索 [关键词]" 指定关键词搜索 -- "总结" 查看今日统计 -- "帮助" 显示此说明 - -智能推送: -系统会自动监控匹配关键词的公告,并通过企业微信实时推送。 - -安全提醒: -- 管理员功能需要相应权限 -- 请妥善保管企业微信应用信息 -- 定期检查系统运行状态 - -使用技巧: -- 关键词支持中英文混合 -- 可同时搜索多个关键词 -- 公告按时间倒序排列 -- 点击公告可查看详情 - -常见问题: -Q: 为什么收不到推送? -A: 检查关键词设置和系统状态 - -Q: 数据不准确怎么办? -A: 尝试"立即搜索"更新数据 - -Q: 搜索不到结果? -A: 检查关键词拼写,尝试更通用的关键词 - -如有其他问题,请点击"使用说明"获取帮助.""" - - return self._create_text_response(help_text, from_user) - - except Exception as e: - logger.error(f"使用说明处理异常: {str(e)}") - return self._create_text_response("获取帮助信息失败,请稍后重试", from_user) - - def _handle_announcements_by_type(self, from_user: str) -> Optional[str]: - """处理按类型查看公告菜单""" - try: - logger.info(f"用户 {from_user} 请求按类型查看公告") - - try: - from ..storage.postgresql import get_storage_manager - storage = get_storage_manager() - all_stats = storage.get_statistics() - type_stats = all_stats.get('announcement_types', {}) - - if type_stats: - response = f"""公告类型统计 - -统计时间: {datetime.now().strftime('%Y-%m-%d %H:%M')} - -各类型公告数量: - -""" - - type_name_map = { - 'purchase': '采购公告', - 'result': '结果公告', - 'correction': '更正公告', - 'contract': '合同公告', - 'pre_announcement': '预公示', - 'single_source': '单一来源', - 'electronic_market': '电子卖场', - 'acceptance': '履约验收', - 'engineering': '工程公告' - } - - for ann_type, count in type_stats.items(): - type_name = type_name_map.get(ann_type, ann_type) - response += f"- {type_name}: {count} 条\n" - - response += "\n发送公告类型名称可查看详情,如发送\"采购公告\"" - - else: - response = """公告类型统计 - -暂无类型统计数据。 - -建议: -- 点击"立即搜索"更新数据 -- 系统将自动分类统计各种公告""" - - except Exception as db_error: - logger.warning(f"数据库查询失败: {str(db_error)}") - response = """公告类型说明 - -系统支持以下类型的政府采购公告: - -- 采购公告: 招标、采购等采购信息 -- 结果公告: 中标、成交等结果信息 -- 更正公告: 变更、澄清等修改信息 -- 合同公告: 合同签订等信息 -- 预公示: 招标文件预公示 -- 单一来源: 单一来源采购公示 -- 电子卖场: 电子化采购平台 -- 履约验收: 项目验收信息 -- 工程公告: 工程建设相关 - -发送具体类型名称可搜索相关公告。""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"按类型查看公告处理异常: {str(e)}") - return self._create_text_response("获取类型统计失败,请稍后重试", from_user) - - def _handle_search_by_type(self, type_name: str, from_user: str) -> Optional[str]: - """处理按类型搜索公告""" - try: - logger.info(f"用户 {from_user} 按类型搜索公告: {type_name}") - - type_mapping = { - "采购公告": "purchase", - "结果公告": "result", - "更正公告": "correction", - "合同公告": "contract", - "预公示": "pre_announcement", - "单一来源": "single_source", - "电子卖场": "electronic_market", - "履约验收": "acceptance", - "工程公告": "engineering" - } - - ann_type = type_mapping.get(type_name) - if not ann_type: - return self._create_text_response(f"未知的公告类型: {type_name}", from_user) - - try: - from ..storage.postgresql import get_storage_manager - storage = get_storage_manager() - all_announcements = storage.get_recent_announcements(hours=168, limit=100) - announcements = [ann for ann in all_announcements if ann.announcement_type.value == ann_type][:5] - - if announcements: - response = f"""{type_name} (最近5条) - -更新时间: {datetime.now().strftime('%Y-%m-%d %H:%M')} - -""" - - for i, announcement in enumerate(announcements, 1): - title = announcement.title[:25] + "..." if len(announcement.title) > 25 else announcement.title - time_str = announcement.publish_date.strftime('%m-%d %H:%M') if announcement.publish_date else "未知" - response += f"{i}. {title}\n {time_str} | {announcement.purchase_name or '未知'}\n\n" - - response += "发送关键词可进一步筛选,点击菜单可查看更多功能。" - else: - response = f"""{type_name} - -暂无该类型的公告数据。 - -建议: -- 点击"立即搜索"更新数据 -- 该类型公告可能较少出现""" - - except Exception as db_error: - logger.warning(f"数据库查询失败: {str(db_error)}") - response = f"""{type_name} - -暂时无法获取数据,请稍后重试。 - -您可以先尝试"立即搜索"更新数据。""" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"按类型搜索公告处理异常: {str(e)}") - return self._create_text_response("搜索失败,请稍后重试", from_user) - - def _handle_manual_crawl(self, content: str, from_user: str) -> Optional[str]: - """处理手动搜索命令""" - try: - parts = content.split() - if len(parts) < 2: - return self._create_text_response("请指定搜索关键词,例如: 搜索 大化", from_user) - - keywords = parts[1:] - logger.info(f"用户 {from_user} 手动搜索关键词: {keywords}") - - app = self._get_monitor_app() - if not app: - return self._create_text_response("系统初始化失败,请稍后重试", from_user) - - result = app.run_crawl(keywords=keywords, manual_crawl=True) - - if result.get("success"): - total = result.get("total_crawled", 0) - filtered = result.get("filtered", 0) - - if filtered > 0: - response = f"""搜索完成! - -关键词: {' '.join(keywords)} -发现匹配公告: {filtered} 条 - -如有匹配的公告,我会及时推送通知。""" - else: - response = f"""搜索完成! - -关键词: {' '.join(keywords)} -未发现匹配的公告。 - -建议: -- 尝试更通用的关键词 -- 检查关键词拼写 -- 等待系统更新最新数据""" - else: - error = result.get("error", "未知错误") - response = f"搜索失败: {error}" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"手动搜索处理异常: {str(e)}") - return self._create_text_response("搜索失败,请稍后重试", from_user) - - def _handle_keyword_search(self, content: str, from_user: str) -> Optional[str]: - """处理关键词搜索""" - try: - parts = content.split() - keywords = parts[1:] if len(parts) > 1 else parts - logger.info(f"用户 {from_user} 关键词搜索: {keywords}") - - if not keywords: - return self._create_text_response("请提供搜索关键词", from_user) - - app = self._get_monitor_app() - if not app: - return self._create_text_response("系统初始化失败,请稍后重试", from_user) - - result = app.run_crawl(keywords=keywords, manual_crawl=True) - - if result.get("success"): - filtered = result.get("filtered", 0) - - if filtered > 0: - response = f"""搜索完成! - -关键词: {' '.join(keywords)} -发现匹配公告: {filtered} 条 - -如有匹配的公告,我会及时推送通知。""" - else: - response = f"""搜索完成! - -关键词: {' '.join(keywords)} -未发现匹配的公告。 - -建议: -- 尝试更通用的关键词 -- 检查关键词拼写 -- 等待系统更新最新数据""" - else: - error = result.get("error", "未知错误") - response = f"搜索失败: {error}" - - return self._create_text_response(response, from_user) - - except Exception as e: - logger.error(f"关键词搜索处理异常: {str(e)}") - return self._create_text_response("搜索失败,请稍后重试", from_user) - - def handle_other_message(self, msg_type: str, from_user: str) -> Optional[str]: - """处理其他类型的消息""" - try: - logger.info(f"处理其他消息类型: {msg_type}, user: {from_user}") - - if msg_type == 'image': - return self._create_text_response("收到图片消息,但我只能处理文本消息", from_user) - elif msg_type == 'voice': - return self._create_text_response("收到语音消息,但我只能处理文本消息", from_user) - else: - return self._create_text_response(f"收到{msg_type}消息,暂不支持此类型", from_user) - - except Exception as e: - logger.error(f"其他消息处理异常: {str(e)}") - return self._create_text_response("处理失败,请稍后重试", from_user) - - def _create_text_response(self, content: str, to_user: str) -> str: - """创建文本消息响应""" - timestamp = str(int(time.time())) - - response_xml = f""" - - -{timestamp} - - -""" - - return response_xml diff --git a/logs/cron.log b/logs/cron.log deleted file mode 100644 index ed59d4c..0000000 --- a/logs/cron.log +++ /dev/null @@ -1,4 +0,0 @@ -/opt/1panel/task/shell/广西政府采购网定时监控/广西政府采购网定时监控.sh: line 1: python: command not found -/opt/1panel/task/shell/广西政府采购网定时监控/广西政府采购网定时监控.sh: line 1: python: command not found -/opt/1panel/task/shell/广西政府采购网定时监控/广西政府采购网定时监控.sh: line 1: python: command not found -/opt/1panel/task/shell/广西政府采购网定时监控/广西政府采购网定时监控.sh: line 1: python: command not found diff --git a/logs/gx_gp_monitor.log b/logs/gx_gp_monitor.log index 637d1dd..fe3bc5e 100644 --- a/logs/gx_gp_monitor.log +++ b/logs/gx_gp_monitor.log @@ -1,4240 +1,9 @@ -2026-01-08 22:41:36 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 22:41:36 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 22:41:36 - __main__ - INFO - 启动企业微信回调服务器: 0.0.0.0:18001 -2026-01-08 22:41:36 - gx_gp_monitor.wechat.callback_server - INFO - 启动企业微信回调服务器: 0.0.0.0:18001 -2026-01-08 22:41:44 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:41:44 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: zy7uHHAFlJT0PQvlUO9DZ/NB+B4mxjwtvDyDdahZ7uC65b0wIy... -2026-01-08 22:41:44 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 91f558622223ff08a7f4fb4914204d61efad5eca -2026-01-08 22:41:44 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 91f558622223ff08a7f4fb4914204d61efad5eca -2026-01-08 22:41:44 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:41:44 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:41:44 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:41:44 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=system_status, user=WeiJueSen -2026-01-08 22:41:44 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: system_status, user: WeiJueSen -2026-01-08 22:41:44 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统状态 -2026-01-08 22:41:44 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-08 22:41:44 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-08 22:41:44 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-08 22:41:45 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-08 22:41:45 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-08 22:41:45 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-08 22:41:45 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-08 22:41:45 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-08 22:41:45 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-08 22:41:45 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-08 22:41:45 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-08 22:42:15 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:42:15 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: qNrTTn4MIPr01UWhDpsVEAluwZPSLsJfAe95qyi6bsfUFbvi/p... -2026-01-08 22:42:15 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 15d8792e47c8088666bf8d7a4a3ee068d004cb46 -2026-01-08 22:42:15 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 15d8792e47c8088666bf8d7a4a3ee068d004cb46 -2026-01-08 22:42:15 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:42:15 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:42:15 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:42:15 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=latest_announcements, user=WeiJueSen -2026-01-08 22:42:15 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: latest_announcements, user: WeiJueSen -2026-01-08 22:42:38 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:42:38 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: tOgfICzwKY9r4CHIttYs2ZQjjN1ykRjkupEyw5JI7zHH07fKon... -2026-01-08 22:42:38 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 6209c703657dbe9ff88560a9394725ef1241f007 -2026-01-08 22:42:38 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 6209c703657dbe9ff88560a9394725ef1241f007 -2026-01-08 22:42:38 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:42:38 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:42:38 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:42:38 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=announcements_by_type, user=WeiJueSen -2026-01-08 22:42:38 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: announcements_by_type, user: WeiJueSen -2026-01-08 22:42:40 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:42:40 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: scJJYHd/ASP9zpXjcgP6LTpCw+zMtTkN+QWEbCWC5M7UwdM9wg... -2026-01-08 22:42:40 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 1428e3db02b9d178b9de7e2674fa75af52890817 -2026-01-08 22:42:40 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 1428e3db02b9d178b9de7e2674fa75af52890817 -2026-01-08 22:42:40 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:42:40 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:42:40 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:42:40 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=search_announcements, user=WeiJueSen -2026-01-08 22:42:40 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: search_announcements, user: WeiJueSen -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: latest_announcements, user: test_user -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求最新公告 -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - WARNING - 数据库查询失败: cannot import name 'get_latest_announcements' from 'gx_gp_monitor.storage.postgresql' (/home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/storage/postgresql.py) -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: announcements_by_type, user: test_user -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求按类型查看公告 -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - WARNING - 数据库查询失败: cannot import name 'get_announcements_by_type' from 'gx_gp_monitor.storage.postgresql' (/home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/storage/postgresql.py) -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: search_announcements, user: test_user -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 触发关键词搜索菜单 -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: latest_news, user: test_user -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求最新公告 -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - WARNING - 数据库查询失败: cannot import name 'get_latest_announcements' from 'gx_gp_monitor.storage.postgresql' (/home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/storage/postgresql.py) -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_search, user: test_user -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 触发关键词搜索菜单 -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: system_status, user: test_user -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求系统状态 -2026-01-08 22:49:04 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-08 22:49:04 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-08 22:49:04 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-08 22:49:04 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-08 22:49:04 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-08 22:49:04 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-08 22:49:04 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-08 22:49:04 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-08 22:49:04 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-08 22:49:04 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-08 22:49:04 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: help_guide, user: test_user -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求使用说明 -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 采购公告, user: test_user -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 按类型搜索公告: 采购公告 -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - WARNING - 数据库查询失败: cannot import name 'get_announcements_by_type_and_limit' from 'gx_gp_monitor.storage.postgresql' (/home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/storage/postgresql.py) -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 结果公告, user: test_user -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 按类型搜索公告: 结果公告 -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - WARNING - 数据库查询失败: cannot import name 'get_announcements_by_type_and_limit' from 'gx_gp_monitor.storage.postgresql' (/home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/storage/postgresql.py) -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 更正公告, user: test_user -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 按类型搜索公告: 更正公告 -2026-01-08 22:49:04 - gx_gp_monitor.wechat.message_handler - WARNING - 数据库查询失败: cannot import name 'get_announcements_by_type_and_limit' from 'gx_gp_monitor.storage.postgresql' (/home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/storage/postgresql.py) -2026-01-08 22:51:33 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 22:51:33 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 22:51:33 - __main__ - INFO - 启动企业微信回调服务器: 0.0.0.0:18001 -2026-01-08 22:51:33 - gx_gp_monitor.wechat.callback_server - INFO - 启动企业微信回调服务器: 0.0.0.0:18001 -2026-01-08 22:51:37 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:51:37 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: UkaegZFBbxgju5C6KZvYRkw1HBLbwDF5yzwEhEOffaeXZcbybC... -2026-01-08 22:51:37 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 5c97afbacb28d3c5880d11f1c849edbd747b5944 -2026-01-08 22:51:37 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 5c97afbacb28d3c5880d11f1c849edbd747b5944 -2026-01-08 22:51:37 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:51:37 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:51:37 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:51:37 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=latest_announcements, user=WeiJueSen -2026-01-08 22:51:37 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: latest_announcements, user: WeiJueSen -2026-01-08 22:51:37 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求最新公告 -2026-01-08 22:51:37 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-08 22:52:15 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:52:15 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: UixDCGFGrvh/SHPWyIaKml64/lFFLTbdqtfG3Ha2pCzJZgoU8j... -2026-01-08 22:52:15 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 04e04877f11c393184edb4af917f4f1c2ba6d985 -2026-01-08 22:52:15 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 04e04877f11c393184edb4af917f4f1c2ba6d985 -2026-01-08 22:52:15 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:52:15 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:52:15 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:52:15 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=today_stats, user=WeiJueSen -2026-01-08 22:52:15 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: today_stats, user: WeiJueSen -2026-01-08 22:52:15 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求今日统计 -2026-01-08 22:52:15 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-08 22:52:15 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-08 22:52:15 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-08 22:52:15 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-08 22:52:15 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-08 22:52:15 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-08 22:52:15 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-08 22:52:15 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-08 22:52:25 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:52:25 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: zggZXiK9Kd+/OrwuAThCXv9oZlwquC34r3bkCGAmNc5p2+I+pR... -2026-01-08 22:52:25 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 39e474ab78e052a07484216d19e28c3ee4669bd5 -2026-01-08 22:52:25 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 39e474ab78e052a07484216d19e28c3ee4669bd5 -2026-01-08 22:52:25 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:52:25 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:52:25 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:52:25 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=keyword_search, user=WeiJueSen -2026-01-08 22:52:25 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_search, user: WeiJueSen -2026-01-08 22:52:25 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 触发关键词搜索菜单 -2026-01-08 22:52:33 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:52:33 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: AgFqIGQuILuzjJtXhoteHPd97jgTE9JdS4t832GfHu19/OP7Aq... -2026-01-08 22:52:33 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: d3553f3faae53288a5143ab892371dc45b9d1660 -2026-01-08 22:52:33 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: d3553f3faae53288a5143ab892371dc45b9d1660 -2026-01-08 22:52:33 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:52:33 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:52:33 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-08 22:52:33 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-08 22:52:33 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-08 22:52:33 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-08 22:52:48 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:52:48 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: vks0rZrGMJPZ/iKMXIYVM/HWlQ/y9w3hpQpnXjj2uXhvqC5+Eh... -2026-01-08 22:52:48 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 1eb52eda1d731c10e750c06b0ed8283c62cc392a -2026-01-08 22:52:48 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 1eb52eda1d731c10e750c06b0ed8283c62cc392a -2026-01-08 22:52:48 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:52:48 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:52:48 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:52:48 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=crawl_now, user=WeiJueSen -2026-01-08 22:52:48 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: crawl_now, user: WeiJueSen -2026-01-08 22:52:48 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 触发立即爬取 -2026-01-08 22:52:48 - gx_gp_monitor.main - INFO - 开始执行爬取任务 (手动爬取: False) -2026-01-08 22:52:48 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-08 22:52:48 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-08 22:52:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:49 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.49秒 -2026-01-08 22:52:49 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-08 22:52:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:49 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-08 22:52:49 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-08 22:52:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:49 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-08 22:52:49 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-08 22:52:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:49 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-08 22:52:49 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-08 22:52:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:50 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-08 22:52:50 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-08 22:52:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:50 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-08 22:52:50 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-08 22:52:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:50 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.37秒 -2026-01-08 22:52:50 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-08 22:52:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:50 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-08 22:52:50 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-08 22:52:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:51 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-08 22:52:51 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-08 22:52:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:51 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 22:52:51 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-08 22:52:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:51 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 22:52:51 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-08 22:52:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:51 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-08 22:52:51 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-08 22:52:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 22:52:51 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-08 22:52:51 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.main - INFO - 爬取到 1300 条原始公告 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-08 22:52:51 - gx_gp_monitor.main - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-08 22:52:51 - gx_gp_monitor.main - INFO - 筛选出 1300 条新公告 -2026-01-08 22:52:51 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-08 22:52:52 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-08 22:52:52 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-08 22:52:52 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-08 22:52:52 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-08 22:52:52 - gx_gp_monitor.storage.md_generator - INFO - Markdown文件已保存到: onu.md (共 0 条公告) -2026-01-08 22:52:52 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': True, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 1300, 'date_filtered': 0, 'duplicate_filtered': 1300, 'source_filtered': 0}} -2026-01-08 22:53:03 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:53:03 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: RM8+8Adm0+v3U+VeC3pYUsPGMh7hU6+GQQ3siCysk2Lr+4BDAi... -2026-01-08 22:53:03 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 8c299026026515349dad873316441d2b59595f02 -2026-01-08 22:53:03 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 8c299026026515349dad873316441d2b59595f02 -2026-01-08 22:53:03 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:53:03 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:53:03 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:53:03 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=keyword_manage, user=WeiJueSen -2026-01-08 22:53:03 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_manage, user: WeiJueSen -2026-01-08 22:53:03 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求关键词管理 -2026-01-08 22:53:16 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:53:16 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: HNNsfKsUgT/eocccVGhxxQp+h4E0HHhade8ngqLbvUrrKihYD5... -2026-01-08 22:53:16 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 384adc1af5915f0f96dbc112873c3ee37c94c7c2 -2026-01-08 22:53:16 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 384adc1af5915f0f96dbc112873c3ee37c94c7c2 -2026-01-08 22:53:16 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:53:16 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:53:16 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:53:16 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=system_status, user=WeiJueSen -2026-01-08 22:53:16 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: system_status, user: WeiJueSen -2026-01-08 22:53:16 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统状态 -2026-01-08 22:53:16 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-08 22:53:16 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-08 22:53:20 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:53:20 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 6o5X2ptEGVJq1TSIcihlQbL+ZCmnHQH4ykJt5yG3MbT8Kg1wdh... -2026-01-08 22:53:20 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: a579045940e40f2c0d3a4f18e5ddf28772736280 -2026-01-08 22:53:20 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: a579045940e40f2c0d3a4f18e5ddf28772736280 -2026-01-08 22:53:20 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:53:20 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:53:20 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:53:20 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=clear_cache, user=WeiJueSen -2026-01-08 22:53:20 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: clear_cache, user: WeiJueSen -2026-01-08 22:53:20 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求清理缓存 -2026-01-08 22:53:20 - gx_gp_monitor.wechat.message_handler - WARNING - 数据库缓存清理失败: cannot import name 'clear_database_cache' from 'gx_gp_monitor.storage.postgresql' (/home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/storage/postgresql.py) -2026-01-08 22:53:27 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:53:27 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: HTQWr2Myo26r8aC/d2/aDTMtOCZs9bKotRzm7OZS3z383EOHrV... -2026-01-08 22:53:27 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 8756b68ff8a0c7a65138eea51d49c730c76dbfb3 -2026-01-08 22:53:27 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 8756b68ff8a0c7a65138eea51d49c730c76dbfb3 -2026-01-08 22:53:27 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:53:27 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:53:27 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:53:27 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=help_guide, user=WeiJueSen -2026-01-08 22:53:27 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: help_guide, user: WeiJueSen -2026-01-08 22:53:27 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求使用说明 -2026-01-08 22:53:38 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 22:53:38 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: GYWb0YmDz39zBpeXe6nn/uqEEHFZXpJ2rrCgooU1F1Tz3FJh/g... -2026-01-08 22:53:38 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 12961b1237b59bbf072dafd93b7cf758ae44346b -2026-01-08 22:53:38 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 12961b1237b59bbf072dafd93b7cf758ae44346b -2026-01-08 22:53:38 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 22:53:38 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 22:53:38 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 22:53:38 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=about_system, user=WeiJueSen -2026-01-08 22:53:38 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: about_system, user: WeiJueSen -2026-01-08 22:53:38 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统信息 -2026-01-08 23:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-08 23:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-08 23:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-08 23:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-08 23:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-08 23:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-08 23:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-08 23:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-08 23:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-08 23:02:06 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:06 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.52秒 -2026-01-08 23:02:06 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-08 23:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:07 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-08 23:02:07 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-08 23:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:07 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-08 23:02:07 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-08 23:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:07 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-08 23:02:07 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-08 23:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:07 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 23:02:07 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-08 23:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:08 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-08 23:02:08 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-08 23:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:08 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-08 23:02:08 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-08 23:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:08 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-08 23:02:08 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-08 23:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:08 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-08 23:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-08 23:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:08 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 23:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-08 23:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:09 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 23:02:09 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-08 23:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:09 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-08 23:02:09 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-08 23:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:02:09 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 23:02:09 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-08 23:02:09 - __main__ - INFO - 爬取到 1300 条原始公告 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-08 23:02:09 - __main__ - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-08 23:02:09 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-08 23:02:09 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-08 23:02:09 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-08 23:02:09 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-08 23:02:09 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-08 23:02:09 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-08 23:24:20 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:24:20 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 29e+mJkgneFeo1ny28a6GEST9jWQZ520LjorzV4NOfgoH5QA/W... -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 79b6eafce857f4ef43b5e61edc1fe207cda31b3f -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 79b6eafce857f4ef43b5e61edc1fe207cda31b3f -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=crawl_now, user=WeiJueSen -2026-01-08 23:24:40 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: crawl_now, user: WeiJueSen -2026-01-08 23:24:40 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 触发立即搜索 -2026-01-08 23:24:40 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-08 23:24:40 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-08 23:24:40 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-08 23:24:40 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-08 23:24:40 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-08 23:24:40 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-08 23:24:40 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-08 23:24:40 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-08 23:24:40 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-08 23:24:40 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: False) -2026-01-08 23:24:40 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-08 23:24:40 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 29e+mJkgneFeo1ny28a6GEST9jWQZ520LjorzV4NOfgoH5QA/W... -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 79b6eafce857f4ef43b5e61edc1fe207cda31b3f -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 79b6eafce857f4ef43b5e61edc1fe207cda31b3f -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=crawl_now, user=WeiJueSen -2026-01-08 23:24:45 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: crawl_now, user: WeiJueSen -2026-01-08 23:24:45 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 触发立即搜索 -2026-01-08 23:24:45 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: False) -2026-01-08 23:24:45 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-08 23:24:45 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-08 23:24:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:45 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.43秒 -2026-01-08 23:24:45 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-08 23:24:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:46 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-08 23:24:46 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-08 23:24:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:46 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-08 23:24:46 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-08 23:24:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:46 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-08 23:24:46 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-08 23:24:47 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:47 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.61秒 -2026-01-08 23:24:47 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-08 23:24:47 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:47 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 23:24:47 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-08 23:24:47 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:47 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.43秒 -2026-01-08 23:24:47 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-08 23:24:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.30秒 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-08 23:24:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-08 23:24:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-08 23:24:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-08 23:24:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:49 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-08 23:24:49 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-08 23:24:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:49 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-08 23:24:49 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.main - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-08 23:24:49 - gx_gp_monitor.main - INFO - 筛选出 1300 条新公告 -2026-01-08 23:24:49 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-08 23:24:49 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-08 23:24:49 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.storage.md_generator - INFO - Markdown文件已保存到: onu.md (共 0 条公告) -2026-01-08 23:24:49 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': True, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 1300, 'date_filtered': 0, 'duplicate_filtered': 1300, 'source_filtered': 0}} -2026-01-08 23:25:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.49秒 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-08 23:25:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-08 23:25:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-08 23:25:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-08 23:25:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:12 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-08 23:25:12 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-08 23:25:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:12 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-08 23:25:12 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-08 23:25:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:12 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-08 23:25:12 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-08 23:25:13 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-08 23:25:13 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-08 23:25:13 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:13 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-08 23:25:13 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:13 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.main - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-08 23:25:14 - gx_gp_monitor.main - INFO - 筛选出 1300 条新公告 -2026-01-08 23:25:14 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-08 23:25:14 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-08 23:25:14 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.storage.md_generator - INFO - Markdown文件已保存到: onu.md (共 0 条公告) -2026-01-08 23:25:14 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': True, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 1300, 'date_filtered': 0, 'duplicate_filtered': 1300, 'source_filtered': 0}} -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: WrH7Jb1CJaRbTgRYnX0MmwszM4U7Ik/1SAqCWS1iq2QU8KyMML... -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 1bee1bed89a994b34b8572f926d6e545f045604e -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 1bee1bed89a994b34b8572f926d6e545f045604e -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=keyword_manage, user=WeiJueSen -2026-01-08 23:26:07 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_manage, user: WeiJueSen -2026-01-08 23:26:07 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求关键词管理 -2026-01-08 23:26:08 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-08 23:26:08 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单管理器初始化完成 -2026-01-08 23:26:08 - gx_gp_monitor.wechat.menu_manager - INFO - 开始创建企业微信菜单 -2026-01-08 23:26:08 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-08 23:26:08 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单创建成功 -2026-01-08 23:26:29 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-08 23:26:29 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单管理器初始化完成 -2026-01-08 23:26:29 - gx_gp_monitor.wechat.menu_manager - INFO - 开始获取企业微信菜单 -2026-01-08 23:26:29 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-08 23:26:29 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单获取成功 -2026-01-08 23:26:35 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-08 23:26:35 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单管理器初始化完成 -2026-01-08 23:26:35 - gx_gp_monitor.wechat.menu_manager - INFO - 开始创建企业微信菜单 -2026-01-08 23:26:35 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-08 23:26:35 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单创建成功 -2026-01-08 23:26:50 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:26:50 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: yWYKLWjpp1gWQZ4OUse8zPR3YaOQZ9wYUHaz8WIETXh3J9S9F/... -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: bb97c3ed9044e8f2966690372c8e2283c9597d82 -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: bb97c3ed9044e8f2966690372c8e2283c9597d82 -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=about_system, user=WeiJueSen -2026-01-08 23:27:36 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: about_system, user: WeiJueSen -2026-01-08 23:27:36 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统信息 -2026-01-08 23:29:39 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:29:39 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 23:29:46 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:29:46 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 23:29:59 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:29:59 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 23:30:12 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:30:12 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 23:30:53 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:30:53 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 23:31:23 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:31:23 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 23:31:40 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:31:40 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 23:31:57 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:31:57 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 23:37:16 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-08 23:37:16 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单管理器初始化完成 -2026-01-08 23:37:16 - gx_gp_monitor.wechat.menu_manager - INFO - 开始创建企业微信菜单 -2026-01-08 23:37:16 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-08 23:37:16 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单创建成功 -2026-01-08 23:37:24 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-08 23:37:24 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单管理器初始化完成 -2026-01-08 23:37:24 - gx_gp_monitor.wechat.menu_manager - INFO - 开始获取企业微信菜单 -2026-01-08 23:37:24 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-08 23:37:24 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单获取成功 -2026-01-08 23:37:44 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:37:44 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求关键词管理 -2026-01-08 23:40:42 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-08 23:40:42 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单管理器初始化完成 -2026-01-08 23:40:42 - gx_gp_monitor.wechat.menu_manager - INFO - 开始创建企业微信菜单 -2026-01-08 23:40:42 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-08 23:40:42 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单创建成功 -2026-01-08 23:40:52 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-08 23:40:52 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单管理器初始化完成 -2026-01-08 23:40:52 - gx_gp_monitor.wechat.menu_manager - INFO - 开始获取企业微信菜单 -2026-01-08 23:40:52 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-08 23:40:53 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单获取成功 -2026-01-08 23:40:57 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:40:57 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求关键词管理 -2026-01-08 23:41:25 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:41:25 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: crawl_now, user: test_user -2026-01-08 23:41:25 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 触发立即搜索 -2026-01-08 23:41:25 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-08 23:41:25 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-08 23:41:25 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-08 23:41:25 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-08 23:41:25 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-08 23:41:25 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-08 23:41:25 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-08 23:41:25 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-08 23:41:25 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-08 23:41:25 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: False) -2026-01-08 23:41:25 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-08 23:41:25 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-08 23:41:25 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:25 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.45秒 -2026-01-08 23:41:25 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-08 23:41:26 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:26 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-08 23:41:26 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-08 23:41:26 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:26 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-08 23:41:26 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-08 23:41:26 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:26 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-08 23:41:26 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-08 23:41:26 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:26 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-08 23:41:26 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-08 23:41:26 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:26 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-08 23:41:26 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-08 23:41:27 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:27 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.32秒 -2026-01-08 23:41:27 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-08 23:41:27 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:27 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-08 23:41:27 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-08 23:41:27 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:27 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-08 23:41:27 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-08 23:41:27 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:27 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-08 23:41:27 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-08 23:41:27 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:27 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 23:41:27 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-08 23:41:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:28 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-08 23:41:28 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-08 23:41:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:41:28 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-08 23:41:28 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.main - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-08 23:41:28 - gx_gp_monitor.main - INFO - 筛选出 1300 条新公告 -2026-01-08 23:41:28 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-08 23:41:28 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-08 23:41:28 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-08 23:41:28 - gx_gp_monitor.storage.md_generator - INFO - Markdown文件已保存到: onu.md (共 0 条公告) -2026-01-08 23:41:28 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': True, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 1300, 'date_filtered': 0, 'duplicate_filtered': 1300, 'source_filtered': 0}} -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: today_stats, user: test_user -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求今日统计 -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_search, user: test_user -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 触发关键词搜索菜单 -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: latest_news, user: test_user -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求最新公告 -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_manage, user: test_user -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求关键词管理 -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: system_status, user: test_user -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求系统状态 -2026-01-08 23:41:28 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-08 23:41:28 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: clear_cache, user: test_user -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求清理缓存 -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - WARNING - 数据库缓存清理失败: cannot import name 'clear_database_cache' from 'gx_gp_monitor.storage.postgresql' (/home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/storage/postgresql.py) -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: help_guide, user: test_user -2026-01-08 23:41:28 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求使用说明 -2026-01-08 23:52:07 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:52:07 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: n59OiXnRr3zM6BW5uVWSYT6UKG/jwApIhfJmwxnP9GpaH3WRsC... -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 887eba908c181e0228de54116517e004e6d673d3 -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 887eba908c181e0228de54116517e004e6d673d3 -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=today_stats, user=WeiJueSen -2026-01-08 23:52:13 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: today_stats, user: WeiJueSen -2026-01-08 23:52:13 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求今日统计 -2026-01-08 23:52:13 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-08 23:52:13 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-08 23:52:13 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-08 23:52:13 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-08 23:52:13 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-08 23:52:13 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-08 23:52:13 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-08 23:52:13 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-08 23:52:13 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: byLoJ8C5/EIdNJGq7flLu3wK+9KeXhAbFlWGZ4SKbrq/jzVScQ... -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 0d4231a984a41081739519e49ef91e1a62af27c2 -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 0d4231a984a41081739519e49ef91e1a62af27c2 -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=keyword_manage, user=WeiJueSen -2026-01-08 23:52:21 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_manage, user: WeiJueSen -2026-01-08 23:52:21 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求关键词管理 -2026-01-09 00:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 00:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 00:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 00:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 00:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 00:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-09 00:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 00:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 00:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 00:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:07 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.47秒 -2026-01-09 00:02:07 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 00:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:07 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 00:02:07 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 00:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:07 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 00:02:07 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 00:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:07 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.28秒 -2026-01-09 00:02:07 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 00:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:08 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 00:02:08 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 00:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:08 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 00:02:08 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 00:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:08 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.33秒 -2026-01-09 00:02:08 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 00:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:08 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 00:02:08 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 00:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:09 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 00:02:09 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 00:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:09 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:02:09 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 00:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:09 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 00:02:09 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 00:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:09 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:02:09 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 00:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:02:09 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:02:09 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 00:02:09 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 00:02:09 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 00:02:09 - __main__ - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 00:02:09 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 00:02:09 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 00:02:10 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 00:02:10 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 00:02:10 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 00:02:10 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 00:02:10 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: lD6k2bCX3whG0WVivcAAby7GwI0fzF4lElViOb36QW2etFd8aF... -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 8da1cb947170f3a975db580b0a1a03dc4fbc922a -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 8da1cb947170f3a975db580b0a1a03dc4fbc922a -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 00:10:09 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 00:10:09 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 00:10:09 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 00:10:09 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 00:10:09 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 00:10:09 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: lD6k2bCX3whG0WVivcAAby7GwI0fzF4lElViOb36QW2etFd8aF... -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 8da1cb947170f3a975db580b0a1a03dc4fbc922a -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 8da1cb947170f3a975db580b0a1a03dc4fbc922a -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 00:10:14 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 00:10:14 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 00:10:14 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 00:10:14 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 00:10:14 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 00:10:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.48秒 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 00:10:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 00:10:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 00:10:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 2V3aU/4FO7zlAhJFhCe168paUJgMT77M+FAB4jNUk/NXWcWgDl... -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 971fef79a492b4102de1d93d6fc27160160dea60 -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 971fef79a492b4102de1d93d6fc27160160dea60 -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=keyword_search, user=WeiJueSen -2026-01-09 00:10:15 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_search, user: WeiJueSen -2026-01-09 00:10:15 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 触发关键词搜索菜单 -2026-01-09 00:10:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 00:10:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 00:10:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.32秒 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 00:10:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 00:10:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 00:10:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 00:10:17 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:17 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 00:10:17 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 00:10:17 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:17 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 00:10:17 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 00:10:17 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:17 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 00:10:17 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 00:10:17 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 00:10:17 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 00:10:17 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 0 条公告 -2026-01-09 00:10:17 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 00:10:17 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 00:10:17 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 00:10:17 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 00:10:17 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 0, 'date_filtered': 1300, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -2026-01-09 00:10:40 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.51秒 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 00:10:40 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 00:10:40 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 00:10:40 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 00:10:41 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 00:10:41 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 00:10:41 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 00:10:41 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 00:10:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 00:10:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 00:10:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 00:10:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 00:10:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:10:42 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 00:10:42 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 00:10:42 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 00:10:42 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 1 条公告 -2026-01-09 00:10:42 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 1 -> 0 条公告 -2026-01-09 00:10:42 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 00:10:42 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 00:10:42 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 00:10:42 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 1, 'date_filtered': 1299, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -2026-01-09 01:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 01:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 01:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 01:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 01:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 01:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-09 01:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 01:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 01:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 01:02:06 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:06 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.44秒 -2026-01-09 01:02:06 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 01:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:07 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 01:02:07 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 01:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:07 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 01:02:07 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 01:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:07 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 01:02:07 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 01:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:07 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 01:02:07 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 01:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:07 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 01:02:07 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 01:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:08 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.33秒 -2026-01-09 01:02:08 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 01:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:08 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 01:02:08 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 01:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:08 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 01:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 01:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:08 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 01:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 01:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:08 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 01:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 01:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:09 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 01:02:09 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 01:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 01:02:09 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 01:02:09 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 01:02:09 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 01:02:09 - __main__ - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 01:02:09 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 01:02:09 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 01:02:09 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 01:02:09 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 01:02:09 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 01:02:09 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 02:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 02:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 02:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 02:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 02:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 02:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-09 02:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 02:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 02:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 02:02:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:36 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.49秒 -2026-01-09 02:02:36 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 02:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:37 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 02:02:37 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 02:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:37 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 02:02:37 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 02:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:37 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 02:02:37 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 02:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:37 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 02:02:37 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 02:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:37 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 02:02:37 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 02:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:38 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.33秒 -2026-01-09 02:02:38 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 02:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:38 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 02:02:38 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 02:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:38 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 02:02:38 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 02:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:38 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 02:02:38 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 02:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:38 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 02:02:38 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 02:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:39 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 02:02:39 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 02:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 02:02:39 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 02:02:39 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 02:02:39 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 02:02:39 - __main__ - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 02:02:39 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 02:02:39 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 02:02:39 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 02:02:39 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 02:02:39 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 02:02:39 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 03:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 03:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 03:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 03:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 03:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 03:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-09 03:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 03:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 03:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 03:02:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:36 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.52秒 -2026-01-09 03:02:36 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 03:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:37 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 03:02:37 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 03:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:37 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 03:02:37 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 03:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:37 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 03:02:37 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 03:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:37 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 03:02:37 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 03:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:37 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 03:02:37 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 03:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:38 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-09 03:02:38 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 03:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:38 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 03:02:38 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 03:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:38 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 03:02:38 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 03:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:38 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 03:02:38 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 03:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:39 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 03:02:39 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 03:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:39 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 03:02:39 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 03:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 03:02:39 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 03:02:39 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 03:02:39 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 03:02:39 - __main__ - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 03:02:39 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 03:02:39 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 03:02:39 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 03:02:39 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 03:02:39 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 03:02:39 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 04:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 04:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 04:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 04:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 04:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 04:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-09 04:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 04:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 04:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 04:02:06 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:06 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.47秒 -2026-01-09 04:02:06 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 04:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:07 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 04:02:07 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 04:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:07 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 04:02:07 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 04:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:07 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 04:02:07 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 04:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:07 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 04:02:07 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 04:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:07 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.14秒 -2026-01-09 04:02:07 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 04:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:08 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.40秒 -2026-01-09 04:02:08 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 04:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:08 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 04:02:08 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 04:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:08 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 04:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 04:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:08 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 04:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 04:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:08 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 04:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 04:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:09 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 04:02:09 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 04:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 04:02:09 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 04:02:09 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 04:02:09 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 04:02:09 - __main__ - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 04:02:09 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 04:02:09 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 04:02:09 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 04:02:09 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 04:02:09 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 04:02:09 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 05:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 05:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 05:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 05:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 05:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 05:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-09 05:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 05:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 05:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 05:02:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:36 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.54秒 -2026-01-09 05:02:36 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 05:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:37 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 05:02:37 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 05:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:37 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 05:02:37 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 05:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:37 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 05:02:37 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 05:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:37 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 05:02:37 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 05:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:37 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 05:02:37 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 05:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:38 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.32秒 -2026-01-09 05:02:38 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 05:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:38 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 05:02:38 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 05:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:38 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 05:02:38 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 05:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:38 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 05:02:38 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 05:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:39 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 05:02:39 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 05:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:39 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 05:02:39 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 05:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 05:02:39 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 05:02:39 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 05:02:39 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 05:02:39 - __main__ - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 05:02:39 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 05:02:39 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 05:02:39 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 05:02:39 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 05:02:39 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 05:02:39 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 06:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 06:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 06:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 06:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 06:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 06:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-09 06:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 06:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 06:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 06:02:06 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:06 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.49秒 -2026-01-09 06:02:06 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 06:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:07 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 06:02:07 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 06:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:07 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 06:02:07 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 06:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:07 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 06:02:07 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 06:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:07 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 06:02:07 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 06:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:07 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 06:02:07 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 06:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:08 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.39秒 -2026-01-09 06:02:08 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 06:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:08 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 06:02:08 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 06:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:08 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 06:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 06:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:08 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 06:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 06:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:09 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 06:02:09 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 06:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:09 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 06:02:09 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 06:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 06:02:09 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 06:02:09 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 06:02:09 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 06:02:09 - __main__ - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 06:02:09 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 06:02:09 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 06:02:09 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 06:02:09 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 06:02:09 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 06:02:09 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 07:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 07:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 07:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 07:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 07:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 07:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-09 07:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 07:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 07:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 07:02:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:36 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.51秒 -2026-01-09 07:02:36 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 07:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:37 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 07:02:37 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 07:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:37 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 07:02:37 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 07:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:37 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 07:02:37 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 07:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:37 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 07:02:37 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 07:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:37 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 07:02:37 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 07:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:38 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.35秒 -2026-01-09 07:02:38 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 07:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:38 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 07:02:38 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 07:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:38 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 07:02:38 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 07:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:38 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 07:02:38 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 07:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:38 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 07:02:38 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 07:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:39 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 07:02:39 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 07:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 07:02:39 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 07:02:39 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 07:02:39 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 07:02:39 - __main__ - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 07:02:39 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 07:02:39 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 07:02:39 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 07:02:39 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 07:02:39 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 07:02:39 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 08:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 08:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 08:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 08:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 08:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 08:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-09 08:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 08:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 08:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 08:02:06 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:06 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.54秒 -2026-01-09 08:02:06 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 08:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:07 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 08:02:07 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 08:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:07 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 08:02:07 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 08:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:07 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 08:02:07 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 08:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:07 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 08:02:07 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 08:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:07 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 08:02:07 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 08:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:08 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.33秒 -2026-01-09 08:02:08 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 08:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:08 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 08:02:08 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 08:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:08 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 08:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 08:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:08 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 08:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 08:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:09 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 08:02:09 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 08:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:09 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 08:02:09 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 08:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 08:02:09 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 08:02:09 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 08:02:09 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 08:02:09 - __main__ - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 08:02:09 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 08:02:09 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 08:02:09 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 08:02:09 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 08:02:09 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 08:02:09 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: tc4EfnaoWAMd6veuWP3h1KALIuMqFaseXjRRVx9vm8aHsfZaFX... -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 6367d32d17c91baf7f4e084d457653862e380d20 -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 6367d32d17c91baf7f4e084d457653862e380d20 -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=announcements_by_type, user=WeiJueSen -2026-01-09 08:09:44 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: announcements_by_type, user: WeiJueSen -2026-01-09 08:09:44 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求按类型查看公告 -2026-01-09 08:09:44 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: KNXRojaaOOvMXAn/bS/jCuXblPiK3JZlgYTa3ZkP/NIaRLHdgd... -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: f3151e52daaf7cd68feebc40d4c3be095a479eeb -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: f3151e52daaf7cd68feebc40d4c3be095a479eeb -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=today_count, user=WeiJueSen -2026-01-09 08:09:54 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: today_count, user: WeiJueSen -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: WQBIDFITyc25ID3VlassbD4P/na15LN12tS+UlIJNMoPt5OIWl... -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: c70c8e0f75d9e1e8673a812ba65eecc0fffefac0 -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: c70c8e0f75d9e1e8673a812ba65eecc0fffefac0 -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=system_status, user=WeiJueSen -2026-01-09 08:10:03 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: system_status, user: WeiJueSen -2026-01-09 08:10:03 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统状态 -2026-01-09 08:10:03 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 08:10:03 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: xWHwlcwe4cuIn2AK6nBzQ9q5zV0+ugoj8SRfP7xMMSCVEgHK2c... -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: fe4d3cd3694a6e377ca8a65dba40280dc9567e06 -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: fe4d3cd3694a6e377ca8a65dba40280dc9567e06 -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=system_status, user=WeiJueSen -2026-01-09 08:24:28 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: system_status, user: WeiJueSen -2026-01-09 08:24:28 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统状态 -2026-01-09 08:24:28 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 08:24:28 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: hqqxYVpVNxT1Qj5jt+eIUo3YItaTa0mdudcHd/kc2ov6qd7tVB... -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 0a03ded284404f7444d641fd5d85f6b692f76d42 -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 0a03ded284404f7444d641fd5d85f6b692f76d42 -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=clear_cache, user=WeiJueSen -2026-01-09 08:25:01 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: clear_cache, user: WeiJueSen -2026-01-09 08:25:01 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求清理缓存 -2026-01-09 08:25:01 - gx_gp_monitor.wechat.message_handler - WARNING - 数据库缓存清理失败: cannot import name 'clear_database_cache' from 'gx_gp_monitor.storage.postgresql' (/home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/storage/postgresql.py) -2026-01-09 08:25:36 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:25:36 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 08:25:50 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:25:50 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 08:25:52 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:25:52 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求系统状态 -2026-01-09 08:25:52 - gx_gp_monitor.core.database - ERROR - 数据库连接错误: 数据库连接池未初始化 -2026-01-09 08:25:52 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 08:25:52 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 08:25:52 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 08:25:52 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 08:25:52 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 08:25:52 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 08:25:52 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 08:25:52 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 08:25:52 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 08:25:52 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 08:25:52 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 08:26:00 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:26:00 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 08:26:02 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:26:02 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求系统状态 -2026-01-09 08:26:02 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 08:26:02 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 08:26:02 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 08:26:02 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 08:26:02 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 08:26:02 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 08:26:02 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 08:26:02 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 08:26:02 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 08:26:02 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 08:26:02 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 08:26:02 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 08:26:02 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 08:26:20 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:26:20 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 08:26:22 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:26:22 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求系统状态 -2026-01-09 08:26:22 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 08:26:22 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 08:26:22 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 08:26:22 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 08:26:22 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 08:26:22 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 08:26:22 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 08:26:22 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 08:26:22 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 08:26:22 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 08:26:22 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 08:26:22 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 08:26:22 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 08:26:32 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:26:32 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 08:28:11 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:28:11 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 08:28:20 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:28:20 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: RXM6iBy1lGhKEHAzzl71zQ7rpp8F43J/HveXh7oBV+Ohnzab4O... -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: cdc12e2bef00f01d987d9ae321d300a1e5c36c12 -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: cdc12e2bef00f01d987d9ae321d300a1e5c36c12 -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=system_status, user=WeiJueSen -2026-01-09 08:29:48 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: system_status, user: WeiJueSen -2026-01-09 08:29:48 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统状态 -2026-01-09 08:29:48 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 08:29:48 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 08:29:48 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 08:29:48 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 08:29:48 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 08:29:48 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 08:29:48 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 08:29:48 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 08:29:48 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 08:29:48 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 08:29:48 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 08:29:48 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 08:29:49 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: VYkwtbAIPnpprcyspau+o6woVT+BLSfa9WoVartvZtHggONJ20... -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: b3867dab975a717dbadcc5bd891ea3c94a209572 -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: b3867dab975a717dbadcc5bd891ea3c94a209572 -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=help_guide, user=WeiJueSen -2026-01-09 08:30:12 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: help_guide, user: WeiJueSen -2026-01-09 08:30:12 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求使用说明 -2026-01-09 08:30:52 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:30:52 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 08:40:43 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:40:43 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 08:42:18 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:42:18 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 08:43:00 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:43:00 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 08:43:32 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:43:32 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 08:43:41 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:43:41 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 09:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 09:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 09:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 09:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 09:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 09:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-09 09:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 09:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:02:06 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:06 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.45秒 -2026-01-09 09:02:06 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:07 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 09:02:07 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:07 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:02:07 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:07 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:02:07 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:07 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 09:02:07 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:07 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:02:07 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:08 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.39秒 -2026-01-09 09:02:08 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:08 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:02:08 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:08 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:08 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:09 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 09:02:09 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:09 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 09:02:09 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:02:09 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:02:09 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:02:09 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 09:02:09 - __main__ - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 09:02:09 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 09:02:09 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 09:02:09 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 09:02:09 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 09:02:09 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 09:02:09 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: S85Mv12UhBqhnCoEyCf2GdrP0uHiDB61RmzIcmMqk5vRLfhDC7... -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 05a3dac6f360b335ba50de40004324f8668f476b -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 05a3dac6f360b335ba50de40004324f8668f476b -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 09:13:20 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 09:13:20 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 09:13:20 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 09:13:20 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 09:13:20 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 09:13:20 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 09:13:20 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 09:13:20 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 09:13:20 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 09:13:20 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 09:13:20 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 09:13:20 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 09:13:20 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:13:20 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: S85Mv12UhBqhnCoEyCf2GdrP0uHiDB61RmzIcmMqk5vRLfhDC7... -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 05a3dac6f360b335ba50de40004324f8668f476b -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 05a3dac6f360b335ba50de40004324f8668f476b -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 09:13:25 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 09:13:25 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 09:13:25 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 09:13:25 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:13:25 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: S85Mv12UhBqhnCoEyCf2GdrP0uHiDB61RmzIcmMqk5vRLfhDC7... -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 05a3dac6f360b335ba50de40004324f8668f476b -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 05a3dac6f360b335ba50de40004324f8668f476b -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 09:13:30 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 09:13:30 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 09:13:30 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 09:13:30 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 09:13:30 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 09:13:30 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 09:13:30 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 09:13:30 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 09:13:30 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 09:13:30 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 09:13:30 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 09:13:30 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 09:13:30 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:13:30 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: cRRv0gPY6is3KD1jEwXBytUOrRdzu3Db4yWqdjO1eZIZ1lAL+k... -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: e022be893dc3976c41438b805a0559df33dbded5 -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: e022be893dc3976c41438b805a0559df33dbded5 -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=system_status, user=WeiJueSen -2026-01-09 09:13:49 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: system_status, user: WeiJueSen -2026-01-09 09:13:49 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统状态 -2026-01-09 09:13:49 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 09:13:49 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 09:13:49 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 09:13:49 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 09:13:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:50 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.49秒 -2026-01-09 09:13:50 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:13:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:13:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:13:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:13:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:13:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:13:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:13:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:13:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:13:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:13:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:53 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:13:53 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:13:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:53 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 09:13:53 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:13:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:53 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:13:53 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:13:53 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:13:53 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 09:13:53 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 63 条公告 -2026-01-09 09:13:53 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 63 -> 0 条公告 -2026-01-09 09:13:53 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 09:13:53 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:13:53 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 09:13:53 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 63, 'date_filtered': 1237, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -2026-01-09 09:13:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:55 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.38秒 -2026-01-09 09:13:55 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:13:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:55 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:13:55 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:13:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:55 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:13:55 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:13:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:13:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:13:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:13:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.35秒 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:13:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:13:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:13:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:13:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:13:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:13:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:13:57 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:13:57 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:13:57 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 09:13:57 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 63 条公告 -2026-01-09 09:13:57 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 63 -> 0 条公告 -2026-01-09 09:13:57 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 09:13:57 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:13:57 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 09:13:57 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 63, 'date_filtered': 1237, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -2026-01-09 09:14:00 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:00 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.40秒 -2026-01-09 09:14:00 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:14:00 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:00 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:14:00 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:14:01 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:14:01 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:14:01 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.30秒 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:14:01 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:14:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.37秒 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:14:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:14:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:14:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:14:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:14:03 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:03 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.14秒 -2026-01-09 09:14:03 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:14:03 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:03 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:03 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:14:03 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:14:03 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 09:14:03 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 63 条公告 -2026-01-09 09:14:03 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 63 -> 0 条公告 -2026-01-09 09:14:03 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 09:14:03 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:14:03 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 09:14:03 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 63, 'date_filtered': 1237, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: gyx7vxH2zqMjazNfk20XsqoWAPeraaE5WmiJ8W2KXSNI9Nm0eA... -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 2f7b8f2f76bd50a36fbd191142f5ff1e3803157e -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 2f7b8f2f76bd50a36fbd191142f5ff1e3803157e -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=keyword_search, user=WeiJueSen -2026-01-09 09:14:09 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_search, user: WeiJueSen -2026-01-09 09:14:09 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 触发关键词搜索菜单 -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: mysaThIKeH57rqN/s+0oiaicH1gDxV8MkDM2SIOVR4luy0quyh... -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 09:14:17 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 09:14:17 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 09:14:17 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 09:14:17 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:14:17 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: mysaThIKeH57rqN/s+0oiaicH1gDxV8MkDM2SIOVR4luy0quyh... -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 09:14:22 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 09:14:22 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 09:14:22 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 09:14:22 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:14:22 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: mp1j++4grFMsPYo7YXgXOf1C52HWtxx6qWCHvAyMy1HL8SBUqf... -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 501bf3b1b00e3662707a0775828f2eb273c49efe -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 501bf3b1b00e3662707a0775828f2eb273c49efe -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=crawl_now, user=WeiJueSen -2026-01-09 09:14:27 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: crawl_now, user: WeiJueSen -2026-01-09 09:14:27 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 触发立即搜索 -2026-01-09 09:14:27 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: False) -2026-01-09 09:14:27 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:14:27 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: mysaThIKeH57rqN/s+0oiaicH1gDxV8MkDM2SIOVR4luy0quyh... -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 09:14:27 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 09:14:27 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 09:14:27 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 09:14:27 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:14:27 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:14:27 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:27 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.40秒 -2026-01-09 09:14:27 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:14:27 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:27 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:27 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:14:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:14:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:14:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:14:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:14:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.35秒 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:14:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:14:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:14:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:14:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:14:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:14:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:30 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:30 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.main - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 09:14:30 - gx_gp_monitor.main - INFO - 筛选出 1300 条新公告 -2026-01-09 09:14:30 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 09:14:30 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 09:14:30 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.storage.md_generator - INFO - Markdown文件已保存到: onu.md (共 0 条公告) -2026-01-09 09:14:30 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': True, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 1300, 'date_filtered': 0, 'duplicate_filtered': 1300, 'source_filtered': 0}} -2026-01-09 09:14:47 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:47 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.54秒 -2026-01-09 09:14:47 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:14:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:14:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:14:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:14:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:14:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:14:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.38秒 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:14:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:14:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:14:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:14:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:14:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:14:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:14:50 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:14:50 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:14:50 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 09:14:50 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 66 条公告 -2026-01-09 09:14:50 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 66 -> 0 条公告 -2026-01-09 09:14:50 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 09:14:50 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:14:50 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 09:14:50 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 66, 'date_filtered': 1234, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -2026-01-09 09:14:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.55秒 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:14:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.28秒 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:14:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:14:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:14:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:14:54 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:14:54 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.39秒 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:14:54 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:14:54 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:14:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:14:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:14:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:14:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:55 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:14:55 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:14:55 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 09:14:55 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 66 条公告 -2026-01-09 09:14:55 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 66 -> 0 条公告 -2026-01-09 09:14:55 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 09:14:55 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:14:55 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 09:14:55 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 66, 'date_filtered': 1234, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -2026-01-09 09:14:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:57 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.37秒 -2026-01-09 09:14:57 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:14:58 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:14:58 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:14:58 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:14:58 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:14:58 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:14:59 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.41秒 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:14:59 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:14:59 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:14:59 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:15:00 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:15:00 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:15:00 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:15:00 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:15:00 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:15:00 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:15:00 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:15:00 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 09:15:00 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:15:00 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:15:00 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 09:15:00 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 66 条公告 -2026-01-09 09:15:00 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 66 -> 0 条公告 -2026-01-09 09:15:00 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 09:15:00 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:15:00 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 09:15:00 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 66, 'date_filtered': 1234, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -2026-01-09 10:01:05 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:01:05 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:01:14 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:01:14 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:01:30 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:01:30 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 10:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-09 10:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:02:06 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:06 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.48秒 -2026-01-09 10:02:06 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:07 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:02:07 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:07 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:02:07 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:07 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:02:07 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:07 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:02:07 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:02:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:07 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:02:07 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:08 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.31秒 -2026-01-09 10:02:08 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:08 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:02:08 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:08 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:02:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:08 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:02:08 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:09 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:02:09 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:09 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:02:09 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:02:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:09 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:02:09 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:02:09 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 10:02:09 - __main__ - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 10:02:09 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 10:02:09 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 10:02:09 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 10:02:09 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 10:02:09 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 10:02:09 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: fl+xWhqaMMamwSp+ChWaJEvMtidFRZHUX4thfSYmtYqGtoWwkg... -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 84c30ad0c256e1dc1766b83a7afdcc9e2452102b -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 84c30ad0c256e1dc1766b83a7afdcc9e2452102b -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 10:02:17 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 10:02:17 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 10:02:17 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:02:17 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:02:17 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:02:17 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:02:18 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:02:18 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:02:18 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:02:18 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:02:18 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:02:18 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:02:18 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:02:18 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: fl+xWhqaMMamwSp+ChWaJEvMtidFRZHUX4thfSYmtYqGtoWwkg... -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 84c30ad0c256e1dc1766b83a7afdcc9e2452102b -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 84c30ad0c256e1dc1766b83a7afdcc9e2452102b -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 10:02:22 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 10:02:22 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 10:02:22 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:02:22 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:02:22 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:02:23 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:02:23 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:02:23 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:02:23 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:02:23 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:02:23 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:02:23 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:02:23 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:02:23 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: fl+xWhqaMMamwSp+ChWaJEvMtidFRZHUX4thfSYmtYqGtoWwkg... -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 84c30ad0c256e1dc1766b83a7afdcc9e2452102b -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 84c30ad0c256e1dc1766b83a7afdcc9e2452102b -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 10:02:27 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 10:02:27 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 10:02:27 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:02:27 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:02:27 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:02:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:28 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.39秒 -2026-01-09 10:02:28 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:02:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:28 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:02:28 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:02:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:28 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:02:28 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:02:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:02:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:02:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:02:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.40秒 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:02:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:02:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:02:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:02:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:02:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:02:31 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:31 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:02:31 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:02:31 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:02:31 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:02:31 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 134 条公告 -2026-01-09 10:02:31 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 134 -> 2 条公告 -2026-01-09 10:02:31 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:02:31 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:02:31 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:02:31 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 132, 'date_filtered': 1166, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 2, 29, 544509), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 2, 29, 948741), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:02:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:53 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.41秒 -2026-01-09 10:02:53 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:02:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:53 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:02:53 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:02:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:53 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:02:53 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:02:54 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:54 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:02:54 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:02:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.89秒 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:02:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:02:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.42秒 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:02:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:02:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:02:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:02:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:02:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.29秒 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:02:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:57 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:02:57 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:02:57 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:02:57 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:02:57 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 135 条公告 -2026-01-09 10:02:57 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 135 -> 2 条公告 -2026-01-09 10:02:57 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:02:57 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:02:57 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:02:57 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 133, 'date_filtered': 1165, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 2, 55, 251692), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 2, 55, 671160), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 5DXzoSk72rLPjWkQPcghu1KqCusBzSYPZGb4sg1eEU8I08mw4c... -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 545f8abd520fa65851b3da066d1d47be9c61b45c -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 545f8abd520fa65851b3da066d1d47be9c61b45c -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 10:09:36 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 10:09:36 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 10:09:36 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:09:37 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:09:37 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:09:37 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 5DXzoSk72rLPjWkQPcghu1KqCusBzSYPZGb4sg1eEU8I08mw4c... -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 545f8abd520fa65851b3da066d1d47be9c61b45c -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 545f8abd520fa65851b3da066d1d47be9c61b45c -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 10:09:41 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 10:09:41 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 10:09:41 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:09:41 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:09:41 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:09:42 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:09:42 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:09:42 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:09:42 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:09:42 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:09:42 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:09:42 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:09:42 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:09:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.37秒 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:09:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:09:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:09:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:09:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:09:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:09:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.32秒 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:09:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:09:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:09:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:09:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:09:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:09:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:45 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:09:45 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:09:45 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:09:45 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:09:45 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 147 条公告 -2026-01-09 10:09:45 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 147 -> 0 条公告 -2026-01-09 10:09:45 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 10:09:45 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 10:09:45 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:09:45 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 147, 'date_filtered': 1153, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: EV/PxbQk0Wr980DlO57RfvBpRIvjlxPWion7LkljkQDVheF4pF... -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 970dc8e6b91fb5479eb69edcabd6f966f6225465 -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 970dc8e6b91fb5479eb69edcabd6f966f6225465 -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=latest_news, user=WeiJueSen -2026-01-09 10:09:57 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: latest_news, user: WeiJueSen -2026-01-09 10:09:57 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求最新公告 -2026-01-09 10:10:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:07 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.46秒 -2026-01-09 10:10:07 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:10:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:07 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:10:07 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:10:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:10:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:10:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:10:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:10:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.32秒 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:10:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:10:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:10:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:10:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:10:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:10:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:10 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:10:10 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:10:10 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:10:10 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:10:10 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 149 条公告 -2026-01-09 10:10:10 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 149 -> 0 条公告 -2026-01-09 10:10:10 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 10:10:10 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 10:10:10 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:10:10 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 149, 'date_filtered': 1151, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 7oYpd6+5fsif46fnY3VTPqPcdhC2dlaybw3TzI3H44K2DFDpGL... -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 0cb188a04afb33504e72c7cad29ac0e1050a5d49 -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 0cb188a04afb33504e72c7cad29ac0e1050a5d49 -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=today_stats, user=WeiJueSen -2026-01-09 10:25:42 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: today_stats, user: WeiJueSen -2026-01-09 10:25:42 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求今日统计 -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: zEWl1m4Dcc4egm7eYKtlGk5Qxl/3qanWwWJBr1lrnBUigFykbr... -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 79e58abff8031c45f7d7639552e7e693239370b0 -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 79e58abff8031c45f7d7639552e7e693239370b0 -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 10:26:11 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 10:26:11 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 10:26:11 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:26:11 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:26:11 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:26:11 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:26:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.52秒 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:26:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:26:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:26:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:26:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:26:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:26:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.33秒 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:26:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:26:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:26:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:26:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:26:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:26:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:26:14 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:26:14 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:26:14 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:26:14 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 175 条公告 -2026-01-09 10:26:14 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 175 -> 2 条公告 -2026-01-09 10:26:14 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:26:14 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:26:14 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:26:14 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 173, 'date_filtered': 1125, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 26, 13, 304523), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 26, 13, 633593), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:26:40 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:26:40 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:26:59 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:26:59 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:27:11 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:27:11 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:27:22 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:27:22 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求最新公告 -2026-01-09 10:27:22 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 选择公告来源: 1 -2026-01-09 10:27:22 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:27:22 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 选择公告来源: 全部 -2026-01-09 10:27:22 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求查看所有来源最新公告 -2026-01-09 10:27:35 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 10:27:35 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单管理器初始化完成 -2026-01-09 10:27:35 - gx_gp_monitor.wechat.menu_manager - INFO - 开始创建企业微信菜单 -2026-01-09 10:27:35 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 10:27:35 - gx_gp_monitor.wechat.menu_manager - INFO - 企业微信菜单创建成功 -2026-01-09 10:27:44 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:27:44 - gx_gp_monitor.wechat.message_handler - INFO - 用户 demo_user 请求最新公告 -2026-01-09 10:27:44 - gx_gp_monitor.wechat.message_handler - INFO - 用户 demo_user 选择公告来源: 1 -2026-01-09 10:27:44 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:27:44 - gx_gp_monitor.wechat.message_handler - INFO - 用户 demo_user 选择公告来源: 全部 -2026-01-09 10:27:44 - gx_gp_monitor.wechat.message_handler - INFO - 用户 demo_user 请求查看所有来源最新公告 -2026-01-09 10:27:57 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:27:57 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: YS7RBuNL221aid+SSC+nfDV0AAkZe5xnflVEtA7MzaK+UyqoW9... -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 1f8d0c119a8bcbf6913ed06e9991c3166b6bbb18 -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 1f8d0c119a8bcbf6913ed06e9991c3166b6bbb18 -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=latest_news, user=WeiJueSen -2026-01-09 10:28:19 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: latest_news, user: WeiJueSen -2026-01-09 10:28:19 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求最新公告 -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 428 -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: zozV9O7eNAXcdK29PH30oG9UiS7hzONGFKXLc8G2pk0fhAFnIz... -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 10442844f4f723747edcf1925bed5e7903432b59 -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 10442844f4f723747edcf1925bed5e7903432b59 -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=1..., user=WeiJueSen -2026-01-09 10:28:25 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 1, user: WeiJueSen -2026-01-09 10:28:25 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 选择公告来源: 1 -2026-01-09 10:28:25 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:28:35 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:28:35 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求最新公告 -2026-01-09 10:28:35 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 选择公告来源: 1 -2026-01-09 10:28:35 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:28:50 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:28:50 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:32:29 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:32:29 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:32:34 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:32:34 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:32:40 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:32:40 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:32:45 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:32:45 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:32:47 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:32:47 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求最新公告 -2026-01-09 10:32:47 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 选择公告来源: 10 -2026-01-09 10:32:47 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:33:01 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:33:01 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求最新公告 -2026-01-09 10:33:01 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 选择公告来源: 1 -2026-01-09 10:33:01 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:33:01 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 选择公告来源: 10 -2026-01-09 10:33:01 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 选择公告来源: 全部 -2026-01-09 10:33:01 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 请求查看所有来源最新公告 -2026-01-09 10:33:10 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:33:10 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:33:21 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: GTaNs33vwoJ+4/EMmi2BNZfvbY/oa9P3ETIoIEbaLtRRSObPM2... -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: b164aac779ad641d764d7ca78e44d290891bda18 -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: b164aac779ad641d764d7ca78e44d290891bda18 -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=latest_news, user=WeiJueSen -2026-01-09 10:33:21 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: latest_news, user: WeiJueSen -2026-01-09 10:33:21 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求最新公告 -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 428 -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: S1bfMrKOasqa288wweOEjK/5pKCyxvTfFasXMD4bcoNmS53AaP... -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 0aab34f6a2cb370d6ead35df861f0e51b2305852 -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 0aab34f6a2cb370d6ead35df861f0e51b2305852 -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=10..., user=WeiJueSen -2026-01-09 10:33:32 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 10, user: WeiJueSen -2026-01-09 10:33:32 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 选择公告来源: 10 -2026-01-09 10:33:32 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: SnmNv1JvgNwdi/3C/KcStmOJIpzxorxgaCGic2u6tdLzsYmnOk... -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: feb8eef2ddccadec738c597383cb60ab7423765c -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: feb8eef2ddccadec738c597383cb60ab7423765c -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=today_stats, user=WeiJueSen -2026-01-09 10:34:31 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: today_stats, user: WeiJueSen -2026-01-09 10:34:31 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求今日统计 -2026-01-09 10:34:31 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:34:31 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:34:31 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:34:31 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:34:31 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:34:31 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:34:31 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:34:31 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:34:31 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: rBvhsf9qEmvSA53kCTz/vZk1cJ7XeUAHXZHecKetaDMwG+c7ds... -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: cd7d1cd61fa529ae42f14c64bb227705c5b263de -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: cd7d1cd61fa529ae42f14c64bb227705c5b263de -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 10:34:38 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 10:34:38 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 10:34:38 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:34:38 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:34:38 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:34:38 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:34:38 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:34:38 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:34:38 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:34:38 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:34:38 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:34:38 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:34:38 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: rBvhsf9qEmvSA53kCTz/vZk1cJ7XeUAHXZHecKetaDMwG+c7ds... -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: cd7d1cd61fa529ae42f14c64bb227705c5b263de -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: cd7d1cd61fa529ae42f14c64bb227705c5b263de -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 10:34:43 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 10:34:43 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 10:34:43 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:34:43 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:34:43 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:34:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:43 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.43秒 -2026-01-09 10:34:43 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:34:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:34:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.28秒 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:34:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:34:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:34:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:34:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.43秒 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:34:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:34:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:34:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:34:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:34:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:34:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:34:46 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:34:46 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:34:46 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:34:46 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 193 条公告 -2026-01-09 10:34:46 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 193 -> 2 条公告 -2026-01-09 10:34:46 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:34:46 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:34:46 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:34:46 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 191, 'date_filtered': 1107, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 34, 45, 68742), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 34, 45, 497090), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:35:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.51秒 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:35:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:35:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:35:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:35:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:35:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:35:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.42秒 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:35:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:35:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:35:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:35:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:35:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:35:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:35:11 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:35:11 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:35:11 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:35:11 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 194 条公告 -2026-01-09 10:35:11 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 194 -> 2 条公告 -2026-01-09 10:35:11 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:35:11 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:35:11 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:35:11 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 192, 'date_filtered': 1106, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 35, 10, 254547), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 35, 10, 669761), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: NNqNKwBKU8YP87SfjRv8oENckQkQFS70OmhGuzkGFrsC1YwEBQ... -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 45f5c588689dc7ae542ab1553699861c4711dc8a -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 45f5c588689dc7ae542ab1553699861c4711dc8a -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=搜索 大化..., user=WeiJueSen -2026-01-09 10:36:32 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 搜索 大化, user: WeiJueSen -2026-01-09 10:36:32 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 手动搜索关键词: ['大化'] -2026-01-09 10:36:32 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:36:32 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:36:32 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: NNqNKwBKU8YP87SfjRv8oENckQkQFS70OmhGuzkGFrsC1YwEBQ... -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 45f5c588689dc7ae542ab1553699861c4711dc8a -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 45f5c588689dc7ae542ab1553699861c4711dc8a -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=搜索 大化..., user=WeiJueSen -2026-01-09 10:36:37 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 搜索 大化, user: WeiJueSen -2026-01-09 10:36:37 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 手动搜索关键词: ['大化'] -2026-01-09 10:36:37 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:36:37 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:36:37 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: NNqNKwBKU8YP87SfjRv8oENckQkQFS70OmhGuzkGFrsC1YwEBQ... -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 45f5c588689dc7ae542ab1553699861c4711dc8a -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 45f5c588689dc7ae542ab1553699861c4711dc8a -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=搜索 大化..., user=WeiJueSen -2026-01-09 10:36:42 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 搜索 大化, user: WeiJueSen -2026-01-09 10:36:42 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 手动搜索关键词: ['大化'] -2026-01-09 10:36:42 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:36:42 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:36:42 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:37:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.39秒 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:37:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:37:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:37:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:37:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:37:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:37:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.39秒 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:37:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:37:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:37:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:37:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:37:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:37:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:37:10 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:37:10 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:37:10 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:37:10 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 199 条公告 -2026-01-09 10:37:10 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 199 -> 1 条公告 -2026-01-09 10:37:10 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:37:10 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:37:10 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:37:10 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 198, 'date_filtered': 1101, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 37, 8, 446065), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:37:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.38秒 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:37:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:37:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:37:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:37:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:37:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:37:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:37:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:37:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:37:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:37:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.34秒 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:37:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.29秒 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:37:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:16 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.29秒 -2026-01-09 10:37:16 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:37:16 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:37:16 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:37:16 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 199 条公告 -2026-01-09 10:37:16 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 199 -> 1 条公告 -2026-01-09 10:37:16 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:37:16 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:37:16 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:37:16 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 198, 'date_filtered': 1101, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 37, 13, 480617), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: Lkx65MFWghgpCIU1tWydWqtX7DDrez3S6jBM64NmE/dhfhBQMy... -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 047168e9e8d4e60f631ac6f98d07d8380df9c2b8 -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 047168e9e8d4e60f631ac6f98d07d8380df9c2b8 -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=搜索 马山..., user=WeiJueSen -2026-01-09 10:37:32 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 搜索 马山, user: WeiJueSen -2026-01-09 10:37:32 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 手动搜索关键词: ['马山'] -2026-01-09 10:37:32 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:37:32 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:37:32 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:37:32 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:37:32 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:37:32 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:37:32 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:37:32 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:37:32 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:37:32 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:37:32 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:37:32 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: Lkx65MFWghgpCIU1tWydWqtX7DDrez3S6jBM64NmE/dhfhBQMy... -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 047168e9e8d4e60f631ac6f98d07d8380df9c2b8 -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 047168e9e8d4e60f631ac6f98d07d8380df9c2b8 -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=搜索 马山..., user=WeiJueSen -2026-01-09 10:37:37 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 搜索 马山, user: WeiJueSen -2026-01-09 10:37:37 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 手动搜索关键词: ['马山'] -2026-01-09 10:37:37 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:37:37 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:37:37 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: Lkx65MFWghgpCIU1tWydWqtX7DDrez3S6jBM64NmE/dhfhBQMy... -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 047168e9e8d4e60f631ac6f98d07d8380df9c2b8 -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 047168e9e8d4e60f631ac6f98d07d8380df9c2b8 -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=搜索 马山..., user=WeiJueSen -2026-01-09 10:37:42 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 搜索 马山, user: WeiJueSen -2026-01-09 10:37:42 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 手动搜索关键词: ['马山'] -2026-01-09 10:37:42 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:37:42 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:37:42 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:37:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:42 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.44秒 -2026-01-09 10:37:42 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:37:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.37秒 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:37:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:37:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:37:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:37:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:37:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.34秒 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:37:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:37:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:37:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:37:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:37:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:45 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:37:45 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:37:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:45 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:37:45 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:37:45 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:37:45 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:37:45 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 200 条公告 -2026-01-09 10:37:45 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 200 -> 2 条公告 -2026-01-09 10:37:45 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:37:45 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:37:45 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:37:45 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 198, 'date_filtered': 1100, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 37, 43, 886887), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 37, 44, 227222), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:38:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:02 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.38秒 -2026-01-09 10:38:02 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:38:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:02 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:38:02 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:38:03 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:38:03 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.28秒 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:38:03 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:38:03 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:38:04 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.34秒 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:38:04 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:38:04 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:38:04 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:38:05 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:05 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:38:05 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:38:05 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:05 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:38:05 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:38:05 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:05 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:38:05 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:38:05 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:38:05 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:38:05 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 203 条公告 -2026-01-09 10:38:05 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 203 -> 2 条公告 -2026-01-09 10:38:05 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:38:05 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:38:05 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:38:05 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 201, 'date_filtered': 1097, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 38, 3, 903378), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 38, 4, 239840), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:38:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:07 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.38秒 -2026-01-09 10:38:07 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:38:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:07 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:38:07 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:38:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:07 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:38:07 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:38:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:38:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:38:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:38:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.34秒 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:38:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:38:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:38:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:38:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:38:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:38:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:10 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:38:10 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:38:10 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:38:10 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:38:10 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 203 条公告 -2026-01-09 10:38:10 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 203 -> 2 条公告 -2026-01-09 10:38:10 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:38:10 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:38:10 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:38:10 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 201, 'date_filtered': 1097, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 38, 8, 573750), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 38, 8, 911610), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:42:45 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:42:45 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:42:57 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:42:57 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:43:05 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:43:05 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:43:27 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:43:27 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:43:35 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:43:35 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:43:38 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:43:38 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: test_user -2026-01-09 10:43:38 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 关键词搜索: ['大化'] -2026-01-09 10:43:38 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:43:38 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:43:38 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:43:38 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:43:38 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:43:38 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:43:38 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:43:38 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:43:38 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:43:38 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:43:38 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:43:38 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:44:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:09 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.46秒 -2026-01-09 10:44:09 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:44:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:09 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:44:09 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:44:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:09 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:44:09 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:44:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:09 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:44:09 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:44:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:10 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:44:10 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:44:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:10 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:44:10 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:44:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:10 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.38秒 -2026-01-09 10:44:10 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:44:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:10 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:44:10 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:44:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:11 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:44:11 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:44:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:11 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:44:11 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:44:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:11 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:44:11 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:44:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:11 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:44:11 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:44:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:11 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:44:11 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:44:11 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:44:11 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:44:11 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 207 条公告 -2026-01-09 10:44:11 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 207 -> 1 条公告 -2026-01-09 10:44:11 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:44:11 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:44:11 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:44:11 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 206, 'date_filtered': 1093, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 44, 9, 588007), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:44:11 - gx_gp_monitor.wechat.message_handler - WARNING - 发送markdown通知失败: send_system_notification() got an unexpected keyword argument 'message_type' -2026-01-09 10:44:11 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: test_user -2026-01-09 10:44:11 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 关键词搜索: ['大化'] -2026-01-09 10:44:11 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:44:11 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:44:11 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:44:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:42 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.38秒 -2026-01-09 10:44:42 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:44:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:42 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:44:42 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:44:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:42 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.28秒 -2026-01-09 10:44:42 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:44:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:43 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:44:43 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:44:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:43 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:44:43 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:44:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:43 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:44:43 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:44:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:43 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-09 10:44:43 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:44:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:43 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:44:43 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:44:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:44 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:44:44 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:44:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:44 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:44:44 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:44:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:44 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 10:44:44 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:44:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:44 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:44:44 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:44:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:44:44 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:44:44 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:44:44 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:44:44 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:44:44 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 208 条公告 -2026-01-09 10:44:44 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 208 -> 1 条公告 -2026-01-09 10:44:44 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:44:44 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:44:44 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:44:44 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 207, 'date_filtered': 1092, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 44, 42, 525354), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:44:44 - gx_gp_monitor.wechat.message_handler - WARNING - 发送markdown通知失败: send_system_notification() got an unexpected keyword argument 'message_type' -2026-01-09 10:45:17 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:45:17 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:45:20 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:45:20 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: test_user -2026-01-09 10:45:20 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 关键词搜索: ['大化'] -2026-01-09 10:45:20 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:45:20 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:45:20 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:45:20 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:45:20 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:45:20 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:45:20 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:45:20 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:45:20 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:45:20 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:45:20 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:45:20 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:45:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:50 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.40秒 -2026-01-09 10:45:50 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:45:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:50 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:45:50 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:45:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:51 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:45:51 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:45:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:51 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:45:51 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:45:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:51 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:45:51 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:45:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:51 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:45:51 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:45:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:52 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.43秒 -2026-01-09 10:45:52 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:45:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:52 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:45:52 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:45:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:52 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:45:52 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:45:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:52 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:45:52 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:45:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:52 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:45:52 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:45:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:53 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 10:45:53 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:45:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:45:53 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:45:53 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:45:53 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:45:53 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:45:53 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 211 条公告 -2026-01-09 10:45:53 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 211 -> 1 条公告 -2026-01-09 10:45:53 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:45:53 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:45:53 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:45:53 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 210, 'date_filtered': 1089, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 45, 50, 935170), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:45:53 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 10:45:53 - gx_gp_monitor.wechat.message_handler - WARNING - 发送markdown通知失败: NotificationManager.send_system_notification() got an unexpected keyword argument 'message_type' -2026-01-09 10:45:54 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: test_user -2026-01-09 10:45:54 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 关键词搜索: ['大化'] -2026-01-09 10:45:54 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:45:54 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:45:54 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:46:24 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:24 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.44秒 -2026-01-09 10:46:24 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:46:25 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:25 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.29秒 -2026-01-09 10:46:25 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:46:25 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:25 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:46:25 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:46:25 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:25 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:46:25 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:46:25 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:25 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:46:25 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:46:25 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:25 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:46:25 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:46:26 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:26 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.35秒 -2026-01-09 10:46:26 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:46:26 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:26 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:46:26 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:46:26 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:26 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:46:26 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:46:26 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:26 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:46:26 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:46:26 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:26 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 10:46:26 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:46:27 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:27 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:46:27 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:46:27 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:27 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:46:27 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:46:27 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:46:27 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:46:27 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 211 条公告 -2026-01-09 10:46:27 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 211 -> 1 条公告 -2026-01-09 10:46:27 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:46:27 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:46:27 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:46:27 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 210, 'date_filtered': 1089, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 46, 25, 54355), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:46:27 - gx_gp_monitor.wechat.message_handler - WARNING - 发送markdown通知失败: NotificationManager.send_system_notification() got an unexpected keyword argument 'message_type' -2026-01-09 10:46:35 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:46:35 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:46:39 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:46:39 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:46:43 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:46:43 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: test_user -2026-01-09 10:46:43 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 关键词搜索: ['大化'] -2026-01-09 10:46:43 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:46:43 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:46:43 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:46:44 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:46:44 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:46:44 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:46:44 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:46:44 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:46:44 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:46:44 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:46:44 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:46:44 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:46:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:44 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.40秒 -2026-01-09 10:46:44 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:46:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:44 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:46:44 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:46:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:44 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:46:44 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:46:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:45 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:46:45 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:46:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:45 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:46:45 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:46:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:45 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:46:45 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:46:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:45 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.41秒 -2026-01-09 10:46:45 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:46:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:46 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:46:46 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:46:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:46 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:46:46 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:46:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:46 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:46:46 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:46:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:46 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:46:46 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:46:47 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:47 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:46:47 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:46:47 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:46:47 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:46:47 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:46:47 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:46:47 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:46:47 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 211 条公告 -2026-01-09 10:46:47 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 211 -> 1 条公告 -2026-01-09 10:46:47 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:46:47 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:46:47 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:46:47 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 210, 'date_filtered': 1089, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 46, 44, 669151), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:46:47 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 10:46:47 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 10:46:47 - gx_gp_monitor.notification.wechat - INFO - Markdown消息发送成功 -2026-01-09 10:46:47 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: test_user -2026-01-09 10:46:47 - gx_gp_monitor.wechat.message_handler - INFO - 检测到重复请求: user=test_user, content=大化... -2026-01-09 10:46:58 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: test_user -2026-01-09 10:46:58 - gx_gp_monitor.wechat.message_handler - INFO - 用户 test_user 关键词搜索: ['大化'] -2026-01-09 10:46:58 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:46:58 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:46:58 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:47:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:29 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.37秒 -2026-01-09 10:47:29 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:47:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:29 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:47:29 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:47:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:29 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:47:29 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:47:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:29 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:47:29 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:47:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:29 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:47:29 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:47:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:30 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:47:30 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:47:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:30 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.37秒 -2026-01-09 10:47:30 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:47:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:30 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:47:30 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:47:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:30 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.29秒 -2026-01-09 10:47:30 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:47:31 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:31 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:47:31 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:47:31 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:31 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:47:31 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:47:31 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:31 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:47:31 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:47:31 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:47:31 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:47:31 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:47:31 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:47:31 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:47:31 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 212 条公告 -2026-01-09 10:47:31 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 212 -> 1 条公告 -2026-01-09 10:47:31 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:47:31 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:47:31 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:47:31 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 211, 'date_filtered': 1088, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 47, 29, 205862), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:47:31 - gx_gp_monitor.notification.wechat - INFO - Markdown消息发送成功 -2026-01-09 10:47:37 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:47:37 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:47:47 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:47:47 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:48:00 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:48:00 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:50:09 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:50:09 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: V4PysTsq/lNT3/wFazWDLWyc0dGuq2JMkrVDkOzmHWSj2Ei3LR... -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 03b9d5be793ca95eebdac7c887a610f60dfe77f2 -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 03b9d5be793ca95eebdac7c887a610f60dfe77f2 -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 10:50:13 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 10:50:13 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 10:50:13 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:50:13 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:50:13 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:50:13 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:50:13 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:50:13 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:50:13 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:50:13 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:50:13 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:50:13 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:50:13 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:50:13 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:50:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:13 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.45秒 -2026-01-09 10:50:13 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:50:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:50:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:50:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:50:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:50:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:50:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.42秒 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:50:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:50:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:50:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:50:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:16 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:50:16 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:50:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:16 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:50:16 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:50:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:16 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:50:16 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:50:16 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:50:16 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:50:16 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 217 条公告 -2026-01-09 10:50:16 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 217 -> 1 条公告 -2026-01-09 10:50:16 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:50:16 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:50:16 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:50:16 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 216, 'date_filtered': 1083, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 50, 14, 210634), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:50:16 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 10:50:16 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 10:50:16 - gx_gp_monitor.notification.wechat - INFO - Markdown消息发送成功 -2026-01-09 10:50:38 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:50:38 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:52:42 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:52:42 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:52:56 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:52:56 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:53:20 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:53:20 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:53:46 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:53:46 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: Uo4QU84T+D2cpkopqB0HZAhYIxAzg7bxLwDzgVH/QDLap7sKHL... -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: b100a5fed3e9702af41bd289efb1160218ea3759 -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: b100a5fed3e9702af41bd289efb1160218ea3759 -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 10:54:03 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 10:54:03 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 10:54:03 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:54:03 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:54:03 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:54:03 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:54:03 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:54:03 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:54:03 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:54:03 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:54:03 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:54:03 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:54:03 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:54:03 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: Uo4QU84T+D2cpkopqB0HZAhYIxAzg7bxLwDzgVH/QDLap7sKHL... -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: b100a5fed3e9702af41bd289efb1160218ea3759 -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: b100a5fed3e9702af41bd289efb1160218ea3759 -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 10:54:08 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 10:54:08 - gx_gp_monitor.wechat.message_handler - INFO - 检测到重复请求: user=WeiJueSen, content=大化... -2026-01-09 10:54:34 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.40秒 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:54:34 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:54:34 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:54:34 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:54:35 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:54:35 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:54:35 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.44秒 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:54:35 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:54:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:54:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:54:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:54:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:54:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:54:36 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:54:36 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:54:36 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:54:36 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 220 条公告 -2026-01-09 10:54:36 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 220 -> 1 条公告 -2026-01-09 10:54:36 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:54:36 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:54:36 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:54:36 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 219, 'date_filtered': 1080, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 54, 34, 478758), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:54:36 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 10:54:37 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 10:54:37 - gx_gp_monitor.notification.wechat - INFO - Markdown消息发送成功 -2026-01-09 10:55:16 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:55:16 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:55:34 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:55:34 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:56:20 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:56:20 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -2026-01-09 10:58:11 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 10:58:11 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:58:11 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:58:11 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:58:11 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:58:11 - __main__ - INFO - 开始执行搜索... -2026-01-09 10:58:12 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:58:12 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:58:12 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:58:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:42 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.49秒 -2026-01-09 10:58:42 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:58:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:42 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:58:42 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:58:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:42 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:58:42 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:58:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:43 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:58:43 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:58:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:43 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 10:58:43 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:58:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:43 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 10:58:43 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:58:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:43 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.35秒 -2026-01-09 10:58:43 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:58:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:43 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:58:43 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:58:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:44 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:58:44 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:58:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:44 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:58:44 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:58:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:44 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:58:44 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:58:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:44 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:58:44 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:58:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:58:44 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:58:44 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:58:44 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:58:44 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 10:58:44 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:44 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 1 条公告 -2026-01-09 10:58:44 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:44 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 1 条公告 -2026-01-09 10:58:44 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:44 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 1 条公告 -2026-01-09 10:58:44 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:44 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 1 条公告 -2026-01-09 10:58:44 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:44 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 1 条公告 -2026-01-09 10:58:45 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:45 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 1 条公告 -2026-01-09 10:58:45 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:45 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 1 条公告 -2026-01-09 10:58:45 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:45 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 1 条公告 -2026-01-09 10:58:45 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:45 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 1 条公告 -2026-01-09 10:58:45 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:45 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 1 条公告 -2026-01-09 10:58:45 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:45 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 1 条公告 -2026-01-09 10:58:45 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:45 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 1 条公告 -2026-01-09 10:58:45 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 10:58:45 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 1 条公告 -2026-01-09 10:58:45 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 13 条公告 -2026-01-09 10:58:45 - __main__ - INFO - 保存所有公告完成:共保存 13 条,按来源统计: {'ZcyAnnouncement1': 1, 'ZcyAnnouncement2': 1, 'ZcyAnnouncement3': 1, 'ZcyAnnouncement4': 1, 'ZcyAnnouncement5': 1, 'ZcyAnnouncement6': 1, 'ZcyAnnouncement7': 1, 'ZcyAnnouncement10': 1, 'ZcyAnnouncement11': 1, 'ZcyAnnouncement20': 1, 'ZcyAnnouncement21': 1, 'ZcyAnnouncement23': 1, '61-266648': 1} -2026-01-09 10:58:45 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 10:58:45 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 10:58:45 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 10:58:45 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 10:58:45 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 10:58:45 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 10:58:45 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 11:02:06 - __main__ - INFO - === 开始定时搜索任务 === -2026-01-09 11:02:06 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 11:02:06 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 11:02:06 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 11:02:06 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 11:02:06 - __main__ - INFO - 开始执行搜索... -2026-01-09 11:02:06 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 11:02:06 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 11:02:06 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 11:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:37 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.50秒 -2026-01-09 11:02:37 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 11:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:37 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 11:02:37 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 11:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:37 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 11:02:37 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 11:02:37 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:37 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 11:02:37 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 11:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:38 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 11:02:38 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 11:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:38 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 11:02:38 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 11:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:38 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.34秒 -2026-01-09 11:02:38 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 11:02:38 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:38 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 11:02:38 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 11:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:39 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 11:02:39 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 11:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:39 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 11:02:39 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 11:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:39 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 11:02:39 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 11:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:39 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 11:02:39 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 11:02:39 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:39 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 11:02:39 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 11:02:39 - __main__ - INFO - 搜索到 1300 条原始公告 -2026-01-09 11:02:39 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 11:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 1 条公告 -2026-01-09 11:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:39 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 1 条公告 -2026-01-09 11:02:39 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:40 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 1 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:40 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 1 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:40 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 1 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:40 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 1 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:40 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 1 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:40 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 1 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:40 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 1 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:40 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 1 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:40 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 1 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:40 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 1 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 1 条 -2026-01-09 11:02:40 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 1 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 13 条公告 -2026-01-09 11:02:40 - __main__ - INFO - 保存所有公告完成:共保存 13 条,按来源统计: {'ZcyAnnouncement1': 1, 'ZcyAnnouncement2': 1, 'ZcyAnnouncement3': 1, 'ZcyAnnouncement4': 1, 'ZcyAnnouncement5': 1, 'ZcyAnnouncement6': 1, 'ZcyAnnouncement7': 1, 'ZcyAnnouncement10': 1, 'ZcyAnnouncement11': 1, 'ZcyAnnouncement20': 1, 'ZcyAnnouncement21': 1, 'ZcyAnnouncement23': 1, '61-266648': 1} -2026-01-09 11:02:40 - __main__ - INFO - 筛选出 1300 条新公告 -2026-01-09 11:02:40 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 11:02:40 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 11:02:40 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 11:02:40 - __main__ - INFO - 关键词筛选后剩余 0 条公告 -2026-01-09 11:02:40 - __main__ - INFO - 没有匹配关键词的公告,任务完成 -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: vfWd53Wgci4LR2cr4AKLqHvpLtiIs8tYOmScdA5SJMkB8UFC+5... -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: ff509b0226f285b5409b13fed5a910e818fb4ac0 -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: ff509b0226f285b5409b13fed5a910e818fb4ac0 -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 11:02:44 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 11:02:44 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 11:02:44 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 11:02:44 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 11:02:44 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 11:02:44 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 11:02:44 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 11:02:44 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 11:02:44 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 11:02:44 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 11:02:44 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 11:02:44 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 11:02:44 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 11:02:44 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: vfWd53Wgci4LR2cr4AKLqHvpLtiIs8tYOmScdA5SJMkB8UFC+5... -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: ff509b0226f285b5409b13fed5a910e818fb4ac0 -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: ff509b0226f285b5409b13fed5a910e818fb4ac0 -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 11:02:49 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 11:02:49 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 11:02:49 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 11:02:49 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 11:02:49 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 11:02:49 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 11:02:49 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 11:02:49 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 11:02:49 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 11:02:49 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 11:02:49 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 11:02:49 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 11:02:49 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 11:02:49 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 11:02:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 11:02:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 11:02:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 11:02:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 11:02:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 11:02:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 11:02:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.34秒 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 11:02:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 11:02:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 11:02:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 11:02:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 11:02:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 11:02:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 11:02:52 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 11:02:52 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 11:02:52 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 11:02:52 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 237 条公告 -2026-01-09 11:02:52 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 237 -> 1 条公告 -2026-01-09 11:02:52 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 11:02:52 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 11:02:52 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 11:02:52 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 236, 'date_filtered': 1063, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 11, 2, 50, 521373), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 11:02:52 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 11:02:53 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 11:02:53 - gx_gp_monitor.notification.wechat - INFO - Markdown消息发送成功 +2026-01-09 15:16:08 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === +2026-01-09 15:16:08 - gx_gp_monitor.main - INFO - 版本: 1.0.0 +2026-01-09 15:16:08 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 +2026-01-09 15:16:09 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 +2026-01-09 15:16:09 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 +2026-01-09 15:16:09 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 +2026-01-09 15:16:09 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 +2026-01-09 15:16:09 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 +2026-01-09 15:16:09 - gx_gp_monitor.main - INFO - 应用初始化完成 diff --git a/logs/uwsgi-wechat.log b/logs/uwsgi-wechat.log deleted file mode 100644 index 20c7908..0000000 --- a/logs/uwsgi-wechat.log +++ /dev/null @@ -1,5709 +0,0 @@ -Thu Jan 8 23:24:19 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:24:19 2026] *** -Thu Jan 8 23:24:19 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:24:19 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:24:19 2026 - nodename: ubserver -Thu Jan 8 23:24:19 2026 - machine: x86_64 -Thu Jan 8 23:24:19 2026 - clock source: unix -Thu Jan 8 23:24:19 2026 - pcre jit disabled -Thu Jan 8 23:24:19 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:24:19 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:24:19 2026 - writing pidfile to ./uwsgi-wechat.pid -Thu Jan 8 23:24:19 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:24:19 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:24:19 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:24:19 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:24:19 2026 - your processes number limit is 61306 -Thu Jan 8 23:24:19 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:24:19 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:24:19 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:24:19 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:24:19 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:24:19 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 4 -Thu Jan 8 23:24:19 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:42415 (port auto-assigned) fd 3 -Thu Jan 8 23:24:19 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:24:19 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:24:19 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:24:19 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:24:19 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:24:19 2026 - Python main interpreter initialized at 0x70efb4752d10 -Thu Jan 8 23:24:19 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:24:19 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:24:19 2026 - python threads support enabled -Thu Jan 8 23:24:19 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:24:19 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:24:19 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:24:19 2026 - *** Operational MODE: preforking+threaded *** -2026-01-08 23:24:20 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:24:20 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Thu Jan 8 23:24:20 2026 - WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x70efb4752d10 pid: 1602880 (default app) -Thu Jan 8 23:24:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:24:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:24:20 2026 - *** uWSGI is running in multiple interpreter mode *** -Thu Jan 8 23:24:20 2026 - spawned uWSGI master process (pid: 1602880) -Thu Jan 8 23:24:20 2026 - spawned uWSGI worker 1 (pid: 1602899, cores: 2) -Thu Jan 8 23:24:20 2026 - spawned uWSGI worker 2 (pid: 1602900, cores: 2) -Thu Jan 8 23:24:20 2026 - spawned uWSGI http 1 (pid: 1602903) -Thu Jan 8 23:24:20 2026 - Python auto-reloader enabled -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 29e+mJkgneFeo1ny28a6GEST9jWQZ520LjorzV4NOfgoH5QA/W... -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 79b6eafce857f4ef43b5e61edc1fe207cda31b3f -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 79b6eafce857f4ef43b5e61edc1fe207cda31b3f -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 23:24:40 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=crawl_now, user=WeiJueSen -2026-01-08 23:24:40 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: crawl_now, user: WeiJueSen -2026-01-08 23:24:40 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 触发立即搜索 -2026-01-08 23:24:40 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-08 23:24:40 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-08 23:24:40 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-08 23:24:40 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-08 23:24:40 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-08 23:24:40 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-08 23:24:40 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-08 23:24:40 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-08 23:24:40 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-08 23:24:40 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: False) -2026-01-08 23:24:40 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-08 23:24:40 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 29e+mJkgneFeo1ny28a6GEST9jWQZ520LjorzV4NOfgoH5QA/W... -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 79b6eafce857f4ef43b5e61edc1fe207cda31b3f -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 79b6eafce857f4ef43b5e61edc1fe207cda31b3f -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 23:24:45 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=crawl_now, user=WeiJueSen -2026-01-08 23:24:45 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: crawl_now, user: WeiJueSen -2026-01-08 23:24:45 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 触发立即搜索 -2026-01-08 23:24:45 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: False) -2026-01-08 23:24:45 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-08 23:24:45 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-08 23:24:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:45 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.43秒 -2026-01-08 23:24:45 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-08 23:24:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:46 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-08 23:24:46 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-08 23:24:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:46 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-08 23:24:46 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-08 23:24:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:46 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-08 23:24:46 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-08 23:24:47 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:47 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.61秒 -2026-01-08 23:24:47 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-08 23:24:47 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:47 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 23:24:47 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-08 23:24:47 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:47 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.43秒 -2026-01-08 23:24:47 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-08 23:24:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.30秒 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-08 23:24:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-08 23:24:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-08 23:24:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-08 23:24:48 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-08 23:24:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:49 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-08 23:24:49 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-08 23:24:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:24:49 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-08 23:24:49 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.main - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-08 23:24:49 - gx_gp_monitor.main - INFO - 筛选出 1300 条新公告 -2026-01-08 23:24:49 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-08 23:24:49 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-08 23:24:49 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-08 23:24:49 - gx_gp_monitor.storage.md_generator - INFO - Markdown文件已保存到: onu.md (共 0 条公告) -2026-01-08 23:24:49 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': True, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 1300, 'date_filtered': 0, 'duplicate_filtered': 1300, 'source_filtered': 0}} -{address space usage: 249786368 bytes/238MB} {rss usage: 67588096 bytes/64MB} [pid: 1602900|app: 0|req: 2/1] 106.55.202.215 () {36 vars in 679 bytes} [Thu Jan 8 23:24:45 2026] POST /api/v1/wechat/callback?msg_signature=79b6eafce857f4ef43b5e61edc1fe207cda31b3f×tamp=1767885880&nonce=1767448160 => generated 798 bytes in 4081 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-08 23:25:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.49秒 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-08 23:25:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-08 23:25:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-08 23:25:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-08 23:25:11 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-08 23:25:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:12 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-08 23:25:12 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-08 23:25:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:12 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-08 23:25:12 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-08 23:25:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:12 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-08 23:25:12 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-08 23:25:13 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-08 23:25:13 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-08 23:25:13 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-08 23:25:13 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-08 23:25:13 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:13 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-08 23:25:13 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:13 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.main - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-08 23:25:14 - gx_gp_monitor.main - INFO - 筛选出 1300 条新公告 -2026-01-08 23:25:14 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-08 23:25:14 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-08 23:25:14 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-08 23:25:14 - gx_gp_monitor.storage.md_generator - INFO - Markdown文件已保存到: onu.md (共 0 条公告) -2026-01-08 23:25:14 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': True, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 1300, 'date_filtered': 0, 'duplicate_filtered': 1300, 'source_filtered': 0}} -{address space usage: 244609024 bytes/233MB} {rss usage: 62353408 bytes/59MB} [pid: 1602900|app: 0|req: 2/2] 183.47.98.168 () {36 vars in 678 bytes} [Thu Jan 8 23:24:40 2026] POST /api/v1/wechat/callback?msg_signature=79b6eafce857f4ef43b5e61edc1fe207cda31b3f×tamp=1767885880&nonce=1767448160 => generated 798 bytes in 33820 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: WrH7Jb1CJaRbTgRYnX0MmwszM4U7Ik/1SAqCWS1iq2QU8KyMML... -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 1bee1bed89a994b34b8572f926d6e545f045604e -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 1bee1bed89a994b34b8572f926d6e545f045604e -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 23:26:07 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=keyword_manage, user=WeiJueSen -2026-01-08 23:26:07 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_manage, user: WeiJueSen -2026-01-08 23:26:07 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求关键词管理 -{address space usage: 234106880 bytes/223MB} {rss usage: 39456768 bytes/37MB} [pid: 1602899|app: 0|req: 1/3] 183.47.117.101 () {36 vars in 679 bytes} [Thu Jan 8 23:26:07 2026] POST /api/v1/wechat/callback?msg_signature=1bee1bed89a994b34b8572f926d6e545f045604e×tamp=1767885967&nonce=1767297702 => generated 1522 bytes in 6 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0) -Thu Jan 8 23:26:49 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/menu_manager.py has been modified -Thu Jan 8 23:26:49 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/menu_manager.py has been modified -Thu Jan 8 23:26:49 2026 - gateway "uWSGI http 1" has been buried (pid: 1602903) -Thu Jan 8 23:26:49 2026 - ...gracefully killing workers... -Thu Jan 8 23:26:49 2026 - Gracefully killing worker 2 (pid: 1602900)... -Thu Jan 8 23:26:49 2026 - Gracefully killing worker 1 (pid: 1602899)... -Thu Jan 8 23:26:50 2026 - worker 1 buried after 1 seconds -Thu Jan 8 23:26:50 2026 - worker 2 buried after 1 seconds -Thu Jan 8 23:26:50 2026 - binary reloading uWSGI... -Thu Jan 8 23:26:50 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:26:50 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Thu Jan 8 23:26:50 2026 - found fd 3 mapped to socket 0 (127.0.0.1:42415) -Thu Jan 8 23:26:50 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Thu Jan 8 23:26:50 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:26:50 2026] *** -Thu Jan 8 23:26:50 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:26:50 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:26:50 2026 - nodename: ubserver -Thu Jan 8 23:26:50 2026 - machine: x86_64 -Thu Jan 8 23:26:50 2026 - clock source: unix -Thu Jan 8 23:26:50 2026 - pcre jit disabled -Thu Jan 8 23:26:50 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:26:50 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:26:50 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:26:50 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:26:50 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:26:50 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:26:50 2026 - your processes number limit is 61306 -Thu Jan 8 23:26:50 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:26:50 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:26:50 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:26:50 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:26:50 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:26:50 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Thu Jan 8 23:26:50 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:37889 (port auto-assigned) fd 4 -Thu Jan 8 23:26:50 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:26:50 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:26:50 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:26:50 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:26:50 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:26:50 2026 - Python main interpreter initialized at 0x75999d552d10 -Thu Jan 8 23:26:50 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:26:50 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:26:50 2026 - python threads support enabled -Thu Jan 8 23:26:50 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:26:50 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:26:50 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:26:50 2026 - *** Operational MODE: preforking+threaded *** -2026-01-08 23:26:50 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:26:50 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Thu Jan 8 23:26:50 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x75999d552d10 pid: 1602880 (default app) -Thu Jan 8 23:26:50 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:26:50 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:26:50 2026 - *** uWSGI is running in multiple interpreter mode *** -Thu Jan 8 23:26:50 2026 - gracefully (RE)spawned uWSGI master process (pid: 1602880) -Thu Jan 8 23:26:50 2026 - spawned uWSGI worker 1 (pid: 1604595, cores: 2) -Thu Jan 8 23:26:50 2026 - spawned uWSGI worker 2 (pid: 1604596, cores: 2) -Thu Jan 8 23:26:50 2026 - spawned uWSGI http 1 (pid: 1604600) -Thu Jan 8 23:26:50 2026 - Python auto-reloader enabled -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: yWYKLWjpp1gWQZ4OUse8zPR3YaOQZ9wYUHaz8WIETXh3J9S9F/... -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: bb97c3ed9044e8f2966690372c8e2283c9597d82 -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: bb97c3ed9044e8f2966690372c8e2283c9597d82 -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 23:27:36 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=about_system, user=WeiJueSen -2026-01-08 23:27:36 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: about_system, user: WeiJueSen -2026-01-08 23:27:36 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统信息 -{address space usage: 234065920 bytes/223MB} {rss usage: 39223296 bytes/37MB} [pid: 1604596|app: 0|req: 1/1] 14.116.241.251 () {36 vars in 679 bytes} [Thu Jan 8 23:27:36 2026] POST /api/v1/wechat/callback?msg_signature=bb97c3ed9044e8f2966690372c8e2283c9597d82×tamp=1767886056&nonce=1767320388 => generated 2718 bytes in 10 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0) -Thu Jan 8 23:29:38 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:29:38 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:29:38 2026 - gateway "uWSGI http 1" has been buried (pid: 1604600) -Thu Jan 8 23:29:38 2026 - ...gracefully killing workers... -Thu Jan 8 23:29:38 2026 - Gracefully killing worker 1 (pid: 1604595)... -Thu Jan 8 23:29:38 2026 - Gracefully killing worker 2 (pid: 1604596)... -Thu Jan 8 23:29:39 2026 - worker 1 buried after 1 seconds -Thu Jan 8 23:29:39 2026 - worker 2 buried after 1 seconds -Thu Jan 8 23:29:39 2026 - binary reloading uWSGI... -Thu Jan 8 23:29:39 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:29:39 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Thu Jan 8 23:29:39 2026 - found fd 4 mapped to socket 0 (127.0.0.1:37889) -Thu Jan 8 23:29:39 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Thu Jan 8 23:29:39 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:29:39 2026] *** -Thu Jan 8 23:29:39 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:29:39 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:29:39 2026 - nodename: ubserver -Thu Jan 8 23:29:39 2026 - machine: x86_64 -Thu Jan 8 23:29:39 2026 - clock source: unix -Thu Jan 8 23:29:39 2026 - pcre jit disabled -Thu Jan 8 23:29:39 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:29:39 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:29:39 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:29:39 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:29:39 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:29:39 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:29:39 2026 - your processes number limit is 61306 -Thu Jan 8 23:29:39 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:29:39 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:29:39 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:29:39 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:29:39 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:29:39 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Thu Jan 8 23:29:39 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:39959 (port auto-assigned) fd 3 -Thu Jan 8 23:29:39 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:29:39 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:29:39 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:29:39 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:29:39 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:29:39 2026 - Python main interpreter initialized at 0x776a98952d10 -Thu Jan 8 23:29:39 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:29:39 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:29:39 2026 - python threads support enabled -Thu Jan 8 23:29:39 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:29:39 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:29:39 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:29:39 2026 - *** Operational MODE: preforking+threaded *** -2026-01-08 23:29:39 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:29:39 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Thu Jan 8 23:29:39 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x776a98952d10 pid: 1602880 (default app) -Thu Jan 8 23:29:39 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:29:39 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:29:39 2026 - *** uWSGI is running in multiple interpreter mode *** -Thu Jan 8 23:29:39 2026 - gracefully (RE)spawned uWSGI master process (pid: 1602880) -Thu Jan 8 23:29:39 2026 - spawned uWSGI worker 1 (pid: 1605499, cores: 2) -Thu Jan 8 23:29:39 2026 - spawned uWSGI worker 2 (pid: 1605500, cores: 2) -Thu Jan 8 23:29:39 2026 - spawned uWSGI http 1 (pid: 1605504) -Thu Jan 8 23:29:39 2026 - Python auto-reloader enabled -Thu Jan 8 23:29:44 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/menu_manager.py has been modified -Thu Jan 8 23:29:44 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/menu_manager.py has been modified -Thu Jan 8 23:29:44 2026 - gateway "uWSGI http 1" has been buried (pid: 1605504) -Thu Jan 8 23:29:44 2026 - ...gracefully killing workers... -Thu Jan 8 23:29:44 2026 - Gracefully killing worker 2 (pid: 1605500)... -Thu Jan 8 23:29:44 2026 - Gracefully killing worker 1 (pid: 1605499)... -Thu Jan 8 23:29:45 2026 - worker 1 buried after 1 seconds -Thu Jan 8 23:29:45 2026 - worker 2 buried after 1 seconds -Thu Jan 8 23:29:45 2026 - binary reloading uWSGI... -Thu Jan 8 23:29:45 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:29:45 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Thu Jan 8 23:29:45 2026 - found fd 3 mapped to socket 0 (127.0.0.1:39959) -Thu Jan 8 23:29:45 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Thu Jan 8 23:29:45 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:29:45 2026] *** -Thu Jan 8 23:29:45 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:29:45 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:29:45 2026 - nodename: ubserver -Thu Jan 8 23:29:45 2026 - machine: x86_64 -Thu Jan 8 23:29:45 2026 - clock source: unix -Thu Jan 8 23:29:45 2026 - pcre jit disabled -Thu Jan 8 23:29:45 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:29:45 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:29:45 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:29:45 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:29:45 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:29:45 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:29:45 2026 - your processes number limit is 61306 -Thu Jan 8 23:29:45 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:29:45 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:29:45 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:29:45 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:29:45 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:29:45 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Thu Jan 8 23:29:45 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:44777 (port auto-assigned) fd 4 -Thu Jan 8 23:29:45 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:29:45 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:29:45 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:29:45 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:29:45 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:29:45 2026 - Python main interpreter initialized at 0x7c1a39352d10 -Thu Jan 8 23:29:45 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:29:45 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:29:45 2026 - python threads support enabled -Thu Jan 8 23:29:45 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:29:45 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:29:45 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:29:45 2026 - *** Operational MODE: preforking+threaded *** -2026-01-08 23:29:46 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:29:46 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Thu Jan 8 23:29:46 2026 - WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x7c1a39352d10 pid: 1602880 (default app) -Thu Jan 8 23:29:46 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:29:46 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:29:46 2026 - *** uWSGI is running in multiple interpreter mode *** -Thu Jan 8 23:29:46 2026 - gracefully (RE)spawned uWSGI master process (pid: 1602880) -Thu Jan 8 23:29:46 2026 - spawned uWSGI worker 1 (pid: 1605532, cores: 2) -Thu Jan 8 23:29:46 2026 - spawned uWSGI worker 2 (pid: 1605534, cores: 2) -Thu Jan 8 23:29:46 2026 - Python auto-reloader enabled -Thu Jan 8 23:29:46 2026 - spawned uWSGI http 1 (pid: 1605536) -Thu Jan 8 23:29:58 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:29:58 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:29:58 2026 - gateway "uWSGI http 1" has been buried (pid: 1605536) -Thu Jan 8 23:29:58 2026 - ...gracefully killing workers... -Thu Jan 8 23:29:58 2026 - Gracefully killing worker 1 (pid: 1605532)... -Thu Jan 8 23:29:58 2026 - Gracefully killing worker 2 (pid: 1605534)... -Thu Jan 8 23:29:59 2026 - worker 1 buried after 1 seconds -Thu Jan 8 23:29:59 2026 - worker 2 buried after 1 seconds -Thu Jan 8 23:29:59 2026 - binary reloading uWSGI... -Thu Jan 8 23:29:59 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:29:59 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Thu Jan 8 23:29:59 2026 - found fd 4 mapped to socket 0 (127.0.0.1:44777) -Thu Jan 8 23:29:59 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Thu Jan 8 23:29:59 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:29:59 2026] *** -Thu Jan 8 23:29:59 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:29:59 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:29:59 2026 - nodename: ubserver -Thu Jan 8 23:29:59 2026 - machine: x86_64 -Thu Jan 8 23:29:59 2026 - clock source: unix -Thu Jan 8 23:29:59 2026 - pcre jit disabled -Thu Jan 8 23:29:59 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:29:59 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:29:59 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:29:59 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:29:59 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:29:59 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:29:59 2026 - your processes number limit is 61306 -Thu Jan 8 23:29:59 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:29:59 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:29:59 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:29:59 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:29:59 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:29:59 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Thu Jan 8 23:29:59 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:39661 (port auto-assigned) fd 3 -Thu Jan 8 23:29:59 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:29:59 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:29:59 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:29:59 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:29:59 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:29:59 2026 - Python main interpreter initialized at 0x7253cdf52d10 -Thu Jan 8 23:29:59 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:29:59 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:29:59 2026 - python threads support enabled -Thu Jan 8 23:29:59 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:29:59 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:29:59 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:29:59 2026 - *** Operational MODE: preforking+threaded *** -2026-01-08 23:29:59 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:29:59 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Thu Jan 8 23:29:59 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7253cdf52d10 pid: 1602880 (default app) -Thu Jan 8 23:29:59 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:29:59 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:29:59 2026 - *** uWSGI is running in multiple interpreter mode *** -Thu Jan 8 23:29:59 2026 - gracefully (RE)spawned uWSGI master process (pid: 1602880) -Thu Jan 8 23:29:59 2026 - spawned uWSGI worker 1 (pid: 1605566, cores: 2) -Thu Jan 8 23:29:59 2026 - spawned uWSGI worker 2 (pid: 1605567, cores: 2) -Thu Jan 8 23:29:59 2026 - spawned uWSGI http 1 (pid: 1605570) -Thu Jan 8 23:29:59 2026 - Python auto-reloader enabled -Thu Jan 8 23:30:11 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:30:11 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:30:11 2026 - gateway "uWSGI http 1" has been buried (pid: 1605570) -Thu Jan 8 23:30:11 2026 - ...gracefully killing workers... -Thu Jan 8 23:30:11 2026 - Gracefully killing worker 1 (pid: 1605566)... -Thu Jan 8 23:30:11 2026 - Gracefully killing worker 2 (pid: 1605567)... -Thu Jan 8 23:30:12 2026 - worker 1 buried after 1 seconds -Thu Jan 8 23:30:12 2026 - worker 2 buried after 1 seconds -Thu Jan 8 23:30:12 2026 - binary reloading uWSGI... -Thu Jan 8 23:30:12 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:30:12 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Thu Jan 8 23:30:12 2026 - found fd 3 mapped to socket 0 (127.0.0.1:39661) -Thu Jan 8 23:30:12 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Thu Jan 8 23:30:12 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:30:12 2026] *** -Thu Jan 8 23:30:12 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:30:12 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:30:12 2026 - nodename: ubserver -Thu Jan 8 23:30:12 2026 - machine: x86_64 -Thu Jan 8 23:30:12 2026 - clock source: unix -Thu Jan 8 23:30:12 2026 - pcre jit disabled -Thu Jan 8 23:30:12 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:30:12 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:30:12 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:30:12 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:30:12 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:30:12 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:30:12 2026 - your processes number limit is 61306 -Thu Jan 8 23:30:12 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:30:12 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:30:12 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:30:12 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:30:12 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:30:12 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Thu Jan 8 23:30:12 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:45953 (port auto-assigned) fd 4 -Thu Jan 8 23:30:12 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:30:12 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:30:12 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:30:12 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:30:12 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:30:12 2026 - Python main interpreter initialized at 0x7a48fed52d10 -Thu Jan 8 23:30:12 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:30:12 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:30:12 2026 - python threads support enabled -Thu Jan 8 23:30:12 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:30:12 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:30:12 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:30:12 2026 - *** Operational MODE: preforking+threaded *** -2026-01-08 23:30:12 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:30:12 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Thu Jan 8 23:30:12 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7a48fed52d10 pid: 1602880 (default app) -Thu Jan 8 23:30:12 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:30:12 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:30:12 2026 - *** uWSGI is running in multiple interpreter mode *** -Thu Jan 8 23:30:12 2026 - gracefully (RE)spawned uWSGI master process (pid: 1602880) -Thu Jan 8 23:30:12 2026 - spawned uWSGI worker 1 (pid: 1605779, cores: 2) -Thu Jan 8 23:30:12 2026 - spawned uWSGI worker 2 (pid: 1605780, cores: 2) -Thu Jan 8 23:30:12 2026 - spawned uWSGI http 1 (pid: 1605783) -Thu Jan 8 23:30:12 2026 - Python auto-reloader enabled -Thu Jan 8 23:30:52 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:30:52 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:30:52 2026 - gateway "uWSGI http 1" has been buried (pid: 1605783) -Thu Jan 8 23:30:52 2026 - ...gracefully killing workers... -Thu Jan 8 23:30:52 2026 - Gracefully killing worker 1 (pid: 1605779)... -Thu Jan 8 23:30:52 2026 - Gracefully killing worker 2 (pid: 1605780)... -Thu Jan 8 23:30:53 2026 - worker 1 buried after 1 seconds -Thu Jan 8 23:30:53 2026 - worker 2 buried after 1 seconds -Thu Jan 8 23:30:53 2026 - binary reloading uWSGI... -Thu Jan 8 23:30:53 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:30:53 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Thu Jan 8 23:30:53 2026 - found fd 4 mapped to socket 0 (127.0.0.1:45953) -Thu Jan 8 23:30:53 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Thu Jan 8 23:30:53 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:30:53 2026] *** -Thu Jan 8 23:30:53 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:30:53 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:30:53 2026 - nodename: ubserver -Thu Jan 8 23:30:53 2026 - machine: x86_64 -Thu Jan 8 23:30:53 2026 - clock source: unix -Thu Jan 8 23:30:53 2026 - pcre jit disabled -Thu Jan 8 23:30:53 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:30:53 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:30:53 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:30:53 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:30:53 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:30:53 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:30:53 2026 - your processes number limit is 61306 -Thu Jan 8 23:30:53 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:30:53 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:30:53 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:30:53 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:30:53 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:30:53 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Thu Jan 8 23:30:53 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:46579 (port auto-assigned) fd 3 -Thu Jan 8 23:30:53 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:30:53 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:30:53 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:30:53 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:30:53 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:30:53 2026 - Python main interpreter initialized at 0x78e340352d10 -Thu Jan 8 23:30:53 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:30:53 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:30:53 2026 - python threads support enabled -Thu Jan 8 23:30:53 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:30:53 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:30:53 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:30:53 2026 - *** Operational MODE: preforking+threaded *** -2026-01-08 23:30:53 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:30:53 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Thu Jan 8 23:30:53 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x78e340352d10 pid: 1602880 (default app) -Thu Jan 8 23:30:53 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:30:53 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:30:53 2026 - *** uWSGI is running in multiple interpreter mode *** -Thu Jan 8 23:30:53 2026 - gracefully (RE)spawned uWSGI master process (pid: 1602880) -Thu Jan 8 23:30:53 2026 - spawned uWSGI worker 1 (pid: 1606003, cores: 2) -Thu Jan 8 23:30:53 2026 - spawned uWSGI worker 2 (pid: 1606006, cores: 2) -Thu Jan 8 23:30:53 2026 - Python auto-reloader enabled -Thu Jan 8 23:30:53 2026 - spawned uWSGI http 1 (pid: 1606009) -Thu Jan 8 23:31:22 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:31:22 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:31:22 2026 - gateway "uWSGI http 1" has been buried (pid: 1606009) -Thu Jan 8 23:31:22 2026 - ...gracefully killing workers... -Thu Jan 8 23:31:22 2026 - Gracefully killing worker 2 (pid: 1606006)... -Thu Jan 8 23:31:22 2026 - Gracefully killing worker 1 (pid: 1606003)... -Thu Jan 8 23:31:23 2026 - worker 1 buried after 1 seconds -Thu Jan 8 23:31:23 2026 - worker 2 buried after 1 seconds -Thu Jan 8 23:31:23 2026 - binary reloading uWSGI... -Thu Jan 8 23:31:23 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:31:23 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Thu Jan 8 23:31:23 2026 - found fd 3 mapped to socket 0 (127.0.0.1:46579) -Thu Jan 8 23:31:23 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Thu Jan 8 23:31:23 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:31:23 2026] *** -Thu Jan 8 23:31:23 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:31:23 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:31:23 2026 - nodename: ubserver -Thu Jan 8 23:31:23 2026 - machine: x86_64 -Thu Jan 8 23:31:23 2026 - clock source: unix -Thu Jan 8 23:31:23 2026 - pcre jit disabled -Thu Jan 8 23:31:23 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:31:23 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:31:23 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:31:23 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:31:23 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:31:23 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:31:23 2026 - your processes number limit is 61306 -Thu Jan 8 23:31:23 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:31:23 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:31:23 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:31:23 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:31:23 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:31:23 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Thu Jan 8 23:31:23 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:42193 (port auto-assigned) fd 4 -Thu Jan 8 23:31:23 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:31:23 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:31:23 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:31:23 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:31:23 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:31:23 2026 - Python main interpreter initialized at 0x7f7b1e552d10 -Thu Jan 8 23:31:23 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:31:23 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:31:23 2026 - python threads support enabled -Thu Jan 8 23:31:23 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:31:23 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:31:23 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:31:23 2026 - *** Operational MODE: preforking+threaded *** -2026-01-08 23:31:23 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:31:23 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Thu Jan 8 23:31:23 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7f7b1e552d10 pid: 1602880 (default app) -Thu Jan 8 23:31:23 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:31:23 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:31:23 2026 - *** uWSGI is running in multiple interpreter mode *** -Thu Jan 8 23:31:23 2026 - gracefully (RE)spawned uWSGI master process (pid: 1602880) -Thu Jan 8 23:31:23 2026 - spawned uWSGI worker 1 (pid: 1606093, cores: 2) -Thu Jan 8 23:31:23 2026 - spawned uWSGI worker 2 (pid: 1606094, cores: 2) -Thu Jan 8 23:31:23 2026 - spawned uWSGI http 1 (pid: 1606098) -Thu Jan 8 23:31:23 2026 - Python auto-reloader enabled -Thu Jan 8 23:31:39 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:31:39 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:31:39 2026 - gateway "uWSGI http 1" has been buried (pid: 1606098) -Thu Jan 8 23:31:39 2026 - ...gracefully killing workers... -Thu Jan 8 23:31:39 2026 - Gracefully killing worker 1 (pid: 1606093)... -Thu Jan 8 23:31:39 2026 - Gracefully killing worker 2 (pid: 1606094)... -Thu Jan 8 23:31:40 2026 - worker 1 buried after 1 seconds -Thu Jan 8 23:31:40 2026 - worker 2 buried after 1 seconds -Thu Jan 8 23:31:40 2026 - binary reloading uWSGI... -Thu Jan 8 23:31:40 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:31:40 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Thu Jan 8 23:31:40 2026 - found fd 4 mapped to socket 0 (127.0.0.1:42193) -Thu Jan 8 23:31:40 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Thu Jan 8 23:31:40 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:31:40 2026] *** -Thu Jan 8 23:31:40 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:31:40 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:31:40 2026 - nodename: ubserver -Thu Jan 8 23:31:40 2026 - machine: x86_64 -Thu Jan 8 23:31:40 2026 - clock source: unix -Thu Jan 8 23:31:40 2026 - pcre jit disabled -Thu Jan 8 23:31:40 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:31:40 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:31:40 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:31:40 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:31:40 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:31:40 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:31:40 2026 - your processes number limit is 61306 -Thu Jan 8 23:31:40 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:31:40 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:31:40 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:31:40 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:31:40 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:31:40 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Thu Jan 8 23:31:40 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:35373 (port auto-assigned) fd 3 -Thu Jan 8 23:31:40 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:31:40 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:31:40 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:31:40 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:31:40 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:31:40 2026 - Python main interpreter initialized at 0x7b819db52d10 -Thu Jan 8 23:31:40 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:31:40 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:31:40 2026 - python threads support enabled -Thu Jan 8 23:31:40 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:31:40 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:31:40 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:31:40 2026 - *** Operational MODE: preforking+threaded *** -2026-01-08 23:31:40 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:31:40 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Thu Jan 8 23:31:40 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7b819db52d10 pid: 1602880 (default app) -Thu Jan 8 23:31:40 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:31:40 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:31:40 2026 - *** uWSGI is running in multiple interpreter mode *** -Thu Jan 8 23:31:40 2026 - gracefully (RE)spawned uWSGI master process (pid: 1602880) -Thu Jan 8 23:31:40 2026 - spawned uWSGI worker 1 (pid: 1606224, cores: 2) -Thu Jan 8 23:31:40 2026 - spawned uWSGI worker 2 (pid: 1606227, cores: 2) -Thu Jan 8 23:31:40 2026 - Python auto-reloader enabled -Thu Jan 8 23:31:40 2026 - spawned uWSGI http 1 (pid: 1606228) -Thu Jan 8 23:31:55 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:31:55 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:31:55 2026 - gateway "uWSGI http 1" has been buried (pid: 1606228) -Thu Jan 8 23:31:55 2026 - ...gracefully killing workers... -Thu Jan 8 23:31:55 2026 - Gracefully killing worker 2 (pid: 1606227)... -Thu Jan 8 23:31:55 2026 - Gracefully killing worker 1 (pid: 1606224)... -Thu Jan 8 23:31:56 2026 - worker 1 buried after 1 seconds -Thu Jan 8 23:31:56 2026 - worker 2 buried after 1 seconds -Thu Jan 8 23:31:56 2026 - binary reloading uWSGI... -Thu Jan 8 23:31:56 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:31:56 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Thu Jan 8 23:31:56 2026 - found fd 3 mapped to socket 0 (127.0.0.1:35373) -Thu Jan 8 23:31:56 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Thu Jan 8 23:31:56 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:31:56 2026] *** -Thu Jan 8 23:31:56 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:31:56 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:31:56 2026 - nodename: ubserver -Thu Jan 8 23:31:56 2026 - machine: x86_64 -Thu Jan 8 23:31:56 2026 - clock source: unix -Thu Jan 8 23:31:56 2026 - pcre jit disabled -Thu Jan 8 23:31:56 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:31:56 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:31:56 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:31:56 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:31:56 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:31:56 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:31:56 2026 - your processes number limit is 61306 -Thu Jan 8 23:31:56 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:31:56 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:31:56 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:31:56 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:31:56 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:31:56 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Thu Jan 8 23:31:56 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:43279 (port auto-assigned) fd 4 -Thu Jan 8 23:31:56 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:31:56 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:31:56 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:31:56 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:31:56 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:31:57 2026 - Python main interpreter initialized at 0x7b48c3b52d10 -Thu Jan 8 23:31:57 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:31:57 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:31:57 2026 - python threads support enabled -Thu Jan 8 23:31:57 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:31:57 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:31:57 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:31:57 2026 - *** Operational MODE: preforking+threaded *** -2026-01-08 23:31:57 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:31:57 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Thu Jan 8 23:31:57 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7b48c3b52d10 pid: 1602880 (default app) -Thu Jan 8 23:31:57 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:31:57 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:31:57 2026 - *** uWSGI is running in multiple interpreter mode *** -Thu Jan 8 23:31:57 2026 - gracefully (RE)spawned uWSGI master process (pid: 1602880) -Thu Jan 8 23:31:57 2026 - spawned uWSGI worker 1 (pid: 1606265, cores: 2) -Thu Jan 8 23:31:57 2026 - spawned uWSGI worker 2 (pid: 1606266, cores: 2) -Thu Jan 8 23:31:57 2026 - spawned uWSGI http 1 (pid: 1606269) -Thu Jan 8 23:31:57 2026 - Python auto-reloader enabled -Thu Jan 8 23:32:17 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:32:17 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Thu Jan 8 23:32:17 2026 - gateway "uWSGI http 1" has been buried (pid: 1606269) -Thu Jan 8 23:32:17 2026 - ...gracefully killing workers... -Thu Jan 8 23:32:17 2026 - Gracefully killing worker 2 (pid: 1606266)... -Thu Jan 8 23:32:17 2026 - Gracefully killing worker 1 (pid: 1606265)... -Thu Jan 8 23:32:18 2026 - worker 1 buried after 1 seconds -Thu Jan 8 23:32:18 2026 - worker 2 buried after 1 seconds -Thu Jan 8 23:32:18 2026 - binary reloading uWSGI... -Thu Jan 8 23:32:18 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:32:18 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Thu Jan 8 23:32:18 2026 - found fd 4 mapped to socket 0 (127.0.0.1:43279) -Thu Jan 8 23:32:18 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Thu Jan 8 23:32:18 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:32:18 2026] *** -Thu Jan 8 23:32:18 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:32:18 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:32:18 2026 - nodename: ubserver -Thu Jan 8 23:32:18 2026 - machine: x86_64 -Thu Jan 8 23:32:18 2026 - clock source: unix -Thu Jan 8 23:32:18 2026 - pcre jit disabled -Thu Jan 8 23:32:18 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:32:18 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:32:18 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:32:18 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:18 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:18 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:32:18 2026 - your processes number limit is 61306 -Thu Jan 8 23:32:18 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:32:18 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:32:18 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:32:18 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:32:18 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:32:18 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Thu Jan 8 23:32:18 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:45679 (port auto-assigned) fd 3 -Thu Jan 8 23:32:18 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:18 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:18 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:32:18 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:32:18 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:32:18 2026 - Python main interpreter initialized at 0x709a17952d10 -Thu Jan 8 23:32:18 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:18 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:18 2026 - python threads support enabled -Thu Jan 8 23:32:18 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:32:18 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:32:18 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:32:18 2026 - *** Operational MODE: preforking+threaded *** -应用创建失败: invalid character '🧹' (U+1F9F9) (message_handler.py, line 866) -Thu Jan 8 23:32:18 2026 - VACUUM: pidfile removed. -Thu Jan 8 23:32:20 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:32:20 2026] *** -Thu Jan 8 23:32:20 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:32:20 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:32:20 2026 - nodename: ubserver -Thu Jan 8 23:32:20 2026 - machine: x86_64 -Thu Jan 8 23:32:20 2026 - clock source: unix -Thu Jan 8 23:32:20 2026 - pcre jit disabled -Thu Jan 8 23:32:20 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:32:20 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:32:20 2026 - writing pidfile to ./uwsgi-wechat.pid -Thu Jan 8 23:32:20 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:32:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:20 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:32:20 2026 - your processes number limit is 61306 -Thu Jan 8 23:32:20 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:32:20 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:32:20 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:32:20 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:32:20 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:32:20 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 4 -Thu Jan 8 23:32:20 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:39829 (port auto-assigned) fd 3 -Thu Jan 8 23:32:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:20 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:32:20 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:32:20 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:32:20 2026 - Python main interpreter initialized at 0x78d37bf52d10 -Thu Jan 8 23:32:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:20 2026 - python threads support enabled -Thu Jan 8 23:32:20 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:32:20 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:32:20 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:32:20 2026 - *** Operational MODE: preforking+threaded *** -应用创建失败: invalid character '🧹' (U+1F9F9) (message_handler.py, line 866) -Thu Jan 8 23:32:20 2026 - VACUUM: pidfile removed. -Thu Jan 8 23:32:22 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:32:22 2026] *** -Thu Jan 8 23:32:22 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:32:22 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:32:22 2026 - nodename: ubserver -Thu Jan 8 23:32:22 2026 - machine: x86_64 -Thu Jan 8 23:32:22 2026 - clock source: unix -Thu Jan 8 23:32:22 2026 - pcre jit disabled -Thu Jan 8 23:32:22 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:32:22 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:32:22 2026 - writing pidfile to ./uwsgi-wechat.pid -Thu Jan 8 23:32:22 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:32:22 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:22 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:22 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:32:22 2026 - your processes number limit is 61306 -Thu Jan 8 23:32:22 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:32:22 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:32:22 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:32:22 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:32:22 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:32:22 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 4 -Thu Jan 8 23:32:22 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:40245 (port auto-assigned) fd 3 -Thu Jan 8 23:32:22 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:22 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:22 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:32:22 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:32:22 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:32:22 2026 - Python main interpreter initialized at 0x7eea4cd52d10 -Thu Jan 8 23:32:22 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:22 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:22 2026 - python threads support enabled -Thu Jan 8 23:32:22 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:32:22 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:32:22 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:32:22 2026 - *** Operational MODE: preforking+threaded *** -应用创建失败: invalid character '🧹' (U+1F9F9) (message_handler.py, line 866) -Thu Jan 8 23:32:22 2026 - VACUUM: pidfile removed. -Thu Jan 8 23:32:25 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:32:25 2026] *** -Thu Jan 8 23:32:25 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:32:25 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:32:25 2026 - nodename: ubserver -Thu Jan 8 23:32:25 2026 - machine: x86_64 -Thu Jan 8 23:32:25 2026 - clock source: unix -Thu Jan 8 23:32:25 2026 - pcre jit disabled -Thu Jan 8 23:32:25 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:32:25 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:32:25 2026 - writing pidfile to ./uwsgi-wechat.pid -Thu Jan 8 23:32:25 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:32:25 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:25 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:25 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:32:25 2026 - your processes number limit is 61306 -Thu Jan 8 23:32:25 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:32:25 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:32:25 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:32:25 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:32:25 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:32:25 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 4 -Thu Jan 8 23:32:25 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:43897 (port auto-assigned) fd 3 -Thu Jan 8 23:32:25 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:25 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:25 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:32:25 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:32:25 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:32:25 2026 - Python main interpreter initialized at 0x77e879f52d10 -Thu Jan 8 23:32:25 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:25 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:25 2026 - python threads support enabled -Thu Jan 8 23:32:25 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:32:25 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:32:25 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:32:25 2026 - *** Operational MODE: preforking+threaded *** -应用创建失败: invalid character '🧹' (U+1F9F9) (message_handler.py, line 866) -Thu Jan 8 23:32:25 2026 - VACUUM: pidfile removed. -Thu Jan 8 23:32:29 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:32:29 2026] *** -Thu Jan 8 23:32:29 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:32:29 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:32:29 2026 - nodename: ubserver -Thu Jan 8 23:32:29 2026 - machine: x86_64 -Thu Jan 8 23:32:29 2026 - clock source: unix -Thu Jan 8 23:32:29 2026 - pcre jit disabled -Thu Jan 8 23:32:29 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:32:29 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:32:29 2026 - writing pidfile to ./uwsgi-wechat.pid -Thu Jan 8 23:32:29 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:32:29 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:29 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:29 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:32:29 2026 - your processes number limit is 61306 -Thu Jan 8 23:32:29 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:32:29 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:32:29 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:32:29 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:32:29 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:32:29 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 4 -Thu Jan 8 23:32:29 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:39677 (port auto-assigned) fd 3 -Thu Jan 8 23:32:29 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:29 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:29 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:32:29 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:32:29 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:32:29 2026 - Python main interpreter initialized at 0x7afe74752d10 -Thu Jan 8 23:32:29 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:32:29 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:32:29 2026 - python threads support enabled -Thu Jan 8 23:32:29 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:32:29 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:32:29 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:32:29 2026 - *** Operational MODE: preforking+threaded *** -应用创建失败: invalid character '🧹' (U+1F9F9) (message_handler.py, line 866) -Thu Jan 8 23:32:29 2026 - VACUUM: pidfile removed. -Thu Jan 8 23:52:06 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Thu Jan 8 23:52:06 2026] *** -Thu Jan 8 23:52:06 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Thu Jan 8 23:52:06 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Thu Jan 8 23:52:06 2026 - nodename: ubserver -Thu Jan 8 23:52:06 2026 - machine: x86_64 -Thu Jan 8 23:52:06 2026 - clock source: unix -Thu Jan 8 23:52:06 2026 - pcre jit disabled -Thu Jan 8 23:52:06 2026 - detected number of CPU cores: 12 -Thu Jan 8 23:52:06 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:52:06 2026 - writing pidfile to ./uwsgi-wechat.pid -Thu Jan 8 23:52:06 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Thu Jan 8 23:52:06 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:52:06 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:52:06 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Thu Jan 8 23:52:06 2026 - your processes number limit is 61306 -Thu Jan 8 23:52:06 2026 - your memory page size is 4096 bytes -Thu Jan 8 23:52:06 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Thu Jan 8 23:52:06 2026 - detected max file descriptor number: 1024 -Thu Jan 8 23:52:06 2026 - lock engine: pthread robust mutexes -Thu Jan 8 23:52:06 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Thu Jan 8 23:52:06 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 4 -Thu Jan 8 23:52:06 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:38137 (port auto-assigned) fd 3 -Thu Jan 8 23:52:06 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:52:06 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:52:06 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Thu Jan 8 23:52:06 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:52:06 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Thu Jan 8 23:52:06 2026 - Python main interpreter initialized at 0x7e4ab4d52d10 -Thu Jan 8 23:52:06 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:52:06 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:52:06 2026 - python threads support enabled -Thu Jan 8 23:52:06 2026 - your server socket listen backlog is limited to 100 connections -Thu Jan 8 23:52:06 2026 - your mercy for graceful operations on workers is 60 seconds -Thu Jan 8 23:52:06 2026 - mapped 250032 bytes (244 KB) for 4 cores -Thu Jan 8 23:52:06 2026 - *** Operational MODE: preforking+threaded *** -2026-01-08 23:52:07 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-08 23:52:07 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Thu Jan 8 23:52:07 2026 - WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x7e4ab4d52d10 pid: 1616302 (default app) -Thu Jan 8 23:52:07 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Thu Jan 8 23:52:07 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Thu Jan 8 23:52:07 2026 - *** uWSGI is running in multiple interpreter mode *** -Thu Jan 8 23:52:07 2026 - spawned uWSGI master process (pid: 1616302) -Thu Jan 8 23:52:07 2026 - spawned uWSGI worker 1 (pid: 1616321, cores: 2) -Thu Jan 8 23:52:07 2026 - spawned uWSGI worker 2 (pid: 1616322, cores: 2) -Thu Jan 8 23:52:07 2026 - spawned uWSGI http 1 (pid: 1616325) -Thu Jan 8 23:52:07 2026 - Python auto-reloader enabled -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: n59OiXnRr3zM6BW5uVWSYT6UKG/jwApIhfJmwxnP9GpaH3WRsC... -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 887eba908c181e0228de54116517e004e6d673d3 -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 887eba908c181e0228de54116517e004e6d673d3 -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 23:52:13 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=today_stats, user=WeiJueSen -2026-01-08 23:52:13 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: today_stats, user: WeiJueSen -2026-01-08 23:52:13 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求今日统计 -2026-01-08 23:52:13 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-08 23:52:13 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-08 23:52:13 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-08 23:52:13 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-08 23:52:13 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-08 23:52:13 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-08 23:52:13 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-08 23:52:13 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-08 23:52:13 - gx_gp_monitor.main - INFO - 应用初始化完成 -{address space usage: 236015616 bytes/225MB} {rss usage: 47742976 bytes/45MB} [pid: 1616322|app: 0|req: 1/1] 14.116.241.251 () {36 vars in 679 bytes} [Thu Jan 8 23:52:13 2026] POST /api/v1/wechat/callback?msg_signature=887eba908c181e0228de54116517e004e6d673d3×tamp=1767887533&nonce=1767435597 => generated 966 bytes in 199 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: byLoJ8C5/EIdNJGq7flLu3wK+9KeXhAbFlWGZ4SKbrq/jzVScQ... -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 0d4231a984a41081739519e49ef91e1a62af27c2 -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 0d4231a984a41081739519e49ef91e1a62af27c2 -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-08 23:52:21 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=keyword_manage, user=WeiJueSen -2026-01-08 23:52:21 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_manage, user: WeiJueSen -2026-01-08 23:52:21 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求关键词管理 -{address space usage: 236015616 bytes/225MB} {rss usage: 47742976 bytes/45MB} [pid: 1616322|app: 0|req: 2/2] 183.47.98.168 () {36 vars in 678 bytes} [Thu Jan 8 23:52:21 2026] POST /api/v1/wechat/callback?msg_signature=0d4231a984a41081739519e49ef91e1a62af27c2×tamp=1767887541&nonce=1767324070 => generated 1010 bytes in 1 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 1) -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: lD6k2bCX3whG0WVivcAAby7GwI0fzF4lElViOb36QW2etFd8aF... -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 8da1cb947170f3a975db580b0a1a03dc4fbc922a -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 8da1cb947170f3a975db580b0a1a03dc4fbc922a -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 00:10:09 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 00:10:09 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 00:10:09 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 00:10:09 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 00:10:09 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 00:10:09 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 00:10:09 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: lD6k2bCX3whG0WVivcAAby7GwI0fzF4lElViOb36QW2etFd8aF... -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 8da1cb947170f3a975db580b0a1a03dc4fbc922a -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 8da1cb947170f3a975db580b0a1a03dc4fbc922a -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 00:10:14 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 00:10:14 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 00:10:14 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 00:10:14 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 00:10:14 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 00:10:14 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 00:10:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.48秒 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 00:10:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 00:10:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 00:10:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 2V3aU/4FO7zlAhJFhCe168paUJgMT77M+FAB4jNUk/NXWcWgDl... -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 971fef79a492b4102de1d93d6fc27160160dea60 -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 971fef79a492b4102de1d93d6fc27160160dea60 -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 00:10:15 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=keyword_search, user=WeiJueSen -2026-01-09 00:10:15 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_search, user: WeiJueSen -2026-01-09 00:10:15 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 触发关键词搜索菜单 -{address space usage: 234016768 bytes/223MB} {rss usage: 39407616 bytes/37MB} [pid: 1616321|app: 0|req: 1/3] 183.47.98.227 () {36 vars in 678 bytes} [Fri Jan 9 00:10:15 2026] POST /api/v1/wechat/callback?msg_signature=971fef79a492b4102de1d93d6fc27160160dea60×tamp=1767888615&nonce=1767172344 => generated 1054 bytes in 6 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0) -2026-01-09 00:10:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:10:15 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 00:10:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 00:10:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.32秒 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 00:10:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 00:10:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 00:10:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 00:10:16 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 00:10:17 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:17 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 00:10:17 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 00:10:17 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:17 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 00:10:17 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 00:10:17 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:17 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 00:10:17 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 00:10:17 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 00:10:17 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 00:10:17 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 0 条公告 -2026-01-09 00:10:17 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 00:10:17 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 00:10:17 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 00:10:17 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 00:10:17 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 0, 'date_filtered': 1300, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -{address space usage: 250101760 bytes/238MB} {rss usage: 68210688 bytes/65MB} [pid: 1616322|app: 0|req: 4/4] 106.55.202.215 () {36 vars in 679 bytes} [Fri Jan 9 00:10:14 2026] POST /api/v1/wechat/callback?msg_signature=8da1cb947170f3a975db580b0a1a03dc4fbc922a×tamp=1767888609&nonce=1767456212 => generated 798 bytes in 3065 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 00:10:40 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.51秒 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 00:10:40 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 00:10:40 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 00:10:40 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 00:10:40 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 00:10:41 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 00:10:41 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 00:10:41 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 00:10:41 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 00:10:41 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 00:10:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 00:10:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 00:10:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 00:10:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 00:10:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 00:10:42 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 00:10:42 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 00:10:42 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 00:10:42 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 00:10:42 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 1 条公告 -2026-01-09 00:10:42 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 1 -> 0 条公告 -2026-01-09 00:10:42 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 00:10:42 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 00:10:42 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 00:10:42 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 1, 'date_filtered': 1299, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -{address space usage: 242388992 bytes/231MB} {rss usage: 60600320 bytes/57MB} [pid: 1616322|app: 0|req: 4/5] 14.116.241.251 () {36 vars in 679 bytes} [Fri Jan 9 00:10:09 2026] POST /api/v1/wechat/callback?msg_signature=8da1cb947170f3a975db580b0a1a03dc4fbc922a×tamp=1767888609&nonce=1767456212 => generated 798 bytes in 33363 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: tc4EfnaoWAMd6veuWP3h1KALIuMqFaseXjRRVx9vm8aHsfZaFX... -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 6367d32d17c91baf7f4e084d457653862e380d20 -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 6367d32d17c91baf7f4e084d457653862e380d20 -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:09:44 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=announcements_by_type, user=WeiJueSen -2026-01-09 08:09:44 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: announcements_by_type, user: WeiJueSen -2026-01-09 08:09:44 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求按类型查看公告 -2026-01-09 08:09:44 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -{address space usage: 234016768 bytes/223MB} {rss usage: 44326912 bytes/42MB} [pid: 1616321|app: 0|req: 2/6] 183.47.98.227 () {36 vars in 678 bytes} [Fri Jan 9 08:09:44 2026] POST /api/v1/wechat/callback?msg_signature=6367d32d17c91baf7f4e084d457653862e380d20×tamp=1767917384&nonce=1768231335 => generated 754 bytes in 31 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: KNXRojaaOOvMXAn/bS/jCuXblPiK3JZlgYTa3ZkP/NIaRLHdgd... -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: f3151e52daaf7cd68feebc40d4c3be095a479eeb -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: f3151e52daaf7cd68feebc40d4c3be095a479eeb -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:09:54 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=today_count, user=WeiJueSen -2026-01-09 08:09:54 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: today_count, user: WeiJueSen -{address space usage: 242388992 bytes/231MB} {rss usage: 60600320 bytes/57MB} [pid: 1616322|app: 0|req: 5/7] 183.47.98.227 () {36 vars in 677 bytes} [Fri Jan 9 08:09:54 2026] POST /api/v1/wechat/callback?msg_signature=f3151e52daaf7cd68feebc40d4c3be095a479eeb×tamp=1767917394&nonce=1768669935 => generated 582 bytes in 1 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: WQBIDFITyc25ID3VlassbD4P/na15LN12tS+UlIJNMoPt5OIWl... -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: c70c8e0f75d9e1e8673a812ba65eecc0fffefac0 -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: c70c8e0f75d9e1e8673a812ba65eecc0fffefac0 -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:10:03 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=system_status, user=WeiJueSen -2026-01-09 08:10:03 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: system_status, user: WeiJueSen -2026-01-09 08:10:03 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统状态 -2026-01-09 08:10:03 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 08:10:03 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -{address space usage: 242388992 bytes/231MB} {rss usage: 60600320 bytes/57MB} [pid: 1616322|app: 0|req: 6/8] 183.47.98.168 () {36 vars in 678 bytes} [Fri Jan 9 08:10:03 2026] POST /api/v1/wechat/callback?msg_signature=c70c8e0f75d9e1e8673a812ba65eecc0fffefac0×tamp=1767917402&nonce=1768910559 => generated 1138 bytes in 330 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0) -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: xWHwlcwe4cuIn2AK6nBzQ9q5zV0+ugoj8SRfP7xMMSCVEgHK2c... -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: fe4d3cd3694a6e377ca8a65dba40280dc9567e06 -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: fe4d3cd3694a6e377ca8a65dba40280dc9567e06 -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:24:28 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=system_status, user=WeiJueSen -2026-01-09 08:24:28 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: system_status, user: WeiJueSen -2026-01-09 08:24:28 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统状态 -2026-01-09 08:24:28 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 08:24:28 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -{address space usage: 242388992 bytes/231MB} {rss usage: 60600320 bytes/57MB} [pid: 1616322|app: 0|req: 7/9] 183.47.117.101 () {36 vars in 679 bytes} [Fri Jan 9 08:24:28 2026] POST /api/v1/wechat/callback?msg_signature=fe4d3cd3694a6e377ca8a65dba40280dc9567e06×tamp=1767918267&nonce=1768912568 => generated 1138 bytes in 257 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 1) -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: hqqxYVpVNxT1Qj5jt+eIUo3YItaTa0mdudcHd/kc2ov6qd7tVB... -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 0a03ded284404f7444d641fd5d85f6b692f76d42 -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 0a03ded284404f7444d641fd5d85f6b692f76d42 -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:25:01 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=clear_cache, user=WeiJueSen -2026-01-09 08:25:01 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: clear_cache, user: WeiJueSen -2026-01-09 08:25:01 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求清理缓存 -2026-01-09 08:25:01 - gx_gp_monitor.wechat.message_handler - WARNING - 数据库缓存清理失败: cannot import name 'clear_database_cache' from 'gx_gp_monitor.storage.postgresql' (/home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/storage/postgresql.py) -{address space usage: 242388992 bytes/231MB} {rss usage: 60600320 bytes/57MB} [pid: 1616322|app: 0|req: 8/10] 14.116.241.251 () {36 vars in 679 bytes} [Fri Jan 9 08:25:01 2026] POST /api/v1/wechat/callback?msg_signature=0a03ded284404f7444d641fd5d85f6b692f76d42×tamp=1767918301&nonce=1768654455 => generated 966 bytes in 1 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -Fri Jan 9 08:25:34 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:25:34 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:25:34 2026 - gateway "uWSGI http 1" has been buried (pid: 1616325) -Fri Jan 9 08:25:34 2026 - ...gracefully killing workers... -Fri Jan 9 08:25:34 2026 - Gracefully killing worker 1 (pid: 1616321)... -Fri Jan 9 08:25:34 2026 - Gracefully killing worker 2 (pid: 1616322)... -Fri Jan 9 08:25:35 2026 - worker 1 buried after 1 seconds -Fri Jan 9 08:25:35 2026 - worker 2 buried after 1 seconds -Fri Jan 9 08:25:35 2026 - binary reloading uWSGI... -Fri Jan 9 08:25:35 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:25:35 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 08:25:35 2026 - found fd 3 mapped to socket 0 (127.0.0.1:38137) -Fri Jan 9 08:25:35 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 08:25:35 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:25:35 2026] *** -Fri Jan 9 08:25:35 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:25:35 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:25:35 2026 - nodename: ubserver -Fri Jan 9 08:25:35 2026 - machine: x86_64 -Fri Jan 9 08:25:35 2026 - clock source: unix -Fri Jan 9 08:25:35 2026 - pcre jit disabled -Fri Jan 9 08:25:35 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:25:35 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:25:35 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:25:35 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:25:35 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:25:35 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:25:35 2026 - your processes number limit is 61306 -Fri Jan 9 08:25:35 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:25:35 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:25:35 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:25:35 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:25:35 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:25:35 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 08:25:35 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:43151 (port auto-assigned) fd 4 -Fri Jan 9 08:25:35 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:25:35 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:25:35 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:25:35 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:25:35 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:25:35 2026 - Python main interpreter initialized at 0x791842f52d10 -Fri Jan 9 08:25:35 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:25:35 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:25:35 2026 - python threads support enabled -Fri Jan 9 08:25:35 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:25:35 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:25:35 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:25:35 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:25:36 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:25:36 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:25:36 2026 - WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x791842f52d10 pid: 1616302 (default app) -Fri Jan 9 08:25:36 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:25:36 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:25:36 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:25:36 2026 - gracefully (RE)spawned uWSGI master process (pid: 1616302) -Fri Jan 9 08:25:36 2026 - spawned uWSGI worker 1 (pid: 1776212, cores: 2) -Fri Jan 9 08:25:36 2026 - spawned uWSGI worker 2 (pid: 1776213, cores: 2) -Fri Jan 9 08:25:36 2026 - spawned uWSGI http 1 (pid: 1776217) -Fri Jan 9 08:25:36 2026 - Python auto-reloader enabled -Fri Jan 9 08:25:49 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:25:49 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:25:49 2026 - gateway "uWSGI http 1" has been buried (pid: 1776217) -Fri Jan 9 08:25:49 2026 - ...gracefully killing workers... -Fri Jan 9 08:25:49 2026 - Gracefully killing worker 1 (pid: 1776212)... -Fri Jan 9 08:25:49 2026 - Gracefully killing worker 2 (pid: 1776213)... -Fri Jan 9 08:25:50 2026 - worker 1 buried after 1 seconds -Fri Jan 9 08:25:50 2026 - worker 2 buried after 1 seconds -Fri Jan 9 08:25:50 2026 - binary reloading uWSGI... -Fri Jan 9 08:25:50 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:25:50 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 08:25:50 2026 - found fd 4 mapped to socket 0 (127.0.0.1:43151) -Fri Jan 9 08:25:50 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 08:25:50 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:25:50 2026] *** -Fri Jan 9 08:25:50 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:25:50 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:25:50 2026 - nodename: ubserver -Fri Jan 9 08:25:50 2026 - machine: x86_64 -Fri Jan 9 08:25:50 2026 - clock source: unix -Fri Jan 9 08:25:50 2026 - pcre jit disabled -Fri Jan 9 08:25:50 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:25:50 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:25:50 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:25:50 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:25:50 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:25:50 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:25:50 2026 - your processes number limit is 61306 -Fri Jan 9 08:25:50 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:25:50 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:25:50 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:25:50 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:25:50 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:25:50 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 08:25:50 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:43709 (port auto-assigned) fd 3 -Fri Jan 9 08:25:50 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:25:50 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:25:50 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:25:50 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:25:50 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:25:50 2026 - Python main interpreter initialized at 0x7dc283d52d10 -Fri Jan 9 08:25:50 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:25:50 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:25:50 2026 - python threads support enabled -Fri Jan 9 08:25:50 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:25:50 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:25:50 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:25:50 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:25:50 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:25:50 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:25:50 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7dc283d52d10 pid: 1616302 (default app) -Fri Jan 9 08:25:50 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:25:50 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:25:50 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:25:50 2026 - gracefully (RE)spawned uWSGI master process (pid: 1616302) -Fri Jan 9 08:25:50 2026 - spawned uWSGI worker 1 (pid: 1776419, cores: 2) -Fri Jan 9 08:25:50 2026 - spawned uWSGI worker 2 (pid: 1776422, cores: 2) -Fri Jan 9 08:25:50 2026 - Python auto-reloader enabled -Fri Jan 9 08:25:50 2026 - spawned uWSGI http 1 (pid: 1776425) -Fri Jan 9 08:25:59 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:25:59 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:25:59 2026 - gateway "uWSGI http 1" has been buried (pid: 1776425) -Fri Jan 9 08:25:59 2026 - ...gracefully killing workers... -Fri Jan 9 08:25:59 2026 - Gracefully killing worker 2 (pid: 1776422)... -Fri Jan 9 08:25:59 2026 - Gracefully killing worker 1 (pid: 1776419)... -Fri Jan 9 08:26:00 2026 - worker 1 buried after 1 seconds -Fri Jan 9 08:26:00 2026 - worker 2 buried after 1 seconds -Fri Jan 9 08:26:00 2026 - binary reloading uWSGI... -Fri Jan 9 08:26:00 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:26:00 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 08:26:00 2026 - found fd 3 mapped to socket 0 (127.0.0.1:43709) -Fri Jan 9 08:26:00 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 08:26:00 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:26:00 2026] *** -Fri Jan 9 08:26:00 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:26:00 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:26:00 2026 - nodename: ubserver -Fri Jan 9 08:26:00 2026 - machine: x86_64 -Fri Jan 9 08:26:00 2026 - clock source: unix -Fri Jan 9 08:26:00 2026 - pcre jit disabled -Fri Jan 9 08:26:00 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:26:00 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:26:00 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:26:00 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:26:00 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:26:00 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:26:00 2026 - your processes number limit is 61306 -Fri Jan 9 08:26:00 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:26:00 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:26:00 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:26:00 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:26:00 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:26:00 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 08:26:00 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:41863 (port auto-assigned) fd 4 -Fri Jan 9 08:26:00 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:26:00 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:26:00 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:26:00 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:26:00 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:26:00 2026 - Python main interpreter initialized at 0x70a3e9552d10 -Fri Jan 9 08:26:00 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:26:00 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:26:00 2026 - python threads support enabled -Fri Jan 9 08:26:00 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:26:00 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:26:00 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:26:00 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:26:00 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:26:00 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:26:00 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x70a3e9552d10 pid: 1616302 (default app) -Fri Jan 9 08:26:00 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:26:00 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:26:00 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:26:00 2026 - gracefully (RE)spawned uWSGI master process (pid: 1616302) -Fri Jan 9 08:26:00 2026 - spawned uWSGI worker 1 (pid: 1776493, cores: 2) -Fri Jan 9 08:26:00 2026 - spawned uWSGI worker 2 (pid: 1776494, cores: 2) -Fri Jan 9 08:26:00 2026 - spawned uWSGI http 1 (pid: 1776497) -Fri Jan 9 08:26:00 2026 - Python auto-reloader enabled -Fri Jan 9 08:26:19 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:26:19 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:26:19 2026 - gateway "uWSGI http 1" has been buried (pid: 1776497) -Fri Jan 9 08:26:19 2026 - ...gracefully killing workers... -Fri Jan 9 08:26:19 2026 - Gracefully killing worker 1 (pid: 1776493)... -Fri Jan 9 08:26:19 2026 - Gracefully killing worker 2 (pid: 1776494)... -Fri Jan 9 08:26:20 2026 - worker 1 buried after 1 seconds -Fri Jan 9 08:26:20 2026 - worker 2 buried after 1 seconds -Fri Jan 9 08:26:20 2026 - binary reloading uWSGI... -Fri Jan 9 08:26:20 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:26:20 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 08:26:20 2026 - found fd 4 mapped to socket 0 (127.0.0.1:41863) -Fri Jan 9 08:26:20 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 08:26:20 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:26:20 2026] *** -Fri Jan 9 08:26:20 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:26:20 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:26:20 2026 - nodename: ubserver -Fri Jan 9 08:26:20 2026 - machine: x86_64 -Fri Jan 9 08:26:20 2026 - clock source: unix -Fri Jan 9 08:26:20 2026 - pcre jit disabled -Fri Jan 9 08:26:20 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:26:20 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:26:20 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:26:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:26:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:26:20 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:26:20 2026 - your processes number limit is 61306 -Fri Jan 9 08:26:20 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:26:20 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:26:20 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:26:20 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:26:20 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:26:20 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 08:26:20 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:40093 (port auto-assigned) fd 3 -Fri Jan 9 08:26:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:26:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:26:20 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:26:20 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:26:20 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:26:20 2026 - Python main interpreter initialized at 0x74aa13f52d10 -Fri Jan 9 08:26:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:26:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:26:20 2026 - python threads support enabled -Fri Jan 9 08:26:20 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:26:20 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:26:20 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:26:20 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:26:20 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:26:20 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:26:20 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x74aa13f52d10 pid: 1616302 (default app) -Fri Jan 9 08:26:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:26:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:26:20 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:26:20 2026 - gracefully (RE)spawned uWSGI master process (pid: 1616302) -Fri Jan 9 08:26:20 2026 - spawned uWSGI worker 1 (pid: 1776685, cores: 2) -Fri Jan 9 08:26:20 2026 - spawned uWSGI worker 2 (pid: 1776686, cores: 2) -Fri Jan 9 08:26:20 2026 - spawned uWSGI http 1 (pid: 1776689) -Fri Jan 9 08:26:20 2026 - Python auto-reloader enabled -Fri Jan 9 08:26:31 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:26:31 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:26:31 2026 - gateway "uWSGI http 1" has been buried (pid: 1776689) -Fri Jan 9 08:26:31 2026 - ...gracefully killing workers... -Fri Jan 9 08:26:31 2026 - Gracefully killing worker 1 (pid: 1776685)... -Fri Jan 9 08:26:31 2026 - Gracefully killing worker 2 (pid: 1776686)... -Fri Jan 9 08:26:32 2026 - worker 1 buried after 1 seconds -Fri Jan 9 08:26:32 2026 - worker 2 buried after 1 seconds -Fri Jan 9 08:26:32 2026 - binary reloading uWSGI... -Fri Jan 9 08:26:32 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:26:32 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 08:26:32 2026 - found fd 3 mapped to socket 0 (127.0.0.1:40093) -Fri Jan 9 08:26:32 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 08:26:32 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:26:32 2026] *** -Fri Jan 9 08:26:32 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:26:32 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:26:32 2026 - nodename: ubserver -Fri Jan 9 08:26:32 2026 - machine: x86_64 -Fri Jan 9 08:26:32 2026 - clock source: unix -Fri Jan 9 08:26:32 2026 - pcre jit disabled -Fri Jan 9 08:26:32 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:26:32 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:26:32 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:26:32 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:26:32 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:26:32 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:26:32 2026 - your processes number limit is 61306 -Fri Jan 9 08:26:32 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:26:32 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:26:32 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:26:32 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:26:32 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:26:32 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 08:26:32 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:36999 (port auto-assigned) fd 4 -Fri Jan 9 08:26:32 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:26:32 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:26:32 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:26:32 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:26:32 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:26:32 2026 - Python main interpreter initialized at 0x7cd2f3552d10 -Fri Jan 9 08:26:32 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:26:32 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:26:32 2026 - python threads support enabled -Fri Jan 9 08:26:32 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:26:32 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:26:32 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:26:32 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:26:32 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:26:32 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:26:32 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7cd2f3552d10 pid: 1616302 (default app) -Fri Jan 9 08:26:32 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:26:32 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:26:32 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:26:32 2026 - gracefully (RE)spawned uWSGI master process (pid: 1616302) -Fri Jan 9 08:26:32 2026 - spawned uWSGI worker 1 (pid: 1776759, cores: 2) -Fri Jan 9 08:26:32 2026 - spawned uWSGI worker 2 (pid: 1776760, cores: 2) -Fri Jan 9 08:26:32 2026 - spawned uWSGI http 1 (pid: 1776765) -Fri Jan 9 08:26:32 2026 - Python auto-reloader enabled -Fri Jan 9 08:28:10 2026 - gateway "uWSGI http 1" has been buried (pid: 1776765) -Fri Jan 9 08:28:10 2026 - ...brutally killing workers... -Fri Jan 9 08:28:11 2026 - worker 1 buried after 1 seconds -Fri Jan 9 08:28:11 2026 - worker 2 buried after 1 seconds -Fri Jan 9 08:28:11 2026 - binary reloading uWSGI... -Fri Jan 9 08:28:11 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:28:11 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 08:28:11 2026 - found fd 4 mapped to socket 0 (127.0.0.1:36999) -Fri Jan 9 08:28:11 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 08:28:11 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:28:11 2026] *** -Fri Jan 9 08:28:11 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:28:11 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:28:11 2026 - nodename: ubserver -Fri Jan 9 08:28:11 2026 - machine: x86_64 -Fri Jan 9 08:28:11 2026 - clock source: unix -Fri Jan 9 08:28:11 2026 - pcre jit disabled -Fri Jan 9 08:28:11 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:28:11 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:28:11 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:28:11 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:28:11 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:28:11 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:28:11 2026 - your processes number limit is 61306 -Fri Jan 9 08:28:11 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:28:11 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:28:11 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:28:11 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:28:11 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:28:11 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 08:28:11 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:41691 (port auto-assigned) fd 3 -Fri Jan 9 08:28:11 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:28:11 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:28:11 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:28:11 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:28:11 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:28:11 2026 - Python main interpreter initialized at 0x70645f552d10 -Fri Jan 9 08:28:11 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:28:11 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:28:11 2026 - python threads support enabled -Fri Jan 9 08:28:11 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:28:11 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:28:11 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:28:11 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:28:11 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:28:11 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:28:11 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x70645f552d10 pid: 1616302 (default app) -Fri Jan 9 08:28:11 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:28:11 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:28:11 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:28:11 2026 - gracefully (RE)spawned uWSGI master process (pid: 1616302) -Fri Jan 9 08:28:11 2026 - spawned uWSGI worker 1 (pid: 1777277, cores: 2) -Fri Jan 9 08:28:11 2026 - spawned uWSGI worker 2 (pid: 1777278, cores: 2) -Fri Jan 9 08:28:11 2026 - spawned uWSGI http 1 (pid: 1777282) -Fri Jan 9 08:28:11 2026 - Python auto-reloader enabled -Fri Jan 9 08:28:20 2026 - uWSGI worker 1 error: the master disconnected from this worker. Shutting down the worker. -Fri Jan 9 08:28:20 2026 - uWSGI worker 2 error: the master disconnected from this worker. Shutting down the worker. -Fri Jan 9 08:28:20 2026 - uWSGI worker 2 error: the master disconnected from this worker. Shutting down the worker. -Fri Jan 9 08:28:20 2026 - uWSGI worker 1 error: the master disconnected from this worker. Shutting down the worker. -Fri Jan 9 08:28:20 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:28:20 2026] *** -Fri Jan 9 08:28:20 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:28:20 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:28:20 2026 - nodename: ubserver -Fri Jan 9 08:28:20 2026 - machine: x86_64 -Fri Jan 9 08:28:20 2026 - clock source: unix -Fri Jan 9 08:28:20 2026 - pcre jit disabled -Fri Jan 9 08:28:20 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:28:20 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:28:20 2026 - writing pidfile to ./uwsgi-wechat.pid -Fri Jan 9 08:28:20 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:28:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:28:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:28:20 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:28:20 2026 - your processes number limit is 61306 -Fri Jan 9 08:28:20 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:28:20 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:28:20 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:28:20 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:28:20 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:28:20 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 4 -Fri Jan 9 08:28:20 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:34359 (port auto-assigned) fd 3 -Fri Jan 9 08:28:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:28:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:28:20 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:28:20 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:28:20 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:28:20 2026 - Python main interpreter initialized at 0x7a500b552d10 -Fri Jan 9 08:28:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:28:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:28:20 2026 - python threads support enabled -Fri Jan 9 08:28:20 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:28:20 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:28:20 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:28:20 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:28:20 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:28:20 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:28:20 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7a500b552d10 pid: 1777323 (default app) -Fri Jan 9 08:28:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:28:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:28:20 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:28:20 2026 - spawned uWSGI master process (pid: 1777323) -Fri Jan 9 08:28:20 2026 - spawned uWSGI worker 1 (pid: 1777366, cores: 2) -Fri Jan 9 08:28:20 2026 - spawned uWSGI worker 2 (pid: 1777369, cores: 2) -Fri Jan 9 08:28:20 2026 - Python auto-reloader enabled -Fri Jan 9 08:28:20 2026 - spawned uWSGI http 1 (pid: 1777371) -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: RXM6iBy1lGhKEHAzzl71zQ7rpp8F43J/HveXh7oBV+Ohnzab4O... -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: cdc12e2bef00f01d987d9ae321d300a1e5c36c12 -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: cdc12e2bef00f01d987d9ae321d300a1e5c36c12 -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:29:48 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=system_status, user=WeiJueSen -2026-01-09 08:29:48 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: system_status, user: WeiJueSen -2026-01-09 08:29:48 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统状态 -2026-01-09 08:29:48 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 08:29:48 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 08:29:48 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 08:29:48 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 08:29:48 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 08:29:48 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 08:29:48 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 08:29:48 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 08:29:48 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 08:29:48 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 08:29:48 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 08:29:48 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 08:29:49 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -{address space usage: 236441600 bytes/225MB} {rss usage: 48242688 bytes/46MB} [pid: 1777366|app: 0|req: 1/1] 113.108.92.100 () {36 vars in 679 bytes} [Fri Jan 9 08:29:48 2026] POST /api/v1/wechat/callback?msg_signature=cdc12e2bef00f01d987d9ae321d300a1e5c36c12×tamp=1767918588&nonce=1768510076 => generated 1094 bytes in 457 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0) -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: VYkwtbAIPnpprcyspau+o6woVT+BLSfa9WoVartvZtHggONJ20... -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: b3867dab975a717dbadcc5bd891ea3c94a209572 -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: b3867dab975a717dbadcc5bd891ea3c94a209572 -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 08:30:12 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=help_guide, user=WeiJueSen -2026-01-09 08:30:12 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: help_guide, user: WeiJueSen -2026-01-09 08:30:12 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求使用说明 -{address space usage: 233619456 bytes/222MB} {rss usage: 38805504 bytes/37MB} [pid: 1777369|app: 0|req: 1/2] 183.47.98.227 () {36 vars in 678 bytes} [Fri Jan 9 08:30:12 2026] POST /api/v1/wechat/callback?msg_signature=b3867dab975a717dbadcc5bd891ea3c94a209572×tamp=1767918612&nonce=1768555491 => generated 2758 bytes in 7 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0) -Fri Jan 9 08:30:51 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:30:51 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:30:51 2026 - gateway "uWSGI http 1" has been buried (pid: 1777371) -Fri Jan 9 08:30:51 2026 - ...gracefully killing workers... -Fri Jan 9 08:30:51 2026 - Gracefully killing worker 2 (pid: 1777369)... -Fri Jan 9 08:30:51 2026 - Gracefully killing worker 1 (pid: 1777366)... -Fri Jan 9 08:30:52 2026 - worker 1 buried after 1 seconds -Fri Jan 9 08:30:52 2026 - worker 2 buried after 1 seconds -Fri Jan 9 08:30:52 2026 - binary reloading uWSGI... -Fri Jan 9 08:30:52 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:30:52 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 08:30:52 2026 - found fd 3 mapped to socket 0 (127.0.0.1:34359) -Fri Jan 9 08:30:52 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 08:30:52 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:30:52 2026] *** -Fri Jan 9 08:30:52 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:30:52 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:30:52 2026 - nodename: ubserver -Fri Jan 9 08:30:52 2026 - machine: x86_64 -Fri Jan 9 08:30:52 2026 - clock source: unix -Fri Jan 9 08:30:52 2026 - pcre jit disabled -Fri Jan 9 08:30:52 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:30:52 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:30:52 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:30:52 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:30:52 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:30:52 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:30:52 2026 - your processes number limit is 61306 -Fri Jan 9 08:30:52 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:30:52 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:30:52 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:30:52 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:30:52 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:30:52 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 08:30:52 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:37271 (port auto-assigned) fd 4 -Fri Jan 9 08:30:52 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:30:52 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:30:52 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:30:52 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:30:52 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:30:52 2026 - Python main interpreter initialized at 0x7c9573552d10 -Fri Jan 9 08:30:52 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:30:52 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:30:52 2026 - python threads support enabled -Fri Jan 9 08:30:52 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:30:52 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:30:52 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:30:52 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:30:52 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:30:52 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:30:52 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7c9573552d10 pid: 1777323 (default app) -Fri Jan 9 08:30:52 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:30:52 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:30:52 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:30:52 2026 - gracefully (RE)spawned uWSGI master process (pid: 1777323) -Fri Jan 9 08:30:52 2026 - spawned uWSGI worker 1 (pid: 1778517, cores: 2) -Fri Jan 9 08:30:52 2026 - spawned uWSGI worker 2 (pid: 1778519, cores: 2) -Fri Jan 9 08:30:52 2026 - Python auto-reloader enabled -Fri Jan 9 08:30:52 2026 - spawned uWSGI http 1 (pid: 1778521) -Fri Jan 9 08:40:42 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:40:42 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:40:42 2026 - gateway "uWSGI http 1" has been buried (pid: 1778521) -Fri Jan 9 08:40:42 2026 - ...gracefully killing workers... -Fri Jan 9 08:40:42 2026 - Gracefully killing worker 2 (pid: 1778519)... -Fri Jan 9 08:40:42 2026 - Gracefully killing worker 1 (pid: 1778517)... -Fri Jan 9 08:40:43 2026 - worker 1 buried after 1 seconds -Fri Jan 9 08:40:43 2026 - worker 2 buried after 1 seconds -Fri Jan 9 08:40:43 2026 - binary reloading uWSGI... -Fri Jan 9 08:40:43 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:40:43 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 08:40:43 2026 - found fd 4 mapped to socket 0 (127.0.0.1:37271) -Fri Jan 9 08:40:43 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 08:40:43 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:40:43 2026] *** -Fri Jan 9 08:40:43 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:40:43 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:40:43 2026 - nodename: ubserver -Fri Jan 9 08:40:43 2026 - machine: x86_64 -Fri Jan 9 08:40:43 2026 - clock source: unix -Fri Jan 9 08:40:43 2026 - pcre jit disabled -Fri Jan 9 08:40:43 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:40:43 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:40:43 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:40:43 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:40:43 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:40:43 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:40:43 2026 - your processes number limit is 61306 -Fri Jan 9 08:40:43 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:40:43 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:40:43 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:40:43 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:40:43 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:40:43 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 08:40:43 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:45569 (port auto-assigned) fd 3 -Fri Jan 9 08:40:43 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:40:43 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:40:43 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:40:43 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:40:43 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:40:43 2026 - Python main interpreter initialized at 0x7d49f5552d10 -Fri Jan 9 08:40:43 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:40:43 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:40:43 2026 - python threads support enabled -Fri Jan 9 08:40:43 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:40:43 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:40:43 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:40:43 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:40:43 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:40:43 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:40:43 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7d49f5552d10 pid: 1777323 (default app) -Fri Jan 9 08:40:43 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:40:43 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:40:43 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:40:43 2026 - gracefully (RE)spawned uWSGI master process (pid: 1777323) -Fri Jan 9 08:40:43 2026 - spawned uWSGI worker 1 (pid: 1781557, cores: 2) -Fri Jan 9 08:40:43 2026 - spawned uWSGI worker 2 (pid: 1781558, cores: 2) -Fri Jan 9 08:40:43 2026 - spawned uWSGI http 1 (pid: 1781563) -Fri Jan 9 08:40:43 2026 - Python auto-reloader enabled -Fri Jan 9 08:42:17 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:42:17 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:42:17 2026 - gateway "uWSGI http 1" has been buried (pid: 1781563) -Fri Jan 9 08:42:17 2026 - ...gracefully killing workers... -Fri Jan 9 08:42:17 2026 - Gracefully killing worker 2 (pid: 1781558)... -Fri Jan 9 08:42:17 2026 - Gracefully killing worker 1 (pid: 1781557)... -Fri Jan 9 08:42:18 2026 - worker 1 buried after 1 seconds -Fri Jan 9 08:42:18 2026 - worker 2 buried after 1 seconds -Fri Jan 9 08:42:18 2026 - binary reloading uWSGI... -Fri Jan 9 08:42:18 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:42:18 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 08:42:18 2026 - found fd 3 mapped to socket 0 (127.0.0.1:45569) -Fri Jan 9 08:42:18 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 08:42:18 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:42:18 2026] *** -Fri Jan 9 08:42:18 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:42:18 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:42:18 2026 - nodename: ubserver -Fri Jan 9 08:42:18 2026 - machine: x86_64 -Fri Jan 9 08:42:18 2026 - clock source: unix -Fri Jan 9 08:42:18 2026 - pcre jit disabled -Fri Jan 9 08:42:18 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:42:18 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:42:18 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:42:18 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:42:18 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:42:18 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:42:18 2026 - your processes number limit is 61306 -Fri Jan 9 08:42:18 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:42:18 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:42:18 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:42:18 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:42:18 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:42:18 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 08:42:18 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:42537 (port auto-assigned) fd 4 -Fri Jan 9 08:42:18 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:42:18 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:42:18 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:42:18 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:42:18 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:42:18 2026 - Python main interpreter initialized at 0x7186cfb52d10 -Fri Jan 9 08:42:18 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:42:18 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:42:18 2026 - python threads support enabled -Fri Jan 9 08:42:18 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:42:18 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:42:18 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:42:18 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:42:18 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:42:18 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:42:18 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7186cfb52d10 pid: 1777323 (default app) -Fri Jan 9 08:42:18 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:42:18 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:42:18 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:42:18 2026 - gracefully (RE)spawned uWSGI master process (pid: 1777323) -Fri Jan 9 08:42:18 2026 - spawned uWSGI worker 1 (pid: 1782024, cores: 2) -Fri Jan 9 08:42:18 2026 - spawned uWSGI worker 2 (pid: 1782025, cores: 2) -Fri Jan 9 08:42:18 2026 - Python auto-reloader enabled -Fri Jan 9 08:42:18 2026 - spawned uWSGI http 1 (pid: 1782028) -Fri Jan 9 08:42:58 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:42:58 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 08:42:58 2026 - gateway "uWSGI http 1" has been buried (pid: 1782028) -Fri Jan 9 08:42:58 2026 - ...gracefully killing workers... -Fri Jan 9 08:42:58 2026 - Gracefully killing worker 1 (pid: 1782024)... -Fri Jan 9 08:42:58 2026 - Gracefully killing worker 2 (pid: 1782025)... -Fri Jan 9 08:42:59 2026 - worker 1 buried after 1 seconds -Fri Jan 9 08:42:59 2026 - worker 2 buried after 1 seconds -Fri Jan 9 08:42:59 2026 - binary reloading uWSGI... -Fri Jan 9 08:42:59 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:42:59 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 08:42:59 2026 - found fd 4 mapped to socket 0 (127.0.0.1:42537) -Fri Jan 9 08:42:59 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 08:42:59 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:42:59 2026] *** -Fri Jan 9 08:42:59 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:42:59 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:42:59 2026 - nodename: ubserver -Fri Jan 9 08:42:59 2026 - machine: x86_64 -Fri Jan 9 08:42:59 2026 - clock source: unix -Fri Jan 9 08:42:59 2026 - pcre jit disabled -Fri Jan 9 08:42:59 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:42:59 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:42:59 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:42:59 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:42:59 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:42:59 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:42:59 2026 - your processes number limit is 61306 -Fri Jan 9 08:42:59 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:42:59 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:42:59 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:42:59 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:42:59 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:42:59 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 08:42:59 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:35281 (port auto-assigned) fd 3 -Fri Jan 9 08:42:59 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:42:59 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:42:59 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:42:59 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:42:59 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:42:59 2026 - Python main interpreter initialized at 0x70ee77f52d10 -Fri Jan 9 08:42:59 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:42:59 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:42:59 2026 - python threads support enabled -Fri Jan 9 08:42:59 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:42:59 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:42:59 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:42:59 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:43:00 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:43:00 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:43:00 2026 - WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x70ee77f52d10 pid: 1777323 (default app) -Fri Jan 9 08:43:00 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:43:00 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:43:00 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:43:00 2026 - gracefully (RE)spawned uWSGI master process (pid: 1777323) -Fri Jan 9 08:43:00 2026 - spawned uWSGI worker 1 (pid: 1782218, cores: 2) -Fri Jan 9 08:43:00 2026 - spawned uWSGI worker 2 (pid: 1782221, cores: 2) -Fri Jan 9 08:43:00 2026 - Python auto-reloader enabled -Fri Jan 9 08:43:00 2026 - spawned uWSGI http 1 (pid: 1782222) -Fri Jan 9 08:43:31 2026 - gateway "uWSGI http 1" has been buried (pid: 1782222) -Fri Jan 9 08:43:31 2026 - ...brutally killing workers... -Fri Jan 9 08:43:32 2026 - worker 1 buried after 1 seconds -Fri Jan 9 08:43:32 2026 - worker 2 buried after 1 seconds -Fri Jan 9 08:43:32 2026 - binary reloading uWSGI... -Fri Jan 9 08:43:32 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:43:32 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 08:43:32 2026 - found fd 3 mapped to socket 0 (127.0.0.1:35281) -Fri Jan 9 08:43:32 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 08:43:32 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:43:32 2026] *** -Fri Jan 9 08:43:32 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:43:32 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:43:32 2026 - nodename: ubserver -Fri Jan 9 08:43:32 2026 - machine: x86_64 -Fri Jan 9 08:43:32 2026 - clock source: unix -Fri Jan 9 08:43:32 2026 - pcre jit disabled -Fri Jan 9 08:43:32 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:43:32 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:43:32 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:43:32 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:43:32 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:43:32 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:43:32 2026 - your processes number limit is 61306 -Fri Jan 9 08:43:32 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:43:32 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:43:32 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:43:32 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:43:32 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:43:32 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 08:43:32 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:42161 (port auto-assigned) fd 4 -Fri Jan 9 08:43:32 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:43:32 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:43:32 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:43:32 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:43:32 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:43:32 2026 - Python main interpreter initialized at 0x702810152d10 -Fri Jan 9 08:43:32 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:43:32 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:43:32 2026 - python threads support enabled -Fri Jan 9 08:43:32 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:43:32 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:43:32 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:43:32 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:43:32 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:43:32 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:43:32 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x702810152d10 pid: 1777323 (default app) -Fri Jan 9 08:43:32 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:43:32 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:43:32 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:43:32 2026 - gracefully (RE)spawned uWSGI master process (pid: 1777323) -Fri Jan 9 08:43:32 2026 - spawned uWSGI worker 1 (pid: 1782381, cores: 2) -Fri Jan 9 08:43:32 2026 - spawned uWSGI worker 2 (pid: 1782384, cores: 2) -Fri Jan 9 08:43:32 2026 - Python auto-reloader enabled -Fri Jan 9 08:43:32 2026 - spawned uWSGI http 1 (pid: 1782387) -Fri Jan 9 08:43:41 2026 - uWSGI worker 2 error: the master disconnected from this worker. Shutting down the worker. -Fri Jan 9 08:43:41 2026 - uWSGI worker 2 error: the master disconnected from this worker. Shutting down the worker. -Fri Jan 9 08:43:41 2026 - uWSGI worker 1 error: the master disconnected from this worker. Shutting down the worker. -Fri Jan 9 08:43:41 2026 - uWSGI worker 1 error: the master disconnected from this worker. Shutting down the worker. -Fri Jan 9 08:43:41 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 08:43:41 2026] *** -Fri Jan 9 08:43:41 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 08:43:41 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 08:43:41 2026 - nodename: ubserver -Fri Jan 9 08:43:41 2026 - machine: x86_64 -Fri Jan 9 08:43:41 2026 - clock source: unix -Fri Jan 9 08:43:41 2026 - pcre jit disabled -Fri Jan 9 08:43:41 2026 - detected number of CPU cores: 12 -Fri Jan 9 08:43:41 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:43:41 2026 - writing pidfile to ./uwsgi-wechat.pid -Fri Jan 9 08:43:41 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 08:43:41 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:43:41 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:43:41 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 08:43:41 2026 - your processes number limit is 61306 -Fri Jan 9 08:43:41 2026 - your memory page size is 4096 bytes -Fri Jan 9 08:43:41 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 08:43:41 2026 - detected max file descriptor number: 1024 -Fri Jan 9 08:43:41 2026 - lock engine: pthread robust mutexes -Fri Jan 9 08:43:41 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 08:43:41 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 4 -Fri Jan 9 08:43:41 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:46665 (port auto-assigned) fd 3 -Fri Jan 9 08:43:41 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:43:41 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:43:41 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 08:43:41 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:43:41 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 08:43:41 2026 - Python main interpreter initialized at 0x741281352d10 -Fri Jan 9 08:43:41 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:43:41 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:43:41 2026 - python threads support enabled -Fri Jan 9 08:43:41 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 08:43:41 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 08:43:41 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 08:43:41 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 08:43:41 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 08:43:41 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 08:43:41 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x741281352d10 pid: 1782404 (default app) -Fri Jan 9 08:43:41 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 08:43:41 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 08:43:41 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 08:43:41 2026 - spawned uWSGI master process (pid: 1782404) -Fri Jan 9 08:43:41 2026 - spawned uWSGI worker 1 (pid: 1782423, cores: 2) -Fri Jan 9 08:43:41 2026 - spawned uWSGI worker 2 (pid: 1782424, cores: 2) -Fri Jan 9 08:43:41 2026 - spawned uWSGI http 1 (pid: 1782428) -Fri Jan 9 08:43:41 2026 - Python auto-reloader enabled -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: S85Mv12UhBqhnCoEyCf2GdrP0uHiDB61RmzIcmMqk5vRLfhDC7... -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 05a3dac6f360b335ba50de40004324f8668f476b -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 05a3dac6f360b335ba50de40004324f8668f476b -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 09:13:20 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 09:13:20 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 09:13:20 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 09:13:20 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 09:13:20 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 09:13:20 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 09:13:20 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 09:13:20 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 09:13:20 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 09:13:20 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 09:13:20 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 09:13:20 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 09:13:20 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 09:13:20 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:13:20 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: S85Mv12UhBqhnCoEyCf2GdrP0uHiDB61RmzIcmMqk5vRLfhDC7... -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 05a3dac6f360b335ba50de40004324f8668f476b -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 05a3dac6f360b335ba50de40004324f8668f476b -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 09:13:25 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 09:13:25 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 09:13:25 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 09:13:25 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 09:13:25 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:13:25 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: S85Mv12UhBqhnCoEyCf2GdrP0uHiDB61RmzIcmMqk5vRLfhDC7... -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 05a3dac6f360b335ba50de40004324f8668f476b -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 05a3dac6f360b335ba50de40004324f8668f476b -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 09:13:30 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 09:13:30 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 09:13:30 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 09:13:30 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 09:13:30 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 09:13:30 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 09:13:30 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 09:13:30 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 09:13:30 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 09:13:30 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 09:13:30 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 09:13:30 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 09:13:30 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 09:13:30 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:13:30 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: cRRv0gPY6is3KD1jEwXBytUOrRdzu3Db4yWqdjO1eZIZ1lAL+k... -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: e022be893dc3976c41438b805a0559df33dbded5 -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: e022be893dc3976c41438b805a0559df33dbded5 -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 09:13:49 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=system_status, user=WeiJueSen -2026-01-09 09:13:49 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: system_status, user: WeiJueSen -2026-01-09 09:13:49 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求系统状态 -2026-01-09 09:13:49 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 09:13:49 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 09:13:49 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 09:13:49 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -{address space usage: 247619584 bytes/236MB} {rss usage: 60739584 bytes/57MB} [pid: 1782423|app: 0|req: 2/1] 14.116.241.251 () {36 vars in 679 bytes} [Fri Jan 9 09:13:49 2026] POST /api/v1/wechat/callback?msg_signature=e022be893dc3976c41438b805a0559df33dbded5×tamp=1767921229&nonce=1768316751 => generated 798 bytes in 250 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 09:13:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:50 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.49秒 -2026-01-09 09:13:50 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:13:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:13:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:13:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:13:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:13:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:13:51 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:13:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:13:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:13:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:13:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 09:13:52 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:13:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:53 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:13:53 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:13:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:53 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 09:13:53 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:13:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:53 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:13:53 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:13:53 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:13:53 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 09:13:53 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 63 条公告 -2026-01-09 09:13:53 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 63 -> 0 条公告 -2026-01-09 09:13:53 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 09:13:53 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:13:53 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 09:13:53 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 63, 'date_filtered': 1237, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -{address space usage: 254005248 bytes/242MB} {rss usage: 71413760 bytes/68MB} [pid: 1782424|app: 0|req: 2/2] 113.108.92.100 () {36 vars in 678 bytes} [Fri Jan 9 09:13:20 2026] POST /api/v1/wechat/callback?msg_signature=05a3dac6f360b335ba50de40004324f8668f476b×tamp=1767921199&nonce=1768905689 => generated 798 bytes in 33402 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -2026-01-09 09:13:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:55 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.38秒 -2026-01-09 09:13:55 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:13:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:55 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:13:55 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:13:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:55 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:13:55 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:13:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:13:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:13:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:13:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.35秒 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:13:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:13:56 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:13:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:13:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:13:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:13:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:13:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:13:57 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:13:57 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:13:57 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:13:57 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 09:13:57 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 63 条公告 -2026-01-09 09:13:57 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 63 -> 0 条公告 -2026-01-09 09:13:57 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 09:13:57 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:13:57 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 09:13:57 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 63, 'date_filtered': 1237, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -{address space usage: 243519488 bytes/232MB} {rss usage: 61194240 bytes/58MB} [pid: 1782424|app: 0|req: 2/3] 106.55.202.215 () {36 vars in 679 bytes} [Fri Jan 9 09:13:25 2026] POST /api/v1/wechat/callback?msg_signature=05a3dac6f360b335ba50de40004324f8668f476b×tamp=1767921199&nonce=1768905689 => generated 798 bytes in 32920 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 09:14:00 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:00 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.40秒 -2026-01-09 09:14:00 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:14:00 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:00 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:14:00 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:14:01 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:14:01 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:14:01 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.30秒 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:14:01 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:14:01 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:14:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.37秒 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:14:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:14:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:14:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:14:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 09:14:02 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:14:03 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:03 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.14秒 -2026-01-09 09:14:03 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:14:03 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:03 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:03 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:14:03 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:14:03 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 09:14:03 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 63 条公告 -2026-01-09 09:14:03 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 63 -> 0 条公告 -2026-01-09 09:14:03 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 09:14:03 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:14:03 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 09:14:03 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 63, 'date_filtered': 1237, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -{address space usage: 241307648 bytes/230MB} {rss usage: 54820864 bytes/52MB} [pid: 1782423|app: 0|req: 2/4] 106.55.227.187 () {36 vars in 679 bytes} [Fri Jan 9 09:13:30 2026] POST /api/v1/wechat/callback?msg_signature=05a3dac6f360b335ba50de40004324f8668f476b×tamp=1767921199&nonce=1768905689 => generated 798 bytes in 33207 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: gyx7vxH2zqMjazNfk20XsqoWAPeraaE5WmiJ8W2KXSNI9Nm0eA... -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 2f7b8f2f76bd50a36fbd191142f5ff1e3803157e -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 2f7b8f2f76bd50a36fbd191142f5ff1e3803157e -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 09:14:09 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=keyword_search, user=WeiJueSen -2026-01-09 09:14:09 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: keyword_search, user: WeiJueSen -2026-01-09 09:14:09 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 触发关键词搜索菜单 -{address space usage: 243519488 bytes/232MB} {rss usage: 61194240 bytes/58MB} [pid: 1782424|app: 0|req: 3/5] 183.47.117.101 () {36 vars in 679 bytes} [Fri Jan 9 09:14:09 2026] POST /api/v1/wechat/callback?msg_signature=2f7b8f2f76bd50a36fbd191142f5ff1e3803157e×tamp=1767921249&nonce=1767999424 => generated 1054 bytes in 0 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0) -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: mysaThIKeH57rqN/s+0oiaicH1gDxV8MkDM2SIOVR4luy0quyh... -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 09:14:17 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 09:14:17 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 09:14:17 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 09:14:17 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 09:14:17 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:14:17 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: mysaThIKeH57rqN/s+0oiaicH1gDxV8MkDM2SIOVR4luy0quyh... -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 09:14:22 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 09:14:22 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 09:14:22 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 09:14:22 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 09:14:22 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:14:22 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: mp1j++4grFMsPYo7YXgXOf1C52HWtxx6qWCHvAyMy1HL8SBUqf... -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 501bf3b1b00e3662707a0775828f2eb273c49efe -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 501bf3b1b00e3662707a0775828f2eb273c49efe -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=crawl_now, user=WeiJueSen -2026-01-09 09:14:27 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: crawl_now, user: WeiJueSen -2026-01-09 09:14:27 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 触发立即搜索 -2026-01-09 09:14:27 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: False) -2026-01-09 09:14:27 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:14:27 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: mysaThIKeH57rqN/s+0oiaicH1gDxV8MkDM2SIOVR4luy0quyh... -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 09:14:27 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 09:14:27 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 09:14:27 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 09:14:27 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 09:14:27 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 09:14:27 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 09:14:27 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:27 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.40秒 -2026-01-09 09:14:27 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:14:27 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:27 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:27 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:14:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:14:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:14:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:14:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:14:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.35秒 -2026-01-09 09:14:28 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:14:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:14:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:14:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:14:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:14:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:14:29 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:14:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:30 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:30 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 开始按来源保存 1300 条公告,每个来源最多保留 100 条 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement1 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement2 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement3 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement4 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement5 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement6 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement7 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement10 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement11 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement20 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement21 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 ZcyAnnouncement23 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.core.database - INFO - 批量保存公告完成,成功保存 0 条 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 来源 61-266648 保存了 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.storage.postgresql - INFO - 按来源保存完成,总计保存 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.main - INFO - 保存所有公告完成:共保存 0 条,按来源统计: {'ZcyAnnouncement1': 0, 'ZcyAnnouncement2': 0, 'ZcyAnnouncement3': 0, 'ZcyAnnouncement4': 0, 'ZcyAnnouncement5': 0, 'ZcyAnnouncement6': 0, 'ZcyAnnouncement7': 0, 'ZcyAnnouncement10': 0, 'ZcyAnnouncement11': 0, 'ZcyAnnouncement20': 0, 'ZcyAnnouncement21': 0, 'ZcyAnnouncement23': 0, '61-266648': 0} -2026-01-09 09:14:30 - gx_gp_monitor.main - INFO - 筛选出 1300 条新公告 -2026-01-09 09:14:30 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1300 -> 1300 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.filters.filters - INFO - 去重筛选: 移除了 1300 条重复公告 -2026-01-09 09:14:30 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 0 -> 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.filters.filters - INFO - 筛选完成: 总数 1300 -> 筛选后 0 (关键词: 0, 日期: 0, 去重: 1300, 来源: 0) -2026-01-09 09:14:30 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:14:30 - gx_gp_monitor.storage.md_generator - INFO - Markdown文件已保存到: onu.md (共 0 条公告) -2026-01-09 09:14:30 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': True, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 1300, 'date_filtered': 0, 'duplicate_filtered': 1300, 'source_filtered': 0}} -{address space usage: 252985344 bytes/241MB} {rss usage: 71553024 bytes/68MB} [pid: 1782424|app: 0|req: 5/6] 183.47.98.227 () {36 vars in 678 bytes} [Fri Jan 9 09:14:27 2026] POST /api/v1/wechat/callback?msg_signature=501bf3b1b00e3662707a0775828f2eb273c49efe×tamp=1767921267&nonce=1768019490 => generated 754 bytes in 3328 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -2026-01-09 09:14:47 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:47 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.54秒 -2026-01-09 09:14:47 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:14:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:14:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:14:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:14:48 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:14:48 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:14:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:14:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.38秒 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:14:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:14:49 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:14:49 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:14:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:14:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:14:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:14:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:50 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:14:50 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:14:50 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:14:50 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 09:14:50 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 66 条公告 -2026-01-09 09:14:50 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 66 -> 0 条公告 -2026-01-09 09:14:50 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 09:14:50 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:14:50 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 09:14:50 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 66, 'date_filtered': 1234, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -{address space usage: 247742464 bytes/236MB} {rss usage: 66420736 bytes/63MB} [pid: 1782424|app: 0|req: 5/7] 183.47.117.101 () {36 vars in 679 bytes} [Fri Jan 9 09:14:17 2026] POST /api/v1/wechat/callback?msg_signature=204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa×tamp=1767921257&nonce=1768264184 => generated 798 bytes in 33167 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 09:14:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.55秒 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:14:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.28秒 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:14:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:14:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:14:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:14:53 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:14:54 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:14:54 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.39秒 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:14:54 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:14:54 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 09:14:54 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:14:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:14:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:14:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:14:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:55 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:55 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:14:55 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:14:55 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 09:14:55 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 66 条公告 -2026-01-09 09:14:55 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 66 -> 0 条公告 -2026-01-09 09:14:55 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 09:14:55 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:14:55 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 09:14:55 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 66, 'date_filtered': 1234, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -{address space usage: 253407232 bytes/241MB} {rss usage: 72110080 bytes/68MB} [pid: 1782423|app: 0|req: 4/8] 106.55.201.217 () {36 vars in 679 bytes} [Fri Jan 9 09:14:22 2026] POST /api/v1/wechat/callback?msg_signature=204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa×tamp=1767921257&nonce=1768264184 => generated 798 bytes in 33282 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 09:14:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:57 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.37秒 -2026-01-09 09:14:57 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 09:14:58 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 09:14:58 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 09:14:58 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 09:14:58 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 09:14:58 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 09:14:58 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 09:14:59 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.41秒 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 09:14:59 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 09:14:59 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 09:14:59 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:14:59 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 09:15:00 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:15:00 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 09:15:00 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 09:15:00 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:15:00 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 09:15:00 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 09:15:00 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 09:15:00 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 09:15:00 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 09:15:00 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 09:15:00 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 09:15:00 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 66 条公告 -2026-01-09 09:15:00 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 66 -> 0 条公告 -2026-01-09 09:15:00 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 09:15:00 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 09:15:00 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 09:15:00 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 66, 'date_filtered': 1234, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -{address space usage: 243441664 bytes/232MB} {rss usage: 62099456 bytes/59MB} [pid: 1782423|app: 0|req: 4/9] 106.55.227.187 () {36 vars in 678 bytes} [Fri Jan 9 09:14:27 2026] POST /api/v1/wechat/callback?msg_signature=204c42bde1a4e8aad7b3d4f5b2ef8c3145b538fa×tamp=1767921257&nonce=1768264184 => generated 798 bytes in 33163 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -Fri Jan 9 10:01:03 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:01:03 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:01:03 2026 - gateway "uWSGI http 1" has been buried (pid: 1782428) -Fri Jan 9 10:01:03 2026 - ...gracefully killing workers... -Fri Jan 9 10:01:03 2026 - Gracefully killing worker 1 (pid: 1782423)... -Fri Jan 9 10:01:03 2026 - Gracefully killing worker 2 (pid: 1782424)... -Fri Jan 9 10:01:04 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:01:04 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:01:04 2026 - binary reloading uWSGI... -Fri Jan 9 10:01:04 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:01:04 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:01:04 2026 - found fd 3 mapped to socket 0 (127.0.0.1:46665) -Fri Jan 9 10:01:04 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:01:04 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:01:04 2026] *** -Fri Jan 9 10:01:04 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:01:04 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:01:04 2026 - nodename: ubserver -Fri Jan 9 10:01:04 2026 - machine: x86_64 -Fri Jan 9 10:01:04 2026 - clock source: unix -Fri Jan 9 10:01:04 2026 - pcre jit disabled -Fri Jan 9 10:01:04 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:01:04 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:01:04 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:01:04 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:01:04 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:01:04 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:01:04 2026 - your processes number limit is 61306 -Fri Jan 9 10:01:04 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:01:04 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:01:04 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:01:04 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:01:04 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:01:04 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:01:04 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:40683 (port auto-assigned) fd 4 -Fri Jan 9 10:01:04 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:01:04 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:01:04 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:01:04 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:01:04 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:01:04 2026 - Python main interpreter initialized at 0x7dd050352d10 -Fri Jan 9 10:01:04 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:01:04 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:01:04 2026 - python threads support enabled -Fri Jan 9 10:01:04 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:01:04 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:01:04 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:01:04 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:01:05 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:01:05 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:01:05 2026 - WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x7dd050352d10 pid: 1782404 (default app) -Fri Jan 9 10:01:05 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:01:05 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:01:05 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:01:05 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:01:05 2026 - spawned uWSGI worker 1 (pid: 1807020, cores: 2) -Fri Jan 9 10:01:05 2026 - spawned uWSGI worker 2 (pid: 1807023, cores: 2) -Fri Jan 9 10:01:05 2026 - Python auto-reloader enabled -Fri Jan 9 10:01:05 2026 - spawned uWSGI http 1 (pid: 1807025) -Fri Jan 9 10:01:13 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:01:13 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:01:13 2026 - gateway "uWSGI http 1" has been buried (pid: 1807025) -Fri Jan 9 10:01:13 2026 - ...gracefully killing workers... -Fri Jan 9 10:01:13 2026 - Gracefully killing worker 1 (pid: 1807020)... -Fri Jan 9 10:01:13 2026 - Gracefully killing worker 2 (pid: 1807023)... -Fri Jan 9 10:01:14 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:01:14 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:01:14 2026 - binary reloading uWSGI... -Fri Jan 9 10:01:14 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:01:14 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:01:14 2026 - found fd 4 mapped to socket 0 (127.0.0.1:40683) -Fri Jan 9 10:01:14 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:01:14 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:01:14 2026] *** -Fri Jan 9 10:01:14 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:01:14 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:01:14 2026 - nodename: ubserver -Fri Jan 9 10:01:14 2026 - machine: x86_64 -Fri Jan 9 10:01:14 2026 - clock source: unix -Fri Jan 9 10:01:14 2026 - pcre jit disabled -Fri Jan 9 10:01:14 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:01:14 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:01:14 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:01:14 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:01:14 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:01:14 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:01:14 2026 - your processes number limit is 61306 -Fri Jan 9 10:01:14 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:01:14 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:01:14 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:01:14 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:01:14 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:01:14 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:01:14 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:44999 (port auto-assigned) fd 3 -Fri Jan 9 10:01:14 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:01:14 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:01:14 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:01:14 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:01:14 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:01:14 2026 - Python main interpreter initialized at 0x7eae0ff52d10 -Fri Jan 9 10:01:14 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:01:14 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:01:14 2026 - python threads support enabled -Fri Jan 9 10:01:14 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:01:14 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:01:14 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:01:14 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:01:14 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:01:14 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:01:14 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7eae0ff52d10 pid: 1782404 (default app) -Fri Jan 9 10:01:14 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:01:14 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:01:14 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:01:14 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:01:14 2026 - spawned uWSGI worker 1 (pid: 1807115, cores: 2) -Fri Jan 9 10:01:14 2026 - spawned uWSGI worker 2 (pid: 1807118, cores: 2) -Fri Jan 9 10:01:14 2026 - Python auto-reloader enabled -Fri Jan 9 10:01:14 2026 - spawned uWSGI http 1 (pid: 1807121) -Fri Jan 9 10:01:29 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:01:29 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:01:29 2026 - gateway "uWSGI http 1" has been buried (pid: 1807121) -Fri Jan 9 10:01:29 2026 - ...gracefully killing workers... -Fri Jan 9 10:01:29 2026 - Gracefully killing worker 2 (pid: 1807118)... -Fri Jan 9 10:01:29 2026 - Gracefully killing worker 1 (pid: 1807115)... -Fri Jan 9 10:01:30 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:01:30 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:01:30 2026 - binary reloading uWSGI... -Fri Jan 9 10:01:30 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:01:30 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:01:30 2026 - found fd 3 mapped to socket 0 (127.0.0.1:44999) -Fri Jan 9 10:01:30 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:01:30 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:01:30 2026] *** -Fri Jan 9 10:01:30 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:01:30 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:01:30 2026 - nodename: ubserver -Fri Jan 9 10:01:30 2026 - machine: x86_64 -Fri Jan 9 10:01:30 2026 - clock source: unix -Fri Jan 9 10:01:30 2026 - pcre jit disabled -Fri Jan 9 10:01:30 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:01:30 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:01:30 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:01:30 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:01:30 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:01:30 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:01:30 2026 - your processes number limit is 61306 -Fri Jan 9 10:01:30 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:01:30 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:01:30 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:01:30 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:01:30 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:01:30 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:01:30 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:46169 (port auto-assigned) fd 4 -Fri Jan 9 10:01:30 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:01:30 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:01:30 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:01:30 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:01:30 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:01:30 2026 - Python main interpreter initialized at 0x7a0e7a752d10 -Fri Jan 9 10:01:30 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:01:30 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:01:30 2026 - python threads support enabled -Fri Jan 9 10:01:30 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:01:30 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:01:30 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:01:30 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:01:30 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:01:30 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:01:30 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7a0e7a752d10 pid: 1782404 (default app) -Fri Jan 9 10:01:30 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:01:30 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:01:30 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:01:30 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:01:30 2026 - spawned uWSGI worker 1 (pid: 1807173, cores: 2) -Fri Jan 9 10:01:30 2026 - spawned uWSGI worker 2 (pid: 1807174, cores: 2) -Fri Jan 9 10:01:30 2026 - spawned uWSGI http 1 (pid: 1807177) -Fri Jan 9 10:01:30 2026 - Python auto-reloader enabled -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: fl+xWhqaMMamwSp+ChWaJEvMtidFRZHUX4thfSYmtYqGtoWwkg... -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 84c30ad0c256e1dc1766b83a7afdcc9e2452102b -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 84c30ad0c256e1dc1766b83a7afdcc9e2452102b -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:02:17 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 10:02:17 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 10:02:17 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 10:02:17 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:02:17 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:02:17 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:02:17 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:02:18 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:02:18 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:02:18 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:02:18 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:02:18 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:02:18 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:02:18 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:02:18 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: fl+xWhqaMMamwSp+ChWaJEvMtidFRZHUX4thfSYmtYqGtoWwkg... -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 84c30ad0c256e1dc1766b83a7afdcc9e2452102b -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 84c30ad0c256e1dc1766b83a7afdcc9e2452102b -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:02:22 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 10:02:22 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 10:02:22 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 10:02:22 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:02:22 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:02:22 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:02:23 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:02:23 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:02:23 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:02:23 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:02:23 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:02:23 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:02:23 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:02:23 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:02:23 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: fl+xWhqaMMamwSp+ChWaJEvMtidFRZHUX4thfSYmtYqGtoWwkg... -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 84c30ad0c256e1dc1766b83a7afdcc9e2452102b -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 84c30ad0c256e1dc1766b83a7afdcc9e2452102b -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:02:27 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 10:02:27 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 10:02:27 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 10:02:27 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:02:27 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:02:27 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:02:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:28 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.39秒 -2026-01-09 10:02:28 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:02:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:28 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:02:28 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:02:28 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:28 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:02:28 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:02:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:02:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:02:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:02:29 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.40秒 -2026-01-09 10:02:29 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:02:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:02:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:02:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:02:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:02:30 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:02:30 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:02:31 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:31 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:02:31 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:02:31 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:02:31 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:02:31 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 134 条公告 -2026-01-09 10:02:31 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 134 -> 2 条公告 -2026-01-09 10:02:31 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:02:31 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:02:31 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:02:31 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 132, 'date_filtered': 1166, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 2, 29, 544509), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 2, 29, 948741), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -{address space usage: 250855424 bytes/239MB} {rss usage: 68419584 bytes/65MB} [pid: 1807174|app: 0|req: 2/1] 112.53.2.93 () {36 vars in 676 bytes} [Fri Jan 9 10:02:27 2026] POST /api/v1/wechat/callback?msg_signature=84c30ad0c256e1dc1766b83a7afdcc9e2452102b×tamp=1767924137&nonce=1768656856 => generated 710 bytes in 3221 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -Fri Jan 9 10:02:47 2026 - *** HARAKIRI ON WORKER 1 (pid: 1807173, try: 1, graceful: yes) *** -Fri Jan 9 10:02:47 2026 - HARAKIRI !!! worker 1 status !!! -Fri Jan 9 10:02:47 2026 - HARAKIRI [core 0] 183.47.98.227 - POST /api/v1/wechat/callback?msg_signature=84c30ad0c256e1dc1766b83a7afdcc9e2452102b×tamp=1767924137&nonce=1768656856 since 1767924137 -Fri Jan 9 10:02:47 2026 - HARAKIRI !!! end of worker 1 status !!! -Fri Jan 9 10:02:47 2026 - HARAKIRI triggered by worker 1 core 0 !!! -Fri Jan 9 10:02:48 2026 - DAMN ! worker 1 (pid: 1807173) died, killed by signal 9 :( trying respawn ... -Fri Jan 9 10:02:48 2026 - Respawned uWSGI worker 1 (new pid: 1807577) -Fri Jan 9 10:02:48 2026 - Python auto-reloader enabled -2026-01-09 10:02:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:53 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.41秒 -2026-01-09 10:02:53 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:02:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:53 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:02:53 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:02:53 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:53 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:02:53 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:02:54 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:54 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:02:54 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:02:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.89秒 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:02:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:02:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.42秒 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:02:55 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:02:55 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:02:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:02:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:02:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:02:56 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.29秒 -2026-01-09 10:02:56 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:02:57 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:02:57 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:02:57 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:02:57 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:02:57 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:02:57 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 135 条公告 -2026-01-09 10:02:57 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 135 -> 2 条公告 -2026-01-09 10:02:57 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:02:57 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:02:57 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:02:57 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 133, 'date_filtered': 1165, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 2, 55, 251692), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 2, 55, 671160), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -{address space usage: 243552256 bytes/232MB} {rss usage: 61341696 bytes/58MB} [pid: 1807174|app: 0|req: 2/2] 106.55.202.215 () {36 vars in 679 bytes} [Fri Jan 9 10:02:22 2026] POST /api/v1/wechat/callback?msg_signature=84c30ad0c256e1dc1766b83a7afdcc9e2452102b×tamp=1767924137&nonce=1768656856 => generated 710 bytes in 34214 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 5DXzoSk72rLPjWkQPcghu1KqCusBzSYPZGb4sg1eEU8I08mw4c... -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 545f8abd520fa65851b3da066d1d47be9c61b45c -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 545f8abd520fa65851b3da066d1d47be9c61b45c -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:09:36 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 10:09:36 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 10:09:36 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 10:09:36 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:09:37 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:09:37 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:09:37 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 5DXzoSk72rLPjWkQPcghu1KqCusBzSYPZGb4sg1eEU8I08mw4c... -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 545f8abd520fa65851b3da066d1d47be9c61b45c -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 545f8abd520fa65851b3da066d1d47be9c61b45c -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:09:41 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 10:09:41 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 10:09:41 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 10:09:41 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:09:41 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:09:41 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:09:42 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:09:42 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:09:42 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:09:42 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:09:42 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:09:42 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:09:42 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:09:42 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:09:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.37秒 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:09:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:09:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:09:42 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:09:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:09:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:09:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:09:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.32秒 -2026-01-09 10:09:43 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:09:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:09:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:09:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:09:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:09:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:09:44 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:09:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:09:45 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:09:45 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:09:45 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:09:45 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:09:45 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 147 条公告 -2026-01-09 10:09:45 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 147 -> 0 条公告 -2026-01-09 10:09:45 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 10:09:45 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 10:09:45 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:09:45 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 147, 'date_filtered': 1153, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -{address space usage: 240259072 bytes/229MB} {rss usage: 52899840 bytes/50MB} [pid: 1807577|app: 0|req: 2/3] 106.55.202.215 () {36 vars in 679 bytes} [Fri Jan 9 10:09:41 2026] POST /api/v1/wechat/callback?msg_signature=545f8abd520fa65851b3da066d1d47be9c61b45c×tamp=1767924576&nonce=1768748800 => generated 798 bytes in 3164 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: EV/PxbQk0Wr980DlO57RfvBpRIvjlxPWion7LkljkQDVheF4pF... -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 970dc8e6b91fb5479eb69edcabd6f966f6225465 -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 970dc8e6b91fb5479eb69edcabd6f966f6225465 -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 10:09:57 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=latest_news, user=WeiJueSen -2026-01-09 10:09:57 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: latest_news, user: WeiJueSen -2026-01-09 10:09:57 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求最新公告 -{address space usage: 254078976 bytes/242MB} {rss usage: 71958528 bytes/68MB} [pid: 1807174|app: 0|req: 4/4] 183.47.98.227 () {36 vars in 678 bytes} [Fri Jan 9 10:09:57 2026] POST /api/v1/wechat/callback?msg_signature=970dc8e6b91fb5479eb69edcabd6f966f6225465×tamp=1767924597&nonce=1767910694 => generated 343198 bytes in 32 msecs (HTTP/1.1 200) 2 headers in 83 bytes (1 switches on core 0) -2026-01-09 10:10:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:07 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.46秒 -2026-01-09 10:10:07 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:10:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:07 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:10:07 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:10:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:10:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:10:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:10:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:10:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.32秒 -2026-01-09 10:10:08 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:10:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:10:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:10:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:10:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:10:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:10:09 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:10:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:10:10 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:10:10 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:10:10 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:10:10 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:10:10 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 149 条公告 -2026-01-09 10:10:10 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 149 -> 0 条公告 -2026-01-09 10:10:10 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 0 -> 0 条公告 -2026-01-09 10:10:10 - gx_gp_monitor.main - INFO - 筛选后剩余 0 条公告 -2026-01-09 10:10:10 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:10:10 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 0, 'saved': 0, 'markdown_generated': False, 'notification_sent': False, 'filter_stats': {'keyword_filtered': 149, 'date_filtered': 1151, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': []} -{address space usage: 247787520 bytes/236MB} {rss usage: 60436480 bytes/57MB} [pid: 1807174|app: 0|req: 4/5] 14.116.241.251 () {36 vars in 679 bytes} [Fri Jan 9 10:09:36 2026] POST /api/v1/wechat/callback?msg_signature=545f8abd520fa65851b3da066d1d47be9c61b45c×tamp=1767924576&nonce=1768748800 => generated 798 bytes in 33166 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: 7oYpd6+5fsif46fnY3VTPqPcdhC2dlaybw3TzI3H44K2DFDpGL... -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 0cb188a04afb33504e72c7cad29ac0e1050a5d49 -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 0cb188a04afb33504e72c7cad29ac0e1050a5d49 -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 10:25:42 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=today_stats, user=WeiJueSen -2026-01-09 10:25:42 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: today_stats, user: WeiJueSen -2026-01-09 10:25:42 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求今日统计 -{address space usage: 240259072 bytes/229MB} {rss usage: 52899840 bytes/50MB} [pid: 1807577|app: 0|req: 3/6] 183.47.98.168 () {36 vars in 678 bytes} [Fri Jan 9 10:25:42 2026] POST /api/v1/wechat/callback?msg_signature=0cb188a04afb33504e72c7cad29ac0e1050a5d49×tamp=1767925542&nonce=1768148594 => generated 966 bytes in 5 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: zEWl1m4Dcc4egm7eYKtlGk5Qxl/3qanWwWJBr1lrnBUigFykbr... -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 79e58abff8031c45f7d7639552e7e693239370b0 -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 79e58abff8031c45f7d7639552e7e693239370b0 -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:26:11 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 10:26:11 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 10:26:11 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 10:26:11 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:26:11 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:26:11 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:26:11 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:26:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.52秒 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:26:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:26:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:26:12 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:26:12 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:26:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:26:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:26:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.33秒 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:26:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:26:13 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:26:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:26:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:26:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:26:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:26:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:26:14 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:26:14 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:26:14 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:26:14 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:26:14 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 175 条公告 -2026-01-09 10:26:14 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 175 -> 2 条公告 -2026-01-09 10:26:14 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:26:14 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:26:14 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:26:14 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 173, 'date_filtered': 1125, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 26, 13, 304523), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 26, 13, 633593), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -{address space usage: 248066048 bytes/236MB} {rss usage: 61984768 bytes/59MB} [pid: 1807174|app: 0|req: 5/7] 183.47.117.101 () {36 vars in 679 bytes} [Fri Jan 9 10:26:11 2026] POST /api/v1/wechat/callback?msg_signature=79e58abff8031c45f7d7639552e7e693239370b0×tamp=1767925571&nonce=1768415184 => generated 710 bytes in 3234 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -Fri Jan 9 10:26:39 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:26:39 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:26:39 2026 - gateway "uWSGI http 1" has been buried (pid: 1807177) -Fri Jan 9 10:26:39 2026 - ...gracefully killing workers... -Fri Jan 9 10:26:39 2026 - Gracefully killing worker 2 (pid: 1807174)... -Fri Jan 9 10:26:39 2026 - Gracefully killing worker 1 (pid: 1807577)... -Fri Jan 9 10:26:40 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:26:40 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:26:40 2026 - binary reloading uWSGI... -Fri Jan 9 10:26:40 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:26:40 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:26:40 2026 - found fd 4 mapped to socket 0 (127.0.0.1:46169) -Fri Jan 9 10:26:40 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:26:40 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:26:40 2026] *** -Fri Jan 9 10:26:40 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:26:40 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:26:40 2026 - nodename: ubserver -Fri Jan 9 10:26:40 2026 - machine: x86_64 -Fri Jan 9 10:26:40 2026 - clock source: unix -Fri Jan 9 10:26:40 2026 - pcre jit disabled -Fri Jan 9 10:26:40 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:26:40 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:26:40 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:26:40 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:26:40 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:26:40 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:26:40 2026 - your processes number limit is 61306 -Fri Jan 9 10:26:40 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:26:40 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:26:40 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:26:40 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:26:40 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:26:40 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:26:40 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:33603 (port auto-assigned) fd 3 -Fri Jan 9 10:26:40 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:26:40 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:26:40 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:26:40 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:26:40 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:26:40 2026 - Python main interpreter initialized at 0x7ff54c352d10 -Fri Jan 9 10:26:40 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:26:40 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:26:40 2026 - python threads support enabled -Fri Jan 9 10:26:40 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:26:40 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:26:40 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:26:40 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:26:40 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:26:40 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:26:40 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7ff54c352d10 pid: 1782404 (default app) -Fri Jan 9 10:26:40 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:26:40 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:26:40 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:26:40 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:26:40 2026 - spawned uWSGI worker 1 (pid: 1815128, cores: 2) -Fri Jan 9 10:26:40 2026 - spawned uWSGI worker 2 (pid: 1815129, cores: 2) -Fri Jan 9 10:26:40 2026 - spawned uWSGI http 1 (pid: 1815134) -Fri Jan 9 10:26:40 2026 - Python auto-reloader enabled -Fri Jan 9 10:26:58 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:26:58 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:26:58 2026 - gateway "uWSGI http 1" has been buried (pid: 1815134) -Fri Jan 9 10:26:58 2026 - ...gracefully killing workers... -Fri Jan 9 10:26:58 2026 - Gracefully killing worker 1 (pid: 1815128)... -Fri Jan 9 10:26:58 2026 - Gracefully killing worker 2 (pid: 1815129)... -Fri Jan 9 10:26:59 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:26:59 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:26:59 2026 - binary reloading uWSGI... -Fri Jan 9 10:26:59 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:26:59 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:26:59 2026 - found fd 3 mapped to socket 0 (127.0.0.1:33603) -Fri Jan 9 10:26:59 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:26:59 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:26:59 2026] *** -Fri Jan 9 10:26:59 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:26:59 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:26:59 2026 - nodename: ubserver -Fri Jan 9 10:26:59 2026 - machine: x86_64 -Fri Jan 9 10:26:59 2026 - clock source: unix -Fri Jan 9 10:26:59 2026 - pcre jit disabled -Fri Jan 9 10:26:59 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:26:59 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:26:59 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:26:59 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:26:59 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:26:59 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:26:59 2026 - your processes number limit is 61306 -Fri Jan 9 10:26:59 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:26:59 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:26:59 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:26:59 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:26:59 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:26:59 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:26:59 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:34087 (port auto-assigned) fd 4 -Fri Jan 9 10:26:59 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:26:59 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:26:59 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:26:59 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:26:59 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:26:59 2026 - Python main interpreter initialized at 0x70eb6dd52d10 -Fri Jan 9 10:26:59 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:26:59 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:26:59 2026 - python threads support enabled -Fri Jan 9 10:26:59 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:26:59 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:26:59 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:26:59 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:26:59 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:26:59 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:26:59 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x70eb6dd52d10 pid: 1782404 (default app) -Fri Jan 9 10:26:59 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:26:59 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:26:59 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:26:59 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:26:59 2026 - spawned uWSGI worker 1 (pid: 1815194, cores: 2) -Fri Jan 9 10:26:59 2026 - spawned uWSGI worker 2 (pid: 1815197, cores: 2) -Fri Jan 9 10:26:59 2026 - spawned uWSGI http 1 (pid: 1815198) -Fri Jan 9 10:26:59 2026 - Python auto-reloader enabled -Fri Jan 9 10:27:10 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:27:10 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:27:10 2026 - gateway "uWSGI http 1" has been buried (pid: 1815198) -Fri Jan 9 10:27:10 2026 - ...gracefully killing workers... -Fri Jan 9 10:27:10 2026 - Gracefully killing worker 1 (pid: 1815194)... -Fri Jan 9 10:27:10 2026 - Gracefully killing worker 2 (pid: 1815197)... -Fri Jan 9 10:27:11 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:27:11 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:27:11 2026 - binary reloading uWSGI... -Fri Jan 9 10:27:11 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:27:11 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:27:11 2026 - found fd 4 mapped to socket 0 (127.0.0.1:34087) -Fri Jan 9 10:27:11 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:27:11 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:27:11 2026] *** -Fri Jan 9 10:27:11 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:27:11 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:27:11 2026 - nodename: ubserver -Fri Jan 9 10:27:11 2026 - machine: x86_64 -Fri Jan 9 10:27:11 2026 - clock source: unix -Fri Jan 9 10:27:11 2026 - pcre jit disabled -Fri Jan 9 10:27:11 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:27:11 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:27:11 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:27:11 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:27:11 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:27:11 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:27:11 2026 - your processes number limit is 61306 -Fri Jan 9 10:27:11 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:27:11 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:27:11 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:27:11 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:27:11 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:27:11 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:27:11 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:34323 (port auto-assigned) fd 3 -Fri Jan 9 10:27:11 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:27:11 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:27:11 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:27:11 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:27:11 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:27:11 2026 - Python main interpreter initialized at 0x75f740b52d10 -Fri Jan 9 10:27:11 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:27:11 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:27:11 2026 - python threads support enabled -Fri Jan 9 10:27:11 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:27:11 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:27:11 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:27:11 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:27:11 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:27:11 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:27:11 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x75f740b52d10 pid: 1782404 (default app) -Fri Jan 9 10:27:11 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:27:11 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:27:11 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:27:11 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:27:11 2026 - spawned uWSGI worker 1 (pid: 1815286, cores: 2) -Fri Jan 9 10:27:11 2026 - spawned uWSGI worker 2 (pid: 1815287, cores: 2) -Fri Jan 9 10:27:11 2026 - spawned uWSGI http 1 (pid: 1815291) -Fri Jan 9 10:27:11 2026 - Python auto-reloader enabled -Fri Jan 9 10:27:55 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:27:55 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:27:55 2026 - gateway "uWSGI http 1" has been buried (pid: 1815291) -Fri Jan 9 10:27:55 2026 - ...gracefully killing workers... -Fri Jan 9 10:27:55 2026 - Gracefully killing worker 2 (pid: 1815287)... -Fri Jan 9 10:27:55 2026 - Gracefully killing worker 1 (pid: 1815286)... -Fri Jan 9 10:27:56 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:27:56 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:27:56 2026 - binary reloading uWSGI... -Fri Jan 9 10:27:56 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:27:56 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:27:56 2026 - found fd 3 mapped to socket 0 (127.0.0.1:34323) -Fri Jan 9 10:27:56 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:27:56 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:27:56 2026] *** -Fri Jan 9 10:27:56 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:27:56 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:27:56 2026 - nodename: ubserver -Fri Jan 9 10:27:56 2026 - machine: x86_64 -Fri Jan 9 10:27:56 2026 - clock source: unix -Fri Jan 9 10:27:56 2026 - pcre jit disabled -Fri Jan 9 10:27:56 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:27:56 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:27:56 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:27:56 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:27:56 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:27:56 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:27:56 2026 - your processes number limit is 61306 -Fri Jan 9 10:27:56 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:27:56 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:27:56 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:27:56 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:27:56 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:27:56 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:27:56 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:37353 (port auto-assigned) fd 4 -Fri Jan 9 10:27:56 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:27:56 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:27:56 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:27:56 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:27:56 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:27:56 2026 - Python main interpreter initialized at 0x70c237752d10 -Fri Jan 9 10:27:56 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:27:56 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:27:56 2026 - python threads support enabled -Fri Jan 9 10:27:56 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:27:56 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:27:56 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:27:56 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:27:57 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:27:57 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:27:57 2026 - WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x70c237752d10 pid: 1782404 (default app) -Fri Jan 9 10:27:57 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:27:57 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:27:57 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:27:57 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:27:57 2026 - spawned uWSGI worker 1 (pid: 1817209, cores: 2) -Fri Jan 9 10:27:57 2026 - spawned uWSGI worker 2 (pid: 1817210, cores: 2) -Fri Jan 9 10:27:57 2026 - spawned uWSGI http 1 (pid: 1817215) -Fri Jan 9 10:27:57 2026 - Python auto-reloader enabled -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: YS7RBuNL221aid+SSC+nfDV0AAkZe5xnflVEtA7MzaK+UyqoW9... -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 1f8d0c119a8bcbf6913ed06e9991c3166b6bbb18 -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 1f8d0c119a8bcbf6913ed06e9991c3166b6bbb18 -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 10:28:19 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=latest_news, user=WeiJueSen -2026-01-09 10:28:19 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: latest_news, user: WeiJueSen -2026-01-09 10:28:19 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求最新公告 -{address space usage: 233709568 bytes/222MB} {rss usage: 38821888 bytes/37MB} [pid: 1817210|app: 0|req: 1/1] 183.47.98.227 () {36 vars in 677 bytes} [Fri Jan 9 10:28:19 2026] POST /api/v1/wechat/callback?msg_signature=1f8d0c119a8bcbf6913ed06e9991c3166b6bbb18×tamp=1767925699&nonce=1768209024 => generated 1394 bytes in 6 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0) -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 428 -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: zozV9O7eNAXcdK29PH30oG9UiS7hzONGFKXLc8G2pk0fhAFnIz... -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 10442844f4f723747edcf1925bed5e7903432b59 -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 10442844f4f723747edcf1925bed5e7903432b59 -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:28:25 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=1..., user=WeiJueSen -2026-01-09 10:28:25 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 1, user: WeiJueSen -2026-01-09 10:28:25 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 选择公告来源: 1 -2026-01-09 10:28:25 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -{address space usage: 239050752 bytes/227MB} {rss usage: 48840704 bytes/46MB} [pid: 1817209|app: 0|req: 1/2] 14.116.241.251 () {36 vars in 679 bytes} [Fri Jan 9 10:28:25 2026] POST /api/v1/wechat/callback?msg_signature=10442844f4f723747edcf1925bed5e7903432b59×tamp=1767925705&nonce=1768668050 => generated 2502 bytes in 69 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0) -Fri Jan 9 10:28:49 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:28:49 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:28:49 2026 - gateway "uWSGI http 1" has been buried (pid: 1817215) -Fri Jan 9 10:28:49 2026 - ...gracefully killing workers... -Fri Jan 9 10:28:49 2026 - Gracefully killing worker 1 (pid: 1817209)... -Fri Jan 9 10:28:49 2026 - Gracefully killing worker 2 (pid: 1817210)... -Fri Jan 9 10:28:50 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:28:50 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:28:50 2026 - binary reloading uWSGI... -Fri Jan 9 10:28:50 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:28:50 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:28:50 2026 - found fd 4 mapped to socket 0 (127.0.0.1:37353) -Fri Jan 9 10:28:50 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:28:50 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:28:50 2026] *** -Fri Jan 9 10:28:50 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:28:50 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:28:50 2026 - nodename: ubserver -Fri Jan 9 10:28:50 2026 - machine: x86_64 -Fri Jan 9 10:28:50 2026 - clock source: unix -Fri Jan 9 10:28:50 2026 - pcre jit disabled -Fri Jan 9 10:28:50 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:28:50 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:28:50 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:28:50 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:28:50 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:28:50 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:28:50 2026 - your processes number limit is 61306 -Fri Jan 9 10:28:50 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:28:50 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:28:50 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:28:50 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:28:50 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:28:50 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:28:50 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:40261 (port auto-assigned) fd 3 -Fri Jan 9 10:28:50 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:28:50 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:28:50 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:28:50 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:28:50 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:28:50 2026 - Python main interpreter initialized at 0x77f978f52d10 -Fri Jan 9 10:28:50 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:28:50 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:28:50 2026 - python threads support enabled -Fri Jan 9 10:28:50 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:28:50 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:28:50 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:28:50 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:28:50 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:28:50 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:28:50 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x77f978f52d10 pid: 1782404 (default app) -Fri Jan 9 10:28:50 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:28:50 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:28:50 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:28:50 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:28:50 2026 - spawned uWSGI worker 1 (pid: 1817590, cores: 2) -Fri Jan 9 10:28:50 2026 - spawned uWSGI worker 2 (pid: 1817591, cores: 2) -Fri Jan 9 10:28:50 2026 - spawned uWSGI http 1 (pid: 1817594) -Fri Jan 9 10:28:50 2026 - Python auto-reloader enabled -Fri Jan 9 10:32:28 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:32:28 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:32:28 2026 - gateway "uWSGI http 1" has been buried (pid: 1817594) -Fri Jan 9 10:32:28 2026 - ...gracefully killing workers... -Fri Jan 9 10:32:28 2026 - Gracefully killing worker 2 (pid: 1817591)... -Fri Jan 9 10:32:28 2026 - Gracefully killing worker 1 (pid: 1817590)... -Fri Jan 9 10:32:29 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:32:29 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:32:29 2026 - binary reloading uWSGI... -Fri Jan 9 10:32:29 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:32:29 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:32:29 2026 - found fd 3 mapped to socket 0 (127.0.0.1:40261) -Fri Jan 9 10:32:29 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:32:29 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:32:29 2026] *** -Fri Jan 9 10:32:29 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:32:29 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:32:29 2026 - nodename: ubserver -Fri Jan 9 10:32:29 2026 - machine: x86_64 -Fri Jan 9 10:32:29 2026 - clock source: unix -Fri Jan 9 10:32:29 2026 - pcre jit disabled -Fri Jan 9 10:32:29 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:32:29 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:32:29 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:32:29 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:29 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:29 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:32:29 2026 - your processes number limit is 61306 -Fri Jan 9 10:32:29 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:32:29 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:32:29 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:32:29 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:32:29 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:32:29 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:32:29 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:34655 (port auto-assigned) fd 4 -Fri Jan 9 10:32:29 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:29 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:29 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:32:29 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:32:29 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:32:29 2026 - Python main interpreter initialized at 0x7d3c1a752d10 -Fri Jan 9 10:32:29 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:29 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:29 2026 - python threads support enabled -Fri Jan 9 10:32:29 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:32:29 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:32:29 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:32:29 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:32:29 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:32:29 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:32:29 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7d3c1a752d10 pid: 1782404 (default app) -Fri Jan 9 10:32:29 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:29 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:29 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:32:29 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:32:29 2026 - spawned uWSGI worker 1 (pid: 1818793, cores: 2) -Fri Jan 9 10:32:29 2026 - spawned uWSGI worker 2 (pid: 1818794, cores: 2) -Fri Jan 9 10:32:29 2026 - spawned uWSGI http 1 (pid: 1818798) -Fri Jan 9 10:32:29 2026 - Python auto-reloader enabled -Fri Jan 9 10:32:33 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:32:33 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:32:33 2026 - gateway "uWSGI http 1" has been buried (pid: 1818798) -Fri Jan 9 10:32:33 2026 - ...gracefully killing workers... -Fri Jan 9 10:32:33 2026 - Gracefully killing worker 1 (pid: 1818793)... -Fri Jan 9 10:32:33 2026 - Gracefully killing worker 2 (pid: 1818794)... -Fri Jan 9 10:32:34 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:32:34 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:32:34 2026 - binary reloading uWSGI... -Fri Jan 9 10:32:34 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:32:34 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:32:34 2026 - found fd 4 mapped to socket 0 (127.0.0.1:34655) -Fri Jan 9 10:32:34 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:32:34 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:32:34 2026] *** -Fri Jan 9 10:32:34 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:32:34 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:32:34 2026 - nodename: ubserver -Fri Jan 9 10:32:34 2026 - machine: x86_64 -Fri Jan 9 10:32:34 2026 - clock source: unix -Fri Jan 9 10:32:34 2026 - pcre jit disabled -Fri Jan 9 10:32:34 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:32:34 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:32:34 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:32:34 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:34 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:34 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:32:34 2026 - your processes number limit is 61306 -Fri Jan 9 10:32:34 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:32:34 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:32:34 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:32:34 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:32:34 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:32:34 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:32:34 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:38431 (port auto-assigned) fd 3 -Fri Jan 9 10:32:34 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:34 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:34 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:32:34 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:32:34 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:32:34 2026 - Python main interpreter initialized at 0x760172f52d10 -Fri Jan 9 10:32:34 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:34 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:34 2026 - python threads support enabled -Fri Jan 9 10:32:34 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:32:34 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:32:34 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:32:34 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:32:34 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:32:34 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:32:34 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x760172f52d10 pid: 1782404 (default app) -Fri Jan 9 10:32:34 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:34 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:34 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:32:34 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:32:34 2026 - spawned uWSGI worker 1 (pid: 1818808, cores: 2) -Fri Jan 9 10:32:34 2026 - spawned uWSGI worker 2 (pid: 1818809, cores: 2) -Fri Jan 9 10:32:34 2026 - spawned uWSGI http 1 (pid: 1818812) -Fri Jan 9 10:32:34 2026 - Python auto-reloader enabled -Fri Jan 9 10:32:38 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:32:38 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:32:38 2026 - gateway "uWSGI http 1" has been buried (pid: 1818812) -Fri Jan 9 10:32:38 2026 - ...gracefully killing workers... -Fri Jan 9 10:32:38 2026 - Gracefully killing worker 1 (pid: 1818808)... -Fri Jan 9 10:32:38 2026 - Gracefully killing worker 2 (pid: 1818809)... -Fri Jan 9 10:32:39 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:32:39 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:32:39 2026 - binary reloading uWSGI... -Fri Jan 9 10:32:39 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:32:39 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:32:39 2026 - found fd 3 mapped to socket 0 (127.0.0.1:38431) -Fri Jan 9 10:32:39 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:32:39 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:32:39 2026] *** -Fri Jan 9 10:32:39 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:32:39 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:32:39 2026 - nodename: ubserver -Fri Jan 9 10:32:39 2026 - machine: x86_64 -Fri Jan 9 10:32:39 2026 - clock source: unix -Fri Jan 9 10:32:39 2026 - pcre jit disabled -Fri Jan 9 10:32:39 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:32:39 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:32:39 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:32:39 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:39 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:39 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:32:39 2026 - your processes number limit is 61306 -Fri Jan 9 10:32:39 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:32:39 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:32:39 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:32:39 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:32:39 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:32:39 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:32:39 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:41473 (port auto-assigned) fd 4 -Fri Jan 9 10:32:39 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:39 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:39 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:32:39 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:32:39 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:32:39 2026 - Python main interpreter initialized at 0x79b9d4152d10 -Fri Jan 9 10:32:39 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:39 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:39 2026 - python threads support enabled -Fri Jan 9 10:32:39 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:32:39 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:32:39 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:32:39 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:32:40 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:32:40 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:32:40 2026 - WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x79b9d4152d10 pid: 1782404 (default app) -Fri Jan 9 10:32:40 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:40 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:40 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:32:40 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:32:40 2026 - spawned uWSGI worker 1 (pid: 1818826, cores: 2) -Fri Jan 9 10:32:40 2026 - spawned uWSGI worker 2 (pid: 1818827, cores: 2) -Fri Jan 9 10:32:40 2026 - spawned uWSGI http 1 (pid: 1818831) -Fri Jan 9 10:32:40 2026 - Python auto-reloader enabled -Fri Jan 9 10:32:44 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:32:44 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:32:44 2026 - gateway "uWSGI http 1" has been buried (pid: 1818831) -Fri Jan 9 10:32:44 2026 - ...gracefully killing workers... -Fri Jan 9 10:32:44 2026 - Gracefully killing worker 2 (pid: 1818827)... -Fri Jan 9 10:32:44 2026 - Gracefully killing worker 1 (pid: 1818826)... -Fri Jan 9 10:32:45 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:32:45 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:32:45 2026 - binary reloading uWSGI... -Fri Jan 9 10:32:45 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:32:45 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:32:45 2026 - found fd 4 mapped to socket 0 (127.0.0.1:41473) -Fri Jan 9 10:32:45 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:32:45 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:32:45 2026] *** -Fri Jan 9 10:32:45 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:32:45 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:32:45 2026 - nodename: ubserver -Fri Jan 9 10:32:45 2026 - machine: x86_64 -Fri Jan 9 10:32:45 2026 - clock source: unix -Fri Jan 9 10:32:45 2026 - pcre jit disabled -Fri Jan 9 10:32:45 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:32:45 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:32:45 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:32:45 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:45 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:45 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:32:45 2026 - your processes number limit is 61306 -Fri Jan 9 10:32:45 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:32:45 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:32:45 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:32:45 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:32:45 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:32:45 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:32:45 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:45769 (port auto-assigned) fd 3 -Fri Jan 9 10:32:45 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:45 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:45 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:32:45 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:32:45 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:32:45 2026 - Python main interpreter initialized at 0x7a69a6152d10 -Fri Jan 9 10:32:45 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:45 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:45 2026 - python threads support enabled -Fri Jan 9 10:32:45 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:32:45 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:32:45 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:32:45 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:32:45 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:32:45 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:32:45 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7a69a6152d10 pid: 1782404 (default app) -Fri Jan 9 10:32:45 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:32:45 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:32:45 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:32:45 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:32:45 2026 - spawned uWSGI worker 1 (pid: 1818869, cores: 2) -Fri Jan 9 10:32:45 2026 - spawned uWSGI worker 2 (pid: 1818870, cores: 2) -Fri Jan 9 10:32:45 2026 - spawned uWSGI http 1 (pid: 1818873) -Fri Jan 9 10:32:45 2026 - Python auto-reloader enabled -Fri Jan 9 10:33:09 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:33:09 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:33:09 2026 - gateway "uWSGI http 1" has been buried (pid: 1818873) -Fri Jan 9 10:33:09 2026 - ...gracefully killing workers... -Fri Jan 9 10:33:09 2026 - Gracefully killing worker 2 (pid: 1818870)... -Fri Jan 9 10:33:09 2026 - Gracefully killing worker 1 (pid: 1818869)... -Fri Jan 9 10:33:10 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:33:10 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:33:10 2026 - binary reloading uWSGI... -Fri Jan 9 10:33:10 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:33:10 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:33:10 2026 - found fd 3 mapped to socket 0 (127.0.0.1:45769) -Fri Jan 9 10:33:10 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:33:10 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:33:10 2026] *** -Fri Jan 9 10:33:10 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:33:10 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:33:10 2026 - nodename: ubserver -Fri Jan 9 10:33:10 2026 - machine: x86_64 -Fri Jan 9 10:33:10 2026 - clock source: unix -Fri Jan 9 10:33:10 2026 - pcre jit disabled -Fri Jan 9 10:33:10 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:33:10 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:33:10 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:33:10 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:33:10 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:33:10 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:33:10 2026 - your processes number limit is 61306 -Fri Jan 9 10:33:10 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:33:10 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:33:10 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:33:10 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:33:10 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:33:10 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:33:10 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:43071 (port auto-assigned) fd 4 -Fri Jan 9 10:33:10 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:33:10 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:33:10 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:33:10 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:33:10 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:33:10 2026 - Python main interpreter initialized at 0x73522cb52d10 -Fri Jan 9 10:33:10 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:33:10 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:33:10 2026 - python threads support enabled -Fri Jan 9 10:33:10 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:33:10 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:33:10 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:33:10 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:33:10 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:33:10 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:33:10 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x73522cb52d10 pid: 1782404 (default app) -Fri Jan 9 10:33:10 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:33:10 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:33:10 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:33:10 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:33:10 2026 - spawned uWSGI worker 1 (pid: 1819074, cores: 2) -Fri Jan 9 10:33:10 2026 - spawned uWSGI worker 2 (pid: 1819075, cores: 2) -Fri Jan 9 10:33:10 2026 - spawned uWSGI http 1 (pid: 1819078) -Fri Jan 9 10:33:10 2026 - Python auto-reloader enabled -Fri Jan 9 10:33:20 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:33:20 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:33:20 2026 - gateway "uWSGI http 1" has been buried (pid: 1819078) -Fri Jan 9 10:33:20 2026 - ...gracefully killing workers... -Fri Jan 9 10:33:20 2026 - Gracefully killing worker 2 (pid: 1819075)... -Fri Jan 9 10:33:20 2026 - Gracefully killing worker 1 (pid: 1819074)... -Fri Jan 9 10:33:21 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:33:21 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:33:21 2026 - binary reloading uWSGI... -Fri Jan 9 10:33:21 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:33:21 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:33:21 2026 - found fd 4 mapped to socket 0 (127.0.0.1:43071) -Fri Jan 9 10:33:21 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:33:21 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:33:21 2026] *** -Fri Jan 9 10:33:21 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:33:21 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:33:21 2026 - nodename: ubserver -Fri Jan 9 10:33:21 2026 - machine: x86_64 -Fri Jan 9 10:33:21 2026 - clock source: unix -Fri Jan 9 10:33:21 2026 - pcre jit disabled -Fri Jan 9 10:33:21 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:33:21 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:33:21 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:33:21 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:33:21 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:33:21 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:33:21 2026 - your processes number limit is 61306 -Fri Jan 9 10:33:21 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:33:21 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:33:21 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:33:21 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:33:21 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:33:21 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:33:21 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:39103 (port auto-assigned) fd 3 -Fri Jan 9 10:33:21 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:33:21 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:33:21 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:33:21 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:33:21 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:33:21 2026 - Python main interpreter initialized at 0x77bb83d52d10 -Fri Jan 9 10:33:21 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:33:21 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:33:21 2026 - python threads support enabled -Fri Jan 9 10:33:21 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:33:21 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:33:21 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:33:21 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:33:21 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:33:21 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x77bb83d52d10 pid: 1782404 (default app) -Fri Jan 9 10:33:21 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:33:21 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:33:21 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:33:21 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:33:21 2026 - spawned uWSGI worker 1 (pid: 1819123, cores: 2) -Fri Jan 9 10:33:21 2026 - spawned uWSGI worker 2 (pid: 1819124, cores: 2) -Fri Jan 9 10:33:21 2026 - spawned uWSGI http 1 (pid: 1819127) -Fri Jan 9 10:33:21 2026 - Python auto-reloader enabled -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: GTaNs33vwoJ+4/EMmi2BNZfvbY/oa9P3ETIoIEbaLtRRSObPM2... -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: b164aac779ad641d764d7ca78e44d290891bda18 -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: b164aac779ad641d764d7ca78e44d290891bda18 -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 10:33:21 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=latest_news, user=WeiJueSen -2026-01-09 10:33:21 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: latest_news, user: WeiJueSen -2026-01-09 10:33:21 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求最新公告 -{address space usage: 233709568 bytes/222MB} {rss usage: 38711296 bytes/36MB} [pid: 1819123|app: 0|req: 1/1] 183.47.117.101 () {36 vars in 679 bytes} [Fri Jan 9 10:33:21 2026] POST /api/v1/wechat/callback?msg_signature=b164aac779ad641d764d7ca78e44d290891bda18×tamp=1767926001&nonce=1768620865 => generated 1478 bytes in 6 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0) -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 428 -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: S1bfMrKOasqa288wweOEjK/5pKCyxvTfFasXMD4bcoNmS53AaP... -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 0aab34f6a2cb370d6ead35df861f0e51b2305852 -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 0aab34f6a2cb370d6ead35df861f0e51b2305852 -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:33:32 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=10..., user=WeiJueSen -2026-01-09 10:33:32 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 10, user: WeiJueSen -2026-01-09 10:33:32 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 选择公告来源: 10 -2026-01-09 10:33:32 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -{address space usage: 239050752 bytes/227MB} {rss usage: 48742400 bytes/46MB} [pid: 1819124|app: 0|req: 1/2] 183.47.98.168 () {36 vars in 678 bytes} [Fri Jan 9 10:33:32 2026] POST /api/v1/wechat/callback?msg_signature=0aab34f6a2cb370d6ead35df861f0e51b2305852×tamp=1767926012&nonce=1768658849 => generated 2590 bytes in 58 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0) -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: SnmNv1JvgNwdi/3C/KcStmOJIpzxorxgaCGic2u6tdLzsYmnOk... -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: feb8eef2ddccadec738c597383cb60ab7423765c -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: feb8eef2ddccadec738c597383cb60ab7423765c -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=event -2026-01-09 10:34:31 - gx_gp_monitor.wechat.callback_server - INFO - 处理事件消息: event=click, event_key=today_stats, user=WeiJueSen -2026-01-09 10:34:31 - gx_gp_monitor.wechat.message_handler - INFO - 处理事件: click, key: today_stats, user: WeiJueSen -2026-01-09 10:34:31 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 请求今日统计 -2026-01-09 10:34:31 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:34:31 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:34:31 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:34:31 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:34:31 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:34:31 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:34:31 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:34:31 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:34:31 - gx_gp_monitor.main - INFO - 应用初始化完成 -{address space usage: 234758144 bytes/223MB} {rss usage: 47702016 bytes/45MB} [pid: 1819123|app: 0|req: 2/3] 183.47.98.227 () {36 vars in 678 bytes} [Fri Jan 9 10:34:31 2026] POST /api/v1/wechat/callback?msg_signature=feb8eef2ddccadec738c597383cb60ab7423765c×tamp=1767926071&nonce=1768471749 => generated 966 bytes in 237 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: rBvhsf9qEmvSA53kCTz/vZk1cJ7XeUAHXZHecKetaDMwG+c7ds... -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: cd7d1cd61fa529ae42f14c64bb227705c5b263de -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: cd7d1cd61fa529ae42f14c64bb227705c5b263de -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:34:38 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 10:34:38 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 10:34:38 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 10:34:38 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:34:38 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:34:38 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:34:38 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:34:38 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:34:38 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:34:38 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:34:38 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:34:38 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:34:38 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:34:38 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: rBvhsf9qEmvSA53kCTz/vZk1cJ7XeUAHXZHecKetaDMwG+c7ds... -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: cd7d1cd61fa529ae42f14c64bb227705c5b263de -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: cd7d1cd61fa529ae42f14c64bb227705c5b263de -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:34:43 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=马山..., user=WeiJueSen -2026-01-09 10:34:43 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 马山, user: WeiJueSen -2026-01-09 10:34:43 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['马山'] -2026-01-09 10:34:43 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:34:43 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:34:43 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:34:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:43 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.43秒 -2026-01-09 10:34:43 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:34:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:34:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.28秒 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:34:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:34:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:34:44 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:34:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:34:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.43秒 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:34:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:34:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:34:45 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:34:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:34:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:34:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:34:46 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:34:46 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:34:46 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:34:46 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:34:46 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:34:46 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 193 条公告 -2026-01-09 10:34:46 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 193 -> 2 条公告 -2026-01-09 10:34:46 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:34:46 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:34:46 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:34:46 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 191, 'date_filtered': 1107, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 34, 45, 68742), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 34, 45, 497090), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -{address space usage: 250597376 bytes/238MB} {rss usage: 64647168 bytes/61MB} [pid: 1819124|app: 0|req: 3/4] 106.55.201.217 () {36 vars in 679 bytes} [Fri Jan 9 10:34:43 2026] POST /api/v1/wechat/callback?msg_signature=cd7d1cd61fa529ae42f14c64bb227705c5b263de×tamp=1767926078&nonce=1768275254 => generated 710 bytes in 3272 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -2026-01-09 10:35:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.51秒 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:35:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:35:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:35:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:35:09 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:35:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:35:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:35:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.42秒 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:35:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:35:10 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:35:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:35:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:35:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:35:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:35:11 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:35:11 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:35:11 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:35:11 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:35:11 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:35:11 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 194 条公告 -2026-01-09 10:35:11 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 194 -> 2 条公告 -2026-01-09 10:35:11 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:35:11 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:35:11 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:35:11 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 192, 'date_filtered': 1106, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 35, 10, 254547), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 35, 10, 669761), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -{address space usage: 243257344 bytes/231MB} {rss usage: 57946112 bytes/55MB} [pid: 1819124|app: 0|req: 3/5] 183.47.117.101 () {36 vars in 679 bytes} [Fri Jan 9 10:34:38 2026] POST /api/v1/wechat/callback?msg_signature=cd7d1cd61fa529ae42f14c64bb227705c5b263de×tamp=1767926078&nonce=1768275254 => generated 710 bytes in 33339 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: NNqNKwBKU8YP87SfjRv8oENckQkQFS70OmhGuzkGFrsC1YwEBQ... -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 45f5c588689dc7ae542ab1553699861c4711dc8a -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 45f5c588689dc7ae542ab1553699861c4711dc8a -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:36:32 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=搜索 大化..., user=WeiJueSen -2026-01-09 10:36:32 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 搜索 大化, user: WeiJueSen -2026-01-09 10:36:32 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 手动搜索关键词: ['大化'] -2026-01-09 10:36:32 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:36:32 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:36:32 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: NNqNKwBKU8YP87SfjRv8oENckQkQFS70OmhGuzkGFrsC1YwEBQ... -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 45f5c588689dc7ae542ab1553699861c4711dc8a -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 45f5c588689dc7ae542ab1553699861c4711dc8a -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:36:37 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=搜索 大化..., user=WeiJueSen -2026-01-09 10:36:37 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 搜索 大化, user: WeiJueSen -2026-01-09 10:36:37 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 手动搜索关键词: ['大化'] -2026-01-09 10:36:37 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:36:37 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:36:37 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: NNqNKwBKU8YP87SfjRv8oENckQkQFS70OmhGuzkGFrsC1YwEBQ... -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 45f5c588689dc7ae542ab1553699861c4711dc8a -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 45f5c588689dc7ae542ab1553699861c4711dc8a -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:36:42 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=搜索 大化..., user=WeiJueSen -2026-01-09 10:36:42 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 搜索 大化, user: WeiJueSen -2026-01-09 10:36:42 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 手动搜索关键词: ['大化'] -2026-01-09 10:36:42 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:36:42 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:36:42 - gx_gp_monitor - INFO - 开始爬取 采购公告 -Fri Jan 9 10:37:02 2026 - *** HARAKIRI ON WORKER 1 (pid: 1819123, try: 1, graceful: yes) *** -Fri Jan 9 10:37:02 2026 - HARAKIRI !!! worker 1 status !!! -Fri Jan 9 10:37:02 2026 - HARAKIRI [core 0] 183.47.98.168 - POST /api/v1/wechat/callback?msg_signature=45f5c588689dc7ae542ab1553699861c4711dc8a×tamp=1767926192&nonce=1768601135 since 1767926192 -Fri Jan 9 10:37:02 2026 - HARAKIRI !!! end of worker 1 status !!! -Fri Jan 9 10:37:02 2026 - HARAKIRI triggered by worker 1 core 0 !!! -Fri Jan 9 10:37:03 2026 - DAMN ! worker 1 (pid: 1819123) died, killed by signal 9 :( trying respawn ... -Fri Jan 9 10:37:03 2026 - Respawned uWSGI worker 1 (new pid: 1820451) -Fri Jan 9 10:37:03 2026 - Python auto-reloader enabled -2026-01-09 10:37:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.39秒 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:37:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:37:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:37:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:37:08 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:37:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:37:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:37:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.39秒 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:37:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:37:09 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:37:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:37:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:37:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:37:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:37:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:10 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:37:10 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:37:10 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:37:10 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:37:10 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 199 条公告 -2026-01-09 10:37:10 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 199 -> 1 条公告 -2026-01-09 10:37:10 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:37:10 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:37:10 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:37:10 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 198, 'date_filtered': 1101, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 37, 8, 446065), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -{address space usage: 254787584 bytes/242MB} {rss usage: 74129408 bytes/70MB} [pid: 1819124|app: 0|req: 5/6] 106.55.201.217 () {36 vars in 679 bytes} [Fri Jan 9 10:36:37 2026] POST /api/v1/wechat/callback?msg_signature=45f5c588689dc7ae542ab1553699861c4711dc8a×tamp=1767926192&nonce=1768601135 => generated 710 bytes in 33138 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -2026-01-09 10:37:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.38秒 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:37:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:37:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:37:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:37:13 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:37:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:37:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:37:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:37:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:37:14 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:37:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:37:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:37:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.34秒 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:37:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.29秒 -2026-01-09 10:37:15 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:37:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:16 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.29秒 -2026-01-09 10:37:16 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:37:16 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:37:16 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:37:16 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 199 条公告 -2026-01-09 10:37:16 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 199 -> 1 条公告 -2026-01-09 10:37:16 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:37:16 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:37:16 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:37:16 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 198, 'date_filtered': 1101, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 37, 13, 480617), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -{address space usage: 245350400 bytes/233MB} {rss usage: 64823296 bytes/61MB} [pid: 1819124|app: 0|req: 5/7] 112.53.2.93 () {36 vars in 676 bytes} [Fri Jan 9 10:36:42 2026] POST /api/v1/wechat/callback?msg_signature=45f5c588689dc7ae542ab1553699861c4711dc8a×tamp=1767926192&nonce=1768601135 => generated 710 bytes in 33356 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: Lkx65MFWghgpCIU1tWydWqtX7DDrez3S6jBM64NmE/dhfhBQMy... -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 047168e9e8d4e60f631ac6f98d07d8380df9c2b8 -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 047168e9e8d4e60f631ac6f98d07d8380df9c2b8 -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:37:32 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=搜索 马山..., user=WeiJueSen -2026-01-09 10:37:32 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 搜索 马山, user: WeiJueSen -2026-01-09 10:37:32 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 手动搜索关键词: ['马山'] -2026-01-09 10:37:32 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:37:32 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:37:32 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:37:32 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:37:32 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:37:32 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:37:32 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:37:32 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:37:32 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:37:32 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:37:32 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:37:32 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: Lkx65MFWghgpCIU1tWydWqtX7DDrez3S6jBM64NmE/dhfhBQMy... -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 047168e9e8d4e60f631ac6f98d07d8380df9c2b8 -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 047168e9e8d4e60f631ac6f98d07d8380df9c2b8 -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:37:37 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=搜索 马山..., user=WeiJueSen -2026-01-09 10:37:37 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 搜索 马山, user: WeiJueSen -2026-01-09 10:37:37 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 手动搜索关键词: ['马山'] -2026-01-09 10:37:37 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:37:37 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:37:37 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: Lkx65MFWghgpCIU1tWydWqtX7DDrez3S6jBM64NmE/dhfhBQMy... -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 047168e9e8d4e60f631ac6f98d07d8380df9c2b8 -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 047168e9e8d4e60f631ac6f98d07d8380df9c2b8 -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:37:42 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=搜索 马山..., user=WeiJueSen -2026-01-09 10:37:42 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 搜索 马山, user: WeiJueSen -2026-01-09 10:37:42 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 手动搜索关键词: ['马山'] -2026-01-09 10:37:42 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:37:42 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:37:42 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:37:42 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:42 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.44秒 -2026-01-09 10:37:42 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:37:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.37秒 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:37:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:37:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:37:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:37:43 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:37:43 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:37:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.34秒 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:37:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:37:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:37:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:37:44 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:37:44 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:37:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:45 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:37:45 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:37:45 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:37:45 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:37:45 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:37:45 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:37:45 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:37:45 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 200 条公告 -2026-01-09 10:37:45 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 200 -> 2 条公告 -2026-01-09 10:37:45 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:37:45 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:37:45 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:37:45 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 198, 'date_filtered': 1100, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 37, 43, 886887), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 37, 44, 227222), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -{address space usage: 246398976 bytes/234MB} {rss usage: 64925696 bytes/61MB} [pid: 1819124|app: 0|req: 6/8] 112.53.2.93 () {36 vars in 676 bytes} [Fri Jan 9 10:37:42 2026] POST /api/v1/wechat/callback?msg_signature=047168e9e8d4e60f631ac6f98d07d8380df9c2b8×tamp=1767926252&nonce=1768012394 => generated 710 bytes in 3124 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -2026-01-09 10:38:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:02 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.38秒 -2026-01-09 10:38:02 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:38:02 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:02 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:38:02 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:38:03 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:38:03 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.28秒 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:38:03 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:38:03 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:38:03 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:38:04 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.34秒 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:38:04 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:38:04 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:38:04 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.26秒 -2026-01-09 10:38:04 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:38:05 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:05 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:38:05 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:38:05 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:05 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:38:05 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:38:05 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:05 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:38:05 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:38:05 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:38:05 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:38:05 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 203 条公告 -2026-01-09 10:38:05 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 203 -> 2 条公告 -2026-01-09 10:38:05 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:38:05 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:38:05 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:38:05 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 201, 'date_filtered': 1097, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 38, 3, 903378), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 38, 4, 239840), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -{address space usage: 254042112 bytes/242MB} {rss usage: 71852032 bytes/68MB} [pid: 1820451|app: 0|req: 5/9] 183.47.98.227 () {36 vars in 678 bytes} [Fri Jan 9 10:37:32 2026] POST /api/v1/wechat/callback?msg_signature=047168e9e8d4e60f631ac6f98d07d8380df9c2b8×tamp=1767926252&nonce=1768012394 => generated 710 bytes in 33319 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -2026-01-09 10:38:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:07 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.38秒 -2026-01-09 10:38:07 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:38:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:07 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:38:07 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:38:07 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:07 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:38:07 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:38:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:38:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:38:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:38:08 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.34秒 -2026-01-09 10:38:08 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:38:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:38:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:38:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:38:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:38:09 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:38:09 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:38:10 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:38:10 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:38:10 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:38:10 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:38:10 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:38:10 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 203 条公告 -2026-01-09 10:38:10 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 203 -> 2 条公告 -2026-01-09 10:38:10 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 2 -> 2 条公告 -2026-01-09 10:38:10 - gx_gp_monitor.main - INFO - 筛选后剩余 2 条公告 -2026-01-09 10:38:10 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:38:10 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 2, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 201, 'date_filtered': 1097, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='关于打印/复印纸的网上超市合同公告', publish_date=datetime.datetime(2026, 1, 9, 9, 53, 47), purchase_name='马山县卫生健康局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=TQ8JBxuEbH10KU93ffGNUQ==', source_code='ZcyAnnouncement7', source_name='电子卖场公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 38, 8, 573750), created_at=None, updated_at=None, content_hash='406c71dd23410b265f2776eef85bddc7', keyword_matched=True, date_filtered=True, is_new=True, is_today=True), Announcement(id=None, title='马山县疾病预防控制中心[2181801000007961838]马山县龙之都汽车服务有限公司2025-2026年马山县县本级预算单位公务车辆维修、保养服务框架协议采购的验收公告', publish_date=datetime.datetime(2026, 1, 9, 9, 33, 27), purchase_name='马山县疾病预防控制中心', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=MiIzDm+fgMeYY8CH5dIPRA==', source_code='ZcyAnnouncement10', source_name='履约验收公示', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 38, 8, 911610), created_at=None, updated_at=None, content_hash='f22c9ba4ff8375192b93c24e1a2901df', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -{address space usage: 243556352 bytes/232MB} {rss usage: 61554688 bytes/58MB} [pid: 1820451|app: 0|req: 5/10] 106.55.202.215 () {36 vars in 679 bytes} [Fri Jan 9 10:37:37 2026] POST /api/v1/wechat/callback?msg_signature=047168e9e8d4e60f631ac6f98d07d8380df9c2b8×tamp=1767926252&nonce=1768012394 => generated 710 bytes in 32924 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -Fri Jan 9 10:42:44 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:42:44 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:42:44 2026 - gateway "uWSGI http 1" has been buried (pid: 1819127) -Fri Jan 9 10:42:44 2026 - ...gracefully killing workers... -Fri Jan 9 10:42:44 2026 - Gracefully killing worker 2 (pid: 1819124)... -Fri Jan 9 10:42:44 2026 - Gracefully killing worker 1 (pid: 1820451)... -Fri Jan 9 10:42:45 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:42:45 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:42:45 2026 - binary reloading uWSGI... -Fri Jan 9 10:42:45 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:42:45 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:42:45 2026 - found fd 3 mapped to socket 0 (127.0.0.1:39103) -Fri Jan 9 10:42:45 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:42:45 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:42:45 2026] *** -Fri Jan 9 10:42:45 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:42:45 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:42:45 2026 - nodename: ubserver -Fri Jan 9 10:42:45 2026 - machine: x86_64 -Fri Jan 9 10:42:45 2026 - clock source: unix -Fri Jan 9 10:42:45 2026 - pcre jit disabled -Fri Jan 9 10:42:45 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:42:45 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:42:45 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:42:45 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:42:45 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:42:45 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:42:45 2026 - your processes number limit is 61306 -Fri Jan 9 10:42:45 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:42:45 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:42:45 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:42:45 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:42:45 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:42:45 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:42:45 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:41921 (port auto-assigned) fd 4 -Fri Jan 9 10:42:45 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:42:45 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:42:45 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:42:45 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:42:45 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:42:45 2026 - Python main interpreter initialized at 0x74fbab152d10 -Fri Jan 9 10:42:45 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:42:45 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:42:45 2026 - python threads support enabled -Fri Jan 9 10:42:45 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:42:45 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:42:45 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:42:45 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:42:45 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:42:45 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:42:45 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x74fbab152d10 pid: 1782404 (default app) -Fri Jan 9 10:42:45 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:42:45 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:42:45 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:42:45 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:42:45 2026 - spawned uWSGI worker 1 (pid: 1822209, cores: 2) -Fri Jan 9 10:42:45 2026 - spawned uWSGI worker 2 (pid: 1822212, cores: 2) -Fri Jan 9 10:42:45 2026 - Python auto-reloader enabled -Fri Jan 9 10:42:45 2026 - spawned uWSGI http 1 (pid: 1822215) -Fri Jan 9 10:42:56 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:42:56 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:42:56 2026 - gateway "uWSGI http 1" has been buried (pid: 1822215) -Fri Jan 9 10:42:56 2026 - ...gracefully killing workers... -Fri Jan 9 10:42:56 2026 - Gracefully killing worker 1 (pid: 1822209)... -Fri Jan 9 10:42:56 2026 - Gracefully killing worker 2 (pid: 1822212)... -Fri Jan 9 10:42:57 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:42:57 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:42:57 2026 - binary reloading uWSGI... -Fri Jan 9 10:42:57 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:42:57 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:42:57 2026 - found fd 4 mapped to socket 0 (127.0.0.1:41921) -Fri Jan 9 10:42:57 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:42:57 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:42:57 2026] *** -Fri Jan 9 10:42:57 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:42:57 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:42:57 2026 - nodename: ubserver -Fri Jan 9 10:42:57 2026 - machine: x86_64 -Fri Jan 9 10:42:57 2026 - clock source: unix -Fri Jan 9 10:42:57 2026 - pcre jit disabled -Fri Jan 9 10:42:57 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:42:57 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:42:57 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:42:57 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:42:57 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:42:57 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:42:57 2026 - your processes number limit is 61306 -Fri Jan 9 10:42:57 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:42:57 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:42:57 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:42:57 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:42:57 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:42:57 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:42:57 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:36909 (port auto-assigned) fd 3 -Fri Jan 9 10:42:57 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:42:57 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:42:57 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:42:57 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:42:57 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:42:57 2026 - Python main interpreter initialized at 0x7aef49152d10 -Fri Jan 9 10:42:57 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:42:57 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:42:57 2026 - python threads support enabled -Fri Jan 9 10:42:57 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:42:57 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:42:57 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:42:57 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:42:57 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:42:57 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:42:57 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7aef49152d10 pid: 1782404 (default app) -Fri Jan 9 10:42:57 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:42:57 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:42:57 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:42:57 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:42:57 2026 - spawned uWSGI worker 1 (pid: 1822242, cores: 2) -Fri Jan 9 10:42:57 2026 - spawned uWSGI worker 2 (pid: 1822243, cores: 2) -Fri Jan 9 10:42:57 2026 - Python auto-reloader enabled -Fri Jan 9 10:42:57 2026 - spawned uWSGI http 1 (pid: 1822248) -Fri Jan 9 10:43:04 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:43:04 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:43:04 2026 - gateway "uWSGI http 1" has been buried (pid: 1822248) -Fri Jan 9 10:43:04 2026 - ...gracefully killing workers... -Fri Jan 9 10:43:04 2026 - Gracefully killing worker 1 (pid: 1822242)... -Fri Jan 9 10:43:04 2026 - Gracefully killing worker 2 (pid: 1822243)... -Fri Jan 9 10:43:05 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:43:05 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:43:05 2026 - binary reloading uWSGI... -Fri Jan 9 10:43:05 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:43:05 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:43:05 2026 - found fd 3 mapped to socket 0 (127.0.0.1:36909) -Fri Jan 9 10:43:05 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:43:05 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:43:05 2026] *** -Fri Jan 9 10:43:05 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:43:05 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:43:05 2026 - nodename: ubserver -Fri Jan 9 10:43:05 2026 - machine: x86_64 -Fri Jan 9 10:43:05 2026 - clock source: unix -Fri Jan 9 10:43:05 2026 - pcre jit disabled -Fri Jan 9 10:43:05 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:43:05 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:43:05 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:43:05 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:43:05 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:43:05 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:43:05 2026 - your processes number limit is 61306 -Fri Jan 9 10:43:05 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:43:05 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:43:05 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:43:05 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:43:05 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:43:05 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:43:05 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:39615 (port auto-assigned) fd 4 -Fri Jan 9 10:43:05 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:43:05 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:43:05 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:43:05 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:43:05 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:43:05 2026 - Python main interpreter initialized at 0x70ebea952d10 -Fri Jan 9 10:43:05 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:43:05 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:43:05 2026 - python threads support enabled -Fri Jan 9 10:43:05 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:43:05 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:43:05 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:43:05 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:43:05 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:43:05 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:43:05 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x70ebea952d10 pid: 1782404 (default app) -Fri Jan 9 10:43:05 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:43:05 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:43:05 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:43:05 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:43:05 2026 - spawned uWSGI worker 1 (pid: 1822287, cores: 2) -Fri Jan 9 10:43:05 2026 - spawned uWSGI worker 2 (pid: 1822288, cores: 2) -Fri Jan 9 10:43:05 2026 - spawned uWSGI http 1 (pid: 1822293) -Fri Jan 9 10:43:05 2026 - Python auto-reloader enabled -Fri Jan 9 10:43:25 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:43:25 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:43:25 2026 - gateway "uWSGI http 1" has been buried (pid: 1822293) -Fri Jan 9 10:43:25 2026 - ...gracefully killing workers... -Fri Jan 9 10:43:25 2026 - Gracefully killing worker 1 (pid: 1822287)... -Fri Jan 9 10:43:25 2026 - Gracefully killing worker 2 (pid: 1822288)... -Fri Jan 9 10:43:26 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:43:26 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:43:26 2026 - binary reloading uWSGI... -Fri Jan 9 10:43:26 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:43:26 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:43:26 2026 - found fd 4 mapped to socket 0 (127.0.0.1:39615) -Fri Jan 9 10:43:26 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:43:26 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:43:26 2026] *** -Fri Jan 9 10:43:26 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:43:26 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:43:26 2026 - nodename: ubserver -Fri Jan 9 10:43:26 2026 - machine: x86_64 -Fri Jan 9 10:43:26 2026 - clock source: unix -Fri Jan 9 10:43:26 2026 - pcre jit disabled -Fri Jan 9 10:43:26 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:43:26 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:43:26 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:43:26 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:43:26 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:43:26 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:43:26 2026 - your processes number limit is 61306 -Fri Jan 9 10:43:26 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:43:26 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:43:26 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:43:26 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:43:26 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:43:26 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:43:26 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:46683 (port auto-assigned) fd 3 -Fri Jan 9 10:43:26 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:43:26 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:43:26 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:43:26 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:43:26 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:43:26 2026 - Python main interpreter initialized at 0x7909fff52d10 -Fri Jan 9 10:43:26 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:43:26 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:43:26 2026 - python threads support enabled -Fri Jan 9 10:43:26 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:43:26 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:43:26 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:43:26 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:43:27 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:43:27 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:43:27 2026 - WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x7909fff52d10 pid: 1782404 (default app) -Fri Jan 9 10:43:27 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:43:27 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:43:27 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:43:27 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:43:27 2026 - spawned uWSGI worker 1 (pid: 1822416, cores: 2) -Fri Jan 9 10:43:27 2026 - spawned uWSGI worker 2 (pid: 1822417, cores: 2) -Fri Jan 9 10:43:27 2026 - Python auto-reloader enabled -Fri Jan 9 10:43:27 2026 - spawned uWSGI http 1 (pid: 1822420) -Fri Jan 9 10:43:34 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:43:34 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:43:34 2026 - gateway "uWSGI http 1" has been buried (pid: 1822420) -Fri Jan 9 10:43:34 2026 - ...gracefully killing workers... -Fri Jan 9 10:43:34 2026 - Gracefully killing worker 2 (pid: 1822417)... -Fri Jan 9 10:43:34 2026 - Gracefully killing worker 1 (pid: 1822416)... -Fri Jan 9 10:43:35 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:43:35 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:43:35 2026 - binary reloading uWSGI... -Fri Jan 9 10:43:35 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:43:35 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:43:35 2026 - found fd 3 mapped to socket 0 (127.0.0.1:46683) -Fri Jan 9 10:43:35 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:43:35 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:43:35 2026] *** -Fri Jan 9 10:43:35 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:43:35 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:43:35 2026 - nodename: ubserver -Fri Jan 9 10:43:35 2026 - machine: x86_64 -Fri Jan 9 10:43:35 2026 - clock source: unix -Fri Jan 9 10:43:35 2026 - pcre jit disabled -Fri Jan 9 10:43:35 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:43:35 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:43:35 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:43:35 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:43:35 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:43:35 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:43:35 2026 - your processes number limit is 61306 -Fri Jan 9 10:43:35 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:43:35 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:43:35 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:43:35 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:43:35 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:43:35 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:43:35 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:44857 (port auto-assigned) fd 4 -Fri Jan 9 10:43:35 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:43:35 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:43:35 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:43:35 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:43:35 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:43:35 2026 - Python main interpreter initialized at 0x7b438fd52d10 -Fri Jan 9 10:43:35 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:43:35 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:43:35 2026 - python threads support enabled -Fri Jan 9 10:43:35 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:43:35 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:43:35 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:43:35 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:43:35 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:43:35 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:43:35 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7b438fd52d10 pid: 1782404 (default app) -Fri Jan 9 10:43:35 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:43:35 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:43:35 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:43:35 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:43:35 2026 - spawned uWSGI worker 1 (pid: 1822460, cores: 2) -Fri Jan 9 10:43:35 2026 - spawned uWSGI worker 2 (pid: 1822461, cores: 2) -Fri Jan 9 10:43:35 2026 - spawned uWSGI http 1 (pid: 1822465) -Fri Jan 9 10:43:35 2026 - Python auto-reloader enabled -Fri Jan 9 10:45:16 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:45:16 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:45:16 2026 - gateway "uWSGI http 1" has been buried (pid: 1822465) -Fri Jan 9 10:45:16 2026 - ...gracefully killing workers... -Fri Jan 9 10:45:16 2026 - Gracefully killing worker 2 (pid: 1822461)... -Fri Jan 9 10:45:16 2026 - Gracefully killing worker 1 (pid: 1822460)... -Fri Jan 9 10:45:17 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:45:17 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:45:17 2026 - binary reloading uWSGI... -Fri Jan 9 10:45:17 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:45:17 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:45:17 2026 - found fd 4 mapped to socket 0 (127.0.0.1:44857) -Fri Jan 9 10:45:17 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:45:17 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:45:17 2026] *** -Fri Jan 9 10:45:17 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:45:17 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:45:17 2026 - nodename: ubserver -Fri Jan 9 10:45:17 2026 - machine: x86_64 -Fri Jan 9 10:45:17 2026 - clock source: unix -Fri Jan 9 10:45:17 2026 - pcre jit disabled -Fri Jan 9 10:45:17 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:45:17 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:45:17 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:45:17 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:45:17 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:45:17 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:45:17 2026 - your processes number limit is 61306 -Fri Jan 9 10:45:17 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:45:17 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:45:17 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:45:17 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:45:17 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:45:17 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:45:17 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:33191 (port auto-assigned) fd 3 -Fri Jan 9 10:45:17 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:45:17 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:45:17 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:45:17 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:45:17 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:45:17 2026 - Python main interpreter initialized at 0x71e619952d10 -Fri Jan 9 10:45:17 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:45:17 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:45:17 2026 - python threads support enabled -Fri Jan 9 10:45:17 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:45:17 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:45:17 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:45:17 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:45:17 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:45:17 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:45:17 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x71e619952d10 pid: 1782404 (default app) -Fri Jan 9 10:45:17 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:45:17 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:45:17 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:45:17 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:45:17 2026 - spawned uWSGI worker 1 (pid: 1823141, cores: 2) -Fri Jan 9 10:45:17 2026 - spawned uWSGI worker 2 (pid: 1823142, cores: 2) -Fri Jan 9 10:45:17 2026 - spawned uWSGI http 1 (pid: 1823145) -Fri Jan 9 10:45:17 2026 - Python auto-reloader enabled -Fri Jan 9 10:46:34 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:46:34 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:46:34 2026 - gateway "uWSGI http 1" has been buried (pid: 1823145) -Fri Jan 9 10:46:34 2026 - ...gracefully killing workers... -Fri Jan 9 10:46:34 2026 - Gracefully killing worker 1 (pid: 1823141)... -Fri Jan 9 10:46:34 2026 - Gracefully killing worker 2 (pid: 1823142)... -Fri Jan 9 10:46:35 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:46:35 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:46:35 2026 - binary reloading uWSGI... -Fri Jan 9 10:46:35 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:46:35 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:46:35 2026 - found fd 3 mapped to socket 0 (127.0.0.1:33191) -Fri Jan 9 10:46:35 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:46:35 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:46:35 2026] *** -Fri Jan 9 10:46:35 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:46:35 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:46:35 2026 - nodename: ubserver -Fri Jan 9 10:46:35 2026 - machine: x86_64 -Fri Jan 9 10:46:35 2026 - clock source: unix -Fri Jan 9 10:46:35 2026 - pcre jit disabled -Fri Jan 9 10:46:35 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:46:35 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:46:35 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:46:35 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:46:35 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:46:35 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:46:35 2026 - your processes number limit is 61306 -Fri Jan 9 10:46:35 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:46:35 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:46:35 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:46:35 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:46:35 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:46:35 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:46:35 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:40143 (port auto-assigned) fd 4 -Fri Jan 9 10:46:35 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:46:35 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:46:35 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:46:35 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:46:35 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:46:35 2026 - Python main interpreter initialized at 0x73bf71752d10 -Fri Jan 9 10:46:35 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:46:35 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:46:35 2026 - python threads support enabled -Fri Jan 9 10:46:35 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:46:35 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:46:35 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:46:35 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:46:35 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:46:35 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:46:35 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x73bf71752d10 pid: 1782404 (default app) -Fri Jan 9 10:46:35 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:46:35 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:46:35 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:46:35 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:46:35 2026 - spawned uWSGI worker 1 (pid: 1823685, cores: 2) -Fri Jan 9 10:46:35 2026 - spawned uWSGI worker 2 (pid: 1823688, cores: 2) -Fri Jan 9 10:46:35 2026 - Python auto-reloader enabled -Fri Jan 9 10:46:35 2026 - spawned uWSGI http 1 (pid: 1823691) -Fri Jan 9 10:46:38 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:46:38 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:46:38 2026 - gateway "uWSGI http 1" has been buried (pid: 1823691) -Fri Jan 9 10:46:38 2026 - ...gracefully killing workers... -Fri Jan 9 10:46:38 2026 - Gracefully killing worker 2 (pid: 1823688)... -Fri Jan 9 10:46:38 2026 - Gracefully killing worker 1 (pid: 1823685)... -Fri Jan 9 10:46:39 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:46:39 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:46:39 2026 - binary reloading uWSGI... -Fri Jan 9 10:46:39 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:46:39 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:46:39 2026 - found fd 4 mapped to socket 0 (127.0.0.1:40143) -Fri Jan 9 10:46:39 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:46:39 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:46:39 2026] *** -Fri Jan 9 10:46:39 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:46:39 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:46:39 2026 - nodename: ubserver -Fri Jan 9 10:46:39 2026 - machine: x86_64 -Fri Jan 9 10:46:39 2026 - clock source: unix -Fri Jan 9 10:46:39 2026 - pcre jit disabled -Fri Jan 9 10:46:39 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:46:39 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:46:39 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:46:39 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:46:39 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:46:39 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:46:39 2026 - your processes number limit is 61306 -Fri Jan 9 10:46:39 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:46:39 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:46:39 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:46:39 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:46:39 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:46:39 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:46:39 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:42627 (port auto-assigned) fd 3 -Fri Jan 9 10:46:39 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:46:39 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:46:39 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:46:39 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:46:39 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:46:39 2026 - Python main interpreter initialized at 0x7c9fff552d10 -Fri Jan 9 10:46:39 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:46:39 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:46:39 2026 - python threads support enabled -Fri Jan 9 10:46:39 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:46:39 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:46:39 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:46:39 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:46:39 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:46:39 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:46:39 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7c9fff552d10 pid: 1782404 (default app) -Fri Jan 9 10:46:39 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:46:39 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:46:39 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:46:39 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:46:39 2026 - spawned uWSGI worker 1 (pid: 1823703, cores: 2) -Fri Jan 9 10:46:39 2026 - spawned uWSGI worker 2 (pid: 1823704, cores: 2) -Fri Jan 9 10:46:39 2026 - Python auto-reloader enabled -Fri Jan 9 10:46:39 2026 - spawned uWSGI http 1 (pid: 1823707) -Fri Jan 9 10:47:35 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:47:35 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:47:35 2026 - gateway "uWSGI http 1" has been buried (pid: 1823707) -Fri Jan 9 10:47:35 2026 - ...gracefully killing workers... -Fri Jan 9 10:47:35 2026 - Gracefully killing worker 2 (pid: 1823704)... -Fri Jan 9 10:47:35 2026 - Gracefully killing worker 1 (pid: 1823703)... -Fri Jan 9 10:47:36 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:47:36 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:47:36 2026 - binary reloading uWSGI... -Fri Jan 9 10:47:36 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:47:36 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:47:36 2026 - found fd 3 mapped to socket 0 (127.0.0.1:42627) -Fri Jan 9 10:47:36 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:47:36 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:47:36 2026] *** -Fri Jan 9 10:47:36 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:47:36 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:47:36 2026 - nodename: ubserver -Fri Jan 9 10:47:36 2026 - machine: x86_64 -Fri Jan 9 10:47:36 2026 - clock source: unix -Fri Jan 9 10:47:36 2026 - pcre jit disabled -Fri Jan 9 10:47:36 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:47:36 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:47:36 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:47:36 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:47:36 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:47:36 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:47:36 2026 - your processes number limit is 61306 -Fri Jan 9 10:47:36 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:47:36 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:47:36 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:47:36 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:47:36 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:47:36 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:47:36 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:41859 (port auto-assigned) fd 4 -Fri Jan 9 10:47:36 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:47:36 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:47:36 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:47:36 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:47:36 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:47:37 2026 - Python main interpreter initialized at 0x7b6cf9552d10 -Fri Jan 9 10:47:37 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:47:37 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:47:37 2026 - python threads support enabled -Fri Jan 9 10:47:37 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:47:37 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:47:37 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:47:37 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:47:37 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:47:37 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:47:37 2026 - WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x7b6cf9552d10 pid: 1782404 (default app) -Fri Jan 9 10:47:37 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:47:37 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:47:37 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:47:37 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:47:37 2026 - spawned uWSGI worker 1 (pid: 1823980, cores: 2) -Fri Jan 9 10:47:37 2026 - spawned uWSGI worker 2 (pid: 1823981, cores: 2) -Fri Jan 9 10:47:37 2026 - spawned uWSGI http 1 (pid: 1823986) -Fri Jan 9 10:47:37 2026 - Python auto-reloader enabled -Fri Jan 9 10:47:46 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:47:46 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:47:46 2026 - gateway "uWSGI http 1" has been buried (pid: 1823986) -Fri Jan 9 10:47:46 2026 - ...gracefully killing workers... -Fri Jan 9 10:47:46 2026 - Gracefully killing worker 2 (pid: 1823981)... -Fri Jan 9 10:47:46 2026 - Gracefully killing worker 1 (pid: 1823980)... -Fri Jan 9 10:47:47 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:47:47 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:47:47 2026 - binary reloading uWSGI... -Fri Jan 9 10:47:47 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:47:47 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:47:47 2026 - found fd 4 mapped to socket 0 (127.0.0.1:41859) -Fri Jan 9 10:47:47 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:47:47 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:47:47 2026] *** -Fri Jan 9 10:47:47 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:47:47 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:47:47 2026 - nodename: ubserver -Fri Jan 9 10:47:47 2026 - machine: x86_64 -Fri Jan 9 10:47:47 2026 - clock source: unix -Fri Jan 9 10:47:47 2026 - pcre jit disabled -Fri Jan 9 10:47:47 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:47:47 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:47:47 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:47:47 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:47:47 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:47:47 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:47:47 2026 - your processes number limit is 61306 -Fri Jan 9 10:47:47 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:47:47 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:47:47 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:47:47 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:47:47 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:47:47 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:47:47 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:42165 (port auto-assigned) fd 3 -Fri Jan 9 10:47:47 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:47:47 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:47:47 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:47:47 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:47:47 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:47:47 2026 - Python main interpreter initialized at 0x7331bf952d10 -Fri Jan 9 10:47:47 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:47:47 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:47:47 2026 - python threads support enabled -Fri Jan 9 10:47:47 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:47:47 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:47:47 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:47:47 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:47:47 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:47:47 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:47:47 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7331bf952d10 pid: 1782404 (default app) -Fri Jan 9 10:47:47 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:47:47 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:47:47 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:47:47 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:47:47 2026 - spawned uWSGI worker 1 (pid: 1824088, cores: 2) -Fri Jan 9 10:47:47 2026 - spawned uWSGI worker 2 (pid: 1824089, cores: 2) -Fri Jan 9 10:47:47 2026 - Python auto-reloader enabled -Fri Jan 9 10:47:47 2026 - spawned uWSGI http 1 (pid: 1824094) -Fri Jan 9 10:47:59 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:47:59 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:47:59 2026 - gateway "uWSGI http 1" has been buried (pid: 1824094) -Fri Jan 9 10:47:59 2026 - ...gracefully killing workers... -Fri Jan 9 10:47:59 2026 - Gracefully killing worker 2 (pid: 1824089)... -Fri Jan 9 10:47:59 2026 - Gracefully killing worker 1 (pid: 1824088)... -Fri Jan 9 10:48:00 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:48:00 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:48:00 2026 - binary reloading uWSGI... -Fri Jan 9 10:48:00 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:48:00 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:48:00 2026 - found fd 3 mapped to socket 0 (127.0.0.1:42165) -Fri Jan 9 10:48:00 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:48:00 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:48:00 2026] *** -Fri Jan 9 10:48:00 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:48:00 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:48:00 2026 - nodename: ubserver -Fri Jan 9 10:48:00 2026 - machine: x86_64 -Fri Jan 9 10:48:00 2026 - clock source: unix -Fri Jan 9 10:48:00 2026 - pcre jit disabled -Fri Jan 9 10:48:00 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:48:00 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:48:00 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:48:00 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:48:00 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:48:00 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:48:00 2026 - your processes number limit is 61306 -Fri Jan 9 10:48:00 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:48:00 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:48:00 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:48:00 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:48:00 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:48:00 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:48:00 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:45333 (port auto-assigned) fd 4 -Fri Jan 9 10:48:00 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:48:00 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:48:00 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:48:00 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:48:00 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:48:00 2026 - Python main interpreter initialized at 0x7e72ee152d10 -Fri Jan 9 10:48:00 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:48:00 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:48:00 2026 - python threads support enabled -Fri Jan 9 10:48:00 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:48:00 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:48:00 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:48:00 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:48:00 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:48:00 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:48:00 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7e72ee152d10 pid: 1782404 (default app) -Fri Jan 9 10:48:00 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:48:00 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:48:00 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:48:00 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:48:00 2026 - spawned uWSGI worker 1 (pid: 1824143, cores: 2) -Fri Jan 9 10:48:00 2026 - spawned uWSGI worker 2 (pid: 1824144, cores: 2) -Fri Jan 9 10:48:00 2026 - spawned uWSGI http 1 (pid: 1824148) -Fri Jan 9 10:48:00 2026 - Python auto-reloader enabled -Fri Jan 9 10:50:08 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:50:08 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:50:08 2026 - gateway "uWSGI http 1" has been buried (pid: 1824148) -Fri Jan 9 10:50:08 2026 - ...gracefully killing workers... -Fri Jan 9 10:50:08 2026 - Gracefully killing worker 2 (pid: 1824144)... -Fri Jan 9 10:50:08 2026 - Gracefully killing worker 1 (pid: 1824143)... -Fri Jan 9 10:50:09 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:50:09 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:50:09 2026 - binary reloading uWSGI... -Fri Jan 9 10:50:09 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:50:09 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:50:09 2026 - found fd 4 mapped to socket 0 (127.0.0.1:45333) -Fri Jan 9 10:50:09 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:50:09 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:50:09 2026] *** -Fri Jan 9 10:50:09 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:50:09 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:50:09 2026 - nodename: ubserver -Fri Jan 9 10:50:09 2026 - machine: x86_64 -Fri Jan 9 10:50:09 2026 - clock source: unix -Fri Jan 9 10:50:09 2026 - pcre jit disabled -Fri Jan 9 10:50:09 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:50:09 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:50:09 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:50:09 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:50:09 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:50:09 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:50:09 2026 - your processes number limit is 61306 -Fri Jan 9 10:50:09 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:50:09 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:50:09 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:50:09 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:50:09 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:50:09 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:50:09 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:45961 (port auto-assigned) fd 3 -Fri Jan 9 10:50:09 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:50:09 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:50:09 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:50:09 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:50:09 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:50:09 2026 - Python main interpreter initialized at 0x78e141d52d10 -Fri Jan 9 10:50:09 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:50:09 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:50:09 2026 - python threads support enabled -Fri Jan 9 10:50:09 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:50:09 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:50:09 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:50:09 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:50:09 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:50:09 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:50:09 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x78e141d52d10 pid: 1782404 (default app) -Fri Jan 9 10:50:09 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:50:09 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:50:09 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:50:09 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:50:09 2026 - spawned uWSGI worker 1 (pid: 1824879, cores: 2) -Fri Jan 9 10:50:09 2026 - spawned uWSGI worker 2 (pid: 1824880, cores: 2) -Fri Jan 9 10:50:09 2026 - spawned uWSGI http 1 (pid: 1824883) -Fri Jan 9 10:50:09 2026 - Python auto-reloader enabled -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: V4PysTsq/lNT3/wFazWDLWyc0dGuq2JMkrVDkOzmHWSj2Ei3LR... -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: 03b9d5be793ca95eebdac7c887a610f60dfe77f2 -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: 03b9d5be793ca95eebdac7c887a610f60dfe77f2 -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:50:13 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 10:50:13 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 10:50:13 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 10:50:13 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:50:13 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:50:13 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:50:13 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:50:13 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:50:13 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:50:13 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:50:13 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:50:13 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:50:13 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:50:13 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:50:13 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:50:13 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:13 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.45秒 -2026-01-09 10:50:13 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:50:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:50:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:50:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:50:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.15秒 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:50:14 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:50:14 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:50:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.42秒 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:50:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:50:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:50:15 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 10:50:15 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:50:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:16 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:50:16 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:50:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:16 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:50:16 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:50:16 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:50:16 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:50:16 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:50:16 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:50:16 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:50:16 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 217 条公告 -2026-01-09 10:50:16 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 217 -> 1 条公告 -2026-01-09 10:50:16 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:50:16 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:50:16 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:50:16 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 216, 'date_filtered': 1083, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 50, 14, 210634), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:50:16 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 10:50:16 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 10:50:16 - gx_gp_monitor.notification.wechat - INFO - Markdown消息发送成功 -{address space usage: 241356800 bytes/230MB} {rss usage: 54054912 bytes/51MB} [pid: 1824880|app: 0|req: 1/1] 113.108.92.100 () {36 vars in 679 bytes} [Fri Jan 9 10:50:13 2026] POST /api/v1/wechat/callback?msg_signature=03b9d5be793ca95eebdac7c887a610f60dfe77f2×tamp=1767927013&nonce=1768112259 => generated 626 bytes in 3651 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -Fri Jan 9 10:50:36 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:50:36 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:50:36 2026 - gateway "uWSGI http 1" has been buried (pid: 1824883) -Fri Jan 9 10:50:36 2026 - ...gracefully killing workers... -Fri Jan 9 10:50:36 2026 - Gracefully killing worker 2 (pid: 1824880)... -Fri Jan 9 10:50:36 2026 - Gracefully killing worker 1 (pid: 1824879)... -Fri Jan 9 10:50:37 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:50:37 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:50:37 2026 - binary reloading uWSGI... -Fri Jan 9 10:50:37 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:50:37 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:50:37 2026 - found fd 3 mapped to socket 0 (127.0.0.1:45961) -Fri Jan 9 10:50:37 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:50:37 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:50:37 2026] *** -Fri Jan 9 10:50:37 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:50:37 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:50:37 2026 - nodename: ubserver -Fri Jan 9 10:50:37 2026 - machine: x86_64 -Fri Jan 9 10:50:37 2026 - clock source: unix -Fri Jan 9 10:50:37 2026 - pcre jit disabled -Fri Jan 9 10:50:37 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:50:37 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:50:37 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:50:37 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:50:37 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:50:37 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:50:37 2026 - your processes number limit is 61306 -Fri Jan 9 10:50:37 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:50:37 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:50:37 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:50:37 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:50:37 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:50:37 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:50:37 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:38249 (port auto-assigned) fd 4 -Fri Jan 9 10:50:37 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:50:37 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:50:37 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:50:37 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:50:37 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:50:37 2026 - Python main interpreter initialized at 0x744f9e152d10 -Fri Jan 9 10:50:37 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:50:37 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:50:37 2026 - python threads support enabled -Fri Jan 9 10:50:37 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:50:37 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:50:37 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:50:37 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:50:38 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:50:38 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:50:38 2026 - WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x744f9e152d10 pid: 1782404 (default app) -Fri Jan 9 10:50:38 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:50:38 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:50:38 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:50:38 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:50:38 2026 - spawned uWSGI worker 1 (pid: 1825004, cores: 2) -Fri Jan 9 10:50:38 2026 - spawned uWSGI worker 2 (pid: 1825005, cores: 2) -Fri Jan 9 10:50:38 2026 - spawned uWSGI http 1 (pid: 1825008) -Fri Jan 9 10:50:38 2026 - Python auto-reloader enabled -Fri Jan 9 10:52:41 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:52:41 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:52:41 2026 - gateway "uWSGI http 1" has been buried (pid: 1825008) -Fri Jan 9 10:52:41 2026 - ...gracefully killing workers... -Fri Jan 9 10:52:41 2026 - Gracefully killing worker 2 (pid: 1825005)... -Fri Jan 9 10:52:41 2026 - Gracefully killing worker 1 (pid: 1825004)... -Fri Jan 9 10:52:42 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:52:42 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:52:42 2026 - binary reloading uWSGI... -Fri Jan 9 10:52:42 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:52:42 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:52:42 2026 - found fd 4 mapped to socket 0 (127.0.0.1:38249) -Fri Jan 9 10:52:42 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:52:42 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:52:42 2026] *** -Fri Jan 9 10:52:42 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:52:42 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:52:42 2026 - nodename: ubserver -Fri Jan 9 10:52:42 2026 - machine: x86_64 -Fri Jan 9 10:52:42 2026 - clock source: unix -Fri Jan 9 10:52:42 2026 - pcre jit disabled -Fri Jan 9 10:52:42 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:52:42 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:52:42 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:52:42 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:52:42 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:52:42 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:52:42 2026 - your processes number limit is 61306 -Fri Jan 9 10:52:42 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:52:42 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:52:42 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:52:42 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:52:42 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:52:42 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:52:42 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:40383 (port auto-assigned) fd 3 -Fri Jan 9 10:52:42 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:52:42 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:52:42 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:52:42 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:52:42 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:52:42 2026 - Python main interpreter initialized at 0x7125be152d10 -Fri Jan 9 10:52:42 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:52:42 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:52:42 2026 - python threads support enabled -Fri Jan 9 10:52:42 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:52:42 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:52:42 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:52:42 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:52:42 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:52:42 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:52:42 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7125be152d10 pid: 1782404 (default app) -Fri Jan 9 10:52:42 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:52:42 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:52:42 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:52:42 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:52:42 2026 - spawned uWSGI worker 1 (pid: 1825625, cores: 2) -Fri Jan 9 10:52:42 2026 - spawned uWSGI worker 2 (pid: 1825626, cores: 2) -Fri Jan 9 10:52:42 2026 - Python auto-reloader enabled -Fri Jan 9 10:52:42 2026 - spawned uWSGI http 1 (pid: 1825630) -Fri Jan 9 10:52:55 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:52:55 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:52:55 2026 - gateway "uWSGI http 1" has been buried (pid: 1825630) -Fri Jan 9 10:52:55 2026 - ...gracefully killing workers... -Fri Jan 9 10:52:55 2026 - Gracefully killing worker 2 (pid: 1825626)... -Fri Jan 9 10:52:55 2026 - Gracefully killing worker 1 (pid: 1825625)... -Fri Jan 9 10:52:56 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:52:56 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:52:56 2026 - binary reloading uWSGI... -Fri Jan 9 10:52:56 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:52:56 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:52:56 2026 - found fd 3 mapped to socket 0 (127.0.0.1:40383) -Fri Jan 9 10:52:56 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:52:56 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:52:56 2026] *** -Fri Jan 9 10:52:56 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:52:56 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:52:56 2026 - nodename: ubserver -Fri Jan 9 10:52:56 2026 - machine: x86_64 -Fri Jan 9 10:52:56 2026 - clock source: unix -Fri Jan 9 10:52:56 2026 - pcre jit disabled -Fri Jan 9 10:52:56 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:52:56 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:52:56 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:52:56 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:52:56 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:52:56 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:52:56 2026 - your processes number limit is 61306 -Fri Jan 9 10:52:56 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:52:56 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:52:56 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:52:56 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:52:56 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:52:56 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:52:56 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:33369 (port auto-assigned) fd 4 -Fri Jan 9 10:52:56 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:52:56 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:52:56 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:52:56 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:52:56 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:52:56 2026 - Python main interpreter initialized at 0x7b887f752d10 -Fri Jan 9 10:52:56 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:52:56 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:52:56 2026 - python threads support enabled -Fri Jan 9 10:52:56 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:52:56 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:52:56 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:52:56 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:52:56 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:52:56 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:52:56 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7b887f752d10 pid: 1782404 (default app) -Fri Jan 9 10:52:56 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:52:56 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:52:56 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:52:56 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:52:56 2026 - spawned uWSGI worker 1 (pid: 1825660, cores: 2) -Fri Jan 9 10:52:56 2026 - spawned uWSGI worker 2 (pid: 1825661, cores: 2) -Fri Jan 9 10:52:56 2026 - Python auto-reloader enabled -Fri Jan 9 10:52:56 2026 - spawned uWSGI http 1 (pid: 1825666) -Fri Jan 9 10:53:19 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:53:19 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:53:19 2026 - gateway "uWSGI http 1" has been buried (pid: 1825666) -Fri Jan 9 10:53:19 2026 - ...gracefully killing workers... -Fri Jan 9 10:53:19 2026 - Gracefully killing worker 1 (pid: 1825660)... -Fri Jan 9 10:53:19 2026 - Gracefully killing worker 2 (pid: 1825661)... -Fri Jan 9 10:53:20 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:53:20 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:53:20 2026 - binary reloading uWSGI... -Fri Jan 9 10:53:20 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:53:20 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:53:20 2026 - found fd 4 mapped to socket 0 (127.0.0.1:33369) -Fri Jan 9 10:53:20 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:53:20 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:53:20 2026] *** -Fri Jan 9 10:53:20 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:53:20 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:53:20 2026 - nodename: ubserver -Fri Jan 9 10:53:20 2026 - machine: x86_64 -Fri Jan 9 10:53:20 2026 - clock source: unix -Fri Jan 9 10:53:20 2026 - pcre jit disabled -Fri Jan 9 10:53:20 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:53:20 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:53:20 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:53:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:53:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:53:20 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:53:20 2026 - your processes number limit is 61306 -Fri Jan 9 10:53:20 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:53:20 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:53:20 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:53:20 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:53:20 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:53:20 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:53:20 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:32943 (port auto-assigned) fd 3 -Fri Jan 9 10:53:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:53:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:53:20 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:53:20 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:53:20 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:53:20 2026 - Python main interpreter initialized at 0x7f6714552d10 -Fri Jan 9 10:53:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:53:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:53:20 2026 - python threads support enabled -Fri Jan 9 10:53:20 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:53:20 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:53:20 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:53:20 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:53:20 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:53:20 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:53:20 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7f6714552d10 pid: 1782404 (default app) -Fri Jan 9 10:53:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:53:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:53:20 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:53:20 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:53:20 2026 - spawned uWSGI worker 1 (pid: 1825809, cores: 2) -Fri Jan 9 10:53:20 2026 - spawned uWSGI worker 2 (pid: 1825810, cores: 2) -Fri Jan 9 10:53:20 2026 - spawned uWSGI http 1 (pid: 1825814) -Fri Jan 9 10:53:20 2026 - Python auto-reloader enabled -Fri Jan 9 10:53:45 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:53:45 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:53:45 2026 - gateway "uWSGI http 1" has been buried (pid: 1825814) -Fri Jan 9 10:53:45 2026 - ...gracefully killing workers... -Fri Jan 9 10:53:45 2026 - Gracefully killing worker 1 (pid: 1825809)... -Fri Jan 9 10:53:45 2026 - Gracefully killing worker 2 (pid: 1825810)... -Fri Jan 9 10:53:46 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:53:46 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:53:46 2026 - binary reloading uWSGI... -Fri Jan 9 10:53:46 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:53:46 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:53:46 2026 - found fd 3 mapped to socket 0 (127.0.0.1:32943) -Fri Jan 9 10:53:46 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:53:46 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:53:46 2026] *** -Fri Jan 9 10:53:46 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:53:46 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:53:46 2026 - nodename: ubserver -Fri Jan 9 10:53:46 2026 - machine: x86_64 -Fri Jan 9 10:53:46 2026 - clock source: unix -Fri Jan 9 10:53:46 2026 - pcre jit disabled -Fri Jan 9 10:53:46 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:53:46 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:53:46 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:53:46 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:53:46 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:53:46 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:53:46 2026 - your processes number limit is 61306 -Fri Jan 9 10:53:46 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:53:46 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:53:46 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:53:46 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:53:46 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:53:46 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:53:46 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:45363 (port auto-assigned) fd 4 -Fri Jan 9 10:53:46 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:53:46 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:53:46 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:53:46 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:53:46 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:53:46 2026 - Python main interpreter initialized at 0x7c762f152d10 -Fri Jan 9 10:53:46 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:53:46 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:53:46 2026 - python threads support enabled -Fri Jan 9 10:53:46 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:53:46 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:53:46 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:53:46 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:53:46 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:53:46 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:53:46 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7c762f152d10 pid: 1782404 (default app) -Fri Jan 9 10:53:46 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:53:46 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:53:46 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:53:46 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:53:46 2026 - spawned uWSGI worker 1 (pid: 1825892, cores: 2) -Fri Jan 9 10:53:46 2026 - spawned uWSGI worker 2 (pid: 1825893, cores: 2) -Fri Jan 9 10:53:46 2026 - spawned uWSGI http 1 (pid: 1825897) -Fri Jan 9 10:53:46 2026 - Python auto-reloader enabled -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: Uo4QU84T+D2cpkopqB0HZAhYIxAzg7bxLwDzgVH/QDLap7sKHL... -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: b100a5fed3e9702af41bd289efb1160218ea3759 -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: b100a5fed3e9702af41bd289efb1160218ea3759 -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:54:03 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 10:54:03 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 10:54:03 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 10:54:03 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 10:54:03 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 10:54:03 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 10:54:03 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 10:54:03 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 10:54:03 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 10:54:03 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 10:54:03 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 10:54:03 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 10:54:03 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 10:54:03 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 10:54:03 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: Uo4QU84T+D2cpkopqB0HZAhYIxAzg7bxLwDzgVH/QDLap7sKHL... -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: b100a5fed3e9702af41bd289efb1160218ea3759 -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: b100a5fed3e9702af41bd289efb1160218ea3759 -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 10:54:08 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 10:54:08 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 10:54:08 - gx_gp_monitor.wechat.message_handler - INFO - 检测到重复请求: user=WeiJueSen, content=大化... -{address space usage: 247705600 bytes/236MB} {rss usage: 59969536 bytes/57MB} [pid: 1825892|app: 0|req: 2/1] 106.55.201.217 () {36 vars in 679 bytes} [Fri Jan 9 10:54:08 2026] POST /api/v1/wechat/callback?msg_signature=b100a5fed3e9702af41bd289efb1160218ea3759×tamp=1767927243&nonce=1768396874 => generated 626 bytes in 1 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 1) -2026-01-09 10:54:34 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 30.40秒 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 10:54:34 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.22秒 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 10:54:34 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.24秒 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 10:54:34 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:54:34 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 10:54:35 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 10:54:35 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 10:54:35 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.44秒 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 10:54:35 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:54:35 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 10:54:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 10:54:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 10:54:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.16秒 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 10:54:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 10:54:36 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 10:54:36 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.21秒 -2026-01-09 10:54:36 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 10:54:36 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 10:54:36 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 10:54:36 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 220 条公告 -2026-01-09 10:54:36 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 220 -> 1 条公告 -2026-01-09 10:54:36 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 10:54:36 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 10:54:36 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 10:54:36 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 219, 'date_filtered': 1080, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 10, 54, 34, 478758), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 10:54:36 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 10:54:37 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 10:54:37 - gx_gp_monitor.notification.wechat - INFO - Markdown消息发送成功 -{address space usage: 241319936 bytes/230MB} {rss usage: 53989376 bytes/51MB} [pid: 1825892|app: 0|req: 2/2] 183.47.117.101 () {36 vars in 678 bytes} [Fri Jan 9 10:54:03 2026] POST /api/v1/wechat/callback?msg_signature=b100a5fed3e9702af41bd289efb1160218ea3759×tamp=1767927243&nonce=1768396874 => generated 626 bytes in 33741 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -Fri Jan 9 10:55:15 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:55:15 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:55:15 2026 - gateway "uWSGI http 1" has been buried (pid: 1825897) -Fri Jan 9 10:55:15 2026 - ...gracefully killing workers... -Fri Jan 9 10:55:15 2026 - Gracefully killing worker 1 (pid: 1825892)... -Fri Jan 9 10:55:15 2026 - Gracefully killing worker 2 (pid: 1825893)... -Fri Jan 9 10:55:16 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:55:16 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:55:16 2026 - binary reloading uWSGI... -Fri Jan 9 10:55:16 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:55:16 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:55:16 2026 - found fd 4 mapped to socket 0 (127.0.0.1:45363) -Fri Jan 9 10:55:16 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:55:16 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:55:16 2026] *** -Fri Jan 9 10:55:16 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:55:16 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:55:16 2026 - nodename: ubserver -Fri Jan 9 10:55:16 2026 - machine: x86_64 -Fri Jan 9 10:55:16 2026 - clock source: unix -Fri Jan 9 10:55:16 2026 - pcre jit disabled -Fri Jan 9 10:55:16 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:55:16 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:55:16 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:55:16 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:55:16 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:55:16 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:55:16 2026 - your processes number limit is 61306 -Fri Jan 9 10:55:16 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:55:16 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:55:16 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:55:16 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:55:16 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:55:16 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:55:16 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:36675 (port auto-assigned) fd 3 -Fri Jan 9 10:55:16 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:55:16 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:55:16 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:55:16 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:55:16 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:55:16 2026 - Python main interpreter initialized at 0x7af140b52d10 -Fri Jan 9 10:55:16 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:55:16 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:55:16 2026 - python threads support enabled -Fri Jan 9 10:55:16 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:55:16 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:55:16 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:55:16 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:55:16 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:55:16 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:55:16 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7af140b52d10 pid: 1782404 (default app) -Fri Jan 9 10:55:16 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:55:16 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:55:16 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:55:16 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:55:16 2026 - spawned uWSGI worker 1 (pid: 1826499, cores: 2) -Fri Jan 9 10:55:16 2026 - spawned uWSGI worker 2 (pid: 1826500, cores: 2) -Fri Jan 9 10:55:16 2026 - spawned uWSGI http 1 (pid: 1826503) -Fri Jan 9 10:55:16 2026 - Python auto-reloader enabled -Fri Jan 9 10:55:33 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:55:33 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:55:33 2026 - gateway "uWSGI http 1" has been buried (pid: 1826503) -Fri Jan 9 10:55:33 2026 - ...gracefully killing workers... -Fri Jan 9 10:55:33 2026 - Gracefully killing worker 2 (pid: 1826500)... -Fri Jan 9 10:55:33 2026 - Gracefully killing worker 1 (pid: 1826499)... -Fri Jan 9 10:55:34 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:55:34 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:55:34 2026 - binary reloading uWSGI... -Fri Jan 9 10:55:34 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:55:34 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:55:34 2026 - found fd 3 mapped to socket 0 (127.0.0.1:36675) -Fri Jan 9 10:55:34 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:55:34 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:55:34 2026] *** -Fri Jan 9 10:55:34 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:55:34 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:55:34 2026 - nodename: ubserver -Fri Jan 9 10:55:34 2026 - machine: x86_64 -Fri Jan 9 10:55:34 2026 - clock source: unix -Fri Jan 9 10:55:34 2026 - pcre jit disabled -Fri Jan 9 10:55:34 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:55:34 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:55:34 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:55:34 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:55:34 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:55:34 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:55:34 2026 - your processes number limit is 61306 -Fri Jan 9 10:55:34 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:55:34 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:55:34 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:55:34 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:55:34 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:55:34 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:55:34 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:39711 (port auto-assigned) fd 4 -Fri Jan 9 10:55:34 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:55:34 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:55:34 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:55:34 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:55:34 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:55:34 2026 - Python main interpreter initialized at 0x7f31b8f52d10 -Fri Jan 9 10:55:34 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:55:34 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:55:34 2026 - python threads support enabled -Fri Jan 9 10:55:34 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:55:34 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:55:34 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:55:34 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:55:34 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:55:34 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:55:34 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7f31b8f52d10 pid: 1782404 (default app) -Fri Jan 9 10:55:34 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:55:34 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:55:34 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:55:34 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:55:34 2026 - spawned uWSGI worker 1 (pid: 1826565, cores: 2) -Fri Jan 9 10:55:34 2026 - spawned uWSGI worker 2 (pid: 1826566, cores: 2) -Fri Jan 9 10:55:34 2026 - spawned uWSGI http 1 (pid: 1826569) -Fri Jan 9 10:55:34 2026 - Python auto-reloader enabled -Fri Jan 9 10:56:19 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:56:19 2026 - [uwsgi-python-reloader] module/file /home/v6ole/pyproject/GX-gp-notify/gx_gp_monitor/wechat/message_handler.py has been modified -Fri Jan 9 10:56:19 2026 - gateway "uWSGI http 1" has been buried (pid: 1826569) -Fri Jan 9 10:56:19 2026 - ...gracefully killing workers... -Fri Jan 9 10:56:19 2026 - Gracefully killing worker 2 (pid: 1826566)... -Fri Jan 9 10:56:19 2026 - Gracefully killing worker 1 (pid: 1826565)... -Fri Jan 9 10:56:20 2026 - worker 1 buried after 1 seconds -Fri Jan 9 10:56:20 2026 - worker 2 buried after 1 seconds -Fri Jan 9 10:56:20 2026 - binary reloading uWSGI... -Fri Jan 9 10:56:20 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:56:20 2026 - closing all non-uwsgi socket fds > 2 (max_fd = 1024)... -Fri Jan 9 10:56:20 2026 - found fd 4 mapped to socket 0 (127.0.0.1:39711) -Fri Jan 9 10:56:20 2026 - running /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -[uWSGI] getting INI configuration from /home/v6ole/pyproject/GX-gp-notify/uwsgi_wechat.ini -Fri Jan 9 10:56:20 2026 - *** Starting uWSGI 2.0.31 (64bit) on [Fri Jan 9 10:56:20 2026] *** -Fri Jan 9 10:56:20 2026 - compiled with version: 14.2.0 on 06 January 2026 09:35:56 -Fri Jan 9 10:56:20 2026 - os: Linux-6.14.0-37-generic #37-Ubuntu SMP PREEMPT_DYNAMIC Fri Nov 14 22:10:32 UTC 2025 -Fri Jan 9 10:56:20 2026 - nodename: ubserver -Fri Jan 9 10:56:20 2026 - machine: x86_64 -Fri Jan 9 10:56:20 2026 - clock source: unix -Fri Jan 9 10:56:20 2026 - pcre jit disabled -Fri Jan 9 10:56:20 2026 - detected number of CPU cores: 12 -Fri Jan 9 10:56:20 2026 - current working directory: /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:56:20 2026 - detected binary path: /home/v6ole/pyproject/GX-gp-notify/venv/bin/uwsgi -Fri Jan 9 10:56:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:56:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:56:20 2026 - chdir() to /home/v6ole/pyproject/GX-gp-notify -Fri Jan 9 10:56:20 2026 - your processes number limit is 61306 -Fri Jan 9 10:56:20 2026 - your memory page size is 4096 bytes -Fri Jan 9 10:56:20 2026 - *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** -Fri Jan 9 10:56:20 2026 - detected max file descriptor number: 1024 -Fri Jan 9 10:56:20 2026 - lock engine: pthread robust mutexes -Fri Jan 9 10:56:20 2026 - thunder lock: disabled (you can enable it with --thunder-lock) -Fri Jan 9 10:56:20 2026 - uWSGI http bound on 0.0.0.0:18001 # 指定 uWSGI 监听的 HTTP 地址和端口 fd 5 -Fri Jan 9 10:56:20 2026 - uwsgi socket 0 bound to TCP address 127.0.0.1:43283 (port auto-assigned) fd 3 -Fri Jan 9 10:56:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:56:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:56:20 2026 - Python version: 3.13.11 | packaged by Anaconda, Inc. | (main, Dec 10 2025, 21:39:52) [GCC 14.3.0] -Fri Jan 9 10:56:20 2026 - PEP 405 virtualenv detected: /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:56:20 2026 - Set PythonHome to /home/v6ole/pyproject/GX-gp-notify/venv -Fri Jan 9 10:56:20 2026 - Python main interpreter initialized at 0x70e078152d10 -Fri Jan 9 10:56:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:56:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:56:20 2026 - python threads support enabled -Fri Jan 9 10:56:20 2026 - your server socket listen backlog is limited to 100 connections -Fri Jan 9 10:56:20 2026 - your mercy for graceful operations on workers is 60 seconds -Fri Jan 9 10:56:20 2026 - mapped 250032 bytes (244 KB) for 4 cores -Fri Jan 9 10:56:20 2026 - *** Operational MODE: preforking+threaded *** -2026-01-09 10:56:20 - gx_gp_monitor.wechat.message_handler - INFO - 企业微信消息处理器初始化完成 -2026-01-09 10:56:20 - gx_gp_monitor.wechat.callback_server - INFO - 企业微信回调服务器初始化完成 -Fri Jan 9 10:56:20 2026 - WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x70e078152d10 pid: 1782404 (default app) -Fri Jan 9 10:56:20 2026 - uWSGI running as root, you can use --uid/--gid/--chroot options -Fri Jan 9 10:56:20 2026 - *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** -Fri Jan 9 10:56:20 2026 - *** uWSGI is running in multiple interpreter mode *** -Fri Jan 9 10:56:20 2026 - gracefully (RE)spawned uWSGI master process (pid: 1782404) -Fri Jan 9 10:56:20 2026 - spawned uWSGI worker 1 (pid: 1826904, cores: 2) -Fri Jan 9 10:56:20 2026 - spawned uWSGI worker 2 (pid: 1826905, cores: 2) -Fri Jan 9 10:56:20 2026 - spawned uWSGI http 1 (pid: 1826908) -Fri Jan 9 10:56:20 2026 - Python auto-reloader enabled -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: vfWd53Wgci4LR2cr4AKLqHvpLtiIs8tYOmScdA5SJMkB8UFC+5... -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: ff509b0226f285b5409b13fed5a910e818fb4ac0 -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: ff509b0226f285b5409b13fed5a910e818fb4ac0 -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 11:02:44 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 11:02:44 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 11:02:44 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 11:02:44 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 11:02:44 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 11:02:44 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 11:02:44 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 11:02:44 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 11:02:44 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 11:02:44 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 11:02:44 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 11:02:44 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 11:02:44 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 11:02:44 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 11:02:44 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - ERROR - ✅ XML解析成功,提取的encrypt长度: 472 -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - ERROR - 提取的encrypt前50字符: vfWd53Wgci4LR2cr4AKLqHvpLtiIs8tYOmScdA5SJMkB8UFC+5... -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - ERROR - 计算的签名: ff509b0226f285b5409b13fed5a910e818fb4ac0 -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - ERROR - 接收的签名: ff509b0226f285b5409b13fed5a910e818fb4ac0 -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - ERROR - 签名匹配: True -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - ERROR - 尝试使用默认token计算签名... -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - INFO - 收到企业微信消息: 类型=text -2026-01-09 11:02:49 - gx_gp_monitor.wechat.callback_server - INFO - 处理文本消息: content=大化..., user=WeiJueSen -2026-01-09 11:02:49 - gx_gp_monitor.wechat.message_handler - INFO - 处理文本消息: 大化, user: WeiJueSen -2026-01-09 11:02:49 - gx_gp_monitor.wechat.message_handler - INFO - 用户 WeiJueSen 关键词搜索: ['大化'] -2026-01-09 11:02:49 - gx_gp_monitor.main - INFO - === 广西政府采购网公告监控系统启动 === -2026-01-09 11:02:49 - gx_gp_monitor.main - INFO - 版本: 1.0.0 -2026-01-09 11:02:49 - gx_gp_monitor.main - INFO - 配置文件: 默认配置 -2026-01-09 11:02:49 - gx_gp_monitor.core.reliability - INFO - 健康检查通过 -2026-01-09 11:02:49 - gx_gp_monitor.core.database - INFO - 数据库连接池初始化成功 -2026-01-09 11:02:49 - gx_gp_monitor.core.database - INFO - 开始初始化数据库表结构 -2026-01-09 11:02:49 - gx_gp_monitor.core.database - INFO - 数据库表结构初始化完成 -2026-01-09 11:02:49 - gx_gp_monitor.storage.postgresql - INFO - 存储初始化完成 -2026-01-09 11:02:49 - gx_gp_monitor.main - INFO - 应用初始化完成 -2026-01-09 11:02:49 - gx_gp_monitor.main - INFO - 开始执行搜索任务 (手动搜索: True) -2026-01-09 11:02:49 - gx_gp_monitor.crawler.spider - INFO - 开始爬取 13 个公告来源 -2026-01-09 11:02:49 - gx_gp_monitor - INFO - 开始爬取 采购公告 -2026-01-09 11:02:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 采购公告 爬取完成,共获取 100 条公告,耗时 0.36秒 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 开始爬取 结果公告 -2026-01-09 11:02:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 结果公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 开始爬取 合同公告 -2026-01-09 11:02:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 合同公告 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 开始爬取 更正公告 -2026-01-09 11:02:50 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 更正公告 爬取完成,共获取 100 条公告,耗时 0.27秒 -2026-01-09 11:02:50 - gx_gp_monitor - INFO - 开始爬取 招标文件预公示 -2026-01-09 11:02:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 招标文件预公示 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 开始爬取 单一来源公示 -2026-01-09 11:02:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 单一来源公示 爬取完成,共获取 100 条公告,耗时 0.20秒 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 开始爬取 电子卖场公示 -2026-01-09 11:02:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 电子卖场公示 爬取完成,共获取 100 条公告,耗时 0.34秒 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 开始爬取 履约验收公示 -2026-01-09 11:02:51 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 履约验收公示 爬取完成,共获取 100 条公告,耗时 0.17秒 -2026-01-09 11:02:51 - gx_gp_monitor - INFO - 开始爬取 工程类公告 -2026-01-09 11:02:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 工程类公告 爬取完成,共获取 100 条公告,耗时 0.25秒 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 开始爬取 框架协议征集公告 -2026-01-09 11:02:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 框架协议征集公告 爬取完成,共获取 100 条公告,耗时 0.19秒 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 开始爬取 框架协议入围结果公告 -2026-01-09 11:02:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 框架协议入围结果公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 开始爬取 框架协议成交结果汇总公告 -2026-01-09 11:02:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 框架协议成交结果汇总公告 爬取完成,共获取 100 条公告,耗时 0.18秒 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 开始爬取 采购意向公开 -2026-01-09 11:02:52 - gx_gp_monitor.crawler.parsers - INFO - 成功解析 100/100 条公告记录 -2026-01-09 11:02:52 - gx_gp_monitor - INFO - 采购意向公开 爬取完成,共获取 100 条公告,耗时 0.23秒 -2026-01-09 11:02:52 - gx_gp_monitor.crawler.spider - INFO - 爬取完成: 共处理 13 个来源,成功 13 个,失败 0 个,获取 1300 条公告 -2026-01-09 11:02:52 - gx_gp_monitor.main - INFO - 搜索到 1300 条原始公告 -2026-01-09 11:02:52 - gx_gp_monitor.main - INFO - 手动搜索模式:跳过数据库保存 -2026-01-09 11:02:52 - gx_gp_monitor.filters.filters - INFO - 日期筛选: 1300 -> 237 条公告 -2026-01-09 11:02:52 - gx_gp_monitor.filters.filters - INFO - 关键词筛选: 237 -> 1 条公告 -2026-01-09 11:02:52 - gx_gp_monitor.filters.filters - INFO - 来源筛选: 1 -> 1 条公告 -2026-01-09 11:02:52 - gx_gp_monitor.main - INFO - 筛选后剩余 1 条公告 -2026-01-09 11:02:52 - gx_gp_monitor.main - INFO - 手动爬取模式:跳过筛选后公告的数据库保存 -2026-01-09 11:02:52 - gx_gp_monitor.main - INFO - 爬取任务完成: {'success': True, 'total_crawled': 1300, 'filtered': 1, 'saved': 0, 'markdown_generated': False, 'notification_sent': True, 'filter_stats': {'keyword_filtered': 236, 'date_filtered': 1063, 'duplicate_filtered': 0, 'source_filtered': 0}, 'filtered_announcements': [Announcement(id=None, title='大化瑶族自治县2025年度国土变更(日常变更)调查项目合同公告', publish_date=datetime.datetime(2026, 1, 9, 10, 2, 19), purchase_name='大化瑶族自治县自然资源局', content_url='https://zfcg.gxzf.gov.cn/site/detail?parentId=66485&articleId=NSAtgiyTEYUaFq3dcNs6ig==', source_code='ZcyAnnouncement3', source_name='合同公告', announcement_type=, crawled_at=datetime.datetime(2026, 1, 9, 11, 2, 50, 521373), created_at=None, updated_at=None, content_hash='9270849ec53ce195b3fc4de103ef656a', keyword_matched=True, date_filtered=True, is_new=True, is_today=True)]} -2026-01-09 11:02:52 - gx_gp_monitor.notification.wechat - INFO - 企业微信服务初始化完成 -2026-01-09 11:02:53 - gx_gp_monitor.notification.wechat - INFO - 成功获取企业微信访问令牌 -2026-01-09 11:02:53 - gx_gp_monitor.notification.wechat - INFO - Markdown消息发送成功 -{address space usage: 240279552 bytes/229MB} {rss usage: 53104640 bytes/50MB} [pid: 1826904|app: 0|req: 1/1] 106.55.202.215 () {36 vars in 679 bytes} [Fri Jan 9 11:02:49 2026] POST /api/v1/wechat/callback?msg_signature=ff509b0226f285b5409b13fed5a910e818fb4ac0×tamp=1767927764&nonce=1768585088 => generated 626 bytes in 3710 msecs (HTTP/1.1 200) 2 headers in 80 bytes (1 switches on core 0) -Fri Jan 9 11:03:14 2026 - *** HARAKIRI ON WORKER 2 (pid: 1826905, try: 1, graceful: yes) *** -Fri Jan 9 11:03:14 2026 - HARAKIRI !!! worker 2 status !!! -Fri Jan 9 11:03:14 2026 - HARAKIRI [core 0] 183.47.98.168 - POST /api/v1/wechat/callback?msg_signature=ff509b0226f285b5409b13fed5a910e818fb4ac0×tamp=1767927764&nonce=1768585088 since 1767927764 -Fri Jan 9 11:03:14 2026 - HARAKIRI !!! end of worker 2 status !!! -Fri Jan 9 11:03:14 2026 - HARAKIRI triggered by worker 2 core 0 !!! -Fri Jan 9 11:03:15 2026 - DAMN ! worker 2 (pid: 1826905) died, killed by signal 9 :( trying respawn ... -Fri Jan 9 11:03:15 2026 - Respawned uWSGI worker 2 (new pid: 1829122) diff --git a/old/WeChatService.py b/old/WeChatService.py deleted file mode 100644 index ea1f596..0000000 --- a/old/WeChatService.py +++ /dev/null @@ -1,625 +0,0 @@ -import requests -import json -import xml.etree.ElementTree as ET -import hashlib -import time -import random -import string -from config import Config -import logging -from Crypto.Cipher import AES -import base64 -import socket -import struct -import urllib.parse -import redis - -logger = logging.getLogger(__name__) - -class WeChatService: - def __init__(self): - self.corpid = Config.WECHAT_CORPID - self.corpsecret = Config.WECHAT_CORPSECRET - self.agentid = Config.WECHAT_AGENTID - self.token = Config.WECHAT_TOKEN - self.encoding_aes_key = Config.WECHAT_ENCODING_AES_KEY - self.access_token = None - self.token_expires_at = 0 - # 添加代理API配置 - self.use_proxy = getattr(Config, 'USE_WECHAT_PROXY', False) - self.proxy_api_url = getattr(Config, 'WECHAT_PROXY_API_URL', 'https://api.v6ole.top') - - logger.info("WeChatService初始化完成") - - def _get_redis_connection(self): - """获取Redis连接""" - try: - redis_conn = redis.Redis( - host=Config.REDIS_HOST, - port=Config.REDIS_PORT, - db=Config.REDIS_DB, - password=Config.REDIS_PASSWORD, - decode_responses=True, # 自动将响应解码为字符串 - socket_timeout=5, # 设置超时时间 - socket_connect_timeout=5 - ) - # 测试连接 - redis_conn.ping() - return redis_conn - except Exception as e: - logger.error(f"Redis连接失败: {str(e)}") - raise - - def get_access_token(self): - """获取access_token""" - current_time = time.time() - - # 如果access_token未过期,直接返回 - if self.access_token and current_time < self.token_expires_at: - return self.access_token - - try: - # 使用代理API获取access_token - if self.use_proxy: - url = f"{self.proxy_api_url}/cgi-bin/gettoken?corpid={self.corpid}&corpsecret={self.corpsecret}" - logger.info(f"使用代理API获取access_token: {url}") - else: - url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={self.corpid}&corpsecret={self.corpsecret}" - - response = requests.get(url) - result = response.json() - - if result.get("errcode") == 0: - self.access_token = result.get("access_token") - # 设置过期时间,提前5分钟过期 - expires_in = result.get("expires_in", 7200) - 300 - self.token_expires_at = current_time + expires_in - - # 转换过期时间为可读格式 - expiry_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(self.token_expires_at)) - logger.info(f"成功获取access_token,过期时间: {expiry_time}") - return self.access_token - elif result.get("errcode") == 60020 and not self.use_proxy: - # 如果是IP限制错误并且未使用代理,尝试使用代理 - logger.info("IP受限,尝试使用代理API获取access_token") - self.use_proxy = True - return self.get_access_token() - else: - logger.error(f"获取access_token失败: {result}") - return None - except Exception as e: - logger.error(f"获取access_token异常: {str(e)}") - return None - - def verify_url(self, signature, timestamp, nonce, echostr): - """验证URL有效性""" - try: - # URL解码echostr - echostr = urllib.parse.unquote(echostr) - - # 1. 将token、timestamp、nonce、echostr四个参数进行字典序排序 - temp_list = [self.token, timestamp, nonce, echostr] - temp_list.sort() - - # 2. 将四个参数字符串拼接成一个字符串进行sha1加密 - temp_str = ''.join(temp_list) - hash_obj = hashlib.sha1(temp_str.encode('utf-8')) - hash_str = hash_obj.hexdigest() - - # 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 - if hash_str == signature: - # 如果验证成功,需要解密echostr - if self.encoding_aes_key: - return self.decrypt_echostr(echostr) - return echostr - else: - logger.error(f"URL验证失败: signature={signature}, hash_str={hash_str}") - return "URL验证失败" - except Exception as e: - logger.error(f"URL验证异常: {str(e)}") - return "URL验证异常" - - def decrypt_echostr(self, echostr): - """解密echostr""" - try: - # 1. 对密文进行base64解码 - aes_key = base64.b64decode(self.encoding_aes_key + '=') - encrypted = base64.b64decode(echostr) - - # 2. 使用AES解密 - cipher = AES.new(aes_key, AES.MODE_CBC, aes_key[:16]) - decrypted = cipher.decrypt(encrypted) - - # 3. 去除补位字符 - unpad = lambda s: s[:-ord(s[len(s)-1:])] - decrypted = unpad(decrypted) - - # 4. 去除16位随机字符串 - content = decrypted[16:] - xml_len = socket.ntohl(struct.unpack("I", content[:4])[0]) - xml_content = content[4:xml_len+4] - - # 5. 验证企业ID - received_id = content[xml_len+4:].decode('utf-8') - if received_id != self.corpid: - logger.error(f"企业ID验证失败: received={received_id}, expected={self.corpid}") - return "企业ID验证失败" - - return xml_content.decode('utf-8') - except Exception as e: - logger.error(f"解密echostr失败: {str(e)}") - return "解密失败" - - def parse_message(self, xml_data): - """解析接收到的XML消息""" - try: - root = ET.fromstring(xml_data) - msg = {} - for child in root: - msg[child.tag] = child.text - - # 如果消息是加密的,需要解密 - if 'Encrypt' in msg: - logger.info("消息已加密,开始解密") - decrypted = self.decrypt_message(msg['Encrypt']) - logger.info(f"解密后的消息: {decrypted}") - # 解析解密后的XML - decrypted_root = ET.fromstring(decrypted) - msg = {} - for child in decrypted_root: - msg[child.tag] = child.text - - logger.info(f"最终解析的消息: {msg}") - return msg - except Exception as e: - logger.error(f"解析消息失败: {str(e)}") - return None - - def decrypt_message(self, encrypted_msg): - """解密消息""" - try: - # 1. 对密文进行base64解码 - aes_key = base64.b64decode(self.encoding_aes_key + '=') - encrypted = base64.b64decode(encrypted_msg) - - # 2. 使用AES解密 - cipher = AES.new(aes_key, AES.MODE_CBC, aes_key[:16]) - decrypted = cipher.decrypt(encrypted) - - # 3. 去除补位字符 - unpad = lambda s: s[:-ord(s[len(s)-1:])] - decrypted = unpad(decrypted) - - # 4. 去除16位随机字符串 - content = decrypted[16:] - xml_len = socket.ntohl(struct.unpack("I", content[:4])[0]) - xml_content = content[4:xml_len+4] - - # 5. 验证企业ID - received_id = content[xml_len+4:].decode('utf-8') - if received_id != self.corpid: - logger.error(f"企业ID验证失败: received={received_id}, expected={self.corpid}") - raise Exception("企业ID验证失败") - - return xml_content.decode('utf-8') - except Exception as e: - logger.error(f"解密消息失败: {str(e)}") - raise - - def send_text_message(self, content, to_user='@all', to_party='', to_tag=''): - """发送文本消息""" - max_retries = 3 - retry_count = 0 - - while retry_count < max_retries: - try: - access_token = self.get_access_token() - - # 构建消息数据 - data = { - "touser": to_user, - "toparty": to_party, - "totag": to_tag, - "msgtype": "text", - "agentid": self.agentid, - "text": { - "content": content - } - } - - logger.info(f"发送文本消息: {data}") - - # 使用代理API发送消息 - if self.use_proxy: - url = f"{self.proxy_api_url}/cgi-bin/message/send?access_token={access_token}" - logger.info(f"使用代理API发送消息: {url}") - else: - url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={access_token}" - - response = requests.post(url, json=data) - result = response.json() - logger.info(f"发送文本消息响应: {result}") - - # 如果token过期,重新获取并重试 - if result.get('errcode') == 40014: - logger.info("access_token过期,重新获取") - self.access_token = None - self.token_expires_at = 0 - retry_count += 1 - continue - - # 如果是IP限制错误并且未使用代理,尝试使用代理 - if result.get('errcode') == 60020 and not self.use_proxy: - logger.info("IP受限,尝试使用代理API发送") - self.use_proxy = True - retry_count += 1 - continue - - # 如果是其他错误,记录并返回 - if result.get('errcode') != 0: - logger.error(f"发送消息失败: {result.get('errmsg')}") - if result.get('errcode') == 301002: # 应用ID不匹配 - logger.error("应用ID不匹配,请检查配置") - break - retry_count += 1 - continue - - return result - except Exception as e: - logger.error(f"发送文本消息失败: {str(e)}") - retry_count += 1 - if retry_count >= max_retries: - raise - time.sleep(1) # 等待1秒后重试 - - return {"errcode": -1, "errmsg": "发送消息失败,已达到最大重试次数"} - - def send_markdown_message(self, content, to_user='@all', to_party='', to_tag=''): - """发送markdown消息""" - try: - access_token = self.get_access_token() - - data = { - "touser": to_user, - "toparty": to_party, - "totag": to_tag, - "msgtype": "markdown", - "agentid": self.agentid, - "markdown": { - "content": content - } - } - - logger.info(f"发送markdown消息: {data}") - - # 使用代理API发送消息 - if self.use_proxy: - url = f"{self.proxy_api_url}/cgi-bin/message/send?access_token={access_token}" - logger.info(f"使用代理API发送消息: {url}") - else: - url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={access_token}" - - response = requests.post(url, json=data) - result = response.json() - logger.info(f"发送markdown消息响应: {result}") - - # 如果token过期,重新获取并重试 - if result.get('errcode') == 40014: - logger.info("access_token过期,重新获取") - self.access_token = None - self.token_expires_at = 0 - return self.send_markdown_message(content, to_user, to_party, to_tag) - - # 如果是IP限制错误并且未使用代理,尝试使用代理 - if result.get('errcode') == 60020 and not self.use_proxy: - logger.info("IP受限,尝试使用代理API发送") - self.use_proxy = True - return self.send_markdown_message(content, to_user, to_party, to_tag) - - return result - except Exception as e: - logger.error(f"发送markdown消息失败: {str(e)}") - raise - - def get_user_info(self, userid): - """获取用户信息""" - try: - access_token = self.get_access_token() - - # 使用代理API获取用户信息 - if self.use_proxy: - url = f"{self.proxy_api_url}/cgi-bin/user/get?access_token={access_token}&userid={userid}" - logger.info(f"使用代理API获取用户信息: {url}") - else: - url = f"https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={access_token}&userid={userid}" - - logger.info(f"获取用户信息: {url}") - response = requests.get(url) - result = response.json() - - # 如果是IP限制错误并且未使用代理,尝试使用代理 - if result.get('errcode') == 60020 and not self.use_proxy: - logger.info("IP受限,尝试使用代理API获取用户信息") - self.use_proxy = True - return self.get_user_info(userid) - - logger.info(f"获取用户信息响应: {result}") - return result - except Exception as e: - logger.error(f"获取用户信息失败: {str(e)}") - return {"errcode": -1, "errmsg": str(e)} - - def generate_temp_token(self, user_id, user_name=None): - """生成临时访问令牌""" - try: - # 生成随机令牌 - token = ''.join(random.choices(string.ascii_letters + string.digits, k=32)) - - # 存储令牌信息到Redis - token_data = { - 'user_id': user_id, - 'name': user_name or '微信用户', - 'created_at': int(time.time()) - } - - # 使用Redis存储令牌,设置过期时间 - key = f"temp_token:{token}" - redis_conn = self._get_redis_connection() - redis_conn.setex( - key, - Config.REDIS_TEMP_TOKEN_EXPIRE, - json.dumps(token_data) - ) - - # 验证令牌是否成功存储 - stored_data = redis_conn.get(key) - if not stored_data: - logger.error("令牌存储失败") - return None - - logger.info(f"成功生成临时令牌: {token}, 存储数据: {stored_data}") - return token - - except Exception as e: - logger.error(f"生成临时令牌失败: {str(e)}") - return None - - def verify_temp_token(self, token): - """验证临时访问令牌""" - try: - # 从Redis中获取令牌信息 - key = f"temp_token:{token}" - redis_conn = self._get_redis_connection() - token_info = redis_conn.get(key) - - if not token_info: - logger.error(f"临时令牌不存在或已过期: {token}") - return None - - # 解析令牌信息 - token_data = json.loads(token_info) - user_id = token_data.get('user_id') - - if not user_id: - logger.error(f"临时令牌中未找到用户ID: {token_info}") - return None - - logger.info(f"临时令牌验证成功: {token}, 用户信息: {token_data}") - return token_data - - except Exception as e: - logger.error(f"验证临时令牌失败: {str(e)}") - return None - - def send_card_message(self, title, description, url, to_user): - """发送卡片消息""" - try: - # 获取access_token - access_token = self.get_access_token() - if not access_token: - logger.error("获取access_token失败") - return None - - # 构建消息内容 - data = { - "touser": to_user, - "toparty": "", - "totag": "", - "msgtype": "textcard", - "agentid": self.agentid, - "textcard": { - "title": title, - "description": description, - "url": url, - "btntxt": "查看详情" - } - } - - logger.info(f"发送卡片消息: {data}") - - # 使用代理API发送消息 - if self.use_proxy: - api_url = f"{self.proxy_api_url}/cgi-bin/message/send?access_token={access_token}" - logger.info(f"使用代理API发送消息: {api_url}") - else: - api_url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={access_token}" - - # 发送消息 - response = requests.post(api_url, json=data) - result = response.json() - - # 如果是IP限制错误并且未使用代理,尝试使用代理 - if result.get('errcode') == 60020 and not self.use_proxy: - logger.info("IP受限,尝试使用代理API发送") - self.use_proxy = True - return self.send_card_message(title, description, url, to_user) - - if result.get('errcode') == 0: - logger.info(f"发送卡片消息成功: {result}") - return result - else: - logger.error(f"发送卡片消息失败: {result}") - return None - - except Exception as e: - logger.error(f"发送卡片消息异常: {str(e)}") - return None - - def create_menu(self): - """创建应用菜单""" - try: - # 获取access_token - access_token = self.get_access_token() - if not access_token: - logger.error("获取access_token失败") - return None - - # 菜单配置 - menu_data = { - "button": [ - { - "name": "设备查询", - "sub_button": [ - { - "type": "click", - "name": "在线统计", - "key": "online" - }, - { - "type": "click", - "name": "设备状态", - "key": "status" - } - ] - }, - { - "name": "设备管理", - "sub_button": [ - { - "type": "click", - "name": "业务下发", - "key": "deploy" - }, - { - "type": "view", - "name": "设备管理", - "url": f"{Config.BASE_URL}/devices" - }, - { - "type": "click", - "name": "序列修复", - "key": "sequence_fix" - } - ] - }, - { - "type": "click", - "name": "帮助", - "key": "help" - } - ] - } - - logger.info(f"创建菜单: {menu_data}") - - # 使用代理API创建菜单 - if self.use_proxy: - api_url = f"{self.proxy_api_url}/cgi-bin/menu/create?access_token={access_token}&agentid={self.agentid}" - logger.info(f"使用代理API创建菜单: {api_url}") - else: - api_url = f"https://qyapi.weixin.qq.com/cgi-bin/menu/create?access_token={access_token}&agentid={self.agentid}" - - # 发送请求 - response = requests.post(api_url, json=menu_data) - result = response.json() - - # 如果是IP限制错误并且未使用代理,尝试使用代理 - if result.get('errcode') == 60020 and not self.use_proxy: - logger.info("IP受限,尝试使用代理API创建菜单") - self.use_proxy = True - return self.create_menu() - - if result.get('errcode') == 0: - logger.info(f"创建菜单成功: {result}") - return result - else: - logger.error(f"创建菜单失败: {result}") - return None - - except Exception as e: - logger.error(f"创建菜单异常: {str(e)}") - return None - - def delete_menu(self): - """删除应用菜单""" - try: - # 获取access_token - access_token = self.get_access_token() - if not access_token: - logger.error("获取access_token失败") - return None - - # 使用代理API删除菜单 - if self.use_proxy: - api_url = f"{self.proxy_api_url}/cgi-bin/menu/delete?access_token={access_token}&agentid={self.agentid}" - logger.info(f"使用代理API删除菜单: {api_url}") - else: - api_url = f"https://qyapi.weixin.qq.com/cgi-bin/menu/delete?access_token={access_token}&agentid={self.agentid}" - - # 发送请求 - response = requests.get(api_url) - result = response.json() - - # 如果是IP限制错误并且未使用代理,尝试使用代理 - if result.get('errcode') == 60020 and not self.use_proxy: - logger.info("IP受限,尝试使用代理API删除菜单") - self.use_proxy = True - return self.delete_menu() - - if result.get('errcode') == 0: - logger.info(f"删除菜单成功: {result}") - return result - else: - logger.error(f"删除菜单失败: {result}") - return None - - except Exception as e: - logger.error(f"删除菜单异常: {str(e)}") - return None - - def get_menu(self): - """获取应用菜单""" - try: - # 获取access_token - access_token = self.get_access_token() - if not access_token: - logger.error("获取access_token失败") - return None - - # 使用代理API获取菜单 - if self.use_proxy: - api_url = f"{self.proxy_api_url}/cgi-bin/menu/get?access_token={access_token}&agentid={self.agentid}" - logger.info(f"使用代理API获取菜单: {api_url}") - else: - api_url = f"https://qyapi.weixin.qq.com/cgi-bin/menu/get?access_token={access_token}&agentid={self.agentid}" - - # 发送请求 - response = requests.get(api_url) - result = response.json() - - # 如果是IP限制错误并且未使用代理,尝试使用代理 - if result.get('errcode') == 60020 and not self.use_proxy: - logger.info("IP受限,尝试使用代理API获取菜单") - self.use_proxy = True - return self.get_menu() - - if result.get('errcode') == 0: - logger.info(f"获取菜单成功: {result}") - return result - else: - logger.error(f"获取菜单失败: {result}") - return None - - except Exception as e: - logger.error(f"获取菜单异常: {str(e)}") - return None \ No newline at end of file diff --git a/old/config.yaml b/old/config.yaml deleted file mode 100644 index 4c386d0..0000000 --- a/old/config.yaml +++ /dev/null @@ -1,104 +0,0 @@ -# 广西政府采购网公告监控系统配置文件 -# 复制此文件为 config.yaml 并修改相应配置 - -# 调试模式 -debug: false - -# 日志配置 -log_level: INFO -log_file: logs/gx_gp_monitor.log - - -# 爬虫配置 -crawler: - base_url: "https://zfcg.gxzf.gov.cn" - timeout: 30 # 请求超时时间(秒) - max_retries: 3 # 最大重试次数 - retry_delay: 1.0 # 重试初始延迟 - max_retry_delay: 60.0 # 重试最大延迟 - backoff_factor: 2.0 # 退避因子 - user_agents: # User-Agent列表 - - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" - - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15" - proxies: [] # 代理列表 - request_delay: 1.0 # 请求间延迟 - request_delay_max: 3.0 # 请求间最大延迟 - keyword: ["大化", "信息化"] # 关键词筛选(支持多个关键词) - start_date: "" # 开始日期 (YYYY-MM-DD) - end_date: "" # 结束日期 (YYYY-MM-DD) - max_pages: 10 # 最大页数 - page_size: 100 # 每页大小 - -# 企业微信通知配置 -wechat_app: - enabled: true # 是否启用企业微信通知 - corp_id: "ww69e8e44636f47780" # 企业ID - agent_id: "1000007" # 应用ID - secret: "SmelCwKFoL0E9ATWFzr-w7gsfXBTN72lT1UqnNd0HpI" # 应用Secret - token: "DmvL98cAF6x9CFtQZwqD2emGL8S7HxA" # Token - encoding_aes_key: "yAc4OoSCP92YTefHXYfw27WeG9oF11W9d6nw6QYlU3D" # 消息加密Key - port: 18001 # 服务端口 - host: "0.0.0.0" # 服务主机 - debug: false # 调试模式 -# 数据库配置 - DB_NAME=gx-gp-notify - DB_USER=gx-gp-notify - DB_PASSWORD=MA6RBX4F6Bd5DGmw - DB_HOST=10.10.10.14 - DB_PORT=5432 - - -# 公告来源配置 -sources: - ZcyAnnouncement1: - category_id: 66485 - name: "采购公告" - type: "purchase" - ZcyAnnouncement2: - category_id: 66485 - name: "结果公告" - type: "result" - ZcyAnnouncement3: - category_id: 66485 - name: "合同公告" - type: "contract" - ZcyAnnouncement4: - category_id: 66485 - name: "更正公告" - type: "correction" - ZcyAnnouncement5: - category_id: 66485 - name: "招标文件预公示" - type: "pre_announcement" - ZcyAnnouncement6: - category_id: 66485 - name: "单一来源公示" - type: "single_source" - ZcyAnnouncement7: - category_id: 66485 - name: "电子卖场公示" - type: "electronic_market" - ZcyAnnouncement10: - category_id: 66485 - name: "履约验收公示" - type: "acceptance" - ZcyAnnouncement11: - category_id: 66485 - name: "工程类公告" - type: "engineering" - ZcyAnnouncement20: - category_id: 66485 - name: "框架协议征集公告" - type: "framework_agreement" - ZcyAnnouncement21: - category_id: 66485 - name: "框架协议入围结果公告" - type: "framework_result" - ZcyAnnouncement23: - category_id: 66485 - name: "框架协议成交结果汇总公告" - type: "framework_summary" - "61-266648": - category_id: 66485 - name: "采购意向公开" - type: "intention" diff --git a/old/main/Main_script.py b/old/main/Main_script.py deleted file mode 100755 index 89a29f8..0000000 --- a/old/main/Main_script.py +++ /dev/null @@ -1,44 +0,0 @@ -import web_crawler as webc - -"""脚本运行指南""" -# 整个程序的启动需点击右上角的绿色三角按钮(或使用快捷组合键Shift+F10快捷启动),注意!在启动前,请先在按钮的左侧选择“当前文件”再执行。 -# 注意!!!请不要在打开公告数据导入的目标excel文件时启动该爬虫程序,程序无法对正在运行的进程文件进行修改。务必在爬虫程序启动并将数据成功导入目标excel文件后再打开并查看目标excel文件 - -"""脚本结果读取指南""" -# 这个脚本旨在爬取广西政府采购网的多个公告栏目的公告信息。 -#该脚本在运行结束之后会返回以下结果:<某专栏> 新增 xxx 条公告,已保存至excel文件中,建议确认是否有新增公告后再查看excel文件 -#每次爬取之后会把数据导出至指定excel表格,表格将会把数据按时间倒序的方式排列公告数据,同时会把属于今天的公告数据标红。excel文件默认为桌面的政府采购公告.xlsx('D:/Document/政府采购公告.xlsx') - -"""脚本参数修改指南""" -# 若没有创建相应的excel表格文件,无需担心,程序会先检测是否有对应的excel文件,若不存在该文件,程序便会自动生成。 -# excel表格的存取路径可以在utils.py中修改。请点击左侧的"项目"(或使用快捷组合键Alt+1打开项目栏),选择utils.py并打开。可以在这个文件中修改某些参数。 -# 若需要修改公告信息的筛选条件以及启动爬虫程序的代理列表,请点击左侧的"项目"(或使用快捷组合键Alt+1打开项目栏),选择utils.py并打开。可以在这个文件中修改这些参数。 -# 我已经设置了一个定时器,在每天的8:40、14:40、18:00这三个时间段,定时器会启动爬虫程序开始爬取网站。如果需要修改时间段,可以在代码的下半部分修改 -# 修改参数以及代码片段后请重新启动程序。 - -# """脚本定时启动""" -# def job(): -# print(f"任务执行于 {datetime.now()}") -# #调用爬取函数 -# webc.web_crawler() -# print(f"任务完成于 {datetime.now()}") -# -# # 安排任务在每天的8:40、14:40、18:00执行 -# # 此处可以修改时间段,只需修改括号内的时间即可,格式参照原先括号里的数即可,如需额外增加时间段,请复制代码:schedule.every().day.at("时间段").do(job)并粘贴到下方,可增加任意数量的时间段 -# schedule.every().day.at("08:37").do(job) -# schedule.every().day.at("11:55").do(job) -# schedule.every().day.at("14:45").do(job) -# schedule.every().day.at("18:00").do(job) -# -# print("脚本定时任务已启动...") -# while True: -# schedule.run_pending() -# time.sleep(1) - -"""脚本单次启动""" -def main(): - print("脚本单次任务已启动...") - webc.web_crawler() - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/old/main/utils.py b/old/main/utils.py deleted file mode 100755 index 0e559ea..0000000 --- a/old/main/utils.py +++ /dev/null @@ -1,50 +0,0 @@ -# 定义公告导出的目标excel文件路径 -FILE_PATH = "D:/Document/政府采购公告.xlsx" -# 初始化excel工作表头 -HEADER = ["标题", "发布时间", "发布单位", "内容链接", "来源栏目"] - -# 初始化工作表数量以及名称 -sheet_names = [ - "采购公告", "招标文件预公示", "采购意向公开", "结果公告", "合同公告", - "更正公告", "单一来源公示", "电子卖场公示", "履约验收公示", - "工程类公告", "框架协议征集公告", "框架协议入围结果公告", - "框架协议成交结果汇总公告", "其他" -] - -# === 初始化筛选条件 === -KEYWORD ="大化" #筛选关键词 -START_DATE ="2025-12-01" #筛选最早发布日期 -END_DATE ="2026-01-31" #筛选最晚发布日期 - -# 代理列表 -PROXIES = [ - #若要添加代理,请先测试代理是否能正常连接,否则请将代理置空 - #"http://10.10.1.10:3218", #此为无效代理,仅作示例 - #"http://user:pass@10.10.1.10:8080", #此为无效代理,仅作示例 - # 带认证的代理 - # 添加更多代理... -] - -USER_AGENTS = [ - #此为用户代理,根据实际情况修改 - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36", - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15", - # 添加更多 User-Agent... -] - -# 公告来源链接 -SOURCE_URL = { - "ZcyAnnouncement2":[66485,"结果公告"],# 结果公告 - "ZcyAnnouncement3":[66485,"合同公告"],# 合同公告 - "ZcyAnnouncement4":[66485,"更正公告"],# 更正公告 - "ZcyAnnouncement6":[66485,"单一来源公示"],# 单一来源公示 - "ZcyAnnouncement7":[66485,"电子卖场公示"],# 电子卖场公示 - "ZcyAnnouncement10":[66485,"履约验收公示"],# 履约验收公示 - "ZcyAnnouncement11":[66485,"工程类公告"],# 工程类公告 - "ZcyAnnouncement20":[66485,"框架协议征集公告"],# 框架协议征集公告 - "ZcyAnnouncement21":[66485,"框架协议入围结果公告"],# 框架协议入围结果公告 - "ZcyAnnouncement23":[66485,"框架协议成交结果汇总公告"],# 框架协议成交结果汇总公告 - "ZcyAnnouncement1":[66485,"采购公告"],# 采购公告 - "ZcyAnnouncement5":[66485,"招标文件预公示"],# 招标文件预公示 - "61-266648":[66485,"采购意向公开"]# 采购意向公开 -} \ No newline at end of file diff --git a/old/main/web_crawler.py b/old/main/web_crawler.py deleted file mode 100755 index f92cc46..0000000 --- a/old/main/web_crawler.py +++ /dev/null @@ -1,191 +0,0 @@ -import requests -import time -from datetime import datetime -import random -from fake_useragent import UserAgent -import logging -import write_to_excel as wte -import utils as Utils - -# === 获取筛选条件 === -KEYWORD =Utils.KEYWORD #关键词筛选 -START_DATE =Utils.START_DATE -END_DATE =Utils.END_DATE - -#获取公告来源链接 -SOURCE_URL = Utils.SOURCE_URL - -# === 反扒配置 === - -#获取代理列表 -PROXIES = Utils.PROXIES -USER_AGENTS = Utils.USER_AGENTS - -MAX_RETRIES = 3 # 最大重连次数 -DELAY_MIN, DELAY_MAX = 1, 3 # 随机延迟范围(秒) - -# === 日志配置 === -logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") - -def get_random_user_agent(): - """随机选择 User-Agent""" - return random.choice(USER_AGENTS) - -def get_random_proxy(): - """随机选择代理""" - if not PROXIES: - return None - proxy = random.choice(PROXIES) - return {"http": proxy, "https": proxy} - -def check_sensitive_words(user_agent,payload,category_code,childrencode): - """敏感词检查请求""" - # === 接口地址 === - url = "https://zfcg.gxzf.gov.cn/portal/sensitiveWords/check" - headers = { - "User-Agent": user_agent, - "Content-Type": "application/json;charset=UTF-8", - "Origin": "https://zfcg.gxzf.gov.cn", - "Referer": f"https://zfcg.gxzf.gov.cn/site/category?parentId={category_code}&childrenCode={childrencode}", - "Cookie": "_zcy_log_client_uuid=71e283e0-23d2-11f0-844a-eb67dfa7ab64" - } - response = requests.post(url, json=payload, headers=headers) - # print("这是敏感词检查请求返回的响应预览",response.json()) - return response.json() - -def get_announcements(category_code, childrencode,page_no=1, session=None): - """请求接口获取公告列表函数(带反扒机制)""" - if session is None: - session = requests.Session() - payload = { - # 接口的请求参数 - "keyword": KEYWORD, #关键词筛选,此参数即为搜索框中的关键词输入值 - "publishDateBegin": START_DATE, #最早日期筛选 - "publishDateEnd": END_DATE, #最晚日期筛选 - "pageNo": page_no, #页码数 - "pageSize": 15, #页容量 - "categoryCode": category_code, # 该参数指定当前查找的公告栏目 - "_t": int(time.time() * 1000) # 动态时间戳 - } - - # 先执行敏感词检查 - user_agent=get_random_user_agent() - check_response = check_sensitive_words(user_agent,payload, category_code, childrencode) - if not check_response.get("success", False): - logging.warning("敏感词检查失败") - return None - - # 再执行公告数据请求 - # === 接口地址 === - api_url = "https://zfcg.gxzf.gov.cn/portal/category" - headers = { - "User-Agent": user_agent, - "Content-Type": "application/json;charset=UTF-8", - "Origin": "https://zfcg.gxzf.gov.cn", - "Referer": f"https://zfcg.gxzf.gov.cn/site/category?parentId={category_code}&childrenCode={childrencode}", - "Cookie": "_zcy_log_client_uuid=71e283e0-23d2-11f0-844a-eb67dfa7ab64" # 如果需要登录 - } - #若添加了至少1条代理,则尝试使用代理 - if PROXIES: - proxy = 'Default_value' - else: - proxy=None - for retry in range(MAX_RETRIES): - try: - # 尝试使用代理,失败则切换为无代理 - if proxy : - proxy = get_random_proxy() - - if proxy: - logging.info(f"使用代理: {proxy['http']}") - else: - logging.info("未使用代理") - - response = session.post( - api_url, - json=payload, - headers=headers, - proxies=proxy, - timeout=10 - ) - if response.status_code == 200: - data = response.json() - if data.get("success",True): - return data - else: - logging.warning(f"接口返回失败: {data.get('error', '未知错误')}") - else: - logging.warning(f"请求失败,状态码: {response.status_code}") - except requests.exceptions.ProxyError as pe: - # 代理错误时记录并跳过,继续无代理请求 - logging.error(f"代理错误: {pe}. 切换为无代理模式") - proxy = None # 下次请求不使用代理 - except Exception as e: - logging.error(f"请求异常: {e}") - - # 重试前等待 - delay = random.uniform(DELAY_MIN, DELAY_MAX) - logging.info(f"第 {retry + 1}/{MAX_RETRIES} 次重试,等待 {delay:.1f} 秒...") - time.sleep(delay) - - return None # 所有重试失败 - -def parse_data(data,category_code,source_name): - """解析公告数据函数""" - results = [] - for item in data["result"]["data"]["data"]: - results.append({ - "标题": item["title"], - "发布时间": datetime.fromtimestamp(int(item["publishDate"]) / 1000).strftime("%Y-%m-%d"), - "发布单位": item["purchaseName"], - "内容链接": f"https://zfcg.gxzf.gov.cn/site/detail?parentId={category_code}&articleId={item['articleId']}", - "来源栏目":source_name - }) - return results - -#爬虫主函数 -def web_crawler(): - session = requests.Session() - # print("这是本地会话存储:",session) - # 初始化引用值为信息公告,先爬取信息公告栏目的公告数据 - childrencode = "ZcyAnnouncement" - # 爬取代码主体,外循环为来源栏目的循环,即遍历需要爬取的所有来源栏目 - for key in SOURCE_URL: - page = 1 - all_results = [] - # print("这是正在爬取的栏目", SOURCE_URL[key][1]) - # print("这是正在爬取的栏目的目录码", str(key)) - # 判断正确的引用值 - # 内循环主体即为在符合筛选条件的公告列表中遍历所有公告,爬取每个公告需要的指定数据。 - while True: - # 这是分割线 - # logging.info("爬虫日志分割线————————————————————————————————————————————————爬虫日志分割线") - # logging.info("爬虫日志分割线————————————————————————————————————————————————爬虫日志分割线") - # logging.info("爬虫日志分割线————————————————————————————————————————————————爬虫日志分割线") - # logging.info(f"正在爬取第 {page} 页...") - response = get_announcements(str(key), childrencode, page,session) - if response["result"]["data"]["empty"] or not response["result"]["data"]["data"]: - break - # logging.info(f"请求后共返回 {response["result"]["data"]["total"]} 条公告") - current_data = parse_data(response, SOURCE_URL[key][0], SOURCE_URL[key][1]) - if not current_data: - break - # logging.info(f"解析后共爬取 {len(current_data)} 条公告") - all_results.extend(current_data) - page += 1 - # 随机延迟 - delay = random.uniform(DELAY_MIN, DELAY_MAX) - time.sleep(delay) - - # print(f"从 {SOURCE_URL[key][1]} 共爬取 {len(all_results)} 条公告") - # 调用excel读写函数,将公告数据筛选后保存到Excel中 - wte.write_to_excel(all_results,SOURCE_URL[key][1]) - # 这是分割线 - print("公告栏目分割线————————————————————————————————————————————————公告栏目分割线") - print("公告栏目分割线————————————————————————————————————————————————公告栏目分割线") - print("公告栏目分割线————————————————————————————————————————————————公告栏目分割线") - - - - - diff --git a/old/main/write_to_excel.py b/old/main/write_to_excel.py deleted file mode 100755 index cfeda12..0000000 --- a/old/main/write_to_excel.py +++ /dev/null @@ -1,84 +0,0 @@ -import pandas as pd -from datetime import datetime -from openpyxl.styles import Font, Alignment, PatternFill, Border, Side -import schedule -import time -import utils as Utils - -# 获取excel文件路径和excel的工作表头 -FILE_PATH = Utils.FILE_PATH -HEADER = Utils.HEADER - -# 获取工作表数量以及名称 -sheet_names = Utils.sheet_names - - -def write_to_excel(results,source=""): - # 检查文件是否存在,如果不存在则创建一个新的Excel文件 - try: - df_existing = pd.read_excel(FILE_PATH, sheet_name=None) - except FileNotFoundError: - df_existing = {name: pd.DataFrame(columns=HEADER) for name in sheet_names} - - today_str = datetime.now().strftime('%Y-%m-%d') - aditional_item=0 # 记录本次爬取新增的公告数量 - # 将爬取的公告对号入座填充至excel文件的工作表中 - for result in results: - sheet_name = result["来源栏目"] if result["来源栏目"] in sheet_names else "其他" - df_sheet = df_existing[sheet_name] - - # 检查是否已存在相同内容链接的记录 - if not df_sheet[df_sheet["内容链接"] == result["内容链接"]].empty: - continue - - # 添加新记录 - new_row = pd.DataFrame([result]) - df_sheet = pd.concat([df_sheet, new_row], ignore_index=True) - aditional_item+=1 # 若有新增公告,则加1 - # 按时间降序排列 - df_sheet.sort_values(by='发布时间', ascending=False, inplace=True) - - # 更新现有数据 - df_existing[sheet_name] = df_sheet - - # 写入Excel文件 - with pd.ExcelWriter(FILE_PATH, engine='openpyxl') as writer: - for sheet_name, df in df_existing.items(): - df.to_excel(writer, sheet_name=sheet_name, index=False) - - # 获取工作表对象 - worksheet = writer.sheets[sheet_name] - - # 设置列宽 - for col_idx, column_width in enumerate([40, 15, 20, 30, 20]): - worksheet.column_dimensions[chr(65 + col_idx)].width = column_width - - # 创建红色填充 - red_fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid") - - # 创建边框样式 - thin_border = Border(left=Side(style='thin'), - right=Side(style='thin'), - top=Side(style='thin'), - bottom=Side(style='thin')) - - # 应用样式 - for row in worksheet.iter_rows(min_row=1, max_col=len(HEADER), max_row=worksheet.max_row): - publish_date = row[1].value if len(row) > 1 else None - # print("这是publish_date",publish_date) - # 若公告发布日期为今天,则将其单元格背景填充至红色 - if publish_date == today_str: - for cell in row: - cell.fill = red_fill - - for idx, cell in enumerate(row): - alignment = Alignment(horizontal='left' if idx < 4 else 'general', vertical='top', wrap_text=True) - cell.alignment = alignment - cell.border = thin_border - print(f"<{source}> 新增 {aditional_item} 条公告,已保存至excel文件中") - - - - - - diff --git a/onu.md b/onu.md deleted file mode 100644 index cfef608..0000000 --- a/onu.md +++ /dev/null @@ -1,8 +0,0 @@ -📋 关键词搜索: `未知` - 总公告数: `0` - -**更新时间: 2026-01-09 09:14:30** - - -## 无匹配公告 - -在指定时间范围内没有找到符合条件的公告。 diff --git a/test_latest_news_flow.py b/test_latest_news_flow.py deleted file mode 100644 index 27c331f..0000000 --- a/test_latest_news_flow.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python3 -""" -测试最新公告两步流程功能 -""" - -import sys -import os - -# 添加项目路径 -sys.path.insert(0, os.path.dirname(__file__)) - -try: - from gx_gp_monitor.wechat.message_handler import WeChatMessageHandler - from gx_gp_monitor.core.config_manager import load_config - - def demo_latest_news_flow(): - """演示最新公告功能流程""" - load_config() - handler = WeChatMessageHandler() - - print("🚀 最新公告功能演示") - print("=" * 50) - - # 步骤1: 点击"最新公告"菜单 - print("📱 步骤1: 用户点击'最新公告'菜单") - step1_result = handler._handle_latest_news('demo_user') - print("✅ 系统响应: 显示公告来源选择菜单") - print() - - # 步骤2: 用户选择采购公告 - print("📱 步骤2: 用户发送'1'选择采购公告") - step2_result = handler._handle_latest_news_by_source('1', 'demo_user') - print("✅ 系统响应: 显示采购公告最新10条") - print() - - # 步骤3: 用户选择查看全部 - print("📱 步骤3: 用户发送'全部'查看所有公告") - step3_result = handler._handle_latest_news_by_source('全部', 'demo_user') - print("✅ 系统响应: 显示全部来源最新10条公告") - print() - - print("🎯 功能特点:") - print("• 📋 两步交互: 先选择来源,再显示内容") - print("• 🎛️ 9种来源: 覆盖所有公告类型") - print("• 📊 智能排序: 按时间倒序显示") - print("• 💡 用户友好: 清晰的数字选择界面") - print() - - print("📝 使用方法:") - print("1. 点击企业微信菜单中的'最新公告'") - print("2. 系统显示9种公告来源选项") - print("3. 发送对应数字(1-9)或'全部'查看") - print("4. 系统显示该来源的最新10条公告") - - print("\n✅ 最新公告功能升级完成!") - - if __name__ == "__main__": - demo_latest_news_flow() - -except ImportError as e: - print(f"❌ 导入失败: {e}", file=sys.stderr) - sys.exit(1) -except Exception as e: - print(f"❌ 演示失败: {e}", file=sys.stderr) - sys.exit(1) diff --git a/test_menu_fix.py b/test_menu_fix.py deleted file mode 100644 index 6ba50b2..0000000 --- a/test_menu_fix.py +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env python3 -""" -测试修复后的菜单功能 -""" - -import sys -import os - -# 添加项目路径 -sys.path.insert(0, os.path.dirname(__file__)) - -try: - from gx_gp_monitor.wechat.message_handler import WeChatMessageHandler - from gx_gp_monitor.core.config_manager import load_config - - def test_menu_keys(): - """测试菜单key处理""" - print("🧪 测试菜单key处理...") - - handler = WeChatMessageHandler() - - # 测试旧菜单key - test_cases = [ - ("latest_announcements", "最新公告(兼容旧key)"), - ("announcements_by_type", "按类型查看公告"), - ("search_announcements", "搜索公告(兼容旧key)"), - ("latest_news", "最新公告"), - ("keyword_search", "关键词搜索"), - ("system_status", "系统状态"), - ("help_guide", "使用说明"), - ] - - results = {} - for key, description in test_cases: - try: - # 模拟事件处理 - result = handler.handle_event('click', key, 'test_user') - results[key] = result is not None and "未知菜单项" not in (result or "") - print(f"✅ {description}: {'通过' if results[key] else '失败'}") - except Exception as e: - print(f"❌ {description}: 异常 - {str(e)}") - results[key] = False - - success_count = sum(1 for success in results.values() if success) - print(f"\n📊 菜单key测试结果: {success_count}/{len(test_cases)} 通过") - - return success_count == len(test_cases) - - def test_text_commands(): - """测试文本命令处理""" - print("\n🧪 测试文本命令处理...") - - handler = WeChatMessageHandler() - - # 测试公告类型查询 - test_cases = [ - ("采购公告", "采购公告查询"), - ("结果公告", "结果公告查询"), - ("更正公告", "更正公告查询"), - ] - - results = {} - for command, description in test_cases: - try: - result = handler.handle_text_message(command, 'test_user') - results[command] = result is not None - print(f"✅ {description}: {'通过' if results[command] else '失败'}") - except Exception as e: - print(f"❌ {description}: 异常 - {str(e)}") - results[command] = False - - success_count = sum(1 for success in results.values() if success) - print(f"\n📊 文本命令测试结果: {success_count}/{len(test_cases)} 通过") - - return success_count == len(test_cases) - - def main(): - """主测试函数""" - # 加载配置 - try: - load_config() - print("✅ 配置加载成功") - except Exception as e: - print(f"❌ 配置加载失败: {e}") - return False - - print("🚀 测试修复后的菜单功能...") - print("=" * 50) - - # 测试菜单key - test1_passed = test_menu_keys() - - # 测试文本命令 - test2_passed = test_text_commands() - - print("\n" + "=" * 50) - - if test1_passed and test2_passed: - print("🎉 所有菜单功能修复测试通过!") - print("✅ 旧菜单key现在可以正常工作") - print("✅ 新增了公告类型查询功能") - else: - print("⚠️ 部分测试失败,请检查上述错误信息") - - return test1_passed and test2_passed - - if __name__ == "__main__": - main() - -except ImportError as e: - print(f"❌ 导入失败: {e}", file=sys.stderr) - sys.exit(1) -except Exception as e: - print(f"❌ 测试失败: {e}", file=sys.stderr) - sys.exit(1) diff --git a/test_wechat_menu.py b/test_wechat_menu.py deleted file mode 100644 index 5543983..0000000 --- a/test_wechat_menu.py +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env python3 -""" -测试企业微信菜单功能 -""" - -import sys -import os - -# 添加项目路径 -sys.path.insert(0, os.path.dirname(__file__)) - -try: - from gx_gp_monitor.wechat.menu_manager import WeChatMenuManager - from gx_gp_monitor.wechat.message_handler import WeChatMessageHandler - from gx_gp_monitor.core.config_manager import load_config - - def test_menu_manager(): - """测试菜单管理器""" - print("🧪 测试菜单管理器...") - - try: - # 加载配置 - load_config() - - # 创建菜单管理器 - menu_manager = WeChatMenuManager() - - # 测试菜单信息获取 - menu_info = menu_manager.get_menu_info() - print("✅ 菜单信息获取成功") - print(f" 菜单按钮数量: {menu_info['menu_structure']['total_buttons']}") - - # 打印菜单结构 - for button in menu_info['menu_structure']['buttons']: - sub_count = len(button.get('sub_buttons', [])) if isinstance(button.get('sub_buttons'), list) else button.get('sub_buttons', 0) - print(f" • {button['name']} ({sub_count}个子菜单)") - - return True - - except Exception as e: - print(f"❌ 菜单管理器测试失败: {str(e)}") - return False - - def test_message_handler(): - """测试消息处理器""" - print("🧪 测试消息处理器...") - - try: - # 创建消息处理器 - handler = WeChatMessageHandler() - - # 测试各种菜单功能 - test_results = {} - - # 测试帮助功能 - result = handler._handle_help_guide("test_user") - test_results["help_guide"] = result is not None and "广西政府采购网" in result - - # 测试联系信息 - result = handler._handle_contact_info("test_user") - test_results["contact_info"] = result is not None and "联系我们" in result - - # 测试关于系统 - result = handler._handle_about_system("test_user") - test_results["about_system"] = result is not None and "关于系统" in result - - # 测试关键词搜索菜单 - result = handler._handle_keyword_search_menu("test_user") - test_results["keyword_search"] = result is not None and "关键词搜索" in result - - # 打印测试结果 - success_count = sum(1 for success in test_results.values() if success) - print(f"✅ 消息处理器测试完成: {success_count}/{len(test_results)} 项通过") - - for func_name, success in test_results.items(): - status = "✅" if success else "❌" - print(f" {status} {func_name}") - - return success_count == len(test_results) - - except Exception as e: - print(f"❌ 消息处理器测试失败: {str(e)}") - return False - - def test_menu_structure(): - """测试菜单结构合理性""" - print("🧪 测试菜单结构...") - - try: - menu_manager = WeChatMenuManager() - menu_data = menu_manager.menu_data - - # 检查菜单结构 - checks = { - "has_buttons": len(menu_data.get("button", [])) > 0, - "max_buttons": len(menu_data.get("button", [])) <= 3, # 企业微信最多3个一级菜单 - "has_sub_buttons": all("sub_button" in btn for btn in menu_data.get("button", [])), - "sub_buttons_limit": all(len(btn.get("sub_button", [])) <= 5 for btn in menu_data.get("button", [])), - "valid_keys": True - } - - # 检查所有按钮都有有效的key - all_keys = [] - for button in menu_data.get("button", []): - for sub_btn in button.get("sub_button", []): - key = sub_btn.get("key") - if key: - all_keys.append(key) - else: - checks["valid_keys"] = False - - # 检查key唯一性 - checks["unique_keys"] = len(all_keys) == len(set(all_keys)) - - # 打印检查结果 - success_count = sum(1 for success in checks.values() if success) - print(f"✅ 菜单结构检查完成: {success_count}/{len(checks)} 项通过") - - for check_name, success in checks.items(): - status = "✅" if success else "❌" - print(f" {status} {check_name}") - - return success_count == len(checks) - - except Exception as e: - print(f"❌ 菜单结构测试失败: {str(e)}") - return False - - def main(): - """主测试函数""" - print("🚀 开始测试企业微信菜单功能...") - print("=" * 60) - - # 测试菜单管理器 - test1_passed = test_menu_manager() - print() - - # 测试消息处理器 - test2_passed = test_message_handler() - print() - - # 测试菜单结构 - test3_passed = test_menu_structure() - print() - - print("=" * 60) - - # 总体结果 - all_passed = test1_passed and test2_passed and test3_passed - if all_passed: - print("🎉 所有测试通过!企业微信菜单功能正常") - print("💡 您可以运行以下命令创建菜单:") - print(" python -c \"from gx_gp_monitor.wechat.menu_manager import WeChatMenuManager; m = WeChatMenuManager(); m.create_menu()\"") - else: - print("⚠️ 部分测试失败,请检查上述错误信息") - - return all_passed - - if __name__ == "__main__": - main() - -except ImportError as e: - print(f"❌ 导入失败: {e}", file=sys.stderr) - print("请确保已安装所有依赖: pip install -r gx_gp_monitor/requirements.txt", file=sys.stderr) - sys.exit(1) -except Exception as e: - print(f"❌ 测试失败: {e}", file=sys.stderr) - sys.exit(1) diff --git a/uwsgi-wechat.pid b/uwsgi-wechat.pid deleted file mode 100644 index 5acf379..0000000 --- a/uwsgi-wechat.pid +++ /dev/null @@ -1 +0,0 @@ -1782404 diff --git a/uwsgi_wechat.ini b/uwsgi_wechat.ini index f42da76..73f8281 100644 --- a/uwsgi_wechat.ini +++ b/uwsgi_wechat.ini @@ -24,5 +24,5 @@ vacuum = true log-date = true # 自动重载和内存报告配置 -py-autoreload = 1 -memory-report = true +; py-autoreload = 1 +; memory-report = true diff --git a/企业微信消息示例.md b/企业微信消息示例.md deleted file mode 100644 index fba880a..0000000 --- a/企业微信消息示例.md +++ /dev/null @@ -1,77 +0,0 @@ -发送应用消息 -最后更新:2025/09/24 -接口定义 -应用支持推送文本、图片、视频、文件、图文等类型。 - -请求方式:POST(HTTPS) -请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN - -参数说明: - -参数 是否必须 说明 -access_token 是 调用接口凭证 -- 各个消息类型的具体POST格式请阅后续“消息类型”部分。 -- 如果有在管理端对应用设置“在微工作台中始终进入主页”,应用在微信端只能接收到文本消息,并且文本消息的长度限制为20字节,超过20字节会被截断。同时其他消息类型也会转换为文本消息,提示用户到企业微信查看。 -- 支持id转译,将userid/部门id转成对应的用户名/部门名,在企业授权了会话内容存档接口权限时,也可以将消息id和群id转成对应的消息内容/群名称,目前仅文本/文本卡片/图文/图文(mpnews)/任务卡片/小程序通知/模版消息/模板卡片消息这八种消息类型的部分字段支持。具体支持的范围和语法,请查看附录id转译说明。 -- 支持重复消息检查,当指定 "enable_duplicate_check": 1开启: 表示在一定时间间隔内,同样内容(请求json)的消息,不会重复收到;时间间隔可通过duplicate_check_interval指定,默认1800秒。 -- 从2021年2月4日开始,企业关联添加的「小程序」应用,也可以发送文本、图片、视频、文件、图文等各种类型的消息了。 -调用建议:大部分企业应用在每小时的0分或30分触发推送消息,容易造成资源挤占,从而投递不够及时,建议尽量避开这两个时间点进行调用。 -频率限制:每应用不可超过账号上限数*200人次/天(注:若调用api一次发给1000人,算1000人次;若企业账号上限是500人,则每个应用每天可发送100000人次的消息)。每应用对同一个成员不可超过30次/分钟,1000次/小时,超过部分会被丢弃不下发 -返回示例: - -{ - "errcode" : 0, - "errmsg" : "ok", - "invaliduser" : "userid1|userid2", - "invalidparty" : "partyid1|partyid2", - "invalidtag": "tagid1|tagid2", - "unlicenseduser" : "userid3|userid4", - "msgid": "xxxx", - "response_code": "xyzxyz" -} -如果部分接收人无权限或不存在,发送仍然执行,但会返回无效的部分(即invaliduser或invalidparty或invalidtag或unlicenseduser),常见的原因是接收人不在应用的可见范围内。 -权限包含应用可见范围和基础接口权限(基础账号、互通账号均可),unlicenseduser中的用户在应用可见范围内但没有基础接口权限。 -如果全部接收人无权限或不存在,则本次调用返回失败,errcode为81013。 -返回包中的userid,不区分大小写,统一转为小写 - - - ---- -文本卡片消息 -请求示例: -``` -{ - "touser" : "UserID1|UserID2|UserID3", - "toparty" : "PartyID1 | PartyID2", - "totag" : "TagID1 | TagID2", - "msgtype" : "textcard", - "agentid" : 1, - "textcard" : { - "title" : "领奖通知", - "description" : "
2016年9月26日
恭喜你抽中iPhone 7一台,领奖码:xxxx
请于2016年10月10日前联系行政同事领取
", - "url" : "URL", - "btntxt":"更多" - }, - "enable_id_trans": 0, - "enable_duplicate_check": 0, - "duplicate_check_interval": 1800 -} -``` -参数说明: - -参数 是否必须 说明 -touser 否 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送 -toparty 否 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数 -totag 否 标签ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数 -msgtype 是 消息类型,此时固定为:textcard -agentid 是 企业应用的id,整型。企业内部开发,可在应用的设置页面查看;第三方服务商,可通过接口 获取企业授权信息 获取该参数值 -title 是 标题,不超过128个字符,超过会自动截断(支持id转译) -description 是 描述,不超过512个字符,超过会自动截断(支持id转译) -url 是 点击后跳转的链接。最长2048字节,请确保包含了协议头(http/https) -btntxt 否 按钮文字。 默认为“详情”, 不超过4个文字,超过自动截断。 -enable_id_trans 否 表示是否开启id转译,0表示否,1表示是,默认0 -enable_duplicate_check 否 表示是否开启重复消息检查,0表示否,1表示是,默认0 -duplicate_check_interval 否 表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时 - -特殊说明: -卡片消息的展现形式非常灵活,支持使用br标签或者空格来进行换行处理,也支持使用div标签来使用不同的字体颜色,目前内置了3种文字颜色:灰色(gray)、高亮(highlight)、默认黑色(normal),将其作为div标签的class属性即可,具体用法请参考上面的示例。 \ No newline at end of file