crud.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from typing import Optional
  2. from app.api.v1.module_system.auth.schema import AuthSchema
  3. from app.core.base_crud import CRUDBase
  4. from app.core.exceptions import CustomException
  5. from .model import EmployeeModel
  6. from .schema import EmployeeCreateOrUpdateSchema
  7. class EmployeeCRUD(CRUDBase[EmployeeModel, EmployeeCreateOrUpdateSchema, EmployeeCreateOrUpdateSchema]):
  8. """员工 CRUD 操作"""
  9. def __init__(self, auth: AuthSchema) -> None:
  10. self.auth = auth
  11. super().__init__(model=EmployeeModel, auth=auth)
  12. async def get_by_employee_id(
  13. self, employee_id: str, enterprise_id: str | None = None
  14. ) -> EmployeeModel | None:
  15. """根据员工ID查询员工(业务主键)"""
  16. return await self.get(employee_id=employee_id, enterprise_id=enterprise_id)
  17. async def update_by(
  18. self,
  19. employee_mobile: Optional[str] = None,
  20. employee_email: Optional[str] = None,
  21. identity_open_id: Optional[str] = None,
  22. data: dict = {},
  23. ) -> EmployeeModel | None:
  24. """根据员工手机号或邮箱更新员工(业务主键)"""
  25. print(data)
  26. obj = await self.get(employee_mobile=employee_mobile, employee_email=employee_email, identity_open_id=identity_open_id, preload=[])
  27. if not obj:
  28. raise CustomException(msg="更新失败!对象不存在")
  29. if self.auth.user and hasattr(obj, "updated_id"):
  30. setattr(obj, "updated_id", self.auth.user.id)
  31. for key, value in data.items():
  32. if hasattr(obj, key):
  33. setattr(obj, key, value)
  34. await self.auth.db.flush()
  35. await self.auth.db.refresh(obj)
  36. # verify_obj = await self.get(employee_id=obj.employee_id, enterprise_id=obj.enterprise_id, preload=[])
  37. # if not verify_obj:
  38. # raise CustomException(msg="更新失败!对象不存在或无权限访问")
  39. return obj
  40. async def delete_by_employee_id(
  41. self, employee_id: str, *, enterprise_id: str | None = None
  42. ) -> None:
  43. """根据员工ID将员工状态更新为解约(业务主键)"""
  44. from .enums import EmployeeStatusEnum
  45. obj = await self.get(employee_id=employee_id, enterprise_id=enterprise_id, preload=[])
  46. if not obj:
  47. return # 员工不存在,直接返回
  48. if self.auth.user and hasattr(obj, "updated_id"):
  49. setattr(obj, "updated_id", self.auth.user.id)
  50. # 直接删除
  51. await self.auth.db.delete(obj)
  52. await self.auth.db.flush()
  53. await self.auth.db.refresh(obj)