修改bug。新增牛只,超链接

This commit is contained in:
xuqiuyun
2025-09-15 18:18:41 +08:00
parent be32363412
commit 89bc6e8ce2
18 changed files with 2183 additions and 76 deletions

View File

@@ -0,0 +1,168 @@
/**
* 牛只类型控制器
* 处理cattle_type表的CRUD操作
*/
const { sequelize } = require('../config/database-simple')
class CattleTypeController {
/**
* 获取所有牛只类型
*/
async getAllTypes(req, res) {
try {
const [types] = await sequelize.query('SELECT * FROM cattle_type ORDER BY id ASC')
res.json({
success: true,
data: types,
message: '获取牛只类型列表成功'
})
} catch (error) {
console.error('获取牛只类型列表失败:', error)
res.status(500).json({
success: false,
message: '获取牛只类型列表失败',
error: error.message
})
}
}
/**
* 根据ID获取牛只类型
*/
async getTypeById(req, res) {
try {
const { id } = req.params
const [types] = await sequelize.query('SELECT * FROM cattle_type WHERE id = ?', [id])
if (types.length === 0) {
return res.status(404).json({
success: false,
message: '牛只类型不存在'
})
}
res.json({
success: true,
data: types[0],
message: '获取牛只类型成功'
})
} catch (error) {
console.error('获取牛只类型失败:', error)
res.status(500).json({
success: false,
message: '获取牛只类型失败',
error: error.message
})
}
}
/**
* 创建牛只类型
*/
async createType(req, res) {
try {
const { name, description } = req.body
if (!name) {
return res.status(400).json({
success: false,
message: '类型名称不能为空'
})
}
const [result] = await sequelize.query(
'INSERT INTO cattle_type (name, description) VALUES (?, ?)',
[name, description || null]
)
res.status(201).json({
success: true,
data: { id: result.insertId, name, description },
message: '创建牛只类型成功'
})
} catch (error) {
console.error('创建牛只类型失败:', error)
res.status(500).json({
success: false,
message: '创建牛只类型失败',
error: error.message
})
}
}
/**
* 更新牛只类型
*/
async updateType(req, res) {
try {
const { id } = req.params
const { name, description } = req.body
if (!name) {
return res.status(400).json({
success: false,
message: '类型名称不能为空'
})
}
const [result] = await sequelize.query(
'UPDATE cattle_type SET name = ?, description = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?',
[name, description || null, id]
)
if (result.affectedRows === 0) {
return res.status(404).json({
success: false,
message: '牛只类型不存在'
})
}
res.json({
success: true,
data: { id: parseInt(id), name, description },
message: '更新牛只类型成功'
})
} catch (error) {
console.error('更新牛只类型失败:', error)
res.status(500).json({
success: false,
message: '更新牛只类型失败',
error: error.message
})
}
}
/**
* 删除牛只类型
*/
async deleteType(req, res) {
try {
const { id } = req.params
const [result] = await sequelize.query('DELETE FROM cattle_type WHERE id = ?', [id])
if (result.affectedRows === 0) {
return res.status(404).json({
success: false,
message: '牛只类型不存在'
})
}
res.json({
success: true,
message: '删除牛只类型成功'
})
} catch (error) {
console.error('删除牛只类型失败:', error)
res.status(500).json({
success: false,
message: '删除牛只类型失败',
error: error.message
})
}
}
}
module.exports = new CattleTypeController()

View File

@@ -0,0 +1,168 @@
/**
* 牛只用途控制器
* 处理cattle_user表的CRUD操作
*/
const { sequelize } = require('../config/database-simple')
class CattleUserController {
/**
* 获取所有牛只用途
*/
async getAllUsers(req, res) {
try {
const [users] = await sequelize.query('SELECT * FROM cattle_user ORDER BY id ASC')
res.json({
success: true,
data: users,
message: '获取牛只用途列表成功'
})
} catch (error) {
console.error('获取牛只用途列表失败:', error)
res.status(500).json({
success: false,
message: '获取牛只用途列表失败',
error: error.message
})
}
}
/**
* 根据ID获取牛只用途
*/
async getUserById(req, res) {
try {
const { id } = req.params
const [users] = await sequelize.query('SELECT * FROM cattle_user WHERE id = ?', [id])
if (users.length === 0) {
return res.status(404).json({
success: false,
message: '牛只用途不存在'
})
}
res.json({
success: true,
data: users[0],
message: '获取牛只用途成功'
})
} catch (error) {
console.error('获取牛只用途失败:', error)
res.status(500).json({
success: false,
message: '获取牛只用途失败',
error: error.message
})
}
}
/**
* 创建牛只用途
*/
async createUser(req, res) {
try {
const { name, description } = req.body
if (!name) {
return res.status(400).json({
success: false,
message: '用途名称不能为空'
})
}
const [result] = await sequelize.query(
'INSERT INTO cattle_user (name, description) VALUES (?, ?)',
[name, description || null]
)
res.status(201).json({
success: true,
data: { id: result.insertId, name, description },
message: '创建牛只用途成功'
})
} catch (error) {
console.error('创建牛只用途失败:', error)
res.status(500).json({
success: false,
message: '创建牛只用途失败',
error: error.message
})
}
}
/**
* 更新牛只用途
*/
async updateUser(req, res) {
try {
const { id } = req.params
const { name, description } = req.body
if (!name) {
return res.status(400).json({
success: false,
message: '用途名称不能为空'
})
}
const [result] = await sequelize.query(
'UPDATE cattle_user SET name = ?, description = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?',
[name, description || null, id]
)
if (result.affectedRows === 0) {
return res.status(404).json({
success: false,
message: '牛只用途不存在'
})
}
res.json({
success: true,
data: { id: parseInt(id), name, description },
message: '更新牛只用途成功'
})
} catch (error) {
console.error('更新牛只用途失败:', error)
res.status(500).json({
success: false,
message: '更新牛只用途失败',
error: error.message
})
}
}
/**
* 删除牛只用途
*/
async deleteUser(req, res) {
try {
const { id } = req.params
const [result] = await sequelize.query('DELETE FROM cattle_user WHERE id = ?', [id])
if (result.affectedRows === 0) {
return res.status(404).json({
success: false,
message: '牛只用途不存在'
})
}
res.json({
success: true,
message: '删除牛只用途成功'
})
} catch (error) {
console.error('删除牛只用途失败:', error)
res.status(500).json({
success: false,
message: '删除牛只用途失败',
error: error.message
})
}
}
}
module.exports = new CattleUserController()

