Files
nxxmdata/backend/routes/cattle-batches.js
2025-09-12 20:08:42 +08:00

350 lines
10 KiB
JavaScript

const express = require('express');
const router = express.Router();
const cattleBatchController = require('../controllers/cattleBatchController');
const { verifyToken } = require('../middleware/auth');
const { requirePermission } = require('../middleware/permission');
// 所有路由都需要认证
router.use(verifyToken);
/**
* @swagger
* /api/cattle-batches:
* get:
* summary: 获取批次列表
* tags: [批次管理]
* security:
* - bearerAuth: []
* parameters:
* - in: query
* name: page
* schema:
* type: integer
* default: 1
* description: 页码
* - in: query
* name: pageSize
* schema:
* type: integer
* default: 10
* description: 每页数量
* - in: query
* name: search
* schema:
* type: string
* description: 搜索关键词
* - in: query
* name: status
* schema:
* type: string
* enum: [进行中, 已完成, 已暂停]
* description: 状态筛选
* - in: query
* name: type
* schema:
* type: string
* enum: [育成批次, 繁殖批次, 育肥批次, 隔离批次, 治疗批次]
* description: 类型筛选
* responses:
* 200:
* description: 成功获取批次列表
*/
router.get('/', requirePermission('cattle:batches:view'), cattleBatchController.getBatches);
/**
* @swagger
* /api/cattle-batches/{id}:
* get:
* summary: 获取批次详情
* tags: [批次管理]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 批次ID
* responses:
* 200:
* description: 成功获取批次详情
* 404:
* description: 批次不存在
*/
router.get('/:id', requirePermission('cattle:batches:view'), cattleBatchController.getBatchById);
/**
* @swagger
* /api/cattle-batches:
* post:
* summary: 创建批次
* tags: [批次管理]
* security:
* - bearerAuth: []
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* name:
* type: string
* description: 批次名称
* code:
* type: string
* description: 批次编号
* type:
* type: string
* enum: [育成批次, 繁殖批次, 育肥批次, 隔离批次, 治疗批次]
* description: 批次类型
* startDate:
* type: string
* format: date
* description: 开始日期
* expectedEndDate:
* type: string
* format: date
* description: 预计结束日期
* targetCount:
* type: integer
* description: 目标牛只数量
* manager:
* type: string
* description: 负责人
* remark:
* type: string
* description: 备注
* responses:
* 201:
* description: 成功创建批次
* 400:
* description: 请求参数错误
*/
router.post('/', requirePermission('cattle:batches:create'), cattleBatchController.createBatch);
/**
* @swagger
* /api/cattle-batches/{id}:
* put:
* summary: 更新批次
* tags: [批次管理]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 批次ID
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* name:
* type: string
* description: 批次名称
* code:
* type: string
* description: 批次编号
* type:
* type: string
* enum: [育成批次, 繁殖批次, 育肥批次, 隔离批次, 治疗批次]
* description: 批次类型
* startDate:
* type: string
* format: date
* description: 开始日期
* expectedEndDate:
* type: string
* format: date
* description: 预计结束日期
* actualEndDate:
* type: string
* format: date
* description: 实际结束日期
* targetCount:
* type: integer
* description: 目标牛只数量
* currentCount:
* type: integer
* description: 当前牛只数量
* manager:
* type: string
* description: 负责人
* status:
* type: string
* enum: [进行中, 已完成, 已暂停]
* description: 状态
* remark:
* type: string
* description: 备注
* responses:
* 200:
* description: 成功更新批次
* 404:
* description: 批次不存在
*/
router.put('/:id', requirePermission('cattle:batches:update'), cattleBatchController.updateBatch);
/**
* @swagger
* /api/cattle-batches/{id}:
* delete:
* summary: 删除批次
* tags: [批次管理]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 批次ID
* responses:
* 200:
* description: 成功删除批次
* 404:
* description: 批次不存在
* 400:
* description: 批次中还有牛只,无法删除
*/
router.delete('/:id', requirePermission('cattle:batches:delete'), cattleBatchController.deleteBatch);
/**
* @swagger
* /api/cattle-batches/batch-delete:
* post:
* summary: 批量删除批次
* tags: [批次管理]
* security:
* - bearerAuth: []
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* ids:
* type: array
* items:
* type: integer
* description: 批次ID数组
* responses:
* 200:
* description: 成功批量删除批次
* 400:
* description: 请求参数错误或批次中还有牛只
*/
router.post('/batch-delete', requirePermission('cattle:batches:delete'), cattleBatchController.batchDeleteBatches);
/**
* @swagger
* /api/cattle-batches/{id}/animals:
* get:
* summary: 获取批次中的牛只
* tags: [批次管理]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 批次ID
* - in: query
* name: page
* schema:
* type: integer
* default: 1
* description: 页码
* - in: query
* name: pageSize
* schema:
* type: integer
* default: 10
* description: 每页数量
* responses:
* 200:
* description: 成功获取批次牛只
* 404:
* description: 批次不存在
*/
router.get('/:id/animals', requirePermission('cattle:batches:view'), cattleBatchController.getBatchAnimals);
/**
* @swagger
* /api/cattle-batches/{id}/animals:
* post:
* summary: 添加牛只到批次
* tags: [批次管理]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 批次ID
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* animalIds:
* type: array
* items:
* type: integer
* description: 牛只ID数组
* responses:
* 200:
* description: 成功添加牛只到批次
* 404:
* description: 批次不存在
* 400:
* description: 部分牛只已在该批次中
*/
router.post('/:id/animals', requirePermission('cattle:batches:update'), cattleBatchController.addAnimalsToBatch);
/**
* @swagger
* /api/cattle-batches/{id}/animals/{animalId}:
* delete:
* summary: 从批次中移除牛只
* tags: [批次管理]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 批次ID
* - in: path
* name: animalId
* required: true
* schema:
* type: integer
* description: 牛只ID
* responses:
* 200:
* description: 成功从批次中移除牛只
* 404:
* description: 牛只不在该批次中
*/
router.delete('/:id/animals/:animalId', requirePermission('cattle:batches:update'), cattleBatchController.removeAnimalFromBatch);
module.exports = router;