fix: 调整最新数据的显示

This commit is contained in:
fengyarnom 2025-05-30 17:56:29 +08:00
parent bc20cdae61
commit af3a23f300
2 changed files with 117 additions and 18 deletions

View File

@ -17,6 +17,7 @@ func StartHTTPServer(address string) error {
http.HandleFunc("/", handleIndex)
http.HandleFunc("/api/data", handleGetData)
http.HandleFunc("/api/latest", handleGetLatest)
http.HandleFunc("/api/sensors", handleGetSensors)
http.HandleFunc("/api/clients", handleGetClients)
http.HandleFunc("/api/trigger-query", handleTriggerQuery)
@ -112,11 +113,18 @@ func handleGetData(w http.ResponseWriter, r *http.Request) {
}
}
// 特殊处理获取最新数据的请求
if limit == 1 && sensorIDStr == "" {
log.Printf("检测到获取最新数据请求 (limit=1)")
}
var data []SensorData
if sensorIDStr == "all" || sensorIDStr == "" {
data, err = GetAllSensorData(limit, startDate, endDate)
log.Printf("查询所有传感器数据limit=%d, 结果数量=%d", limit, len(data))
} else {
data, err = GetSensorData(sensorID, limit, startDate, endDate)
log.Printf("查询传感器%d数据limit=%d, 结果数量=%d", sensorID, limit, len(data))
}
if err != nil {
@ -125,6 +133,13 @@ func handleGetData(w http.ResponseWriter, r *http.Request) {
return
}
// 输出最新数据的详细信息当limit=1时
if limit == 1 && len(data) > 0 {
latest := data[0]
log.Printf("返回最新数据: ID=%d, SensorID=%d, X=%.3f, Y=%.3f, Z=%.3f, Temperature=%.1f, Timestamp=%s",
latest.ID, latest.SensorID, latest.X, latest.Y, latest.Z, latest.Temperature, latest.Timestamp.Format("2006-01-02 15:04:05"))
}
if noLimit {
log.Printf("成功获取到所有数据记录(%d条", len(data))
} else {
@ -192,3 +207,40 @@ func handleTriggerQuery(w http.ResponseWriter, r *http.Request) {
http.Error(w, "编码JSON失败"+err.Error(), http.StatusInternalServerError)
}
}
// 处理获取最新传感器数据的API
func handleGetLatest(w http.ResponseWriter, r *http.Request) {
log.Printf("接收到获取最新数据请求")
w.Header().Set("Content-Type", "application/json")
// 获取最新的一条数据
data, err := GetAllSensorData(1, time.Time{}, time.Time{})
if err != nil {
log.Printf("错误: 获取最新数据失败: %v", err)
http.Error(w, "获取最新数据失败:"+err.Error(), http.StatusInternalServerError)
return
}
log.Printf("查询最新数据结果数量: %d", len(data))
if len(data) == 0 {
log.Printf("数据库中没有任何数据")
// 返回空数组而不是错误
if err := json.NewEncoder(w).Encode([]SensorData{}); err != nil {
log.Printf("错误: 编码空数据JSON失败: %v", err)
http.Error(w, "编码JSON失败"+err.Error(), http.StatusInternalServerError)
}
return
}
// 输出最新数据的详细信息
latest := data[0]
log.Printf("返回最新数据: ID=%d, SensorID=%d, X=%.3f, Y=%.3f, Z=%.3f, Temperature=%.1f, Timestamp=%s",
latest.ID, latest.SensorID, latest.X, latest.Y, latest.Z, latest.Temperature, latest.Timestamp.Format("2006-01-02 15:04:05"))
if err := json.NewEncoder(w).Encode(data); err != nil {
log.Printf("错误: 编码最新数据JSON失败: %v", err)
http.Error(w, "编码JSON失败"+err.Error(), http.StatusInternalServerError)
}
}

View File

@ -760,21 +760,35 @@
// 获取最新传感器数据
function fetchLatestData() {
fetch('/api/data?limit=1')
.then(response => response.json())
console.log('正在获取最新传感器数据...');
fetch('/api/latest')
.then(response => {
console.log('获取最新数据响应状态:', response.status);
if (!response.ok) {
throw new Error(`HTTP错误: ${response.status}`);
}
return response.json();
})
.then(data => {
console.log('获取到的最新数据:', data);
if (data && data.length > 0) {
const latest = data[0];
updateLatestDataDisplay(latest);
console.log('最新数据显示更新完成');
} else {
console.log('数据库中没有数据');
updateLatestDataDisplayEmpty();
}
})
.catch(error => {
console.error('获取最新数据失败:', error);
updateLatestDataDisplayError(error.message);
});
}
// 更新最新数据显示
function updateLatestDataDisplay(data) {
try {
const date = new Date(data.timestamp);
date.setHours(date.getHours() - 8);
@ -792,6 +806,39 @@
document.getElementById('latest-y').textContent = data.y.toFixed(3);
document.getElementById('latest-z').textContent = data.z.toFixed(3);
document.getElementById('latest-temperature').textContent = data.temperature.toFixed(1);
console.log('最新数据显示更新成功:', {
sensor_id: data.sensor_id,
time: formattedDate,
x: data.x,
y: data.y,
z: data.z,
temperature: data.temperature
});
} catch (error) {
console.error('更新最新数据显示时发生错误:', error);
updateLatestDataDisplayError('数据格式错误');
}
}
// 显示空数据状态
function updateLatestDataDisplayEmpty() {
document.getElementById('latest-time').textContent = '(暂无数据)';
document.getElementById('latest-sensor-id').textContent = '--';
document.getElementById('latest-x').textContent = '--';
document.getElementById('latest-y').textContent = '--';
document.getElementById('latest-z').textContent = '--';
document.getElementById('latest-temperature').textContent = '--';
}
// 显示错误状态
function updateLatestDataDisplayError(errorMsg) {
document.getElementById('latest-time').textContent = `(错误: ${errorMsg})`;
document.getElementById('latest-sensor-id').textContent = '--';
document.getElementById('latest-x').textContent = '--';
document.getElementById('latest-y').textContent = '--';
document.getElementById('latest-z').textContent = '--';
document.getElementById('latest-temperature').textContent = '--';
}
// 查询最新数据(触发设备查询)