117 lines
4.1 KiB
Python
117 lines
4.1 KiB
Python
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='删除成功')
|
||
|
||
|
||
|
||
|
||
|
||
|