service.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. # from app.api.v1.module_system.auth.schema import AuthSchema
  2. # from app.core.alipay import AlipayClient
  3. # from app.core.exceptions import CustomException
  4. # from app.core.logger import log
  5. # from app.utils.snowflake import get_snowflake_id
  6. # from .enums import RuleStatusEnum
  7. # from .schema import (
  8. # ExpenseRuleCreateSchema,
  9. # )
  10. # from alipay.aop.api.request.AlipayEbppInvoiceInstitutionExpenseruleCreateRequest import (
  11. # AlipayEbppInvoiceInstitutionExpenseruleCreateRequest,
  12. # )
  13. # from alipay.aop.api.domain.AlipayEbppInvoiceInstitutionExpenseruleCreateModel import (
  14. # AlipayEbppInvoiceInstitutionExpenseruleCreateModel,
  15. # )
  16. # from alipay.aop.api.domain.StandardConditionInfo import (
  17. # StandardConditionInfo,
  18. # )
  19. # from alipay.aop.api.response.AlipayEbppInvoiceInstitutionExpenseruleCreateResponse import (
  20. # AlipayEbppInvoiceInstitutionExpenseruleCreateResponse,
  21. # )
  22. # class RuleService:
  23. # """使用规则服务层"""
  24. # @classmethod
  25. # async def create_expense_rule_service(
  26. # cls, auth: AuthSchema, data: ExpenseRuleCreateSchema
  27. # ) -> RuleOperationOutSchema:
  28. # """
  29. # 创建费控使用规则
  30. # 调用: alipay.ebpp.invoice.institution.expenserule.create
  31. # """
  32. # crud = RuleCRUD(auth)
  33. # out_biz_no = data.outer_source_id or str(get_snowflake_id())
  34. # model = AlipayEbppInvoiceInstitutionExpenseruleCreateModel()
  35. # model.institution_id = data.institution_id
  36. # model.standard_name = data.standard_name
  37. # model.expense_type_sub_category = data.expense_type_sub_category
  38. # model.outer_source_id = out_biz_no
  39. # if data.standard_condition_info_list:
  40. # condition_list = []
  41. # for item in data.standard_condition_info_list:
  42. # condition = StandardConditionInfo()
  43. # condition.rule_factor = item.rule_factor
  44. # condition.rule_value = item.rule_value
  45. # if item.rule_operator:
  46. # condition.rule_operator = item.rule_operator
  47. # if item.rule_name:
  48. # condition.rule_name = item.rule_name
  49. # condition_list.append(condition)
  50. # model.standard_condition_info_list = condition_list
  51. # if data.enterprise_id:
  52. # model.enterprise_id = data.enterprise_id
  53. # if data.open_rule_id:
  54. # model.open_rule_id = data.open_rule_id
  55. # if data.payment_policy:
  56. # model.payment_policy = data.payment_policy
  57. # if data.consume_mode:
  58. # model.consume_mode = data.consume_mode
  59. # request = AlipayEbppInvoiceInstitutionExpenseruleCreateRequest()
  60. # request.biz_model = model
  61. # client = AlipayClient.get_client()
  62. # response = client.execute(request)
  63. # if not response:
  64. # raise CustomException(msg="创建费控使用规则失败: 无响应")
  65. # result = AlipayEbppInvoiceInstitutionExpenseruleCreateResponse()
  66. # result.parse_response_content(response)
  67. # if not result.is_success():
  68. # log.error(f"支付宝接口调用失败: {result.code} - {result.msg}")
  69. # raise CustomException(msg=f"创建费控使用规则失败: {result.msg}")
  70. # rule_data = data.model_dump(exclude_none=True)
  71. # rule_data["out_biz_no"] = out_biz_no
  72. # rule_data["name"] = data.standard_name
  73. # rule_data["status"] = RuleStatusEnum.RULE_ACTIVE.value
  74. # if result.rule_id:
  75. # rule_data["rule_id"] = result.rule_id
  76. # rule = await crud.create(rule_data)
  77. # if not rule:
  78. # raise CustomException(msg="创建使用规则记录失败")
  79. # return RuleOperationOutSchema(out_biz_no=out_biz_no, rule_id=result.rule_id)
  80. # @classmethod
  81. # async def create_rule_service(
  82. # cls, auth: AuthSchema, data: RuleCreateSchema
  83. # ) -> RuleOperationOutSchema:
  84. # """
  85. # 创建使用规则 (本地)
  86. # """
  87. # crud = RuleCRUD(auth)
  88. # out_biz_no = str(get_snowflake_id())
  89. # rule_data = data.model_dump(exclude_none=True)
  90. # rule_data["out_biz_no"] = out_biz_no
  91. # rule = await crud.create(rule_data)
  92. # if not rule:
  93. # raise CustomException(msg="创建使用规则记录失败")
  94. # return RuleOperationOutSchema(out_biz_no=out_biz_no, rule_id=rule.rule_id)
  95. # @classmethod
  96. # async def modify_expense_rule_service(
  97. # cls, auth: AuthSchema, out_biz_no: str, data: ExpenseRuleModifySchema
  98. # ) -> RuleOperationOutSchema:
  99. # """
  100. # 编辑使用规则
  101. # 调用: alipay.ebpp.invoice.institution.expenserule.modify
  102. # """
  103. # crud = RuleCRUD(auth)
  104. # rule = await crud.get_by_out_biz_no(out_biz_no)
  105. # if not rule:
  106. # raise CustomException(msg="使用规则不存在")
  107. # try:
  108. # from alipay.aop.api.request.AlipayEbppInvoiceInstitutionExpenseruleModifyRequest import (
  109. # AlipayEbppInvoiceInstitutionExpenseruleModifyRequest,
  110. # )
  111. # from alipay.aop.api.domain.AlipayEbppInvoiceInstitutionExpenseruleModifyModel import (
  112. # AlipayEbppInvoiceInstitutionExpenseruleModifyModel,
  113. # )
  114. # from alipay.aop.api.response.AlipayEbppInvoiceInstitutionExpenseruleModifyResponse import (
  115. # AlipayEbppInvoiceInstitutionExpenseruleModifyResponse,
  116. # )
  117. # except ImportError:
  118. # raise CustomException(msg="支付宝SDK未正确安装,请检查alipay-sdk-python依赖")
  119. # model = AlipayEbppInvoiceInstitutionExpenseruleModifyModel()
  120. # model.institution_id = data.institution_id
  121. # model.standard_id = data.standard_id
  122. # model.action = data.action
  123. # model.enterprise_id = data.enterprise_id
  124. # if data.standard_name:
  125. # model.standard_name = data.standard_name
  126. # if data.standard_desc:
  127. # model.standard_desc = data.standard_desc
  128. # if data.open_rule_id:
  129. # model.open_rule_id = data.open_rule_id
  130. # if data.payment_policy:
  131. # model.payment_policy = data.payment_policy
  132. # if data.consume_mode:
  133. # model.consume_mode = data.consume_mode
  134. # request = AlipayEbppInvoiceInstitutionExpenseruleModifyRequest()
  135. # request.biz_model = model
  136. # client = AlipayClient.get_client()
  137. # response = client.execute(request)
  138. # if not response:
  139. # raise CustomException(msg="编辑使用规则失败: 无响应")
  140. # result = AlipayEbppInvoiceInstitutionExpenseruleModifyResponse()
  141. # result.parse_response_content(response)
  142. # if not result.is_success():
  143. # log.error(f"支付宝接口调用失败: {result.code} - {result.msg}")
  144. # raise CustomException(msg=f"编辑使用规则失败: {result.msg}")
  145. # update_data = data.model_dump(exclude_unset=True, exclude_none=True)
  146. # exclude_fields = ["institution_id", "standard_id", "action", "enterprise_id"]
  147. # for field in exclude_fields:
  148. # update_data.pop(field, None)
  149. # if update_data:
  150. # await crud.update(id=rule.id, data=update_data)
  151. # return RuleOperationOutSchema(out_biz_no=out_biz_no, rule_id=data.standard_id)
  152. # @classmethod
  153. # async def delete_expense_rule_service(
  154. # cls, auth: AuthSchema, out_biz_no: str, data: ExpenseRuleDeleteSchema
  155. # ) -> RuleOperationOutSchema:
  156. # """
  157. # 删除使用规则
  158. # 调用: alipay.ebpp.invoice.institution.expenserule.delete
  159. # """
  160. # crud = RuleCRUD(auth)
  161. # rule = await crud.get_by_out_biz_no(out_biz_no)
  162. # if not rule:
  163. # raise CustomException(msg="使用规则不存在")
  164. # try:
  165. # from alipay.aop.api.request.AlipayEbppInvoiceInstitutionExpenseruleDeleteRequest import (
  166. # AlipayEbppInvoiceInstitutionExpenseruleDeleteRequest,
  167. # )
  168. # from alipay.aop.api.domain.AlipayEbppInvoiceInstitutionExpenseruleDeleteModel import (
  169. # AlipayEbppInvoiceInstitutionExpenseruleDeleteModel,
  170. # )
  171. # from alipay.aop.api.response.AlipayEbppInvoiceInstitutionExpenseruleDeleteResponse import (
  172. # AlipayEbppInvoiceInstitutionExpenseruleDeleteResponse,
  173. # )
  174. # except ImportError:
  175. # raise CustomException(msg="支付宝SDK未正确安装,请检查alipay-sdk-python依赖")
  176. # model = AlipayEbppInvoiceInstitutionExpenseruleDeleteModel()
  177. # model.institution_id = data.institution_id
  178. # model.standard_id_list = data.standard_id_list
  179. # model.enterprise_id = data.enterprise_id
  180. # request = AlipayEbppInvoiceInstitutionExpenseruleDeleteRequest()
  181. # request.biz_model = model
  182. # client = AlipayClient.get_client()
  183. # response = client.execute(request)
  184. # if not response:
  185. # raise CustomException(msg="删除使用规则失败: 无响应")
  186. # result = AlipayEbppInvoiceInstitutionExpenseruleDeleteResponse()
  187. # result.parse_response_content(response)
  188. # if not result.is_success():
  189. # log.error(f"支付宝接口调用失败: {result.code} - {result.msg}")
  190. # raise CustomException(msg=f"删除使用规则失败: {result.msg}")
  191. # await crud.delete(id=rule.id)
  192. # return RuleOperationOutSchema(
  193. # out_biz_no=out_biz_no,
  194. # result=result.result,
  195. # )
  196. # @classmethod
  197. # async def list_service(
  198. # cls,
  199. # auth: AuthSchema,
  200. # page_no: int = 1,
  201. # page_size: int = 20,
  202. # search: dict | None = None,
  203. # ) -> dict:
  204. # crud = RuleCRUD(auth)
  205. # offset = (page_no - 1) * page_size
  206. # return await crud.page(
  207. # offset=offset,
  208. # limit=page_size,
  209. # order_by=[{"id": "desc"}],
  210. # search=search or {},
  211. # out_schema=RuleListOutSchema,
  212. # )
  213. # @classmethod
  214. # async def detail_service(
  215. # cls, auth: AuthSchema, out_biz_no: str
  216. # ) -> RuleOutSchema:
  217. # crud = RuleCRUD(auth)
  218. # rule = await crud.get_by_out_biz_no(out_biz_no)
  219. # if not rule:
  220. # raise CustomException(msg="使用规则不存在")
  221. # return RuleOutSchema.model_validate(rule)
  222. # @classmethod
  223. # async def update_service(
  224. # cls, auth: AuthSchema, out_biz_no: str, data: RuleUpdateSchema
  225. # ) -> RuleOperationOutSchema:
  226. # crud = RuleCRUD(auth)
  227. # rule = await crud.get_by_out_biz_no(out_biz_no)
  228. # if not rule:
  229. # raise CustomException(msg="使用规则不存在")
  230. # update_data = data.model_dump(exclude_unset=True)
  231. # if update_data:
  232. # await crud.update(id=rule.id, data=update_data)
  233. # return RuleOperationOutSchema(out_biz_no=out_biz_no, rule_id=rule.rule_id)