feat: auto-sync file list + clear processing cache
- Auto-sync file_relations on every query (files appear immediately) - Add POST /api/files/reset-cache endpoint to delete output/result files and reset status to pending for reprocessing - Add "清除处理缓存" button to all 3 file views Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -653,6 +653,71 @@ def sync_file_relations():
|
||||
conn.close()
|
||||
|
||||
|
||||
def reset_file_cache(files: list[dict]) -> dict:
|
||||
"""Delete output/result files and reset relation status to pending.
|
||||
|
||||
Each item: {input_image?, output_excel?, result_purchase?}
|
||||
Deletes the corresponding files from disk and resets status.
|
||||
"""
|
||||
project_root = Path(__file__).resolve().parent.parent.parent.parent
|
||||
output_dir = project_root / 'data' / 'output'
|
||||
result_dir = project_root / 'data' / 'result'
|
||||
|
||||
deleted_files = 0
|
||||
reset_count = 0
|
||||
errors = []
|
||||
|
||||
conn = sqlite3.connect(_db_path)
|
||||
conn.row_factory = sqlite3.Row
|
||||
try:
|
||||
for item in files:
|
||||
input_image = item.get('input_image')
|
||||
output_excel = item.get('output_excel')
|
||||
result_purchase = item.get('result_purchase')
|
||||
|
||||
# Delete output file from disk
|
||||
if output_excel:
|
||||
out_path = output_dir / output_excel
|
||||
if out_path.exists():
|
||||
try:
|
||||
out_path.unlink()
|
||||
deleted_files += 1
|
||||
except Exception as e:
|
||||
errors.append(f"{output_excel}: {e}")
|
||||
|
||||
# Delete result file from disk
|
||||
if result_purchase:
|
||||
res_path = result_dir / result_purchase
|
||||
if res_path.exists():
|
||||
try:
|
||||
res_path.unlink()
|
||||
deleted_files += 1
|
||||
except Exception as e:
|
||||
errors.append(f"{result_purchase}: {e}")
|
||||
|
||||
# Reset relation status to pending
|
||||
if input_image:
|
||||
conn.execute(
|
||||
"UPDATE file_relations SET output_excel = NULL, result_purchase = NULL, "
|
||||
"status = 'pending', updated_at = ? WHERE input_image = ?",
|
||||
(datetime.now().isoformat(), input_image),
|
||||
)
|
||||
reset_count += conn.total_changes
|
||||
elif output_excel:
|
||||
conn.execute(
|
||||
"UPDATE file_relations SET output_excel = NULL, result_purchase = NULL, "
|
||||
"status = 'pending', updated_at = ? WHERE output_excel = ?",
|
||||
(datetime.now().isoformat(), output_excel),
|
||||
)
|
||||
reset_count += conn.total_changes
|
||||
|
||||
conn.commit()
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
return {"deleted_files": deleted_files, "reset_relations": reset_count, "errors": errors}
|
||||
|
||||
|
||||
def query_file_relations_stats() -> dict:
|
||||
"""Get detailed file statistics for Dashboard.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user