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