from fastapi import APIRouter, Depends, Request from sqlalchemy.ext.asyncio import AsyncSession from config.get_db import get_db from config.enums import BusinessType from module_admin.annotation.log_annotation import Log from module_admin.aspect.interface_auth import CheckUserInterfaceAuth from module_admin.service.login_service import LoginService from module_admin.service.warehouse_sample_service import WarehouseSampleService from module_admin.entity.vo.warehouse_sample_vo import ( WarehouseSamplePageQueryModel, AddWarehouseSampleModel, EditWarehouseSampleModel, DeleteWarehouseSampleModel, GenerateWorkOrderFromSampleModel ) from module_admin.entity.vo.user_vo import CurrentUserModel from utils.log_util import logger from utils.page_util import PageResponseModel from utils.response_util import ResponseUtil warehouseSampleController = APIRouter(prefix='/warehouse/sample', dependencies=[Depends(LoginService.get_current_user)]) @warehouseSampleController.get('/list', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('warehouse:sample:list'))]) async def get_warehouse_sample_list( request: Request, query_object: WarehouseSamplePageQueryModel = Depends(WarehouseSamplePageQueryModel.as_query), query_db: AsyncSession = Depends(get_db) ): """ 获取样品列表 """ # 添加日志 print(f"DEBUG: 样品列表查询参数 - receipt_id={query_object.receipt_id}, receipt_no={query_object.receipt_no}") sample_list = await WarehouseSampleService.get_sample_list(query_db, query_object, is_page=True) logger.info('获取成功') return ResponseUtil.success(dict_content=sample_list) @warehouseSampleController.get('/{sample_id}', dependencies=[Depends(CheckUserInterfaceAuth('warehouse:sample:query'))]) async def get_warehouse_sample_detail( request: Request, sample_id: int, query_db: AsyncSession = Depends(get_db) ): """ 获取样品详情 """ sample_detail = await WarehouseSampleService.get_sample_detail(query_db, sample_id) logger.info('获取成功') return ResponseUtil.success(data=sample_detail) @warehouseSampleController.post('', dependencies=[Depends(CheckUserInterfaceAuth('warehouse:sample:add'))]) @Log(title='样品管理', business_type=BusinessType.INSERT) async def add_warehouse_sample( request: Request, add_sample: AddWarehouseSampleModel, query_db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """ 新增样品 """ add_sample.create_by = current_user.user.user_name result = await WarehouseSampleService.add_sample(query_db, add_sample) logger.info(result.message) return ResponseUtil.success(msg=result.message) @warehouseSampleController.put('', dependencies=[Depends(CheckUserInterfaceAuth('warehouse:sample:edit'))]) @Log(title='样品管理', business_type=BusinessType.UPDATE) async def edit_warehouse_sample( request: Request, edit_sample: EditWarehouseSampleModel, query_db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """ 修改样品 """ edit_sample.update_by = current_user.user.user_name result = await WarehouseSampleService.edit_sample(query_db, edit_sample) logger.info(result.message) return ResponseUtil.success(msg=result.message) @warehouseSampleController.delete('/{sample_ids}', dependencies=[Depends(CheckUserInterfaceAuth('warehouse:sample:remove'))]) @Log(title='样品管理', business_type=BusinessType.DELETE) async def delete_warehouse_sample( request: Request, sample_ids: str, query_db: AsyncSession = Depends(get_db) ): """ 删除样品 """ delete_sample = DeleteWarehouseSampleModel(sampleIds=sample_ids) result = await WarehouseSampleService.delete_sample(query_db, delete_sample) logger.info(result.message) return ResponseUtil.success(msg=result.message) @warehouseSampleController.post('/generate_work_orders', dependencies=[Depends(CheckUserInterfaceAuth('warehouse:sample:add'))]) @Log(title='样品生成工单', business_type=BusinessType.INSERT) async def generate_work_orders_from_samples( request: Request, generate_request: GenerateWorkOrderFromSampleModel, query_db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """ 从样品生成工单 """ try: result = await WarehouseSampleService.generate_work_orders_from_samples( query_db, generate_request, current_user.user.user_id ) # 根据结果返回不同的消息 if result.failed_count == 0: message = f'成功为 {result.success_count} 个样品生成工单' elif result.success_count == 0: message = f'工单生成失败,{result.failed_count} 个样品处理失败' else: message = f'部分成功:{result.success_count} 个样品成功,{result.failed_count} 个样品失败' logger.info(message) return ResponseUtil.success(data=result.model_dump(by_alias=True), msg=message) except Exception as e: logger.error(f'生成工单失败: {str(e)}') return ResponseUtil.error(msg=f'生成工单失败: {str(e)}')