Procházet zdrojové kódy

最新版本代码

LiXiangFei před 1 týdnem
rodič
revize
a0cae8356d

+ 5 - 9
Cold_server.go

@@ -6,14 +6,12 @@ import (
 	"ColdP_server/middleware"
 	_ "ColdP_server/routers"
 	"fmt"
-	"runtime"
-	"strconv"
-
-	"github.com/beego/beego/v2/adapter/orm"
-	orm2 "github.com/beego/beego/v2/client/orm"
+	"github.com/beego/beego/v2/client/orm"
 	beego "github.com/beego/beego/v2/server/web"
 	"github.com/beego/beego/v2/server/web/filter/cors"
 	_ "github.com/go-sql-driver/mysql"
+	"runtime"
+	"strconv"
 )
 
 func init() {
@@ -21,12 +19,10 @@ func init() {
 	orm.RegisterDriver("mysql", orm.DRMySQL)
 	//orm.RegisterDataBase("default", "mysql", "zdxq:7e5853d9178edfcc@tcp(47.108.133.234:3306)/zdxq?charset=utf8",100,200)
 	orm.RegisterDataBase("default", "mysql",
-		conf.MysqlServer_Username+":"+conf.MysqlServer_Password+"@tcp("+conf.MysqlServer_UrlPort+")/"+conf.MysqlServer_Database+"?charset=utf8mb4&loc=Local&parseTime=True",
-		conf.MysqlServer_MaxIdleConnections, conf.MysqlServer_MaxOpenConnections)
+		conf.MysqlServer_Username+":"+conf.MysqlServer_Password+"@tcp("+conf.MysqlServer_UrlPort+")/"+conf.MysqlServer_Database+"?charset=utf8mb4&loc=Local&parseTime=True")
 	orm.RunSyncdb("default", false, false) // 创建数据库
 	//Nats.Init()
 	orm.Debug = true
-	orm2.Debug = true
 	// 在所有路由之前执行 GlobalRecoverFilter
 	beego.InsertFilter("*", beego.BeforeExec, middleware.GlobalRecoverMiddleware)
 }
