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

391 lines
10 KiB
JavaScript

const express = require('express')
const router = express.Router()
const electronicFenceController = require('../controllers/electronicFenceController')
const { verifyToken } = require('../middleware/auth')
const { requirePermission } = require('../middleware/permission')
// 应用认证中间件
router.use(verifyToken)
/**
* @swagger
* tags:
* name: ElectronicFence
* description: 电子围栏管理
*/
/**
* @swagger
* /api/electronic-fence:
* get:
* summary: 获取围栏列表
* tags: [ElectronicFence]
* security:
* - bearerAuth: []
* parameters:
* - in: query
* name: page
* schema:
* type: integer
* default: 1
* description: 页码
* - in: query
* name: limit
* schema:
* type: integer
* default: 10
* description: 每页数量
* - in: query
* name: search
* schema:
* type: string
* description: 搜索关键词
* - in: query
* name: type
* schema:
* type: string
* enum: [collector, grazing, safety]
* description: 围栏类型
* - in: query
* name: status
* schema:
* type: string
* enum: [grazing, not_grazing]
* description: 放牧状态
* - in: query
* name: farm_id
* schema:
* type: integer
* description: 农场ID
* responses:
* 200:
* description: 获取成功
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* data:
* type: array
* items:
* type: object
* properties:
* id:
* type: integer
* name:
* type: string
* type:
* type: string
* coordinates:
* type: array
* items:
* type: object
* properties:
* lng:
* type: number
* lat:
* type: number
* grazingStatus:
* type: string
* insideCount:
* type: integer
* outsideCount:
* type: integer
* total:
* type: integer
* page:
* type: integer
* limit:
* type: integer
*/
router.get('/',
requirePermission('smart_fence:view'),
electronicFenceController.getFences
)
/**
* @swagger
* /api/electronic-fence/{id}:
* get:
* summary: 获取围栏详情
* tags: [ElectronicFence]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 围栏ID
* responses:
* 200:
* description: 获取成功
* 404:
* description: 围栏不存在
*/
router.get('/:id',
requirePermission('smart_fence:view'),
electronicFenceController.getFenceById
)
/**
* @swagger
* /api/electronic-fence:
* post:
* summary: 创建围栏
* tags: [ElectronicFence]
* security:
* - bearerAuth: []
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* required:
* - name
* - coordinates
* properties:
* name:
* type: string
* description: 围栏名称
* type:
* type: string
* enum: [collector, grazing, safety]
* default: collector
* description: 围栏类型
* description:
* type: string
* description: 围栏描述
* coordinates:
* type: array
* items:
* type: object
* properties:
* lng:
* type: number
* lat:
* type: number
* description: 围栏坐标点数组
* farm_id:
* type: integer
* description: 关联农场ID
* responses:
* 201:
* description: 创建成功
* 400:
* description: 参数错误
*/
router.post('/',
requirePermission('smart_fence:create'),
electronicFenceController.createFence
)
/**
* @swagger
* /api/electronic-fence/{id}:
* put:
* summary: 更新围栏
* tags: [ElectronicFence]
* 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
* type:
* type: string
* enum: [collector, grazing, safety]
* description:
* type: string
* coordinates:
* type: array
* items:
* type: object
* properties:
* lng:
* type: number
* lat:
* type: number
* grazing_status:
* type: string
* enum: [grazing, not_grazing]
* responses:
* 200:
* description: 更新成功
* 404:
* description: 围栏不存在
*/
router.put('/:id',
requirePermission('smart_fence:update'),
electronicFenceController.updateFence
)
/**
* @swagger
* /api/electronic-fence/{id}:
* delete:
* summary: 删除围栏
* tags: [ElectronicFence]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 围栏ID
* responses:
* 200:
* description: 删除成功
* 404:
* description: 围栏不存在
*/
router.delete('/:id',
requirePermission('smart_fence:delete'),
electronicFenceController.deleteFence
)
/**
* @swagger
* /api/electronic-fence/{id}/stats:
* put:
* summary: 更新围栏统计信息
* tags: [ElectronicFence]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 围栏ID
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* inside_count:
* type: integer
* description: 安全区域内动物数量
* outside_count:
* type: integer
* description: 安全区域外动物数量
* responses:
* 200:
* description: 更新成功
* 404:
* description: 围栏不存在
*/
router.put('/:id/stats',
requirePermission('smart_fence:update'),
electronicFenceController.updateFenceStats
)
/**
* @swagger
* /api/electronic-fence/{id}/check-point:
* get:
* summary: 检查点是否在围栏内
* tags: [ElectronicFence]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: 围栏ID
* - in: query
* name: lng
* required: true
* schema:
* type: number
* description: 经度
* - in: query
* name: lat
* required: true
* schema:
* type: number
* description: 纬度
* responses:
* 200:
* description: 检查完成
* 400:
* description: 参数错误
* 404:
* description: 围栏不存在
*/
router.get('/:id/check-point',
requirePermission('smart_fence:view'),
electronicFenceController.checkPointInFence
)
/**
* @swagger
* /api/electronic-fence/stats/overview:
* get:
* summary: 获取围栏统计概览
* tags: [ElectronicFence]
* security:
* - bearerAuth: []
* responses:
* 200:
* description: 获取成功
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* data:
* type: object
* properties:
* totalFences:
* type: integer
* totalInside:
* type: integer
* totalOutside:
* type: integer
* byType:
* type: array
* items:
* type: object
* properties:
* type:
* type: string
* count:
* type: integer
* total_inside:
* type: integer
* total_outside:
* type: integer
*/
router.get('/stats/overview',
requirePermission('smart_fence:view'),
electronicFenceController.getFenceStats
)
module.exports = router