Remove obsolete scripts related to WeChat menu creation, server functionality, and cron job scheduling. Update project structure by deleting unnecessary files to streamline the codebase.
This commit is contained in:
Binary file not shown.
@@ -1,73 +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.core.config_manager import load_config
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
print("🚀 开始创建企业微信菜单...")
|
||||
print("=" * 50)
|
||||
|
||||
try:
|
||||
# 加载配置
|
||||
load_config()
|
||||
print("✅ 配置加载成功")
|
||||
|
||||
# 创建菜单管理器
|
||||
menu_manager = WeChatMenuManager()
|
||||
print("✅ 菜单管理器初始化成功")
|
||||
|
||||
# 显示当前菜单结构
|
||||
menu_info = menu_manager.get_menu_info()
|
||||
print("\n📋 菜单结构预览:")
|
||||
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}个子菜单)")
|
||||
if isinstance(button.get('sub_buttons'), list):
|
||||
for sub_btn in button['sub_buttons']:
|
||||
print(f" - {sub_btn['name']}")
|
||||
|
||||
print("\n🔄 正在创建菜单到企业微信...")
|
||||
|
||||
# 创建菜单
|
||||
result = menu_manager.create_menu()
|
||||
|
||||
if result:
|
||||
print("✅ 企业微信菜单创建成功!")
|
||||
print("\n💡 菜单功能说明:")
|
||||
print("• 🚀 监控操作:搜索、统计、筛选等核心功能")
|
||||
print("• ⚙️ 系统管理:状态监控、维护操作")
|
||||
print("• ❓ 帮助:使用说明和联系方式")
|
||||
print("\n🎯 现在可以在企业微信中查看和使用新菜单了!")
|
||||
else:
|
||||
print("❌ 企业微信菜单创建失败")
|
||||
print("💡 可能的原因:")
|
||||
print("• 企业微信配置错误")
|
||||
print("• 网络连接问题")
|
||||
print("• API权限不足")
|
||||
print("• 请检查日志文件获取详细错误信息")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ 创建菜单失败: {str(e)}")
|
||||
print("请检查配置和网络连接")
|
||||
|
||||
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)
|
||||
+36
-11
@@ -39,7 +39,7 @@ try:
|
||||
# 初始化存储
|
||||
init_storage()
|
||||
|
||||
# 执行搜索(爬取所有公告,然后进行关键词筛选)
|
||||
# 执行搜索(爬取所有公告,筛选出新增的关键词匹配公告)
|
||||
logger.info("开始执行定时搜索任务")
|
||||
crawl_results = crawl_announcements()
|
||||
|
||||
@@ -64,34 +64,58 @@ try:
|
||||
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(
|
||||
today_keyword_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)} 条匹配公告")
|
||||
logger.info(f"筛选出今天关键词匹配 {len(today_keyword_announcements)} 条公告")
|
||||
|
||||
if not today_announcements:
|
||||
logger.info("今天没有匹配关键词的公告")
|
||||
if not today_keyword_announcements:
|
||||
logger.info("今天没有关键词匹配的公告")
|
||||
return True
|
||||
|
||||
# 检查auto_announcements表,筛选出真正新增的公告
|
||||
truly_new_announcements = []
|
||||
for ann in today_keyword_announcements:
|
||||
try:
|
||||
# 直接导入,避免相对导入问题
|
||||
import gx_gp_monitor.core.database as db_module
|
||||
with db_module.get_db_cursor() as cursor:
|
||||
cursor.execute(
|
||||
"SELECT 1 FROM auto_announcements WHERE content_hash = %s LIMIT 1",
|
||||
(ann.content_hash,)
|
||||
)
|
||||
exists = cursor.fetchone() is not None
|
||||
if not exists:
|
||||
truly_new_announcements.append(ann)
|
||||
except Exception as e:
|
||||
logger.warning(f"检查公告是否存在失败: {str(e)}")
|
||||
# 如果检查失败,为了安全起见,不添加到新公告列表
|
||||
pass
|
||||
|
||||
logger.info(f"从今天关键词匹配公告中筛选出 {len(truly_new_announcements)} 条auto_announcements表中不存在的新公告")
|
||||
|
||||
if not truly_new_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,
|
||||
"date_filtered": len(keyword_filtered) - len(today_keyword_announcements),
|
||||
"duplicate_filtered": len(today_keyword_announcements) - len(truly_new_announcements),
|
||||
"source_filtered": 0
|
||||
})()
|
||||
|
||||
filtered_announcements = today_announcements
|
||||
filtered_announcements = truly_new_announcements
|
||||
|
||||
logger.info(f"关键词筛选后剩余 {len(filtered_announcements)} 条公告")
|
||||
|
||||
@@ -119,7 +143,8 @@ try:
|
||||
print("\n=== 定时搜索任务完成 ===")
|
||||
print(f"总共爬取: {total_crawled} 条公告")
|
||||
print(f"关键词筛选: {len(keyword_filtered)} 条")
|
||||
print(f"今日匹配公告: {len(today_announcements)} 条")
|
||||
print(f"今日关键词匹配: {len(today_keyword_announcements)} 条")
|
||||
print(f"真正新增公告: {len(truly_new_announcements)} 条")
|
||||
print(f"筛选后公告: {len(filtered_announcements)} 条")
|
||||
print(f"保存到数据库: {saved_count} 条")
|
||||
print(f"企业微信通知: {'成功' if notify_success else '失败' if config.wechat_app.enabled else '未启用'}")
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
"""调度模块"""
|
||||
@@ -1,372 +0,0 @@
|
||||
"""
|
||||
调度器模块
|
||||
提供定时任务调度功能,支持cron表达式和间隔执行
|
||||
"""
|
||||
|
||||
import time
|
||||
import threading
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Callable, Dict, Any, Optional, List
|
||||
import schedule
|
||||
from croniter import croniter
|
||||
|
||||
try:
|
||||
from ..core.config_manager import get_config
|
||||
from ..core.logger import get_logger
|
||||
except ImportError:
|
||||
from core.config_manager import get_config
|
||||
from core.logger import get_logger
|
||||
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
class TaskScheduler:
|
||||
"""任务调度器"""
|
||||
|
||||
def __init__(self):
|
||||
self.config = get_config().scheduler
|
||||
self._running = False
|
||||
self._thread = None
|
||||
self._jobs = {}
|
||||
self._job_stats = {}
|
||||
|
||||
# 初始化调度
|
||||
if self.config.enabled:
|
||||
self._load_jobs_from_config()
|
||||
|
||||
def _load_jobs_from_config(self):
|
||||
"""从配置加载定时任务"""
|
||||
for job_config in self.config.jobs:
|
||||
if job_config.get("enabled", False):
|
||||
job_name = job_config["name"]
|
||||
cron_expr = job_config["cron"]
|
||||
|
||||
# 根据任务名称创建对应的任务函数
|
||||
if job_name == "daily_crawl":
|
||||
func = self._create_crawl_job()
|
||||
elif job_name == "data_cleanup":
|
||||
func = self._create_cleanup_job()
|
||||
else:
|
||||
logger.warning(f"未知的任务类型: {job_name}")
|
||||
continue
|
||||
|
||||
self.add_cron_job(job_name, cron_expr, func)
|
||||
|
||||
def _create_crawl_job(self) -> Callable:
|
||||
"""创建爬取任务"""
|
||||
def crawl_job():
|
||||
try:
|
||||
logger.info("开始执行定时爬取任务")
|
||||
|
||||
# 导入这里避免循环导入
|
||||
try:
|
||||
from ..crawler.spider import crawl_announcements
|
||||
from ..filters.filters import filter_from_config
|
||||
from ..storage.postgresql import save_announcements_to_storage
|
||||
from ..storage.md_generator import generate_onu_md
|
||||
from ..notification.wechat import send_announcements_notification
|
||||
except ImportError:
|
||||
from crawler.spider import crawl_announcements
|
||||
from filters.filters import filter_from_config
|
||||
from storage.postgresql import save_announcements_to_storage
|
||||
from storage.md_generator import generate_onu_md
|
||||
from notification.wechat import send_announcements_notification
|
||||
|
||||
# 执行爬取
|
||||
crawl_results = crawl_announcements()
|
||||
|
||||
if not crawl_results:
|
||||
logger.info("定时爬取任务完成:无数据")
|
||||
return
|
||||
|
||||
# 收集所有公告
|
||||
all_announcements = []
|
||||
for result in crawl_results:
|
||||
if result.announcements:
|
||||
all_announcements.extend(result.announcements)
|
||||
|
||||
if not all_announcements:
|
||||
logger.info("定时爬取任务完成:无新公告")
|
||||
return
|
||||
|
||||
# 筛选公告
|
||||
filter_obj = filter_from_config()
|
||||
filtered_announcements, filter_stats = filter_obj.filter(all_announcements)
|
||||
|
||||
logger.info(f"筛选结果: {len(all_announcements)} -> {len(filtered_announcements)}")
|
||||
|
||||
# 保存到数据库
|
||||
saved_count = save_announcements_to_storage(filtered_announcements)
|
||||
|
||||
# 生成Markdown文件
|
||||
generate_onu_md(filtered_announcements)
|
||||
|
||||
# 发送通知
|
||||
if filtered_announcements:
|
||||
send_announcements_notification(filtered_announcements)
|
||||
|
||||
logger.info(f"定时爬取任务完成:处理 {len(filtered_announcements)} 条公告,保存 {saved_count} 条")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"定时爬取任务执行失败: {str(e)}")
|
||||
# 发送错误通知
|
||||
from ..notification.wechat import send_error_alert
|
||||
send_error_alert("定时爬取任务失败", str(e))
|
||||
|
||||
return crawl_job
|
||||
|
||||
def _create_cleanup_job(self) -> Callable:
|
||||
"""创建数据清理任务"""
|
||||
def cleanup_job():
|
||||
try:
|
||||
logger.info("开始执行数据清理任务")
|
||||
|
||||
try:
|
||||
from ..storage.postgresql import cleanup_storage
|
||||
except ImportError:
|
||||
from storage.postgresql import cleanup_storage
|
||||
|
||||
# 执行清理
|
||||
deleted_count = cleanup_storage()
|
||||
|
||||
logger.info(f"数据清理任务完成:删除 {deleted_count} 条过期数据")
|
||||
|
||||
# 发送通知(如果删除的数据较多)
|
||||
if deleted_count > 0:
|
||||
try:
|
||||
from ..notification.wechat import send_system_notification
|
||||
except ImportError:
|
||||
from notification.wechat import send_system_notification
|
||||
send_system_notification(
|
||||
"数据清理完成",
|
||||
f"已清理 {deleted_count} 条过期数据"
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"数据清理任务执行失败: {str(e)}")
|
||||
|
||||
return cleanup_job
|
||||
|
||||
def add_cron_job(self, name: str, cron_expr: str, func: Callable) -> bool:
|
||||
"""
|
||||
添加cron定时任务
|
||||
|
||||
Args:
|
||||
name: 任务名称
|
||||
cron_expr: cron表达式
|
||||
func: 任务函数
|
||||
|
||||
Returns:
|
||||
bool: 添加是否成功
|
||||
"""
|
||||
try:
|
||||
# 验证cron表达式
|
||||
croniter(cron_expr)
|
||||
|
||||
# 添加到schedule
|
||||
schedule.every().day.at("00:00").do(func) # 临时设置,会被替换
|
||||
|
||||
# 存储任务信息
|
||||
self._jobs[name] = {
|
||||
"func": func,
|
||||
"cron": cron_expr,
|
||||
"next_run": None,
|
||||
"last_run": None,
|
||||
"run_count": 0,
|
||||
"error_count": 0
|
||||
}
|
||||
|
||||
logger.info(f"添加定时任务: {name} ({cron_expr})")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"添加定时任务失败 {name}: {str(e)}")
|
||||
return False
|
||||
|
||||
def add_interval_job(self, name: str, interval_seconds: int, func: Callable) -> bool:
|
||||
"""
|
||||
添加间隔执行任务
|
||||
|
||||
Args:
|
||||
name: 任务名称
|
||||
interval_seconds: 执行间隔(秒)
|
||||
func: 任务函数
|
||||
|
||||
Returns:
|
||||
bool: 添加是否成功
|
||||
"""
|
||||
try:
|
||||
schedule.every(interval_seconds).seconds.do(func)
|
||||
|
||||
self._jobs[name] = {
|
||||
"func": func,
|
||||
"interval": interval_seconds,
|
||||
"next_run": None,
|
||||
"last_run": None,
|
||||
"run_count": 0,
|
||||
"error_count": 0
|
||||
}
|
||||
|
||||
logger.info(f"添加间隔任务: {name} ({interval_seconds}秒)")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"添加间隔任务失败 {name}: {str(e)}")
|
||||
return False
|
||||
|
||||
def remove_job(self, name: str) -> bool:
|
||||
"""
|
||||
移除任务
|
||||
|
||||
Args:
|
||||
name: 任务名称
|
||||
|
||||
Returns:
|
||||
bool: 移除是否成功
|
||||
"""
|
||||
if name in self._jobs:
|
||||
# 注意:schedule库没有直接的移除方法
|
||||
# 这里只是从我们的记录中移除
|
||||
del self._jobs[name]
|
||||
logger.info(f"移除任务: {name}")
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def start(self):
|
||||
"""启动调度器"""
|
||||
if self._running:
|
||||
logger.warning("调度器已经在运行中")
|
||||
return
|
||||
|
||||
if not self.config.enabled:
|
||||
logger.info("调度器已禁用")
|
||||
return
|
||||
|
||||
self._running = True
|
||||
self._thread = threading.Thread(target=self._run_scheduler, daemon=True)
|
||||
self._thread.start()
|
||||
|
||||
logger.info("调度器已启动")
|
||||
|
||||
def stop(self):
|
||||
"""停止调度器"""
|
||||
if not self._running:
|
||||
return
|
||||
|
||||
self._running = False
|
||||
|
||||
if self._thread and self._thread.is_alive():
|
||||
self._thread.join(timeout=5)
|
||||
|
||||
logger.info("调度器已停止")
|
||||
|
||||
def _run_scheduler(self):
|
||||
"""运行调度器主循环"""
|
||||
logger.info("调度器主循环开始")
|
||||
|
||||
while self._running:
|
||||
try:
|
||||
schedule.run_pending()
|
||||
time.sleep(1)
|
||||
except Exception as e:
|
||||
logger.error(f"调度器运行异常: {str(e)}")
|
||||
time.sleep(5) # 出错后等待5秒再继续
|
||||
|
||||
logger.info("调度器主循环结束")
|
||||
|
||||
def run_once(self, job_name: Optional[str] = None):
|
||||
"""
|
||||
手动执行任务一次
|
||||
|
||||
Args:
|
||||
job_name: 任务名称,如果为None则执行所有任务
|
||||
"""
|
||||
if job_name:
|
||||
if job_name in self._jobs:
|
||||
job_info = self._jobs[job_name]
|
||||
logger.info(f"手动执行任务: {job_name}")
|
||||
|
||||
try:
|
||||
job_info["func"]()
|
||||
job_info["run_count"] += 1
|
||||
job_info["last_run"] = datetime.now()
|
||||
logger.info(f"任务 {job_name} 执行完成")
|
||||
except Exception as e:
|
||||
job_info["error_count"] += 1
|
||||
logger.error(f"任务 {job_name} 执行失败: {str(e)}")
|
||||
else:
|
||||
logger.error(f"任务不存在: {job_name}")
|
||||
else:
|
||||
# 执行所有任务
|
||||
for name in list(self._jobs.keys()):
|
||||
self.run_once(name)
|
||||
|
||||
def get_status(self) -> Dict[str, Any]:
|
||||
"""
|
||||
获取调度器状态
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: 状态信息
|
||||
"""
|
||||
jobs_status = {}
|
||||
for name, job_info in self._jobs.items():
|
||||
jobs_status[name] = {
|
||||
"enabled": True,
|
||||
"run_count": job_info.get("run_count", 0),
|
||||
"error_count": job_info.get("error_count", 0),
|
||||
"last_run": job_info.get("last_run").isoformat() if job_info.get("last_run") else None,
|
||||
"next_run": job_info.get("next_run").isoformat() if job_info.get("next_run") else None
|
||||
}
|
||||
|
||||
return {
|
||||
"enabled": self.config.enabled,
|
||||
"running": self._running,
|
||||
"timezone": self.config.timezone,
|
||||
"jobs": jobs_status
|
||||
}
|
||||
|
||||
def is_running(self) -> bool:
|
||||
"""检查调度器是否正在运行"""
|
||||
return self._running
|
||||
|
||||
|
||||
# 全局调度器实例
|
||||
_scheduler = None
|
||||
|
||||
|
||||
def get_scheduler() -> TaskScheduler:
|
||||
"""
|
||||
获取调度器实例
|
||||
|
||||
Returns:
|
||||
TaskScheduler: 调度器实例
|
||||
"""
|
||||
global _scheduler
|
||||
if _scheduler is None:
|
||||
_scheduler = TaskScheduler()
|
||||
return _scheduler
|
||||
|
||||
|
||||
def start_scheduler():
|
||||
"""启动调度器"""
|
||||
scheduler = get_scheduler()
|
||||
scheduler.start()
|
||||
|
||||
|
||||
def stop_scheduler():
|
||||
"""停止调度器"""
|
||||
scheduler = get_scheduler()
|
||||
scheduler.stop()
|
||||
|
||||
|
||||
def run_scheduled_jobs(job_name: Optional[str] = None):
|
||||
"""
|
||||
手动执行定时任务
|
||||
|
||||
Args:
|
||||
job_name: 任务名称
|
||||
"""
|
||||
scheduler = get_scheduler()
|
||||
scheduler.run_once(job_name)
|
||||
+22019
-9
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
📋 关键词搜索: `未知` - 总公告数: `0`
|
||||
|
||||
**更新时间: 2026-01-09 17:12:55**
|
||||
|
||||
|
||||
## 无匹配公告
|
||||
|
||||
在指定时间范围内没有找到符合条件的公告。
|
||||
@@ -66,6 +66,26 @@ if [ ! -f "$CRON_SCRIPT" ]; then
|
||||
fi
|
||||
|
||||
echo "✅ 环境检查通过"
|
||||
|
||||
# 检查当前时间是否在凌晨休息时间段 (00:10 - 07:00)
|
||||
CURRENT_HOUR=$(date +%H)
|
||||
CURRENT_MINUTE=$(date +%M)
|
||||
CURRENT_TIME=$((CURRENT_HOUR * 60 + CURRENT_MINUTE))
|
||||
START_TIME=$((0 * 60 + 10)) # 00:10
|
||||
END_TIME=$((7 * 60 + 0)) # 07:00
|
||||
|
||||
if [ $CURRENT_TIME -ge $START_TIME ] && [ $CURRENT_TIME -lt $END_TIME ]; then
|
||||
echo "🌙 当前时间 $(date '+%H:%M') 在凌晨休息时间段 (00:10-07:00)"
|
||||
echo "💤 跳过爬取任务,直接结束"
|
||||
echo "========================================"
|
||||
echo "🏁 任务跳过"
|
||||
echo "📅 结束时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
||||
echo "🔚 退出代码: 0 (跳过)"
|
||||
echo "✅ 任务跳过成功"
|
||||
echo "========================================"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "🚀 启动定时搜索脚本..."
|
||||
|
||||
# 切换到项目根目录
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 广西政府采购网公告监控系统启动脚本
|
||||
|
||||
echo "=== 广西政府采购网公告监控系统启动脚本 ==="
|
||||
|
||||
# 检查Python环境
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
echo "错误: 未找到python3,请确保Python 3.8+已安装"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查虚拟环境
|
||||
if [ ! -d "venv" ]; then
|
||||
echo "错误: 未找到虚拟环境,请先运行: python3 -m venv venv"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 激活虚拟环境
|
||||
echo "激活虚拟环境..."
|
||||
source venv/bin/activate
|
||||
|
||||
# 检查依赖
|
||||
echo "检查依赖..."
|
||||
python3 -c "import sys; sys.path.insert(0, 'gx_gp_monitor'); from core.config_manager import load_config; print('依赖检查通过')" 2>/dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "错误: 依赖不完整,请运行: pip install -r gx_gp_monitor/requirements.txt"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 进入项目目录
|
||||
cd gx_gp_monitor
|
||||
|
||||
# 解析命令行参数
|
||||
COMMAND=${1:-"status"}
|
||||
shift
|
||||
|
||||
echo "执行命令: $COMMAND"
|
||||
|
||||
# 执行命令
|
||||
case $COMMAND in
|
||||
"crawl")
|
||||
python3 main.py crawl "$@"
|
||||
;;
|
||||
"cleanup")
|
||||
python3 main.py cleanup "$@"
|
||||
;;
|
||||
"status")
|
||||
python3 main.py status "$@"
|
||||
;;
|
||||
*)
|
||||
echo "使用方法: $0 {crawl|cleanup|status} [参数]"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 crawl # 执行一次爬取"
|
||||
echo " $0 crawl --keywords 大化 # 带关键词爬取"
|
||||
echo " $0 cleanup --days 30 # 清理30天前数据"
|
||||
echo " $0 status # 查看系统状态"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "=== 脚本执行完成 ==="
|
||||
@@ -0,0 +1 @@
|
||||
1265
|
||||
@@ -1,46 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
企业微信回调服务器启动脚本
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
# 添加项目路径
|
||||
sys.path.insert(0, os.path.dirname(__file__))
|
||||
|
||||
try:
|
||||
from gx_gp_monitor.wechat.callback_server import get_callback_server
|
||||
from gx_gp_monitor.core.config_manager import load_config
|
||||
from gx_gp_monitor.core.logger import get_logger
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
def main():
|
||||
"""启动企业微信回调服务器"""
|
||||
# 加载配置
|
||||
config = load_config()
|
||||
|
||||
# 获取回调服务器
|
||||
callback_server = get_callback_server()
|
||||
|
||||
# 启动服务器
|
||||
host = '0.0.0.0'
|
||||
port = 18001
|
||||
debug = config.debug if config else False
|
||||
|
||||
logger.info(f"启动企业微信回调服务器: {host}:{port}")
|
||||
print(f"启动企业微信回调服务器: {host}:{port}")
|
||||
print("回调地址: /api/v1/wechat/callback")
|
||||
callback_server.run(host=host, port=port, debug=debug)
|
||||
|
||||
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)
|
||||
@@ -0,0 +1,478 @@
|
||||
```bash
|
||||
C:\Users\Voole>curl ^"http://www.gxdh.gov.cn/xxgk/zdlyxxgk/ggzypzly/zfcgly/cggg/^" ^
|
||||
More? -H ^"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7^" ^
|
||||
More? -H ^"Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6^" ^
|
||||
More? -H ^"Connection: keep-alive^" ^
|
||||
More? -b ^"Hm_lvt_49d07951332748974d2b32f1fc826392=1761567101; _trs_uv=mh93l70k_3622_kalm^" ^
|
||||
More? -H ^"Referer: http://www.gxdh.gov.cn/xxgk/zdlyxxgk/ggzypzly/zfcgly/cggg/^" ^
|
||||
More? -H ^"Upgrade-Insecure-Requests: 1^" ^
|
||||
More? -H ^"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0^" ^
|
||||
More? --insecure
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>
|
||||
采购公告 -
|
||||
广西河池大化瑶族自治县人民政府门户网站
|
||||
</title>
|
||||
<meta name="renderer" content="webkit">
|
||||
<meta http-equiv="x-ua-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<meta name="Sitename" content="广西河池大化瑶族自治县人民政府门户网站">
|
||||
<meta name="SiteDomain" content="http://www.gxdh.gov.cn/">
|
||||
<meta name="SiteIDCode" content="4512290003">
|
||||
<meta name="ColumnName" content="采购公告" />
|
||||
<meta name="ColumnDescription" content="发布关于采购公告相关信息" />
|
||||
<meta name="ColumnKeywords" content="采购公告,采购公告">
|
||||
<meta name="ColumnType" content="采购公告">
|
||||
<link rel="stylesheet" href="/cssq/main.css">
|
||||
<link rel="stylesheet" href="/cssq/gxdh/css/main.css">
|
||||
<link rel="stylesheet" href="" id="skin">
|
||||
<link rel="stylesheet" href="/cssq/base.min.css">
|
||||
<script src="/jsq/fenye.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="http://www.gxdh.gov.cn/material/css/mobile-header.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="header">
|
||||
<div class="site-top">
|
||||
<div class="wrap">
|
||||
<div class="site-date fn-left"></div>
|
||||
<div class="top-right fn-right">
|
||||
<!--
|
||||
<a href="" target="_blank">登录</a>
|
||||
<a href="" target="_blank">注册</a>
|
||||
-->
|
||||
<!-- <a class="fn-left" href="http://www.pingguo.gov.cn/lxwm/20190422-1790072.shtml" target="_blank"><i class="icon i-weibo-top"></i></a>
|
||||
<a class="fn-left" href="http://www.pingguo.gov.cn/lxwm/20190422-1790072.shtml" target="_blank"><i class="icon i-webchat-top"></i></a> -->
|
||||
<a id="gxzf_t2s" href="javascript:void(0);" onclick="goUserCenter()">用户空间</a>|
|
||||
<script>
|
||||
function goUserCenter() {
|
||||
window.open('http://tyrz.zwfw.gxzf.gov.cn/am/auth/login?goto=aHR0cDovL3R5cnouendmdy5neHpmLmdvdi5jbi9hbS9vYXV0aDIvYXV0aG9yaXplP3NlcnZpY2U9aW5pdFNlcnZpY2UmcmVzcG9uc2VfdHlwZT1jb2RlJmNsaWVudF9pZD1neHp3ZncmY2xpZW50X3NlY3JldD0xMTExMTEmc2NvcGU9YWxsJnJlZGlyZWN0X3VyaT1odHRwJTNBLy96d2Z3Lmd4emYuZ292LmNuL2d4endmdy9tZW1iZXIvbG9naW4vdG9sb2dpbi5kbyUzRmdvdG91cmwlM0RodHRwJTI1M0EvL3p3ZncuZ3h6Zi5nb3YuY24=&lackFlag=NA');
|
||||
var cont = $('meta[name="ColumnType"]').attr('content');
|
||||
if (cont == '首页') {
|
||||
$.getJSON(json, function (res) {
|
||||
$("#sliderNav").empty();
|
||||
var arr = randomArray(res, 7); //json数组,展示个数1
|
||||
appEnd(arr);
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<a id="gxzf_t2s" href="http://www.gxdh.gov.cn/gx-znwd/home/gxdh" target="_blank">智能问答</a>|
|
||||
<a id="gxzf_t2s" href="javascript: void(0); " target="_self">简体版</a>|
|
||||
<a id="gxzf_s2t" href="javascript: void(0); " target="_self">繁体版</a>
|
||||
<!--
|
||||
|<a href="#">English</a>
|
||||
-->
|
||||
|
||||
<div class="ipv6">支持IPv6</div>
|
||||
<div id="gt_btn" class="ipv6 i-wza i-wza-people">无障碍</div>
|
||||
<div class="ipv6 i-zzzq">
|
||||
<a href="http://www.gxdh.gov.cn/zzzq/" target="_blank">长者专区</a>
|
||||
</div>
|
||||
<div class="i-jy"><a href="http://dsjfzj.gxzf.gov.cn/fzlm/gxzfwzjyhdh/index.shtml#10" target="_blank">集</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site-banner">
|
||||
<div class="site-warp">
|
||||
<a class="logo-wrap" href="/" target="_blank">
|
||||
<img id="icon_gh" width="120" src="/imagesq/icon-gh.png" />
|
||||
<img class="Company_name" src="http://www.gxdh.gov.cn/material/images/logo_ash.png" alt=" 广西河池大化瑶族自治县人民政府门户网站" />
|
||||
</a>
|
||||
<div class="site-search fn-right">
|
||||
<div class="site-box">
|
||||
<input class="site-search-txt" placeholder="请输入搜索内容" name="searchWord" type="text" />
|
||||
<input type="hidden" name="siteId" value="121" />
|
||||
<input class="i-site site-search-submit" type="button" value="" onClick="doSearch(this)" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="nav-list">
|
||||
<ul class="nav">
|
||||
<li class="i-index"><a href="http://www.gxdh.gov.cn/" target="_blank">首页</a></li>
|
||||
<li class="i-city"><a href="http://www.gxdh.gov.cn/zjdh/" target="_blank">走进大化</a></li>
|
||||
<li class="i-info-site"><a href="http://www.gxdh.gov.cn/xxgk/" target="_blank">政府信息公开</a></li>
|
||||
<li class="i-info-site"><a href="http://www.gxdh.gov.cn/ggfw/" target="_blank">公共服务</a></li>
|
||||
<li class="i-int"><a href="https://zwfw.gxzf.gov.cn/eportal/ui?regionCode=3107103&pageId=3cd3d403fb4443d5becb61375b2b093a" target="_blank">网上办事</a></li>
|
||||
<li class="i-info-site"><a href="http://www.gxdh.gov.cn/zwdt/" target="_blank">政务地图</a></li>
|
||||
<li class="i-exc"><a href="http://www.gxdh.gov.cn/zmhd/" target="_blank">互动交流</a></li>
|
||||
<li class="i-data-site"><a href="http://www.gxdh.gov.cn/sjfb/" target="_blank">数据发布</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!--<style type="text/css">
|
||||
.site-warp { background: url('http://www.gxdh.gov.cn/material/images/banner-bg.gif') 140px bottom no-repeat #fff;}
|
||||
</style>-->
|
||||
<style type="text/css">
|
||||
.site-banner,.site-warp{height:405px;background: none; position: relative;}
|
||||
.site-top{background: #eaf3fe66;}
|
||||
.site-search{margin-top: 0px; border: none; width: 338px;}
|
||||
.site-box{box-sizing: border-box; background: #eaf3fe66; padding: 8px; overflow: hidden;}
|
||||
.logo{margin-top: 35px; position: absolute; left: 50%; transform: translateX(-50%);}
|
||||
.nav{width: 1140px; margin: 0 auto;}
|
||||
.nav li{margin: 0 14px;}
|
||||
body{background: url(http://www.gxdh.gov.cn/material/images/dhrm_bg.jpg) top center no-repeat #f1f6fc;}
|
||||
.ipv6{background-color: #4da0e2; color: #fff; font-size: 10px; line-height: 24px;float: right; margin-top: 3px;
|
||||
padding: 0 10px; border-radius: 13px; height: 26px;}
|
||||
.i-wza-people{padding-left: 25px;background-position: 7px 0px;}
|
||||
.logo-wrap{display: block;width: 100%;margin: auto;}
|
||||
img.Company_name.grayscale, img.Company_name {display: block; width: 800px; margin: 0 auto;}
|
||||
img#icon_gh {display: block;width: 120px;margin: 0 auto; margin-top: 45px;}
|
||||
.i-zzzq {
|
||||
background-image: url(/material/images/zzzq/icon-laoren.png);
|
||||
background-position: 10px 5px;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 15px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.i-zzzq a {
|
||||
display: block;
|
||||
width: 60px;
|
||||
text-align: right;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div class="wrap bg-white">
|
||||
<div class="crumb-nav">
|
||||
当前位置:
|
||||
<a href="../../../../../" target="_self" title="首页" class="CurrChnlCls">首页</a> > <a href="../../../../" target="_self" title="政府信息公开" class="CurrChnlCls">政府信息公开</a> > <a href="../../../" target="_self" title="重点领域信息 公开" class="CurrChnlCls">重点领域信息公开</a> > <a href="../../" target="_self" title="公共资源配置领域" class="CurrChnlCls">公共资源配置领域</a> > <a href="../" target="_self" title="政府采购领域" class="CurrChnlCls">政府采购领域</a> > <a href="./" target="_self" title="采购公告" class="CurrChnlCls">采购公告</a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="morelist" class="more">
|
||||
|
||||
<div class="r_lmgd lmgd" style="display: none;"
|
||||
data-gd="0">
|
||||
<p>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<ul class="more-list">
|
||||
|
||||
<li><span>
|
||||
2026-01-28
|
||||
</span>
|
||||
<a href="./t27193876.shtml" target="_blank" title="2025年度第二批中央水库移民后期扶持基金项目建设计划的竞争性 磋商招标公告">2025年度第二批中央水库移民后期扶持基金项目建设计划的竞争性磋商招标公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2026-01-28
|
||||
</span>
|
||||
<a href="./t27193548.shtml" target="_blank" title="大化镇坡了社区智慧村屯应急预警项目邀请报价的公告">大化镇坡 了社区智慧村屯应急预警项目邀请报价的公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2026-01-27
|
||||
</span>
|
||||
<a href="./t27195202.shtml" target="_blank" title="大化瑶族自治县七百弄乡2025年粤桂协作社会帮扶资金项目监理单 位邀请报名公告">大化瑶族自治县七百弄乡2025年粤桂协作社会帮扶资金项目监理单位邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2026-01-27
|
||||
</span>
|
||||
<a href="./t27189570.shtml" target="_blank" title="宝安区援助大化瑶族自治县中医医院附属项目设计单位邀请报名公 告">宝安区援助大化瑶族自治县中医医院附属项目设计单位邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2026-01-26
|
||||
</span>
|
||||
<a href="./t27187394.shtml" target="_blank" title="关于大化瑶族自治县紧密型县域医共体强基工程建设项目建议书及 可行性研究报告编制服务单位邀请报名公告">关于大化瑶族自治县紧密型县域医共体强基工程建设项目建议书及可行性研究报告编制服务单位邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2026-01-23
|
||||
</span>
|
||||
<a href="./t27171613.shtml" target="_blank" title="关于2026年巩固拓展脱贫攻坚成果和乡村振兴项目预算审查服务公 司公开招募的公告">关于2026年巩固拓展脱贫攻坚成果和乡村振兴项目预算审查服务公司公开招募的公告</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<div class="r_lmgd lmgd" style="display: none;"
|
||||
data-gd="0">
|
||||
<p>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<ul class="more-list">
|
||||
|
||||
<li><span>
|
||||
2026-01-23
|
||||
</span>
|
||||
<a href="./t27169946.shtml" target="_blank" title="大化瑶族自治县大化镇达悟村东红屯村容村貌改造项目等3个项目设计单位邀请报名公告">大化瑶族自治县大化镇达悟村东红屯村容村貌改造项目等3个项目设计单位邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2026-01-23
|
||||
</span>
|
||||
<a href="./t27168862.shtml" target="_blank" title="大化瑶族自治县七百弄乡2025年粤桂协作社会帮扶资金项目施工单 位邀请报名公告">大化瑶族自治县七百弄乡2025年粤桂协作社会帮扶资金项目施工单位邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2026-01-23
|
||||
</span>
|
||||
<a href="./t27172680.shtml" target="_blank" title="大化瑶族自治县住房和城乡建设局关于2026年生态环境保护专项资 金农村环境综合整治项目(污水处理)工程设计预算、 项目监理、招标代理、预算审核等 服务邀请报名的公告">大化瑶族自治县住房和城乡建设局关于2026年生态环境保护专项资金农村环境综合整治项目(污水处理)工程设计预算、 项目监理、招标代理、预算审核等 服务邀请报名的公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2026-01-19
|
||||
</span>
|
||||
<a href="./t27150343.shtml" target="_blank" title="关于择优录用项目水保验收和报备服务单位的公告">关于择优录用 项目水保验收和报备服务单位的公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2026-01-12
|
||||
</span>
|
||||
<a href="./t27103117.shtml" target="_blank" title="大化瑶族自治县中医医院排洪管道改造及支护项目监理单位邀请报 名公告">大化瑶族自治县中医医院排洪管道改造及支护项目监理单位邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2026-01-09
|
||||
</span>
|
||||
<a href="./t27098415.shtml" target="_blank" title="大化县2024年农村人居环境整治新增项目邀请报名公告">大化县2024年农村人居环境整治新增项目邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<div class="r_lmgd lmgd" style="display: none;"
|
||||
data-gd="0">
|
||||
<p>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<ul class="more-list">
|
||||
|
||||
<li><span>
|
||||
2025-12-26
|
||||
</span>
|
||||
<a href="./t27057491.shtml" target="_blank" title="大化瑶族自治县文化广电体育和旅游局关于承办大化红水河亲水徒 步大会暨UTO大化越野跑山赛”项目招标公告">大化瑶族自治县文化广电体育和旅游局关于承办大化红水河亲水徒步大会暨UTO大化越野跑山赛”项目招标公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-12-22
|
||||
</span>
|
||||
<a href="./t27033543.shtml" target="_blank" title="大化瑶族自治县卫生健康局关于大化瑶族自治县中医医院排洪管道 改造及支护项目建设邀请报名公告">大化瑶族自治县卫生健康局关于大化瑶族自治县中医医院排洪管道改造及支护项目建设邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-12-18
|
||||
</span>
|
||||
<a href="./t27023381.shtml" target="_blank" title="大化瑶族自治县大化镇仁良村党群服务中心地质勘测邀请报名公告">大化瑶族自治县大化镇仁良村党群服务中心地质勘测邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-12-12
|
||||
</span>
|
||||
<a href="./t26628863.shtml" target="_blank" title="大化瑶族自治县教育局关于大化瑶族自治县实验中学机器人设备采 购项目邀请报价的公告">大化瑶族自治县教育局关于大化瑶族自治县实验中学机器人设备采购项目邀请报价的公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-12-10
|
||||
</span>
|
||||
<a href="./t26522720.shtml" target="_blank" title="大化瑶族自治县住房和城乡建设局关于组织开展大化瑶族自治县住 宅专项维修资金专户管理银行服务项目招标代理机构的议标报名公告">大化瑶族自治县住房和城乡建设局关于组织开展大化瑶族自治县住宅专项维修资金专户管理银行服务项目招标代理机构的议标报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-12-05
|
||||
</span>
|
||||
<a href="./t26276809.shtml" target="_blank" title="大化瑶族自治县发展和改革局关于2026年巩固拓展脱贫攻坚成果同 乡村振兴项目设计服务公司公开招募公告">大化瑶族自治县发展和改革局关于2026年巩固拓展脱贫攻坚成果同乡村振兴项目设计服务公司公开招募公告</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<div class="r_lmgd lmgd" style="display: none;"
|
||||
data-gd="0">
|
||||
<p>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<ul class="more-list">
|
||||
|
||||
<li><span>
|
||||
2025-12-01
|
||||
</span>
|
||||
<a href="./t26230612.shtml" target="_blank" title="大化瑶族自治县特殊教育学校特教教具康复设备采购邀请报价公告">大化瑶族自治县特殊教育学校特教教具康复设备采购邀请报价公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-11-27
|
||||
</span>
|
||||
<a href="./t26214442.shtml" target="_blank" title="大化县贡川乡坡线屯风貌改造提升工程—建筑改造项目、大化县重点乡镇棚户区改造项目北景镇2016年棚户区改造项目(I标段)、 大化县重点乡镇棚户区改造项目大化县都阳镇2016年棚户区改造项目(II标段)结算审核咨询工作招标公告">大化县贡川乡坡线屯风貌改造提升工程—建筑改造项目、大化县重点乡镇棚户区改造项目北景镇2016年棚户区改造项目(I标段)、 大化县重 点乡镇棚户区改造项目大化县都阳镇2016年棚户区改造项目(II标段)结算审核咨询工作招标公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-11-26
|
||||
</span>
|
||||
<a href="./t26211785.shtml" target="_blank" title="大化县2025年度城市C级危房维修加固 工程项目(大化县工程局住 宅楼五区1栋)维修加固方案编制、预算审核及监理单位招标公告">大化县2025年度城市C级危房维修加固 工程项目(大化县工程局住宅楼五区1栋)维修加固方案编制、预算审核及监理单位招标公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-11-24
|
||||
</span>
|
||||
<a href="./t26197396.shtml" target="_blank" title="大化镇上旗村望远至下刁、东盘、内角屯道路扩建工程监理单位邀 请报名公告">大化镇上旗村望远至下刁、东盘、内角屯道路扩建工程监理单位邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-11-24
|
||||
</span>
|
||||
<a href="./t26197388.shtml" target="_blank" title="大化镇上旗村望远至下刁、东盘、内角屯道路扩建工程施工单位邀 请报名公告">大化镇上旗村望远至下刁、东盘、内角屯道路扩建工程施工单位邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-11-24
|
||||
</span>
|
||||
<a href="./t26197374.shtml" target="_blank" title="大化瑶族自治县大化镇凤翔村美凤屯弄卜里甘蔗产业道路硬化项目 等3个项目监理单位邀请报名公告">大化瑶族自治县大化镇凤翔村美凤屯弄卜里甘蔗产业道路硬化项目等3个项目监理单位邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<div class="r_lmgd lmgd" style="display: none;"
|
||||
data-gd="0">
|
||||
<p>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<ul class="more-list">
|
||||
|
||||
<li><span>
|
||||
2025-11-24
|
||||
</span>
|
||||
<a href="./t26197360.shtml" target="_blank" title="大化瑶族自治县大化镇凤翔村美凤屯弄卜里甘蔗产业道路硬化项目 等3个项目施工单位邀请报名公告">大化瑶族自治县大化镇凤翔村美凤屯弄卜里甘蔗产业道路硬化项目等3个项目施工单位邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-11-17
|
||||
</span>
|
||||
<a href="./t26175508.shtml" target="_blank" title="大化瑶族自治县人力资源和社会保障局关于面向社会公开询价采购2026年基层公共就业服务项目的公告">大化瑶族自治县人力资源和社会保障局关于面向社会公开询价采购2026年基层公共就业服务项目的公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-11-17
|
||||
</span>
|
||||
<a href="./t26178684.shtml" target="_blank" title="大化瑶族自治县高级中学科教综合楼桩基检测专项服务项目分散采 购询价公告">大化瑶族自治县高级中学科教综合楼桩基检测专项服务项目分散采购询价公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-11-13
|
||||
</span>
|
||||
<a href="./t26164807.shtml" target="_blank" title="大化瑶族自治县人力资源和社会保障局关于为大化瑶族自治县2026 年度公益性岗位在岗人员购买意外伤害商业保险的询价公告">大化瑶族自治县人力资源和社会保障局关于为大化瑶族自治县2026年度公益性岗位在岗人员购买意外伤害商业保险的询价公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-11-13
|
||||
</span>
|
||||
<a href="./t26164559.shtml" target="_blank" title="大化瑶族自治县乡镇枢纽农村产业服务中心项目监理服务机构邀请 报名公告">大化瑶族自治县乡镇枢纽农村产业服务中心项目监理服务机构邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
<li><span>
|
||||
2025-11-12
|
||||
</span>
|
||||
<a href="./t26157706.shtml" target="_blank" title="大化瑶族自治县2025年革命老区转移支付增量资金建设项目邀请报 名公告">大化瑶族自治县2025年革命老区转移支付增量资金建设项目邀请报名公告</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<div class="page">
|
||||
<div class="more-page">
|
||||
<script>createPageHTML(22, 0, "index", "shtml", "647");</script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="footer-site">
|
||||
<div class="wrap">
|
||||
<ul style="width: 100%;">
|
||||
<li class="footer-link-wrong">
|
||||
<script id="_jiucuo_" sitecode='4512290003' src='https://zfwzgl.www.gov.cn/exposure/jiucuo.js'></script>
|
||||
</li>
|
||||
<li class="footer-link-gov"><a href="http://bszs.conac.cn/sitename?method=show&id=27249F7FD0875813E053012819AC8426" target="_blank"><img id="imgConac" src="/imagesq/dzjg.png" data-bd-imgshare-binded="1" vspace="0" hspace="0" border="0" /></a></li>
|
||||
<li class="footer-txt">
|
||||
<p>
|
||||
<a href="http://www.gxdh.gov.cn/map.shtml" target="_blank">网站地图</a>
|
||||
<a href="http://www.gxdh.gov.cn/lxwm/t885224.shtml" target="_BLANK" title="联系我们">联系我们</a></p>
|
||||
<p>主办:大化瑶族自治县人民政府办公室</p>
|
||||
<p>承办:大化瑶族自治县大数据发展局</p>
|
||||
<p>地址:大化瑶族自治县大化镇花锦路2号 邮编:530800</p>
|
||||
<p>联系电话:0778-5872869仅受理网站建设维护相关事宜</p>
|
||||
<p>邮箱:dhdsjj2019@126.com</p>
|
||||
<p>
|
||||
<a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=45122902000008" target="_blank">
|
||||
<img src="/imagesq/ba.png" /> 桂公网安备 45122902000008号
|
||||
</a> <a href="http://beian.miit.gov.cn" target="_blank">桂ICP备14001878号-1
|
||||
</a>网站标识码 :4512290003
|
||||
</p>
|
||||
</li>
|
||||
<!--<li class="footer-link-wrong" style="width: 250px;padding-top: 0px;">
|
||||
<a href="http://www.gxzf.gov.cn/wxhkhd/message.shtml?n=广西河池大化瑶族自治县人民政府门户网站&aid=822&sid=129" target="_blank">
|
||||
<img src="http://www.gxdh.gov.cn/material/images/wzjc.png" />
|
||||
</a>
|
||||
</li>-->
|
||||
<li class="footer-web" style="padding-left: 9px;">
|
||||
<img src="http://www.gxdh.gov.cn/wbwx/material/dhyzzzxzfmhwz1.jpg" width="100px" alt="微信公众号" /><p>微信公众号</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<style type="text/css">
|
||||
.footer-txt{width: 552px;}
|
||||
</style>
|
||||
<!--百度统计BEG-->
|
||||
<script>
|
||||
var _hmt = _hmt || [];
|
||||
(function() {
|
||||
var hm = document.createElement("script");
|
||||
hm.src = "https://hm.baidu.com/hm.js?49d07951332748974d2b32f1fc826392";
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
})();
|
||||
</script>
|
||||
<!--百度统计END-->
|
||||
<script src="/jsq/jquery.min.js"></script>
|
||||
<script src="/jsq/jquery.cookie.js"></script>
|
||||
<script src="/jsq/jquery.s2t.js"></script>
|
||||
<script src="/jsq/jquery.qrcode.min.js"></script>
|
||||
<script src="/jsq/chinese_status.js"></script>
|
||||
<script src="/jsq/checklink.min.js"></script>
|
||||
<script src="/jsq/main.js"></script>
|
||||
<script src="/jsq/wza.js"></script>
|
||||
|
||||
<script src="/jsq/api_gwy.js"></script>
|
||||
<script src="http://www.gxdh.gov.cn/material/js/Access_conf.js"></script>
|
||||
<!--无障碍-->
|
||||
<script type="text/javascript">document.write("<script src='/accessTool/Access_Initial.js?"+Math.random()+"'><\/script>");</script>
|
||||
|
||||
|
||||
<script>
|
||||
var version =Date.parse(new Date());
|
||||
document.write('<script src="/jsq/api_func.js?v='+version+'"><\/script>');
|
||||
SITEID = 129;
|
||||
APPID = 25;
|
||||
</script>
|
||||
|
||||
</script><script id="_trs_ta_js" src="//ta.trs.cn/c/js/ta.js?mpid=3622" async="async" defer="defer"></script>
|
||||
<script src="http://www.gxdh.gov.cn/material/js/M-index.js" type="text/javascript" charset="utf-8"></script>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const elements = document.querySelectorAll('div[data-gd="0"]');
|
||||
elements.forEach(function (element) {
|
||||
element.style.display = 'none';
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</html>
|
||||
Reference in New Issue
Block a user