enterprise_handler.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. from redis.asyncio import Redis
  2. from app.api.v1.module_system.auth.schema import AuthSchema
  3. from app.core.logger import log
  4. from app.plugin.module_payment.enterprise.enums import EnterpriseStatusEnum
  5. from app.plugin.module_payment.enterprise.schema import EnterpriseCreateOrUpdateSchema
  6. from app.plugin.module_payment.enterprise.service import EnterpriseService
  7. from app.utils.snowflake import extract_tenant_id_from_id_str
  8. from ..schemas import EnterpriseChangeContent
  9. from .base_handler import BaseHandler
  10. class EnterpriseHandler(BaseHandler[dict]):
  11. """企业变更通知处理器"""
  12. async def _update_enterprise_status(
  13. self,
  14. data: EnterpriseChangeContent,
  15. auth: AuthSchema,
  16. ) -> bool:
  17. """更新企业状态
  18. Args:
  19. data: 通知数据
  20. auth: 认证信息
  21. Returns:
  22. 更新是否成功
  23. """
  24. # 创建更新数据
  25. update_data = EnterpriseCreateOrUpdateSchema(
  26. enterprise_id=data.enterprise_id,
  27. out_biz_no=data.out_biz_no,
  28. account_id=data.account_id,
  29. status=data.action,
  30. remark=data.remark,
  31. )
  32. try:
  33. auth.tenant_id = extract_tenant_id_from_id_str(data.out_biz_no)
  34. await EnterpriseService.update_service_from_alipay(auth, update_data)
  35. log.info(f"企业状态更新成功: {data.enterprise_id} -> {data.action}")
  36. return True
  37. except Exception as e:
  38. log.error(f"更新企业状态失败: {e}")
  39. return False
  40. async def handle(self, method: str, content: dict, auth: AuthSchema, redis: Redis) -> bool:
  41. """
  42. 处理企业变更通知
  43. 动作类型:
  44. - ENTERPRISE_CREATE: 企业入驻
  45. - ENTERPRISE_ACTIVATED: 企业签约成功
  46. - ENTERPRISE_UNSIGN: 企业解约
  47. """
  48. try:
  49. notify_data = EnterpriseChangeContent(**content)
  50. except Exception as e:
  51. log.error(f"支付宝通知消息 - 解析企业变更通知消息内容失败: {e}")
  52. return False
  53. action = notify_data.action
  54. enterprise_id = notify_data.enterprise_id
  55. log.info(f"支付宝通知消息 - 处理企业变更通知: action={action}, enterprise_id={enterprise_id}")
  56. try:
  57. if action == EnterpriseStatusEnum.ENTERPRISE_CREATE.value:
  58. return await self._handle_create(notify_data, auth)
  59. elif action == EnterpriseStatusEnum.ENTERPRISE_ACTIVATED.value:
  60. return await self._handle_activated(notify_data, auth)
  61. elif action == EnterpriseStatusEnum.ENTERPRISE_UNSIGN.value:
  62. return await self._handle_unsign(notify_data, auth)
  63. elif action == EnterpriseStatusEnum.ENTERPRISE_WITHDRAW.value:
  64. return await self._handle_withdraw(notify_data, auth)
  65. elif action == EnterpriseStatusEnum.ENTERPRISE_AUTH.value:
  66. return await self._handle_auth(notify_data, auth)
  67. elif action == EnterpriseStatusEnum.ENTERPRISE_AUTH_REJECTED.value:
  68. return await self._handle_auth_rejected(notify_data, auth)
  69. else:
  70. log.warning(f"支付宝通知消息 - 未知的企业变更动作: {action}")
  71. return True
  72. except Exception as e:
  73. log.error(f"支付宝通知消息 - 处理企业变更通知异常: {e}")
  74. return False
  75. async def _handle_create(self, data: EnterpriseChangeContent, auth: AuthSchema) -> bool:
  76. """处理企业入驻"""
  77. return await self._update_enterprise_status(data=data, auth=auth)
  78. async def _handle_activated(self, data: EnterpriseChangeContent, auth: AuthSchema) -> bool:
  79. """处理企业签约成功"""
  80. return await self._update_enterprise_status(data=data, auth=auth)
  81. async def _handle_unsign(self, data: EnterpriseChangeContent, auth: AuthSchema) -> bool:
  82. """处理企业解约"""
  83. return await self._update_enterprise_status(data=data, auth=auth)
  84. async def _handle_withdraw(self, data: EnterpriseChangeContent, auth: AuthSchema) -> bool:
  85. """处理企业注销"""
  86. return await self._update_enterprise_status(data=data, auth=auth)
  87. async def _handle_auth(self, data: EnterpriseChangeContent, auth: AuthSchema) -> bool:
  88. """处理企业认证"""
  89. return await self._update_enterprise_status(data=data, auth=auth)
  90. async def _handle_auth_rejected(self, data: EnterpriseChangeContent, auth: AuthSchema) -> bool:
  91. """处理企业认证拒绝"""
  92. return await self._update_enterprise_status(data=data, auth=auth)