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