product_parameter_value.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. """CRUD - 商品参数值"""
  2. from typing import List
  3. from sqlalchemy.orm import Session
  4. from sqlalchemy import and_
  5. from app.crud.base import CRUDBase, HistoryCRUD
  6. from app.models.product_parameter_value import BasProductParameterValue, BasProductParameterValueHis
  7. from app.schemas.product_parameter_value import ProductParameterValueCreate
  8. class ProductParameterValueCRUD(CRUDBase[BasProductParameterValue]):
  9. """商品参数值CRUD操作"""
  10. def get_by_product(self, db: Session, product_id: str) -> List[BasProductParameterValue]:
  11. """获取商品的所有参数值"""
  12. return db.query(self.model).filter(
  13. self.model.product_id == product_id,
  14. self.model.is_del == 0
  15. ).order_by(self.model.sort_order.asc()).all()
  16. def get_by_product_with_detail(self, db: Session, product_id: str) -> List[dict]:
  17. """获取商品的所有参数值(带参数详情)"""
  18. from app.models.product_parameter import BasProductParameter
  19. results = db.query(
  20. BasProductParameterValue,
  21. BasProductParameter
  22. ).join(
  23. BasProductParameter,
  24. and_(
  25. BasProductParameterValue.parameter_id == BasProductParameter.id,
  26. BasProductParameter.is_del == 0
  27. )
  28. ).filter(
  29. BasProductParameterValue.product_id == product_id,
  30. BasProductParameterValue.is_del == 0
  31. ).order_by(
  32. BasProductParameterValue.sort_order.asc()
  33. ).all()
  34. return [
  35. {
  36. "id": ppv.id,
  37. "product_id": ppv.product_id,
  38. "parameter_id": ppv.parameter_id,
  39. "parameter_name": pp.name,
  40. "parameter_code": pp.code,
  41. "param_type": pp.param_type,
  42. "options": pp.options,
  43. "placeholder": pp.placeholder,
  44. "param_value": ppv.param_value,
  45. "sort_order": ppv.sort_order,
  46. }
  47. for ppv, pp in results
  48. ]
  49. def batch_save(
  50. self,
  51. db: Session,
  52. product_id: str,
  53. values: List[dict],
  54. creator: dict = None
  55. ) -> List[BasProductParameterValue]:
  56. """批量保存商品参数值"""
  57. from app.models.product_parameter import BasProductParameter
  58. # 先删除原有的参数值
  59. db.query(self.model).filter(
  60. self.model.product_id == product_id,
  61. self.model.is_del == 0
  62. ).update({"is_del": 1})
  63. # 创建新的参数值
  64. saved_values = []
  65. for idx, value_item in enumerate(values):
  66. parameter_id = value_item.get("parameter_id")
  67. param_value = value_item.get("param_value")
  68. # 获取参数信息
  69. param = db.query(BasProductParameter).filter(
  70. BasProductParameter.id == parameter_id,
  71. BasProductParameter.is_del == 0
  72. ).first()
  73. if param:
  74. item_data = {
  75. "product_id": product_id,
  76. "parameter_id": parameter_id,
  77. "parameter_name": param.name,
  78. "parameter_code": param.code,
  79. "param_type": param.param_type,
  80. "param_value": param_value,
  81. "sort_order": idx,
  82. }
  83. pv = self.create(db, item_data, creator)
  84. saved_values.append(pv)
  85. db.commit()
  86. return saved_values
  87. def delete_by_product(self, db: Session, product_id: str) -> int:
  88. """删除商品的所有参数值"""
  89. count = db.query(self.model).filter(
  90. self.model.product_id == product_id,
  91. self.model.is_del == 0
  92. ).update({"is_del": 1})
  93. db.commit()
  94. return count
  95. class ProductParameterValueHisCRUD(HistoryCRUD[BasProductParameterValueHis]):
  96. """商品参数值历史CRUD操作"""
  97. pass
  98. product_parameter_value = ProductParameterValueCRUD(BasProductParameterValue)
  99. product_parameter_value_his = ProductParameterValueHisCRUD(BasProductParameterValueHis)