This commit is contained in:
2025-09-23 08:17:10 +08:00
parent 0cae9749a8
commit 89c79bdaa1
11 changed files with 768 additions and 306 deletions
+26 -98
View File
@@ -1,7 +1,6 @@
from flask import Flask, render_template, request, redirect, url_for, session, jsonify
from datetime import datetime, timedelta
import os
import random
from flask import Flask, render_template, request, redirect, url_for, session
# 导入用户模块
@@ -58,87 +57,6 @@ def init_db():
)
''')
# 插入一些测试车辆数据
try:
test_cars = [
('京A12345', '13800138001', '110101199001011234', '张三', 'zhangsan@example.com', '北京市朝阳区'),
('沪B54321', '13900139001', '310101199001012345', '李四', 'lisi@example.com', '上海市静安区'),
('粤C67890', '13700137001', '440401199001013456', '王五', 'wangwu@example.com', '广东省珠海市'),
('苏D12345', '13600136001', '320401199001014567', '赵六', 'zhaoliu@example.com', '江苏省常州市'),
('浙E54321', '13500135001', '330501199001015678', '钱七', 'qianqi@example.com', '浙江省湖州市')
]
cursor.executemany("INSERT INTO car_owners (plate_number, phone, id_card, name, email, address) VALUES (?, ?, ?, ?, ?, ?)", test_cars)
except Exception as e:
# 数据已存在或其他错误,忽略
print(f"插入测试数据时出错: {e}")
# 单独处理查询历史演示数据,确保每次都能插入20条记录
try:
# 先删除现有的演示数据
cursor.execute("DELETE FROM query_history WHERE department IN ('IT部', '财务部', '人事部', '市场部', '行政部')")
# 生成最近20天的随机查询历史
provinces = ['', '', '', '', '', '', '', '', '', '']
cities = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K']
departments = ['IT部', '财务部', '人事部', '市场部', '行政部']
# 获取现有的车辆信息,用于生成能匹配的查询历史
cursor.execute("SELECT plate_number, phone FROM car_owners")
existing_cars = cursor.fetchall()
for i in range(20):
# 生成随机日期(最近20天内)
days_ago = random.randint(0, 19)
date = (datetime.now() - timedelta(days=days_ago)).strftime('%Y-%m-%d %H:%M:%S')
# 70%的概率使用已存在的车辆信息,30%的概率生成随机信息
use_existing = random.random() < 0.7
if use_existing and existing_cars:
# 使用已存在的车辆信息
car_info = random.choice(existing_cars)
if random.choice([True, False]):
plate_number = car_info[0]
phone = None
else:
plate_number = None
phone = car_info[1]
# 确保结果数量正确
if plate_number:
cursor.execute("SELECT COUNT(*) FROM car_owners WHERE plate_number = ?", (plate_number,))
results_count = cursor.fetchone()[0]
else:
cursor.execute("SELECT COUNT(*) FROM car_owners WHERE phone = ?", (phone,))
results_count = cursor.fetchone()[0]
else:
# 随机生成车牌号或手机号
use_plate = random.choice([True, False])
if use_plate:
plate_number = f"{random.choice(provinces)}{random.choice(cities)}{random.randint(100000, 999999)}"
phone = None
else:
plate_number = None
phone = f"1{random.randint(3000000000, 9999999999)}"
# 检查是否存在匹配结果
if plate_number:
cursor.execute("SELECT COUNT(*) FROM car_owners WHERE plate_number = ?", (plate_number,))
results_count = cursor.fetchone()[0]
else:
cursor.execute("SELECT COUNT(*) FROM car_owners WHERE phone = ?", (phone,))
results_count = cursor.fetchone()[0]
# 随机部门
department = random.choice(departments)
# 生成随机IP地址
query_ip = f"192.168.{random.randint(0, 255)}.{random.randint(1, 254)}"
cursor.execute(
"INSERT INTO query_history (department, query_date, plate_number, phone, results_count, query_ip) VALUES (?, ?, ?, ?, ?, ?)",
(department, date, plate_number, phone, results_count, query_ip)
)
except Exception as e:
print(f"插入查询历史数据时出错: {e}")
try:
conn.commit()
except Exception as e:
@@ -184,15 +102,16 @@ def query():
# 获取客户端IP地址
query_ip = request.remote_addr
# 从用户信息表获取部门信息
# 从用户信息表获取用户ID
user_id = None
try:
# 可以复用同一个连接,不需要创建新连接
cursor.execute("SELECT department FROM users WHERE username = ?", (session['username'],))
user_dept = cursor.fetchone()
if user_dept:
department = user_dept[0]
cursor.execute("SELECT id FROM users WHERE username = ?", (session['username'],))
user_info = cursor.fetchone()
if user_info:
user_id = user_info[0]
except Exception as e:
print(f"获取部门信息时出错: {e}")
print(f"获取用户信息时出错: {e}")
# 记录查询历史到数据库
try:
@@ -207,8 +126,8 @@ def query():
results_count = len(results)
cursor.execute(
"INSERT INTO query_history (department, query_date, plate_number, phone, results_count, query_ip) VALUES (?, ?, ?, ?, ?, ?)",
(department, query_date, plate_number if plate_number else None, phone if phone else None, results_count, query_ip)
"INSERT INTO query_history (query_date, plate_number, phone, results_count, query_ip, user_id) VALUES (?, ?, ?, ?, ?, ?)",
(query_date, plate_number if plate_number else None, phone if phone else None, results_count, query_ip, user_id)
)
conn.commit()
except Exception as e:
@@ -300,7 +219,14 @@ def get_recent_queries():
cursor = conn.cursor()
try:
cursor.execute("SELECT id, department, query_date, plate_number, phone, results_count, query_ip FROM query_history ORDER BY query_date DESC LIMIT 20")
# 使用JOIN操作获取用户姓名和部门信息
cursor.execute("""
SELECT qh.id, qh.query_date, qh.plate_number, qh.phone, qh.results_count, qh.query_ip, qh.user_id,
u.name AS user_name, u.department AS user_department
FROM query_history qh
LEFT JOIN users u ON qh.user_id = u.id
ORDER BY qh.query_date DESC LIMIT 20
""")
recent_queries = cursor.fetchall()
# 格式化查询历史数据
@@ -308,12 +234,14 @@ def get_recent_queries():
for q in recent_queries:
formatted_recent_queries.append({
'id': q[0],
'department': q[1],
'query_date': q[2],
'plate_number': q[3] if q[3] else '未提供',
'phone': q[4] if q[4] else '未提供',
'results_count': q[5],
'query_ip': q[6]
'query_date': q[1],
'plate_number': q[2] if q[2] else '未提供',
'phone': q[3] if q[3] else '未提供',
'results_count': q[4],
'query_ip': q[5],
'user_id': q[6] if len(q) > 6 else None,
'user_name': q[7] if len(q) > 7 else '未知',
'user_department': q[8] if len(q) > 8 else '未知'
})
return formatted_recent_queries
@@ -340,7 +268,7 @@ if __name__ == '__main__':
try:
init_db()
app.run(debug=True)
app.run(debug=True,host="0.0.0.0",port=99)
finally:
# 确保在程序退出时关闭数据库连接
close_global_connection()