ETest-Vue-FastAPI/ruoyi-fastapi-backend/module_admin/service/warehouse_sample_service.py

117 lines
4.1 KiB
Python
Raw Normal View History

2025-12-19 10:12:59 +08:00
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.dao.warehouse_sample_dao import WarehouseSampleDao
from module_admin.dao.warehouse_receipt_dao import WarehouseReceiptDao
from module_admin.entity.do.warehouse_sample_do import WarehouseSample
from module_admin.entity.vo.warehouse_sample_vo import (
WarehouseSampleModel, WarehouseSamplePageQueryModel,
AddWarehouseSampleModel, EditWarehouseSampleModel, DeleteWarehouseSampleModel
)
from module_admin.entity.vo.common_vo import CrudResponseModel
from exceptions.exception import ServiceException
from utils.common_util import CamelCaseUtil
from datetime import datetime
class WarehouseSampleService:
"""
样品业务逻辑层
"""
@classmethod
async def get_sample_list(cls, db: AsyncSession, query_object: WarehouseSamplePageQueryModel, is_page: bool = False):
"""
获取样品列表
"""
sample_list = await WarehouseSampleDao.get_sample_list(db, query_object, is_page)
# 转换为字典
result_list = [CamelCaseUtil.transform_result(sample) for sample in sample_list]
if is_page:
total = await WarehouseSampleDao.get_sample_count(db, query_object)
return {'rows': result_list, 'total': total}
else:
return result_list
@classmethod
async def get_sample_detail(cls, db: AsyncSession, sample_id: int):
"""
获取样品详情
"""
sample = await WarehouseSampleDao.get_sample_by_id(db, sample_id)
if not sample:
raise ServiceException(message='样品不存在')
return CamelCaseUtil.transform_result(sample)
@classmethod
async def add_sample(cls, db: AsyncSession, sample_model: AddWarehouseSampleModel):
"""
新增样品
"""
# 检查入库单是否存在
receipt = await WarehouseReceiptDao.get_receipt_by_id(db, sample_model.receipt_id)
if not receipt:
raise ServiceException(message='入库单不存在')
# 创建样品对象
sample = WarehouseSample(**sample_model.model_dump(exclude_unset=True))
sample.receipt_no = receipt.receipt_no # 设置入库单号
sample.create_time = datetime.now()
sample.update_time = datetime.now()
# 保存
await WarehouseSampleDao.add_sample(db, sample)
await db.commit()
return CrudResponseModel(is_success=True, message='新增成功')
@classmethod
async def edit_sample(cls, db: AsyncSession, sample_model: EditWarehouseSampleModel):
"""
编辑样品
"""
# 检查样品是否存在
sample = await WarehouseSampleDao.get_sample_by_id(db, sample_model.sample_id)
if not sample:
raise ServiceException(message='样品不存在')
# 如果修改了入库单ID检查新入库单是否存在
if sample_model.receipt_id and sample_model.receipt_id != sample.receipt_id:
receipt = await WarehouseReceiptDao.get_receipt_by_id(db, sample_model.receipt_id)
if not receipt:
raise ServiceException(message='入库单不存在')
sample_model.receipt_no = receipt.receipt_no
# 更新
sample_model.update_time = datetime.now()
await WarehouseSampleDao.edit_sample(db, sample_model)
await db.commit()
return CrudResponseModel(is_success=True, message='更新成功')
@classmethod
async def delete_sample(cls, db: AsyncSession, delete_model: DeleteWarehouseSampleModel):
"""
删除样品
"""
sample_ids = [int(id_str) for id_str in delete_model.sample_ids.split(',')]
# 检查样品是否存在
for sample_id in sample_ids:
sample = await WarehouseSampleDao.get_sample_by_id(db, sample_id)
if not sample:
raise ServiceException(message=f'样品ID【{sample_id}】不存在')
# 删除样品
await WarehouseSampleDao.delete_sample(db, sample_ids)
await db.commit()
return CrudResponseModel(is_success=True, message='删除成功')