View File

@@ -122,7 +122,8 @@ class ElectronicFenceController {
type = 'collector',
description = '',
coordinates,
farm_id = null
farm_id = null,
is_active = true
} = req.body
// 验证必填字段
@@ -152,6 +153,7 @@ class ElectronicFenceController {
center_lat: parseFloat(center.lat.toFixed(7)), // 限制精度为7位小数
area,
farm_id,
is_active,
created_by: req.user?.id || 1 // 默认使用管理员ID
})

View File

@@ -157,7 +157,8 @@ class ElectronicFencePointController {
// 批量创建坐标点
const createdPoints = await ElectronicFencePoint.createPoints(fence_id, points, {
createdBy: req.user?.id
createdBy: req.user?.id,
created_by: req.user?.id
});
res.status(201).json({

View File

@@ -0,0 +1,197 @@
/**
* 智能耳标客户端控制器
* 处理iot_jbq_client表的CRUD操作
*/
const { sequelize } = require('../config/database-simple')
class IotJbqClientController {
/**
* 获取所有智能耳标设备
*/
async getAllClients(req, res) {
try {
const { cid, page = 1, pageSize = 10 } = req.query
let whereClause = ''
let params = []
if (cid) {
whereClause = `WHERE cid = '${cid}'`
}
const offset = (page - 1) * pageSize
// 获取总数
const [countResult] = await sequelize.query(
`SELECT COUNT(*) as total FROM iot_jbq_client ${whereClause}`
)
// 获取数据
const [clients] = await sequelize.query(
`SELECT * FROM iot_jbq_client ${whereClause} ORDER BY id DESC LIMIT ${parseInt(pageSize)} OFFSET ${offset}`
)
res.json({
success: true,
data: clients,
pagination: {
current: parseInt(page),
pageSize: parseInt(pageSize),
total: countResult[0].total
},
message: '获取智能耳标设备列表成功'
})
} catch (error) {
console.error('获取智能耳标设备列表失败:', error)
res.status(500).json({
success: false,
message: '获取智能耳标设备列表失败',
error: error.message
})
}
}
/**
* 根据CID获取智能耳标设备
*/
async getClientByCid(req, res) {
try {
const { cid } = req.params
const [clients] = await sequelize.query(`SELECT * FROM iot_jbq_client WHERE cid = '${cid}'`)
if (clients.length === 0) {
return res.status(404).json({
success: false,
message: '智能耳标设备不存在'
})
}
res.json({
success: true,
data: clients[0],
message: '获取智能耳标设备成功'
})
} catch (error) {
console.error('获取智能耳标设备失败:', error)
res.status(500).json({
success: false,
message: '获取智能耳标设备失败',
error: error.message
})
}
}
/**
* 根据ID获取智能耳标设备
*/
async getClientById(req, res) {
try {
const { id } = req.params
const [clients] = await sequelize.query(`SELECT * FROM iot_jbq_client WHERE id = ${id}`)
if (clients.length === 0) {
return res.status(404).json({
success: false,
message: '智能耳标设备不存在'
})
}
res.json({
success: true,
data: clients[0],
message: '获取智能耳标设备成功'
})
} catch (error) {
console.error('获取智能耳标设备失败:', error)
res.status(500).json({
success: false,
message: '获取智能耳标设备失败',
error: error.message
})
}
}
/**
* 更新智能耳标设备
*/
async updateClient(req, res) {
try {
const { id } = req.params
const updateData = req.body
// 构建更新字段
const updateFields = []
Object.keys(updateData).forEach(key => {
if (updateData[key] !== undefined) {
const value = typeof updateData[key] === 'string' ? `'${updateData[key]}'` : updateData[key]
updateFields.push(`${key} = ${value}`)
}
})
if (updateFields.length === 0) {
return res.status(400).json({
success: false,
message: '没有要更新的字段'
})
}
const [result] = await sequelize.query(
`UPDATE iot_jbq_client SET ${updateFields.join(', ')} WHERE id = ${id}`
)
if (result.affectedRows === 0) {
return res.status(404).json({
success: false,
message: '智能耳标设备不存在'
})
}
res.json({
success: true,
data: { id: parseInt(id), ...updateData },
message: '更新智能耳标设备成功'
})
} catch (error) {
console.error('更新智能耳标设备失败:', error)
res.status(500).json({
success: false,
message: '更新智能耳标设备失败',
error: error.message
})
}
}
/**
* 删除智能耳标设备
*/
async deleteClient(req, res) {
try {
const { id } = req.params
const [result] = await sequelize.query('DELETE FROM iot_jbq_client WHERE id = ?', [id])
if (result.affectedRows === 0) {
return res.status(404).json({
success: false,
message: '智能耳标设备不存在'
})
}
res.json({
success: true,
message: '删除智能耳标设备成功'
})
} catch (error) {
console.error('删除智能耳标设备失败:', error)
res.status(500).json({
success: false,
message: '删除智能耳标设备失败',
error: error.message
})
}
}
}
module.exports = new IotJbqClientController()