fix: 修正雨量存储
This commit is contained in:
parent
fe240df61c
commit
0067c2d15e
60
db/db.go
60
db/db.go
@ -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)
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user