| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- """CRUD - 分类参数关联"""
- from typing import List
- from sqlalchemy.orm import Session
- from sqlalchemy import and_
- from app.crud.base import CRUDBase, HistoryCRUD
- from app.models.category_parameter import BasCategoryParameter, BasCategoryParameterHis
- from app.schemas.category_parameter import CategoryParameterBase
- class CategoryParameterCRUD(CRUDBase[BasCategoryParameter]):
- """分类参数关联CRUD操作"""
- def get_by_category(self, db: Session, category_id: str) -> List[BasCategoryParameter]:
- """获取分类的所有关联参数"""
- return db.query(self.model).filter(
- self.model.category_id == category_id,
- self.model.is_del == 0
- ).order_by(self.model.sort_order.asc()).all()
- def get_by_category_with_detail(self, db: Session, category_id: str) -> List[dict]:
- """获取分类的所有关联参数(带参数详情)"""
- from app.models.product_parameter import BasProductParameter
-
- results = db.query(
- BasCategoryParameter,
- BasProductParameter
- ).join(
- BasProductParameter,
- and_(
- BasCategoryParameter.parameter_id == BasProductParameter.id,
- BasProductParameter.is_del == 0
- )
- ).filter(
- BasCategoryParameter.category_id == category_id,
- BasCategoryParameter.is_del == 0
- ).order_by(
- BasCategoryParameter.sort_order.asc()
- ).all()
-
- return [
- {
- "id": cp.id,
- "parameterId": cp.parameter_id,
- "parameterName": pp.name,
- "parameterCode": pp.code,
- "paramType": pp.param_type,
- "options": pp.options,
- "placeholder": pp.placeholder,
- "isRequired": cp.is_required,
- "defaultValue": cp.default_value,
- "sortOrder": cp.sort_order,
- }
- for cp, pp in results
- ]
- def batch_save(
- self,
- db: Session,
- category_id: str,
- items: List[dict],
- creator: dict = None
- ) -> List[BasCategoryParameter]:
- """批量保存分类参数关联"""
- # 先获取要删除的记录ID
- old_records = db.query(self.model).filter(
- self.model.category_id == category_id,
- self.model.is_del == 0
- ).all()
-
- # 物理删除旧记录(释放唯一索引约束)
- for record in old_records:
- db.delete(record)
- db.commit()
-
- # 创建新的关联
- saved_items = []
- for idx, item in enumerate(items):
- item_data = {
- "category_id": category_id,
- "parameter_id": item.get("parameter_id"),
- "is_required": item.get("is_required", 0),
- "default_value": item.get("default_value"),
- "sort_order": item.get("sort_order", idx),
- }
- cp = self.create(db, item_data, creator)
- saved_items.append(cp)
-
- db.commit()
- return saved_items
- def delete_by_category(self, db: Session, category_id: str) -> int:
- """删除分类的所有关联"""
- count = db.query(self.model).filter(
- self.model.category_id == category_id,
- self.model.is_del == 0
- ).update({"is_del": 1})
- db.commit()
- return count
- def exists_link(self, db: Session, category_id: str, parameter_id: str) -> bool:
- """检查是否已有关联"""
- return db.query(self.model).filter(
- self.model.category_id == category_id,
- self.model.parameter_id == parameter_id,
- self.model.is_del == 0
- ).first() is not None
- class CategoryParameterHisCRUD(HistoryCRUD[BasCategoryParameterHis]):
- """分类参数关联历史CRUD操作"""
- pass
- category_parameter = CategoryParameterCRUD(BasCategoryParameter)
- category_parameter_his = CategoryParameterHisCRUD(BasCategoryParameterHis)
|