chore: curate monthly assessment evidence and scripts
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
from ast import parse, walk, Call, Constant, keyword
|
||||
from datetime import date
|
||||
from pathlib import Path
|
||||
import re
|
||||
|
||||
import openpyxl
|
||||
import pymysql
|
||||
|
||||
|
||||
def connection_kwargs_from_existing_script():
|
||||
tree = parse(Path('/Users/kkfluous/Downloads/replace_gps_jun.py').read_text())
|
||||
for node in walk(tree):
|
||||
if not isinstance(node, Call):
|
||||
continue
|
||||
func = node.func
|
||||
if getattr(func, 'attr', None) != 'connect':
|
||||
continue
|
||||
values = {}
|
||||
for item in node.keywords:
|
||||
if isinstance(item, keyword) and isinstance(item.value, Constant):
|
||||
values[item.arg] = item.value.value
|
||||
if {'host', 'user', 'password', 'database'} <= values.keys():
|
||||
return values
|
||||
raise RuntimeError('未在既有脚本中找到数据库连接配置')
|
||||
|
||||
|
||||
src = openpyxl.load_workbook(
|
||||
'/Users/kkfluous/Downloads/7月核算结果/租赁任务考核_2026年7月.xlsx',
|
||||
read_only=True,
|
||||
data_only=True,
|
||||
)['业务考核视图']
|
||||
headers = [c.value for c in src[1]]
|
||||
plate_col = headers.index('车牌号')
|
||||
plates = sorted({re.sub(r'\s+', '', str(r[plate_col] or '')).upper() for r in src.iter_rows(min_row=2, values_only=True) if r[plate_col]})
|
||||
|
||||
cfg = connection_kwargs_from_existing_script()
|
||||
cfg.update(charset='utf8mb4', connect_timeout=8, read_timeout=30, write_timeout=30)
|
||||
conn = pymysql.connect(**cfg)
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
placeholders = ','.join(['%s'] * len(plates))
|
||||
cur.execute(
|
||||
f'''SELECT plate_number, dates, total_mileage
|
||||
FROM ln_vehicle_g7_mileage
|
||||
WHERE dates >= %s AND dates <= %s
|
||||
AND plate_number IN ({placeholders})''',
|
||||
[date(2026, 7, 1), date(2026, 7, 31), *plates],
|
||||
)
|
||||
rows = cur.fetchall()
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
db_plates = {re.sub(r'\s+', '', str(r[0] or '')).upper() for r in rows}
|
||||
print({
|
||||
'assessment_plates': len(plates),
|
||||
'database_rows': len(rows),
|
||||
'database_plates': len(db_plates),
|
||||
'uncovered_plates': len(set(plates) - db_plates),
|
||||
})
|
||||
Reference in New Issue
Block a user