service.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. from typing import Optional, List, Dict, Any
  2. from alipay.aop.api.domain.DepartmentInfoDTO import DepartmentInfoDTO
  3. from alipay.aop.api.domain.AlipayCommerceEcDepartmentCreateModel import AlipayCommerceEcDepartmentCreateModel
  4. from alipay.aop.api.domain.AlipayCommerceEcDepartmentDeleteModel import AlipayCommerceEcDepartmentDeleteModel
  5. from alipay.aop.api.response.AlipayCommerceEcDepartmentCreateResponse import AlipayCommerceEcDepartmentCreateResponse
  6. from alipay.aop.api.response.AlipayCommerceEcDepartmentDeleteResponse import AlipayCommerceEcDepartmentDeleteResponse
  7. from alipay.aop.api.request.AlipayCommerceEcDepartmentCreateRequest import AlipayCommerceEcDepartmentCreateRequest
  8. from alipay.aop.api.request.AlipayCommerceEcDepartmentDeleteRequest import AlipayCommerceEcDepartmentDeleteRequest
  9. from alipay.aop.api.request.AlipayCommerceEcDepartmentInfoModifyRequest import AlipayCommerceEcDepartmentInfoModifyRequest
  10. from alipay.aop.api.request.AlipayCommerceEcDepartmentInfoQueryRequest import AlipayCommerceEcDepartmentInfoQueryRequest
  11. from alipay.aop.api.request.AlipayCommerceEcDepartmentSublistQueryRequest import AlipayCommerceEcDepartmentSublistQueryRequest
  12. from app.api.v1.module_system.auth.schema import AuthSchema
  13. from app.core.alipay import AlipayClient
  14. from app.core.logger import log
  15. from app.core.exceptions import CustomException
  16. from .crud import DepartmentCRUD
  17. from .schema import (
  18. DepartmentCreateSchema,
  19. DepartmentUpdateSchema,
  20. DepartmentDetailOutSchema,
  21. DepartmentOperationOutSchema
  22. )
  23. class DepartmentService:
  24. """部门服务"""
  25. @classmethod
  26. async def create_department_service(
  27. cls, auth: AuthSchema, data: DepartmentCreateSchema
  28. ) -> DepartmentOperationOutSchema:
  29. """创建部门"""
  30. # 调用支付宝接口创建部门
  31. department_create_model = AlipayCommerceEcDepartmentCreateModel()
  32. department_create_model.enterprise_id = data.enterprise_id
  33. department_create_model.department_name = data.department_name
  34. if data.department_code:
  35. department_create_model.department_code = data.department_code
  36. if data.parent_department_id:
  37. department_create_model.parent_department_id = data.parent_department_id or "-1"
  38. client = AlipayClient.get_client()
  39. request = AlipayCommerceEcDepartmentCreateRequest()
  40. request.biz_model = department_create_model
  41. response = client.execute(request)
  42. if not response:
  43. raise CustomException(msg="创建部门失败: 无响应")
  44. result = AlipayCommerceEcDepartmentCreateResponse()
  45. result.parse_response_content(response)
  46. if not result.is_success():
  47. log.error(f"支付宝接口调用失败: {result.code} - {result.msg}")
  48. raise CustomException(msg=f"创建部门失败: {result.sub_code or result.msg or result.code}")
  49. # 保存到数据库
  50. crud = DepartmentCRUD(auth)
  51. department_data = {
  52. "department_id": result.department_id or "",
  53. "department_name": data.department_name,
  54. "department_code": data.department_code,
  55. "parent_department_id": data.parent_department_id or "-1",
  56. "enterprise_id": data.enterprise_id,
  57. "sort_order": data.sort_order,
  58. "leader_employee_id": data.leader_employee_id,
  59. "leader_employee_name": data.leader_employee_name
  60. }
  61. await crud.create(department_data)
  62. return DepartmentOperationOutSchema(
  63. department_id=result.department_id or "",
  64. department_name=data.department_name
  65. )
  66. @classmethod
  67. async def delete_department_service(
  68. cls, auth: AuthSchema, department_id: str, enterprise_id: str
  69. ) -> DepartmentOperationOutSchema:
  70. return DepartmentOperationOutSchema(
  71. department_id=department_id,
  72. department_name=""
  73. )
  74. @classmethod
  75. async def update_department_service(
  76. cls, auth: AuthSchema, department_id: str, enterprise_id: str, data: DepartmentUpdateSchema
  77. ) -> DepartmentOperationOutSchema:
  78. """更新部门"""
  79. return DepartmentOperationOutSchema(
  80. department_id=department_id,
  81. department_name=""
  82. )
  83. @classmethod
  84. async def get_department_service(
  85. cls, auth: AuthSchema, department_id: str, enterprise_id: str
  86. ) -> DepartmentDetailOutSchema:
  87. """查询部门详情"""
  88. return DepartmentDetailOutSchema(
  89. department=None,
  90. sub_departments=[]
  91. )
  92. @classmethod
  93. async def get_sub_departments_service(
  94. cls, auth: AuthSchema, parent_department_id: str, enterprise_id: str
  95. ) -> List[str]:
  96. """查询子部门列表"""
  97. return []
  98. @classmethod
  99. async def list_service(
  100. cls, auth: AuthSchema, page_no: int, page_size: int, search: Dict[str, Any]
  101. ) -> Dict[str, Any]:
  102. """分页查询部门列表"""
  103. return {}
  104. @classmethod
  105. async def get_department_tree_service(
  106. cls, auth: AuthSchema, enterprise_id: str
  107. ) -> List[Dict[str, Any]]:
  108. """获取部门树形结构"""
  109. return []