2025-09-12 20:08:42 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 简化的养殖场控制器
|
|
|
|
|
|
* @file farmController-simple.js
|
|
|
|
|
|
* @description 处理养殖场相关的请求,不包含关联查询
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
const { Farm } = require('../models');
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取所有养殖场
|
|
|
|
|
|
* @param {Object} req - 请求对象
|
|
|
|
|
|
* @param {Object} res - 响应对象
|
|
|
|
|
|
*/
|
|
|
|
|
|
exports.getAllFarms = async (req, res) => {
|
|
|
|
|
|
try {
|
|
|
|
|
|
console.log('🔄 开始获取养殖场列表...');
|
|
|
|
|
|
|
|
|
|
|
|
const farms = await Farm.findAll({
|
|
|
|
|
|
order: [['created_at', 'DESC']]
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`✅ 成功获取 ${farms.length} 个养殖场`);
|
|
|
|
|
|
|
|
|
|
|
|
res.status(200).json({
|
|
|
|
|
|
success: true,
|
|
|
|
|
|
data: farms
|
|
|
|
|
|
});
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.error('❌ 获取养殖场列表失败:', error);
|
|
|
|
|
|
res.status(500).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '获取养殖场列表失败',
|
|
|
|
|
|
error: error.message
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 根据养殖场名称搜索养殖场
|
|
|
|
|
|
* @param {Object} req - 请求对象
|
|
|
|
|
|
* @param {Object} res - 响应对象
|
|
|
|
|
|
*/
|
|
|
|
|
|
exports.searchFarmsByName = async (req, res) => {
|
|
|
|
|
|
const searchStartTime = Date.now();
|
|
|
|
|
|
const requestId = Math.random().toString(36).substr(2, 9);
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
const { name } = req.query;
|
|
|
|
|
|
const userAgent = req.get('User-Agent') || 'Unknown';
|
|
|
|
|
|
const clientIP = req.ip || req.connection.remoteAddress || 'Unknown';
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`🔍 [后端搜索监听] 搜索请求开始:`, {
|
|
|
|
|
|
requestId: requestId,
|
|
|
|
|
|
keyword: name,
|
|
|
|
|
|
timestamp: new Date().toISOString(),
|
|
|
|
|
|
clientIP: clientIP,
|
|
|
|
|
|
userAgent: userAgent,
|
|
|
|
|
|
queryParams: req.query,
|
|
|
|
|
|
headers: {
|
|
|
|
|
|
'content-type': req.get('Content-Type'),
|
|
|
|
|
|
'accept': req.get('Accept'),
|
|
|
|
|
|
'referer': req.get('Referer')
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
if (!name || name.trim() === '') {
|
|
|
|
|
|
console.log(`❌ [后端搜索监听] 搜索关键词为空:`, {
|
|
|
|
|
|
requestId: requestId,
|
|
|
|
|
|
keyword: name
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
return res.status(400).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '请提供搜索关键词'
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`🔄 [后端搜索监听] 开始数据库查询:`, {
|
|
|
|
|
|
requestId: requestId,
|
|
|
|
|
|
searchKeyword: name,
|
|
|
|
|
|
searchPattern: `%${name}%`
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
const queryStartTime = Date.now();
|
|
|
|
|
|
|
|
|
|
|
|
const farms = await Farm.findAll({
|
|
|
|
|
|
where: {
|
|
|
|
|
|
name: {
|
|
|
|
|
|
[require('sequelize').Op.like]: `%${name}%`
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
order: [['created_at', 'DESC']]
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
const queryTime = Date.now() - queryStartTime;
|
|
|
|
|
|
const totalTime = Date.now() - searchStartTime;
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`📊 [后端搜索监听] 数据库查询完成:`, {
|
|
|
|
|
|
requestId: requestId,
|
|
|
|
|
|
queryTime: queryTime + 'ms',
|
|
|
|
|
|
totalTime: totalTime + 'ms',
|
|
|
|
|
|
resultCount: farms.length,
|
|
|
|
|
|
searchKeyword: name
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// 记录搜索结果详情
|
|
|
|
|
|
if (farms.length > 0) {
|
|
|
|
|
|
console.log(`📋 [后端搜索监听] 搜索结果详情:`, {
|
|
|
|
|
|
requestId: requestId,
|
|
|
|
|
|
results: farms.map(farm => ({
|
|
|
|
|
|
id: farm.id,
|
|
|
|
|
|
name: farm.name,
|
|
|
|
|
|
type: farm.type,
|
|
|
|
|
|
status: farm.status,
|
|
|
|
|
|
address: farm.address
|
|
|
|
|
|
}))
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`✅ [后端搜索监听] 搜索成功:`, {
|
|
|
|
|
|
requestId: requestId,
|
|
|
|
|
|
keyword: name,
|
|
|
|
|
|
resultCount: farms.length,
|
|
|
|
|
|
responseTime: totalTime + 'ms'
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
res.status(200).json({
|
|
|
|
|
|
success: true,
|
|
|
|
|
|
data: farms,
|
|
|
|
|
|
meta: {
|
|
|
|
|
|
requestId: requestId,
|
|
|
|
|
|
searchKeyword: name,
|
|
|
|
|
|
resultCount: farms.length,
|
|
|
|
|
|
queryTime: queryTime,
|
|
|
|
|
|
totalTime: totalTime,
|
|
|
|
|
|
timestamp: new Date().toISOString()
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
const errorTime = Date.now() - searchStartTime;
|
|
|
|
|
|
|
|
|
|
|
|
console.error(`❌ [后端搜索监听] 搜索失败:`, {
|
|
|
|
|
|
requestId: requestId,
|
|
|
|
|
|
error: error.message,
|
|
|
|
|
|
stack: error.stack,
|
|
|
|
|
|
errorTime: errorTime + 'ms',
|
|
|
|
|
|
keyword: req.query.name
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
res.status(500).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '搜索养殖场失败',
|
|
|
|
|
|
error: error.message,
|
|
|
|
|
|
meta: {
|
|
|
|
|
|
requestId: requestId,
|
|
|
|
|
|
errorTime: errorTime,
|
|
|
|
|
|
timestamp: new Date().toISOString()
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 根据ID获取养殖场详情
|
|
|
|
|
|
* @param {Object} req - 请求对象
|
|
|
|
|
|
* @param {Object} res - 响应对象
|
|
|
|
|
|
*/
|
|
|
|
|
|
exports.getFarmById = async (req, res) => {
|
|
|
|
|
|
try {
|
|
|
|
|
|
const { id } = req.params;
|
|
|
|
|
|
|
|
|
|
|
|
if (!id || isNaN(parseInt(id))) {
|
|
|
|
|
|
return res.status(400).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '请提供有效的养殖场ID'
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`🔄 开始获取养殖场详情: ID=${id}`);
|
|
|
|
|
|
|
|
|
|
|
|
const farm = await Farm.findByPk(id);
|
|
|
|
|
|
|
|
|
|
|
|
if (!farm) {
|
|
|
|
|
|
return res.status(404).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '养殖场不存在'
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`✅ 成功获取养殖场详情: ${farm.name}`);
|
|
|
|
|
|
|
|
|
|
|
|
res.status(200).json({
|
|
|
|
|
|
success: true,
|
|
|
|
|
|
data: farm
|
|
|
|
|
|
});
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.error('❌ 获取养殖场详情失败:', error);
|
|
|
|
|
|
res.status(500).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '获取养殖场详情失败',
|
|
|
|
|
|
error: error.message
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 创建新养殖场
|
|
|
|
|
|
* @param {Object} req - 请求对象
|
|
|
|
|
|
* @param {Object} res - 响应对象
|
|
|
|
|
|
*/
|
|
|
|
|
|
exports.createFarm = async (req, res) => {
|
|
|
|
|
|
try {
|
|
|
|
|
|
const { name, type, location, address, contact, phone, status } = req.body;
|
|
|
|
|
|
|
|
|
|
|
|
// 验证必填字段
|
|
|
|
|
|
if (!name || !type) {
|
|
|
|
|
|
return res.status(400).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '养殖场名称和类型为必填项'
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`🔄 开始创建养殖场: ${name}`);
|
|
|
|
|
|
|
|
|
|
|
|
const farm = await Farm.create({
|
|
|
|
|
|
name,
|
|
|
|
|
|
type,
|
|
|
|
|
|
location: location || {},
|
|
|
|
|
|
address,
|
|
|
|
|
|
contact,
|
|
|
|
|
|
phone,
|
|
|
|
|
|
status: status || 'active'
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`✅ 成功创建养殖场: ID=${farm.id}, 名称=${farm.name}`);
|
|
|
|
|
|
|
|
|
|
|
|
res.status(201).json({
|
|
|
|
|
|
success: true,
|
|
|
|
|
|
data: farm,
|
|
|
|
|
|
message: '养殖场创建成功'
|
|
|
|
|
|
});
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.error('❌ 创建养殖场失败:', error);
|
|
|
|
|
|
res.status(500).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '创建养殖场失败',
|
|
|
|
|
|
error: error.message
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 更新养殖场信息
|
|
|
|
|
|
* @param {Object} req - 请求对象
|
|
|
|
|
|
* @param {Object} res - 响应对象
|
|
|
|
|
|
*/
|
|
|
|
|
|
exports.updateFarm = async (req, res) => {
|
|
|
|
|
|
try {
|
|
|
|
|
|
const { id } = req.params;
|
|
|
|
|
|
const { name, type, location, address, contact, phone, status } = req.body;
|
|
|
|
|
|
|
|
|
|
|
|
if (!id || isNaN(parseInt(id))) {
|
|
|
|
|
|
return res.status(400).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '请提供有效的养殖场ID'
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`🔄 开始更新养殖场: ID=${id}`);
|
|
|
|
|
|
|
|
|
|
|
|
const farm = await Farm.findByPk(id);
|
|
|
|
|
|
|
|
|
|
|
|
if (!farm) {
|
|
|
|
|
|
return res.status(404).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '养殖场不存在'
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 更新字段
|
|
|
|
|
|
if (name) farm.name = name;
|
|
|
|
|
|
if (type) farm.type = type;
|
|
|
|
|
|
if (location) farm.location = location;
|
|
|
|
|
|
if (address !== undefined) farm.address = address;
|
|
|
|
|
|
if (contact !== undefined) farm.contact = contact;
|
|
|
|
|
|
if (phone !== undefined) farm.phone = phone;
|
|
|
|
|
|
if (status) farm.status = status;
|
|
|
|
|
|
|
|
|
|
|
|
await farm.save();
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`✅ 成功更新养殖场: ID=${farm.id}, 名称=${farm.name}`);
|
|
|
|
|
|
|
|
|
|
|
|
res.status(200).json({
|
|
|
|
|
|
success: true,
|
|
|
|
|
|
data: farm,
|
|
|
|
|
|
message: '养殖场更新成功'
|
|
|
|
|
|
});
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.error('❌ 更新养殖场失败:', error);
|
|
|
|
|
|
res.status(500).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '更新养殖场失败',
|
|
|
|
|
|
error: error.message
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 删除养殖场
|
|
|
|
|
|
* @param {Object} req - 请求对象
|
|
|
|
|
|
* @param {Object} res - 响应对象
|
|
|
|
|
|
*/
|
|
|
|
|
|
exports.deleteFarm = async (req, res) => {
|
|
|
|
|
|
try {
|
|
|
|
|
|
const { id } = req.params;
|
|
|
|
|
|
|
|
|
|
|
|
if (!id || isNaN(parseInt(id))) {
|
|
|
|
|
|
return res.status(400).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '请提供有效的养殖场ID'
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`🔄 开始删除养殖场: ID=${id}`);
|
|
|
|
|
|
|
|
|
|
|
|
const farm = await Farm.findByPk(id);
|
|
|
|
|
|
|
|
|
|
|
|
if (!farm) {
|
|
|
|
|
|
return res.status(404).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '养殖场不存在'
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
await farm.destroy();
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`✅ 成功删除养殖场: ID=${id}, 名称=${farm.name}`);
|
|
|
|
|
|
|
|
|
|
|
|
res.status(200).json({
|
|
|
|
|
|
success: true,
|
|
|
|
|
|
message: '养殖场删除成功'
|
|
|
|
|
|
});
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.error('❌ 删除养殖场失败:', error);
|
|
|
|
|
|
res.status(500).json({
|
|
|
|
|
|
success: false,
|
|
|
|
|
|
message: '删除养殖场失败',
|
|
|
|
|
|
error: error.message
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|