region.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. """区域管理CRUD"""
  2. from typing import Optional, List
  3. from sqlalchemy.orm import Session
  4. from sqlalchemy import and_
  5. from app.models.models import SysRegion, SysRegionHis
  6. from app.crud.base import CRUDBase
  7. class RegionCRUD(CRUDBase[SysRegion]):
  8. """区域CRUD操作"""
  9. def get_by_code(self, db: Session, code: str) -> Optional[SysRegion]:
  10. """根据编码获取区域(含已删除,匹配数据库唯一索引约束)"""
  11. return db.query(SysRegion).filter(SysRegion.code == code).first()
  12. def get_active_all(self, db: Session) -> List[SysRegion]:
  13. """获取所有启用的区域"""
  14. return db.query(SysRegion).filter(
  15. and_(SysRegion.is_del == 0, SysRegion.is_active == True)
  16. ).order_by(SysRegion.sort_order.asc()).all()
  17. def create_with_history(self, db: Session, obj_in: dict, creator: dict = None) -> SysRegion:
  18. """创建区域并记录历史"""
  19. obj = self.create(db, obj_in, creator)
  20. return obj
  21. def update_with_history(self, db: Session, id: str, obj_in: dict, updater: dict = None) -> Optional[SysRegion]:
  22. """更新区域并记录历史"""
  23. original = self.get(db, id)
  24. if not original:
  25. return None
  26. his_data = {
  27. "id": original.id,
  28. "name": original.name,
  29. "code": original.code,
  30. "description": original.description,
  31. "sort_order": original.sort_order,
  32. "expected_delivery_minutes": original.expected_delivery_minutes,
  33. "delivery_warn_advance_minutes": original.delivery_warn_advance_minutes,
  34. "is_active": original.is_active,
  35. "create_at": original.create_at,
  36. "create_by": original.create_by,
  37. "create_name": original.create_name,
  38. "update_at": original.update_at,
  39. "update_by": original.update_by,
  40. }
  41. his = SysRegionHis(**his_data)
  42. db.add(his)
  43. return self.update(db, id, obj_in, updater)
  44. def soft_delete_with_history(self, db: Session, id: str) -> bool:
  45. """删除区域并记录历史"""
  46. original = self.get(db, id)
  47. if not original:
  48. return False
  49. his_data = {
  50. "id": original.id,
  51. "name": original.name,
  52. "code": original.code,
  53. "description": original.description,
  54. "sort_order": original.sort_order,
  55. "expected_delivery_minutes": original.expected_delivery_minutes,
  56. "delivery_warn_advance_minutes": original.delivery_warn_advance_minutes,
  57. "is_active": original.is_active,
  58. "create_at": original.create_at,
  59. "create_by": original.create_by,
  60. "create_name": original.create_name,
  61. "update_at": original.update_at,
  62. "update_by": original.update_by,
  63. }
  64. his = SysRegionHis(**his_data)
  65. db.add(his)
  66. return self.delete(db, id)
  67. region_crud = RegionCRUD(SysRegion)