73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
"""商品单位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)
|