xxx
This commit is contained in:
@@ -26,6 +26,7 @@ from .sales_order_routes import router as sales_order_router
|
||||
from .dashboard_routes import router as dashboard_router
|
||||
from .finance_routes import router as finance_router
|
||||
from .material_routes import router as material_router
|
||||
from .purchase_demand_routes import router as purchase_demand_router
|
||||
|
||||
inventory_router = APIRouter(prefix="/api", tags=["进销存"])
|
||||
|
||||
@@ -38,6 +39,7 @@ inventory_router.include_router(stock_movement_router)
|
||||
inventory_router.include_router(purchase_order_router)
|
||||
inventory_router.include_router(sales_order_router)
|
||||
inventory_router.include_router(material_router)
|
||||
inventory_router.include_router(purchase_demand_router)
|
||||
inventory_router.include_router(dashboard_router)
|
||||
inventory_router.include_router(finance_router)
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ async def create_customer(
|
||||
|
||||
customer = Customer(**data)
|
||||
db_session.add(customer)
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
await db_session.refresh(customer)
|
||||
return CustomerResponse.from_orm(customer)
|
||||
|
||||
@@ -71,7 +71,7 @@ async def update_customer(
|
||||
for key, value in customer_data.dict().items():
|
||||
setattr(customer, key, value)
|
||||
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
await db_session.refresh(customer)
|
||||
return CustomerResponse.from_orm(customer)
|
||||
|
||||
@@ -88,5 +88,5 @@ async def delete_customer(
|
||||
raise HTTPException(status_code=404, detail="客户不存在")
|
||||
|
||||
customer.is_active = False
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
return {"message": "客户已删除"}
|
||||
|
||||
@@ -63,12 +63,12 @@ async def add_material_price_history(
|
||||
remark=price_data.remark
|
||||
)
|
||||
db_session.add(price_history)
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
await db_session.refresh(price_history)
|
||||
|
||||
# 更新产品的成本价格为最新价格
|
||||
product.cost_price = price_data.price
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
|
||||
return MaterialPriceHistoryResponse(
|
||||
id=price_history.id,
|
||||
@@ -212,7 +212,7 @@ async def add_material_supplier(
|
||||
min_order_quantity=supplier_data.min_order_quantity
|
||||
)
|
||||
db_session.add(material_supplier)
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
await db_session.refresh(material_supplier)
|
||||
|
||||
return MaterialSupplierResponse(
|
||||
@@ -281,7 +281,7 @@ async def remove_material_supplier(
|
||||
raise HTTPException(status_code=404, detail="物料供应商关联不存在")
|
||||
|
||||
await db_session.delete(material_supplier)
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
|
||||
return {"message": "物料供应商关联已删除"}
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ async def create_product(
|
||||
product_dict["max_stock"] = 0
|
||||
product = Product(**product_dict)
|
||||
db_session.add(product)
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
await db_session.refresh(product)
|
||||
return _build_product_response(product, 0)
|
||||
|
||||
@@ -178,7 +178,7 @@ async def create_product_from_task(
|
||||
db_session.add(product)
|
||||
await db_session.flush()
|
||||
stp_file.product_id = product.id
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
await db_session.refresh(product)
|
||||
return _build_product_response(product, 0)
|
||||
|
||||
@@ -205,7 +205,7 @@ async def update_product(
|
||||
for key, value in product_dict.items():
|
||||
setattr(product, key, value)
|
||||
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
await db_session.refresh(product)
|
||||
material_cost_map = await _calculate_material_cost_map(db_session, [product.id])
|
||||
return _build_product_response(product, material_cost_map.get(product.id, 0))
|
||||
@@ -223,7 +223,7 @@ async def delete_product(
|
||||
raise HTTPException(status_code=404, detail="产品不存在")
|
||||
|
||||
product.is_active = False
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
return {"message": "产品已删除"}
|
||||
|
||||
|
||||
@@ -321,5 +321,5 @@ async def replace_product_bom(
|
||||
)
|
||||
)
|
||||
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
return await get_product_bom(product_id, db_session, current_user)
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
"""采购需求推导路由层 - 薄路由
|
||||
|
||||
业务逻辑下沉至 inventory.services.purchase_demand_service,路由只做参数校验与响应组装。
|
||||
路由前缀: /api/purchase-demands
|
||||
"""
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from shared.database.database import get_db_session
|
||||
from shared.services.auth_service import get_current_active_user
|
||||
from shared.models.database import User
|
||||
from ..schemas import (
|
||||
PurchaseDemandCalculateRequest,
|
||||
PurchaseDemandResponse,
|
||||
)
|
||||
from ..services.purchase_demand_service import purchase_demand_service
|
||||
|
||||
router = APIRouter(prefix="/purchase-demands", tags=["采购需求推导"])
|
||||
|
||||
|
||||
@router.post("/calculate", response_model=PurchaseDemandResponse)
|
||||
async def calculate_purchase_demands(
|
||||
payload: PurchaseDemandCalculateRequest,
|
||||
db_session: AsyncSession = Depends(get_db_session),
|
||||
current_user: User = Depends(get_current_active_user),
|
||||
):
|
||||
"""根据销售订单 ID 列表,自动推导采购需求(BOM 展开 → 库存对比 → 供应商推荐)"""
|
||||
return await purchase_demand_service.calculate_demands(db_session, payload.sales_order_ids)
|
||||
@@ -51,7 +51,7 @@ async def create_supplier(
|
||||
|
||||
supplier = Supplier(**data)
|
||||
db_session.add(supplier)
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
await db_session.refresh(supplier)
|
||||
return SupplierResponse.from_orm(supplier)
|
||||
|
||||
@@ -71,7 +71,7 @@ async def update_supplier(
|
||||
for key, value in supplier_data.dict().items():
|
||||
setattr(supplier, key, value)
|
||||
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
await db_session.refresh(supplier)
|
||||
return SupplierResponse.from_orm(supplier)
|
||||
|
||||
@@ -88,5 +88,5 @@ async def delete_supplier(
|
||||
raise HTTPException(status_code=404, detail="供应商不存在")
|
||||
|
||||
supplier.is_active = False
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
return {"message": "供应商已删除"}
|
||||
|
||||
@@ -44,6 +44,6 @@ async def create_warehouse(
|
||||
|
||||
warehouse = Warehouse(**data)
|
||||
db_session.add(warehouse)
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
await db_session.refresh(warehouse)
|
||||
return WarehouseResponse.from_orm(warehouse)
|
||||
|
||||
Reference in New Issue
Block a user