unit.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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 BasProductUnit, BasProductUnitHis
  6. from app.crud.base import CRUDBase
  7. class UnitCRUD(CRUDBase[BasProductUnit]):
  8. """商品单位CRUD操作"""
  9. def get_by_code(self, db: Session, code: str) -> Optional[BasProductUnit]:
  10. """根据编码获取单位"""
  11. return db.query(BasProductUnit).filter(
  12. and_(BasProductUnit.code == code, BasProductUnit.is_del == 0)
  13. ).first()
  14. def get_active_all(self, db: Session) -> List[BasProductUnit]:
  15. """获取所有启用的单位"""
  16. return db.query(BasProductUnit).filter(
  17. and_(BasProductUnit.is_del == 0, BasProductUnit.is_active == True)
  18. ).order_by(BasProductUnit.sort_order.asc(), BasProductUnit.id.asc()).all()
  19. def update_with_history(self, db: Session, id: str, obj_in: dict, updater: dict = None) -> Optional[BasProductUnit]:
  20. """更新单位并记录历史"""
  21. original = self.get(db, id)
  22. if not original:
  23. return None
  24. his_data = {
  25. "id": original.id,
  26. "name": original.name,
  27. "code": original.code,
  28. "is_active": original.is_active,
  29. "sort_order": original.sort_order,
  30. "create_at": original.create_at,
  31. "create_by": original.create_by,
  32. "create_name": original.create_name,
  33. "update_at": original.update_at,
  34. "update_by": original.update_by,
  35. }
  36. his = BasProductUnitHis(**his_data)
  37. db.add(his)
  38. return self.update(db, id, obj_in, updater)
  39. def soft_delete_with_history(self, db: Session, id: str) -> bool:
  40. """删除单位并记录历史"""
  41. original = self.get(db, id)
  42. if not original:
  43. return False
  44. his_data = {
  45. "id": original.id,
  46. "name": original.name,
  47. "code": original.code,
  48. "is_active": original.is_active,
  49. "sort_order": original.sort_order,
  50. "create_at": original.create_at,
  51. "create_by": original.create_by,
  52. "create_name": original.create_name,
  53. "update_at": original.update_at,
  54. "update_by": original.update_by,
  55. }
  56. his = BasProductUnitHis(**his_data)
  57. db.add(his)
  58. return self.delete(db, id)
  59. unit_crud = UnitCRUD(BasProductUnit)