Browse Source

补漏逻辑修改为按时间逻辑倒叙补漏

huangyan 1 week ago
parent
commit
34dbcc98f2
10 changed files with 179 additions and 89 deletions
  1. BIN
      Cold_DataFiltering
  2. 2 3
      Z_Build.bat
  3. 5 5
      config.yaml
  4. 1 0
      log.txt
  5. 31 1
      logger/logger.go
  6. 3 8
      main.go
  7. 9 8
      service/datacaps.go
  8. 3 3
      service/eqiupmentMonitoringV2.go
  9. 7 7
      service/forewarn.go
  10. 118 54
      service/test.go

BIN
Cold_DataFiltering


+ 2 - 3
Z_Build.bat

@@ -1,9 +1,8 @@
 cd %~dp0
 set GOARCH=amd64
 set GOOS=linux
-set GOPATH=C:\Users\SIKED\go
+set GOPATH=E:\gopath
 set GO111MODULE=auto
-set GOROOT=C:\Program Files\Go
 
 
-go build -o Cold_DataFiltering main.go
+go build -o ydMonitoring main.go

+ 5 - 5
config.yaml

@@ -1,7 +1,7 @@
 #配置mysql
 datasource:
-  host: 127.0.0.1
-  port: 40306
+  host: 192.168.0.88
+  port: 3306
   dbname: cold
   username: cold
   password: yjwyEckZS7rE5H!
@@ -34,10 +34,10 @@ subMail:
 server:
   port: ":8080"
 redis:
-  host: "116.204.6.184:6379"
-  password: "redis_TdnR8s"
+  host: "192.168.0.5:6379"
+  password: "redis_wsxaMH"
 phone:
-  - "15186767321" #黄渰
+#  - "15186767321" #黄渰
 #  - "18777951277" #李科慧
 #  - "14785419131" #冯志刚
 #  - "18927494331" #冯靖沣

+ 1 - 0
log.txt

@@ -0,0 +1 @@
+INFO: 2024/10/12 11:01:54 main.go:17: dssasad

+ 31 - 1
logger/logger.go

