product_parameter.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. """CRUD - 商品参数模板"""
  2. from typing import List, Optional
  3. from sqlalchemy.orm import Session
  4. from sqlalchemy import or_
  5. from app.crud.base import CRUDBase, HistoryCRUD
  6. from app.models.product_parameter import BasProductParameter, BasProductParameterHis
  7. from app.schemas.product_parameter import ProductParameterCreate, ProductParameterUpdate
  8. class ProductParameterCRUD(CRUDBase[BasProductParameter]):
  9. """商品参数模板CRUD操作"""
  10. def get_multi_paged(
  11. self,
  12. db: Session,
  13. skip: int = 0,
  14. limit: int = 10,
  15. is_active: Optional[int] = None,
  16. keyword: Optional[str] = None,
  17. order_by: str = "sort_order",
  18. order_type: str = "asc"
  19. ) -> tuple:
  20. """分页获取参数列表"""
  21. query = db.query(self.model).filter(self.model.is_del == 0)
  22. if is_active is not None:
  23. query = query.filter(self.model.is_active == is_active)
  24. if keyword:
  25. query = query.filter(
  26. or_(
  27. self.model.name.like(f"%{keyword}%"),
  28. self.model.code.like(f"%{keyword}%")
  29. )
  30. )
  31. total = query.count()
  32. order_column = getattr(self.model, order_by, None)
  33. if order_column:
  34. if order_type == "asc":
  35. query = query.order_by(order_column.asc())
  36. else:
  37. query = query.order_by(order_column.desc())
  38. else:
  39. query = query.order_by(self.model.sort_order.asc())
  40. items = query.offset(skip).limit(limit).all()
  41. return items, total
  42. def get_active_all(self, db: Session) -> List[BasProductParameter]:
  43. """获取所有启用的参数"""
  44. return db.query(self.model).filter(
  45. self.model.is_del == 0,
  46. self.model.is_active == 1
  47. ).order_by(self.model.sort_order.asc()).all()
  48. def get_by_code(self, db: Session, code: str) -> Optional[BasProductParameter]:
  49. """根据编码获取参数"""
  50. return db.query(self.model).filter(
  51. self.model.code == code,
  52. self.model.is_del == 0
  53. ).first()
  54. def code_exists(self, db: Session, code: str, exclude_id: str = None) -> bool:
  55. """检查编码是否已存在"""
  56. query = db.query(self.model).filter(
  57. self.model.code == code,
  58. self.model.is_del == 0
  59. )
  60. if exclude_id:
  61. query = query.filter(self.model.id != exclude_id)
  62. return query.first() is not None
  63. class ProductParameterHisCRUD(HistoryCRUD[BasProductParameterHis]):
  64. """商品参数模板历史CRUD操作"""
  65. pass
  66. product_parameter = ProductParameterCRUD(BasProductParameter)
  67. product_parameter_his = ProductParameterHisCRUD(BasProductParameterHis)