Browse Source

合同签署后 将e签宝返回的下载链接存入对应的字典中

mengqiankang 2 tháng trước cách đây
mục cha
commit
ca2bff0398

+ 11 - 1
alien_store/api/router.py

@@ -158,7 +158,17 @@ async def esign_callback(payload: dict, templates_server: ContractServer = Depen
             signing_dt = None
 
     if sign_result == 2 and contact_phone and sign_flow_id:
-        updated = await templates_server.mark_signed_by_phone(contact_phone, sign_flow_id, signing_dt)
+        # 获取合同下载链接
+        contract_download_url = None
+        try:
+            download_resp = file_download_url(sign_flow_id)
+            download_json = json.loads(download_resp)
+            if download_json.get("data") and download_json["data"].get("url"):
+                contract_download_url = download_json["data"]["url"]
+        except Exception as e:
+            logger.error(f"file_download_url failed for sign_flow_id={sign_flow_id}: {e}")
+        
+        updated = await templates_server.mark_signed_by_phone(contact_phone, sign_flow_id, signing_dt, contract_download_url)
         logger.info(f"esign_callback success phone={contact_phone}, sign_flow_id={sign_flow_id}, updated={updated}")
         return {"code":"200","msg":"success"}
     logger.error(f"esign_callback ignored payload: {payload}")

+ 5 - 1
alien_store/repositories/contract_repo.py

@@ -47,11 +47,12 @@ class ContractRepository:
         await self.db.refresh(db_templates)
         return db_templates
 
-    async def mark_signed_by_phone(self, contact_phone: str, sign_flow_id: str, signing_time: datetime | None = None):
+    async def mark_signed_by_phone(self, contact_phone: str, sign_flow_id: str, signing_time: datetime | None = None, contract_download_url: str | None = None):
         """
         根据手机号 + sign_flow_id 将合同标记为已签署,只更新匹配的合同项
         当 is_master 为 1 时,更新签署状态和时间字段
         同时写入签署/生效/到期时间(签署时间=T,生效=T+1天0点,失效=生效+365天)
+        同时更新 contract_download_url 到对应的字典中
         """
         result = await self.db.execute(
             ContractStore.__table__.select().where(ContractStore.contact_phone == contact_phone)
@@ -72,6 +73,9 @@ class ContractRepository:
                 for item in items:
                     if item.get("sign_flow_id") == sign_flow_id:
                         item["status"] = 1
+                        # 更新 contract_download_url
+                        if contract_download_url:
+                            item["contract_download_url"] = contract_download_url
                         matched_item = item
                         changed = True
                         break

+ 2 - 2
alien_store/services/contract_server.py

@@ -20,8 +20,8 @@ class ContractServer:
     async def list_all_paged(self, page: int, page_size: int = 10):
         return await self.esign_repo.get_all_paged(page, page_size)
 
-    async def mark_signed_by_phone(self, contact_phone: str, sign_flow_id: str, signing_time):
-        return await self.esign_repo.mark_signed_by_phone(contact_phone, sign_flow_id, signing_time)
+    async def mark_signed_by_phone(self, contact_phone: str, sign_flow_id: str, signing_time, contract_download_url):
+        return await self.esign_repo.mark_signed_by_phone(contact_phone, sign_flow_id, signing_time, contract_download_url)
 
     async def update_sign_url(self, contact_phone: str, sign_flow_id: str, sign_url: str):
         return await self.esign_repo.update_sign_url(contact_phone, sign_flow_id, sign_url)