crud.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. from app.api.v1.module_system.auth.schema import AuthSchema
  2. from app.core.base_crud import CRUDBase
  3. from app.core.exceptions import CustomException
  4. from .model import AccountModel, TransferModel, DepositModel, WithdrawModel
  5. from .schema import (
  6. AccountCreateSchema,
  7. AccountTransferSchema,
  8. AccountDepositSchema,
  9. AccountWithdrawSchema,
  10. )
  11. class AccountCRUD(CRUDBase[AccountModel, AccountCreateSchema, AccountCreateSchema]):
  12. """资金专户 CRUD 操作"""
  13. def __init__(self, auth: AuthSchema) -> None:
  14. self.auth = auth
  15. super().__init__(model=AccountModel, auth=auth)
  16. async def get_by_enterprise_id(
  17. self, enterprise_id: str
  18. ) -> AccountModel | None:
  19. return await self.get(enterprise_id=enterprise_id)
  20. async def get_by_account_book_id(
  21. self, account_book_id: str
  22. ) -> AccountModel | None:
  23. return await self.get(account_book_id=account_book_id)
  24. async def update_by_enterprise_id(
  25. self, enterprise_id: str, data: dict
  26. ) -> AccountModel | None:
  27. obj = await self.get(enterprise_id=enterprise_id, preload=[])
  28. if not obj:
  29. raise CustomException(msg="更新失败!对象不存在")
  30. if self.auth.user and hasattr(obj, "updated_id"):
  31. setattr(obj, "updated_id", self.auth.user.id)
  32. for key, value in data.items():
  33. if hasattr(obj, key):
  34. setattr(obj, key, value)
  35. await self.auth.db.flush()
  36. await self.auth.db.refresh(obj)
  37. verify_obj = await self.get(enterprise_id=enterprise_id, preload=[])
  38. if not verify_obj:
  39. raise CustomException(msg="更新失败!对象不存在或无权限访问")
  40. return obj
  41. class TransferCRUD(CRUDBase[TransferModel, AccountTransferSchema, AccountTransferSchema]):
  42. """转账记录 CRUD 操作"""
  43. def __init__(self, auth: AuthSchema) -> None:
  44. self.auth = auth
  45. super().__init__(model=TransferModel, auth=auth)
  46. async def get_by_out_biz_no(
  47. self, out_biz_no: str
  48. ) -> TransferModel | None:
  49. return await self.get(out_biz_no=out_biz_no)
  50. async def get_by_order_no(
  51. self, order_no: str
  52. ) -> TransferModel | None:
  53. return await self.get(order_no=order_no)
  54. async def update_by_order_no(
  55. self, order_no: str, data: dict
  56. ) -> TransferModel | None:
  57. obj = await self.get(order_no=order_no, preload=[])
  58. if not obj:
  59. raise CustomException(msg="转账记录不存在")
  60. if self.auth.user and hasattr(obj, "updated_id"):
  61. setattr(obj, "updated_id", self.auth.user.id)
  62. for key, value in data.items():
  63. if hasattr(obj, key):
  64. setattr(obj, key, value)
  65. await self.auth.db.flush()
  66. await self.auth.db.refresh(obj)
  67. return obj
  68. class DepositCRUD(CRUDBase[DepositModel, AccountDepositSchema, AccountDepositSchema]):
  69. """充值记录 CRUD 操作"""
  70. def __init__(self, auth: AuthSchema) -> None:
  71. self.auth = auth
  72. super().__init__(model=DepositModel, auth=auth)
  73. async def get_by_out_biz_no(
  74. self, out_biz_no: str
  75. ) -> DepositModel | None:
  76. return await self.get(out_biz_no=out_biz_no)
  77. async def get_by_enterprise_id(
  78. self, enterprise_id: str
  79. ) -> DepositModel | None:
  80. return await self.get(enterprise_id=enterprise_id)
  81. async def update_by_out_biz_no(
  82. self, out_biz_no: str, data: dict
  83. ) -> DepositModel | None:
  84. obj = await self.get(out_biz_no=out_biz_no, preload=[])
  85. if not obj:
  86. raise CustomException(msg="充值记录不存在")
  87. if self.auth.user and hasattr(obj, "updated_id"):
  88. setattr(obj, "updated_id", self.auth.user.id)
  89. for key, value in data.items():
  90. if hasattr(obj, key):
  91. setattr(obj, key, value)
  92. await self.auth.db.flush()
  93. await self.auth.db.refresh(obj)
  94. return obj
  95. class WithdrawCRUD(CRUDBase[WithdrawModel, AccountWithdrawSchema, AccountWithdrawSchema]):
  96. """提现记录 CRUD 操作"""
  97. def __init__(self, auth: AuthSchema) -> None:
  98. self.auth = auth
  99. super().__init__(model=WithdrawModel, auth=auth)
  100. async def get_by_out_biz_no(
  101. self, out_biz_no: str
  102. ) -> WithdrawModel | None:
  103. return await self.get(out_biz_no=out_biz_no)
  104. async def update_by_out_biz_no(
  105. self, out_biz_no: str, data: dict
  106. ) -> WithdrawModel | None:
  107. obj = await self.get(out_biz_no=out_biz_no, preload=[])
  108. if not obj:
  109. raise CustomException(msg="提现记录不存在")
  110. if self.auth.user and hasattr(obj, "updated_id"):
  111. setattr(obj, "updated_id", self.auth.user.id)
  112. for key, value in data.items():
  113. if hasattr(obj, key):
  114. setattr(obj, key, value)
  115. await self.auth.db.flush()
  116. await self.auth.db.refresh(obj)
  117. return obj