fix: 修正雨量存储

This commit is contained in:
yarnom 2025-07-10 11:57:10 +08:00
parent fe240df61c
commit 0067c2d15e

View File

@ -3,10 +3,11 @@ package db
import (
"database/sql"
"fmt"
_ "gi
"log"
"rain_monitor/models"
"time"
/go-sql-driver/mysql"
"rain_monitor/models"
_ "github.com/go-sql-driver/mysql"
)
@ -84,6 +85,44 @@ func SaveWeatherData(data *models.WeatherData) (int64, error) {
}
func SaveRainGaugeData(data *models.RainGaugeData) (int64, error) {
// 检查是否在短时间内已经插入过类似数据
// 获取最近5分钟内的数据
fiveMinutesAgo := data.Timestamp.Add(-5 * time.Minute)
rows, err := db.Query(`
SELECT id, timestamp, total_rainfall
FROM rain_gauge_data
WHERE timestamp BETWEEN ? AND ?
ORDER BY timestamp DESC
if err != nil {
log.Printf("查询最近雨量计数据失败: %v", err)
// 即使查询失败,我们仍然尝试插入新数据
} else {
// 检查是否有相似数据
for rows.Next() {
var id int64
var ts time.Time
if err := rows.Scan(&id, &ts, &rainfall); err != nil {
log.Printf("扫描雨量计数据失败: %v", err)
continue
// 如果时间非常接近小于1分钟且雨量数据相同或非常接近则认为是重复数据
timeDiff := data.Timestamp.Sub(ts)
if timeDiff < time.Minute && rainfallDiff < 0.1 {
log.Printf("检测到重复的雨量计数据跳过插入。ID=%d, 时间=%v", id, ts)
return id, nil // 返回已存在的记录ID
}
}
}
result, err := db.Exec(models.InsertRainGaugeDataSQL,
data.Timestamp, data.DailyRainfall, data.InstantRainfall, data.YesterdayRainfall,
data.TotalRainfall, data.HourlyRainfall, data.LastHourRainfall, data.Max24hRainfall,
@ -96,6 +135,7 @@ func SaveRainGaugeData(data *models.RainGaugeData) (int64, error) {
if err != nil {
return 0, fmt.Errorf("获取插入ID失败: %v", err)
}
log.Printf("雨量计数据已保存ID=%d, 时间=%v", id, data.Timestamp)
return id, nil
}
@ -215,8 +255,20 @@ func GetAggregatedData(start, end time.Time) ([]models.AggregatedData, error) {
if err != nil {
log.Printf("扫描行数据失败: %v", err)
return nil, fmt.Errorf("扫描聚合数据失败: %v", err)
}
data.FormattedTime = timestampStr
// 设置格式化时间字符串
// 尝试解析时间字符串为time.Time类型
timestamp, err := time.Parse("2006-01-02 15:04:05", timestampStr)
if err != nil {
log.Printf("解析时间字符串失败: %v, 原始字符串: %s", err, timestampStr)
// 即使解析失败也继续处理前端会使用FormattedTime
} else {
data.Timestamp = timestamp
result = append(result, data)
}