391 lines
10 KiB
JavaScript
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
|