修改管理后台
This commit is contained in:
390
backend/routes/electronic-fence.js
Normal file
390
backend/routes/electronic-fence.js
Normal file
@@ -0,0 +1,390 @@
|
||||
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
|
||||
Reference in New Issue
Block a user