@@ -3,13 +3,43 @@ package logger
 import (
 	"log"
 	"os"
+	"time"
+)
+
+const (
+	LevelError = iota
+	LevelWarning
+	LevelInfo
+)
+
+var (
+	ErrorLogger   *log.Logger
+	WarningLogger *log.Logger
+	InfoLogger    *log.Logger
 )
 
 func init() {
-	file, err := os.OpenFile("./log.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
+	format := time.Now().Format("2006-01-02")
+	ERROR, err := os.OpenFile("./log/"+format+"_error.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
+	if err != nil {
+		panic(any("open log file error"))
+	}
+	WARNING, err := os.OpenFile("./log/"+format+"_warning.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
 	if err != nil {
 		panic(any("open log file error"))
 	}
+	INFO, err := os.OpenFile("./log/"+format+"_info.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
+	if err != nil {
+		panic(any("open log file error"))
+	}
+	file, err := os.OpenFile("./log/log.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
+	if err != nil {
+		panic(any("open log file error"))
+	}
+
+	ErrorLogger = log.New(ERROR, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)
+	WarningLogger = log.New(WARNING, "WARNING: ", log.Ldate|log.Ltime|log.Lshortfile)
+	InfoLogger = log.New(INFO, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
 	log.SetFlags(log.Ldate)
 	//log.SetPrefix("earlyWarningSystem")
 	log.SetOutput(file)

+ 3 - 8
main.go

@@ -1,17 +1,12 @@
 package main
 
 import (
-	"fmt"
-	"time"
 	_ "ydMonitoring/logger"
 	"ydMonitoring/service"
 )
 
 func main() {
-	startTime := time.Now()
-	//service.EquipmentMonitoring2()
-	service.TestService()
-	//fmt.Println(25.3 + rand.Float64()*0.4 - 0.2)
-	elapsedTime := time.Since(startTime)
-	fmt.Printf("程序执行耗时: %v\n", elapsedTime)
+	service.EquipmentMonitoring2()
+	//service.TestService()
+
 }

+ 9 - 8
service/datacaps.go

@@ -10,6 +10,7 @@ import (
 	"time"
 	"ydMonitoring/config"
 	"ydMonitoring/databases"
+	"ydMonitoring/logger"
 	"ydMonitoring/util"
 )
 
@@ -60,7 +61,7 @@ func DataCaps(devices []Device) {
 		// 获取最后一行
 		lastRow, err := getLastRow(file, "sheet1")
 		if err != nil {
-			log.Println("获取Excel文件失败:", err)
+			logger.ErrorLogger.Println("获取Excel文件失败:", err)
 			return
 		}
 		row = lastRow + 1
@@ -91,7 +92,7 @@ func DataCaps(devices []Device) {
 		var id string
 		b, _ := Ignore(sensor.Tsn)
 		if b {
-			log.Println("该设备已忽略:", sensor.Tsn)
+			logger.ErrorLogger.Println("该设备已忽略:", sensor.Tsn)
 		} else {
 			sql := fmt.Sprintf("SELECT t_time FROM z_device_data_%s WHERE t_id = '%s' ORDER BY t_time DESC LIMIT 3", sensor.Tsn, sensor.TId)
 			sqls := fmt.Sprintf("SELECT t_save_t FROM device_parameter WHERE t_sn='%s' ORDER BY update_time DESC LIMIT 1", sensor.Tsn)
@@ -100,7 +101,7 @@ func DataCaps(devices []Device) {
 			databases.Db.QueryRow(company).Scan(&companyname, &id)
 			rows, err := databases.Db.Query(sql)
 			if err != nil {
-				log.Println("查询数据失败:", err)
+				logger.ErrorLogger.Println("查询数据失败:", err)
 				continue
 			}
 			defer rows.Close()
@@ -116,12 +117,12 @@ func DataCaps(devices []Device) {
 				for i := 0; i < len(times)-1; i++ {
 					t1, err := time.Parse(timeFormat, times[i])
 					if err != nil {
-						log.Println("解析时间失败:", err)
+						logger.ErrorLogger.Println("解析时间失败:", err)
 						continue
 					}
 					t2, err := time.Parse(timeFormat, times[i+1])
 					if err != nil {
-						log.Println("解析时间失败:", err)
+						logger.ErrorLogger.Println("解析时间失败:", err)
 						continue
 					}
 					timeDiff := t1.Sub(t2).Seconds()
@@ -140,7 +141,7 @@ func DataCaps(devices []Device) {
 							remainingTime := midnight.Sub(nowday)
 							result, err := RedisClient.SetNX(context.Background(), key, 1, remainingTime).Result()
 							if err != nil {
-								log.Println("redis写入失败:", err)
+								logger.ErrorLogger.Println("redis写入失败:", err)
 							} else if result {
 								wx := util.WxStruct{
 									Character: sensor.Tsn,
@@ -192,7 +193,7 @@ func DataCaps(devices []Device) {
 							remainingTime := midnight.Sub(nowday)
 							result, err := RedisClient.SetNX(context.Background(), key, 1, remainingTime).Result()
 							if err != nil {
-								log.Println("redis写入失败:", err)
+								logger.ErrorLogger.Println("redis写入失败:", err)
 							} else if result {
 								wx := util.WxStruct{
 									Character: sensor.Tsn,
@@ -233,7 +234,7 @@ func DataCaps(devices []Device) {
 func dataExists(file *excelize.File, sheet string, sn, company, name, id, time string) bool {
 	rows, err := file.GetRows(sheet)
 	if err != nil {
-		log.Println("获取Excel文件行数据失败:", err)
+		logger.ErrorLogger.Println("获取Excel文件行数据失败:", err)
 		return false
 	}
 	for _, row := range rows[1:] { // 跳过表头

+ 3 - 3
service/eqiupmentMonitoringV2.go

@@ -61,7 +61,7 @@ func init() {
 // EquipmentMonitoring2 监控设备v2
 func EquipmentMonitoring2() {
 	//1.获取所有设备表
-	sqlStatement := "select t_sn,t_dev_name from device where t__state = 1 and t_pid !=2 and (t_model = 'BX200GSE' OR t_model = 'MD100' OR t_model LIKE 'MD200G' OR t_model LIKE 'BX100' OR t_model LIKE 'KF100' OR t_model LIKE 'MD300G') "
+	sqlStatement := "select t_sn,t_dev_name from device where t__state = 1 and t_monitor = 1 and t_online =1 or t_online_s = 1 and t_pid !=2 and (t_model = 'BX200GSE' OR t_model = 'MD100' OR t_model LIKE 'MD200G' OR t_model LIKE 'BX100' OR t_model LIKE 'KF100' OR t_model LIKE 'MD300G') "
 	rows, _ := databases.Db.Query(sqlStatement)
 	devices := make([]Device, 0)
 	var sn, devName string
@@ -73,8 +73,8 @@ func EquipmentMonitoring2() {
 	//fmt.Println("查询得到设备:", devices)
 	//fmt.Println("查询得到设备:", len(devices))
 	//HandleTsn(devices)
-	//DataCaps(devices)
-	Forewarn(devices)
+	DataCaps(devices)
+	//Forewarn(devices)
 }
 
 // 处理sn

+ 7 - 7
service/forewarn.go

@@ -2,11 +2,11 @@ package service
 
 import (
 	"fmt"
-	"log"
 	"math"
 	"strconv"
 	"time"
 	"ydMonitoring/databases"
+	"ydMonitoring/logger"
 )
 
 type Devices struct {
@@ -40,7 +40,7 @@ func Forewarn(devices []Device) {
 	for _, sql := range sqllist {
 		rows, err := databases.Db.Query(sql)
 		if err != nil {
-			log.Println("查询设备信息失败:", err)
+			logger.ErrorLogger.Println("查询设备信息失败:", err)
 			continue
 		}
 		defer rows.Close()
@@ -48,7 +48,7 @@ func Forewarn(devices []Device) {
 			var sn, t_id, t_pid, t_name string
 			err := rows.Scan(&sn, &t_id, &t_pid, &t_name)
 			if err != nil {
-				log.Println("扫描设备信息失败:", err)
+				logger.ErrorLogger.Println("扫描设备信息失败:", err)
 				continue
 			}
 			deviceSensor = append(deviceSensor, DeviceSensors{sn, t_id, t_pid, t_name})
@@ -68,7 +68,7 @@ func Forewarn(devices []Device) {
 
 		b, _ := Ignore(sensor.Tsn)
 		if b {
-			log.Println("该设备已忽略:", sensor.Tsn)
+			logger.ErrorLogger.Println("该设备已忽略:", sensor.Tsn)
 			continue
 		}
 
@@ -84,7 +84,7 @@ func Forewarn(devices []Device) {
 		sql := fmt.Sprintf("SELECT t_time,t_t,t_rh FROM z_device_data_%s WHERE t_id = '%s' ORDER BY t_time DESC LIMIT 10", sensor.Tsn, sensor.TId)
 		rows, err := databases.Db.Query(sql)
 		if err != nil {
-			log.Println("查询数据失败:", err)
+			logger.ErrorLogger.Println("查询数据失败:", err)
 			continue
 		}
 		defer rows.Close()
@@ -104,12 +104,12 @@ func Forewarn(devices []Device) {
 
 			startTime, err := time.Parse(timeFormat, start.T_Time)
 			if err != nil {
-				log.Println("解析时间失败:", err)
+				logger.ErrorLogger.Println("解析时间失败:", err)
 				continue
 			}
 			endTime, err := time.Parse(timeFormat, end.T_Time)
 			if err != nil {
-				log.Println("解析时间失败:", err)
+				logger.ErrorLogger.Println("解析时间失败:", err)
 				continue
 			}
 

+ 118 - 54
service/test.go

@@ -10,9 +10,6 @@ import (
 	"ydMonitoring/databases"
 )
 
-// DeviceData 两两比较,如果大,就插入一条
-// 继续下一个两辆比较。
-// 然后多次循环,直到没有需要插入的
 type DeviceData struct {
 	T_Id        string         `json:"t_id"`
 	T_Sp        string         `json:"t_sp"`
@@ -23,26 +20,42 @@ type DeviceData struct {
 	Create_time string         `json:"create_time"`
 }
 
+type DeviceLists struct {
+	t_save_t   string  //系统设置间隔时间
+	t_warn     string  // 报警间隔时间
+	t_tlower   float64 // 低温下限
+	t_tupper   float64 // 高温上限
+	t_r_hlower float64 // 湿度下限
+	t_r_hupper float64 // 湿度上限
+	sn         string  // sn
+}
+
 func TestService() {
-	var t_save_t string    //系统设置间隔时间
-	var t_warn string      // 报警间隔时间
-	var t_tlower float64   // 低温下限
-	var t_tupper float64   // 高温上限
-	var t_r_hlower float64 // 湿度下限
-	var t_r_hupper float64 // 湿度上限
-	sn := "2024332675927850"
-	t_id := "1"
-	startTime := "2024-09-30 00:00:00"
-	endTime := "2024-10-09 10:11:00"
+	sn := "2024479869314058"
+	//var t_id string
+	//t_id := "22"
+	startTime := "2024-11-25 10:30:00"
+	endTime := "2024-11-29 16:00:00"
+	for i := 1; i <= 22; i++ {
+		t_id := strconv.Itoa(i)
+		//ablistdevices, ablists := Listdevices(sn, t_id, startTime, endTime)
+		//abnormal(ablistdevices, ablists.t_save_t, ablists.t_warn, ablists.sn, ablists.t_tlower, ablists.t_tupper, ablists.t_r_hlower, ablists.t_r_hupper)
+		listdevices, lists := Listdevices(sn, t_id, startTime, endTime)
+		normal(listdevices, lists.t_save_t, lists.t_warn, lists.sn, lists.t_tlower, lists.t_tupper, lists.t_r_hlower, lists.t_r_hupper)
+	}
+}
+
+func Listdevices(sn, t_id, startTime, endTime string) ([]DeviceData, DeviceLists) {
+	var deviceslist DeviceLists
 	sql := fmt.Sprintf("SELECT * FROM z_device_data_%s WHERE t_id=%s and  t_time  BETWEEN '%s' AND '%s';", sn, t_id, startTime, endTime)
 	fmt.Println(sql)
+	deviceslist.sn = sn
 	devices := make([]DeviceData, 0)
 	rows, err := databases.Db.Query(sql)
 	if err != nil {
 		log.Fatalf("查询失败 %v", err)
 	}
 	defer rows.Close()
-	// 遍历查询结果
 	for rows.Next() {
 		var device DeviceData
 		err := rows.Scan(&device.T_Id, &device.T_Sp, &device.T_Time, &device.T_T, &device.T_Rh, &device.T_Site, &device.Create_time)
@@ -51,23 +64,34 @@ func TestService() {
 		}
 		devices = append(devices, device)
 	}
-	// 检查遍历过程中是否有错误发生
 	if err := rows.Err(); err != nil {
 		log.Fatalf("遍历错误: %v", err)
 	}
-	//fmt.Println(devices)
 	sqls := fmt.Sprintf("SELECT t_save_t,t_warn FROM device_parameter WHERE t_sn='%s' ORDER BY update_time DESC LIMIT 1", sn)
 	deviceSensorParameter := fmt.Sprintf("SELECT t__tlower,t__tupper,t__r_hlower,t__r_hupper FROM device_sensor_parameter WHERE  t_sn='%s' and t__state=1 and t_id = '%s' ORDER BY update_time DESC LIMIT 1", sn, t_id)
-	databases.Db.QueryRow(sqls).Scan(&t_save_t, &t_warn)
-	databases.Db.QueryRow(deviceSensorParameter).Scan(&t_tlower, &t_tupper, &t_r_hlower, &t_r_hupper)
-	//fmt.Println("保存间隔:", t_save_t, "报警间隔:", t_warn, "温湿度上下限:", t_tlower, t_tupper, t_r_hlower, t_r_hupper)
-	adjustData(devices, t_save_t, t_warn, sn, t_tlower, t_tupper, t_r_hlower, t_r_hupper)
+	databases.Db.QueryRow(sqls).Scan(&deviceslist.t_save_t, &deviceslist.t_warn)
+	databases.Db.QueryRow(deviceSensorParameter).Scan(&deviceslist.t_tlower, &deviceslist.t_tupper, &deviceslist.t_r_hlower, &deviceslist.t_r_hupper)
+	return devices, deviceslist
 }
 
-func adjustData(devices []DeviceData, t_save_t, t_warn, sn string, t_tlower, t_tupper, t_r_hlower, t_r_hupper float64) {
+func normal(devices []DeviceData, t_save_t, t_warn, sn string, t_tlower, t_tupper, t_r_hlower, t_r_hupper float64) {
 	timeFormat := "2006-01-02 15:04:05"
-	floatSave, _ := strconv.ParseFloat(t_save_t, 64) // 获取系统设置时间
-	floatWarn, _ := strconv.ParseFloat(t_warn, 64)   // 获取系统报警时间
+	floatSave, _ := strconv.ParseFloat(t_save_t, 64)
+	tx, err := databases.Db.Begin()
+	if err != nil {
+		log.Fatalf("开始事务失败: %v", err)
+	}
+	defer func() {
+		if p := recover(); p != nil {
+			tx.Rollback()
+			panic(p)
+		}
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
 	for i := 0; i < len(devices)-1; i++ {
 		t1, err := time.Parse(timeFormat, devices[i].T_Time)
 		if err != nil {
@@ -80,18 +104,12 @@ func adjustData(devices []DeviceData, t_save_t, t_warn, sn string, t_tlower, t_t
 			continue
 		}
 		timeDiff := t2.Sub(t1).Seconds()
-		// 检查是否为报警数据
-		isAlarm := devices[i].T_T < t_tlower || devices[i].T_T > t_tupper || devices[i].T_Rh < t_r_hlower || devices[i].T_Rh > t_r_hupper
-		isNextAlarm := devices[i+1].T_T < t_tlower || devices[i+1].T_T > t_tupper || devices[i+1].T_Rh < t_r_hlower || devices[i+1].T_Rh > t_r_hupper
-		// 处理报警数据与正常数据之间的间隔
-		if isAlarm && !isNextAlarm {
-			fmt.Println("处理报警数据与正常数据之间的间隔", devices[i].T_Time, devices[i+1].T_Time)
-			//interval := floatWarn - 20
-			//newTime := t1.Add(time.Duration(int(interval)) * time.Second)
-			//fmt.Println("newTime:", newTime)
-			newTime := t2.Add(time.Duration(floatSave * float64(time.Second) * -1))
-			for timeDiff > floatSave {
-				fmt.Printf("间隔时间大于系统设置时间:%s 和 %s\n", devices[i].T_Time, devices[i+1].T_Time)
+		if timeDiff > floatSave {
+			fmt.Printf("时间差大于系统设置时间:%s 和 %s\n", devices[i].T_Time, devices[i+1].T_Time)
+			numInserts := int(timeDiff / floatSave)
+			for j := 1; j <= numInserts; j++ {
+				t := t1.Truncate(time.Minute)
+				newTime := t.Add(time.Duration(j*int(floatSave)) * time.Second)
 				T_T, T_Rh := IsNotWarn(devices, t_tlower, t_tupper, t_r_hlower, t_r_hupper)
 				devi := DeviceData{
 					T_Id:        devices[i].T_Id,
@@ -103,22 +121,67 @@ func adjustData(devices []DeviceData, t_save_t, t_warn, sn string, t_tlower, t_t
 					Create_time: newTime.Format(timeFormat),
 				}
 				insertSql := fmt.Sprintf("INSERT INTO z_device_data_%s (t_id, t_sp, t_time, t_t, t_rh, t_site, create_time) VALUES (?, ?, ?, ?, ?, ?, ?)", sn)
-				_, err := databases.Db.Exec(insertSql, devi.T_Id, devi.T_Sp, devi.T_Time, devi.T_T, devi.T_Rh, devi.T_Site.String, devi.Create_time)
+				_, err := tx.Exec(insertSql, devi.T_Id, devi.T_Sp, devi.T_Time, devi.T_T, devi.T_Rh, devi.T_Site.String, devi.Create_time)
 				if err != nil {
-					fmt.Println("插入新时间点失败:", err)
+					log.Println("插入新时间点失败:", err)
+					return
 				}
-				log.Println("sn:", sn, "连续报警补漏数据:", devi, " 插入时间点:", newTime.Format(timeFormat))
-				//t, _ := time.Parse("2006-01-02 15:04:05", endTime)
-				timeDiff = newTime.Sub(t1).Seconds()
-				newTime = newTime.Add(time.Duration(floatSave * float64(time.Second) * -1))
+				log.Println("sn:", sn, "补漏数据:", devi, " 插入时间点:", newTime.Format(timeFormat))
 			}
+			//rand.Seed(time.Now().UnixNano())
+			//randomNumber := rand.Intn(59) + 1
+			//add := t2.Add(time.Duration(randomNumber) * time.Second).Format(timeFormat)
+			//format := t2.Format(timeFormat)
+			//sprintf := fmt.Sprintf("UPDATE z_device_data_%s SET t_time = '%s' WHERE t_time = '%s'", sn, add, format)
+			//fmt.Println(sprintf)
+			//_, err = tx.Exec(sprintf)
+			//if err != nil {
+			//	log.Println("更新时间节点错误:", err)
+			//	return
+			//}
 		}
-		// 处理时间差大于系统设置时间的情况
-		if timeDiff > floatSave {
-			fmt.Printf("时间差大于系统设置时间:%s 和 %s\n", devices[i].T_Time, devices[i+1].T_Time)
-			numInserts := int(timeDiff / floatSave)
-			for j := 1; j <= numInserts; j++ {
-				newTime := t1.Add(time.Duration(j*int(floatSave)) * time.Second)
+	}
+}
+
+func abnormal(devices []DeviceData, t_save_t, t_warn, sn string, t_tlower, t_tupper, t_r_hlower, t_r_hupper float64) {
+	timeFormat := "2006-01-02 15:04:05"
+	floatWarn, _ := strconv.ParseFloat(t_warn, 64)
+	tx, err := databases.Db.Begin()
+	if err != nil {
+		log.Fatalf("开始事务失败: %v", err)
+	}
+	defer func() {
+		if p := recover(); p != nil {
+			tx.Rollback()
+			panic(p)
+		}
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+	for i := 0; i < len(devices)-1; i++ {
+		t1, err := time.Parse(timeFormat, devices[i].T_Time)
+		if err != nil {
+			log.Println("解析时间失败:", err)
+			continue
+		}
+		t2, err := time.Parse(timeFormat, devices[i+1].T_Time)
+		if err != nil {
+			log.Println("解析时间失败:", err)
+			continue
+		}
+		timeDiff := t2.Sub(t1).Seconds()
+		isAlarm := devices[i].T_T < t_tlower || devices[i].T_T > t_tupper || devices[i].T_Rh < t_r_hlower || devices[i].T_Rh > t_r_hupper
+		isNextAlarm := devices[i+1].T_T < t_tlower || devices[i+1].T_T > t_tupper || devices[i+1].T_Rh < t_r_hlower || devices[i+1].T_Rh > t_r_hupper
+
+		if isAlarm && !isNextAlarm {
+			fmt.Println("处理报警数据与正常数据之间的间隔", devices[i].T_Time, devices[i+1].T_Time)
+			interval := floatWarn - 20
+			newTime := t1.Add(time.Duration(int(interval)) * time.Second)
+			if timeDiff > floatWarn {
+				fmt.Printf("间隔时间大于系统设置时间:%s 和 %s\n", devices[i].T_Time, devices[i+1].T_Time)
 				T_T, T_Rh := IsNotWarn(devices, t_tlower, t_tupper, t_r_hlower, t_r_hupper)
 				devi := DeviceData{
 					T_Id:        devices[i].T_Id,
@@ -130,21 +193,20 @@ func adjustData(devices []DeviceData, t_save_t, t_warn, sn string, t_tlower, t_t
 					Create_time: newTime.Format(timeFormat),
 				}
 				insertSql := fmt.Sprintf("INSERT INTO z_device_data_%s (t_id, t_sp, t_time, t_t, t_rh, t_site, create_time) VALUES (?, ?, ?, ?, ?, ?, ?)", sn)
-				_, err := databases.Db.Exec(insertSql, devi.T_Id, devi.T_Sp, devi.T_Time, devi.T_T, devi.T_Rh, devi.T_Site.String, devi.Create_time)
+				_, err := tx.Exec(insertSql, devi.T_Id, devi.T_Sp, devi.T_Time, devi.T_T, devi.T_Rh, devi.T_Site.String, devi.Create_time)
 				if err != nil {
-					fmt.Println("插入新时间点失败:", err)
+					log.Println("插入新时间点失败:", err)
+					return
 				}
-				log.Println("sn:", sn, "补漏数据:", devi, " 插入时间点:", newTime.Format(timeFormat))
+				log.Println("sn:", sn, "连续报警补漏数据:", devi, " 插入时间点:", newTime.Format(timeFormat))
 			}
 		}
-		// 处理连续报警数据
 		if isAlarm && isNextAlarm {
 			if timeDiff > floatWarn {
 				fmt.Printf("连续报警时间差大于报警间隔时间:%s 和 %s\n", devices[i].T_Time, devices[i+1].T_Time)
 				newTimeWarn := devices[i].T_Time
 				parse, _ := time.Parse(timeFormat, newTimeWarn)
 				newTime := parse.Add(time.Duration(int(floatWarn-rand.Float64()*10-0.2)) * time.Second)
-				//newTime := t1.Add(time.Duration(int(timeDiff-rand.Float64()*10-0.2)) * time.Second)
 				fmt.Println("报警新时间:", newTime.Format(timeFormat))
 				T_T, T_Rh := IsNotWarn(devices, t_tlower, t_tupper, t_r_hlower, t_r_hupper)
 				devi := DeviceData{
@@ -157,15 +219,17 @@ func adjustData(devices []DeviceData, t_save_t, t_warn, sn string, t_tlower, t_t
 					Create_time: newTime.Format(timeFormat),
 				}
 				insertSql := fmt.Sprintf("INSERT INTO z_device_data_%s (t_id, t_sp, t_time, t_t, t_rh, t_site, create_time) VALUES (?, ?, ?, ?, ?, ?, ?)", sn)
-				_, err := databases.Db.Exec(insertSql, devi.T_Id, devi.T_Sp, devi.T_Time, devi.T_T, devi.T_Rh, devi.T_Site.String, devi.Create_time)
+				_, err := tx.Exec(insertSql, devi.T_Id, devi.T_Sp, devi.T_Time, devi.T_T, devi.T_Rh, devi.T_Site.String, devi.Create_time)
 				if err != nil {
-					fmt.Println("插入新时间点失败:", err)
+					log.Println("插入新时间点失败:", err)
+					return
 				}
 				log.Println("sn:", sn, "连续报警补漏数据:", devi, " 插入时间点:", newTime.Format(timeFormat))
 			}
 		}
 	}
 }
+
 func IsNotWarn(deviceDatas []DeviceData, t_tlower, t_tupper, t_r_hlower, t_r_hupper float64) (T_T float64, T_Rh float64) {
 	for i, _ := range deviceDatas {
 		if !(deviceDatas[i].T_T < t_tlower || deviceDatas[i].T_T > t_tupper || deviceDatas[i].T_Rh < t_r_hlower || deviceDatas[i].T_Rh > t_r_hupper) {