|
@@ -801,6 +801,49 @@ class AccountService:
|
|
|
return data
|
|
return data
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ @classmethod
|
|
|
|
|
+ async def transfer_sync_status_service(
|
|
|
|
|
+ cls,
|
|
|
|
|
+ auth: AuthSchema,
|
|
|
|
|
+ data: "TransferSyncStatusSchema",
|
|
|
|
|
+ ) -> dict:
|
|
|
|
|
+ """
|
|
|
|
|
+ 手动同步转账状态(管理员补录)
|
|
|
|
|
+ 用于修复因通知丢失而卡在 DEALING 的转账记录
|
|
|
|
|
+ """
|
|
|
|
|
+ from app.plugin.module_payment.account.crud import TransferCRUD
|
|
|
|
|
+ from app.plugin.module_payment.account.schema import TransferSyncStatusSchema
|
|
|
|
|
+
|
|
|
|
|
+ crud = TransferCRUD(auth)
|
|
|
|
|
+ transfer = await crud.get_by_out_biz_no(data.out_biz_no)
|
|
|
|
|
+ if not transfer:
|
|
|
|
|
+ raise CustomException(msg=f"转账记录不存在: {data.out_biz_no}")
|
|
|
|
|
+
|
|
|
|
|
+ if transfer.status != "DEALING" and data.status == "SUCCESS":
|
|
|
|
|
+ raise CustomException(msg=f"转账记录当前状态为 {transfer.status},无需同步")
|
|
|
|
|
+
|
|
|
|
|
+ update_data = {"status": data.status}
|
|
|
|
|
+ if data.error_code:
|
|
|
|
|
+ update_data["error_code"] = data.error_code
|
|
|
|
|
+ if data.error_msg:
|
|
|
|
|
+ update_data["error_msg"] = data.error_msg
|
|
|
|
|
+
|
|
|
|
|
+ for key, value in update_data.items():
|
|
|
|
|
+ if hasattr(transfer, key):
|
|
|
|
|
+ setattr(transfer, key, value)
|
|
|
|
|
+
|
|
|
|
|
+ await auth.db.flush()
|
|
|
|
|
+ await auth.db.refresh(transfer)
|
|
|
|
|
+
|
|
|
|
|
+ log.info(f"手动同步转账状态成功: out_biz_no={data.out_biz_no}, {transfer.status}")
|
|
|
|
|
+ return {
|
|
|
|
|
+ "out_biz_no": transfer.out_biz_no,
|
|
|
|
|
+ "status": transfer.status,
|
|
|
|
|
+ "error_code": transfer.error_code,
|
|
|
|
|
+ "error_msg": transfer.error_msg,
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
@classmethod
|
|
@classmethod
|
|
|
async def update_transfer_status_service(
|
|
async def update_transfer_status_service(
|
|
|
cls,
|
|
cls,
|