| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- """订单调整记录 CRUD"""
- from typing import Optional, List, Dict, Any
- from sqlalchemy.orm import Session
- from sqlalchemy import and_
- from app.core.utils import generate_id
- from app.core.database import Base
- from app.crud.base import CRUDBase
- from app.models.models import BizOrderAdjust, BizOrderAdjustHis
- class OrderAdjustCRUD(CRUDBase[BizOrderAdjust]):
- """订单调整记录CRUD"""
- def __init__(self):
- super().__init__(BizOrderAdjust)
- def create_adjust(
- self,
- db: Session,
- order_id: str,
- order_item_id: str,
- adjust_type: str,
- before_quantity: float,
- after_quantity: float,
- before_amount: float,
- after_amount: float,
- reason: str,
- operator_id: str,
- operator_name: str,
- substitute_product_id: str = None,
- create_by: str = None,
- create_name: str = None
- ) -> BizOrderAdjust:
- """创建订单调整记录"""
- data = {
- "id": generate_id(),
- "order_id": order_id,
- "order_item_id": order_item_id,
- "adjust_type": adjust_type,
- "before_quantity": before_quantity,
- "after_quantity": after_quantity,
- "before_amount": before_amount,
- "after_amount": after_amount,
- "difference_amount": before_amount - after_amount,
- "reason": reason,
- "operator_id": operator_id,
- "operator_name": operator_name,
- "substitute_product_id": substitute_product_id,
- "create_by": create_by or operator_id,
- "create_name": create_name or operator_name
- }
- return self.create(db, data)
- def get_by_order(self, db: Session, order_id: str) -> List[BizOrderAdjust]:
- """获取订单的所有调整记录"""
- return db.query(self.model).filter(
- and_(
- self.model.order_id == order_id,
- self.model.is_del == 0
- )
- ).order_by(self.model.create_at.desc()).all()
- def get_by_order_item(self, db: Session, order_item_id: str) -> List[BizOrderAdjust]:
- """获取订单项的所有调整记录"""
- return db.query(self.model).filter(
- and_(
- self.model.order_item_id == order_item_id,
- self.model.is_del == 0
- )
- ).order_by(self.model.create_at.desc()).all()
- def get_total_adjust_amount(self, db: Session, order_id: str) -> float:
- """获取订单的总调整金额(负数表示退款)"""
- records = self.get_by_order(db, order_id)
- return sum(r.difference_amount or 0 for r in records)
- def get_list(
- self,
- db: Session,
- page: int = 1,
- pageSize: int = 10,
- keyword: Optional[str] = None,
- adjust_type: Optional[str] = None,
- start_date: Optional[str] = None,
- end_date: Optional[str] = None
- ) -> tuple:
- """获取订单调整列表(支持分页和搜索)"""
- query = db.query(self.model).filter(self.model.is_del == 0)
- # 关键词搜索(搜索订单号)
- if keyword:
- query = query.filter(self.model.order_id.like(f"%{keyword}%"))
- # 调整类型筛选
- if adjust_type:
- query = query.filter(self.model.adjust_type == adjust_type)
- # 日期范围筛选
- if start_date:
- query = query.filter(self.model.create_at >= start_date)
- if end_date:
- query = query.filter(self.model.create_at <= f"{end_date} 23:59:59")
- # 获取总数
- total = query.count()
- # 分页
- offset = (page - 1) * pageSize
- records = query.order_by(self.model.create_at.desc()).offset(offset).limit(pageSize).all()
- return records, total
- def create_adjust_history(
- self,
- db: Session,
- original_record: BizOrderAdjust,
- operator_id: str,
- operator_name: str
- ) -> BizOrderAdjustHis:
- """创建订单调整历史记录"""
- from app.crud.base import HistoryCRUD
- history_crud = HistoryCRUD(BizOrderAdjustHis)
- data = {
- "id": generate_id(),
- "order_id": original_record.order_id,
- "order_item_id": original_record.order_item_id,
- "adjust_type": original_record.adjust_type,
- "before_quantity": original_record.before_quantity,
- "after_quantity": original_record.after_quantity,
- "before_amount": original_record.before_amount,
- "after_amount": original_record.after_amount,
- "difference_amount": original_record.difference_amount,
- "reason": original_record.reason,
- "substitute_product_id": original_record.substitute_product_id,
- "operator_id": operator_id,
- "operator_name": operator_name,
- "create_by": original_record.create_by,
- "create_name": original_record.create_name
- }
- return history_crud.create(db, data)
- # 全局实例
- order_adjust_crud = OrderAdjustCRUD()
|