|
|
@@ -16,6 +16,7 @@ from alien_store.schemas.response.contract_store import (
|
|
|
)
|
|
|
from alien_store.services.contract_server import ContractServer
|
|
|
from common.esigntool.main import *
|
|
|
+from common.esigntool import main as esign_main
|
|
|
import re, urllib.parse
|
|
|
|
|
|
# ------------------- 日志配置 -------------------
|
|
|
@@ -201,9 +202,36 @@ async def get_contract_detail(
|
|
|
|
|
|
status = item.get("status")
|
|
|
if status == 0:
|
|
|
+ file_id = item.get("file_id")
|
|
|
+ if not file_id:
|
|
|
+ return ErrorResponse(success=False, message="缺少 file_id,无法获取合同详情")
|
|
|
+ try:
|
|
|
+ detail_resp = esign_main.get_contract_detail(file_id)
|
|
|
+ detail_json = json.loads(detail_resp)
|
|
|
+ data = detail_json.get("data") if isinstance(detail_json, dict) else None
|
|
|
+ contract_url = None
|
|
|
+ if isinstance(data, dict):
|
|
|
+ contract_url = data.get("fileDownloadUrl")
|
|
|
+ if not contract_url and isinstance(detail_json, dict):
|
|
|
+ contract_url = detail_json.get("fileDownloadUrl")
|
|
|
+ except Exception as e:
|
|
|
+ logger.error(f"get_contract_detail failed file_id={file_id}: {e}")
|
|
|
+ return ErrorResponse(success=False, message="获取合同链接失败", raw=str(e))
|
|
|
+
|
|
|
+ if not contract_url:
|
|
|
+ logger.error(f"get_contract_detail missing contract_url file_id={file_id}: {detail_resp}")
|
|
|
+ return ErrorResponse(success=False, message="e签宝返回缺少合同链接", raw=detail_resp)
|
|
|
+
|
|
|
+ if row and isinstance(items, list):
|
|
|
+ for it in items:
|
|
|
+ if it.get("sign_flow_id") == sign_flow_id:
|
|
|
+ it["contract_url"] = contract_url
|
|
|
+ break
|
|
|
+ await templates_server.update_contract_items(row["id"], items)
|
|
|
+
|
|
|
return {
|
|
|
"status": 0,
|
|
|
- "contract_url": item.get("contract_url", ""),
|
|
|
+ "contract_url": contract_url,
|
|
|
"sign_url": item.get("sign_url", ""),
|
|
|
"sign_flow_id": sign_flow_id
|
|
|
}
|