@@ -48,7 +44,7 @@ func main() {
 	beego.BConfig.Listen.HTTPPort = HTTPPort_int //监听端口  本地:8518  线上:8528
 	/*	beego.AddFuncMap("convertm", convertM)
 	 */
-	//go MqttServer.Run_MqttServer()
+	// // go MqttServer.Run_MqttServer()
 	s, _ := beego.AppConfig.String("isRun")
 	if s == "true" {
 		go MqttServer.MqttConntMqttjxit()

+ 2 - 2
conf/app.conf

@@ -15,8 +15,8 @@ MysqlServer_Database = "cold"
 MysqlServer_Username = "cold"
 ; MysqlServer_Password = "yjwyEckZS7rE5H"
 MysqlServer_Password = "yjwyEckZS7rE5H!"
-MysqlServer_MaxIdleConnections = 100
-MysqlServer_MaxOpenConnections = 200
+MysqlServer_MaxIdleConnections = 10
+MysqlServer_MaxOpenConnections = 20
 
 # Redis
 ; Redis_address = "203.34.49.130:6379"

+ 1 - 1
controllers/CommonsController.go

@@ -88,7 +88,7 @@ func (c *AdminController) Login_verification() {
 		return
 	}
 	//如果自定义了公司ID,则标识是管理员,判断是否pids是否存在要操作的pid,并且要求登录用户的PID一定为0
-	if companyId != "" && admin_r.T_pid == 0 {
+	if companyId != "" {
 		pids := strings.Split(admin_r.T_pids, "|")
 		for _, v := range pids {
 			newV := strings.Replace(v, "P", "", -1)

+ 65 - 5
controllers/DataController.go

@@ -162,13 +162,20 @@ func (c *DataController) Device_Sensor_List_Delete() {
 	fmt.Println("body获取得到数据:", string(bytes))
 	json.Unmarshal(bytes, &datas)
 	fmt.Println("jsonUnmarshal获取得到数据:", datas)
+	var m Device.DeviceSensorParameter_M
+	var T_sp int
+	var err error
 	for _, data := range datas {
-		err, m := Device.ReadDeviceSensorParameter(data.T_sp)
-		if err != nil {
-			c.Data["json"] = lib.JSONS{500, "删除失败!", nil}
-			c.ServeJSON()
-			return
+		if T_sp != data.T_sp {
+			err, m = Device.ReadDeviceSensorParameter(data.T_sp)
+			if err != nil {
+				c.Data["json"] = lib.JSONS{500, "删除失败!", nil}
+				c.ServeJSON()
+				return
+			}
+			T_sp = data.T_sp
 		}
+
 		if data.T_t < m.T_Tlower || data.T_t > m.T_Tupper || data.T_rh < m.T_RHlower || data.T_rh > m.T_RHupper {
 			log.Println("报警消息", data)
 			err := Warning.DeleteWarning(data.T_sn, data.T_time, data.T_id)
@@ -223,6 +230,59 @@ func (c *DataController) Device_Sensor_List_Delete_Time() {
 	c.ServeJSON()
 }
 
+// Device_Sensor_List_processingExceededSelect_Time 批量处理超标数据
+func (c *DataController) Device_Sensor_List_processingExceededSelect_Time() {
+	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
+		return
+	}
+	type R_JSONS struct {
+		T_snid        []string `json:"t_sn"`
+		T_id          []string `json:"t_id"`
+		Time_start    string   `json:"time_start"`
+		Time_end      string   `json:"time_end"`
+		TempUpper     string   `json:"tempUpper"`
+		TempUpperMin  string   `json:"tempUpperMin"`
+		TempUpperMax  string   `json:"tempUpperMax"`
+		TempLower     string   `json:"tempLower"`
+		TempLowerMin  string   `json:"tempLowerMin"`
+		TempLowerMax  string   `json:"tempLowerMax"`
+		HumidUpper    string   `json:"humidUpper"`
+		HumidUpperMin string   `json:"humidUpperMin"`
+		HumidUpperMax string   `json:"humidUpperMax"`
+		HumidLower    string   `json:"humidLower"`
+		HumidLowerMin string   `json:"humidLowerMin"`
+		HumidLowerMax string   `json:"humidLowerMax"`
+	}
+	all, _ := io.ReadAll(c.Ctx.Request.Body)
+	var r_json R_JSONS
+	err := json.Unmarshal(all, &r_json)
+	if err != nil {
+		return
+	}
+	var rows sql.Result
+	var affected int64
+	for i := 0; i < len(r_json.T_snid); i++ {
+		rows, err = Device.DeleteExceDeviceDataByTime(r_json.T_snid[i], r_json.T_id[i], r_json.Time_start, r_json.Time_end,
+			r_json.TempUpper, r_json.TempUpperMin, r_json.TempUpperMax,
+			r_json.TempLower, r_json.TempLowerMin, r_json.TempLowerMax,
+			r_json.HumidUpper, r_json.HumidUpperMin, r_json.HumidUpperMax,
+			r_json.HumidLower, r_json.HumidLowerMin, r_json.HumidLowerMax)
+		//rows, err = Device.DeleteDeviceDataByTimeWaring(r_json.T_snid[i], r_json.T_id[i], r_json.Time_start, r_json.Time_end)
+		affected, _ = rows.RowsAffected()
+		affected += affected
+	}
+	if err == nil {
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "删除成功", Data: affected}
+		c.ServeJSON()
+		return
+	}
+	c.Data["json"] = lib.JSONS{Code: 201, Msg: "删除失败", Data: affected}
+	c.ServeJSON()
+}
+
 // Device_Sensor_Update /Data/Device_Sensor_List_Update 更新设备数据
 func (c *DataController) Device_Sensor_Update() {
 	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))

+ 3 - 1
controllers/DataGeneratorController.go

@@ -7,7 +7,8 @@ import (
 	"ColdP_server/models/Device"
 	"encoding/json"
 	"fmt"
-	"github.com/beego/beego/v2/adapter/orm"
+	"github.com/beego/beego/v2/client/orm"
+
 	beego "github.com/beego/beego/v2/server/web"
 	"github.com/xuri/excelize/v2"
 	"io"
@@ -289,6 +290,7 @@ func (c *DataGeneratorController) RepairSensorData() {
 	start := time.UnixMilli(timeRange[0]).Format("2006-01-02 15:04:05")
 	end := time.UnixMilli(timeRange[1]).Format("2006-01-02 15:04:05")
 	num := 0
+
 	for _, v := range sns {
 		listdevices, lists := Listdevices(v[0], v[1], start, end)
 		num = 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)

+ 1 - 1
controllers/MqttServer/Mqtt.go

@@ -7,6 +7,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/aliyun/credentials-go/credentials/utils"
+	"github.com/beego/beego/v2/client/orm"
 	"log"
 	"math/rand"
 	"os"
@@ -18,7 +19,6 @@ import (
 	"syscall"
 	"time"
 
-	"github.com/beego/beego/v2/adapter/orm"
 	beego "github.com/beego/beego/v2/server/web"
 	mqtt "github.com/eclipse/paho.mqtt.golang"
 	"github.com/robfig/cron/v3"

+ 55 - 56
go.mod

@@ -1,75 +1,74 @@
 module ColdP_server
 
-go 1.19
+go 1.24.0
 
 require (
-	github.com/alibabacloud-go/darabonba-openapi v0.1.14
-	github.com/alibabacloud-go/dysmsapi-20170525/v2 v2.0.8
-	github.com/alibabacloud-go/dyvmsapi-20170525/v2 v2.1.1
-	github.com/alibabacloud-go/tea v1.1.17
-	github.com/beego/beego/v2 v2.0.1
-	github.com/beorn7/perks v1.0.1 // indirect
-	github.com/cespare/xxhash/v2 v2.1.1 // indirect
-	github.com/go-sql-driver/mysql v1.6.0
-	github.com/golang/protobuf v1.4.2 // indirect
+	github.com/alibabacloud-go/darabonba-openapi v0.2.1
+	github.com/alibabacloud-go/dysmsapi-20170525/v2 v2.0.18
+	github.com/alibabacloud-go/dyvmsapi-20170525/v2 v2.1.4
+	github.com/alibabacloud-go/tea v1.3.13
+	github.com/aliyun/credentials-go v1.4.7
+	github.com/astaxie/beego v1.12.3
+	github.com/beego/beego/v2 v2.3.8
+	github.com/eclipse/paho.mqtt.golang v1.5.1
+	github.com/go-sql-driver/mysql v1.9.3
 	github.com/gorilla/websocket v1.5.3
-	github.com/hashicorp/golang-lru v0.5.4 // indirect
-	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
-	github.com/mitchellh/mapstructure v1.3.3 // indirect
-	github.com/pkg/errors v0.9.1 // indirect
-	github.com/prometheus/common v0.10.0 // indirect
+	github.com/nats-io/nats.go v1.47.0
+	github.com/qiniu/go-sdk/v7 v7.25.4
+	github.com/robfig/cron/v3 v3.0.1
 	github.com/satori/go.uuid v1.2.0
-	github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
-	github.com/xuri/excelize/v2 v2.7.0
-	golang.org/x/crypto v0.25.0 // indirect
-	golang.org/x/mod v0.17.0 // indirect
-	golang.org/x/net v0.27.0 // indirect
-	golang.org/x/sys v0.22.0 // indirect
-	golang.org/x/text v0.16.0 // indirect
-	golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
-	google.golang.org/protobuf v1.23.0 // indirect
-	gopkg.in/yaml.v2 v2.2.8 // indirect
-)
-
-require (
-	github.com/astaxie/beego v1.12.3
-	github.com/eclipse/paho.mqtt.golang v1.5.0
-	github.com/nats-io/nats.go v1.28.0
-	github.com/qiniu/go-sdk/v7 v7.11.1
-	github.com/vmihailenco/msgpack/v5 v5.3.5
+	github.com/tidwall/gjson v1.18.0
+	github.com/vmihailenco/msgpack/v5 v5.4.1
+	github.com/xuri/excelize/v2 v2.10.0
 )
 
 require (
-	github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.2 // indirect
-	github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect
+	filippo.io/edwards25519 v1.1.0 // indirect
+	github.com/BurntSushi/toml v1.3.2 // indirect
+	github.com/alex-ant/gomath v0.0.0-20160516115720-89013a210a82 // indirect
+	github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect
+	github.com/alibabacloud-go/debug v1.0.1 // indirect
 	github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect
-	github.com/alibabacloud-go/openapi-util v0.0.10 // indirect
-	github.com/alibabacloud-go/tea-utils v1.4.3 // indirect
-	github.com/aliyun/credentials-go v1.1.2 // indirect
+	github.com/alibabacloud-go/openapi-util v0.0.11 // indirect
+	github.com/alibabacloud-go/tea-utils v1.4.5 // indirect
+	github.com/alibabacloud-go/tea-xml v1.1.2 // indirect
+	github.com/beorn7/perks v1.0.1 // indirect
+	github.com/cespare/xxhash/v2 v2.2.0 // indirect
+	github.com/clbanning/mxj/v2 v2.7.0 // indirect
+	github.com/gammazero/toposort v0.1.1 // indirect
+	github.com/gofrs/flock v0.8.1 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
-	github.com/json-iterator/go v1.1.10 // indirect
-	github.com/klauspost/compress v1.16.7 // indirect
+	github.com/hashicorp/golang-lru v0.5.4 // indirect
+	github.com/json-iterator/go v1.1.12 // indirect
+	github.com/klauspost/compress v1.18.0 // indirect
+	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.1 // indirect
-	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
-	github.com/nats-io/nats-server/v2 v2.9.21 // indirect
-	github.com/nats-io/nkeys v0.4.4 // indirect
+	github.com/modern-go/reflect2 v1.0.2 // indirect
+	github.com/nats-io/nkeys v0.4.11 // indirect
 	github.com/nats-io/nuid v1.0.1 // indirect
-	github.com/prometheus/client_golang v1.7.0 // indirect
-	github.com/prometheus/client_model v0.2.0 // indirect
-	github.com/prometheus/procfs v0.1.3 // indirect
+	github.com/pkg/errors v0.9.1 // indirect
+	github.com/prometheus/client_golang v1.19.0 // indirect
+	github.com/prometheus/client_model v0.5.0 // indirect
+	github.com/prometheus/common v0.48.0 // indirect
+	github.com/prometheus/procfs v0.12.0 // indirect
 	github.com/richardlehane/mscfb v1.0.4 // indirect
-	github.com/richardlehane/msoleps v1.0.3 // indirect
-	github.com/robfig/cron v1.2.0 // indirect
-	github.com/robfig/cron/v3 v3.0.1 // indirect
-	github.com/tidwall/gjson v1.18.0 // indirect
+	github.com/richardlehane/msoleps v1.0.4 // indirect
+	github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
 	github.com/tidwall/match v1.1.1 // indirect
 	github.com/tidwall/pretty v1.2.0 // indirect
+	github.com/tiendc/go-deepcopy v1.7.1 // indirect
 	github.com/tjfoc/gmsm v1.3.2 // indirect
+	github.com/valyala/bytebufferpool v1.0.0 // indirect
 	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
-	github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 // indirect
-	github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect
-	golang.org/x/sync v0.7.0 // indirect
-	gopkg.in/ini.v1 v1.56.0 // indirect
-
+	github.com/xuri/efp v0.0.1 // indirect
+	github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect
+	golang.org/x/crypto v0.43.0 // indirect
+	golang.org/x/net v0.46.0 // indirect
+	golang.org/x/sync v0.17.0 // indirect
+	golang.org/x/sys v0.37.0 // indirect
+	golang.org/x/text v0.30.0 // indirect
+	google.golang.org/protobuf v1.34.2 // indirect
+	gopkg.in/ini.v1 v1.67.0 // indirect
+	gopkg.in/yaml.v3 v3.0.1 // indirect
+	modernc.org/fileutil v1.0.0 // indirect
 )

+ 160 - 173
go.sum

@@ -1,46 +1,60 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
+filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
+github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.2 h1:/c6fLTlYKFd44Bx36A/cNuKekFzMqEPRc0QCLOC2Nok=
-github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.2/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc=
-github.com/alibabacloud-go/darabonba-openapi v0.1.11/go.mod h1:MPJMxv7HYrFm5m9uOZWkDYsAWyZztEgnBRfk9Fg0eIU=
-github.com/alibabacloud-go/darabonba-openapi v0.1.14 h1:3bQEoqeO0ZvSor1n5uqkb4TiFNAd8XMFYeGFll75L/c=
-github.com/alibabacloud-go/darabonba-openapi v0.1.14/go.mod h1:w4CosR7O/kapCtEEMBm3JsQqWBU/CnZ2o0pHorsTWDI=
+github.com/alex-ant/gomath v0.0.0-20160516115720-89013a210a82 h1:7dONQ3WNZ1zy960TmkxJPuwoolZwL7xKtpcM04MBnt4=
+github.com/alex-ant/gomath v0.0.0-20160516115720-89013a210a82/go.mod h1:nLnM0KdK1CmygvjpDUO6m1TjSsiQtL61juhNsvV/JVI=
+github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 h1:iC9YFYKDGEy3n/FtqJnOkZsene9olVspKmkX5A2YBEo=
+github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc=
+github.com/alibabacloud-go/darabonba-openapi v0.1.16/go.mod h1:ZjyqRbbZOaUBSh7keeH8VQN/BzCPvxCQwMuJGDdbmXQ=
+github.com/alibabacloud-go/darabonba-openapi v0.1.18/go.mod h1:PB4HffMhJVmAgNKNq3wYbTUlFvPgxJpTzd1F5pTuUsc=
+github.com/alibabacloud-go/darabonba-openapi v0.2.1 h1:WyzxxKvhdVDlwpAMOHgAiCJ+NXa6g5ZWPFEzaK/ewwY=
+github.com/alibabacloud-go/darabonba-openapi v0.2.1/go.mod h1:zXOqLbpIqq543oioL9IuuZYOQgHQ5B8/n5OPrnko8aY=
 github.com/alibabacloud-go/darabonba-string v1.0.0/go.mod h1:93cTfV3vuPhhEwGGpKKqhVW4jLe7tDpo3LUM0i0g6mA=
-github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 h1:NqugFkGxx1TXSh/pBcU00Y6bljgDPaFdh5MUSeJ7e50=
 github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY=
-github.com/alibabacloud-go/dysmsapi-20170525/v2 v2.0.8 h1:KXMiCg99Jx7B6V+DlRFbWwL9UCGippE5z1wGzhyimiA=
-github.com/alibabacloud-go/dysmsapi-20170525/v2 v2.0.8/go.mod h1:8aL6tSyQIWJygF7W/Vqxdf/QDbN2S+u57k36bEA8hD8=
-github.com/alibabacloud-go/dyvmsapi-20170525/v2 v2.1.1 h1:H/7br9z1bxF93mKo8YSbg4+KYWhPp/ht2BNgWA7zfBo=
-github.com/alibabacloud-go/dyvmsapi-20170525/v2 v2.1.1/go.mod h1:P+OKazJXlBImmn2gF0QF2qeb88rUqhfYF9NYG6FUQXw=
+github.com/alibabacloud-go/debug v1.0.0/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc=
+github.com/alibabacloud-go/debug v1.0.1 h1:MsW9SmUtbb1Fnt3ieC6NNZi6aEwrXfDksD4QA6GSbPg=
+github.com/alibabacloud-go/debug v1.0.1/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc=
+github.com/alibabacloud-go/dysmsapi-20170525/v2 v2.0.18 h1:hfZA4cgIl6frNdsRmAyj8sn9J1bihQpYbzIVv2T/+Cs=
+github.com/alibabacloud-go/dysmsapi-20170525/v2 v2.0.18/go.mod h1:di54xjBFHvKiQQo7st3TUmiMy0ywne5TOHup786Rhes=
+github.com/alibabacloud-go/dyvmsapi-20170525/v2 v2.1.4 h1:IwlrfsuL8v3yJit1TT4q+lFTUFM+xYl6rL4UlFKuQrI=
+github.com/alibabacloud-go/dyvmsapi-20170525/v2 v2.1.4/go.mod h1:kLgmSkUUkeNODR6aXEN3qopSkhCIKplknnd9v/WTAfA=
 github.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q=
 github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE=
-github.com/alibabacloud-go/openapi-util v0.0.9/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws=
-github.com/alibabacloud-go/openapi-util v0.0.10 h1:wzTQc6ZSHhCI1FybUITHE26451zLgQAmYdTaMOUmoqE=
 github.com/alibabacloud-go/openapi-util v0.0.10/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws=
+github.com/alibabacloud-go/openapi-util v0.0.11 h1:iYnqOPR5hyEEnNZmebGyRMkkEJRWUEjDiiaOHZ5aNhA=
+github.com/alibabacloud-go/openapi-util v0.0.11/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws=
 github.com/alibabacloud-go/tea v1.1.0/go.mod h1:IkGyUSX4Ba1V+k4pCtJUc6jDpZLFph9QMy2VUPTwukg=
 github.com/alibabacloud-go/tea v1.1.7/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4=
 github.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4=
 github.com/alibabacloud-go/tea v1.1.11/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4=
-github.com/alibabacloud-go/tea v1.1.15/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A=
-github.com/alibabacloud-go/tea v1.1.17 h1:05R5DnaJXe9sCNIe8KUgWHC/z6w/VZIwczgUwzRnul8=
 github.com/alibabacloud-go/tea v1.1.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A=
+github.com/alibabacloud-go/tea v1.1.19/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A=
+github.com/alibabacloud-go/tea v1.2.2/go.mod h1:CF3vOzEMAG+bR4WOql8gc2G9H3EkH3ZLAQdpmpXMgwk=
+github.com/alibabacloud-go/tea v1.3.13 h1:WhGy6LIXaMbBM6VBYcsDCz6K/TPsT1Ri2hPmmZffZ94=
+github.com/alibabacloud-go/tea v1.3.13/go.mod h1:A560v/JTQ1n5zklt2BEpurJzZTI8TUT+Psg2drWlxRg=
 github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE=
-github.com/alibabacloud-go/tea-utils v1.3.9/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE=
-github.com/alibabacloud-go/tea-utils v1.4.3 h1:8SzwmmRrOnQ09Hf5a9GyfJc0d7Sjv6fmsZoF4UDbFjo=
 github.com/alibabacloud-go/tea-utils v1.4.3/go.mod h1:KNcT0oXlZZxOXINnZBs6YvgOd5aYp9U67G+E3R8fcQw=
+github.com/alibabacloud-go/tea-utils v1.4.5 h1:h0/6Xd2f3bPE4XHTvkpjwxowIwRCJAJOqY6Eq8f3zfA=
+github.com/alibabacloud-go/tea-utils v1.4.5/go.mod h1:KNcT0oXlZZxOXINnZBs6YvgOd5aYp9U67G+E3R8fcQw=
+github.com/alibabacloud-go/tea-utils/v2 v2.0.7/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I=
+github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M=
+github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
 github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
 github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
-github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY=
 github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=
+github.com/aliyun/credentials-go v1.4.7 h1:T17dLqEtPUFvjDRRb5giVvLh6dFT8IcNFJJb7MeyCxw=
+github.com/aliyun/credentials-go v1.4.7/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U=
 github.com/astaxie/beego v1.12.3 h1:SAQkdD2ePye+v8Gn1r4X6IKZM1wd28EyUOVQ3PDSOOQ=
 github.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA=
-github.com/beego/beego/v2 v2.0.1 h1:07a7Z0Ok5vbqyqh+q53sDPl9LdhKh0ZDy3gbyGrhFnE=
-github.com/beego/beego/v2 v2.0.1/go.mod h1:8zyHi1FnWO1mZLwTn62aKRIZF/aIKvkCBB2JYs+eqQI=
+github.com/beego/beego/v2 v2.3.8 h1:wplhB1pF4TxR+2SS4PUej8eDoH4xGfxuHfS7wAk9VBc=
+github.com/beego/beego/v2 v2.3.8/go.mod h1:8vl9+RrXqvodrl9C8yivX1e6le6deCK6RWeq8R7gTTg=
 github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ=
 github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
@@ -49,32 +63,33 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60=
 github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
+github.com/clbanning/mxj/v2 v2.5.6/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
+github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
+github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
 github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
-github.com/coreos/etcd v3.3.25+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
-github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
 github.com/couchbase/go-couchbase v0.0.0-20200519150804-63f3cdb75e0d/go.mod h1:TWI8EKQMs5u5jLKW/tsb9VwauIrMIxQG1r5fMsswK5U=
 github.com/couchbase/gomemcached v0.0.0-20200526233749-ec430f949808/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c=
 github.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY=
+github.com/dave/jennifer v1.6.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3RmGZc=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/eclipse/paho.mqtt.golang v1.5.0 h1:EH+bUVJNgttidWFkLLVKaQPGmkTUfQQqjOsyvMGvD6o=
-github.com/eclipse/paho.mqtt.golang v1.5.0/go.mod h1:du/2qNQVqJf/Sqs4MEL77kR8QTqANF7XU7Fk0aOTAgk=
+github.com/eclipse/paho.mqtt.golang v1.5.1 h1:/VSOv3oDLlpqR2Epjn1Q7b2bSTplJIeV2ISgCl2W7nE=
+github.com/eclipse/paho.mqtt.golang v1.5.1/go.mod h1:1/yJCneuyOoCOzKSsOTUc0AJfpsItBGWvYpBLimhArU=
 github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
 github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI=
-github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk=
 github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw=
+github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/gammazero/toposort v0.1.1 h1:OivGxsWxF3U3+U80VoLJ+f50HcPU1MIqE1JlKzoJ2Eg=
+github.com/gammazero/toposort v0.1.1/go.mod h1:H2cozTnNpMw0hg2VHAYsAxmkHXBYroNangj2NTBQDvw=
 github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
@@ -85,17 +100,15 @@ github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTM
 github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
 github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
-github.com/go-playground/validator/v10 v10.8.0/go.mod h1:9JhgTzTaE31GZDpH/HSvHiRJrJ3iKAgqqH0Bl/Ocjdk=
+github.com/go-playground/validator/v10 v10.7.0/go.mod h1:xm76BBt941f7yWdGnI2DVPFFg1UK3YY04qifoXU3lOk=
 github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
-github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg=
 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
-github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
-github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo=
+github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
+github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -104,89 +117,78 @@ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:x
 github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
 github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
 github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
 github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
 github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
 github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
+github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
 github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
 github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
 github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
+github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
-github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
+github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
 github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ=
+github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
 github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
-github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
 github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/lib/pq v1.10.5 h1:J+gdV2cUmX7ZqL2B0lFcW0m+egaHC2V3lpO8nWxyYiQ=
+github.com/lib/pq v1.10.5/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
 github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
-github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g=
-github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8=
-github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
-github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4=
-github.com/nats-io/nats-server/v2 v2.9.21 h1:2TBTh0UDE74eNXQmV4HofsmRSCiVN0TH2Wgrp6BD6fk=
-github.com/nats-io/nats-server/v2 v2.9.21/go.mod h1:ozqMZc2vTHcNcblOiXMWIXkf8+0lDGAi5wQcG+O1mHU=
-github.com/nats-io/nats.go v1.28.0 h1:Th4G6zdsz2d0OqXdfzKLClo6bOfoI/b1kInhRtFIy5c=
-github.com/nats-io/nats.go v1.28.0/go.mod h1:XpbWUlOElGwTYbMR7imivs7jJj9GtK7ypv321Wp6pjc=
-github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA=
-github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64=
+github.com/nats-io/nats.go v1.47.0 h1:YQdADw6J/UfGUd2Oy6tn4Hq6YHxCaJrVKayxxFqYrgM=
+github.com/nats-io/nats.go v1.47.0/go.mod h1:iRWIPokVIFbVijxuMQq4y9ttaBTMe0SFdlZfMDd+33g=
+github.com/nats-io/nkeys v0.4.11 h1:q44qGV008kYd9W1b1nEBkNzvnWxtRSQ7A8BoqRrcfa0=
+github.com/nats-io/nkeys v0.4.11/go.mod h1:szDimtgmfOi9n25JpfIdGw12tZFYXqhGxjhVxsatHVE=
 github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
 github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
-github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
-github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
-github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
 github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
 github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -197,37 +199,38 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.7.0 h1:wCi7urQOGBsYcQROHqpUUX4ct84xp40t9R9JX0FuA/U=
 github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
+github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=
 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8=
 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
 github.com/qiniu/dyn v1.3.0/go.mod h1:E8oERcm8TtwJiZvkQPbcAh0RL8jO1G0VXJMW3FAWdkk=
-github.com/qiniu/go-sdk/v7 v7.11.1 h1:/LZ9rvFS4p6SnszhGv11FNB1+n4OZvBCwFg7opH5Ovs=
-github.com/qiniu/go-sdk/v7 v7.11.1/go.mod h1:btsaOc8CA3hdVloULfFdDgDc+g4f3TDZEFsDY0BLE+w=
+github.com/qiniu/go-sdk/v7 v7.25.4 h1:ulCKlTEyrZzmNytXweOrnva49+Q4+ASjYBCSXhkRWTo=
+github.com/qiniu/go-sdk/v7 v7.25.4/go.mod h1:dmKtJ2ahhPWFVi9o1D5GemmWoh/ctuB9peqTowyTO8o=
 github.com/qiniu/x v1.10.5/go.mod h1:03Ni9tj+N2h2aKnAz+6N0Xfl8FwMEDRC2PAlxekASDs=
 github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM=
 github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk=
 github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
-github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN0AQoVM=
-github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
-github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ=
-github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
+github.com/richardlehane/msoleps v1.0.4 h1:WuESlvhX3gH2IHcd8UqyCuFY5yiq/GR/yqaSM/9/g00=
+github.com/richardlehane/msoleps v1.0.4/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
 github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
 github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
-github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
-github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
 github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
+github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
 github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
@@ -239,23 +242,19 @@ github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
-github.com/smartystreets/assertions v1.1.0 h1:MkTeG1DMwsrdH7QtLXy5W+fUxWq+vmb6cLmyJ7aRtF0=
 github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
-github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
+github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
 github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
 github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
 github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
@@ -264,158 +263,148 @@ github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
 github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
 github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
 github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
+github.com/tiendc/go-deepcopy v1.7.1 h1:LnubftI6nYaaMOcaz0LphzwraqN8jiWTwm416sitff4=
+github.com/tiendc/go-deepcopy v1.7.1/go.mod h1:4bKjNC2r7boYOkD2IOuZpYjmlDdzjbpTRyCx+goBCJQ=
 github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM=
 github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
 github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
-github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU=
-github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc=
+github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
+github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
+github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8=
+github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok=
 github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
 github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=
 github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
-github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 h1:6932x8ltq1w4utjmfMPVj09jdMlkY0aiA6+Skbtl3/c=
-github.com/xuri/efp v0.0.0-20220603152613-6918739fd470/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
-github.com/xuri/excelize/v2 v2.7.0 h1:Hri/czwyRCW6f6zrCDWXcXKshlq4xAZNpNOpdfnFhEw=
-github.com/xuri/excelize/v2 v2.7.0/go.mod h1:ebKlRoS+rGyLMyUx3ErBECXs/HNYqyj+PbkkKRK5vSI=
-github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 h1:OAmKAfT06//esDdpi/DZ8Qsdt4+M5+ltca05dA5bG2M=
-github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
+github.com/xuri/efp v0.0.1 h1:fws5Rv3myXyYni8uwj2qKjVaRP30PdjeYe2Y6FDsCL8=
+github.com/xuri/efp v0.0.1/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
+github.com/xuri/excelize/v2 v2.10.0 h1:8aKsP7JD39iKLc6dH5Tw3dgV3sPRh8uRVXu/fMstfW4=
+github.com/xuri/excelize/v2 v2.10.0/go.mod h1:SC5TzhQkaOsTWpANfm+7bJCldzcnU/jrhqkTi/iBHBU=
+github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 h1:+C0TIdyyYmzadGaL/HBLbf3WdLgC29pgyhTjAT/0nuE=
+github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU=
-go.etcd.io/etcd v3.3.25+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI=
-go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
-go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
-go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
-go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
-golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
-golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/image v0.0.0-20220902085622-e7cb96979f69 h1:Lj6HJGCSn5AjxRAH2+r35Mir4icalbqku+CLUtjnvXY=
-golang.org/x/image v0.0.0-20220902085622-e7cb96979f69/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
+golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
+golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
+golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
+golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
+golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
+golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
+golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ=
+golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
-golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
-golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
+golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
+golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
+golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
+golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
+golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
+golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
+golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
-golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
+golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
+golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
+golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
+golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
+golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
+golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
+golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
+golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
-golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
+golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
+golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
 golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
 google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
 google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
+google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -425,21 +414,19 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/ini.v1 v1.56.0 h1:DPMeDvGTM54DXbPkVIZsp19fp/I2K7zwA/itHYHKo8Y=
 gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+modernc.org/fileutil v1.0.0 h1:Z1AFLZwl6BO8A5NldQg/xTSjGLetp+1Ubvl4alfGx8w=
+modernc.org/fileutil v1.0.0/go.mod h1:JHsWpkrk/CnVV1H/eGlFf85BEpfkrp56ro8nojIq9Q8=

+ 19 - 0
logs/logx/logx.log

@@ -232,3 +232,22 @@
 2025/07/20 19:30:37.604 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
 2025/07/20 19:30:43.295 [E] [Mqtt.go:137]  Mqtt连接失败 not Authorized
 2025/07/20 19:46:29.542 [I] [WarningType.go:193]  =========== 初始化报警类型 =========
+2025/10/16 11:47:31.114 [I] [WarningType.go:194]  =========== 初始化报警类型 =========
+2025/10/16 15:37:51.777 [I] [WarningType.go:194]  =========== 初始化报警类型 =========
+2025/12/15 10:58:05.791 [I] [WarningType.go:194]  =========== 初始化报警类型 =========
+2025/12/15 11:25:31.547 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2025156419971862 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2025/12/15 11:25:31.547 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2025156919202857 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2025/12/15 11:25:31.547 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2025036881904651 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2025/12/15 11:25:31.547 [D] [DeviceData.go:177]  SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_2025151968572251 WHERE t_id = 1 ORDER BY t_time1 DESC LIMIT 0,1
+2025/12/15 11:25:31.563 [E] [Mqtt.go:545]  ColdP_server/controllers/MqttServer.FindClodpServerBySnAndId <QuerySeter> no row found
+2025/12/15 11:25:31.575 [E] [Mqtt.go:545]  ColdP_server/controllers/MqttServer.FindClodpServerBySnAndId <QuerySeter> no row found
+2025/12/15 11:25:31.578 [E] [Mqtt.go:545]  ColdP_server/controllers/MqttServer.FindClodpServerBySnAndId <QuerySeter> no row found
+2025/12/15 11:25:31.578 [E] [Mqtt.go:545]  ColdP_server/controllers/MqttServer.FindClodpServerBySnAndId <QuerySeter> no row found
+2025/12/15 11:25:31.582 [E] [Mqtt.go:545]  ColdP_server/controllers/MqttServer.FindClodpServerBySnAndId <QuerySeter> no row found
+2025/12/15 14:15:49.714 [I] [WarningType.go:194]  =========== 初始化报警类型 =========
+2025/12/15 14:17:04.641 [I] [WarningType.go:194]  =========== 初始化报警类型 =========
+2025/12/15 14:24:17.128 [I] [WarningType.go:194]  =========== 初始化报警类型 =========
+2025/12/15 14:28:04.245 [I] [WarningType.go:194]  =========== 初始化报警类型 =========
+2025/12/15 14:55:29.610 [I] [WarningType.go:194]  =========== 初始化报警类型 =========
+2025/12/15 15:25:02.881 [I] [WarningType.go:194]  =========== 初始化报警类型 =========
+2025/12/17 15:20:19.118 [I] [WarningType.go:194]  =========== 初始化报警类型 =========

+ 5 - 5
models/Account/Admin.go

@@ -6,8 +6,8 @@ import (
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
-	orm2 "github.com/beego/beego/v2/client/orm"
+	"github.com/beego/beego/v2/client/orm"
+
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
 	"strings"
@@ -270,8 +270,8 @@ func Read_Admin_List(T_pid int, T_name string, page int, page_z int) (AdminList
 		cond1 = cond1.AndCond(cond.Or("T_name__icontains", T_name).Or("T_user__icontains", T_name))
 	}
 
-	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
-	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	qs.Limit(page_z, offset).SetCond((cond1)).OrderBy("-Id").All(&maps)
+	cnt, _ = qs.SetCond((cond1)).Count()
 
 	for _, v := range maps {
 		AdminList = append(AdminList, AdminToAdmin_R(v))
@@ -291,7 +291,7 @@ func Read_Admin_List_T_pids(T_pid int) (AdminList []Admin_) {
 
 	cond1 := cond.And("T_State", 1).And("T_pid", 0).And("T_pids__icontains", "P"+strconv.Itoa(T_pid)+"|")
 
-	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
+	qs.SetCond((cond1)).OrderBy("-Id").All(&maps)
 
 	for _, v := range maps {
 		AdminList = append(AdminList, AdminToAdmin_(v))

+ 3 - 4
models/Account/User.go

@@ -6,8 +6,7 @@ import (
 	"errors"
 	"fmt"
 	"github.com/astaxie/beego/cache"
-	"github.com/beego/beego/v2/adapter/orm"
-	orm2 "github.com/beego/beego/v2/client/orm"
+	"github.com/beego/beego/v2/client/orm"
 	"log"
 	"strconv"
 	"strings"
@@ -198,8 +197,8 @@ func Read_ColdUser_List(T_pid int, T_name string, page int, page_z int) (AdminLi
 		cond1 = cond.AndCond(cond.Or("T_name__icontains", T_name).Or("T_user__icontains", T_name))
 	}
 
-	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("Id").All(&maps)
-	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	qs.Limit(page_z, offset).SetCond((cond1)).OrderBy("Id").All(&maps)
+	cnt, _ = qs.SetCond((cond1)).Count()
 	for i, v := range maps {
 		r, err := Read_Company_ById(v.T_pid)
 		if err != nil {

+ 5 - 5
models/Company/CompanyClass.go

@@ -6,8 +6,8 @@ import (
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
-	orm2 "github.com/beego/beego/v2/client/orm"
+	"github.com/beego/beego/v2/client/orm"
+
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
 	"time"
@@ -172,8 +172,8 @@ func Read_CompanyClass_List(T_pid int, T_name string, page int, page_z int) (r [
 		cond1 = cond1.And("T_name", T_name)
 	}
 
-	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
-	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	qs.Limit(page_z, offset).SetCond((cond1)).OrderBy("-Id").All(&map_r)
+	cnt, _ = qs.SetCond((cond1)).Count()
 
 	for _, v := range map_r {
 		r = append(r, CompanyClassToCompanyClass_R(v))
@@ -199,7 +199,7 @@ func Read_CompanyClass_All(T_pid int, T_name string) (r []CompanyClass_R) {
 		cond1 = cond1.And("T_name", T_name)
 	}
 
-	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
+	qs.SetCond((cond1)).OrderBy("-Id").All(&map_r)
 
 	for _, v := range map_r {
 		r = append(r, CompanyClassToCompanyClass_R(v))

+ 3 - 3
models/Company/CompanyNotice.go

@@ -6,8 +6,8 @@ import (
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
-	orm2 "github.com/beego/beego/v2/client/orm"
+	"github.com/beego/beego/v2/client/orm"
+
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
 	"strings"
@@ -258,7 +258,7 @@ func Read_CompanyNotice_All(T_pid int, T_name string) (r []CompanyNotice_R) {
 		cond1 = cond1.And("T_name", T_name)
 	}
 
-	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
+	qs.SetCond((cond1)).OrderBy("-Id").All(&map_r)
 
 	for _, v := range map_r {
 		r = append(r, CompanyNoticeToCompanyNotice_R(v))

+ 3 - 5
models/Device/Device.go

@@ -10,9 +10,7 @@ import (
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
-	orm2 "github.com/beego/beego/v2/client/orm"
-
-	"github.com/beego/beego/v2/adapter/orm"
+	"github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
 	"time"
@@ -296,13 +294,13 @@ func Read_Device_List(admin *Account.Admin, T_pid int, T_name string, T_monitor
 
 	var rx []Device
 
-	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("CreateTime").All(&rx)
+	_, err := qs.Limit(page_z, offset).SetCond((cond1)).OrderBy("CreateTime").All(&rx)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
 	}
 
-	cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	cnt, err = qs.SetCond((cond1)).Count()
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return

+ 146 - 24
models/Device/DeviceData.go

@@ -10,11 +10,12 @@ import (
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
-	orm2 "github.com/beego/beego/v2/client/orm"
+	"github.com/beego/beego/v2/client/orm"
+
 	_ "github.com/go-sql-driver/mysql"
 	"github.com/xuri/excelize/v2"
 	"log"
+	"math/rand"
 	"strconv"
 	"strings"
 	"time"
@@ -236,7 +237,7 @@ func Add_DeviceData(SN string, v DeviceData_T) bool {
 	// 检查 超过时间,查询 数据库
 	if time.Now().Unix()-v.T_time.Unix() >= 60*40 {
 		// 查看是否 有记录
-		var maps_z []orm2.ParamsList
+		var maps_z []orm.ParamsList
 		sql_c := "SELECT COUNT(ID) FROM z_device_data_" + SN + " WHERE t_time = '" + v.T_time.Format("2006-01-02 15:04:05") + "' AND t_id = " + strconv.Itoa(v.T_id)
 		_, err := o.Raw(sql_c).ValuesList(&maps_z)
 		if err != nil {
@@ -289,7 +290,7 @@ func Add_DeviceData(SN string, v DeviceData_T) bool {
 func Read_DeviceData_ById_List(SN string, T_id int, Time_start_ string, Time_end_ string, page int, page_z int, SParamMap map[int]DeviceSensorParameter_M, sort string) ([]DeviceData_R, int) {
 	o := orm.NewOrm()
 	var maps []DeviceData_
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 	var r []DeviceData_R
 	var offset int
 	if page_z == 0 {
@@ -339,9 +340,9 @@ func Read_DeviceData_ById_List(SN string, T_id int, Time_start_ string, Time_end
 	return r, key
 }
 
-func Read_SqlRaw(T_SQL string) []orm2.Params {
+func Read_SqlRaw(T_SQL string) []orm.Params {
 	o := orm.NewOrm()
-	var lists []orm2.Params
+	var lists []orm.Params
 
 	fmt.Println(T_SQL)
 	o.Raw(T_SQL).Values(&lists)
@@ -349,9 +350,9 @@ func Read_SqlRaw(T_SQL string) []orm2.Params {
 	return lists
 }
 
-func Read_SqlRawL(T_SQL string, T_data []string) (string, []orm2.Params) {
+func Read_SqlRawL(T_SQL string, T_data []string) (string, []orm.Params) {
 	o := orm.NewOrm()
-	var lists []orm2.Params
+	var lists []orm.Params
 	fmt.Println(T_SQL)
 	_, err := o.Raw(T_SQL, T_data).Values(&lists)
 	if err != nil {
@@ -433,25 +434,145 @@ func ReadDeviceSensorParameter(TSp int) (error, DeviceSensorParameter_M) {
 
 func DeleteDeviceDataByTime(sn, t_id, time_start, time_end string) (sql.Result, error) {
 	o := orm.NewOrm()
-	err := o.Begin()
+	sprintf := fmt.Sprintf("delete from z_device_data_%s where t_id=%s and t_time >= '%s' and t_time <= '%s'", sn, t_id, time_start, time_end)
+	log.Println(sprintf)
+	count, err := o.Raw(sprintf).Exec()
 	if err != nil {
-		err := o.Rollback()
+		log.Println(err.Error())
+		return count, err
+	}
+	warningsql := fmt.Sprintf("delete from warning where t_sn='%s' and t_id=%s and t__ut >= '%s' and t__ut <= '%s'", sn, t_id, time_start, time_end)
+	log.Println(sprintf)
+	count, err = o.Raw(warningsql).Exec()
+	if err != nil {
+		log.Println(err.Error())
+		return count, err
+	}
+	startTime, err := time.Parse("2006-01-02 15:04:05", time_start)
+	if err != nil {
+		return nil, errors.New("时间格式错误")
+	}
+	endTime, err := time.Parse("2006-01-02 15:04:05", time_end)
+	if err != nil {
+		return nil, errors.New("时间格式错误")
+	}
+	//判断开始时间和结束时间是否属于同一个月
+	if startTime.Month() == endTime.Month() && startTime.Year() == endTime.Year() {
+		formatMonth := startTime.Format("01")
+		tableName := "warning" + "_" + strconv.Itoa(startTime.Year()) + "_" + formatMonth
+		sql := fmt.Sprintf("delete from %s where t_sn='%s' and t_id='%s' and t__ut >= '%s' and t__ut <= '%s'", tableName, sn, t_id, time_start, time_end)
+		count, err := o.Raw(sql).Exec()
 		if err != nil {
-			return nil, err
+			log.Println(err.Error())
+			return count, err
 		}
 	} else {
-		err := o.Commit()
+		// 不同的月份
+		stas, ends, err := getMonthlyTimeRanges(time_start, time_end)
 		if err != nil {
-			return nil, err
+			return nil, errors.New("时间格式错误")
+		}
+		for i := 0; i < len(stas); i++ {
+			fmt.Println(stas[i], ends[i])
+			parse, err := time.Parse("2006-01-02 15:04:05", stas[i])
+			if err != nil {
+				return nil, errors.New("时间格式错误")
+			}
+			formatMonth := parse.Format("01")
+			tableName := "warning" + "_" + strconv.Itoa(parse.Year()) + "_" + formatMonth
+			sqls := fmt.Sprintf("delete from %s where t_sn='%s' and t_id=%s and t__ut >= '%s' and t__ut <= '%s'", tableName, sn, t_id, stas[i], ends[i])
+			count, err := o.Raw(sqls).Exec()
+			if err != nil {
+				log.Println(err.Error())
+				return count, err
+			}
 		}
 	}
-	sprintf := fmt.Sprintf("delete from z_device_data_%s where t_id=%s and t_time >= '%s' and t_time <= '%s'", sn, t_id, time_start, time_end)
+
+	return count, nil
+}
+
+func DeleteExceDeviceDataByTime(sn, t_id, time_start, time_end, tempUpper, tempUpperMin, tempUpperMax, tempLower, tempLowerMin, tempLowerMax, humidUpper, humidUpperMin, humidUpperMax, humidLower, humidLowerMin, humidLowerMax string) (sql.Result, error) {
+	o := orm.NewOrm()
+
+	// 初始化随机数种子
+	rand.Seed(time.Now().UnixNano())
+
+	//  删除异常数据
+	sprintf := fmt.Sprintf("delete from z_device_data_%s where t_id=%s and t_time >= '%s' and t_time <= '%s' and DATE_FORMAT(t_time, '%%s') != '00'", sn, t_id, time_start, time_end)
 	log.Println(sprintf)
 	count, err := o.Raw(sprintf).Exec()
 	if err != nil {
 		log.Println(err.Error())
 		return count, err
 	}
+
+	// 数据平滑处理:对超过8的数据进行平滑过渡,不超过8
+	selectSql := fmt.Sprintf("select t_id, t_sp, t_t, t_rh, t_site, t_time from z_device_data_%s where t_id=%s and t_time >= '%s' and t_time <= '%s'", sn, t_id, time_start, time_end)
+	log.Println(selectSql)
+
+	var deviceDataList []DeviceData_
+	_, err = o.Raw(selectSql).QueryRows(&deviceDataList)
+	if err != nil {
+		log.Println("读取数据失败:", err.Error())
+		return count, err
+	}
+
+	// 将字符串参数转换为浮点数
+	tempUpperFloat, _ := strconv.ParseFloat(tempUpper, 32)
+	tempUpperMinFloat, _ := strconv.ParseFloat(tempUpperMin, 32)
+	tempUpperMaxFloat, _ := strconv.ParseFloat(tempUpperMax, 32)
+	tempLowerFloat, _ := strconv.ParseFloat(tempLower, 32)
+	tempLowerMinFloat, _ := strconv.ParseFloat(tempLowerMin, 32)
+	tempLowerMaxFloat, _ := strconv.ParseFloat(tempLowerMax, 32)
+	humidUpperFloat, _ := strconv.ParseFloat(humidUpper, 32)
+	humidUpperMinFloat, _ := strconv.ParseFloat(humidUpperMin, 32)
+	humidUpperMaxFloat, _ := strconv.ParseFloat(humidUpperMax, 32)
+	humidLowerFloat, _ := strconv.ParseFloat(humidLower, 32)
+	humidLowerMinFloat, _ := strconv.ParseFloat(humidLowerMin, 32)
+	humidLowerMaxFloat, _ := strconv.ParseFloat(humidLowerMax, 32)
+
+	// 遍历数据并进行平滑处理
+	for i, data := range deviceDataList {
+		updated := false
+
+		// 对温度进行平滑处理
+		if data.T_t >= float32(tempUpperFloat) {
+			// 生成指定范围内的随机数
+			rangeSize := tempUpperMaxFloat - tempUpperMinFloat
+			deviceDataList[i].T_t = float32(tempUpperMinFloat) + float32(rand.Float32()*float32(rangeSize))
+			updated = true
+		} else if data.T_t <= float32(tempLowerFloat) {
+			// 生成指定范围内的随机数
+			rangeSize := tempLowerMaxFloat - tempLowerMinFloat
+			deviceDataList[i].T_t = float32(tempLowerMinFloat) + float32(rand.Float32()*float32(rangeSize))
+			updated = true
+		}
+
+		// 对湿度进行平滑处理
+		if data.T_rh >= float32(humidUpperFloat) {
+			// 生成指定范围内的随机数
+			rangeSize := humidUpperMaxFloat - humidUpperMinFloat
+			deviceDataList[i].T_rh = float32(humidUpperMinFloat) + float32(rand.Float32()*float32(rangeSize))
+			updated = true
+		} else if data.T_rh <= float32(humidLowerFloat) {
+			// 生成指定范围内的随机数
+			rangeSize := humidLowerMaxFloat - humidLowerMinFloat
+			deviceDataList[i].T_rh = float32(humidLowerMinFloat) + float32(rand.Float32()*float32(rangeSize))
+			updated = true
+		}
+
+		// 如果数据有更新,则保存回数据库
+		if updated {
+			updateSql := fmt.Sprintf("update z_device_data_%s set t_t=?, t_rh=? where t_id=? and t_time=?", sn)
+			_, err := o.Raw(updateSql, deviceDataList[i].T_t, deviceDataList[i].T_rh, data.T_id, data.T_time).Exec()
+			if err != nil {
+				log.Println("更新数据失败:", err.Error())
+			}
+		}
+	}
+
+	//  删除报警
 	warningsql := fmt.Sprintf("delete from warning where t_sn='%s' and t_id=%s and t__ut >= '%s' and t__ut <= '%s'", sn, t_id, time_start, time_end)
 	log.Println(sprintf)
 	count, err = o.Raw(warningsql).Exec()
@@ -491,7 +612,7 @@ func DeleteDeviceDataByTime(sn, t_id, time_start, time_end string) (sql.Result,
 			}
 			formatMonth := parse.Format("01")
 			tableName := "warning" + "_" + strconv.Itoa(parse.Year()) + "_" + formatMonth
-			sqls := fmt.Sprintf("delete from %s where t_sn='%s' and t_id=%s and t__ut >= '%s' and t__ut <= '%s'", tableName, sn, t_id, stas[i], ends[i])
+			sqls := fmt.Sprintf("delete from %s where t_sn='%s' and t_id=%s and t__ut >= '%s' and t__ut <= '%s'", tableName, sn, t_id, time_start, time_end)
 			count, err := o.Raw(sqls).Exec()
 			if err != nil {
 				log.Println(err.Error())
@@ -499,6 +620,7 @@ func DeleteDeviceDataByTime(sn, t_id, time_start, time_end string) (sql.Result,
 			}
 		}
 	}
+
 	return count, nil
 }
 
@@ -757,10 +879,10 @@ func Copy_DeviceData(T_sn, T_id string, T_Rh, T_T any, T_Site, CreateTime string
 		fmt.Println(err.Error())
 	}
 }
-func Read_DeviceData_ById_Year_List(SN string) []orm2.ParamsList {
+func Read_DeviceData_ById_Year_List(SN string) []orm.ParamsList {
 	o := orm.NewOrm()
 
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 
 	//sql = "SELECT t_name,t_t,t_rh,t_tl,t_tu,t_rhl,t_rhu,t_site,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_device_data_"+SN+" WHERE "+sql_time+" t_id = "+ strconv.Itoa(T_id) +" ORDER BY t_time DESC "
 	sql := "SELECT DATE_FORMAT(t_time,\"%m\") AS m ,DATE_FORMAT(t_time,\"%d\") AS d FROM z_device_data_" + SN + "  WHERE t_time > '" + strconv.Itoa(time.Now().Year()) + "-0-0 00:00:00' GROUP BY DATE_FORMAT(t_time,\"%m\");"
@@ -773,10 +895,10 @@ func Read_DeviceData_ById_Year_List(SN string) []orm2.ParamsList {
 	//key,_ := strconv.Atoi(maps_z[0][0].(string))
 	return maps_z
 } //
-func Read_DeviceData_ById_Month_List(SN string) []orm2.ParamsList {
+func Read_DeviceData_ById_Month_List(SN string) []orm.ParamsList {
 	o := orm.NewOrm()
 
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 	currentTime := time.Now() //获取当前时间,类型是Go的时间类型Time
 
 	time_x := currentTime.Format("2006-01") + "-00 00:00:00"
@@ -792,7 +914,7 @@ func Read_DeviceData_ById_Month_List(SN string) []orm2.ParamsList {
 }
 func Read_device_sensor_parameter(SN, t_id string) string {
 	o := orm.NewOrm()
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 
 	//sql = "SELECT t_name,t_t,t_rh,t_tl,t_tu,t_rhl,t_rhu,t_site,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i:%s') AS t_time  FROM z_device_data_"+SN+" WHERE "+sql_time+" t_id = "+ strconv.Itoa(T_id) +" ORDER BY t_time DESC "
 	sql := "SELECT ID FROM device_sensor_parameter WHERE `t_sn` = '" + SN + "' AND `t_id` = '" + t_id + "' AND `t__state` = '1' ORDER BY `ID` DESC LIMIT 0,2;"
@@ -811,10 +933,10 @@ func Read_device_sensor_parameter(SN, t_id string) string {
 	//key,_ := strconv.Atoi(maps_z[0][0].(string))
 }
 
-func Read_DeviceData_ById_Day_List(SN string) []orm2.ParamsList {
+func Read_DeviceData_ById_Day_List(SN string) []orm.ParamsList {
 	o := orm.NewOrm()
 
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 	currentTime := time.Now() //获取当前时间,类型是Go的时间类型Time
 
 	time_x := currentTime.Format("2006-01-02") + " 00:00:00"
@@ -829,10 +951,10 @@ func Read_DeviceData_ById_Day_List(SN string) []orm2.ParamsList {
 	return maps_z
 }
 
-func Read_DeviceData_List_GROUP_BY_t_time(SN string, Time_start_ string, Time_end_ string) []orm2.ParamsList {
+func Read_DeviceData_List_GROUP_BY_t_time(SN string, Time_start_ string, Time_end_ string) []orm.ParamsList {
 	o := orm.NewOrm()
 
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 
 	sql_time := ""
 	if len(Time_start_) > 1 {

+ 4 - 4
models/Device/DeviceParameter.go

@@ -4,8 +4,8 @@ import (
 	"ColdP_server/controllers/lib"
 	"ColdP_server/logs"
 	"fmt"
-	"github.com/beego/beego/v2/adapter/orm"
-	orm2 "github.com/beego/beego/v2/client/orm"
+
+	"github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
 	"time"
 )
@@ -150,7 +150,7 @@ func Read_DeviceParameter_SN(T_sn string) (r []DeviceParameter) {
 
 	cond1 = cond.AndCond(cond1).AndCond(cond.And("T_State", 1).Or("T_SendState", 1))
 
-	qs.Limit(1, 0).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
+	qs.Limit(1, 0).SetCond((cond1)).OrderBy("-Id").All(&r)
 
 	return r
 }
@@ -195,7 +195,7 @@ func Read_DeviceParameter_SN_T_SendState_0(T_sn string) (r []DeviceParameter) {
 }
 
 // 获取最新数据
-func Read_DeviceParameter_SN_T_SendState_0_sql() (maps []orm2.ParamsList) {
+func Read_DeviceParameter_SN_T_SendState_0_sql() (maps []orm.ParamsList) {
 	o := orm.NewOrm()
 
 	sql := "SELECT DISTINCT t_sn FROM `cold`.`device_parameter` WHERE `t__send_state` = '0' AND `t__state` = '2'"

+ 17 - 18
models/Device/DeviceSensor.go

@@ -10,8 +10,7 @@ import (
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
-	orm2 "github.com/beego/beego/v2/client/orm"
+	"github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
 	"log"
 	"strconv"
@@ -308,13 +307,13 @@ func Read_DeviceSensorList(admin_r *Account.Admin, T_pid int, T_sn string, T_nam
 		cond1 = cond1.And("T_datashow", 1)
 	}
 
-	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+	_, err := qs.Limit(page_z, offset).SetCond((cond1)).OrderBy("T_sort", "T_id").All(&r)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
 	}
 
-	cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	cnt, err = qs.SetCond((cond1)).Count()
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
@@ -500,13 +499,13 @@ func Read_DeviceSensor_List_T_ClassOr(T_pid int, T_Class_id int, T_sn string, T_
 	}
 
 	fmt.Printf("分页数据:%d ,%d\n\n\n\n", offset, page_z)
-	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+	_, err := qs.Limit(page_z, offset).SetCond((cond1)).OrderBy("T_sort", "T_id").All(&r)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 
 		return
 	}
-	cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	cnt, err = qs.SetCond((cond1)).Count()
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
@@ -547,13 +546,13 @@ func Read_DeviceSensor_List_T_Class(T_pid int, T_Class_id int, T_sn string, T_na
 	}
 
 	fmt.Printf("分页数据:%d ,%d\n\n\n\n", offset, page_z)
-	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+	_, err := qs.Limit(page_z, offset).SetCond((cond1)).OrderBy("T_sort", "T_id").All(&r)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 
 		return
 	}
-	cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	cnt, err = qs.SetCond((cond1)).Count()
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
@@ -748,13 +747,13 @@ func Read_DeviceSensor_List_T_Notice(T_pid int, T_Notice_id int, page int, page_
 		cond1 = cond1.AndCond(cond.And("T_type", T_type))
 	}
 
-	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+	_, err := qs.Limit(page_z, offset).SetCond((cond1)).OrderBy("T_sort", "T_id").All(&r)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
 	}
 
-	cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	cnt, err = qs.SetCond((cond1)).Count()
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
@@ -789,7 +788,7 @@ func Update_Device_To_DeviceSensor(r_Device Device) bool {
 func Read_DeviceSensorManageList(admin_r *Account.Admin, T_pid int, T_name string, T_calss_id, T_en, T_free, T_datashow, T_sort, page, page_z int) (DeviceSensor_p []DeviceSensor_P, cnt int64) {
 	o := orm.NewOrm()
 	var maps []DeviceSensor_P
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 
 	var offset int
 	if page <= 1 {
@@ -899,12 +898,12 @@ func Read_DeviceSensor_List_For_Data(T_pid int, T_name string, T_Class_id, T_typ
 		cond1 = cond1.And("T_name__icontains", T_name).And("T_datashow", 1)
 	}
 
-	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+	_, err := qs.Limit(page_z, offset).SetCond((cond1)).OrderBy("T_sort", "T_id").All(&r)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
 	}
-	cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	cnt, err = qs.SetCond((cond1)).Count()
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
@@ -949,7 +948,7 @@ func ToSensorData(tid, tSp, tTime, tSite string, tt, trh float64, createTime str
 
 // UpdateDeviceSensorDataTemperatureAndHumidity 更新设备探头数据温湿度
 func UpdateDeviceSensorDataTemperatureAndHumidity(sn, id, startTime, endTime string, temperature, humidity float64) {
-	sqlStatement := fmt.Sprintf("update z_device_data_%s set t_t = t_t + %f , t_rh = t_rh + %f where t_id = '%s' and t_time BETWEEN '%s' and '%s'", sn, temperature, humidity, id, startTime, endTime)
+	sqlStatement := fmt.Sprintf("update z_device_data_%s set t_t = t_t + %f , t_rh = t_rh + %f,create_time = NOW()  where t_id = '%s' and t_time BETWEEN '%s' and '%s'", sn, temperature, humidity, id, startTime, endTime)
 	o := orm.NewOrm()
 
 	exec, err := o.Raw(sqlStatement).Exec()
@@ -965,7 +964,7 @@ func UpdateDeviceSensorDataTemperatureAndHumidity(sn, id, startTime, endTime str
 
 // 比例缩放
 func ProportionalScaling(sn, id, startTime, endTime string, temperature, humidity float64) {
-	sqlStatement := fmt.Sprintf("update z_device_data_%s set t_t = t_t * %f , t_rh = t_rh * %f where t_id = '%s'", sn, temperature, humidity, id)
+	sqlStatement := fmt.Sprintf("update z_device_data_%s set t_t = t_t * %f , t_rh = t_rh * %f ,create_time = NOW() where t_id = '%s'", sn, temperature, humidity, id)
 	if len(startTime) > 0 && len(endTime) > 0 {
 		sqlStatement += " AND t_time BETWEEN '" + startTime + "' AND '" + endTime + "'"
 	}
@@ -999,7 +998,7 @@ func SelectDeviceSensorDataListByTimeRange(sn, tId, startTime, endTime string) (
 func UpdateDeviceSensorDataTemperatureAndHumidityRandom(sn, id, startTime, endTime string, ttMax, ttMin, trhMax, trhMin int) {
 
 	//sql语句
-	sqlStatement := fmt.Sprintf("update z_device_data_%s set t_t = t_t + Round(FLOOR(%d + RAND() * (%d - %d + 1)) /100.0,1), t_rh = t_rh + Round(FLOOR(%d + RAND() * (%d - %d + 1)) /100.0,1) where t_id =  '%s' AND t_time BETWEEN '%s' AND '%s'", sn, ttMin, ttMax, ttMin, trhMin, trhMax, trhMin, id, startTime, endTime)
+	sqlStatement := fmt.Sprintf("update z_device_data_%s set t_t = t_t + Round(FLOOR(%d + RAND() * (%d - %d + 1)) /100.0,1), t_rh = t_rh + Round(FLOOR(%d + RAND() * (%d - %d + 1)) /100.0,1),create_time = NOW()  where t_id =  '%s' AND t_time BETWEEN '%s' AND '%s'", sn, ttMin, ttMax, ttMin, trhMin, trhMax, trhMin, id, startTime, endTime)
 	o := orm.NewOrm()
 	exec, err := o.Raw(sqlStatement).Exec()
 	if err != nil {
@@ -1011,7 +1010,7 @@ func UpdateDeviceSensorDataTemperatureAndHumidityRandom(sn, id, startTime, endTi
 
 // UpdateDeviceSensorData 更新设备探头数据
 func UpdateDeviceSensorData(sn, tId string, old, newO DeviceSensorData) {
-	sqlStatement := fmt.Sprintf("update z_device_data_%s set t_t = %f , t_rh = %f where t_id = %s and t_t = %f and t_rh = %f and t_time= '%s'", sn, newO.T_t, newO.T_rh, tId, old.T_t, old.T_rh, old.T_time)
+	sqlStatement := fmt.Sprintf("update z_device_data_%s set t_t = %f , t_rh = %f,create_time = NOW()  where t_id = %s and t_t = %f and t_rh = %f and t_time= '%s'", sn, newO.T_t, newO.T_rh, tId, old.T_t, old.T_rh, old.T_time)
 	fmt.Println("执行SQL:", sqlStatement)
 	o := orm.NewOrm()
 	exec, err := o.Raw(sqlStatement).Exec()
@@ -1075,7 +1074,7 @@ func InsertDeviceSensorData(sn string, d DeviceSensorData, admin Account.ColdpUs
 		fmt.Println(err.Error())
 		if strings.Contains(err.Error(), "Duplicate entry") {
 			//已经存在该条目,更新
-			sqlStatement = fmt.Sprintf("update z_device_data_%s set t_t = %f,t_rh = %f where t_time= '%s' and t_id = %d and t_sp = '%s'", sn, d.T_t, d.T_rh, d.T_time, d.T_id, d.T_sp)
+			sqlStatement = fmt.Sprintf("update z_device_data_%s set t_t = %f,t_rh = %f,create_time = NOW()  where t_time= '%s' and t_id = %d and t_sp = '%s'", sn, d.T_t, d.T_rh, d.T_time, d.T_id, d.T_sp)
 			exec, err := o.Raw(sqlStatement).Exec()
 			if err != nil {
 				fmt.Println("更新错误:", err.Error())

+ 5 - 5
models/Device/DeviceSensorParameter.go

@@ -7,8 +7,8 @@ import (
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
-	orm2 "github.com/beego/beego/v2/client/orm"
+	"github.com/beego/beego/v2/client/orm"
+
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
 	"time"
@@ -164,7 +164,7 @@ func Read_V2DeviceSensorParameter(T_sn string, T_id int) (t DeviceSensorParamete
 	cond := orm.NewCondition()
 	cond = cond.And("T_sn", T_sn).And("T_id", T_id).AndCond(cond.And("T_State", 1).OrCond(cond.And("T_State", 2).And("T_SendState", 1)))
 
-	qs.Limit(1, 0).SetCond((*orm2.Condition)(cond)).OrderBy("-UpdateTime").All(&r)
+	qs.Limit(1, 0).SetCond((cond)).OrderBy("-UpdateTime").All(&r)
 	// 判断是否有数据
 	if len(r) == 0 {
 		return t, false
@@ -186,7 +186,7 @@ func Read_V2DeviceSensorParameter_List(T_sn string, T_id int, T_State int, page_
 	if T_State != 0 {
 		cond = cond.And("T_State", T_State)
 	}
-	qs.Limit(page_z, 0).SetCond((*orm2.Condition)(cond)).OrderBy("-Id").All(&r)
+	qs.Limit(page_z, 0).SetCond((cond)).OrderBy("-Id").All(&r)
 
 	return r
 }
@@ -233,7 +233,7 @@ func Read_DeviceSensorParameter_Map_All(T_sn string, T_id int) (maps map[int]Dev
 
 	cond = cond.And("T_sn", T_sn).And("T_id", T_id).AndCond(cond.And("T_State", 1).OrCond(cond.And("T_State", 2).And("T_SendState", 1)))
 
-	qs.SetCond((*orm2.Condition)(cond)).OrderBy("-Id").All(&list)
+	qs.SetCond((cond)).OrderBy("-Id").All(&list)
 
 	//sql := fmt.Sprintf("SELECT * FROM `device_sensor_parameter` WHERE t_sn='%s' and t_id =%s AND update_time < '2024-09-12 10:00:00' ORDER BY update_time DESC LIMIT 1", T_sn, T_id)
 

+ 2 - 1
models/Product/ProductType.go

@@ -2,7 +2,8 @@ package Product
 
 import (
 	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
+	"github.com/beego/beego/v2/client/orm"
+
 	_ "github.com/go-sql-driver/mysql"
 	"time"
 )

+ 2 - 1
models/Product/ProductUpgrade.go

@@ -2,7 +2,8 @@ package Product
 
 import (
 	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
+	"github.com/beego/beego/v2/client/orm"
+
 	_ "github.com/go-sql-driver/mysql"
 	"time"
 )

+ 13 - 13
models/Warning/Warning.go

@@ -6,8 +6,8 @@ import (
 	"ColdP_server/logs"
 	"errors"
 	"fmt"
-	"github.com/beego/beego/v2/adapter/orm"
-	orm2 "github.com/beego/beego/v2/client/orm"
+	"github.com/beego/beego/v2/client/orm"
+
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
 	"strings"
@@ -445,16 +445,16 @@ func Read_Warning_List(T_pid int, bindSN, tpList []string, Time_start_ string, T
 	var err error
 	if page_z == 9999 {
 		// 获取全部
-		_, err = qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-T_Ut").All(&map_r)
+		_, err = qs.SetCond((cond1)).OrderBy("-T_Ut").All(&map_r)
 	} else {
-		_, err = qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-T_Ut").All(&map_r)
+		_, err = qs.Limit(page_z, offset).SetCond((cond1)).OrderBy("-T_Ut").All(&map_r)
 	}
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
 	}
 
-	cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	cnt, err = qs.SetCond((cond1)).Count()
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
@@ -473,7 +473,7 @@ func Read_Warning_Backups(T_pid int, bindSN []string, T_year string, T_month str
 
 	o := orm.NewOrm()
 	var maps []Warning
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 	// 也可以直接使用 Model 结构体作为表名
 	// Warning_2022_07
 	Wtab := "warning_" + T_year + "_" + T_month
@@ -574,7 +574,7 @@ func Read_Admin_Warning_Backups(T_pids string, T_year string, T_month string, T_
 
 	o := orm.NewOrm()
 	var maps []Warning
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 	// 也可以直接使用 Model 结构体作为表名
 	// Warning_2022_07
 	Wtab := "warning_" + T_year + "_" + T_month
@@ -698,7 +698,7 @@ func Read_Warning_ALL_T_State_Count(T_pid int, T_pids []int, T_handle int, bindS
 	if T_handle == 3 {
 		cond1 = cond1.And("T_State", 3)
 	}
-	cnt, err := qs.SetCond((*orm2.Condition)(cond1)).Count()
+	cnt, err := qs.SetCond((cond1)).Count()
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 	}
@@ -760,7 +760,7 @@ func Read_Warning_List_By_DS_T_type(T_pid int, bindSN []string, DS_T_type int, T
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	var maps []Warning
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 	var offset int
 	if page <= 1 {
 		offset = 0
@@ -831,7 +831,7 @@ func Read_WarningCount_byDay(T_pids []int) (cnt int64) {
 	yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
 	cond = cond.And("T_State__gt", 0).And("T_pid__in", T_pids).And("T_tp__in", RateType).And("CreateTime__gte", yesterday+" 00:00:00").And("CreateTime__lte", yesterday+" 23:59:59")
 
-	cnt, err := qs.SetCond((*orm2.Condition)(cond)).Count()
+	cnt, err := qs.SetCond((cond)).Count()
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 	}
@@ -892,11 +892,11 @@ func Read_Company_Warning_List(T_pids []int, T_tp []string, T_name string, T_han
 		cond1 = cond1.And("T_State", 3)
 	}
 
-	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-T_Ut").All(&map_r)
+	_, err := qs.Limit(page_z, offset).SetCond((cond1)).OrderBy("-T_Ut").All(&map_r)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 	}
-	cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	cnt, err = qs.SetCond((cond1)).Count()
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
@@ -919,7 +919,7 @@ func Read_Company_Warning_Backups(T_pids []int, T_year string, T_month string, T
 
 	o := orm.NewOrm()
 	var maps []Warning
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 	// 也可以直接使用 Model 结构体作为表名
 	// Warning_2022_07
 	Wtab := "warning_" + T_year + "_" + T_month

+ 1 - 1
models/Warning/WarningHandle.go

@@ -3,7 +3,7 @@ package Warning
 import (
 	"ColdP_server/controllers/lib"
 	"ColdP_server/logs"
-	"github.com/beego/beego/v2/adapter/orm"
+	"github.com/beego/beego/v2/client/orm"
 )
 
 type WarningHandle struct {

+ 3 - 3
models/Warning/WarningRate.go

@@ -3,8 +3,8 @@ package Warning
 import (
 	"ColdP_server/controllers/lib"
 	"ColdP_server/logs"
-	"github.com/beego/beego/v2/adapter/orm"
-	orm2 "github.com/beego/beego/v2/client/orm"
+	"github.com/beego/beego/v2/client/orm"
+
 	"time"
 )
 
@@ -82,7 +82,7 @@ func Read_WarningRate_List(T_uuid, T_type string, startTime, endTime string) (r
 		cond = cond.And("T_date__lte", endTime)
 	}
 
-	_, err := qs.SetCond((*orm2.Condition)(cond)).OrderBy("T_date").All(&maps)
+	_, err := qs.SetCond((cond)).OrderBy("T_date").All(&maps)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 	}

+ 4 - 4
models/Warning/WarningSand.go

@@ -121,13 +121,13 @@ func ColAdd_DeviceWarningBy_ID(id int) {
 	design := new(WarningSand)
 	qs := o.QueryTable(design)
 	// 获取时  累加 1
-	qs.Filter("Id", id).Update(orm2.Params{"T_Filter": orm2.ColValue(orm.ColAdd, 1)})
+	qs.Filter("Id", id).Update(orm.Params{"T_Filter": orm2.ColValue(orm.ColAdd, 1)})
 	return
 }
 
 func Read_WarningSand_ALL_T_sn_TIME_Count(T_sn string) (cnt int) {
 	o := orm.NewOrm()
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 
 	now := time.Now()
 	timeStr := now.Format("2006-01-02") + " 00:00:00"
@@ -149,7 +149,7 @@ func Read_WarningSand_ALL_T_sn_TIME_Count(T_sn string) (cnt int) {
 
 func Read_WarningSand_ALL_T_Bind_TIME_Count(user_ Account.Admin, T_sn string) (cnt int) {
 	o := orm.NewOrm()
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 
 	now := time.Now()
 	timeStr := now.Format("2006-01-02") + " 00:00:00"
@@ -209,7 +209,7 @@ func Read_WarningSand_List(T_pid, Ntype int, page int, page_z int) (r []WarningS
 		offset = (page - 1) * page_z
 	}
 	var maps []WarningSand
-	var maps_z []orm2.ParamsList
+	var maps_z []orm.ParamsList
 
 	tableName := fmt.Sprintf("warning_sand_%s", time.Now().Format("200601"))
 

+ 2 - 1
models/Warning/WarningType.go

@@ -5,7 +5,8 @@ import (
 	"ColdP_server/logs"
 	"fmt"
 	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
+	"github.com/beego/beego/v2/client/orm"
+
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
 	"strings"

+ 2 - 0
routers/DataRouter.go

@@ -2,6 +2,7 @@ package routers
 
 import (
 	"ColdP_server/controllers"
+
 	beego "github.com/beego/beego/v2/server/web"
 )
 
@@ -27,6 +28,7 @@ func init() {
 	beego.Router("/Data/GetCompanyBySn", &controllers.DataController{}, "GET:GetCompanyBySn")
 
 	beego.Router("/Data/Device_Sensor_List_Delete_Time", &controllers.DataController{}, "*:Device_Sensor_List_Delete_Time")
+	beego.Router("/Data/Device_Sensor_List_processingExceededSelect_Time", &controllers.DataController{}, "*:Device_Sensor_List_processingExceededSelect_Time")
 
 	//数据生成
 	beego.Router("/Data/DataGenerator_html", &controllers.DataGeneratorController{}, "*:GeneratorHtml")

+ 154 - 0
views/Data/DataList.html

@@ -162,6 +162,8 @@
                         <button class="layui-btn layui-btn-danger" onclick="deleteSelect()">删除</button>
                         <button class="layui-btn layui-btn-danger" onclick="deleteSelectTime()">删除选择时间范围同时删除报警信息
                         </button>
+                        <button class="layui-btn layui-btn-danger" onclick="processingExceededSelectTime()">批量处理超标数据
+                        </button>
                     </div>
                 </div>
 
@@ -259,6 +261,47 @@
             <tbody id="recordTableBody"></tbody>
         </table>
     </div>
+    
+    <!-- 批量处理超标数据参数设置弹窗 -->
+    <div id="paramModal" style="display: none;">
+        <div style="position: fixed;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(0,0,0,0.5);z-index: 9999;">
+            <div style="position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);background-color: white;padding: 20px;border-radius: 10px;min-width: 500px;">
+                <h3 style="margin-top: 0;">批量处理超标数据参数设置</h3>
+                <div style="margin-bottom: 15px;">
+                    <label style="display: inline-block;width: 100px;">温度上限:</label>
+                    <input type="number" id="modalTempUpper" value="8" style="width: 80px;" step="0.1">
+                    <label style="display: inline-block;width: 100px;margin-left: 20px;">变化区间:</label>
+                    <input type="number" id="modalTempUpperMin" value="7.5" style="width: 80px;" step="0.1"> ~
+                    <input type="number" id="modalTempUpperMax" value="7.9" style="width: 80px;" step="0.1">
+                </div>
+                <div style="margin-bottom: 15px;">
+                    <label style="display: inline-block;width: 100px;">温度下限:</label>
+                    <input type="number" id="modalTempLower" value="2" style="width: 80px;" step="0.1">
+                    <label style="display: inline-block;width: 100px;margin-left: 20px;">变化区间:</label>
+                    <input type="number" id="modalTempLowerMin" value="2.2" style="width: 80px;" step="0.1"> ~
+                    <input type="number" id="modalTempLowerMax" value="2.5" style="width: 80px;" step="0.1">
+                </div>
+                <div style="margin-bottom: 15px;">
+                    <label style="display: inline-block;width: 100px;">湿度上限:</label>
+                    <input type="number" id="modalHumidUpper" value="75" style="width: 80px;" step="0.1">
+                    <label style="display: inline-block;width: 100px;margin-left: 20px;">变化区间:</label>
+                    <input type="number" id="modalHumidUpperMin" value="70" style="width: 80px;" step="0.1"> ~
+                    <input type="number" id="modalHumidUpperMax" value="74" style="width: 80px;" step="0.1">
+                </div>
+                <div style="margin-bottom: 20px;">
+                    <label style="display: inline-block;width: 100px;">湿度下限:</label>
+                    <input type="number" id="modalHumidLower" value="35" style="width: 80px;" step="0.1">
+                    <label style="display: inline-block;width: 100px;margin-left: 20px;">变化区间:</label>
+                    <input type="number" id="modalHumidLowerMin" value="34" style="width: 80px;" step="0.1"> ~
+                    <input type="number" id="modalHumidLowerMax" value="39" style="width: 80px;" step="0.1">
+                </div>
+                <div style="text-align: center;">
+                    <button type="button" class="layui-btn layui-btn-normal" onclick="confirmProcessing()" style="margin-right: 10px;">确认处理</button>
+                    <button type="button" class="layui-btn layui-btn-primary" onclick="closeParamModal()">取消</button>
+                </div>
+            </div>
+        </div>
+    </div>
 </div>
 </body>
 <script>
@@ -621,6 +664,117 @@
         }
     }
 
+    //批量处理超标数据
+    function processingExceededSelectTime() {
+        // 获取选择的行
+        console.log("删除选中事件范围")
+        const Time_start = $("#Time_start").val();
+        const Time_end = $("#Time_end").val();
+        console.log("删除选中事件范围", Time_start, Time_end)
+        let checkboxes = $('.checkboxxx');
+        let querys = {
+            t_sn: [],
+            t_id: [],
+            time_start:Time_start,
+            time_end:Time_end,
+        };
+        checkboxes.each(function () {
+            if ($(this).is(':checked')) {
+                const checkboxValue = $(this).val();
+                const values = checkboxValue.split(',');
+                const sn = values[0];
+                const id = values[1];
+                console.log(sn, id);
+                querys.t_sn.push(sn);
+                querys.t_id.push(id);
+            }
+        });
+        if (querys.length === 0) {
+            layui.layer.msg('没有选中要处理的记录!')
+        } else {
+            // 显示参数设置弹窗
+            $("#paramModal").show();
+        }
+    }
+
+    // 确认处理
+    function confirmProcessing() {
+        // 获取自定义参数
+        const tempUpper = $("#modalTempUpper").val();
+        const tempUpperMin = $("#modalTempUpperMin").val();
+        const tempUpperMax = $("#modalTempUpperMax").val();
+        const tempLower = $("#modalTempLower").val();
+        const tempLowerMin = $("#modalTempLowerMin").val();
+        const tempLowerMax = $("#modalTempLowerMax").val();
+        const humidUpper = $("#modalHumidUpper").val();
+        const humidUpperMin = $("#modalHumidUpperMin").val();
+        const humidUpperMax = $("#modalHumidUpperMax").val();
+        const humidLower = $("#modalHumidLower").val();
+        const humidLowerMin = $("#modalHumidLowerMin").val();
+        const humidLowerMax = $("#modalHumidLowerMax").val();
+        
+        // 获取之前保存的查询条件
+        const Time_start = $("#Time_start").val();
+        const Time_end = $("#Time_end").val();
+        let checkboxes = $('.checkboxxx');
+        let querys = {
+            t_sn: [],
+            t_id: [],
+            time_start:Time_start,
+            time_end:Time_end,
+            tempUpper: tempUpper,
+            tempUpperMin: tempUpperMin,
+            tempUpperMax: tempUpperMax,
+            tempLower: tempLower,
+            tempLowerMin: tempLowerMin,
+            tempLowerMax: tempLowerMax,
+            humidUpper: humidUpper,
+            humidUpperMin: humidUpperMin,
+            humidUpperMax: humidUpperMax,
+            humidLower: humidLower,
+            humidLowerMin: humidLowerMin,
+            humidLowerMax: humidLowerMax,
+        };
+        checkboxes.each(function () {
+            if ($(this).is(':checked')) {
+                const checkboxValue = $(this).val();
+                const values = checkboxValue.split(',');
+                const sn = values[0];
+                const id = values[1];
+                console.log(sn, id);
+                querys.t_sn.push(sn);
+                querys.t_id.push(id);
+            }
+        });
+        
+        // 关闭弹窗
+        closeParamModal();
+        
+        layui.layer.confirm(`批量处理超标数据 选中时间: ${Time_start}-------${Time_end} 的数据,同时会删除对应时间报警数据!!!!!!`, function (index) {
+            $.ajax({
+                type: "POST",
+                url: `/Data/Device_Sensor_List_processingExceededSelect_Time`,
+                data: JSON.stringify(querys),
+                contentType: 'application/json;charset=utf-8',
+                success: function (res) {
+                    console.log(res.Code)
+                    if (res.Code === 200) {
+                        layui.layer.msg(`批量处理超标数据 成功`);
+                        get_DeviceSensor_data(0);
+                    } else {
+                        layui.layer.msg(res.Msg);
+                    }
+                }
+            });
+            layui.layer.close(index);
+        });
+    }
+
+    // 关闭参数设置弹窗
+    function closeParamModal() {
+        $("#paramModal").hide();
+    }
+
     //删除当前行,当当前行按钮被点击后
     function deleteOne(e) {
         e = $(e).parent().prevAll()

+ 34 - 18
views/Data/GeneratorData2.html

@@ -136,15 +136,15 @@
                     <div class="layui-clear" style="margin-left: 15px">
                         <button onclick="offset()" class="layui-btn layui-btn-normal layui-btn-sm">偏移(固定)</button>
                         <button onclick="offsetRandom()" class="layui-btn layui-btn-normal layui-btn-sm">偏移(随机)
-                        <button onclick="ProportionalScaling()" class="layui-btn layui-btn-normal layui-btn-sm">等比缩放
-                        </button>
-<!--                        <button onclick="copyFrom()" class="layui-btn layui-btn-normal layui-btn-sm">复制到</button>-->
-                        <button onclick="repair()" class="layui-btn layui-btn-normal layui-btn-sm">补漏</button>
-                        <button onclick="smooth()" class="layui-btn layui-btn-normal layui-btn-sm">平滑</button>
-<!--                        <button onclick="trend()" class="layui-btn layui-btn-normal layui-btn-sm">趋势</button>-->
+                            <button onclick="ProportionalScaling()" class="layui-btn layui-btn-normal layui-btn-sm">等比缩放
+                            </button>
+                                                    <button onclick="copyFrom()" class="layui-btn layui-btn-normal layui-btn-sm">复制到</button>
+                            <button onclick="repair()" class="layui-btn layui-btn-normal layui-btn-sm">补漏</button>
+                            <button onclick="smooth()" class="layui-btn layui-btn-normal layui-btn-sm">平滑</button>
+                            <!--                        <button onclick="trend()" class="layui-btn layui-btn-normal layui-btn-sm">趋势</button>-->
 
-                        <button onclick="Delete()" class="layui-btn layui-btn-normal layui-btn-sm">删除</button>
-<!--                        <button onclick="importExcel()" class="layui-btn layui-btn-normal">导入表格</button>-->
+                            <button onclick="Delete()" class="layui-btn layui-btn-normal layui-btn-sm">删除</button>
+                            <!--                        <button onclick="importExcel()" class="layui-btn layui-btn-normal">导入表格</button>-->
                     </div>
                 </div>
                 <hr>
@@ -861,24 +861,40 @@
                     return
                 }
                 let index2 = loading();
+
                 $.ajax({
-                    type: "POST",
-                    url: "/Data/CopyFromPosition",
+                    type: 'POST',
+                    url: '/Data/Delete',
                     data: JSON.stringify({
-                        copyPosition: copyPosition,
                         sns: getSelectedSn(),
-                        data: timeRange
+                        data: [new Date(copyPosition).getTime(), new Date(copyPosition).getTime() + Math.abs(new Date(timeRange[0]).getTime() - new Date(timeRange[1]).getTime())]
                     }),
+                    contentType: 'application/json;charset=utf-8',
                     processData: false,
-                    contentType: "application/json;charset=utf-8",
                     success: function (rlt) {
-                        layui.layer.close(index2)
-                        if (rlt.Code === 200) {
-                            layui.layer.close(index)
-                        }
-                        layui.layer.msg(rlt.Msg, {icon: 1})
+                        $.ajax({
+                            type: "POST",
+                            url: "/Data/CopyFromPosition",
+                            data: JSON.stringify({
+                                copyPosition: copyPosition,
+                                sns: getSelectedSn(),
+                                data: timeRange
+                            }),
+                            processData: false,
+                            contentType: "application/json;charset=utf-8",
+                            success: function (rlt) {
+                                layui.layer.close(index2)
+                                if (rlt.Code === 200) {
+                                    layui.layer.close(index)
+                                }
+                                layui.layer.msg(rlt.Msg, {icon: 1})
+                            }
+                        })
                     }
                 })
+
+
+
             }
         })
     }

+ 3 - 0
views/Device/Device.html

@@ -560,6 +560,7 @@
                 console.log(Number.parseFloat($('#sdbcall').val()))
                 let t = parseFloat($('#wdbcall').val());
                 let h = parseFloat($('#sdbcall').val());
+
                 let SensorData = {
                     type: 0, // 根据实际情况设置类型
                     sn: Object.keys(selectSns),
@@ -568,8 +569,10 @@
                 };
                 for (let sn in selectSns) {
                     selectSns[sn].forEach(id => {
+                        SensorData.sn.push(sn);
                         SensorData.data.push({id, t, h});
                     });
+
                 }
                 console.log(JSON.stringify(SensorData))
                 $.ajax({

+ 2 - 2
views/User/useredit.html

@@ -251,7 +251,7 @@
                         success: function (result) {
                             let companySelect = $('#companySelect');
                             result.Data.forEach(function (company) {
-                                companySelect.append(`<option value="${company.Id}">${company.T_name}</option>`);
+                                companySelect.append(`<option value="${company.Id}">${company.T_name}[${company.Id}]</option>`);
                             });
                             form.render('select'); // 重新渲染select元素
                             form.render('radio'); // 重新渲染radio元素
@@ -369,7 +369,7 @@
                         success: function (result) {
                             let companySelect = $('#companySelect');
                             result.Data.forEach(function (company) {
-                                companySelect.append(`<option value="${company.Id}">${company.T_name}</option>`);
+                                companySelect.append(`<option value="${company.Id}">${company.T_name}[${company.Id}]</option>`);
                             });
                             form.render('select'); // 重新渲染select元素
                             form.render('radio'); // 重新渲染radio元素

+ 11 - 5
views/home.html

@@ -14,6 +14,7 @@
     <script src="/static/js/jquery.cookie.min.js"></script>
     <script src="/static/lib/layui/layui.js" charset="utf-8"></script>
     <script type="text/javascript" src="/static/js/xadmin.js"></script>
+
 </head>
 <body>
 <div class="layui-container">
@@ -75,17 +76,22 @@
         let adduser;
         let elementsByClassName;
         // 页面加载完成后执行的代码
-        if ({{.T_pid}} == 0 || {{.names}} == 'bzdwgm') {
-            elementsByClassName = document.querySelector(".getCompany");
+        if ( {{.names}} == 'bmhh') {
             adduser = document.querySelector(".adduser");
-            elementsByClassName.style.display = 'block';
             adduser.style.display = 'block';
         } else {
-            elementsByClassName = document.querySelector(".getCompany");
             adduser = document.querySelector(".adduser");
-            elementsByClassName.style.display = 'none';
             adduser.style.display = 'none';
         }
+        if ({{.T_pid}} == 0 ) {
+            elementsByClassName = document.querySelector(".getCompany");
+            elementsByClassName.style.display = 'block';
+
+        } else {
+            elementsByClassName = document.querySelector(".getCompany");
+            elementsByClassName.style.display = 'none';
+
+        }
     }
 
     function GetCompanyBySn() {

+ 70 - 0
views/index.html

@@ -31,6 +31,76 @@
         //     location.href = 'Login'
         // }
     </script>
+    <style>
+        /* 水印容器样式 */
+        .watermark-container {
+            position: fixed;
+            top: 0;
+            left: 0;
+            width: 100vw;
+            height: 100vh;
+            pointer-events: none;
+            z-index: 9999;
+            overflow: hidden;
+        }
+
+        .watermark-text {
+            position: absolute;
+            color: rgba(0, 0, 0, 0.1);
+            font-size: 18px;
+            user-select: none;
+            pointer-events: none;
+            white-space: nowrap;
+            transform-origin: center;
+        }
+    </style>
+    <script>
+        // 创建水印
+    <!--    function createWatermark() {-->
+    <!--        const watermarkContainer = document.createElement('div');-->
+    <!--        watermarkContainer.className = 'watermark-container';-->
+    <!--        watermarkContainer.id = 'watermark';-->
+
+    <!--        const text = '{{.Admin_name}}'; // 你可以修改水印文字-->
+    <!--        const fontSize = 18;-->
+    <!--        const spacing = 150; // 水印之间的间距-->
+    <!--        const angle = -20;   // 倾斜角度-->
+
+    <!--        const containerWidth = window.innerWidth;-->
+    <!--        const containerHeight = window.innerHeight;-->
+
+    <!--        watermarkContainer.style.width = containerWidth + 'px';-->
+    <!--        watermarkContainer.style.height = containerHeight + 'px';-->
+
+    <!--        // 计算水印行列-->
+    <!--        for (let x = 0; x < containerWidth; x += spacing) {-->
+    <!--            for (let y = 0; y < containerHeight; y += spacing) {-->
+    <!--                const watermarkSpan = document.createElement('span');-->
+    <!--                watermarkSpan.className = 'watermark-text';-->
+    <!--                watermarkSpan.textContent = text;-->
+    <!--                watermarkSpan.style.left = x + 'px';-->
+    <!--                watermarkSpan.style.top = y + 'px';-->
+    <!--                watermarkSpan.style.fontSize = fontSize + 'px';-->
+    <!--                watermarkSpan.style.transform = `rotate(${angle}deg)`;-->
+    <!--                watermarkContainer.appendChild(watermarkSpan);-->
+    <!--            }-->
+    <!--        }-->
+
+    <!--        document.body.appendChild(watermarkContainer);-->
+    <!--    }-->
+
+    <!--    // 页面加载完成后创建水印-->
+    <!--    document.addEventListener('DOMContentLoaded', createWatermark);-->
+
+    <!--    // 可选:监听窗口大小变化,重新生成水印(防抖处理可自行加上)-->
+    <!--    window.addEventListener('resize', () => {-->
+    <!--        const oldWatermark = document.getElementById('watermark');-->
+    <!--        if (oldWatermark) {-->
+    <!--            oldWatermark.remove();-->
+    <!--        }-->
+    <!--        createWatermark();-->
+    <!--    });-->
+    <!--</script>-->
 </head>
 <body class="index">
 <!-- 顶部开始 -->