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

117 lines
4.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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='删除成功')