This commit is contained in:
BF
2026-05-06 16:30:59 +08:00
parent 83ab7a79e8
commit c2276f17f4
36 changed files with 432386 additions and 543 deletions

290
update_update_thread.py Normal file
View File

@@ -0,0 +1,290 @@
# 读取文件内容
with open('G:\PyCode\domainScanDemo\app\ui\domain_filter.py', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 找到UpdateThread类的开始和结束行
start_line = -1
end_line = -1
for i, line in enumerate(lines):
if 'class UpdateThread(QThread):' in line:
start_line = i
elif start_line != -1 and 'class QueryThread(QThread):' in line:
end_line = i
break
if start_line != -1 and end_line != -1:
# 构建新的UpdateThread类
new_update_thread = [
'class UpdateThread(QThread):\n',
' """\n',
' 批量更新线程\n',
' """\n',
' update_finished = Signal(int, dict)\n',
' \n',
' def __init__(self, selected_domains, update_values):\n',
' super().__init__()\n',
' self.selected_domains = selected_domains\n',
' self.update_values = update_values\n',
' \n',
' def run(self):\n',
' """\n',
' 执行批量更新\n',
' """\n',
' # 转换状态值的映射\n',
' status_mappings = {\n',
' \'复核状态\': {\n',
' \'无需复核\': 0,\n',
' \'待人工复核\': 1,\n',
' \'人工通过\': 2,\n',
' \'人工拒绝\': 3\n',
' },\n',
' \'备案历史\': {\n',
' \'待检测\': 1,\n',
' \'有备案记录\': 2,\n',
' \'没有备案记录\': 3\n',
' },\n',
' \'备案年份\': {\n',
' \'2026\': 2026,\n',
' \'2025\': 2025,\n',
' \'2024\': 2024,\n',
' \'2023\': 2023,\n',
' \'2022\': 2022,\n',
' \'2021\': 2021,\n',
' \'2020\': 2020\n',
' },\n',
' \'域名快照年份\': {\n',
' \'2026,2025,2024\': \'2026,2025,2024\',\n',
' \'2026\': \'2026\',\n',
' \'2025\': \'2025\',\n',
' \'2024\': \'2024\',\n',
' \'2023\': \'2023\',\n',
' \'2022\': \'2022\',\n',
' \'2021\': \'2021\',\n',
' \'2020\': \'2020\'\n',
' },\n',
' \'单位性质\': {\n',
' \'企业\': \'企业\',\n',
' \'个人\': \'个人\'\n',
' },\n',
' \'百度历史收录状态\': {\n',
' \'\': True,\n',
' \'\': False\n',
' },\n',
' \'百度site收录状态\': {\n',
' \'\': True,\n',
' \'\': False\n',
' },\n',
' \'title是否简体中文\': {\n',
' \'\': True,\n',
' \'\': False\n',
' },\n',
' \'360 site收录状态\': {\n',
' \'\': True,\n',
' \'\': False\n',
' },\n',
' \'Google site收录状态\': {\n',
' \'\': True,\n',
' \'\': False\n',
' },\n',
' \'快照历史友链数量是否大于10\': {\n',
' \'\': True,\n',
' \'\': False\n',
' }\n',
' }\n',
' \n',
' updated_count = 0\n',
' update_data = {}\n',
' \n',
' try:\n',
' db = Database()\n',
' # 获取一个数据库连接,在整个批量更新过程中使用\n',
' conn, cur = db.connect()\n',
' if not conn or not cur:\n',
' logger.error("获取数据库连接失败")\n',
' self.update_finished.emit(0, {})\n',
' return\n',
' \n',
' try:\n',
' for domain in self.selected_domains:\n',
' # 获取域名ID\n',
' domain_info = db.get_domain_by_name(domain)\n',
' if domain_info:\n',
' try:\n',
' domain_update_data = {}\n',
' \n',
' # 1. 复核状态\n',
' review_status_value = self.update_values[\'review_status\']\n',
' if review_status_value != \'不更新\':\n',
' status_value = status_mappings[\'复核状态\'][review_status_value]\n',
' cur.execute("UPDATE domains SET review_status = %s WHERE id = %s", (status_value, domain_info[\'id\']))\n',
' domain_update_data[\'review_status\'] = review_status_value\n',
' \n',
' # 2. 域名过期时间\n',
' expire_date_value = self.update_values[\'expire_date\']\n',
' if expire_date_value and expire_date_value != \'不更新\':\n',
' if expire_date_value == \'当前时间\':\n',
' cur.execute("UPDATE domains SET expire_date = CURRENT_TIMESTAMP WHERE id = %s", (domain_info[\'id\'],))\n',
' import datetime\n',
' domain_update_data[\'expire_date\'] = datetime.datetime.now().strftime(\'%Y-%m-%d %H:%M:%S\')\n',
' else:\n',
' cur.execute("UPDATE domains SET expire_date = %s WHERE id = %s", (expire_date_value, domain_info[\'id\']))\n',
' domain_update_data[\'expire_date\'] = expire_date_value\n',
' \n',
' # 3. 备案历史\n',
' has_beian_value = self.update_values[\'has_beian\']\n',
' if has_beian_value != \'不更新\':\n',
' status_value = status_mappings[\'备案历史\'][has_beian_value]\n',
' cur.execute("UPDATE domains SET has_beian = %s WHERE id = %s", (status_value, domain_info[\'id\']))\n',
' domain_update_data[\'has_beian\'] = has_beian_value\n',
' \n',
' # 4. 备案年份\n',
' beian_year_value = self.update_values[\'beian_year\']\n',
' if beian_year_value and beian_year_value != \'不更新\':\n',
' cur.execute("UPDATE domains SET beian_year = %s WHERE id = %s", (beian_year_value, domain_info[\'id\']))\n',
' domain_update_data[\'beian_year\'] = beian_year_value\n',
' \n',
' # 5. 域名快照年份\n',
' snapshot_years_value = self.update_values[\'snapshot_years\']\n',
' if snapshot_years_value and snapshot_years_value != \'不更新\':\n',
' cur.execute("UPDATE domains SET snapshot_years = %s WHERE id = %s", (snapshot_years_value, domain_info[\'id\']))\n',
' domain_update_data[\'snapshot_years\'] = snapshot_years_value\n',
' \n',
' # 6. 单位性质\n',
' company_type_value = self.update_values[\'company_type\']\n',
' if company_type_value != \'不更新\':\n',
' status_value = status_mappings[\'单位性质\'][company_type_value]\n',
' cur.execute("UPDATE domains SET company_type = %s WHERE id = %s", (status_value, domain_info[\'id\']))\n',
' domain_update_data[\'company_type\'] = company_type_value\n',
' \n',
' # 7. 检测时间\n',
' detect_time_value = self.update_values[\'detect_time\']\n',
' if detect_time_value and detect_time_value != \'不更新\':\n',
' if detect_time_value == \'当前时间\':\n',
' cur.execute("UPDATE domains SET detect_time = CURRENT_TIMESTAMP WHERE id = %s", (domain_info[\'id\'],))\n',
' import datetime\n',
' domain_update_data[\'detect_time\'] = datetime.datetime.now().strftime(\'%Y-%m-%d %H:%M:%S\')\n',
' else:\n',
' cur.execute("UPDATE domains SET detect_time = %s WHERE id = %s", (detect_time_value, domain_info[\'id\']))\n',
' domain_update_data[\'detect_time\'] = detect_time_value\n',
' \n',
' # 8. 检查domain_detections表中是否存在记录\n',
' cur.execute("SELECT id FROM domain_detections WHERE domain_id = %s", (domain_info[\'id\'],))\n',
' detection_id = cur.fetchone()\n',
' \n',
' # 9. 首页网址\n',
' website_url_value = self.update_values[\'website_url\']\n',
' if website_url_value != \'不更新\':\n',
' # 更新域名表中的website_url字段\n',
' cur.execute("UPDATE domains SET website_url = %s WHERE id = %s", (website_url_value, domain_info[\'id\']))\n',
' domain_update_data[\'website_url\'] = website_url_value\n',
' \n',
' # 10. 百度历史收录状态\n',
' baidu_history_value = self.update_values[\'baidu_history\']\n',
' if baidu_history_value != \'不更新\':\n',
' status_value = status_mappings[\'百度历史收录状态\'][baidu_history_value]\n',
' # 转换为JSON格式\n',
' import json\n',
' json_value = json.dumps({"status": status_value})\n',
' if detection_id:\n',
' cur.execute("UPDATE domain_detections SET baidu_history = %s WHERE domain_id = %s", (json_value, domain_info[\'id\']))\n',
' else:\n',
' cur.execute("INSERT INTO domain_detections (domain_id, baidu_history) VALUES (%s, %s)", (domain_info[\'id\'], json_value))\n',
' domain_update_data[\'baidu_history\'] = baidu_history_value\n',
' \n',
' # 11. 百度site收录状态\n',
' baidu_site_value = self.update_values[\'baidu_site\']\n',
' if baidu_site_value != \'不更新\':\n',
' status_value = status_mappings[\'百度site收录状态\'][baidu_site_value]\n',
' # 转换为JSON格式\n',
' import json\n',
' json_value = json.dumps({"status": status_value})\n',
' if detection_id:\n',
' cur.execute("UPDATE domain_detections SET baidu_site = %s WHERE domain_id = %s", (json_value, domain_info[\'id\']))\n',
' else:\n',
' cur.execute("INSERT INTO domain_detections (domain_id, baidu_site) VALUES (%s, %s)", (domain_info[\'id\'], json_value))\n',
' domain_update_data[\'baidu_site\'] = baidu_site_value\n',
' \n',
' # 12. title是否简体中文\n',
' is_chinese_title_value = self.update_values[\'is_chinese_title\']\n',
' if is_chinese_title_value != \'不更新\':\n',
' status_value = status_mappings[\'title是否简体中文\'][is_chinese_title_value]\n',
' if detection_id:\n',
' cur.execute("UPDATE domain_detections SET is_chinese_title = %s WHERE domain_id = %s", (status_value, domain_info[\'id\']))\n',
' else:\n',
' cur.execute("INSERT INTO domain_detections (domain_id, is_chinese_title) VALUES (%s, %s)", (domain_info[\'id\'], status_value))\n',
' domain_update_data[\'is_chinese_title\'] = is_chinese_title_value\n',
' \n',
' # 13. 360 site收录状态\n',
' qihu360_site_value = self.update_values[\'qihu360_site\']\n',
' if qihu360_site_value != \'不更新\':\n',
' status_value = status_mappings[\'360 site收录状态\'][qihu360_site_value]\n',
' # 转换为JSON格式\n',
' import json\n',
' json_value = json.dumps({"status": status_value})\n',
' if detection_id:\n',
' cur.execute("UPDATE domain_detections SET qihu360_site = %s WHERE domain_id = %s", (json_value, domain_info[\'id\']))\n',
' else:\n',
' cur.execute("INSERT INTO domain_detections (domain_id, qihu360_site) VALUES (%s, %s)", (domain_info[\'id\'], json_value))\n',
' domain_update_data[\'qihu360_site\'] = qihu360_site_value\n',
' \n',
' # 14. Google site收录状态\n',
' google_site_value = self.update_values[\'google_site\']\n',
' if google_site_value != \'不更新\':\n',
' status_value = status_mappings[\'Google site收录状态\'][google_site_value]\n',
' # 转换为JSON格式\n',
' import json\n',
' json_value = json.dumps({"status": status_value})\n',
' if detection_id:\n',
' cur.execute("UPDATE domain_detections SET google_site = %s WHERE domain_id = %s", (json_value, domain_info[\'id\']))\n',
' else:\n',
' cur.execute("INSERT INTO domain_detections (domain_id, google_site) VALUES (%s, %s)", (domain_info[\'id\'], json_value))\n',
' domain_update_data[\'google_site\'] = google_site_value\n',
' \n',
' # 15. 友链数量\n',
' backlink_count_value = self.update_values[\'backlink_count\']\n',
' if backlink_count_value and backlink_count_value != \'不更新\':\n',
' # 更新domains表中的backlink_count字段\n',
' cur.execute("UPDATE domains SET backlink_count = %s WHERE id = %s", (backlink_count_value, domain_info[\'id\']))\n',
' # 同时更新domain_detections表中的backlink_count_gt_10字段是否大于10\n',
' backlink_count_gt_10 = int(backlink_count_value) > 10\n',
' if detection_id:\n',
' cur.execute("UPDATE domain_detections SET backlink_count_gt_10 = %s WHERE domain_id = %s", (backlink_count_gt_10, domain_info[\'id\']))\n',
' else:\n',
' cur.execute("INSERT INTO domain_detections (domain_id, backlink_count_gt_10) VALUES (%s, %s)", (domain_info[\'id\'], backlink_count_gt_10))\n',
' domain_update_data[\'backlink_count\'] = backlink_count_value\n',
' \n',
' # 提交事务\n',
' conn.commit()\n',
' updated_count += 1\n',
' update_data[domain] = domain_update_data\n',
' except Exception as e:\n',
' logger.error(f"更新域名状态失败: {e}")\n',
' if conn:\n',
' try:\n',
' conn.rollback()\n',
' except:\n',
' pass\n',
' except Exception as e:\n',
' logger.error(f"批量更新失败: {e}")\n',
' finally:\n',
' # 关闭连接\n',
' db.close(conn, cur)\n',
' except Exception as e:\n',
' logger.error(f"更新状态失败: {e}")\n',
' \n',
' # 发送更新完成信号\n',
' self.update_finished.emit(updated_count, update_data)\n',
'\n',
'\n'
]
# 替换UpdateThread类
new_lines = lines[:start_line] + new_update_thread + lines[end_line:]
# 写回文件
with open('G:\PyCode\domainScanDemo\app\ui\domain_filter.py', 'w', encoding='utf-8') as f:
f.writelines(new_lines)
print('UpdateThread class updated successfully')
else:
print('UpdateThread class not found')