| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- """商品单位CRUD"""
- from typing import Optional, List
- from sqlalchemy.orm import Session
- from sqlalchemy import and_
- from app.models.models import BasProductUnit, BasProductUnitHis
- from app.crud.base import CRUDBase
- class UnitCRUD(CRUDBase[BasProductUnit]):
- """商品单位CRUD操作"""
- def get_by_code(self, db: Session, code: str) -> Optional[BasProductUnit]:
- """根据编码获取单位"""
- return db.query(BasProductUnit).filter(
- and_(BasProductUnit.code == code, BasProductUnit.is_del == 0)
- ).first()
- def get_active_all(self, db: Session) -> List[BasProductUnit]:
- """获取所有启用的单位"""
- return db.query(BasProductUnit).filter(
- and_(BasProductUnit.is_del == 0, BasProductUnit.is_active == True)
- ).order_by(BasProductUnit.sort_order.asc(), BasProductUnit.id.asc()).all()
- def update_with_history(self, db: Session, id: str, obj_in: dict, updater: dict = None) -> Optional[BasProductUnit]:
- """更新单位并记录历史"""
- original = self.get(db, id)
- if not original:
- return None
- his_data = {
- "id": original.id,
- "name": original.name,
- "code": original.code,
- "is_active": original.is_active,
- "sort_order": original.sort_order,
- "create_at": original.create_at,
- "create_by": original.create_by,
- "create_name": original.create_name,
- "update_at": original.update_at,
- "update_by": original.update_by,
- }
- his = BasProductUnitHis(**his_data)
- db.add(his)
- return self.update(db, id, obj_in, updater)
- def soft_delete_with_history(self, db: Session, id: str) -> bool:
- """删除单位并记录历史"""
- original = self.get(db, id)
- if not original:
- return False
- his_data = {
- "id": original.id,
- "name": original.name,
- "code": original.code,
- "is_active": original.is_active,
- "sort_order": original.sort_order,
- "create_at": original.create_at,
- "create_by": original.create_by,
- "create_name": original.create_name,
- "update_at": original.update_at,
- "update_by": original.update_by,
- }
- his = BasProductUnitHis(**his_data)
- db.add(his)
- return self.delete(db, id)
- unit_crud = UnitCRUD(BasProductUnit)
|