134 lines
5.0 KiB
Python
134 lines
5.0 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
"""
|
|||
|
|
Проверка заявки 226564ce-d7cf-48ee-a820-690e8f5ec8e5
|
|||
|
|
"""
|
|||
|
|
import asyncio
|
|||
|
|
import asyncpg
|
|||
|
|
import json
|
|||
|
|
from datetime import datetime
|
|||
|
|
|
|||
|
|
POSTGRES_HOST = "147.45.189.234"
|
|||
|
|
POSTGRES_PORT = 5432
|
|||
|
|
POSTGRES_DB = "default_db"
|
|||
|
|
POSTGRES_USER = "gen_user"
|
|||
|
|
POSTGRES_PASSWORD = "2~~9_^kVsU?2\\S"
|
|||
|
|
|
|||
|
|
CLAIM_ID = "226564ce-d7cf-48ee-a820-690e8f5ec8e5"
|
|||
|
|
|
|||
|
|
async def check_claim():
|
|||
|
|
conn = await asyncpg.connect(
|
|||
|
|
host=POSTGRES_HOST,
|
|||
|
|
port=POSTGRES_PORT,
|
|||
|
|
database=POSTGRES_DB,
|
|||
|
|
user=POSTGRES_USER,
|
|||
|
|
password=POSTGRES_PASSWORD
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
# 1. Проверяем заявку
|
|||
|
|
claim_row = await conn.fetchrow("""
|
|||
|
|
SELECT
|
|||
|
|
id,
|
|||
|
|
status_code,
|
|||
|
|
created_at,
|
|||
|
|
updated_at,
|
|||
|
|
expires_at,
|
|||
|
|
payload
|
|||
|
|
FROM clpr_claims
|
|||
|
|
WHERE id::text = $1 OR payload->>'claim_id' = $1
|
|||
|
|
ORDER BY updated_at DESC
|
|||
|
|
LIMIT 1
|
|||
|
|
""", CLAIM_ID)
|
|||
|
|
|
|||
|
|
if not claim_row:
|
|||
|
|
print(f"❌ Заявка {CLAIM_ID} не найдена!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
print(f"✅ Заявка найдена:")
|
|||
|
|
print(f" ID: {claim_row['id']}")
|
|||
|
|
print(f" Status: {claim_row['status_code']}")
|
|||
|
|
print(f" Created: {claim_row['created_at']}")
|
|||
|
|
print(f" Updated: {claim_row['updated_at']}")
|
|||
|
|
print(f" Expires: {claim_row['expires_at']}")
|
|||
|
|
|
|||
|
|
payload = claim_row['payload'] if isinstance(claim_row['payload'], dict) else json.loads(claim_row['payload'])
|
|||
|
|
|
|||
|
|
# 2. Проверяем documents_meta
|
|||
|
|
documents_meta = payload.get('documents_meta', [])
|
|||
|
|
print(f"\n📋 documents_meta: {len(documents_meta)} записей")
|
|||
|
|
|
|||
|
|
if documents_meta:
|
|||
|
|
# Проверяем на дубликаты
|
|||
|
|
field_names = [doc.get('field_name') for doc in documents_meta]
|
|||
|
|
duplicates = [name for name in field_names if field_names.count(name) > 1]
|
|||
|
|
|
|||
|
|
if duplicates:
|
|||
|
|
print(f" ⚠️ Найдены дубликаты field_name: {set(duplicates)}")
|
|||
|
|
|
|||
|
|
for i, doc in enumerate(documents_meta):
|
|||
|
|
print(f"\n {i+1}. field_name: {doc.get('field_name', 'N/A')}")
|
|||
|
|
print(f" field_label: {doc.get('field_label', 'N/A')}")
|
|||
|
|
print(f" file_id: {doc.get('file_id', 'N/A')}")
|
|||
|
|
print(f" file_name: {doc.get('file_name', 'N/A')}")
|
|||
|
|
print(f" uploaded_at: {doc.get('uploaded_at', 'N/A')}")
|
|||
|
|
else:
|
|||
|
|
print(" ⚠️ documents_meta пуст!")
|
|||
|
|
|
|||
|
|
# 3. Проверяем документы в таблице
|
|||
|
|
claim_uuid = claim_row['id']
|
|||
|
|
docs_rows = await conn.fetch("""
|
|||
|
|
SELECT
|
|||
|
|
id,
|
|||
|
|
claim_id,
|
|||
|
|
field_name,
|
|||
|
|
file_id,
|
|||
|
|
file_name,
|
|||
|
|
original_file_name,
|
|||
|
|
uploaded_at,
|
|||
|
|
file_hash
|
|||
|
|
FROM clpr_claim_documents
|
|||
|
|
WHERE claim_id = $1
|
|||
|
|
ORDER BY uploaded_at DESC
|
|||
|
|
""", str(claim_uuid))
|
|||
|
|
|
|||
|
|
print(f"\n📄 Документы в clpr_claim_documents: {len(docs_rows)} записей")
|
|||
|
|
for i, row in enumerate(docs_rows):
|
|||
|
|
print(f"\n {i+1}. field_name: {row['field_name']}")
|
|||
|
|
print(f" file_id: {row['file_id']}")
|
|||
|
|
print(f" file_name: {row['file_name']}")
|
|||
|
|
print(f" file_hash: {row['file_hash'] or 'NULL'}")
|
|||
|
|
print(f" uploaded_at: {row['uploaded_at']}")
|
|||
|
|
|
|||
|
|
# 4. Сравниваем documents_meta и clpr_claim_documents
|
|||
|
|
print(f"\n🔍 Сравнение:")
|
|||
|
|
meta_field_names = set(doc.get('field_name') for doc in documents_meta)
|
|||
|
|
table_field_names = set(row['field_name'] for row in docs_rows)
|
|||
|
|
|
|||
|
|
only_in_meta = meta_field_names - table_field_names
|
|||
|
|
only_in_table = table_field_names - meta_field_names
|
|||
|
|
|
|||
|
|
if only_in_meta:
|
|||
|
|
print(f" ⚠️ Только в documents_meta: {only_in_meta}")
|
|||
|
|
if only_in_table:
|
|||
|
|
print(f" ⚠️ Только в clpr_claim_documents: {only_in_table}")
|
|||
|
|
if not only_in_meta and not only_in_table:
|
|||
|
|
print(f" ✅ Все field_name совпадают")
|
|||
|
|
|
|||
|
|
# 5. Проверяем поле upload_description
|
|||
|
|
upload_description = payload.get('upload_description')
|
|||
|
|
print(f"\n📝 upload_description: {upload_description}")
|
|||
|
|
|
|||
|
|
# 6. Проверяем answers
|
|||
|
|
answers = payload.get('answers', {})
|
|||
|
|
print(f"\n💬 answers: {len(answers)} полей")
|
|||
|
|
if answers:
|
|||
|
|
for key, value in list(answers.items())[:5]: # Первые 5
|
|||
|
|
print(f" {key}: {str(value)[:50]}...")
|
|||
|
|
|
|||
|
|
finally:
|
|||
|
|
await conn.close()
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
asyncio.run(check_claim())
|
|||
|
|
|