Files
crm.clientright.ru/ticket_form/check_claim_226564ce.py

134 lines
5.0 KiB
Python
Raw Normal View History

#!/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())