service.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. from app.api.v1.module_system.auth.schema import AuthSchema
  2. from app.core.exceptions import CustomException
  3. from app.core.logger import log
  4. from app.utils.snowflake import get_snowflake_id_str
  5. from typing import Optional
  6. from .crud import OpenConfCRUD, OpenTransferCRUD
  7. from .schema import OpenConfOutSchema, OpenConfUpdateSchema, OpenTransferSchema, OpenTransferOutSchema, \
  8. OpenTransferQuerySchema
  9. from app.plugin.module_payment.account import AccountService
  10. class OpenTransferService:
  11. @classmethod
  12. async def open_query_service(
  13. cls,
  14. auth: AuthSchema,
  15. query: OpenTransferQuerySchema
  16. ) -> dict:
  17. crud = OpenTransferCRUD(auth)
  18. transfer_data = await crud.get(third_biz_no=query.third_biz_no)
  19. if transfer_data is None:
  20. raise CustomException("三方订单号不存在")
  21. result = await AccountService.transfer_detail_service(auth=auth, out_biz_no=transfer_data.out_biz_no)
  22. return result.model_dump(exclude_none=True)
  23. @classmethod
  24. async def open_transfer_service(
  25. cls,
  26. auth: AuthSchema,
  27. data: OpenTransferSchema
  28. ) -> OpenTransferOutSchema:
  29. third_biz_no = data.third_biz_no
  30. if not third_biz_no:
  31. raise CustomException("三方订单号不能为空")
  32. # 先查询是否存在三方订单号
  33. crud = OpenTransferCRUD(auth)
  34. existing = await crud.get(third_biz_no=third_biz_no)
  35. if existing:
  36. raise CustomException("三方订单号已存在")
  37. # 执行转账记录创建
  38. result = await AccountService.transfer_service(auth=auth, data=data)
  39. log.info(f"租户资金专户转账发起成功: 企业: {data.enterprise_id}, 金额: {data.amount}")
  40. # 保存三方订单号关联记录
  41. create_data = {
  42. "third_biz_no": third_biz_no,
  43. "out_biz_no": result.out_biz_no,
  44. }
  45. await crud.create(create_data)
  46. return OpenTransferOutSchema(
  47. status=result.status,
  48. order_no=result.order_no,
  49. third_biz_no=third_biz_no,
  50. )
  51. class OpenConfService:
  52. """开放配置服务层"""
  53. @classmethod
  54. async def get_conf_service(
  55. cls,
  56. auth: AuthSchema,
  57. ) -> Optional[OpenConfOutSchema]:
  58. """
  59. 查询开放配置
  60. """
  61. crud = OpenConfCRUD(auth)
  62. result = await crud.get_first()
  63. if result is not None:
  64. return OpenConfOutSchema.model_validate(result)
  65. return None
  66. @classmethod
  67. async def save_conf_service(
  68. cls,
  69. auth: AuthSchema,
  70. data: OpenConfUpdateSchema,
  71. ) -> OpenConfOutSchema:
  72. """
  73. 创建/更新开放配置(前端只允许配置回调地址)
  74. """
  75. # 先查询是否存在配置
  76. update_data = {
  77. "notify_url": data.notify_url,
  78. "return_url": data.return_url,
  79. }
  80. crud = OpenConfCRUD(auth)
  81. existing = await crud.get_first()
  82. if not existing:
  83. update_data["app_id"] = get_snowflake_id_str(auth.tenant_id)
  84. update_data["gateway_url"] = "https://api.qcsj88888.com"
  85. result = await crud.create(update_data)
  86. log.info(f"开放配置创建成功: 租户ID: {auth.tenant_id}")
  87. else:
  88. result = await crud.update(existing.id, update_data)
  89. log.info(f"开放配置更新成功: 租户ID: {auth.tenant_id}")
  90. return OpenConfOutSchema.model_validate(result)