siked 2 years ago
parent
commit
d65d8c6a1b
57 changed files with 2032 additions and 2341 deletions
  1. BIN
      Cold_Api6200
  2. BIN
      Cold_Api6201
  3. 7 7
      Nats/Nats.go
  4. 14 13
      Nats/NatsServer/NatsMqtt.go
  5. 0 1
      Z_Build.bat
  6. 2 2
      conf/app.conf
  7. 19 18
      controllers/Data.go
  8. 212 97
      controllers/Device.go
  9. 8 7
      controllers/Login.go
  10. 78 77
      controllers/User.go
  11. 0 210
      controllers/WebSocket/WebSocket.go
  12. 24 0
      controllers/lib/ReplaceSQL.go
  13. 7 7
      controllers/lib/lib.go
  14. 1 1
      lastupdate.tmp
  15. 88 0
      logs/logx/logx.log
  16. BIN
      logs/logx/logx.log.baiduyun.uploading.cfg
  17. 1 2
      main.go
  18. 47 144
      models/Account/Admin.go
  19. 170 0
      models/Account/Company.go
  20. 33 33
      models/Account/Power.go
  21. 62 0
      models/Account/Tokey.go
  22. 70 0
      models/Account/Vpanel.go
  23. 0 120
      models/Admin/Tokey.go
  24. 29 0
      models/Company/CompanyClass.go
  25. 48 51
      models/Company/CompanyNotice.go
  26. 56 313
      models/Device/Device.go
  27. 75 116
      models/Device/DeviceData.go
  28. 21 1
      models/Device/DeviceLogs.go
  29. 0 33
      models/Device/DeviceNotice.go
  30. 19 22
      models/Device/DeviceParameter.go
  31. 142 177
      models/Device/DeviceSensor.go
  32. 121 41
      models/Device/DeviceSensorParameter.go
  33. 34 2
      models/Device/DeviceTask.go
  34. 26 0
      models/Device/DeviceType.go
  35. 0 136
      models/Device/DeviceWarningList.go
  36. 33 0
      models/GTime.go
  37. 10 12
      models/RawSql/SqlLogs.go
  38. 0 51
      models/System/News.go
  39. 0 165
      models/Template/Template.go
  40. 0 85
      models/Template/TemplateClass.go
  41. 181 59
      models/Warning/Warning.go
  42. 28 26
      models/Warning/WarningSand.go
  43. 44 0
      models/Warning/WarningType.go
  44. 18 0
      models/关系图.txt
  45. 12 30
      routers/Data.go
  46. 48 71
      routers/Device.go
  47. 0 14
      routers/Function.go
  48. 19 0
      routers/GoodsOrder.go
  49. 23 31
      routers/User.go
  50. 7 44
      routers/router.go
  51. 187 0
      routers/v2.go
  52. 0 109
      routers/v3.go
  53. 0 1
      server.pid
  54. 1 6
      tests/default_test.go
  55. 1 1
      views/Data/DataLine.html
  56. 2 4
      views/Data/DataList.html
  57. 4 1
      views/Device/DeviceWarning.html

BIN
Cold_Api6200


BIN
Cold_Api6201


+ 7 - 7
Nats/Nats.go

@@ -4,7 +4,7 @@ import (
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/logs"
-	"Cold_Api/models/Device"
+	"Cold_Api/models/Company"
 	"encoding/xml"
 	"fmt"
 	"github.com/astaxie/beego/cache"
@@ -72,7 +72,7 @@ func NatsInit() {
 			decryptCode := lib.AesDecryptCBC(Content_r, "0123456789012345")
 			decryptCode_int, err := strconv.Atoi(decryptCode)
 			fmt.Println("解密结果:", decryptCode, "  decryptCode_int", decryptCode_int, "  Content_r:", Content_r)
-			R_DeviceClass, err := Device.Read_Class_ById(decryptCode_int)
+			R_DeviceClass, err := Company.Read_Class_ById(decryptCode_int)
 			if err != nil {
 				_ = lib.Nats.Publish(m.Reply, []byte(""))
 				return
@@ -85,7 +85,7 @@ func NatsInit() {
 			}
 
 			R_DeviceClass.T_Notice_wx = R_DeviceClass.T_Notice_wx + person_QRCode.FromUserName + "/重令名|"
-			Device.Update_Class_ById(R_DeviceClass)
+			Company.Update_Class_ById(R_DeviceClass)
 
 			_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceClass.T_name+" 绑定成功!"))
 			return
@@ -121,7 +121,7 @@ func NatsInit() {
 			decryptCode := lib.AesDecryptCBC(Content_r, "0123456789012345")
 			decryptCode_int, err := strconv.Atoi(decryptCode)
 			fmt.Println("解密结果:", decryptCode, "  decryptCode_int", decryptCode_int, "  Content_r:", Content_r)
-			R_DeviceClass, err := Device.Read_Class_ById(decryptCode_int)
+			R_DeviceClass, err := Company.Read_Class_ById(decryptCode_int)
 			if err != nil {
 				_ = lib.Nats.Publish(m.Reply, []byte(""))
 				return
@@ -137,7 +137,7 @@ func NatsInit() {
 			}
 
 			R_DeviceClass.T_Notice_wx2 = R_DeviceClass.T_Notice_wx2 + person_QRCode.FromUserName + "/重令名|"
-			Device.Update_Class_ById(R_DeviceClass)
+			Company.Update_Class_ById(R_DeviceClass)
 			redisCache_NatsServer.Put(person_QRCode.FromUserName, decryptCode_int, 5*time.Minute)
 			_ = lib.Nats.Publish(m.Reply, []byte(R_DeviceClass.T_name+" 扫码成功!请在 5分钟内 回复您的名字,否则将 无法收到报警消息!如回复:张三"))
 			return
@@ -177,7 +177,7 @@ func NatsInit() {
 			return
 		}
 		Class_ById := lib.To_int(redisCache_NatsServer.Get(person_Text.FromUserName))
-		R_DeviceClass, err := Device.Read_Class_ById(Class_ById)
+		R_DeviceClass, err := Company.Read_Class_ById(Class_ById)
 		if err != nil {
 			_ = lib.Nats.Publish(m.Reply, []byte(""))
 			return
@@ -187,7 +187,7 @@ func NatsInit() {
 			person_Text.FromUserName+"/重令名|",
 			person_Text.FromUserName+"/"+person_Text.Content+"|",
 			-1)
-		Device.Update_Class_ById(R_DeviceClass)
+		Company.Update_Class_ById(R_DeviceClass)
 
 		// 删除 缓存
 		redisCache_NatsServer.Delete(person_Text.FromUserName)

+ 14 - 13
Nats/NatsServer/NatsMqtt.go

@@ -62,19 +62,20 @@ func Set_DeviceTask(v Device.Device_task) {
 
 }
 
-func Del_DeviceSensor(v Device.DeviceSensor_Del) {
-	logs.Println("Nats =>", lib.FuncName(), v)
-	b, err := msgpack.Marshal(&v)
-	if err != nil {
-		panic(err)
-	}
-
-	err = lib.Nats.Publish("Del_DeviceSensor", b)
-	if err != nil {
-		logs.Println("Nats =>", lib.FuncName(), err)
-	}
-
-}
+//
+//func Del_DeviceSensor(v Device.DeviceSensor_Del) {
+//	logs.Println("Nats =>", lib.FuncName(), v)
+//	b, err := msgpack.Marshal(&v)
+//	if err != nil {
+//		panic(err)
+//	}
+//
+//	err = lib.Nats.Publish("Del_DeviceSensor", b)
+//	if err != nil {
+//		logs.Println("Nats =>", lib.FuncName(), err)
+//	}
+//
+//}
 
 func Get_Device_Realtime(v string) {
 	logs.Println("Nats =>", lib.FuncName(), v)

+ 0 - 1
Z_Build.bat

@@ -6,4 +6,3 @@ set GO111MODULE=auto
 
 
 go build -o Cold_Api6200 main.go
-go build -o Cold_Api6201 main.go

+ 2 - 2
conf/app.conf

@@ -11,7 +11,7 @@ copyrequestbody = true
 # AdminPort = 8088
 
 # Nats
-NatsServer_Url = "192.168.192.63:4222"
+NatsServer_Url = "127.0.0.1:4222"
 
 
 # Mysql
@@ -43,5 +43,5 @@ Oss = "../../../static"
 Oss_file = "C:\\Users\\Administrator\\Pictures\\oss"
 
 # Panel
-# Panel_url = "http://127.0.0.1:6204/Cold_Panel"
+Panel_url = "http://127.0.0.1:6204/Cold_Panel"
 

+ 19 - 18
controllers/Data.go

@@ -4,9 +4,10 @@ import (
 	"Cold_Api/Nats/NatsServer"
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
-	"Cold_Api/models/Admin"
+	"Cold_Api/models/Account"
 	"Cold_Api/models/Device"
-	"Cold_Api/models/System"
+	"Cold_Api/models/RawSql"
+	"Cold_Api/models/Warning"
 	"fmt"
 	beego "github.com/beego/beego/v2/server/web"
 	"github.com/signintech/gopdf"
@@ -623,19 +624,19 @@ func (c *DataController) DataScreen_Data() {
 	//运输端总数
 	Data["YD_Count"] = Device.Read_Device_ALL_T_Bind_Count(admin_r, "YD", 0)
 	// 仓库报备数
-	Data["KF_Warning_Count"] = Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(admin_r, "KF")
+	Data["KF_Warning_Count"] = Warning.Read_Warning_ALL_T_Bind_TIME_1d_Count(admin_r, "KF")
 	//  运输报警数
-	Data["YD_Warning_Count"] = Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(admin_r, "YD")
+	Data["YD_Warning_Count"] = Warning.Read_Warning_ALL_T_Bind_TIME_1d_Count(admin_r, "YD")
 
 	// 仓库端分公司数据统计  分公司名  终端总数  报警设备数  设备报警率
 	var KF_list []map[string]interface{}
-	Admin_maps := Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id)
+	Admin_maps := Account.Read_Admin_List_Admin_master_ALL(admin_r.Id)
 	for _, v := range Admin_maps {
 		Data_KF := make(map[string]interface{})
 		Data_KF["Name"] = v.Admin_name
 		Device_Count := Device.Read_Device_ALL_T_Bind_Count(v, "KF", 0)
 		Data_KF["Device_Count"] = Device_Count
-		Warning_Count := Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "KF")
+		Warning_Count := Warning.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "KF")
 		Data_KF["Warning_Count"] = Warning_Count
 		// 强制 报警数  不超过 设备数量
 		if Warning_Count > Device_Count {
@@ -655,13 +656,13 @@ func (c *DataController) DataScreen_Data() {
 
 	// 运输端分公司数据统计   分公司名  终端总数  报警设备数  设备报警率
 	var YD_list []map[string]interface{}
-	Admin_maps = Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id)
+	Admin_maps = Account.Read_Admin_List_Admin_master_ALL(admin_r.Id)
 	for _, v := range Admin_maps {
 		Data_YD := make(map[string]interface{})
 		Data_YD["Name"] = v.Admin_name
 		Device_Count := Device.Read_Device_ALL_T_Bind_Count(v, "YD", 0)
 		Data_YD["Device_Count"] = Device_Count
-		Warning_Count := Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "YD")
+		Warning_Count := Warning.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "YD")
 		Data_YD["Warning_Count"] = Warning_Count
 		//fmt.Println("Device_Count:",Device_Count,"Warning_Count:",Warning_Count)
 		if Warning_Count == 0 || Device_Count == 0 {
@@ -676,13 +677,13 @@ func (c *DataController) DataScreen_Data() {
 
 	// 分公司名  终端总数  报警设备数  设备报警率
 	var KF_YD_list []map[string]interface{}
-	Admin_maps = Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id)
+	Admin_maps = Account.Read_Admin_List_Admin_master_ALL(admin_r.Id)
 	for _, v := range Admin_maps {
 		Data_KF_YD := make(map[string]interface{})
 		Data_KF_YD["Name"] = v.Admin_name
 		Device_Count := Device.Read_Device_ALL_T_Bind_Count(v, "", 0)
 		Data_KF_YD["Device_Count"] = Device_Count
-		Warning_Count := Device.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "")
+		Warning_Count := Warning.Read_Warning_ALL_T_Bind_TIME_1d_Count(v, "")
 		Data_KF_YD["Warning_Count"] = Warning_Count
 		//fmt.Println("Device_Count:",Device_Count,"Warning_Count:",Warning_Count)
 		if Warning_Count == 0 || Device_Count == 0 {
@@ -756,7 +757,7 @@ func (c *DataController) DataScreen_Data() {
 
 	// 物流端使用占比
 	var DY_pie_1 []map[string]interface{}
-	Admin_maps = Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id)
+	Admin_maps = Account.Read_Admin_List_Admin_master_ALL(admin_r.Id)
 	for _, Admin_maps_v := range Admin_maps {
 		Day_x := 0
 		Device_l := Device.Read_Device_ALL_bind_T_l_p(Admin_maps_v, 1)
@@ -779,7 +780,7 @@ func (c *DataController) DataScreen_Data() {
 
 	// 药店端使用占比
 	var DY_pie_2 []map[string]interface{}
-	Admin_maps = Admin.Read_Admin_List_Admin_master_ALL(admin_r.Id)
+	Admin_maps = Account.Read_Admin_List_Admin_master_ALL(admin_r.Id)
 	for _, Admin_maps_v := range Admin_maps {
 		Day_x := 0
 		Device_l := Device.Read_Device_ALL_bind_T_l_p(Admin_maps_v, 2)
@@ -1115,7 +1116,7 @@ func (c *DataController) Raw() {
 		strings.Contains(T_SQL_, "insert") ||
 		strings.Contains(T_SQL_, "update") ||
 		strings.Contains(T_SQL_, "delete") {
-		System.Add_SqlLogs(admin_r.Admin_uuid, "Err:"+admin_r.Admin_user, T_SQL)
+		RawSql.Add_SqlLogs(admin_r.Admin_uuid, "Err:"+admin_r.Admin_user, T_SQL)
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.Admin_name + " :你的行为 也被记录"}
 		c.ServeJSON()
 		return
@@ -1123,13 +1124,13 @@ func (c *DataController) Raw() {
 
 	if //!strings.Contains(T_SQL, "Z_DeviceData_") ||
 	!strings.Contains(T_SQL_, "select") {
-		System.Add_SqlLogs(admin_r.Admin_uuid, "Err:"+admin_r.Admin_user, T_SQL)
+		RawSql.Add_SqlLogs(admin_r.Admin_uuid, "Err:"+admin_r.Admin_user, T_SQL)
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Err SQL!", Data: admin_r.Admin_name + " :你的行为 也被记录"}
 		c.ServeJSON()
 		return
 	}
 
-	System.Add_SqlLogs(admin_r.Admin_uuid, "ok", T_SQL)
+	RawSql.Add_SqlLogs(admin_r.Admin_uuid, "ok", T_SQL)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.Read_SqlRaw(T_SQL)}
 	c.ServeJSON()
@@ -1215,9 +1216,9 @@ func (c *DataController) UpDataView3d() {
 	admin_r.Admin_panel_v3d4 = c.GetString("View3dHtml4")
 	admin_r.Admin_panel_v3d5 = c.GetString("View3dHtml5")
 
-	Admin.Update_Admin(admin_r, "Admin_panel_v3d", "Admin_panel_v3d1", "Admin_panel_v3d2", "Admin_panel_v3d3", "Admin_panel_v3d4", "Admin_panel_v3d5")
+	Account.Update_Admin(admin_r, "Admin_panel_v3d", "Admin_panel_v3d1", "Admin_panel_v3d2", "Admin_panel_v3d3", "Admin_panel_v3d4", "Admin_panel_v3d5")
 
-	for _, v := range Admin.Read_Admin_master_next_ALL(admin_r.Id) {
+	for _, v := range Account.Read_Admin_master_next_ALL(admin_r.Id) {
 		v.Admin_panel_v3d = c.GetString("View3dHtml")
 		v.Admin_panel_v3d1 = c.GetString("View3dHtml1")
 		v.Admin_panel_v3d2 = c.GetString("View3dHtml2")
@@ -1225,7 +1226,7 @@ func (c *DataController) UpDataView3d() {
 		v.Admin_panel_v3d4 = c.GetString("View3dHtml4")
 		v.Admin_panel_v3d5 = c.GetString("View3dHtml5")
 
-		Admin.Update_Admin(v, "Admin_panel_v3d", "Admin_panel_v3d1", "Admin_panel_v3d2", "Admin_panel_v3d3", "Admin_panel_v3d4", "Admin_panel_v3d5")
+		Account.Update_Admin(v, "Admin_panel_v3d", "Admin_panel_v3d1", "Admin_panel_v3d2", "Admin_panel_v3d3", "Admin_panel_v3d4", "Admin_panel_v3d5")
 	}
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}

+ 212 - 97
controllers/Device.go

@@ -3,9 +3,11 @@ package controllers
 import (
 	"Cold_Api/Nats/NatsServer"
 	"Cold_Api/conf"
+	"Cold_Api/models/Account"
+	"Cold_Api/models/Company"
+	"Cold_Api/models/Warning"
 
 	"Cold_Api/controllers/lib"
-	"Cold_Api/models/Admin"
 	"Cold_Api/models/Device"
 	"Cold_Api/models/System"
 	"fmt"
@@ -32,7 +34,7 @@ func (c *DeviceController) Device_html() {
 		return
 	}
 	c.Data["Admin_r"] = admin_r
-	c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	c.Data["Admin_Power"], _ = Account.Read_AdminPower_ById(admin_r.Admin_power)
 
 	var Device_lite_r []Device.R_Device
 
@@ -98,7 +100,7 @@ func (c *DeviceController) Device_Parameter_html() {
 		c.Ctx.Redirect(302, "Login")
 		return
 	}
-	c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	c.Data["Admin_Power"], _ = Account.Read_AdminPower_ById(admin_r.Admin_power)
 	c.Data["Admin"] = admin_r
 
 	Sn := c.GetString("Sn")
@@ -152,7 +154,7 @@ func (c *DeviceController) DeviceSensor_List_html() {
 		c.Ctx.Redirect(302, "Login")
 		return
 	}
-	c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	c.Data["Admin_Power"], _ = Account.Read_AdminPower_ById(admin_r.Admin_power)
 
 	Sn := c.GetString("Sn")
 	Id, _ := c.GetInt("Id")
@@ -187,7 +189,7 @@ func (c *DeviceController) DeviceSensor_v2_Parameter_List() {
 	Id, _ := c.GetInt("T_id")
 
 	//c.Data["DeviceSensor"], _ = Device.Read_DeviceSensor_ByTsn_Tid(Sn, Id)
-	DeviceSensorParameter_lite := Device.Read_DeviceSensorParameter_List(Sn, Id)
+	DeviceSensorParameter_lite := Device.Read_V2DeviceSensorParameter_List(Sn, Id, 2, 10)
 	if len(DeviceSensorParameter_lite) == 0 {
 		NatsServer.Read_DeviceSensorParameter(Sn)
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "未同步参数,请检查设备是否正常!"}
@@ -323,7 +325,8 @@ func (c *DeviceController) DeviceSensor_Edit() {
 	// 验证登录
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !b_ {
-		c.Ctx.Redirect(302, "Login")
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey!"}
+		c.ServeJSON()
 		return
 	}
 
@@ -332,7 +335,7 @@ func (c *DeviceController) DeviceSensor_Edit() {
 
 	DeviceSensor, is := Device.Read_DeviceSensor_ByT_sn(Sn, Id)
 	if !is {
-		c.Data["json"] = lib.JSONS{Code: 201, Msg: "信息错误!"}
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "信息错误!"}
 		c.ServeJSON()
 		return
 	}
@@ -673,7 +676,7 @@ func (c *DeviceController) Device_v2_List() {
 	}
 
 	if len(c.GetString("User_uuid")) > 1 {
-		s_, user_r := Admin.Read_Admin_ByAdmin_uuid(c.GetString("User_uuid"))
+		s_, user_r := Account.Read_Admin_ByAdmin_uuid(c.GetString("User_uuid"))
 		if s_ != nil {
 			c.Data["json"] = lib.JSONS{Code: 202, Msg: "Admin_uuid Err!"}
 			c.ServeJSON()
@@ -879,7 +882,7 @@ func (c *DeviceController) Pu_DeviceParameter() {
 		return
 	}
 
-	Admin_Power_, _ := Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	Admin_Power_, _ := Account.Read_AdminPower_ById(admin_r.Admin_power)
 	if Admin_Power_.Power_Device_Parameter_e == 0 {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "! U" + strconv.Itoa(admin_r.Id)}
 		c.ServeJSON()
@@ -965,7 +968,7 @@ func (c *DeviceController) Device_v2_Parameter_Pu() {
 		return
 	}
 
-	Admin_Power_, _ := Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	Admin_Power_, _ := Account.Read_AdminPower_ById(admin_r.Admin_power)
 	if Admin_Power_.Power_Device_Parameter_e == 0 {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "! U" + strconv.Itoa(admin_r.Id)}
 		c.ServeJSON()
@@ -1084,7 +1087,36 @@ func (c *DeviceController) Device_Edit() {
 		}
 	}
 
-	c.Data["json"] = lib.JSONS{Code: 222, Msg: "ok!"}
+	T_VerifyTime := c.GetString("T_VerifyTime")
+	if len(T_VerifyTime) > 5 {
+		stamp, err := time.ParseInLocation("2006-01-02 15:04:05", T_VerifyTime, time.Local)
+		if err == nil {
+			Device_r.T_VerifyTime = stamp
+			Device.Update_Device(Device_r, "T_VerifyTime")
+			System.Add_UserLogs(admin_r.Admin_uuid, "设备管理", "验证时间操作", "验证时间:"+T_VerifyTime)
+		} else {
+			c.Data["json"] = lib.JSONS{Code: 203, Msg: "时间解析错误!" + T_VerifyTime}
+			c.ServeJSON()
+			return
+		}
+
+	}
+
+	T_CalibrationTime := c.GetString("T_CalibrationTime")
+	if len(T_CalibrationTime) > 5 {
+		stamp, err := time.ParseInLocation("2006-01-02 15:04:05", T_CalibrationTime, time.Local)
+		if err == nil {
+			Device_r.T_CalibrationTime = stamp
+			Device.Update_Device(Device_r, "T_CalibrationTime")
+			System.Add_UserLogs(admin_r.Admin_uuid, "设备管理", "校准时间操作", "校准时间:"+T_CalibrationTime)
+		} else {
+			c.Data["json"] = lib.JSONS{Code: 204, Msg: "时间解析错误!" + T_CalibrationTime}
+			c.ServeJSON()
+			return
+		}
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
 	return
 
@@ -1195,7 +1227,7 @@ func (c *DeviceController) Pu_DeviceParameter_Sensor() {
 	T_free, _ := c.GetInt("T_free")
 
 	// 权限 过滤
-	Admin_Power_, _ := Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	Admin_Power_, _ := Account.Read_AdminPower_ById(admin_r.Admin_power)
 	if Admin_Power_.Power_DeviceSensor_Parameter_e == 0 {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "! U" + strconv.Itoa(admin_r.Id)}
 		c.ServeJSON()
@@ -1278,7 +1310,7 @@ func (c *DeviceController) DeviceSensor_v2_Parameter_Pu() {
 	T_hpreu, _ := c.GetFloat("T_hpreu")
 
 	// 权限 过滤
-	Admin_Power_, _ := Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	Admin_Power_, _ := Account.Read_AdminPower_ById(admin_r.Admin_power)
 	if Admin_Power_.Power_DeviceSensor_Parameter_e == 0 {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "! U" + strconv.Itoa(admin_r.Id)}
 		c.ServeJSON()
@@ -1432,7 +1464,7 @@ func (c *DeviceController) DeviceWarning_List_html() {
 	//}
 
 	var cnt int64
-	DeviceWarning_List, cnt := Device.Read_DeviceWarning_1(admin_r, page, "", T_Name, Time_start, Time_end)
+	DeviceWarning_List, cnt := Warning.Read_DeviceWarning_1(admin_r, page, "", T_Name, Time_start, Time_end)
 
 	//for i, v := range DeviceWarning_List {
 	//	DeviceWarning_List[i].T_State = 0
@@ -1463,7 +1495,7 @@ func (c *DeviceController) DeviceWarning_List() {
 
 	type R_JSONS struct {
 		//必须的大写开头
-		DeviceWarning []Device.DeviceWarning
+		DeviceWarning []Warning.DeviceWarning
 		//DeviceWarningclass []Device.DeviceWarningList
 		Num       int
 		Page      int
@@ -1491,7 +1523,7 @@ func (c *DeviceController) DeviceWarning_List() {
 	//}
 
 	var cnt int64
-	r_jsons.DeviceWarning, cnt = Device.Read_DeviceWarning_1(admin_r, page, T_sn, T_Name, Time_start, Time_end)
+	r_jsons.DeviceWarning, cnt = Warning.Read_DeviceWarning_1(admin_r, page, T_sn, T_Name, Time_start, Time_end)
 
 	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
 	r_jsons.Page = int(page)
@@ -1516,7 +1548,7 @@ func (c *DeviceController) V2_DeviceWarning_List() {
 
 	type R_JSONS struct {
 		//必须的大写开头
-		Data      []Device.DeviceWarning
+		Data      []Warning.DeviceWarning_R
 		Num       int64
 		Page      int
 		Page_size int
@@ -1540,13 +1572,17 @@ func (c *DeviceController) V2_DeviceWarning_List() {
 	Time_end := c.GetString("Time_end")
 	T_handle, _ := c.GetInt("T_handle")
 
-	//r_jsons.DeviceWarningclass = Device.Read_DeviceWarningList_All_1()
-	//T_Title := ""
-	//if Class_1 > 0 {
-	//	T_Title = Device.Read_DeviceWarningList_ById(Class_1).T_name
-	//}
+	T_year, _ := c.GetInt("T_year")
+	T_month, _ := c.GetInt("T_month")
+
+	if T_year > 0 && T_month > 0 {
+		// 获取备份
+		r_jsons.Data, r_jsons.Num = Warning.Read_DeviceWarning_Backups(admin_r, strconv.Itoa(T_year), strconv.Itoa(T_month), T_sn, T_id, T_title, T_handle, Time_start, Time_end, page, page_z)
+	} else {
+		// 获取最新
+		r_jsons.Data, r_jsons.Num = Warning.Read_DeviceWarning(admin_r, T_sn, T_id, T_title, T_handle, Time_start, Time_end, page, page_z)
+	}
 
-	r_jsons.Data, r_jsons.Num = Device.Read_DeviceWarning(admin_r, T_sn, T_id, T_title, T_handle, Time_start, Time_end, page, page_z)
 	r_jsons.Page = page
 	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
 
@@ -1583,7 +1619,7 @@ func (c *DeviceController) DeviceWarning_Data_Excel() {
 	//	T_Title = Device.Read_DeviceWarningList_ById(Class_1).T_name
 	//}
 
-	Device_data, _ := Device.Read_DeviceWarning_1(admin_r, 9999, "", T_Name, Time_start, Time_end)
+	Device_data, _ := Warning.Read_DeviceWarning_1(admin_r, 9999, "", T_Name, Time_start, Time_end)
 
 	f := excelize.NewFile() // 设置单元格的值
 	// 这里设置表头
@@ -1667,7 +1703,7 @@ func (c *DeviceController) V2_DeviceWarning_Data_Excel() {
 	Time_end := c.GetString("Time_end")
 	T_handle, _ := c.GetInt("T_handle")
 
-	Device_data, _ := Device.Read_DeviceWarning(admin_r, T_sn, T_id, T_title, T_handle, Time_start, Time_end, 0, 9999)
+	Device_data, _ := Warning.Read_DeviceWarning(admin_r, T_sn, T_id, T_title, T_handle, Time_start, Time_end, 0, 9999)
 
 	f := excelize.NewFile() // 设置单元格的值
 	// 这里设置表头
@@ -1707,7 +1743,7 @@ func (c *DeviceController) V2_DeviceWarning_Data_Excel() {
 		f.SetCellValue("Sheet1", fmt.Sprintf("G%d", line), v.T_Remark)
 		f.SetCellValue("Sheet1", fmt.Sprintf("H%d", line), v.T_Ut)
 		f.SetCellValue("Sheet1", fmt.Sprintf("I%d", line), v.T_Text)
-		f.SetCellValue("Sheet1", fmt.Sprintf("J%d", line), v.UpdateTime)
+		f.SetCellValue("Sheet1", fmt.Sprintf("J%d", line), v.CreateTime)
 
 	}
 	timeStr := time.Now().Format("20060102150405")
@@ -1735,7 +1771,7 @@ func (c *DeviceController) V2_DeviceWarning_Data_Excel() {
 
 func (c *DeviceController) DeviceWarning_() {
 	id, _ := c.GetInt("id")
-	c.Data["T"] = Device.Read_DeviceWarning_ById(id)
+	c.Data["T"] = Warning.Read_DeviceWarning_ById(id)
 	c.Data["id"] = id
 
 	c.TplName = "Device/DeviceWarning-.html"
@@ -1743,7 +1779,7 @@ func (c *DeviceController) DeviceWarning_() {
 func (c *DeviceController) DeviceWarning_log() {
 	id, _ := c.GetInt("id")
 
-	T_Log := Device.Read_DeviceWarning_ById(id).T_Log
+	T_Log := Warning.Read_DeviceWarning_ById(id).T_Log
 
 	T_Log = strings.Replace(T_Log, "\n", "<hr>", -1)
 
@@ -1760,9 +1796,9 @@ func (c *DeviceController) V2_DeviceWarning_Get() {
 	}
 
 	id, _ := c.GetInt("T_id")
-	T := Device.Read_DeviceWarning_ById(id)
+	T := Warning.Read_DeviceWarning_ById(id)
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.DeviceWarningToDeviceWarning_R(T)}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.DeviceWarningToDeviceWarning_R(T)}
 	c.ServeJSON()
 	return
 }
@@ -1782,12 +1818,12 @@ func (c *DeviceController) DeviceWarning_Post() {
 
 	Id, _ := c.GetInt("Id")
 	T_Text := c.GetString("T_Text")
-	t_c := Device.DeviceWarning{
+	t_c := Warning.DeviceWarning{
 		Id:     Id,
 		T_Text: T_Text,
 	}
 
-	Device.Update_DeviceWarning_ById(t_c)
+	Warning.Update_DeviceWarning_ById(t_c)
 
 	System.Add_UserLogs(admin_r.Admin_uuid, "设备管理", "报警处理操作", strconv.Itoa(Id)+"->"+T_Text)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
@@ -1806,16 +1842,16 @@ func (c *DeviceController) V2_DeviceWarning_Post() {
 	Id, _ := c.GetInt("T_id")
 	T_Text := c.GetString("T_Text")
 
-	T := Device.Read_DeviceWarning_ById(Id)
+	T := Warning.Read_DeviceWarning_ById(Id)
 	if T.Id == 0 {
 		c.Data["json"] = lib.JSONS{Code: 206, Msg: "T_id Err!"}
 		c.ServeJSON()
 		return
 	}
 	T.T_Text = T_Text
-	T.T_State = 2
+	T.T_State = 1
 
-	Device.Update_DeviceWarning(T, "T_Text", "T_State")
+	Warning.Update_DeviceWarning(T, "T_Text", "T_State")
 
 	System.Add_UserLogs(admin_r.Admin_uuid, "设备管理", "报警处理操作", strconv.Itoa(Id)+"->"+T_Text)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
@@ -1831,11 +1867,11 @@ func (c *DeviceController) DeviceWarning_Del() {
 	}
 
 	Id, _ := c.GetInt("Id")
-	t_c := Device.DeviceWarning{
+	t_c := Warning.DeviceWarning{
 		Id: Id,
 	}
 
-	Device.Update_DeviceWarning_Delete(t_c)
+	Warning.Update_DeviceWarning_Delete(t_c)
 
 	System.Add_UserLogs(admin_r.Admin_uuid, "设备管理", "报警删除操作", strconv.Itoa(Id))
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
@@ -1852,7 +1888,7 @@ func (c *DeviceController) V2_DeviceWarning_Del() {
 
 	Id, _ := c.GetInt("T_id")
 
-	T := Device.Read_DeviceWarning_ById(Id)
+	T := Warning.Read_DeviceWarning_ById(Id)
 	if T.Id == 0 {
 		c.Data["json"] = lib.JSONS{Code: 206, Msg: "T_id Err!"}
 		c.ServeJSON()
@@ -1860,7 +1896,7 @@ func (c *DeviceController) V2_DeviceWarning_Del() {
 	}
 
 	T.T_State = 0
-	Device.Update_DeviceWarning(T, "T_State")
+	Warning.Update_DeviceWarning(T, "T_State")
 
 	System.Add_UserLogs(admin_r.Admin_uuid, "设备管理", "报警删除操作", strconv.Itoa(Id))
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
@@ -1876,7 +1912,7 @@ func (c *DeviceController) DeviceBind_html() {
 		c.Ctx.Redirect(302, "Login")
 		return
 	}
-	c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	c.Data["Admin_Power"], _ = Account.Read_AdminPower_ById(admin_r.Admin_power)
 	page, _ := c.GetInt("page")
 	println(page)
 	if page < 1 {
@@ -1886,14 +1922,14 @@ func (c *DeviceController) DeviceBind_html() {
 	Name := c.GetString("Name")
 	c.Data["Name"] = Name
 
-	c.Data["Power_List"] = Admin.Read_Power_List_ALL_Power_Administration(0)
-	Adminpower, _ := Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	c.Data["Power_List"] = Account.Read_Power_List_ALL_Power_Administration(0)
+	Adminpower, _ := Account.Read_AdminPower_ById(admin_r.Admin_power)
 	var cnt int64
 	if Adminpower.Power_User_r != 1 {
 		c.Ctx.Redirect(302, "Login")
 		return
 	}
-	c.Data["List"], cnt = Admin.Read_Admin_List_ALL_User(page, Name, admin_r.Id)
+	c.Data["List"], cnt = Account.Read_Admin_List_ALL_User(page, Name, admin_r.Id)
 
 	fmt.Println("cnt:", cnt)
 	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
@@ -1914,7 +1950,7 @@ func (c *DeviceController) DeviceBind_List() {
 		return
 	}
 	if len(c.GetString("Admin_uuid")) > 1 {
-		s_, user_r := Admin.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
+		s_, user_r := Account.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
 		if s_ != nil {
 			c.Data["json"] = lib.JSONS{Code: 202, Msg: "Admin_uuid Err!"}
 			c.ServeJSON()
@@ -1983,7 +2019,7 @@ func (c *DeviceController) DeviceBind_Sensor_List() {
 		return
 	}
 	if len(c.GetString("Admin_uuid")) > 1 {
-		s_, user_r := Admin.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
+		s_, user_r := Account.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
 		if s_ != nil {
 			c.Data["json"] = lib.JSONS{Code: 202, Msg: "Admin_uuid Err!"}
 			c.ServeJSON()
@@ -2075,7 +2111,7 @@ func (c *DeviceController) DeviceBind_Add_All() {
 		c.ServeJSON()
 		return
 	}
-	s_, user_r := Admin.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
+	s_, user_r := Account.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
 	if s_ != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Admin_uuid Err!"}
 		c.ServeJSON()
@@ -2114,7 +2150,7 @@ func (c *DeviceController) DeviceBind_Add() {
 		c.ServeJSON()
 		return
 	}
-	s_, user_r := Admin.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
+	s_, user_r := Account.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
 	if s_ != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Admin_uuid Err!"}
 		c.ServeJSON()
@@ -2158,7 +2194,7 @@ func (c *DeviceController) V2_DeviceBind_Add() {
 		c.ServeJSON()
 		return
 	}
-	s_, user_r := Admin.Read_Admin_ByAdmin_uuid(c.GetString("T_uuid"))
+	s_, user_r := Account.Read_Admin_ByAdmin_uuid(c.GetString("T_uuid"))
 	if s_ != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Admin_uuid Err!"}
 		c.ServeJSON()
@@ -2202,7 +2238,7 @@ func (c *DeviceController) DeviceBind_Del() {
 		c.ServeJSON()
 		return
 	}
-	s_, user_r := Admin.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
+	s_, user_r := Account.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
 	if s_ != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Admin_uuid Err!"}
 		c.ServeJSON()
@@ -2246,7 +2282,7 @@ func (c *DeviceController) V2_DeviceBind_Del() {
 		c.ServeJSON()
 		return
 	}
-	s_, user_r := Admin.Read_Admin_ByAdmin_uuid(c.GetString("T_uuid"))
+	s_, user_r := Account.Read_Admin_ByAdmin_uuid(c.GetString("T_uuid"))
 	if s_ != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Admin_uuid Err!"}
 		c.ServeJSON()
@@ -2360,7 +2396,7 @@ func (c *DeviceController) DeviceClass_() {
 		return
 	}
 	id, _ := c.GetInt("id")
-	c.Data["T"], _ = Device.Read_Class_ById(id)
+	c.Data["T"], _ = Company.Read_Class_ById(id)
 	c.Data["id"] = id
 	c.Data["Admin_r"] = admin_r
 	c.TplName = "Device/DeviceClass-.html"
@@ -2376,7 +2412,7 @@ func (c *DeviceController) V2_Class_Get() {
 	}
 
 	id, _ := c.GetInt("T_id")
-	T, err := Device.Read_Class_ById(id)
+	T, err := Company.Read_Class_ById(id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "T_id Err!"}
 		c.ServeJSON()
@@ -2413,16 +2449,15 @@ func (c *DeviceController) V2_Class_Get() {
 	r_jsons.T_Notice_mailbox = T.T_Notice_mailbox
 	r_jsons.T_Notice_mechanism = T.T_Notice_mechanism
 
-	// 测试环境!!!!!!!!!!!!!!!!!!!
-	//T_calss_id_str, _ := NatsServer.Wx_GenerateQRCode("-|" + lib.AesEncryptCBC(strconv.Itoa(T.Id), "0123456789012345") + "|- @宝智达 微信公众号通知")
-	//if len(T_calss_id_str) > 0 {
-	//	r_jsons.T_QRCode = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + T_calss_id_str
-	//}
-	//
-	//T_calss_id_str, _ = NatsServer.Wx_GenerateQRCode2("-|" + lib.AesEncryptCBC(strconv.Itoa(T.Id), "0123456789012345") + "|- @宝智达 微信公众号通知")
-	//if len(T_calss_id_str) > 0 {
-	//	r_jsons.T_QRCode2 = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + T_calss_id_str
-	//}
+	T_calss_id_str, _ := NatsServer.Wx_GenerateQRCode("-|" + lib.AesEncryptCBC(strconv.Itoa(T.Id), "0123456789012345") + "|- @宝智达 微信公众号通知")
+	if len(T_calss_id_str) > 0 {
+		r_jsons.T_QRCode = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + T_calss_id_str
+	}
+
+	T_calss_id_str, _ = NatsServer.Wx_GenerateQRCode2("-|" + lib.AesEncryptCBC(strconv.Itoa(T.Id), "0123456789012345") + "|- @宝智达 微信公众号通知")
+	if len(T_calss_id_str) > 0 {
+		r_jsons.T_QRCode2 = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + T_calss_id_str
+	}
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()
@@ -2463,11 +2498,11 @@ func (c *DeviceController) DeviceClass_Post() {
 		t_c.T_Notice_phone = ""
 		t_c.T_Notice_message = ""
 		t_c.T_Notice_mailbox = ""
-		t_c.T_Notice_mechanism = Device.Read_DeviceWarningList_All_T_Notice_mechanism()
-		Device.Add_Class(t_c)
+		t_c.T_Notice_mechanism = Warning.Read_DeviceWarningList_All_T_Notice_mechanism()
+		Company.Add_Class(t_c)
 	} else {
 		t_c.T_uuid = admin_r.Admin_uuid
-		Device.Update_Class_ById(t_c)
+		Company.Update_Class_ById(t_c)
 	}
 	System.Add_UserLogs_T(admin_r.Admin_uuid, "设备管理", "分类操作", t_c)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
@@ -2488,16 +2523,16 @@ func (c *DeviceController) V2_Class_Add() {
 	t_c := Device.DeviceClass{
 		T_uuid:             admin_r.Admin_uuid,
 		T_name:             T_name,
-		T_Notice_mechanism: Device.Read_DeviceWarningList_All_T_Notice_mechanism(),
+		T_Notice_mechanism: Warning.Read_DeviceWarningList_All_T_Notice_mechanism(),
 		T_State:            1,
 	}
 
-	Device.Add_Class(t_c)
+	Company.Add_Class(t_c)
 	System.Add_UserLogs_T(admin_r.Admin_uuid, "分类管理", "分类添加", t_c)
 
 	// 同步分类
 	go func() {
-		DataList, _ := Admin.Read_v2_Admin_List(admin_r.Id, "", 0, 9999)
+		DataList, _ := Account.Read_v2_Admin_List(admin_r.Id, "", 0, 9999)
 		for _, v := range DataList {
 			if v.Admin_power > 6 {
 				V2_Class_Syn(admin_r, v)
@@ -2529,7 +2564,7 @@ func (c *DeviceController) V2_Class_Edit() {
 	T_Notice_mailbox := c.GetString("T_Notice_mailbox")
 	T_Notice_mechanism := c.GetString("T_Notice_mechanism")
 
-	R_DeviceClass, err := Device.Read_Class_ById(Id)
+	R_DeviceClass, err := Company.Read_Class_ById(Id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "T_id Err!"}
 		c.ServeJSON()
@@ -2564,13 +2599,13 @@ func (c *DeviceController) V2_Class_Edit() {
 		R_DeviceClass.T_Notice_mechanism = T_Notice_mechanism
 	}
 
-	Device.Update_Class(R_DeviceClass, "T_name", "T_Notice_wx", "T_Notice_wx2", "T_Notice_phone", "T_Notice_message", "T_Notice_mailbox", "T_Notice_mechanism")
+	Company.Update_Class(R_DeviceClass, "T_name", "T_Notice_wx", "T_Notice_wx2", "T_Notice_phone", "T_Notice_message", "T_Notice_mailbox", "T_Notice_mechanism")
 
 	System.Add_UserLogs_T(admin_r.Admin_uuid, "设备管理", "分类操作", R_DeviceClass)
 
 	// 同步分类
 	go func() {
-		DataList, _ := Admin.Read_v2_Admin_List(admin_r.Id, "", 0, 9999)
+		DataList, _ := Account.Read_v2_Admin_List(admin_r.Id, "", 0, 9999)
 		for _, v := range DataList {
 			if v.Admin_power > 6 {
 				V2_Class_Syn(admin_r, v)
@@ -2593,7 +2628,7 @@ func (c *DeviceController) DeviceWarningList_T_Tips() {
 		return
 	}
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.Read_DeviceWarningList_All_T_Notice_mechanism()}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.Read_DeviceWarningList_All_T_Notice_mechanism()}
 	c.ServeJSON()
 	return
 }
@@ -2609,7 +2644,7 @@ func (c *DeviceController) DeviceClass_Del() {
 
 	id, _ := c.GetInt("Id")
 
-	class_r, err := Device.Read_Class_ById(id)
+	class_r, err := Company.Read_Class_ById(id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "id Err!"}
 		c.ServeJSON()
@@ -2620,7 +2655,7 @@ func (c *DeviceController) DeviceClass_Del() {
 		c.ServeJSON()
 		return
 	}
-	Device.Delete_Class_ById(id)
+	Company.Delete_Class_ById(id)
 
 	DeviceSensor_class_list := Device.Read_DeviceSensor_ALL_class_1(id)
 	for _, v := range DeviceSensor_class_list {
@@ -2643,7 +2678,7 @@ func (c *DeviceController) V2_Class_Del() {
 
 	id, _ := c.GetInt("T_id")
 
-	class_r, err := Device.Read_Class_ById(id)
+	class_r, err := Company.Read_Class_ById(id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "id Err!"}
 		c.ServeJSON()
@@ -2654,7 +2689,7 @@ func (c *DeviceController) V2_Class_Del() {
 		c.ServeJSON()
 		return
 	}
-	Device.Delete_Class_ById(id)
+	Company.Delete_Class_ById(id)
 
 	DeviceSensor_class_list := Device.Read_DeviceSensor_ALL_class_1(id)
 	for _, v := range DeviceSensor_class_list {
@@ -2664,7 +2699,7 @@ func (c *DeviceController) V2_Class_Del() {
 
 	// 同步分类
 	go func() {
-		DataList, _ := Admin.Read_v2_Admin_List(admin_r.Id, "", 0, 9999)
+		DataList, _ := Account.Read_v2_Admin_List(admin_r.Id, "", 0, 9999)
 		for _, v := range DataList {
 			if v.Admin_power > 6 {
 				V2_Class_Syn(admin_r, v)
@@ -2686,7 +2721,7 @@ func (c *DeviceController) DeviceClass_Syn() {
 		c.ServeJSON()
 		return
 	}
-	s_, user_r := Admin.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
+	s_, user_r := Account.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
 	if s_ != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Admin_uuid Err!"}
 		c.ServeJSON()
@@ -2698,7 +2733,7 @@ func (c *DeviceController) DeviceClass_Syn() {
 	for _, v := range class_r {
 		fmt.Println("清掉:", v.Id)
 		// 删除分类
-		Device.Delete_Class_ById(v.Id)
+		Company.Delete_Class_ById(v.Id)
 		// 删除 传感器分类
 		Device.DeviceSensor_T_Calss_ALL_Del(v.Id)
 		//Device.DeviceSensor_T_Bind_ALL_Del(user_r)
@@ -2720,7 +2755,7 @@ func (c *DeviceController) DeviceClass_Syn() {
 		}
 		num_x = num_x + 1
 		// 添加分类
-		cid, err := Device.Add_Class(t_c)
+		cid, err := Company.Add_Class(t_c)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 200, Msg: "Add_Class E!"}
 			c.ServeJSON()
@@ -2747,7 +2782,7 @@ func (c *DeviceController) DeviceClass_Syn() {
 	return
 }
 
-func V2_Class_Syn(admin_r Admin.Admin, user_r Admin.Admin) {
+func V2_Class_Syn(admin_r Account.Admin, user_r Account.Admin) {
 
 	// 先全部 清掉
 	Device.Device_Bind_ALL_Del(user_r)
@@ -2755,7 +2790,7 @@ func V2_Class_Syn(admin_r Admin.Admin, user_r Admin.Admin) {
 	for _, v := range class_r {
 		fmt.Println("清掉:", v.Id)
 		// 删除分类
-		Device.Delete_Class_ById(v.Id)
+		Company.Delete_Class_ById(v.Id)
 		// 删除 传感器分类
 		Device.DeviceSensor_T_Calss_ALL_Del(v.Id)
 		//Device.DeviceSensor_T_Bind_ALL_Del(user_r)
@@ -2777,7 +2812,7 @@ func V2_Class_Syn(admin_r Admin.Admin, user_r Admin.Admin) {
 		}
 		num_x = num_x + 1
 		// 添加分类
-		cid, err := Device.Add_Class(t_c)
+		cid, err := Company.Add_Class(t_c)
 		if err != nil {
 			return
 		}
@@ -2849,7 +2884,7 @@ func (c *DeviceController) DeviceClassBind_List() {
 	//c.Data["Class_1"] = Class_1
 	////c.Data["Name"] = Name
 	//c.Data["T_sn"] = T_sn
-	R_DeviceClass, err := Device.Read_Class_ById(T_calss_id)
+	R_DeviceClass, err := Company.Read_Class_ById(T_calss_id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 205, Msg: "T_class_id Err!"}
 		c.ServeJSON()
@@ -2917,7 +2952,7 @@ func (c *DeviceController) DeviceSensor_v2_List() {
 	}
 
 	if len(c.GetString("User_uuid")) > 1 {
-		s_, user_r := Admin.Read_Admin_ByAdmin_uuid(c.GetString("User_uuid"))
+		s_, user_r := Account.Read_Admin_ByAdmin_uuid(c.GetString("User_uuid"))
 		if s_ != nil {
 			c.Data["json"] = lib.JSONS{Code: 202, Msg: "Admin_uuid Err!"}
 			c.ServeJSON()
@@ -2927,7 +2962,7 @@ func (c *DeviceController) DeviceSensor_v2_List() {
 	}
 
 	if T_calss_id > 0 {
-		R_DeviceClass, err := Device.Read_Class_ById(T_calss_id)
+		R_DeviceClass, err := Company.Read_Class_ById(T_calss_id)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 205, Msg: "T_class_id Err!"}
 			c.ServeJSON()
@@ -2972,7 +3007,7 @@ func (c *DeviceController) DeviceClassBind_Add() {
 		c.ServeJSON()
 		return
 	}
-	R_DeviceClass, err := Device.Read_Class_ById(T_class_id)
+	R_DeviceClass, err := Company.Read_Class_ById(T_class_id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 205, Msg: "T_class_id Err!"}
 		c.ServeJSON()
@@ -3019,7 +3054,7 @@ func (c *DeviceController) V2_ClassBind_Add() {
 		c.ServeJSON()
 		return
 	}
-	R_DeviceClass, err := Device.Read_Class_ById(T_class_id)
+	R_DeviceClass, err := Company.Read_Class_ById(T_class_id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 205, Msg: "T_class_id Err!"}
 		c.ServeJSON()
@@ -3033,13 +3068,13 @@ func (c *DeviceController) V2_ClassBind_Add() {
 
 	DeviceSensor_class_list := Device.Read_DeviceSensor_ALL_T_sn_T_id_class_1(T_sn, T_id, T_class_id)
 	if len(DeviceSensor_class_list) > 0 {
-		c.Data["json"] = lib.JSONS{Code: 203, Msg: "ok!"}
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "重复绑定!"}
 		c.ServeJSON()
 		return
 	}
 	// 同步分类
 	go func() {
-		DataList, _ := Admin.Read_v2_Admin_List(admin_r.Id, "", 0, 9999)
+		DataList, _ := Account.Read_v2_Admin_List(admin_r.Id, "", 0, 9999)
 		for _, v := range DataList {
 			if v.Admin_power > 6 {
 				V2_Class_Syn(admin_r, v)
@@ -3078,7 +3113,7 @@ func (c *DeviceController) DeviceClassBind_Del() {
 		c.ServeJSON()
 		return
 	}
-	R_DeviceClass, err := Device.Read_Class_ById(T_class_id)
+	R_DeviceClass, err := Company.Read_Class_ById(T_class_id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 205, Msg: "T_class_id Err!"}
 		c.ServeJSON()
@@ -3101,7 +3136,7 @@ func (c *DeviceController) DeviceClassBind_Del() {
 	System.Add_UserLogs(admin_r.Admin_uuid, "设备管理", "分类删除绑定操作", strconv.Itoa(T_class_id)+"->"+T_sn+"-"+strconv.Itoa(T_id))
 
 	// 同步分类
-	DataList, _ := Admin.Read_v2_Admin_List(admin_r.Id, "", 0, 9999)
+	DataList, _ := Account.Read_v2_Admin_List(admin_r.Id, "", 0, 9999)
 	for _, v := range DataList {
 		V2_Class_Syn(admin_r, v)
 	}
@@ -3133,7 +3168,7 @@ func (c *DeviceController) V2_ClassBind_Del() {
 		c.ServeJSON()
 		return
 	}
-	R_DeviceClass, err := Device.Read_Class_ById(T_class_id)
+	R_DeviceClass, err := Company.Read_Class_ById(T_class_id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 205, Msg: "T_class_id Err!"}
 		c.ServeJSON()
@@ -3147,7 +3182,7 @@ func (c *DeviceController) V2_ClassBind_Del() {
 
 	DeviceSensor_class_list := Device.Read_DeviceSensor_ALL_T_sn_T_id_class_1(T_sn, T_id, T_class_id)
 	if len(DeviceSensor_class_list) == 0 {
-		c.Data["json"] = lib.JSONS{Code: 203, Msg: "ok!"}
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 		c.ServeJSON()
 		return
 	}
@@ -3157,7 +3192,7 @@ func (c *DeviceController) V2_ClassBind_Del() {
 
 	// 同步分类
 	go func() {
-		DataList, _ := Admin.Read_v2_Admin_List(admin_r.Id, "", 0, 9999)
+		DataList, _ := Account.Read_v2_Admin_List(admin_r.Id, "", 0, 9999)
 		for _, v := range DataList {
 			if v.Admin_power > 6 {
 				V2_Class_Syn(admin_r, v)
@@ -3182,7 +3217,7 @@ func (c *DeviceController) Get_DeviceClassId() {
 
 	T_class_id, _ := c.GetInt("T_class_id")
 
-	R_DeviceClass, err := Device.Read_Class_ById(T_class_id)
+	R_DeviceClass, err := Company.Read_Class_ById(T_class_id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_class_id Err!"}
 		c.ServeJSON()
@@ -3222,6 +3257,54 @@ func (c *DeviceController) DeviceTask_List() {
 }
 
 // 任务列表
+func (c *DeviceController) V2_DeviceTask_List() {
+	// 验证登录
+	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 {
+		//必须的大写开头
+		Data      []Device.DeviceTask
+		Num       int64
+		Page      int
+		Page_size int
+	}
+	var r_jsons R_JSONS
+
+	page, _ := c.GetInt("page")
+	println(page)
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	T_sn := c.GetString("T_sn")
+	Time_start := c.GetString("Time_start")
+	Time_end := c.GetString("Time_end")
+
+	if len(T_sn) < 6 {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "T_sn!!!"}
+		c.ServeJSON()
+		return
+	}
+
+	r_jsons.Data, r_jsons.Num = Device.Read_V2_DeviceTask_All(T_sn, Time_start, Time_end, page, page_z)
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+
+}
+
+// 任务列表
 func (c *DeviceController) DeviceTask_Post() {
 	// 验证登录
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
@@ -3384,7 +3467,7 @@ func (c *DeviceController) DeviceLogs() {
 	c.Data["T_sn"] = T_sn
 
 	var cnt int64
-	c.Data["List"], cnt = System.Read_DeviceLogs_ALL(page, T_sn)
+	c.Data["List"], cnt = Device.Read_DeviceLogs_ALL(page, T_sn)
 	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
 	c.Data["Page"] = page
 	c.Data["Page_size"] = page_size
@@ -3393,3 +3476,35 @@ func (c *DeviceController) DeviceLogs() {
 
 	c.TplName = "Device/DeviceLogs.html"
 }
+
+// 列表 - 设备日志
+func (c *DeviceController) V2DeviceLogs() {
+	type R_JSONS struct {
+		//必须的大写开头
+		Data      []Device.DeviceLogs
+		Num       int64
+		Page      int
+		Page_size int
+	}
+	var r_jsons R_JSONS
+
+	page, _ := c.GetInt("page")
+	println(page)
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	T_sn := c.GetString("T_sn")
+
+	r_jsons.Data, r_jsons.Num = Device.Read_V2DeviceLogs_ALL(T_sn, page, page_z)
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}

+ 8 - 7
controllers/Login.go

@@ -3,6 +3,7 @@ package controllers
 import (
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
+	"Cold_Api/models/Account"
 	"Cold_Api/models/Admin"
 	"Cold_Api/models/System"
 	beego "github.com/beego/beego/v2/server/web"
@@ -24,12 +25,12 @@ func (c *AdminController) Login_verification() {
 	Admin_pass := c.GetString("bzd_password")
 
 	println("Login_verification", Admin_user, Admin_pass)
-	err, admin_r := Admin.ReadLogin_verification(Admin_user, Admin_pass)
+	err, admin_r := Account.ReadLogin_verification(Admin_user, Admin_pass)
 
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "账号密码错误!"}
 	} else {
-		User_tokey := Admin.Add_Tokey_Set(admin_r.Admin_uuid)
+		User_tokey := Account.Add_Tokey_Set(admin_r.Admin_uuid)
 		c.Ctx.SetCookie("User_tokey", User_tokey, time.Second*60*60)
 		c.Data["json"] = lib.JSONS{Code: 200, Msg: "OK!", Data: User_tokey}
 
@@ -59,11 +60,11 @@ func (c *AdminController) Index() {
 	} else if admin_r.Admin_master == 1 {
 		c.Data["Admin_master"] = "企业"
 	} else {
-		Admin_m, _ := Admin.Read_Admin_ById(admin_r.Admin_master)
+		Admin_m, _ := Account.Read_Admin_ById(admin_r.Admin_master)
 		c.Data["Admin_master"] = Admin_m.Admin_name
 	}
 
-	c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	c.Data["Admin_Power"], _ = Account.Read_AdminPower_ById(admin_r.Admin_power)
 
 	// 消息
 	AdminNews_list := System.Read_AdminNews_all_1(admin_r.Admin_uuid)
@@ -93,10 +94,10 @@ func (c *AdminController) Home() {
 	} else if admin_r.Admin_master == 1 {
 		c.Data["Admin_master"] = "企业"
 	} else {
-		Admin_m, _ := Admin.Read_Admin_ById(admin_r.Admin_master)
+		Admin_m, _ := Account.Read_Admin_ById(admin_r.Admin_master)
 		c.Data["Admin_master"] = Admin_m.Admin_name
 	}
-	c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	c.Data["Admin_Power"], _ = Account.Read_AdminPower_ById(admin_r.Admin_power)
 	if admin_r.Admin_master <= 1 {
 		FlowPoolSharingInfo, _ := lib.Yidong_group_data_margin()
 
@@ -143,7 +144,7 @@ func (c *AdminController) Info() {
 		return
 	}
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok", Data: Admin.Admin_To_Admin_R(user_r)}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok", Data: Account.Admin_To_Admin_R(user_r)}
 	c.ServeJSON()
 	return
 }

+ 78 - 77
controllers/User.go

@@ -3,6 +3,7 @@ package controllers
 import (
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
+	"Cold_Api/models/Account"
 	"Cold_Api/models/Admin"
 	"Cold_Api/models/System"
 	"crypto/md5"
@@ -38,14 +39,14 @@ func (c *UserController) Admin_html() {
 		page = 1
 	}
 
-	c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	c.Data["Admin_Power"], _ = Account.Read_AdminPower_ById(admin_r.Admin_power)
 
 	Name := c.GetString("Name")
 	c.Data["Name"] = Name
-	c.Data["Power_List"] = Admin.Read_Power_List_ALL_Power_Administration(1)
+	c.Data["Power_List"] = Account.Read_Power_List_ALL_Power_Administration(1)
 
 	var cnt int64
-	c.Data["List"], cnt = Admin.Read_Admin_List_ALL_Admin_master(page, Name, 0)
+	c.Data["List"], cnt = Account.Read_Admin_List_ALL_Admin_master(page, Name, 0)
 	fmt.Println("cnt:", cnt)
 	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
 	c.Data["Page"] = page
@@ -87,12 +88,12 @@ func (c *UserController) Admin_() {
 	}
 	id, _ := c.GetInt("id")
 	c.Data["id"] = id
-	c.Data["Power_List"] = Admin.Read_Power_List_ALL_Power_Administration(1)
+	c.Data["Power_List"] = Account.Read_Power_List_ALL_Power_Administration(1)
 
 	Admin_uuid := c.GetString("Admin_uuid")
 	c.Data["Admin_uuid"] = Admin_uuid
 	if len(Admin_uuid) > 0 {
-		c.Data["Date"], _ = Admin.Read_Admin_ByUuid(Admin_uuid)
+		c.Data["Date"], _ = Account.Read_Admin_ByUuid(Admin_uuid)
 	}
 
 	c.TplName = "User/Admin-.html"
@@ -121,7 +122,7 @@ func (c *UserController) Admin_Post() {
 	Admin_text := c.GetString("Admin_text")
 	Admin_gender, _ := c.GetInt("Admin_gender")
 	Admin_power, _ := c.GetInt("Admin_power")
-	var_ := Admin.Admin{
+	var_ := Account.Admin{
 		Admin_uuid:       uuid.NewV4().String(),
 		Admin_name:       Admin_name,
 		Admin_master:     admin_r.Admin_master,
@@ -139,7 +140,7 @@ func (c *UserController) Admin_Post() {
 	if len(Admin_uuid) > 0 {
 		var_.Admin_uuid = Admin_uuid
 
-		err := Admin.Update_Admin_ById_Basics(var_)
+		err := Account.Update_Admin_ById_Basics(var_)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
 			c.ServeJSON()
@@ -154,14 +155,14 @@ func (c *UserController) Admin_Post() {
 		var_.Admin_pass = s
 		var_.Admin_master = 0
 
-		err, _ := Admin.Read_Admin_Admin_user(Admin_user)
+		err, _ := Account.Read_Admin_Admin_user(Admin_user)
 		if err == nil {
 			c.Data["json"] = lib.JSONS{Code: 302, Msg: "账户重复!"}
 			c.ServeJSON()
 			return
 		}
 
-		_, err = Admin.Add_Admin(var_)
+		_, err = Account.Add_Admin(var_)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
 			c.ServeJSON()
@@ -197,7 +198,7 @@ func (c *UserController) Admin_Del() {
 
 	Admin_uuid := c.GetString("Admin_uuid")
 	if len(Admin_uuid) > 0 {
-		admin_r_lod, err := Admin.Read_Admin_ByUuid(Admin_uuid)
+		admin_r_lod, err := Account.Read_Admin_ByUuid(Admin_uuid)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
 			c.ServeJSON()
@@ -209,7 +210,7 @@ func (c *UserController) Admin_Del() {
 			return
 		}
 		admin_r_lod.T_State = 0
-		Admin.Update_Admin(admin_r_lod, "T_State")
+		Account.Update_Admin(admin_r_lod, "T_State")
 		//Admin.Update_Delete_Admin_ByAdmin_uuid(Admin_uuid)
 	} else {
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "e!"}
@@ -237,7 +238,7 @@ func (c *UserController) User_Entry() {
 
 	Admin_uuid := c.GetString("Admin_uuid")
 	if len(Admin_uuid) > 0 {
-		admin_r_a, err := Admin.Read_Admin_ByUuid(Admin_uuid)
+		admin_r_a, err := Account.Read_Admin_ByUuid(Admin_uuid)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
 			c.ServeJSON()
@@ -249,7 +250,7 @@ func (c *UserController) User_Entry() {
 			return
 		}
 
-		User_tokey := Admin.Add_Tokey_Set(admin_r_a.Admin_uuid)
+		User_tokey := Account.Add_Tokey_Set(admin_r_a.Admin_uuid)
 		c.Ctx.SetCookie("User_tokey", User_tokey, time.Second*60*60)
 
 	} else {
@@ -280,7 +281,7 @@ func (c *UserController) V2_User_Entry() {
 
 	Admin_uuid := c.GetString("T_uuid")
 	if len(Admin_uuid) > 0 {
-		admin_r_a, err := Admin.Read_Admin_ByUuid(Admin_uuid)
+		admin_r_a, err := Account.Read_Admin_ByUuid(Admin_uuid)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
 			c.ServeJSON()
@@ -292,7 +293,7 @@ func (c *UserController) V2_User_Entry() {
 			return
 		}
 
-		User_tokey := Admin.Add_Tokey_Set(admin_r_a.Admin_uuid)
+		User_tokey := Account.Add_Tokey_Set(admin_r_a.Admin_uuid)
 
 		System.Add_UserLogs(admin_r.Admin_uuid, "用户管理", "无钥匙进入", Admin_uuid)
 		c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: User_tokey}
@@ -324,15 +325,15 @@ func (c *UserController) User_html() {
 	Name := c.GetString("Name")
 	c.Data["Name"] = Name
 
-	c.Data["Power_List"] = Admin.Read_Power_List_ALL_Power_Administration(0)
-	Adminpower, _ := Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	c.Data["Power_List"] = Account.Read_Power_List_ALL_Power_Administration(0)
+	Adminpower, _ := Account.Read_AdminPower_ById(admin_r.Admin_power)
 	var cnt int64
 	if Adminpower.Power_User_r != 1 {
 		c.Ctx.Redirect(302, "Login")
 		return
 	}
 
-	c.Data["List"], cnt = Admin.Read_Admin_List_ALL_User(page, Name, admin_r.Id)
+	c.Data["List"], cnt = Account.Read_Admin_List_ALL_User(page, Name, admin_r.Id)
 
 	fmt.Println("cnt:", cnt)
 	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
@@ -355,7 +356,7 @@ func (c *UserController) V2_User_List() {
 	}
 	type R_JSONS struct {
 		//必须的大写开头
-		Data      []Admin.Admin
+		Data      []Account.Admin
 		Num       int64
 		Page      int
 		Page_size int
@@ -375,7 +376,7 @@ func (c *UserController) V2_User_List() {
 
 	Name := c.GetString("T_name")
 
-	r_jsons.Data, r_jsons.Num = Admin.Read_v2_Admin_List(admin_r.Id, Name, page, page_z)
+	r_jsons.Data, r_jsons.Num = Account.Read_v2_Admin_List(admin_r.Id, Name, page, page_z)
 	r_jsons.Page = page
 	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
 
@@ -393,11 +394,11 @@ func (c *UserController) User_() {
 	}
 	id, _ := c.GetInt("id")
 	c.Data["id"] = id
-	c.Data["Power_List"] = Admin.Read_Power_List_ALL_Power_Administration(0)
+	c.Data["Power_List"] = Account.Read_Power_List_ALL_Power_Administration(0)
 	Admin_uuid := c.GetString("Admin_uuid")
 	c.Data["Admin_uuid"] = Admin_uuid
 	if len(Admin_uuid) > 0 {
-		c.Data["Date"], _ = Admin.Read_Admin_ByUuid(Admin_uuid)
+		c.Data["Date"], _ = Account.Read_Admin_ByUuid(Admin_uuid)
 	}
 
 	c.TplName = "User/User-.html"
@@ -471,14 +472,14 @@ func (c *UserController) User_v2_Get() {
 	}
 	type User_ struct {
 		User_uuid      string
-		User_name      string           //
-		User_power     int              //
-		User_telephone string           // 电话
-		User_mail      string           //  邮箱
-		User_gender    int              // 性别  0未知   1男   2女
-		User_text      string           // 详情
-		User_rh        int              // 显示湿度
-		User_Power     Admin.AdminPower // 权限
+		User_name      string             //
+		User_power     int                //
+		User_telephone string             // 电话
+		User_mail      string             //  邮箱
+		User_gender    int                // 性别  0未知   1男   2女
+		User_text      string             // 详情
+		User_rh        int                // 显示湿度
+		User_Power     Account.AdminPower // 权限
 	}
 
 	User_uuid := c.GetString("User_uuid")
@@ -487,7 +488,7 @@ func (c *UserController) User_v2_Get() {
 		c.ServeJSON()
 		return
 	}
-	admin_r, err := Admin.Read_Admin_ByUuid(User_uuid)
+	admin_r, err := Account.Read_Admin_ByUuid(User_uuid)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "User_uuid Err!"}
 		c.ServeJSON()
@@ -519,13 +520,13 @@ func (c *UserController) User_v2_Info() {
 	}
 	type User_ struct {
 		User_uuid      string
-		User_name      string           //
-		User_telephone string           // 电话
-		User_mail      string           //  邮箱
-		User_gender    int              // 性别  0未知   1男   2女
-		User_text      string           // 详情
-		User_rh        int              // 显示湿度
-		User_Power     Admin.AdminPower // 权限
+		User_name      string             //
+		User_telephone string             // 电话
+		User_mail      string             //  邮箱
+		User_gender    int                // 性别  0未知   1男   2女
+		User_text      string             // 详情
+		User_rh        int                // 显示湿度
+		User_Power     Account.AdminPower // 权限
 	}
 
 	Admin_r := User_{}
@@ -537,7 +538,7 @@ func (c *UserController) User_v2_Info() {
 	Admin_r.User_mail = admin_r.Admin_mail
 	Admin_r.User_gender = admin_r.Admin_gender
 	Admin_r.User_text = admin_r.Admin_text
-	Admin_r.User_Power, _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	Admin_r.User_Power, _ = Account.Read_AdminPower_ById(admin_r.Admin_power)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Admin_r}
 	c.ServeJSON()
@@ -569,7 +570,7 @@ func (c *UserController) User_Post() {
 	Admin_text := c.GetString("Admin_text")
 	Admin_gender, _ := c.GetInt("Admin_gender")
 	Admin_power, _ := c.GetInt("Admin_power")
-	var_ := Admin.Admin{
+	var_ := Account.Admin{
 		Admin_uuid:      uuid.NewV4().String(),
 		Admin_name:      Admin_name,
 		Admin_master:    admin_r.Id,
@@ -590,13 +591,13 @@ func (c *UserController) User_Post() {
 
 	if len(Admin_uuid) > 0 {
 		var_.Admin_uuid = Admin_uuid
-		err, _ := Admin.ReadLogin_verification(var_.Admin_user, var_.Admin_pass)
+		err, _ := Account.ReadLogin_verification(var_.Admin_user, var_.Admin_pass)
 		if err == nil {
 			c.Data["json"] = lib.JSONS{Code: 307, Msg: "ReadLogin_verification !"}
 			c.ServeJSON()
 			return
 		}
-		err, r_u := Admin.Read_Admin_ByAdmin_uuid(Admin_uuid)
+		err, r_u := Account.Read_Admin_ByAdmin_uuid(Admin_uuid)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
 			c.ServeJSON()
@@ -608,7 +609,7 @@ func (c *UserController) User_Post() {
 			c.ServeJSON()
 			return
 		}
-		err = Admin.Update_Admin_ById_Basics(var_)
+		err = Account.Update_Admin_ById_Basics(var_)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
 			c.ServeJSON()
@@ -628,14 +629,14 @@ func (c *UserController) User_Post() {
 		//	var_.Admin_master = 1
 		//}
 
-		err, _ := Admin.Read_Admin_Admin_user(Admin_user)
+		err, _ := Account.Read_Admin_Admin_user(Admin_user)
 		if err == nil {
 			c.Data["json"] = lib.JSONS{Code: 302, Msg: "账户重复!"}
 			c.ServeJSON()
 			return
 		}
 
-		_, err = Admin.Add_Admin(var_)
+		_, err = Account.Add_Admin(var_)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
 			c.ServeJSON()
@@ -672,7 +673,7 @@ func (c *UserController) User_v2_Add() {
 	Admin_mail := c.GetString("T_mail")
 	Admin_text := c.GetString("T_text")
 
-	var_ := Admin.Admin{
+	var_ := Account.Admin{
 		Admin_uuid:      uuid.NewV4().String(),
 		Admin_name:      Admin_name,
 		Admin_master:    admin_r.Id,
@@ -701,14 +702,14 @@ func (c *UserController) User_v2_Add() {
 		return
 	}
 
-	err, _ := Admin.Read_Admin_Admin_user(Admin_user)
+	err, _ := Account.Read_Admin_Admin_user(Admin_user)
 	if err == nil {
 		c.Data["json"] = lib.JSONS{Code: 302, Msg: "账户重复!"}
 		c.ServeJSON()
 		return
 	}
 
-	_, err = Admin.Add_Admin(var_)
+	_, err = Account.Add_Admin(var_)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
 		c.ServeJSON()
@@ -759,7 +760,7 @@ func (c *UserController) User_v2_Edit() {
 		return
 	}
 
-	is := Admin.Update_Admin(admin_r, "Admin_name", "Admin_pass", "Admin_telephone", "Admin_mail", "Admin_text")
+	is := Account.Update_Admin(admin_r, "Admin_name", "Admin_pass", "Admin_telephone", "Admin_mail", "Admin_text")
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 204, Msg: "修改失败!"}
 		c.ServeJSON()
@@ -809,7 +810,7 @@ func (c *UserController) User_v2_AEdit() {
 		c.ServeJSON()
 		return
 	}
-	err, r_u := Admin.Read_Admin_ByAdmin_uuid(Admin_uuid)
+	err, r_u := Account.Read_Admin_ByAdmin_uuid(Admin_uuid)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
 		c.ServeJSON()
@@ -817,7 +818,7 @@ func (c *UserController) User_v2_AEdit() {
 	}
 	// 用户名重复
 	if len(Admin_user) > 0 {
-		err, y_user := Admin.Read_Admin_Admin_user(Admin_user)
+		err, y_user := Account.Read_Admin_Admin_user(Admin_user)
 		if err == nil {
 			if y_user.Id != r_u.Id {
 				c.Data["json"] = lib.JSONS{Code: 302, Msg: "用户名重复!"}
@@ -847,7 +848,7 @@ func (c *UserController) User_v2_AEdit() {
 		r_u.Admin_text = Admin_text
 	}
 
-	is := Admin.Update_Admin(r_u, "Admin_user", "Admin_name", "Admin_pass", "Admin_telephone", "Admin_mail", "Admin_text", "Admin_power")
+	is := Account.Update_Admin(r_u, "Admin_user", "Admin_name", "Admin_pass", "Admin_telephone", "Admin_mail", "Admin_text", "Admin_power")
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 204, Msg: "修改失败!"}
 		c.ServeJSON()
@@ -875,7 +876,7 @@ func (c *UserController) User_Del() {
 	}
 	Admin_uuid := c.GetString("Admin_uuid")
 	if len(Admin_uuid) > 0 {
-		admin_r_lod, err := Admin.Read_Admin_ByUuid(Admin_uuid)
+		admin_r_lod, err := Account.Read_Admin_ByUuid(Admin_uuid)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
 			c.ServeJSON()
@@ -887,7 +888,7 @@ func (c *UserController) User_Del() {
 			return
 		}
 		admin_r_lod.T_State = 0
-		Admin.Update_Admin(admin_r_lod, "T_State")
+		Account.Update_Admin(admin_r_lod, "T_State")
 		//Admin.Update_Delete_Admin_ByAdmin_uuid(Admin_uuid)
 	} else {
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "e!"}
@@ -917,7 +918,7 @@ func (c *UserController) V2_User_Del() {
 
 	Admin_uuid := c.GetString("T_uuid")
 	if len(Admin_uuid) > 0 {
-		admin_r_lod, err := Admin.Read_Admin_ByUuid(Admin_uuid)
+		admin_r_lod, err := Account.Read_Admin_ByUuid(Admin_uuid)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 204, Msg: "e!"}
 			c.ServeJSON()
@@ -929,7 +930,7 @@ func (c *UserController) V2_User_Del() {
 			return
 		}
 		admin_r_lod.T_State = 0
-		Admin.Update_Admin(admin_r_lod, "T_State")
+		Account.Update_Admin(admin_r_lod, "T_State")
 		//Admin.Update_Delete_Admin_ByAdmin_uuid(Admin_uuid)
 	} else {
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "e!"}
@@ -959,7 +960,7 @@ func (c *UserController) Power_html() {
 		c.Ctx.Redirect(302, "Login")
 		return
 	}
-	c.Data["Admin_Power"], _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+	c.Data["Admin_Power"], _ = Account.Read_AdminPower_ById(admin_r.Admin_power)
 
 	fmt.Println("登录OK")
 	page, _ := c.GetInt("page")
@@ -972,7 +973,7 @@ func (c *UserController) Power_html() {
 	c.Data["Name"] = Name
 
 	var cnt int64
-	c.Data["List"], cnt = Admin.Read_Power_List_ALL(Name, page, 9999)
+	c.Data["List"], cnt = Account.Read_Power_List_ALL(Name, page, 9999)
 	fmt.Println("cnt:", cnt)
 	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
 	c.Data["Page"] = page
@@ -1000,7 +1001,7 @@ func (c *UserController) Power_List() {
 	//}
 	type R_JSONS struct {
 		//必须的大写开头
-		Data      []Admin.AdminPower
+		Data      []Account.AdminPower
 		Num       int64
 		Page      int
 		Page_size int
@@ -1020,7 +1021,7 @@ func (c *UserController) Power_List() {
 
 	Name := c.GetString("T_name")
 
-	r_jsons.Data, r_jsons.Num = Admin.Read_Power_List_ALL(Name, page, page_z)
+	r_jsons.Data, r_jsons.Num = Account.Read_Power_List_ALL(Name, page, page_z)
 	r_jsons.Page = page
 	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
 
@@ -1048,7 +1049,7 @@ func (c *UserController) Power_() {
 	c.Data["id"] = id
 
 	if id > 0 {
-		c.Data["Date"], _ = Admin.Read_AdminPower_ById(id)
+		c.Data["Date"], _ = Account.Read_AdminPower_ById(id)
 	}
 
 	c.TplName = "User/Power-.html"
@@ -1080,7 +1081,7 @@ func (c *UserController) Power_Get() {
 		return
 	}
 
-	Data, _ := Admin.Read_AdminPower_ById(id)
+	Data, _ := Account.Read_AdminPower_ById(id)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Data}
 	c.ServeJSON()
@@ -1122,7 +1123,7 @@ func (c *UserController) Power_Post() {
 	Power_DataScreen_r, _ := c.GetInt("Power_DataScreen_r")
 	Logs_Sys_r, _ := c.GetInt("Logs_Sys_r")
 	Logs_User_r, _ := c.GetInt("Logs_User_r")
-	var_ := Admin.AdminPower{
+	var_ := Account.AdminPower{
 		Power_name:                      Power_name,
 		Power_Administration:            Power_Administration,
 		Power_User_r:                    Power_User_r,
@@ -1142,14 +1143,14 @@ func (c *UserController) Power_Post() {
 	if id > 0 {
 		var_.Id = id
 		fmt.Println("Power_DataScreen_r:", var_.Power_DataScreen_r)
-		err = Admin.Update_AdminPower_ById_Basics(var_)
+		err = Account.Update_AdminPower_ById_Basics(var_)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
 			c.ServeJSON()
 			return
 		}
 	} else {
-		_, err = Admin.Add_AdminPower(var_)
+		_, err = Account.Add_AdminPower(var_)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
 			c.ServeJSON()
@@ -1181,13 +1182,13 @@ func (c *UserController) Power_Del() {
 	c.Data["id"] = id
 
 	if id > 0 {
-		admin_r_lod, err := Admin.Read_AdminPower_ById(id)
+		admin_r_lod, err := Account.Read_AdminPower_ById(id)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
 			c.ServeJSON()
 			return
 		}
-		Admin_List_ALL_AdminPower := Admin.Read_Admin_List_ALL_AdminPower(admin_r_lod.Id)
+		Admin_List_ALL_AdminPower := Account.Read_Admin_List_ALL_AdminPower(admin_r_lod.Id)
 
 		if len(Admin_List_ALL_AdminPower) > 0 {
 			S_Msg := "无法删除!【"
@@ -1198,7 +1199,7 @@ func (c *UserController) Power_Del() {
 			c.ServeJSON()
 			return
 		}
-		Admin.Update_Delete_AdminPower_Byid(admin_r_lod.Id)
+		Account.Update_Delete_AdminPower_Byid(admin_r_lod.Id)
 	} else {
 		c.Data["json"] = lib.JSONS{Code: 204, Msg: "e!"}
 		c.ServeJSON()
@@ -1245,7 +1246,7 @@ func (c *UserController) Power_v2_Add() {
 	Logs_Sys_r, _ := c.GetInt("Logs_Sys_r")
 	Logs_User_r, _ := c.GetInt("Logs_User_r")
 
-	var_ := Admin.AdminPower{
+	var_ := Account.AdminPower{
 		Power_name:                      Power_name,
 		Power_Administration:            Power_Administration,
 		Power_User_r:                    Power_User_r,
@@ -1263,7 +1264,7 @@ func (c *UserController) Power_v2_Add() {
 		T_State:                         1,
 	}
 
-	_, err := Admin.Add_AdminPower(var_)
+	_, err := Account.Add_AdminPower(var_)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
 		c.ServeJSON()
@@ -1310,7 +1311,7 @@ func (c *UserController) Power_v2_Edit() {
 	Power_DataScreen_r, _ := c.GetInt("Power_DataScreen_r")
 	Logs_Sys_r, _ := c.GetInt("Logs_Sys_r")
 	Logs_User_r, _ := c.GetInt("Logs_User_r")
-	var_ := Admin.AdminPower{
+	var_ := Account.AdminPower{
 		Id:                              id,
 		Power_name:                      Power_name,
 		Power_Administration:            Power_Administration,
@@ -1330,7 +1331,7 @@ func (c *UserController) Power_v2_Edit() {
 		T_State:                         1,
 	}
 
-	err := Admin.Update_AdminPower_ById_Basics(var_)
+	err := Account.Update_AdminPower_ById_Basics(var_)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
 		c.ServeJSON()
@@ -1362,13 +1363,13 @@ func (c *UserController) Power_v2_Del() {
 	id, _ := c.GetInt("T_id")
 
 	if id > 0 {
-		admin_r_lod, err := Admin.Read_AdminPower_ById(id)
+		admin_r_lod, err := Account.Read_AdminPower_ById(id)
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
 			c.ServeJSON()
 			return
 		}
-		Admin_List_ALL_AdminPower := Admin.Read_Admin_List_ALL_AdminPower(admin_r_lod.Id)
+		Admin_List_ALL_AdminPower := Account.Read_Admin_List_ALL_AdminPower(admin_r_lod.Id)
 
 		if len(Admin_List_ALL_AdminPower) > 0 {
 			S_Msg := "无法删除!【"
@@ -1379,7 +1380,7 @@ func (c *UserController) Power_v2_Del() {
 			c.ServeJSON()
 			return
 		}
-		Admin.Update_Delete_AdminPower_Byid(admin_r_lod.Id)
+		Account.Update_Delete_AdminPower_Byid(admin_r_lod.Id)
 	} else {
 		c.Data["json"] = lib.JSONS{Code: 204, Msg: "e!"}
 		c.ServeJSON()
@@ -1401,7 +1402,7 @@ func (c *UserController) Panel_plan_Syn() {
 		c.ServeJSON()
 		return
 	}
-	s_, user_r := Admin.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
+	s_, user_r := Account.Read_Admin_ByAdmin_uuid(c.GetString("Admin_uuid"))
 	if s_ != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Admin_uuid Err!"}
 		c.ServeJSON()
@@ -1409,7 +1410,7 @@ func (c *UserController) Panel_plan_Syn() {
 	}
 
 	user_r.Admin_panel_plan = admin_r.Admin_panel_plan
-	Admin.Update_Admin(user_r, "Admin_panel_plan")
+	Account.Update_Admin(user_r, "Admin_panel_plan")
 
 	System.Add_UserLogs(admin_r.Admin_uuid, "设备管理", "同步面板操作", "面板:"+admin_r.Admin_panel_plan+"|"+admin_r.Admin_uuid+"->"+user_r.Admin_uuid)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}

+ 0 - 210
controllers/WebSocket/WebSocket.go

@@ -1,210 +0,0 @@
-package WebSocket
-
-import (
-	"Cold_Api/Nats/NatsServer"
-	"Cold_Api/controllers/lib"
-	"Cold_Api/logs"
-	"Cold_Api/models/System"
-	"container/list"
-	"encoding/json"
-	"fmt"
-	beego "github.com/beego/beego/v2/server/web"
-	"github.com/gorilla/websocket"
-	"net/http"
-	"sync"
-	"time"
-)
-
-// WebSocketController handles WebSocket requests.
-type WebSocketController struct {
-	beego.Controller
-}
-
-// 网关 -》服务端    json 通用模板
-type Event_w struct {
-	Type      int // JOIN, LEAVE, MESSAGE
-	Timestamp int // Unix timestamp (secs)
-	Content   interface{}
-}
-type Ms_Project struct {
-	Cmd string `json:"Cmd"`
-	Sn  string `json:"Sn"`
-}
-
-// Event archives.
-var archive = list.New()
-
-type WsConn struct {
-	Conn *websocket.Conn
-	Mux  sync.RWMutex
-}
-
-var (
-	countryCapitalMap map[string]WsConn /*创建集合 */
-)
-
-func Join_wc(user string, ws *websocket.Conn) bool {
-	// 有先加入 给全部人发消息
-	_, ok := countryCapitalMap[user] /*如果确定是真实的,则存在,否则不存在 */
-	if ok {
-		fmt.Println(user + " 重复")
-		countryCapitalMap[user] = WsConn{Conn: ws}
-		return true
-	} else {
-		fmt.Println(user + " 注册成功")
-		countryCapitalMap[user] = WsConn{Conn: ws}
-		return false
-	}
-}
-
-func Leave(user string) {
-	fmt.Println("注销:" + user)
-
-	for k, _ := range lib.CountrySnMap {
-
-		_, ok := lib.CountrySnMap[k].Uuid_list[user]
-		if ok {
-			fmt.Println("清楚成功 用户! KEY:", k, "  Uuid:", lib.CountrySnMap[k].Uuid_list[user])
-			delete(lib.CountrySnMap[k].Uuid_list, user)
-
-			if len(lib.CountrySnMap[k].Uuid_list) == 0 {
-				fmt.Println("清楚成功 SN! KEY:", k)
-				delete(lib.CountrySnMap, k)
-			}
-		}
-	}
-	delete(countryCapitalMap, user)
-
-}
-
-// This function handles all incoming chan messages.
-func chatroom() {
-	countryCapitalMap = make(map[string]WsConn)
-}
-
-func init() {
-	go chatroom()
-	go Realtime()
-}
-
-// 连接 注册   Join method handles WebSocket requests for WebSocketController.
-func (this *WebSocketController) Join() {
-
-	// 验证登录
-	b_, admin_r := lib.Verification(this.Ctx.GetCookie("User_tokey"), this.GetString("User_tokey"))
-	if !b_ {
-		this.Redirect("/", 302)
-		return
-	}
-
-	// Upgrade from http request to WebSocket.
-	ws, err := websocket.Upgrade(this.Ctx.ResponseWriter, this.Ctx.Request, nil, 1024, 1024)
-	if _, ok := err.(websocket.HandshakeError); ok {
-		http.Error(this.Ctx.ResponseWriter, "Not a websocket handshake", 400)
-		return
-	} else if err != nil {
-		fmt.Println("无法设置WebSocket连接:", err)
-		return
-	}
-
-	// Join chat room.
-	is := Join_wc(admin_r.Admin_uuid, ws)
-
-	if !is {
-		defer Leave(admin_r.Admin_uuid) //  退后 会自动执行
-		time.Sleep(3 * time.Second)
-		for {
-			_, p, err := ws.ReadMessage()
-			if err != nil {
-				return
-			}
-			fmt.Println("============= WebSocket JSON =============")
-			fmt.Println(admin_r.Admin_uuid, "收到信息:", string(p))
-
-			var Ms_project Ms_Project
-			err = json.Unmarshal(p, &Ms_project)
-			if err != nil {
-				System.Add_Logs("WebSocket", "JSON反序列化失败[Ms_Project]", string(p))
-				fmt.Println("JSON反序列化失败[Ms_Project],err=", err)
-				return
-			}
-
-			//fmt.Println("Cmd:", Ms_project.Cmd)
-			fmt.Println("Sn:", Ms_project.Sn)
-
-			//Parameter.Read_DeviceParameter(admin_r.Admin_uuid,Ms_project.Sn)
-
-			_, ok := lib.CountrySnMap[Ms_project.Sn] /*如果确定是真实的,则存在,否则不存在 */
-			if ok {
-
-			} else {
-				fmt.Println("CountrySnMap 没有,新建", Ms_project.Sn)
-				lib.CountrySnMap[Ms_project.Sn] = lib.Cl_{
-					Uuid_list: make(map[string]string),
-				}
-			}
-
-			// 是否 有相同 用户
-			_, ok = lib.CountrySnMap[Ms_project.Sn].Uuid_list[admin_r.Admin_uuid]
-			if ok {
-				fmt.Println("用户重复 ", admin_r.Admin_uuid)
-				data, _ := json.Marshal(lib.JSONS{Code: 201, Msg: "用户重复!", Data: admin_r.Admin_uuid})
-				Send_WebSocket(admin_r.Admin_uuid, string(data))
-
-			} else {
-				fmt.Println("用户新建 ", admin_r.Admin_uuid)
-				lib.CountrySnMap[Ms_project.Sn].Uuid_list[admin_r.Admin_uuid] = admin_r.Admin_uuid
-
-				data, _ := json.Marshal(lib.JSONS{Code: 200, Msg: "ok!", Data: admin_r.Admin_uuid})
-				Send_WebSocket(admin_r.Admin_uuid, string(data))
-
-			}
-
-		}
-	} else {
-		this.Redirect("/", 302)
-		return
-
-	}
-
-}
-
-/// -------------    ---------------------------------------------
-
-func Send_WebSocket(Admin_uuid string, T_json string) {
-	defer func() {
-		if err := recover(); err != nil {
-			fmt.Println(err)
-			logs.Println("Send_WebSocket ok err:!", err)
-			System.Add_Logs("WebSocket", "Send_WebSocket Err", Admin_uuid+T_json)
-		}
-	}()
-
-	ws, ok := countryCapitalMap[Admin_uuid] /*如果确定是真实的,则存在,否则不存在 */
-	if ok && ws.Conn != nil {
-		ws.Mux.Lock()
-		if ws.Conn.WriteMessage(websocket.TextMessage, []byte(T_json)) != nil {
-			println("ok!")
-		}
-		ws.Mux.Unlock()
-
-	}
-
-}
-
-// 循环刷新
-func Realtime() {
-	fmt.Println("=====================Realtime GO===============")
-	time.Sleep(time.Second * 10)
-	for true {
-		//fmt.Println("=====================Realtime GO===============")
-		//fmt.Println("CountrySnMap_z:", len(lib.CountrySnMap))
-		for k, _ := range lib.CountrySnMap {
-			fmt.Println("CountrySnMap:", k)
-			NatsServer.Get_Device_Realtime(k)
-			time.Sleep(time.Millisecond * 100)
-		}
-		time.Sleep(time.Second * 10)
-
-	}
-}

+ 24 - 0
controllers/lib/ReplaceSQL.go

@@ -0,0 +1,24 @@
+package lib
+
+import "strings"
+
+// 过滤sql特殊字符
+func ReplaceSQL(name string) string {
+	name = strings.Replace(name, ";", "", -1)
+	name = strings.Replace(name, ",", "", -1)
+	name = strings.Replace(name, "?", "", -1)
+	name = strings.Replace(name, "<", "", -1)
+	name = strings.Replace(name, ">", "", -1)
+	name = strings.Replace(name, "(", "", -1)
+	name = strings.Replace(name, ")", "", -1)
+	name = strings.Replace(name, "@", "", -1)
+	name = strings.Replace(name, "=", "", -1)
+	name = strings.Replace(name, "+", "", -1)
+	name = strings.Replace(name, "*", "", -1)
+	name = strings.Replace(name, "&", "", -1)
+	name = strings.Replace(name, "#", "", -1)
+	name = strings.Replace(name, "%", "", -1)
+	name = strings.Replace(name, "$", "", -1)
+
+	return name
+}

+ 7 - 7
controllers/lib/lib.go

@@ -64,7 +64,7 @@ type R1_JSONS struct {
 }
 
 // 登录验证
-func Verification(GetCookie string, GetString string) (bool, Admin.Admin) {
+func Verification(GetCookie string, GetString string) (bool, Account.Admin) {
 	Run_My_Server = true // 运行当期服务
 	// 自适应 参数
 	User_tokey := GetCookie
@@ -72,16 +72,16 @@ func Verification(GetCookie string, GetString string) (bool, Admin.Admin) {
 		User_tokey = GetString
 	}
 	if len(User_tokey) == 0 {
-		return false, Admin.Admin{}
+		return false, Account.Admin{}
 	}
-	tokey, is := Admin.Redis_Tokey_Get(User_tokey)
+	tokey, is := Account.Redis_Tokey_Get(User_tokey)
 	if !is {
-		return false, Admin.Admin{}
+		return false, Account.Admin{}
 	}
-	err, admin_r := Admin.Read_Admin_ByAdmin_uuid(tokey)
+	err, admin_r := Account.Read_Admin_ByAdmin_uuid(tokey)
 	if err != nil {
 		is = false
-		return false, Admin.Admin{}
+		return false, Account.Admin{}
 	}
 	log.Println("登录 Admin_name 为:", admin_r.Admin_name)
 	return is, admin_r
@@ -98,7 +98,7 @@ func Verification_Tokey(GetCookie string, GetString string) bool {
 	if len(User_tokey) == 0 {
 		return false
 	}
-	_, is := Admin.Redis_Tokey_Get(User_tokey)
+	_, is := Account.Redis_Tokey_Get(User_tokey)
 	if !is {
 		return false
 	}

+ 1 - 1
lastupdate.tmp

@@ -1 +1 @@
-{"C:\\BZD\\Cold\\Cold_Api\\controllers":1669105254735913900}
+{"C:\\BZD\\Cold\\Cold_Api\\controllers":1670835715610312600}

+ 88 - 0
logs/logx/logx.log

@@ -32,3 +32,91 @@
 2022/11/22 16:21:06.808 [I]  2022-11-22 16:21:06>%!(EXTRA []interface {}=[nats OK!])
 2022/11/23 11:15:10.751 [I]  2022-11-23 11:15:10>%!(EXTRA []interface {}=[============Nats init============])
 2022/11/23 11:15:10.928 [I]  2022-11-23 11:15:10>%!(EXTRA []interface {}=[nats OK!])
+2022/11/24 15:53:09.012 [I]  2022-11-24 15:53:09>%!(EXTRA []interface {}=[============Nats init============])
+2022/11/24 15:54:07.450 [I]  2022-11-24 15:54:07>%!(EXTRA []interface {}=[============Nats init============])
+2022/11/24 15:54:41.759 [I]  2022-11-24 15:54:41>%!(EXTRA []interface {}=[============Nats init============])
+2022/11/24 15:54:41.760 [I]  2022-11-24 15:54:41>%!(EXTRA []interface {}=[nats OK!])
+2022/11/24 15:54:41.847 [I]  2022-11-24 15:54:41>%!(EXTRA []interface {}=[{"key":"redis_PaneView","conn":"47.111.15.17:6379","dbNum":"1","password":""}])
+2022/11/24 15:54:41.934 [I]  2022-11-24 15:54:41>%!(EXTRA []interface {}=[{"key":"redis_ConfigImg","conn":"47.111.15.17:6379","dbNum":"1","password":""}])
+2022/11/24 15:54:42.023 [I]  2022-11-24 15:54:42>%!(EXTRA []interface {}=[{"key":"redis_PanelLayerMould","conn":"47.111.15.17:6379","dbNum":"1","password":""}])
+2022/11/24 15:54:42.115 [I]  2022-11-24 15:54:42>%!(EXTRA []interface {}=[{"key":"redis_PanelTool","conn":"47.111.15.17:6379","dbNum":"1","password":""}])
+2022/11/24 15:54:42.202 [I]  2022-11-24 15:54:42>%!(EXTRA []interface {}=[{"key":"redis_ConfiglibImg","conn":"47.111.15.17:6379","dbNum":"1","password":""}])
+2022/11/24 16:12:21.433 [I]  2022-11-24 16:12:21>%!(EXTRA []interface {}=[============Nats init============])
+2022/11/24 16:12:21.434 [I]  2022-11-24 16:12:21>%!(EXTRA []interface {}=[nats OK!])
+2022/12/02 10:40:57.476 [I]  2022-12-02 10:40:57>%!(EXTRA []interface {}=[============Nats init============])
+2022/12/02 10:40:57.478 [I]  2022-12-02 10:40:57>%!(EXTRA []interface {}=[nats OK!])
+2022/12/02 10:41:13.811 [I]  2022-12-02 10:41:13>%!(EXTRA []interface {}=[============Nats init============])
+2022/12/02 10:41:13.812 [I]  2022-12-02 10:41:13>%!(EXTRA []interface {}=[nats OK!])
+2022/12/12 15:03:04.411 [I]  2022-12-12 15:03:04>%!(EXTRA []interface {}=[============Nats init============])
+2022/12/12 15:03:35.374 [I]  2022-12-12 15:03:35>%!(EXTRA []interface {}=[============Nats init============])
+2022/12/12 15:03:35.376 [I]  2022-12-12 15:03:35>%!(EXTRA []interface {}=[nats OK!])
+2022/12/12 15:07:32.062 [I]  2022-12-12 15:07:32>%!(EXTRA []interface {}=[============Nats init============])
+2022/12/12 15:07:32.063 [I]  2022-12-12 15:07:32>%!(EXTRA []interface {}=[nats OK!])
+2022/12/12 15:11:03.396 [I]  2022-12-12 15:11:03>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:11:13.509 [I]  2022-12-12 15:11:13>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:11:23.622 [I]  2022-12-12 15:11:23>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:11:33.741 [I]  2022-12-12 15:11:33>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:11:43.863 [I]  2022-12-12 15:11:43>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:11:53.979 [I]  2022-12-12 15:11:53>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:12:04.101 [I]  2022-12-12 15:12:04>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:12:14.218 [I]  2022-12-12 15:12:14>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:12:24.329 [I]  2022-12-12 15:12:24>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:12:34.454 [I]  2022-12-12 15:12:34>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:12:44.571 [I]  2022-12-12 15:12:44>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:12:54.693 [I]  2022-12-12 15:12:54>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:13:04.815 [I]  2022-12-12 15:13:04>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:13:14.924 [I]  2022-12-12 15:13:14>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:13:25.049 [I]  2022-12-12 15:13:25>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:13:35.162 [I]  2022-12-12 15:13:35>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:13:45.272 [I]  2022-12-12 15:13:45>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:13:55.384 [I]  2022-12-12 15:13:55>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:14:05.506 [I]  2022-12-12 15:14:05>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:14:15.622 [I]  2022-12-12 15:14:15>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:14:25.736 [I]  2022-12-12 15:14:25>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:14:35.860 [I]  2022-12-12 15:14:35>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:14:45.977 [I]  2022-12-12 15:14:45>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:14:56.085 [I]  2022-12-12 15:14:56>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:15:06.212 [I]  2022-12-12 15:15:06>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:15:16.322 [I]  2022-12-12 15:15:16>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:15:26.444 [I]  2022-12-12 15:15:26>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:15:36.560 [I]  2022-12-12 15:15:36>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:15:46.668 [I]  2022-12-12 15:15:46>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:15:56.791 [I]  2022-12-12 15:15:56>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:16:06.902 [I]  2022-12-12 15:16:06>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:16:17.018 [I]  2022-12-12 15:16:17>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:16:27.132 [I]  2022-12-12 15:16:27>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:16:37.242 [I]  2022-12-12 15:16:37>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:16:47.354 [I]  2022-12-12 15:16:47>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:16:57.477 [I]  2022-12-12 15:16:57>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:17:07.590 [I]  2022-12-12 15:17:07>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:17:17.706 [I]  2022-12-12 15:17:17>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:17:27.827 [I]  2022-12-12 15:17:27>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:17:37.939 [I]  2022-12-12 15:17:37>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:17:48.056 [I]  2022-12-12 15:17:48>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:17:58.169 [I]  2022-12-12 15:17:58>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:18:08.291 [I]  2022-12-12 15:18:08>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:18:18.405 [I]  2022-12-12 15:18:18>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:18:28.515 [I]  2022-12-12 15:18:28>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:18:38.627 [I]  2022-12-12 15:18:38>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:18:48.748 [I]  2022-12-12 15:18:48>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:18:58.867 [I]  2022-12-12 15:18:58>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:19:09.004 [I]  2022-12-12 15:19:09>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:19:19.116 [I]  2022-12-12 15:19:19>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:19:29.232 [I]  2022-12-12 15:19:29>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:19:39.349 [I]  2022-12-12 15:19:39>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:19:49.467 [I]  2022-12-12 15:19:49>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:19:59.589 [I]  2022-12-12 15:19:59>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:20:09.703 [I]  2022-12-12 15:20:09>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:20:19.824 [I]  2022-12-12 15:20:19>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:20:29.938 [I]  2022-12-12 15:20:29>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:20:40.055 [I]  2022-12-12 15:20:40>%!(EXTRA []interface {}=[Nats => Cold_Api/Nats/NatsServer.Get_Device_Realtime ])
+2022/12/12 15:20:49.338 [I]  2022-12-12 15:20:49>%!(EXTRA []interface {}=[============Nats init============])
+2022/12/12 15:20:49.339 [I]  2022-12-12 15:20:49>%!(EXTRA []interface {}=[nats OK!])
+2022/12/12 15:28:03.992 [I]  2022-12-12 15:28:03>%!(EXTRA []interface {}=[============Nats init============])
+2022/12/12 15:28:03.993 [I]  2022-12-12 15:28:03>%!(EXTRA []interface {}=[nats OK!])
+2022/12/12 15:33:17.413 [I]  2022-12-12 15:33:17>%!(EXTRA []interface {}=[============Nats init============])
+2022/12/12 15:33:17.414 [I]  2022-12-12 15:33:17>%!(EXTRA []interface {}=[nats OK!])
+2022/12/12 16:39:53.509 [I]  2022-12-12 16:39:53>%!(EXTRA []interface {}=[============Nats init============])
+2022/12/12 16:39:53.510 [I]  2022-12-12 16:39:53>%!(EXTRA []interface {}=[nats OK!])
+2022/12/12 17:02:38.394 [I]  2022-12-12 17:02:38>%!(EXTRA []interface {}=[============Nats init============])
+2022/12/12 17:02:38.395 [I]  2022-12-12 17:02:38>%!(EXTRA []interface {}=[nats OK!])

BIN
logs/logx/logx.log.baiduyun.uploading.cfg


+ 1 - 2
main.go

@@ -4,7 +4,6 @@ import (
 	_ "Cold_Api/Nats"
 	"Cold_Api/conf"
 	"Cold_Api/controllers"
-	"Cold_Api/controllers/lib"
 	"Cold_Api/models/Device"
 	_ "Cold_Api/routers"
 	"fmt"
@@ -20,7 +19,7 @@ import (
 
 func init() {
 
-	lib.WritePid()
+	//lib.WritePid()
 
 	fmt.Println(runtime.GOOS)
 	orm.RegisterDriver("mysql", orm.DRMySQL)

+ 47 - 144
models/Admin/Admin.go → models/Account/Admin.go

@@ -1,4 +1,4 @@
-package Admin
+package Account
 
 import (
 	"Cold_Api/conf"
@@ -13,74 +13,45 @@ import (
 )
 
 type Admin struct {
-	Id           int    `orm:"column(ID);size(11);auto;pk"`
-	Admin_uuid   string `orm:"size(256);null"` //
-	Admin_master int    `orm:"size(200);null"` //  上一级
-	Admin_power  int    `orm:"size(2);0"`      // 权限
-	Admin_name   string `orm:"size(256);null"` //
-	Admin_user   string `orm:"size(256);null"` //
-	Admin_pass   string `orm:"size(256);null"` //
-
-	Admin_telephone string `orm:"size(256);null"`  // 电话
-	Admin_mail      string `orm:"size(200);null"`  //  邮箱
-	Admin_gender    int    `orm:"size(2);null"`    // 性别  0未知   1男   2女
-	Admin_text      string `orm:"type(text);null"` // 详情
-
-	Admin_panel_plan string `orm:"size(200);null"`  //  平面图
-	Admin_panel_data string `orm:"size(200);null"`  //  大数据
-	Admin_panel_v3d  string `orm:"type(text);null"` //  3D 视图
-	Admin_panel_v3d1 string `orm:"type(text);null"` //  3D 视图 1
-	Admin_panel_v3d2 string `orm:"type(text);null"` //  3D 视图 2
-	Admin_panel_v3d3 string `orm:"type(text);null"` //  3D 视图 3
-	Admin_panel_v3d4 string `orm:"type(text);null"` //  3D 视图 4
-	Admin_panel_v3d5 string `orm:"type(text);null"` //  3D 视图 5
-
-	Admin_rh int `orm:"type(text);1"` // 显示湿度  0 不显示   1  显示
+	Id      int    `orm:"column(ID);size(11);auto;pk"`
+	T_uuid  string `orm:"size(256);null"` //  用户编号
+	T_pid   int    `orm:"size(200);null"` //  绑定公司 ( 只有创建公司用户时添加,内部人员 为0)
+	T_power int    `orm:"size(2);0"`      // 权限 (关联权限表)
+	T_user  string `orm:"size(256);null"` // 用户名 (唯一)
+	T_pass  string `orm:"size(256);null"` // MD5
+
+	T_name  string `orm:"size(256);null"` // 姓名
+	T_phone string `orm:"size(256);null"` // 电话
+	T_mail  string `orm:"size(200);null"` // 邮箱
+	T_wx    string `orm:"size(256);null"` // 微信
 
 	T_State    int       `orm:"size(200);1"`                                           //  0删除  1 正常
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
 }
+
 type Admin_R struct {
-	Admin_uuid       string //
-	Admin_master     int    //  上一级
-	Admin_power      int    // 权限
-	Admin_name       string //
-	Admin_user       string //
-	Admin_telephone  string // 电话
-	Admin_mail       string //  邮箱
-	Admin_gender     int    // 性别  0未知   1男   2女
-	Admin_text       string // 详情
-	Admin_rh         int    // 显示湿度
-	Admin_panel_plan string //  平面图
-	Admin_panel_data string //  大数据
-	Admin_panel_v3d  string //  大数据
-	Admin_panel_v3d1 string //  大数据
-	Admin_panel_v3d2 string //  大数据
-	Admin_panel_v3d3 string //  大数据
-	Admin_panel_v3d4 string //  大数据
-	Admin_panel_v3d5 string //  大数据
+	T_uuid  string //  用户编号
+	T_pid   int    //  绑定公司 ( 只有创建公司用户时添加,内部人员 为0)
+	T_power int    // 权限 (关联权限表)
+	T_user  string // 用户名 (唯一)
+
+	T_name  string // 姓名
+	T_phone string // 电话
+	T_mail  string // 邮箱
+	T_wx    string // 微信
+
 }
 
 func Admin_To_Admin_R(r Admin) (v Admin_R) {
-	v.Admin_uuid = r.Admin_uuid
-	v.Admin_master = r.Admin_master
-	v.Admin_power = r.Admin_power
-	v.Admin_name = r.Admin_name
-	v.Admin_user = r.Admin_user
-	v.Admin_telephone = r.Admin_telephone
-	v.Admin_mail = r.Admin_mail
-	v.Admin_gender = r.Admin_gender
-	v.Admin_text = r.Admin_text
-	v.Admin_rh = r.Admin_rh
-	v.Admin_panel_plan = r.Admin_panel_plan
-	v.Admin_panel_data = r.Admin_panel_data
-	v.Admin_panel_v3d = r.Admin_panel_v3d
-	v.Admin_panel_v3d1 = r.Admin_panel_v3d1
-	v.Admin_panel_v3d2 = r.Admin_panel_v3d2
-	v.Admin_panel_v3d3 = r.Admin_panel_v3d3
-	v.Admin_panel_v3d4 = r.Admin_panel_v3d4
-	v.Admin_panel_v3d5 = r.Admin_panel_v3d5
+	v.T_uuid = r.T_uuid
+	v.T_pid = r.T_pid
+	v.T_power = r.T_power
+	v.T_user = r.T_user
+	v.T_name = r.T_name
+	v.T_phone = r.T_phone
+	v.T_mail = r.T_mail
+	v.T_wx = r.T_wx
 
 	return v
 }
@@ -117,9 +88,9 @@ func Redis_Admin_Set(r Admin) (err error) {
 		return
 	}
 
-	err = redisCache_Admin.Put(r.Admin_uuid, str, 24*time.Hour)
+	err = redisCache_Admin.Put(r.T_uuid, str, 24*time.Hour)
 	if err != nil {
-		fmt.Println("set key:", r.Admin_uuid, ",value:", str, err)
+		fmt.Println("set key:", r.T_uuid, ",value:", str, err)
 	}
 	return
 }
@@ -159,11 +130,11 @@ func Add_Admin(m Admin) (id int64, err error) {
 }
 
 //// 修改
-//func Update_Delete_Admin_ByAdmin_uuid(Admin_uuid string) (err error) {
+//func Update_Delete_Admin_ByT_uuid(T_uuid string) (err error) {
 //	o := orm.NewOrm()
-//	v := Admin{Admin_uuid: Admin_uuid}
+//	v := Admin{T_uuid: T_uuid}
 //	// ascertain id exists in the database
-//	if err = o.Read(&v, "Admin_uuid"); err == nil {
+//	if err = o.Read(&v, "T_uuid"); err == nil {
 //		var num int64
 //		v.T_State = 0
 //
@@ -176,21 +147,21 @@ func Add_Admin(m Admin) (id int64, err error) {
 //	return err
 //}
 
-func Read_Admin_Admin_user(Admin_user string) (error, Admin) {
+func Read_Admin_T_user(T_user string) (error, Admin) {
 
 	o := orm.NewOrm()
-	r := Admin{Admin_user: Admin_user, T_State: 1}
-	err := o.Read(&r, "Admin_user", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	r := Admin{T_user: T_user, T_State: 1}
+	err := o.Read(&r, "T_user", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 		fmt.Println(err)
 	}
 	return err, r
 }
-func ReadLogin_verification(Admin_user string, Admin_pass string) (error, Admin) {
+func Read_AdminLogin_verification(T_user string, T_pass string) (error, Admin) {
 
 	o := orm.NewOrm()
-	r := Admin{Admin_user: Admin_user, Admin_pass: Admin_pass, T_State: 1}
-	err := o.Read(&r, "Admin_user", "Admin_pass", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	r := Admin{T_user: T_user, T_pass: T_pass, T_State: 1}
+	err := o.Read(&r, "T_user", "T_pass", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 		fmt.Println(err)
 	}
@@ -199,41 +170,6 @@ func ReadLogin_verification(Admin_user string, Admin_pass string) (error, Admin)
 }
 
 // 修改
-func Update_Admin_ById_Basics(m Admin) (err error) {
-	o := orm.NewOrm()
-	v := Admin{Admin_uuid: m.Admin_uuid, T_State: 1}
-	// ascertain id exists in the database
-	if err = o.Read(&v, "Admin_uuid", "T_State"); err == nil {
-		var num int64
-		if len(m.Admin_name) > 0 {
-			v.Admin_name = m.Admin_name
-		}
-		if len(m.Admin_mail) > 0 {
-			v.Admin_mail = m.Admin_mail
-		}
-		if len(m.Admin_telephone) > 0 {
-			v.Admin_telephone = m.Admin_telephone
-		}
-		if len(m.Admin_text) > 0 {
-			v.Admin_text = m.Admin_text
-		}
-		v.Admin_gender = m.Admin_gender
-		if m.Admin_power > 0 {
-			v.Admin_power = m.Admin_power
-		}
-		if len(m.Admin_pass) > 0 {
-			v.Admin_pass = m.Admin_pass
-		}
-		println("m.Admin_pass:", m.Admin_pass)
-		if num, err = o.Update(&v, "Admin_name", "Admin_telephone", "Admin_mail", "Admin_text", "Admin_gender", "Admin_power", "Admin_pass"); err == nil {
-			fmt.Println("Number of records updated in database:", num)
-		}
-		Redis_Admin_Set(m) // Redis 更新缓存
-	}
-	return err
-}
-
-// 修改
 func Update_Admin(m Admin, cols ...string) bool {
 	o := orm.NewOrm()
 	if num, err := o.Update(&m, cols...); err == nil {
@@ -245,53 +181,20 @@ func Update_Admin(m Admin, cols ...string) bool {
 }
 
 // 获取 ById
-func Read_Admin_ByAdmin_uuid(Admin_uuid string) (e error, r Admin) {
-	if r, is := Redis_Admin_Get(Admin_uuid); is {
-		//println("Redis_Get  OK")
-		return nil, r
-	}
-
-	o := orm.NewOrm()
-	qs := o.QueryTable(new(Admin))
-	e = qs.Filter("Admin_uuid", Admin_uuid).Filter("T_State", 1).One(&r)
-	return e, r
-}
-
-// 获取 ById
-func Read_Admin_ByUuid(Admin_uuid string) (r Admin, err error) {
-	if r, is := Redis_Admin_Get(Admin_uuid); is {
+func Read_Admin_ByUuid(T_uuid string) (r Admin, err error) {
+	if r, is := Redis_Admin_Get(T_uuid); is {
 		//println("Redis_Get  OK")
 		return r, nil
 	}
-
 	o := orm.NewOrm()
-	r = Admin{Admin_uuid: Admin_uuid, T_State: 1}
-	err = o.Read(&r, "Admin_uuid", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	r = Admin{T_uuid: T_uuid, T_State: 1}
+	err = o.Read(&r, "T_uuid", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 		fmt.Println(err)
 	}
 	return r, err
 }
 
-// 获取 ById
-func Read_Admin_ById(id int) (r Admin, err error) {
-	o := orm.NewOrm()
-	r = Admin{Id: id}
-	err = o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
-	if err != nil {
-		fmt.Println(err)
-	}
-	return r, err
-}
-
-// 获取 ById
-func Read_Admin_ById_x(Id int) (r Admin) {
-	o := orm.NewOrm()
-	qs := o.QueryTable(new(Admin))
-	qs.Filter("Id", Id).One(&r, "Id", "Admin_uuid", "Admin_master", "Admin_name", "Admin_user", "CreateTime", "UpdateTime")
-	return r
-}
-
 // 获取列表
 func Read_Admin_List_ALL_User(page int, Admin_name string, Admin_master int) (maps []Admin, cnt int64) {
 
@@ -336,7 +239,7 @@ func Read_v2_Admin_List(Admin_master int, Admin_name string, page int, page_z in
 	}
 
 	if len(Admin_name) > 0 {
-		cond1 = cond1.AndCond(cond.Or("Admin_name__icontains", Admin_name).Or("Admin_user__icontains", Admin_name))
+		cond1 = cond1.AndCond(cond.Or("Admin_name__icontains", Admin_name).Or("T_user__icontains", Admin_name))
 	}
 
 	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)

+ 170 - 0
models/Account/Company.go

@@ -0,0 +1,170 @@
+package Account
+
+import (
+	"Cold_Api/conf"
+	"encoding/json"
+	"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/go-sql-driver/mysql"
+	"strconv"
+	"time"
+)
+
+type Company struct {
+	Id     int    `orm:"column(ID);size(11);auto;pk"`
+	T_mid  int    `orm:"size(200);null"` //  上一级 ID
+	T_name string `orm:"size(256);null"` // 公司名称
+	T_uids string `orm:"size(256);null"` // 绑定用户 Uid|  如:U1|U2|
+
+	T_State    int       `orm:"size(200);1"`                                           //  0删除  1 正常
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
+	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
+}
+
+type Company_R struct {
+	Id     int    `orm:"column(ID);size(11);auto;pk"`
+	T_mid  int    `orm:"size(200);null"` //  上一级 ID
+	T_name string `orm:"size(256);null"` // 公司名称
+	T_uids string `orm:"size(256);null"` // 绑定用户 Uid|  如:U1|U2|
+}
+
+func Company_To_Company_R(r Company) (v Company_R) {
+	v.T_mid = r.T_mid
+	v.T_name = r.T_name
+	v.T_uids = r.T_uids
+
+	return v
+}
+
+func (t *Company) TableName() string {
+	return "Company" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+var redisCache_Company cache.Cache
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(Company))
+
+	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+		"redis_Company", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	fmt.Println(config)
+	var err error
+	redisCache_Company, err = cache.NewCache("redis", config)
+	if err != nil || redisCache_Company == nil {
+		errMsg := "failed to init redis"
+		fmt.Println(errMsg, err)
+	}
+
+}
+
+// ---------------- Redis -------------------
+//Redis_Set(m.T_sn,m) // Redis 更新缓存
+func Redis_Company_Set(r Company) (err error) {
+	//json序列化
+	str, err := json.Marshal(r)
+	if err != nil {
+		fmt.Print(err)
+		return
+	}
+
+	err = redisCache_Company.Put(strconv.Itoa(r.Id), str, 24*time.Hour)
+	if err != nil {
+		fmt.Println("set key:", strconv.Itoa(r.Id), ",value:", str, err)
+	}
+	return
+}
+
+//if r,is :=Redis_Get(T_sn);is{
+//return r,nil
+//}
+func Redis_Company_Get(key string) (r Company, is bool) {
+	if redisCache_Company.IsExist(key) {
+		//println("找到key:",key)
+		v := redisCache_Company.Get(key)
+
+		json.Unmarshal(v.([]byte), &r)
+		return r, true
+	}
+	//println("没有 找到key:",key)
+	return Company{}, false
+}
+
+func Redis_Company_DelK(key string) (err error) {
+	err = redisCache_Company.Delete(key)
+	return
+}
+
+// ---------------- 特殊方法 -------------------
+
+// 添加
+func Add_Company(m Company) (id int64, err error) {
+	o := orm.NewOrm()
+	id, err = o.Insert(&m)
+	if err != nil {
+		fmt.Println(err)
+	}
+	m.Id = int(id)
+	Redis_Company_Set(m)
+	return id, err
+}
+
+// 修改
+func Update_Company(m Company, cols ...string) bool {
+	o := orm.NewOrm()
+	if num, err := o.Update(&m, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+		Redis_Company_Set(m) // Redis 更新缓存
+		return true
+	}
+	return false
+}
+
+// 获取 ById
+func Read_Company_id(Id int) (e error, r Company) {
+	if r, is := Redis_Company_Get(strconv.Itoa(Id)); is {
+		//println("Redis_Get  OK")
+		return nil, r
+	}
+
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(Company))
+	e = qs.Filter("Id", Id).Filter("T_State", 1).One(&r)
+	return e, r
+}
+
+// 获取列表
+func Read_Company_List(Company_master int, Company_name string, page int, page_z int) (maps []Company, cnt int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(Company))
+	var offset int64
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_State", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+
+	if Company_master > 0 {
+		cond1 = cond1.AndCond(cond.And("Company_master", Company_master))
+	}
+
+	if len(Company_name) > 0 {
+		cond1 = cond1.AndCond(cond.Or("Company_name__icontains", Company_name).Or("Company_user__icontains", Company_name))
+	}
+
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	return maps, cnt
+}

+ 33 - 33
models/Admin/AdminPower.go → models/Account/Power.go

@@ -1,4 +1,4 @@
-package Admin
+package Account
 
 import (
 	"Cold_Api/conf"
@@ -11,7 +11,7 @@ import (
 	"time"
 )
 
-type AdminPower struct {
+type Power struct {
 	Id                   int    `orm:"column(ID);size(11);auto;pk"`
 	Power_name           string `orm:"size(256);null"` //  权限名称
 	Power_Administration int    `orm:"size(2);0"`      //  内部人员
@@ -38,22 +38,22 @@ type AdminPower struct {
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
 }
 
-func (t *AdminPower) TableName() string {
-	return "AdminPower" // 数据库名称   // ************** 替换 FormulaList **************
+func (t *Power) TableName() string {
+	return "Power" // 数据库名称   // ************** 替换 FormulaList **************
 }
 
-var redisCache_AdminPower cache.Cache
+var redisCache_Power cache.Cache
 
 func init() {
 	//注册模型
-	orm.RegisterModel(new(AdminPower))
+	orm.RegisterModel(new(Power))
 
 	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-		"redis_AdminPower", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+		"redis_Power", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
 	fmt.Println(config)
 	var err error
-	redisCache_AdminPower, err = cache.NewCache("redis", config)
-	if err != nil || redisCache_AdminPower == nil {
+	redisCache_Power, err = cache.NewCache("redis", config)
+	if err != nil || redisCache_Power == nil {
 		errMsg := "failed to init redis"
 		fmt.Println(errMsg, err)
 	}
@@ -62,7 +62,7 @@ func init() {
 
 // ---------------- Redis -------------------
 //Redis_Set(m.T_sn,m) // Redis 更新缓存
-func Redis_AdminPower_Set(r AdminPower) (err error) {
+func Redis_Power_Set(r Power) (err error) {
 	//json序列化
 	str, err := json.Marshal(r)
 	if err != nil {
@@ -70,7 +70,7 @@ func Redis_AdminPower_Set(r AdminPower) (err error) {
 		return
 	}
 
-	err = redisCache_AdminPower.Put(strconv.Itoa(r.Id), str, 24*time.Hour)
+	err = redisCache_Power.Put(strconv.Itoa(r.Id), str, 24*time.Hour)
 	if err != nil {
 		fmt.Println("set key:", strconv.Itoa(r.Id), ",value:", str, err)
 	}
@@ -80,29 +80,29 @@ func Redis_AdminPower_Set(r AdminPower) (err error) {
 //if r,is :=Redis_Get(T_sn);is{
 //return r,nil
 //}
-func Redis_AdminPower_Get(key string) (r AdminPower, is bool) {
-	if redisCache_AdminPower.IsExist(key) {
+func Redis_Power_Get(key string) (r Power, is bool) {
+	if redisCache_Power.IsExist(key) {
 		//println("找到key:",key)
-		v := redisCache_AdminPower.Get(key)
+		v := redisCache_Power.Get(key)
 
 		json.Unmarshal(v.([]byte), &r)
 		return r, true
 	}
 	//println("没有 找到key:",key)
-	return AdminPower{}, false
+	return Power{}, false
 }
 
-func Redis_AdminPower_DelK(key string) (err error) {
-	err = redisCache_AdminPower.Delete(key)
+func Redis_Power_DelK(key string) (err error) {
+	err = redisCache_Power.Delete(key)
 	return
 }
 
 // ---------------- 特殊方法 -------------------
 
 // 修改
-func Update_AdminPower_ById_Basics(m AdminPower) (err error) {
+func Update_Power_ById_Basics(m Power) (err error) {
 	o := orm.NewOrm()
-	v := AdminPower{Id: m.Id}
+	v := Power{Id: m.Id}
 	// ascertain id exists in the database
 	if err = o.Read(&v); err == nil {
 		var num int64
@@ -110,47 +110,47 @@ func Update_AdminPower_ById_Basics(m AdminPower) (err error) {
 		if num, err = o.Update(&m, "Power_name", "Power_Administration", "Power_User_r", "Power_User_e", "Power_User_entry", "Power_Device_r", "Power_Device_a", "Power_Device_Parameter_e", "Power_DeviceSensor_Class", "Power_DeviceSensor_Parameter_e", "Power_DeviceSensor_Compensate_e", "Power_Device_Bind_e", "Power_DataScreen_r", "Logs_Sys_r", "Logs_User_r"); err == nil {
 			fmt.Println("Number of records updated in database:", num)
 		}
-		Redis_AdminPower_Set(m)
+		Redis_Power_Set(m)
 	}
 
 	return err
 }
 
 // 添加
-func Add_AdminPower(m AdminPower) (id int64, err error) {
+func Add_Power(m Power) (id int64, err error) {
 	o := orm.NewOrm()
 	id, err = o.Insert(&m)
 	if err != nil {
 		fmt.Println(err)
 	}
-	Redis_AdminPower_Set(m)
+	Redis_Power_Set(m)
 	return id, err
 }
 
 // 获取 ById
-func Read_AdminPower_ById(Id int) (r AdminPower, err error) {
-	if r, is := Redis_AdminPower_Get(strconv.Itoa(Id)); is {
+func Read_Power_ById(Id int) (r Power, err error) {
+	if r, is := Redis_Power_Get(strconv.Itoa(Id)); is {
 		//println("Redis_Get  OK")
 		return r, nil
 	}
 
 	o := orm.NewOrm()
-	r = AdminPower{Id: Id}
+	r = Power{Id: Id}
 	err = o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 		fmt.Println(err)
 	} else {
-		Redis_AdminPower_Set(r)
+		Redis_Power_Set(r)
 	}
 
 	return r, err
 }
 
 // 获取列表
-func Read_Power_List_ALL_Power_Administration(Power_Administration int) (maps []AdminPower) {
+func Read_Power_List_ALL_Power_Administration(Power_Administration int) (maps []Power) {
 
 	o := orm.NewOrm()
-	qs := o.QueryTable(new(AdminPower))
+	qs := o.QueryTable(new(Power))
 
 	qs.Filter("T_State", 1).OrderBy("Id").All(&maps)
 
@@ -158,12 +158,12 @@ func Read_Power_List_ALL_Power_Administration(Power_Administration int) (maps []
 }
 
 // 获取列表
-func Read_Power_List_ALL(Power_name string, page int, page_z int) (maps []AdminPower, cnt int64) {
+func Read_Power_List_ALL(Power_name string, page int, page_z int) (maps []Power, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
-	qs := o.QueryTable(new(AdminPower))
+	qs := o.QueryTable(new(Power))
 	var offset int64
 	if page <= 1 {
 		offset = 0
@@ -178,9 +178,9 @@ func Read_Power_List_ALL(Power_name string, page int, page_z int) (maps []AdminP
 }
 
 // 修改
-func Update_Delete_AdminPower_Byid(Id int) (err error) {
+func Update_Delete_Power_Byid(Id int) (err error) {
 	o := orm.NewOrm()
-	v := AdminPower{Id: Id}
+	v := Power{Id: Id}
 	// ascertain id exists in the database
 	if err = o.Read(&v); err == nil {
 		var num int64
@@ -188,7 +188,7 @@ func Update_Delete_AdminPower_Byid(Id int) (err error) {
 		if num, err = o.Update(&v, "T_State"); err == nil {
 			fmt.Println("Number of records updated in database:", num)
 		}
-		Redis_AdminPower_DelK(strconv.Itoa(Id))
+		Redis_Power_DelK(strconv.Itoa(Id))
 	}
 
 	return err

+ 62 - 0
models/Account/Tokey.go

@@ -0,0 +1,62 @@
+package Account
+
+import (
+	"Cold_Api/conf"
+	"fmt"
+	"github.com/astaxie/beego/cache"
+	_ "github.com/astaxie/beego/cache/redis"
+	uuid "github.com/satori/go.uuid"
+	"time"
+)
+
+var redisCache_Tokey cache.Cache
+
+func init() {
+	//注册模型
+	//orm.RegisterModel(new(Tokey))
+
+	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+		"redisCache_Tokey", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	fmt.Println(config)
+	var err error
+	redisCache_Tokey, err = cache.NewCache("redis", config)
+	if err != nil || redisCache_Tokey == nil {
+		errMsg := "failed to init redis"
+		fmt.Println(errMsg, err)
+	}
+}
+
+// ---------------- Redis -------------------
+//Redis_Set(m.T_sn,m) // Redis 更新缓存
+func Add_Tokey_Set(Uuid string) string {
+	var Tokey string
+	for true {
+		Tokey = uuid.NewV4().String()
+		if !redisCache_Tokey.IsExist(Tokey) {
+			break
+		}
+		fmt.Print("申请 TOKEY 重复!重新生成。", Tokey)
+	}
+	redisCache_Tokey.Put(Tokey, Uuid, 2*time.Hour)
+
+	return Tokey
+}
+
+//if r,is :=Redis_Get(T_sn);is{
+//return r,nil
+//}
+func Redis_Tokey_Get(Tokey string) (string, bool) {
+	if len(Tokey) < 10 {
+		return "", false
+	}
+	if redisCache_Tokey.IsExist(Tokey) {
+		//println("找到key:",key)
+		v := redisCache_Tokey.Get(Tokey)
+		value := string(v.([]byte)) //这里的转换很重要,Get返回的是interface
+
+		redisCache_Tokey.Put(Tokey, value, 2*time.Hour) //  重新计次
+		return value, true
+	}
+	//println("没有 找到key:",key)
+	return "", false
+}

+ 70 - 0
models/Account/Vpanel.go

@@ -0,0 +1,70 @@
+package Account
+
+import (
+	"Cold_Api/conf"
+	"fmt"
+	"github.com/astaxie/beego/cache"
+	_ "github.com/astaxie/beego/cache/redis"
+	"github.com/beego/beego/v2/adapter/orm"
+	_ "github.com/go-sql-driver/mysql"
+)
+
+// 公司-数据展示-平面图、大数据、3D 视图
+type Vpanel struct {
+	T_cid int `orm:"pk;size(200);null"` //  公司id
+
+	T_plan string `orm:"type(text);null"` //  平面图
+	T_data string `orm:"type(text);null"` //  大数据
+	T_v3d  string `orm:"type(text);null"` //  3D 视图
+	T_v3d1 string `orm:"type(text);null"` //  3D 视图 1
+	T_v3d2 string `orm:"type(text);null"` //  3D 视图 2
+	T_v3d3 string `orm:"type(text);null"` //  3D 视图 3
+	T_v3d4 string `orm:"type(text);null"` //  3D 视图 4
+	T_v3d5 string `orm:"type(text);null"` //  3D 视图 5
+
+}
+type Vpanel_R struct {
+	T_plan string //  平面图
+	T_data string //  大数据
+	T_v3d  string //  3D 视图
+	T_v3d1 string //  3D 视图 1
+	T_v3d2 string //  3D 视图 2
+	T_v3d3 string //  3D 视图 3
+	T_v3d4 string //  3D 视图 4
+	T_v3d5 string //  3D 视图 5
+}
+
+func Vpanel_To_Vpanel_R(r Vpanel) (v Vpanel_R) {
+	v.T_plan = r.T_plan
+	v.T_data = r.T_data
+	v.T_v3d = r.T_v3d
+	v.T_v3d1 = r.T_v3d1
+	v.T_v3d2 = r.T_v3d2
+	v.T_v3d3 = r.T_v3d3
+	v.T_v3d4 = r.T_v3d4
+	v.T_v3d5 = r.T_v3d5
+
+	return v
+}
+
+func (t *Vpanel) TableName() string {
+	return "Vpanel" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+var redisCache_Vpanel cache.Cache
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(Vpanel))
+
+	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+		"redis_Vpanel", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	fmt.Println(config)
+	var err error
+	redisCache_Vpanel, err = cache.NewCache("redis", config)
+	if err != nil || redisCache_Vpanel == nil {
+		errMsg := "failed to init redis"
+		fmt.Println(errMsg, err)
+	}
+
+}

+ 0 - 120
models/Admin/Tokey.go

@@ -1,120 +0,0 @@
-package Admin
-
-import (
-	"Cold_Api/conf"
-	"fmt"
-	"github.com/astaxie/beego/cache"
-	_ "github.com/astaxie/beego/cache/redis"
-	uuid "github.com/satori/go.uuid"
-	"time"
-)
-
-//
-//type Tokey struct {
-//	Id         int    `orm:"column(ID);size(11);auto;pk"`
-//	Admin_uuid string `orm:"size(256);null"` //
-//	User_tokey string `orm:"size(256);null"` //
-//	User_num int    `orm:"size(200);null"`  //  操作次数
-//	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"`     //auto_now 每次 model 保存时都会对时间自动更新
-//	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` //auto_now_add 第一次保存时才设置时间
-//}
-
-//func (t *Tokey) TableName() string {
-//	return "Tokey" // 数据库名称   // ************** 替换 FormulaList **************
-//}
-
-var redisCache_Tokey cache.Cache
-
-func init() {
-	//注册模型
-	//orm.RegisterModel(new(Tokey))
-
-	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-		"redisCache_Tokey", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
-	fmt.Println(config)
-	var err error
-	redisCache_Tokey, err = cache.NewCache("redis", config)
-	if err != nil || redisCache_Tokey == nil {
-		errMsg := "failed to init redis"
-		fmt.Println(errMsg, err)
-	}
-}
-
-// ---------------- Redis -------------------
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
-func Add_Tokey_Set(Uuid string) string {
-	var Tokey string
-	for true {
-		Tokey = uuid.NewV4().String()
-		if !redisCache_Tokey.IsExist(Tokey) {
-			break
-		}
-		fmt.Print("申请 TOKEY 重复!重新生成。", Tokey)
-	}
-	redisCache_Tokey.Put(Tokey, Uuid, 2*time.Hour)
-
-	return Tokey
-}
-
-//if r,is :=Redis_Get(T_sn);is{
-//return r,nil
-//}
-func Redis_Tokey_Get(Tokey string) (string, bool) {
-	if len(Tokey) < 10 {
-		return "", false
-	}
-	if redisCache_Tokey.IsExist(Tokey) {
-		//println("找到key:",key)
-		v := redisCache_Tokey.Get(Tokey)
-		value := string(v.([]byte)) //这里的转换很重要,Get返回的是interface
-
-		redisCache_Tokey.Put(Tokey, value, 2*time.Hour) //  重新计次
-		return value, true
-	}
-	//println("没有 找到key:",key)
-	return "", false
-}
-
-//
-//// 验证 TOKEY
-//func Read_Verification_Tokey(User_tokey string) (bool, Tokey) {
-//	r := Tokey{}
-//	o := orm.NewOrm()
-//	qs := o.QueryTable(new(Tokey))
-//	err := qs.Filter("User_tokey",User_tokey).One(&r)
-//
-//	if err != nil {
-//		fmt.Println(err)
-//		return false,r
-//	}
-//
-//	//println(time.Now().String(),time.Now().Unix())
-//	//println(r.UpdateTime.String(),r.UpdateTime.Unix())
-//	//
-//	//println(r.Id,time.Now().Unix() - r.UpdateTime.Unix())
-//	if time.Now().Unix() - r.UpdateTime.Unix() > 60 * 60 * 8 {   // 小时
-//		println("User_tokey 过期了")
-//		return false,r
-//	}
-//	r.UpdateTime = time.Now()
-//	o.Update(&r, "UpdateTime");
-//
-//	return true,r
-//}
-//
-// 添加 Tokey
-//func Add_Tokey(Admin_uuid string) (User_tokey string) {
-//	o := orm.NewOrm()
-//	for true{
-//		User_tokey = uuid.NewV4().String()
-//		r := Tokey{User_tokey: User_tokey}
-//		err := o.Read(&r, "User_tokey") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
-//		if err != nil {
-//			break;
-//		}
-//		fmt.Print("申请 TOKEY 重复!重新生成。",User_tokey)
-//	}
-//	o.Insert(&Tokey{Admin_uuid:Admin_uuid,User_tokey: User_tokey})
-//
-//	return User_tokey
-//}

+ 29 - 0
models/Company/CompanyClass.go

@@ -0,0 +1,29 @@
+package Company
+
+import (
+	_ "github.com/astaxie/beego/cache/redis"
+	"github.com/beego/beego/v2/adapter/orm"
+	_ "github.com/go-sql-driver/mysql"
+
+	"time"
+)
+
+type CompanyClass struct {
+	Id     int    `orm:"column(ID);size(11);auto;pk"`
+	T_pid  int    `orm:"index;size(256);null"` // Account.Company 绑定公司
+	T_name string `orm:"size(256);null"`       // 分类
+
+	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
+	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
+}
+
+func (t *CompanyClass) TableName() string {
+	return "DeviceClass" // 数据库名称   // ************** 替换 DesignClass **************
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(CompanyClass))
+
+}

+ 48 - 51
models/Device/DeviceClass.go → models/Company/CompanyNotice.go

@@ -1,9 +1,8 @@
-package Device
+package Company
 
 import (
 	"Cold_Api/conf"
-	"Cold_Api/models/Admin"
-
+	"Cold_Api/models/Account"
 	"encoding/json"
 	"fmt"
 	"github.com/astaxie/beego/cache"
@@ -14,10 +13,10 @@ import (
 	"time"
 )
 
-type DeviceClass struct {
+type CompanyNotice struct {
 	Id     int    `orm:"column(ID);size(11);auto;pk"`
-	T_uuid string `orm:"size(256);null"` //
-	T_name string `orm:"size(256);null"` // 分类
+	T_pid  int    `orm:"index;size(256);null"` // Account.Company 绑定公司
+	T_name string `orm:"size(256);null"`       // 分类
 
 	T_Notice_wx      string `orm:"type(text);null"` //w微信公众号  appid/名字|
 	T_Notice_wx2     string `orm:"type(text);null"` //w微信公众号  appid/名字|
@@ -26,14 +25,14 @@ type DeviceClass struct {
 	T_Notice_mailbox string `orm:"type(text);null"` //e邮箱    1111111|
 
 	T_Notice_mechanism string `orm:"type(text);null"` // 报警机制
-	// 湿度超下限预警,处理,w启用,数量,上限,~|
-	// 湿度超下限预警,0,0,0,0,0,0,0,0,0,0,0,0|
+	// W报警编号,处理,w启用,数量,上限,~|
+	// W15,0,0,0,0,0,0,0,0,0,0,0,0|
 
 	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
-type DeviceClass_R struct {
+type CompanyNotice_R struct {
 	T_name             string `orm:"size(256);null"`  // 分类
 	T_Notice_wx        string `orm:"type(text);null"` //w微信公众号  appid/名字|
 	T_Notice_wx2       string `orm:"type(text);null"` //w微信公众号  appid/名字|
@@ -41,27 +40,25 @@ type DeviceClass_R struct {
 	T_Notice_message   string `orm:"type(text);null"` //m短信   1111111|
 	T_Notice_mailbox   string `orm:"type(text);null"` //e邮箱    1111111|
 	T_Notice_mechanism string `orm:"type(text);null"` // 报警机制
-	// 湿度超下限预警,处理,w启用,数量,上限,~|
-	// 湿度超下限预警,0,0,0,0,0,0,0,0,0,0,0,0|
 
 }
 
-func (t *DeviceClass) TableName() string {
-	return "DeviceClass" // 数据库名称   // ************** 替换 DesignClass **************
+func (t *CompanyNotice) TableName() string {
+	return "CompanyNotice" // 数据库名称   // ************** 替换 DesignClass **************
 }
 
-var redisCache_DeviceClass cache.Cache
+var redisCache_CompanyNotice cache.Cache
 
 func init() {
 	//注册模型
-	orm.RegisterModel(new(DeviceClass))
+	orm.RegisterModel(new(CompanyNotice))
 
 	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-		"redis_DeviceClass", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+		"redis_CompanyNotice", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
 	fmt.Println(config)
 	var err error
-	redisCache_DeviceClass, err = cache.NewCache("redis", config)
-	if err != nil || redisCache_DeviceClass == nil {
+	redisCache_CompanyNotice, err = cache.NewCache("redis", config)
+	if err != nil || redisCache_CompanyNotice == nil {
 		errMsg := "failed to init redis"
 		fmt.Println(errMsg, err)
 		panic(errMsg)
@@ -70,7 +67,7 @@ func init() {
 }
 
 //Redis_Set(m.T_sn,m) // Redis 更新缓存
-func Redis_DeviceClass_Set(r DeviceClass) (err error) {
+func Redis_CompanyNotice_Set(r CompanyNotice) (err error) {
 	key := strconv.Itoa(r.Id)
 
 	//json序列化
@@ -80,7 +77,7 @@ func Redis_DeviceClass_Set(r DeviceClass) (err error) {
 		return
 	}
 
-	err = redisCache_DeviceClass.Put(key, str, 2*time.Hour)
+	err = redisCache_CompanyNotice.Put(key, str, 2*time.Hour)
 	if err != nil {
 		fmt.Println("set key:", key, ",value:", str, err)
 	}
@@ -90,26 +87,26 @@ func Redis_DeviceClass_Set(r DeviceClass) (err error) {
 //if r,is :=Redis_Get(T_sn);is{
 //return r,nil
 //}
-func Redis_DeviceClass_Get(key string) (DeviceClass, bool) {
+func Redis_CompanyNotice_Get(key string) (CompanyNotice, bool) {
 	println("找到key:", key)
-	if redisCache_DeviceClass.IsExist(key) {
+	if redisCache_CompanyNotice.IsExist(key) {
 		//println("找到key:",key)
-		v := redisCache_DeviceClass.Get(key)
-		var r DeviceClass
+		v := redisCache_CompanyNotice.Get(key)
+		var r CompanyNotice
 		json.Unmarshal(v.([]byte), &r)
 
 		return r, true
 	}
 
-	return DeviceClass{}, false
+	return CompanyNotice{}, false
 }
-func Redis_DeviceClass_DelK(key string) (err error) {
-	err = redisCache_DeviceClass.Delete(key)
+func Redis_CompanyNotice_DelK(key string) (err error) {
+	err = redisCache_CompanyNotice.Delete(key)
 	return
 }
 
 // ---------------- 特殊方法 -------------------
-func DeviceClassToDeviceClass_R(t DeviceClass) (r DeviceClass_R) {
+func CompanyNoticeToCompanyNotice_R(t CompanyNotice) (r CompanyNotice_R) {
 	r.T_name = t.T_name
 	r.T_Notice_wx = t.T_Notice_wx
 	r.T_Notice_wx2 = t.T_Notice_wx2
@@ -121,40 +118,40 @@ func DeviceClassToDeviceClass_R(t DeviceClass) (r DeviceClass_R) {
 }
 
 // 获取 ById
-func Read_Class_ById(id int) (r DeviceClass, err error) {
+func Read_Class_ById(id int) (r CompanyNotice, err error) {
 	key := strconv.Itoa(id)
-	if r, is := Redis_DeviceClass_Get(key); is {
+	if r, is := Redis_CompanyNotice_Get(key); is {
 		//println("Redis_Get  OK")
 		return r, nil
 	}
 
 	o := orm.NewOrm()
-	r = DeviceClass{Id: id}
+	r = CompanyNotice{Id: id}
 	err = o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 		fmt.Println(err)
 		return r, err
 	}
 
-	Redis_DeviceClass_Set(r)
+	Redis_CompanyNotice_Set(r)
 	return r, err
 }
 
 // 添加
-func Add_Class(m DeviceClass) (id int64, err error) {
+func Add_Class(m CompanyNotice) (id int64, err error) {
 	o := orm.NewOrm()
 	id, err = o.Insert(&m)
 	if err != nil {
 		fmt.Println(err)
 	}
-	Redis_DeviceClass_Set(m)
+	Redis_CompanyNotice_Set(m)
 	return
 }
 
 // 修改
-func Update_Class_ById(m DeviceClass) (err error) {
+func Update_Class_ById(m CompanyNotice) (err error) {
 	o := orm.NewOrm()
-	v := DeviceClass{Id: m.Id}
+	v := CompanyNotice{Id: m.Id}
 	// ascertain id exists in the database
 	if err = o.Read(&v); err == nil {
 		var num int64
@@ -162,14 +159,14 @@ func Update_Class_ById(m DeviceClass) (err error) {
 			fmt.Println("Number of records updated in database:", num)
 		}
 	}
-	Redis_DeviceClass_Set(m)
+	Redis_CompanyNotice_Set(m)
 	return
 }
 
 // 删除
-func Delete_Class_ById(id int) DeviceClass {
+func Delete_Class_ById(id int) CompanyNotice {
 	o := orm.NewOrm()
-	v := DeviceClass{Id: id}
+	v := CompanyNotice{Id: id}
 	// ascertain id exists in the database
 	if err := o.Read(&v); err == nil {
 		var num int64
@@ -178,28 +175,28 @@ func Delete_Class_ById(id int) DeviceClass {
 			fmt.Println("Number of records updated in database:", num)
 		}
 		key := strconv.Itoa(v.Id)
-		Redis_DeviceClass_DelK(key)
+		Redis_CompanyNotice_DelK(key)
 	}
 	return v
 }
 
 // 修改
-func Update_Class(m DeviceClass, cols ...string) bool {
+func Update_Class(m CompanyNotice, cols ...string) bool {
 	o := orm.NewOrm()
 	if num, err := o.Update(&m, cols...); err == nil {
 		fmt.Println("Number of records updated in database:", num)
-		Redis_DeviceClass_Set(m)
+		Redis_CompanyNotice_Set(m)
 		return true
 	}
 	return false
 }
 
 // 删除
-func Delete_Class_ByUuid_All(user_ Admin.Admin) {
+func Delete_Class_ByUuid_All(user_ Account.Admin) {
 	o := orm.NewOrm()
-	qs := o.QueryTable(new(DeviceClass))
+	qs := o.QueryTable(new(CompanyNotice))
 
-	var r []DeviceClass
+	var r []CompanyNotice
 	qs.Filter("T_State", 1).All(&r)
 	for _, v := range r {
 		v.T_State = 0
@@ -209,20 +206,20 @@ func Delete_Class_ByUuid_All(user_ Admin.Admin) {
 }
 
 // 获取全部
-func Read_Class_All_1() (r []DeviceClass) {
+func Read_Class_All_1() (r []CompanyNotice) {
 	o := orm.NewOrm()
-	qs := o.QueryTable(new(DeviceClass))
+	qs := o.QueryTable(new(CompanyNotice))
 	qs.Filter("T_State", 1).All(&r)
 	return r
 }
 
 // 获取列表
-func Read_DeviceClass_ALL_1(T_uuid string, page int, T_name string) (r []DeviceClass, cnt int64) {
+func Read_CompanyNotice_ALL_1(T_uuid string, page int, T_name string) (r []CompanyNotice, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
-	qs := o.QueryTable(new(DeviceClass))
+	qs := o.QueryTable(new(CompanyNotice))
 	var offset int64
 	if page <= 1 {
 		offset = 0
@@ -237,12 +234,12 @@ func Read_DeviceClass_ALL_1(T_uuid string, page int, T_name string) (r []DeviceC
 }
 
 // 获取列表
-func Read_DeviceClass_ALL_T_uuid_1(T_uuid string) (r []DeviceClass) {
+func Read_CompanyNotice_ALL_T_uuid_1(T_uuid string) (r []CompanyNotice) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
-	qs := o.QueryTable(new(DeviceClass))
+	qs := o.QueryTable(new(CompanyNotice))
 
 	qs.Filter("T_uuid", T_uuid).OrderBy("-Id").Filter("T_State", 1).All(&r)
 

+ 56 - 313
models/Device/Device.go

@@ -2,7 +2,7 @@ package Device
 
 import (
 	"Cold_Api/conf"
-	"Cold_Api/models/Admin"
+	"Cold_Api/models/Account"
 	"encoding/json"
 	"fmt"
 	"github.com/astaxie/beego/cache"
@@ -12,64 +12,54 @@ import (
 	"github.com/beego/beego/v2/adapter/orm"
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
-	"strings"
 	"time"
 )
 
 // 模板
 type Device struct {
-	Id int `orm:"column(ID);size(11);auto;pk"`
-
-	T_sn      string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_MSISDN  string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_devName string `orm:"size(256);null"` //设备名称
-	//T_class      int    `orm:"size(200);null"`  // 分类
-	//T_img        string `orm:"size(256);null"`  // 图片
-	T_sensor           int       `orm:"size(22);null"`         //  传感器数量
-	T_l_p              int       `orm:"size(22);null"`         // 1物流端   2药店端
-	T_give             int       `orm:"size(2);1"`             // 0 丢弃  1 正常
-	T_Putime_Parameter time.Time `orm:"type(timestamp);null;"` // 参数时间
-	T_Bind             string    `orm:"size(256);null"`        //设备绑定  Uid
-	T_protocol         int       `orm:"size(2);1"`             // 1 1.0协议  2 2.0协议
-
-	T_monitor   int `orm:"size(22);null"`  //  监控状态 1 监控  0 未监控
-	T_online    int `orm:"size(22);1"`     //  在线状态 1 在线  0 离线
-	T_online_4g int `orm:"size(22);0"`     // 在线状态4G  0 包含(2 离线 3 异常断开)  1 在线  2 离线   3 异常断开
-	T_Dattery   int `orm:"size(256);null"` //电量
-	T_err       int `orm:"size(2);1"`      // 0 正常  1 异常
-
-	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
+	T_sn              string    `orm:"pk;size(256);null"`    // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_pid             int       `orm:"index;size(256);null"` // Account.Company 绑定公司
+	T_MSISDN          string    `orm:"size(256);null"`       // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_devName         string    `orm:"size(256);null"`       // 设备名称
+	T_protocol        int       `orm:"size(2);1"`            // 冷链通讯协议 1 :1.0协议   2 :2.0协议    3 :3.0协议
+	T_VerifyTime      time.Time `orm:"type(timestamp);"`     // 验证时间
+	T_CalibrationTime time.Time `orm:"type(timestamp);"`     // 校准时间
+	T_ist             int       `orm:"size(2);1"`            // 温度   1开启   2关闭
+	T_ish             int       `orm:"size(2);1"`            // 湿度   1开启   2关闭
+
+	// 设备同步参数
+	T_Dattery  int    `orm:"size(4);null"`       // 电量
+	T_Site     string `orm:"size(200);null"`     // GPS
+	T_type     int    `orm:"index;size(4);null"` // Device.DeviceType  1库房   2移动
+	T_give     int    `orm:"index;size(2);1"`    // 屏蔽状态 0 屏蔽  1 正常
+	T_monitor  int    `orm:"index;size(2);null"` // 监控状态 0 未监控 1 监控
+	T_online   int    `orm:"index;size(2);1"`    // 在线状态 0 未启用  1 在线  2 离线
+	T_online_s int    `orm:"index;size(2);0"`    // 在线状态-备用  0 未启用  1 在线  2 离线
+
+	T_State    int       `orm:"index;size(2);1"`                                       // 0 删除   1 正常
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
-type R_Device struct {
-	T_sn          string           // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_devName     string           //设备名称
-	T_sensor      int              //  传感器数量
-	T_monitor     int              //  监控状态 1 监控  0 未监控
-	T_give        int              // 0 丢弃  1 正常
-	T_online      int              //  在线状态 1 在线  0 离线
-	T_online_4g   int              //  在线状态4G 1 在线  0 离线
-	T_Dattery     int              //电量
-	T_protocol    int              //协议
-	T_sensor_list []DeviceSensor_R //  传感器List
-	T_MSISDN      string           //MSISDN
-	UpdateTime    time.Time        //auto_now 每次 model 保存时都会对时间自动更新
-}
 
-type R2_Device struct {
-	T_sn        string // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_MSISDN    string //MSISDN
-	T_devName   string //设备名称
-	T_sensor    int    //  传感器数量
-	T_monitor   int    //  监控状态 1 监控  0 未监控
-	T_give      int    // 0 丢弃  1 正常
-	T_online    int    //  在线状态 1 在线  0 离线
-	T_online_4g int    //  在线状态4G 1 在线  0 离线
-	T_Dattery   int    //电量
-	T_protocol  int    //协议
-
-	UpdateTime time.Time //auto_now 每次 model 保存时都会对时间自动更新
+type Device_R struct {
+	T_sn              string    // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_MSISDN          string    // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_devName         string    //设备名称
+	T_protocol        int       // 1 1.0协议  2 2.0协议
+	T_VerifyTime      time.Time // 验证时间
+	T_CalibrationTime time.Time // 校准时间
+	T_ist             int       // 温度   1开启   2关闭
+	T_ish             int       // 湿度   1开启   2关闭
+	T_Dattery         int       // 电量
+	T_Site            string    // GPS
+	T_type            int       // 1库房   2移动
+	T_give            int       // 屏蔽状态 0 屏蔽  1 正常
+	T_monitor         int       // 监控状态 0 未监控 1 监控
+	T_online          int       // 在线状态 0 未启用  1 在线  2 离线
+	T_online_s        int       // 在线状态-备用  0 未启用  1 在线  2 离线
+	CreateTime        time.Time //auto_now_add 第一次保存时才设置时间
+	UpdateTime        time.Time //auto_now 每次 model 保存时都会对时间自动更新
+
 }
 
 type Device_task struct {
@@ -99,19 +89,24 @@ func init() {
 
 }
 
-func DeviceToR2_Device(r Device) (t R2_Device) {
+func DeviceToDevice_R(r Device) (t Device_R) {
 	t.T_sn = r.T_sn
 	t.T_MSISDN = r.T_MSISDN
 	t.T_devName = r.T_devName
-	t.T_sensor = r.T_sensor
-	t.T_monitor = r.T_monitor
+	t.T_protocol = r.T_protocol
+	t.T_VerifyTime = r.T_VerifyTime
+	t.T_CalibrationTime = r.T_CalibrationTime
+	t.T_ist = r.T_ist
+	t.T_ish = r.T_ish
+	t.T_Dattery = r.T_Dattery
+	t.T_Site = r.T_Site
+	t.T_type = r.T_type
 	t.T_give = r.T_give
+	t.T_monitor = r.T_monitor
 	t.T_online = r.T_online
-	t.T_online_4g = r.T_online_4g
-	t.T_Dattery = r.T_Dattery
-	t.T_protocol = r.T_protocol
+	t.T_online_s = r.T_online_s
+	t.CreateTime = r.CreateTime
 	t.UpdateTime = r.UpdateTime
-	//
 
 	return
 }
@@ -125,7 +120,6 @@ func Redis_Set(r Device) (err error) {
 		fmt.Print(err)
 		return
 	}
-
 	err = redisCache_Device.Put(r.T_sn, str, 24*time.Hour)
 	if err != nil {
 		fmt.Println("set key:", r.T_sn, ",value:", str, err)
@@ -156,18 +150,6 @@ func Redis_DelK(key string) (err error) {
 // ---------------- 特殊方法 -------------------
 
 // 获取 ById
-func Read_Device_ById(id int) (r Device) {
-	o := orm.NewOrm()
-	r = Device{Id: id}
-	err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
-	if err != nil {
-		fmt.Println(err)
-	}
-
-	return r
-}
-
-// 获取 ById
 func Read_Device_ByT_sn(T_sn string) (r Device, err error) {
 	if r, is := Redis_Get(T_sn); is {
 		//println("Redis_Get  OK")
@@ -187,16 +169,14 @@ func Read_Device_ByT_sn(T_sn string) (r Device, err error) {
 }
 
 // 添加
-func Add_Device(m Device) (id int64, err error) {
-
+func Add_Device(m Device) (err error) {
 	o := orm.NewOrm()
-	id, err = o.Insert(&m)
+	_, err = o.Insert(&m)
 	if err != nil {
 		fmt.Println(err)
 	}
-	m.Id = int(id)
 	Redis_Set(m) // Redis 更新缓存
-	return id, err
+	return err
 }
 
 // 删除
@@ -217,122 +197,11 @@ func Update_Device(r Device, cols ...string) bool {
 		Redis_Set(r) // Redis 更新缓存
 		return true
 	}
-
 	return false
 }
 
-// 修改
-//func Update_Device_T_devName(T_sn string, T_devName string) (err error) {
-//	o := orm.NewOrm()
-//	v := Device{T_sn: T_sn}
-//	// ascertain id exists in the database
-//	if err = o.Read(&v, "T_sn"); err == nil {
-//		v.T_devName = T_devName
-//		o.Update(&v, "T_devName")
-//	}
-//	Redis_Set( v) // Redis 更新缓存
-//	return err
-//}
-
-// 修改
-//func Update_Device_T_l_p(T_sn string, T_l_p int) (err error) {
-//	o := orm.NewOrm()
-//	v := Device{T_sn: T_sn}
-//	// ascertain id exists in the database
-//	if err = o.Read(&v, "T_sn"); err == nil {
-//		v.T_l_p = T_l_p
-//		o.Update(&v, "T_l_p")
-//	}
-//	Redis_Set( v) // Redis 更新缓存
-//	return err
-//}
-
-//// 获取列表
-//func Read_Device_ALL_1(user_ Admin.Admin, page int, T_sn string, T_devName string, class string) (r []Device, cnt int64) {
-//
-//	o := orm.NewOrm()
-//	// 也可以直接使用 Model 结构体作为表名
-//
-//	qs := o.QueryTable(new(Device))
-//	var offset int64
-//	if page <= 1 {
-//		offset = 0
-//	} else {
-//		offset = int64((page - 1) * conf.Page_size)
-//	}
-//	T_Bind := "U" + strconv.Itoa(user_.Id)
-//	if user_.Admin_master <= 1 {
-//		T_Bind = ""
-//	}
-//	fmt.Println("T_Bind:", T_Bind)
-//	qs.Limit(conf.Page_size, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_sn__icontains", T_sn).Filter("T_devName__icontains", T_devName).OrderBy("-UpdateTime").Filter("T_State", 1).All(&r)
-//	cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_sn__icontains", T_sn).Filter("T_devName__icontains", T_devName).Filter("T_State", 1).Count()
-//
-//	return r, cnt
-//}
-
-// 获取列表
-func Read_Device_ALL_bind_1(user_ Admin.Admin, page int, page_z int, T_sn string, T_devName string, class string, T_monitor string, T_online string) (r []Device, cnt int64) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(Device))
-	var offset int64
-	if page_z == 0 {
-		page_z = conf.Page_size
-	}
-
-	if page <= 1 {
-		offset = 0
-	} else {
-		offset = int64((page - 1) * page_z)
-	}
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
-	}
-	fmt.Println("T_Bind:", T_Bind)
-
-	cond := orm.NewCondition()
-	cond1 := cond.And("T_Bind__icontains", T_Bind).And("T_sn__icontains", T_sn).And("T_devName__icontains", T_devName).And("T_State", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
-
-	if T_monitor == "1" {
-		//cond1.AndCond(cond.And("T_class", class))
-		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_monitor", 1))
-	} else if T_monitor == "0" {
-		//cond1.AndCond(cond.And("T_class", class))
-		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_monitor", 0))
-	}
-
-	if T_online == "1" {
-		//cond1.AndCond(cond.And("T_class", class))
-		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_online", 1))
-	} else if T_online == "2" {
-		//cond1.AndCond(cond.And("T_class", class))
-		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_online", 2))
-	} else if T_online == "3" {
-		//cond1.AndCond(cond.And("T_class", class))
-		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_online", 3))
-	} else if T_online == "0" {
-		//cond1.AndCond(cond.And("T_class", class))
-		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_online", 0).Or("T_online", 2).Or("T_online", 3))
-	}
-
-	// 非内部权限
-	//println("user_.Admin_power:", user_.Admin_power)
-	if user_.Admin_power > 6 {
-		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_give", 1))
-	}
-
-	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("Id").OrderBy("-T_give").All(&r)
-	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
-
-	return r, cnt
-}
-
 // 获取列表
-func Read_Device_v2_List(user_ Admin.Admin, T_name string, T_monitor string, T_online string, page int, page_z int) (r []R2_Device, cnt int64) {
+func Read_Device_List(user_ Account.Admin, T_name string, T_monitor string, T_online string, page int, page_z int) (r []R2_Device, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -394,129 +263,3 @@ func Read_Device_v2_List(user_ Admin.Admin, T_name string, T_monitor string, T_o
 
 	return r, cnt
 }
-
-// 获取列表
-func Read_Device_ALL_bind(user_ Admin.Admin) (r []Device) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-	qs := o.QueryTable(new(Device))
-
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
-	}
-	fmt.Println("T_Bind:", T_Bind)
-	qs.Filter("T_Bind__icontains", T_Bind).All(&r)
-
-	return r
-}
-
-// 获取列表
-func Read_Device_ALL_bind_T_l_p(user_ Admin.Admin, T_l_p int) (r []Device) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-	qs := o.QueryTable(new(Device))
-
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
-	}
-	fmt.Println("T_Bind:", T_Bind)
-	qs.Filter("T_Bind__icontains", T_Bind).Filter("T_l_p", T_l_p).All(&r)
-
-	return r
-}
-
-// 获取列表
-func Read_Device_ALL_T_sn_T_devName_bind_1(T_sn string, T_devName string, user_ Admin.Admin) (r []Device) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(Device))
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
-	}
-	fmt.Println("T_Bind:", T_Bind)
-	qs.Filter("T_Bind__icontains", T_Bind).Filter("T_sn__icontains", T_sn).Filter("T_devName__icontains", T_devName).Filter("T_State", 1).All(&r)
-
-	return r
-}
-
-// 获取列表
-func Read_Device_ALL_T_sn_bind_1(T_sn string, user_ Admin.Admin) (r []Device) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(Device))
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	qs.Filter("T_Bind__icontains", T_Bind).Filter("T_sn__icontains", T_sn).Filter("T_State", 1).All(&r)
-
-	return r
-}
-
-// 修改
-func Device_Bind_Add(T_sn string, user_ Admin.Admin) string {
-	o := orm.NewOrm()
-	v := Device{T_sn: T_sn}
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if err := o.Read(&v, "T_sn"); err == nil {
-		v.T_Bind = strings.Replace(v.T_Bind, T_Bind, "", -1)
-		v.T_Bind = v.T_Bind + T_Bind
-		o.Update(&v, "T_Bind")
-	}
-	Redis_Set(v) // Redis 更新缓存
-	return v.T_Bind
-}
-
-// 修改
-func Device_Bind_Del(T_sn string, user_ Admin.Admin) string {
-	o := orm.NewOrm()
-	v := Device{T_sn: T_sn}
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if err := o.Read(&v, "T_sn"); err == nil {
-		v.T_Bind = strings.Replace(v.T_Bind, T_Bind, "", -1)
-		o.Update(&v, "T_Bind")
-	}
-	Redis_Set(v) // Redis 更新缓存
-	return v.T_Bind
-}
-
-// 修改
-func Device_Bind_ALL_Del(admin_r Admin.Admin) {
-	o := orm.NewOrm()
-	qs := o.QueryTable(new(Device))
-	var r []Device
-	T_Bind := "U" + strconv.Itoa(admin_r.Id) + "|"
-	qs.Filter("T_Bind__icontains", T_Bind).All(&r)
-	for _, v := range r {
-		v.T_Bind = strings.Replace(v.T_Bind, T_Bind, "", -1)
-		o.Update(&v, "T_Bind")
-		Redis_Set(v) // Redis 更新缓存
-	}
-
-}
-
-//
-func Read_Device_ALL_T_Bind_Count(user_ Admin.Admin, T_sn string, T_l_p int) int {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-	qs := o.QueryTable(new(Device))
-	T_Bind := "U" + strconv.Itoa(user_.Id)
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
-	}
-	fmt.Println("T_Bind:", T_Bind)
-	var cnt int64
-	if T_l_p > 0 {
-		cnt, _ = qs.Filter("T_sn__icontains", T_sn).Filter("T_Bind__icontains", T_Bind).Filter("T_l_p", T_l_p).Count()
-		return int(cnt)
-	}
-	cnt, _ = qs.Filter("T_sn__icontains", T_sn).Filter("T_Bind__icontains", T_Bind).Count()
-	return int(cnt)
-}

+ 75 - 116
models/Device/DeviceData.go

@@ -16,111 +16,85 @@ import (
 	"time"
 )
 
-// 模板
-type DeviceData struct {
-	Id int `orm:"column(ID);size(11);auto;pk"`
-
-	T_id   string    `orm:"size(256);null"`        // 标题
-	T_t    float32   `orm:"size(10);null"`         // 温度
-	T_rh   float32   `orm:"size(10);null"`         // 湿度
-	T_time time.Time `orm:"type(timestamp);null;"` // 采集时间
+// 建表
+//var CREATEsql = "CREATE TABLE IF NOT EXISTS `Z_DeviceData_" + SN + " ( " +
+var CREATEsql = " ( " +
+	"`t_id` int(6) NOT NULL," +
+	"`t_time` datetime NOT NULL," +
+	"`t_t` double(6, 2) NULL DEFAULT NULL," +
+	"`t_rh` double(6, 2) NULL DEFAULT NULL," +
+	"`t_site` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL," +
+	"`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP," +
+	"PRIMARY KEY (`t_time`, `t_id`) USING BTREE" +
+	") ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;"
 
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间 UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`   //auto_now 每次 model 保存时都会对时间自动更新
+// 模板
+type DeviceData_R struct {
+	T_t    float32   // 温度
+	T_rh   float32   // 湿度
+	T_Site string    // GPS
+	T_time time.Time // 采集时间
 }
 
-func (t *DeviceData) TableName() string {
-	return "DeviceData" // 数据库名称   // ************** 替换 FormulaList **************
-}
+//func (t *DeviceData) TableName() string {
+//	return "DeviceData" // 数据库名称   // ************** 替换 FormulaList **************
+//}
 
-var redisCache_DeviceData cache.Cache
+var redis_DeviceData cache.Cache
 
 func init() {
 
 	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-		"redisCache_DeviceData", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+		"redis_DeviceData", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
 	fmt.Println(config)
 	var err error
-	redisCache_DeviceData, err = cache.NewCache("redis", config)
-	if err != nil || redisCache_DeviceData == nil {
+	redis_DeviceData, err = cache.NewCache("redis", config)
+	if err != nil || redis_DeviceData == nil {
 		errMsg := "failed to init redis"
 		fmt.Println(errMsg, err)
-
-	}
-
-}
-
-func DeviceData_Set(key string) (err error) {
-
-	err = redisCache_DeviceData.Put(key, "", 2*time.Hour)
-	if err != nil {
-		fmt.Println("set key:", key, err)
 	}
-	return
 }
 
 // ---------------- Redis -------------------
 //Redis_Set(m.T_sn,m) // Redis 更新缓存
-func RedisDeviceData_Set(key string, r DeviceData_New) (err error) {
+func RedisDeviceData_Set(key string, r DeviceData_R) (err error) {
+	if redis_DeviceData.IsExist(key) {
+		var t DeviceData_R
+		v := redis_DeviceData.Get(key)
+		json.Unmarshal(v.([]byte), &t)
+		if t.T_time.Unix() > r.T_time.Unix() {
+			// 储存的 是最新数据
+			return
+		}
+	}
+
 	//json序列化
 	str, err := json.Marshal(r)
 	if err != nil {
 		fmt.Print(err)
 		return
 	}
-
-	err = redisCache_DeviceData.Put(key, str, 1*time.Hour)
+	err = redis_DeviceData.Put(key, str, 1*time.Hour)
 	if err != nil {
 		fmt.Println("set key:", key, ",value:", str, err)
 	}
 	return
 }
 
-//if r,is :=Redis_Get(T_sn);is{
-//return r,nil
-//}
-func RedisDeviceData_Get(key string) (r DeviceData_New, is bool) {
-	v := redisCache_DeviceData.Get(key)
-	json.Unmarshal(v.([]byte), &r)
-	return r, true
-}
-func RedisDeviceData_Get_(key string) (r DeviceData_New, is bool) {
-	if redisCache_DeviceData.IsExist(key) {
-		v := redisCache_DeviceData.Get(key)
+func RedisDeviceData_Get(key string) (r DeviceData_R, is bool) {
+	if redis_DeviceData.IsExist(key) {
+		v := redis_DeviceData.Get(key)
 		json.Unmarshal(v.([]byte), &r)
 		return r, true
 	}
-
-	return DeviceData_New{}, false
-}
-
-func Redis_Set_DeviceData_Time(key string) (err error) {
-
-	err = redisCache_DeviceData.Put(key, "", 40*time.Minute)
-	if err != nil {
-		fmt.Println("set key:", key, err)
-	}
-	return
+	return DeviceData_R{}, false
 }
 
+//-------------------------------------------------------
 //创建数据库  Device.CREATE_DeviceData("")
 func CREATE_DeviceData(SN string) bool {
 
-	sql := "CREATE TABLE IF NOT EXISTS `Z_DeviceData_" + SN + "` ( " +
-		"  `ID` int(11) NOT NULL AUTO_INCREMENT," +
-		"	`t_name` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL," +
-		"	`t_id` int(11) NULL DEFAULT NULL," +
-		"	`t_t` double(6, 2) NULL DEFAULT NULL," +
-		"	`t_rh` double(6, 2) NULL DEFAULT NULL," +
-		"	`t_tl` double(6, 2) NULL DEFAULT NULL," +
-		"	`t_tu` double(6, 2) NULL DEFAULT NULL," +
-		"	`t_rhl` double(6, 2) NULL DEFAULT NULL," +
-		"	`t_rhu` double(6, 2) NULL DEFAULT NULL," +
-		"	`t_site` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL," +
-		"	`t_battery` int(5) NULL DEFAULT NULL," +
-		"	`t_time` datetime(0) NULL DEFAULT NULL," +
-		"	`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0)," +
-		"	PRIMARY KEY (`ID`) USING BTREE" +
-		") ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;"
+	sql := "CREATE TABLE IF NOT EXISTS `Z_DeviceData_" + SN + "` " + CREATEsql
 	o := orm.NewOrm()
 	_, err := o.Raw(sql).Exec()
 	if err != nil {
@@ -144,14 +118,9 @@ func DELETE_DeviceDatar(SN string) bool {
 
 // ---------------- 特殊方法 ------------------
 type DeviceData_T struct {
-	T_name    string    // 标题
 	T_id      int       // ID
 	T_t       float32   // 温度
 	T_rh      float32   // 湿度
-	T_Tlower  float32   // 湿度
-	T_Tupper  float32   // 湿度
-	T_RHlower float32   // 湿度
-	T_RHupper float32   // 湿度
 	T_Site    string    // GPS
 	T_Dattery int       // 电量
 	T_time    time.Time // 采集时间
@@ -166,7 +135,7 @@ func Add_DeviceData(SN string, v DeviceData_T) bool {
 
 	key_time := SN + "|" + strconv.Itoa(v.T_id) + "|" + v.T_time.Format("2006-01-02 15:04:05")
 	fmt.Println(key_time)
-	if redisCache_DeviceData.IsExist(key_time) {
+	if redis_DeviceData.IsExist(key_time) {
 		//println("找到key:",key)
 		return true
 	}
@@ -192,14 +161,9 @@ func Add_DeviceData(SN string, v DeviceData_T) bool {
 		}
 	}
 
-	T_Tlower := strconv.FormatFloat(float64(v.T_Tlower), 'f', -1, 64)
-	T_Tupper := strconv.FormatFloat(float64(v.T_Tupper), 'f', -1, 64)
-	T_RHlower := strconv.FormatFloat(float64(v.T_RHlower), 'f', -1, 64)
-	T_RHupper := strconv.FormatFloat(float64(v.T_RHupper), 'f', -1, 64)
-
 	// 开始插入数据
-	sql := "INSERT INTO Z_DeviceData_" + SN + " (`t_name`, `t_id`, `t_t`, `t_rh`, `t_tl`,`t_tu`,`t_rhl`,`t_rhu`, `t_site`,`t_battery`, `t_time`) " +
-		"VALUES ('" + v.T_name + "'," + strconv.Itoa(v.T_id) + ", " + lib.To_string(v.T_t) + ", " + lib.To_string(v.T_rh) + "," + T_Tlower + "," + T_Tupper + "," + T_RHlower + "," + T_RHupper + ", '" + v.T_Site + "'," + strconv.Itoa(v.T_Dattery) + ", '" + v.T_time.Format("2006-01-02 15:04:05") + "')"
+	sql := "INSERT INTO Z_DeviceData_" + SN + " ( `t_id`, `t_t`, `t_rh`, `t_site`,`t_battery`, `t_time`) " +
+		"VALUES (" + strconv.Itoa(v.T_id) + ", " + lib.To_string(v.T_t) + ", " + lib.To_string(v.T_rh) + ", '" + v.T_Site + "'," + strconv.Itoa(v.T_Dattery) + ", '" + v.T_time.Format("2006-01-02 15:04:05") + "')"
 	//  这里有时间优化  用于一次 prepare 多次 exec,以提高批量执行的速度
 	fmt.Println(sql)
 	res, err := o.Raw(sql).Exec()
@@ -215,35 +179,30 @@ func Add_DeviceData(SN string, v DeviceData_T) bool {
 }
 
 ///---------------
-type DeviceData_ struct {
-	T_name    string  `orm:"column(t_name);size(256);null"`        // 标题
-	T_sn      string  `orm:"column(t_sn);size(256);null"`          // 标题
-	T_id      int     `orm:"column(t_id);size(10);null"`           // ID
-	T_t       float32 `orm:"column(t_t);size(10);null"`            // 温度
-	T_rh      float32 `orm:"column(t_rh);size(10);null"`           // 湿度
-	T_Tlower  float32 `orm:"column(t_tl);size(10);null"`           // 湿度
-	T_Tupper  float32 `orm:"column(t_tu);size(10);null"`           // 湿度
-	T_RHlower float32 `orm:"column(t_rhl);size(10);null"`          // 湿度
-	T_RHupper float32 `orm:"column(t_rhu);size(10);null"`          // 湿度
-	T_site    string  `orm:"column(t_site);type(timestamp);null;"` //
-	T_time    string  `orm:"column(t_time);type(timestamp);null;"` // 采集时间
-}
-type DeviceData_New struct {
-	T_name    string    `orm:"column(t_name);size(256);null"`        // 标题
-	T_id      int       `orm:"column(t_id);size(10);null"`           // ID
-	T_t       float32   `orm:"column(t_t);size(10);null"`            // 温度
-	T_rh      float32   `orm:"column(t_rh);size(10);null"`           // 湿度
-	T_Tlower  float32   `orm:"column(t_tl);size(10);null"`           // 湿度
-	T_Tupper  float32   `orm:"column(t_tu);size(10);null"`           // 湿度
-	T_RHlower float32   `orm:"column(t_rhl);size(10);null"`          // 湿度
-	T_RHupper float32   `orm:"column(t_rhu);size(10);null"`          // 湿度
-	T_Site    string    `orm:"column(t_site);null;"`                 //
-	T_Dattery int       `orm:"column(t_dattery);size(10);null"`      // 电量
-	T_time    time.Time `orm:"column(t_time);type(timestamp);null;"` // 采集时间
-}
+//type DeviceData_ struct {
+//	T_sn     string  `orm:"column(t_sn);size(256);null"`          // 标题
+//	T_id      int     `orm:"column(t_id);size(10);null"`           // ID
+//	T_t       float32 `orm:"column(t_t);size(10);null"`            // 温度
+//	T_rh      float32 `orm:"column(t_rh);size(10);null"`           // 湿度
+//	T_site    string  `orm:"column(t_site);type(timestamp);null;"` // GPS
+//	T_time    string  `orm:"column(t_time);type(timestamp);null;"` // 采集时间
+//}
+//type DeviceData_New struct {
+//	T_name    string    `orm:"column(t_name);size(256);null"`        // 标题
+//	T_id      int       `orm:"column(t_id);size(10);null"`           // ID
+//	T_t       float32   `orm:"column(t_t);size(10);null"`            // 温度
+//	T_rh      float32   `orm:"column(t_rh);size(10);null"`           // 湿度
+//	T_Tlower  float32   `orm:"column(t_tl);size(10);null"`           // 湿度
+//	T_Tupper  float32   `orm:"column(t_tu);size(10);null"`           // 湿度
+//	T_RHlower float32   `orm:"column(t_rhl);size(10);null"`          // 湿度
+//	T_RHupper float32   `orm:"column(t_rhu);size(10);null"`          // 湿度
+//	T_Site    string    `orm:"column(t_site);null;"`                 // GPS
+//	T_Dattery int       `orm:"column(t_dattery);size(10);null"`      // 电量
+//	T_time    time.Time `orm:"column(t_time);type(timestamp);null;"` // 采集时间
+//}
 
 //
-func Read_DeviceSensorData_ById_List(SN string, T_id int, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_, int) {
+func Read_DeviceData_ById_List(SN string, T_id int, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_, int) {
 	o := orm.NewOrm()
 	var maps []DeviceData_
 	var maps_z []orm2.ParamsList
@@ -316,12 +275,12 @@ func Read_SqlRawL(T_SQL string, T_data []string) (string, []orm2.Params) {
 }
 
 // 获取最新数据
-func Read_DeviceSensorData_ById_New(SN string, T_id int) (DeviceData_New, bool) {
+func Read_DeviceData_ById_New(SN string, T_id int) (DeviceData_New, bool) {
 	o := orm.NewOrm()
 	var maps DeviceData_New
 
 	key_data := SN + "|" + strconv.Itoa(T_id)
-	if redisCache_DeviceData.IsExist(key_data) {
+	if redis_DeviceData.IsExist(key_data) {
 		r, _ := RedisDeviceData_Get(key_data)
 		//println("Redis_Get  OK")
 		return r, true
@@ -342,7 +301,7 @@ func Read_DeviceSensorData_ById_New(SN string, T_id int) (DeviceData_New, bool)
 	return maps, true
 }
 
-func Read_DeviceSensorData_By_T_snid_List(T_snid string, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_, int) {
+func Read_DeviceData_By_T_snid_List(T_snid string, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_, int) {
 	T_snid_list := strings.Split(T_snid, "|")
 	var maps []DeviceData_
 	var maps_num int
@@ -351,7 +310,7 @@ func Read_DeviceSensorData_By_T_snid_List(T_snid string, Time_start_ string, Tim
 		sn_id := strings.Split(v, ",")
 
 		if len(sn_id) == 2 {
-			r_maps, r_maps_num := Read_DeviceSensorData_ById_List(sn_id[0], lib.To_int(sn_id[1]), Time_start_, Time_end_, 0, 9999)
+			r_maps, r_maps_num := Read_DeviceData_ById_List(sn_id[0], lib.To_int(sn_id[1]), Time_start_, Time_end_, 0, 9999)
 			for i, _ := range r_maps {
 				r_maps[i].T_sn = sn_id[0]
 			}
@@ -381,7 +340,7 @@ func Read_DeviceSensorData_By_T_snid_List(T_snid string, Time_start_ string, Tim
 	return maps[offset:offset_z], maps_num
 }
 
-func Read_V2_DeviceSensorData_By_T_snid_List(T_snid string, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_, int64) {
+func Read_V2_DeviceData_By_T_snid_List(T_snid string, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_, int64) {
 	T_snid_list := strings.Split(T_snid, "|")
 	var maps []DeviceData_
 	var maps_num int64
@@ -390,7 +349,7 @@ func Read_V2_DeviceSensorData_By_T_snid_List(T_snid string, Time_start_ string,
 		sn_id := strings.Split(v, ",")
 
 		if len(sn_id) == 2 {
-			r_maps, r_maps_num := Read_DeviceSensorData_ById_List(sn_id[0], lib.To_int(sn_id[1]), Time_start_, Time_end_, 0, 9999)
+			r_maps, r_maps_num := Read_DeviceData_ById_List(sn_id[0], lib.To_int(sn_id[1]), Time_start_, Time_end_, 0, 9999)
 			for i, _ := range r_maps {
 				r_maps[i].T_sn = sn_id[0]
 			}
@@ -454,7 +413,7 @@ func Read_DeviceData_ById_Month_List(SN string) []orm2.ParamsList {
 	//key,_ := strconv.Atoi(maps_z[0][0].(string))
 	return maps_z
 }
-func Read_DeviceSensorData_ById_Day_List(SN string) []orm2.ParamsList {
+func Read_DeviceData_ById_Day_List(SN string) []orm2.ParamsList {
 	o := orm.NewOrm()
 
 	var maps_z []orm2.ParamsList
@@ -472,7 +431,7 @@ func Read_DeviceSensorData_ById_Day_List(SN string) []orm2.ParamsList {
 	return maps_z
 }
 
-func Read_DeviceSensorData_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) []orm2.ParamsList {
 	o := orm.NewOrm()
 
 	var maps_z []orm2.ParamsList

+ 21 - 1
models/System/DeviceLogs.go → models/Device/DeviceLogs.go

@@ -1,4 +1,4 @@
-package System
+package Device
 
 import (
 	"Cold_Api/conf"
@@ -49,3 +49,23 @@ func Read_DeviceLogs_ALL(page int, T_sn string) (r []DeviceLogs, cnt int64) {
 
 	return r, cnt
 }
+
+// 获取列表
+func Read_V2DeviceLogs_ALL(T_sn string, page int, page_z int) (r []DeviceLogs, cnt int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(DeviceLogs))
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * conf.Page_size)
+	}
+
+	qs.Limit(conf.Page_size, offset).Filter("T_sn", T_sn).OrderBy("-Id").All(&r)
+	cnt, _ = qs.Filter("T_sn", T_sn).Count()
+
+	return r, cnt
+}

+ 0 - 33
models/Device/DeviceNotice.go

@@ -1,33 +0,0 @@
-package Device
-
-import (
-	_ "github.com/go-sql-driver/mysql"
-	"time"
-)
-
-// 模板
-type DeviceNotice struct {
-	Id                int    `orm:"column(ID);size(11);auto;pk"`
-
-	T_class_id       string `orm:"size(256);null"`  // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_Notice_wx       string `orm:"size(256);null"`  //微信公众号
-	T_Notice_phone       string `orm:"size(256);null"`  //手机
-	T_Notice_message       string `orm:"size(256);null"`  //短信
-	T_Notice_mailbox       string `orm:"size(256);null"`  //邮箱
-
-	T_State       int    `orm:"size(2);1"`       // 0 删除   1 正常
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"`   //auto_now_add 第一次保存时才设置时间
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`   //auto_now 每次 model 保存时都会对时间自动更新
-}
-
-func (t *DeviceNotice) TableName() string {
-	return "DeviceNotice" // 数据库名称   // ************** 替换 FormulaList **************
-}
-
-func init() {
-	//注册模型
-	//orm.RegisterModel(new(DeviceNotice))
-
-}
-
-// ---------------- 特殊方法 -------------------

+ 19 - 22
models/Device/DeviceParameter.go

@@ -12,27 +12,24 @@ import (
 type DeviceParameter struct {
 	Id int `orm:"column(ID);size(11);auto;pk"`
 
-	T_sn string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-
-	T_devName      string  `orm:"size(256);null"` //设备名称
-	T_uploadTime   int     `orm:"size(200);null"` //实时数据上传间隔
-	T_saveTime     int     `orm:"size(200);null"` //数据保存间隔
-	T_overrunSave  int     `orm:"size(200);null"` //数据超限保存间隔
-	T_overrunAlarm int     `orm:"size(200);null"` //超限报警触发间隔
-	T_outageAlarm  int     `orm:"size(200);null"` //断电报警触发间隔
-	T_lostAlarm    int     `orm:"size(200);null"` //传感器掉线报警触发间隔
-	T_warningTime  int     `orm:"size(200);null"` // 超限预警触发间隔
-	T_warningDelay int     `orm:"size(200);null"` //超限预警延时
-	T_batteryLimit int     `orm:"size(200);null"` //电池电量下限
-	T_tempPre      float32 `orm:"size(200);null"` //温度预警提前量
-	T_humPre       float32 `orm:"size(200);null"` //湿度预警提前量
-	T_enwarning    int     `orm:"size(2);null"`   //是否启动超限预警
-	T_company      string  `orm:"size(256);''"`   //公司名称
-	T_btname       string  `orm:"size(256);''"`   //蓝牙打印机名称
-	T_btserverID   string  `orm:"size(256);''"`   //打印机服务号
-	T_btchar       string  `orm:"size(256);''"`   //蓝牙特征码
-	T_decTotal     string  `orm:"size(256);''"`   ////配置管理主机总终端数量
-	T_chDecTotal   string  `orm:"size(256);''"`   //[18,19,21,12,30,0,0,0,0,0]  //配置每个通道数量[第1通道,第2通道…第10通道]
+	T_sn           string `orm:"index;size(256);null"` //   设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_devName      string `orm:"size(256);null"`       //设备名称
+	T_uploadTime   int    `orm:"size(200);null"`       //实时数据上传间隔
+	T_saveTime     int    `orm:"size(200);null"`       //数据保存间隔
+	T_overrunSave  int    `orm:"size(200);null"`       //数据超限保存间隔
+	T_overrunAlarm int    `orm:"size(200);null"`       //超限报警触发间隔
+	T_outageAlarm  int    `orm:"size(200);null"`       //断电报警触发间隔
+	T_lostAlarm    int    `orm:"size(200);null"`       //传感器掉线报警触发间隔
+	T_warningTime  int    `orm:"size(200);null"`       // 超限预警触发间隔
+	T_warningDelay int    `orm:"size(200);null"`       //超限预警延时
+	T_batteryLimit int    `orm:"size(200);null"`       //电池电量下限
+	T_enwarning    int    `orm:"size(2);null"`         //是否启动超限预警
+	T_company      string `orm:"size(256);''"`         //公司名称
+	T_btname       string `orm:"size(256);''"`         //蓝牙打印机名称
+	T_btserverID   string `orm:"size(256);''"`         //打印机服务号
+	T_btchar       string `orm:"size(256);''"`         //蓝牙特征码
+	T_decTotal     string `orm:"size(256);''"`         ////配置管理主机总终端数量
+	T_chDecTotal   string `orm:"size(256);''"`         //[18,19,21,12,30,0,0,0,0,0]  //配置每个通道数量[第1通道,第2通道…第10通道]
 
 	T_uuid      string    `orm:"size(256);null"`                                        //处理 人员
 	T_Msid      int       `orm:"size(50);0"`                                            // 消息识别ID
@@ -149,7 +146,7 @@ func Read_DeviceParameter_SN_List(T_sn string) (r []DeviceParameter) {
 
 	qs := o.QueryTable(new(DeviceParameter))
 
-	qs.Limit(3, 0).Filter("T_sn", T_sn).Filter("T_State", 2).OrderBy("-Id").All(&r)
+	qs.Limit(10, 0).Filter("T_sn", T_sn).OrderBy("-Id").All(&r)
 
 	return r
 }

+ 142 - 177
models/Device/DeviceSensor.go

@@ -3,14 +3,13 @@ package Device
 import (
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
-	"Cold_Api/models/Admin"
+	"Cold_Api/models/Account"
 	"encoding/json"
 	"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"
-	beego "github.com/beego/beego/v2/server/web"
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
 	"strings"
@@ -19,41 +18,26 @@ import (
 
 // 模板
 type DeviceSensor struct {
-	Id int `orm:"column(ID);size(11);auto;pk"`
+	T_sn   string `orm:"pk;size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_id   int    `orm:"pk;size(11);null"`  // 传感器编号
+	T_name string `orm:"size(256);null"`    // 标题
+
+	T_pid      int    `orm:"index;size(256);null"` // Account.Company 绑定公司
+	T_Calss    string `orm:"size(256);null"`       // Device.DeviceClass.Id 设备分类  C1|C2|
+	T_Notice   string `orm:"size(256);null"`       // Device.DeviceNotice.Id 设备通知策略  N1|N2|
+	T_datashow int    `orm:"index;size(2);1"`      // 0 屏蔽数据展示  1 正常数据展示
+	T_sort     int    `orm:"index;size(200);1"`    // 排序
+	T_3dview   string `orm:"size(256);null"`       // 3D 视图ID
+
+	// 设备同步参数
+	T_Dattery  int    `orm:"size(4);null"`       // 电量
+	T_Site     string `orm:"size(200);null"`     // GPS
+	T_type     int    `orm:"index;size(4);null"` // Device.DeviceType  1库房   2移动
+	T_give     int    `orm:"index;size(2);1"`    // 屏蔽状态 0 屏蔽  1 正常
+	T_monitor  int    `orm:"index;size(2);null"` // 监控状态 0 未监控 1 监控
+	T_online   int    `orm:"index;size(2);1"`    // 在线状态 0 未启用  1 在线  2 离线
+	T_online_s int    `orm:"index;size(2);0"`    // 在线状态-备用  0 未启用  1 在线  2 离线
 
-	T_sn   string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_id   int    `orm:"size(11);null"`  // 传感器编号
-	T_name string `orm:"size(256);null"` // 标题
-
-	T_t  float32 `orm:"size(10);null"` // 温度
-	T_rh float32 `orm:"size(10);null"` // 湿度
-
-	T_Tlower  float32 `orm:"size(200);null"` //  温度下限
-	T_Tupper  float32 `orm:"size(200);null"` //  温度上限
-	T_RHlower float32 `orm:"size(200);null"` //  湿度下限
-	T_RHupper float32 `orm:"size(200);null"` //  湿度上限
-	T_en      int     `orm:"size(2);1"`      // en:是否启用传感器,
-	T_free    int     `orm:"size(2);1"`      // free:监测点是否为闲置状态(空库,只监测不报警)
-
-	//T_del int `orm:"size(2);1"` // 0 删除  1 正常
-	//T_err int `orm:"size(2);1"` // 0 正常  1 异常
-
-	T_time    time.Time `orm:"type(timestamp);null;"` // 采集时间
-	T_Bind    string    `orm:"size(256);null"`        //设备绑定 Uid  (这里单独改没有,要在 设备里面加入)
-	T_Site    string    `orm:"size(256);null"`        //GPS
-	T_Dattery int       `orm:"size(256);null"`        //电量
-
-	T_monitor int `orm:"size(256);null"` //  记录状态
-
-	T_3dview string `orm:"size(256);null"` //3D 视图ID
-
-	T_Calss    string    `orm:"size(256);null"`                                        //设备分类
-	T_l_p      int       `orm:"size(22);null"`                                         // 1物流端   2药店端
-	T_give     int       `orm:"size(2);1"`                                             // 0 丢弃  1 正常
-	T_datashow int       `orm:"size(2);1"`                                             // 0 屏蔽数据展示  1 正常数据展示
-	T_Visit    int       `orm:"size(200);1"`                                           // 浏览量
-	T_sort     int       `orm:"size(200);1"`                                           // 排序
-	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
@@ -69,27 +53,23 @@ func (t *DeviceSensor) TableName() string {
 
 // 模板
 type DeviceSensor_R struct {
-	T_sn       string  // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_id       int     // 传感器编号
-	T_name     string  // 标题
-	T_t        float32 // 温度
-	T_rh       float32 // 湿度
-	T_Tlower   float32 //  温度下限
-	T_Tupper   float32 //  温度上限
-	T_RHlower  float32 //  湿度下限
-	T_RHupper  float32 //  湿度上限
-	T_time     string  // 采集时间
-	T_Site     string  //GPS
-	T_3dview   string  //3D 视图ID
-	T_Dattery  int     //电量
-	T_monitor  int     //  记录状态
-	T_online   int     //  在线状态 1 在线  0 离线
-	T_datashow int     //   0 屏蔽数据展示  1 正常数据展示
+	T_sn   string // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_id   int    // 传感器编号
+	T_name string // 标题
+
+	T_3dview   string //3D 视图ID
+	T_sort     int    // 排序
+	T_Dattery  int    //电量
+	T_monitor  int    //  记录状态
+	T_online   int    //  在线状态 1 在线  0 离线
+	T_datashow int    //   0 屏蔽数据展示  1 正常数据展示
+
+	T_DeviceSensorData      DeviceData_R            // 传感器最新数据
+	T_DeviceSensorParameter DeviceSensorParameter_R //  设备参数
 
 }
 
 var redisCache_DeviceSensor cache.Cache
-var HTTPPort_int = 0
 
 func init() {
 	//注册模型
@@ -103,10 +83,8 @@ func init() {
 	if err != nil || redisCache_DeviceSensor == nil {
 		errMsg := "failed to init redis"
 		fmt.Println(errMsg, err)
-
 	}
-	HTTPPort, _ := beego.AppConfig.String("HTTPPort")
-	HTTPPort_int, _ = strconv.Atoi(HTTPPort)
+
 }
 
 // ---------------- Redis -------------------
@@ -127,30 +105,24 @@ func Redis_DeviceSensor_Set(r DeviceSensor) (err error) {
 	}
 	return
 }
-
-//if r,is :=Redis_Get(T_sn);is{
-//return r,nil
-//}
 func Redis_DeviceSensor_Get(key string) (r DeviceSensor, is bool) {
 	if redisCache_DeviceSensor.IsExist(key) {
 		//println("找到key:",key)
 		v := redisCache_DeviceSensor.Get(key)
 		json.Unmarshal(v.([]byte), &r)
-		if r.Id == -1 {
-			return DeviceSensor{}, false
-		}
 		return r, true
 	}
 	//println("没有 找到key:",key)
 	return DeviceSensor{}, false
 }
-
 func Redis_DeviceSensor_DelK(r DeviceSensor) (err error) {
 	key := r.T_sn + "|" + strconv.Itoa(r.T_id)
 	err = redisCache_DeviceSensor.Delete(key)
 	return
 }
 
+// ---------------- 特殊方法 -------------------
+
 func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r DeviceSensor_R) {
 	lib.DeviceRealSnMap[DeviceSensor_r.T_sn] = 3 // 连续请求 实时数据
 
@@ -159,24 +131,18 @@ func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r De
 	DeviceSensor_r.T_name = DeviceSensor_.T_name
 	DeviceSensor_r.T_t = DeviceSensor_.T_t
 	DeviceSensor_r.T_rh = DeviceSensor_.T_rh
-	DeviceSensor_r.T_Tlower = DeviceSensor_.T_Tlower
-	DeviceSensor_r.T_Tupper = DeviceSensor_.T_Tupper
-	DeviceSensor_r.T_RHlower = DeviceSensor_.T_RHlower
-	DeviceSensor_r.T_RHupper = DeviceSensor_.T_RHupper
+
 	DeviceSensor_r.T_time = DeviceSensor_.T_time.Format("2006-01-02 15:04:05")
 	DeviceSensor_r.T_Site = DeviceSensor_.T_Site
 	DeviceSensor_r.T_Dattery = DeviceSensor_.T_Dattery
 	DeviceSensor_r.T_monitor = DeviceSensor_.T_monitor
 	DeviceSensor_r.T_3dview = DeviceSensor_.T_3dview
+	DeviceSensor_r.T_sort = DeviceSensor_.T_sort
 
 	DeviceSensor_r.T_datashow = DeviceSensor_.T_datashow
 
-	// 最新设备数据
-	d_r, d_r_err := Read_Device_ByT_sn(DeviceSensor_.T_sn)
-	if d_r_err == nil {
-		DeviceSensor_r.T_monitor = d_r.T_monitor
-		DeviceSensor_r.T_online = d_r.T_online
-	}
+	// 最新系统参数
+	DeviceSensor_r.T_DeviceSensorParameter, _ = Read_V2DeviceSensorParameter(DeviceSensor_.T_sn, DeviceSensor_.T_id)
 
 	// 最新数据
 	key_data := DeviceSensor_.T_sn + "|" + strconv.Itoa(DeviceSensor_.T_id)
@@ -197,13 +163,108 @@ func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r De
 
 // ---------------- 特殊方法 -------------------
 
+// ----------------------------------- v2 -------------------------------------------------------------
+
+// 获取列表 - 总数
+func Read_V2_DeviceSensor_ByTsn_num(T_sn string) int {
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	qs := o.QueryTable(new(DeviceSensor))
+	cnt, _ := qs.Filter("T_sn", T_sn).Count()
+	return int(cnt)
+}
+
+// 获取列表
+func Read_DeviceSensor_v2_List(user_ Account.Admin, T_sn string, T_name string, T_Calss_id int, T_give int, T_datashow int, page int, page_z int) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(DeviceSensor))
+	var offset int64
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
+	if user_.Admin_master <= 1 {
+		T_Bind = ""
+	}
+
+	fmt.Println("T_Bind:", T_Bind)
+
+	var r []DeviceSensor
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_Bind__icontains", T_Bind) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+
+	if T_Calss_id > 0 {
+		T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
+		fmt.Println("T_Calss:", T_Calss)
+		cond1 = cond1.And("T_Calss__icontains", T_Calss)
+	}
+
+	if len(T_sn) > 0 {
+		cond1 = cond1.And("T_sn__icontains", T_sn)
+	}
+
+	if len(T_name) > 0 {
+		cond1 = cond1.AndCond(cond.Or("T_name__icontains", T_name).Or("T_sn__icontains", T_name))
+	}
+
+	if T_give != -1 { // 0 :丢弃  1:正常    空:所有
+		cond1 = cond1.And("T_give", T_give)
+	} else {
+		// 非内部权限
+		println("user_.Admin_power:", user_.Admin_power)
+		if user_.Admin_power < 6 {
+			cond1 = cond1.And("T_give", 1)
+		}
+	}
+
+	if T_datashow != -1 { // 空:正常显示   1:强制显示 屏蔽数据展示
+		cond1 = cond1.And("T_datashow", 1)
+	}
+
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	//
+	//qs.Limit(page_z, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", SN_type).Filter("T_sn__icontains", T_sn).Filter("T_name__icontains", T_name).OrderBy("T_sort").All(&r)
+	//cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", T_sn).Filter("T_sn__icontains", SN_type).Filter("T_name__icontains", T_name).Count()
+
+	//for i, v := range r {
+	//
+	//	// 提前最新数据
+	//	DeviceSensorData, is := Read_DeviceSensorData_ById_New(v.T_sn, v.T_id)
+	//	if !is {
+	//		continue
+	//	}
+	//	if DeviceSensorData.T_time.After(v.T_time) {
+	//		//fmt.Println(v.T_sn, v.T_id, DeviceSensorData.T_time)
+	//		r[i].T_t = DeviceSensorData.T_t
+	//		r[i].T_rh = DeviceSensorData.T_rh
+	//		r[i].T_time = DeviceSensorData.T_time
+	//	}
+	//
+	//}
+	for _, v := range r {
+		DeviceSensor_r = append(DeviceSensor_r, DeviceSensorToDeviceSensor_R(v))
+	}
+	return DeviceSensor_r, cnt
+	//return r, cnt
+}
+
+// ----------------------------------- v1 -------------------------------------------------------------
+
 // 获取
 func Read_DeviceSensor_ByT_sn(T_sn string, T_id int) (r DeviceSensor, is bool) {
 	key := r.T_sn + "|" + strconv.Itoa(r.T_id)
 	if r, is := Redis_DeviceSensor_Get(key); is {
-		if r.Id == -1 {
-			return r, false
-		}
 		return r, true
 	}
 	o := orm.NewOrm()
@@ -211,8 +272,6 @@ func Read_DeviceSensor_ByT_sn(T_sn string, T_id int) (r DeviceSensor, is bool) {
 	err := o.Read(&r, "T_sn", "T_id") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 		fmt.Println("Delete_DeviceSensor_ById", err)
-		r.Id = -1
-		Redis_DeviceSensor_Set(r)
 		return r, false
 	}
 
@@ -303,7 +362,7 @@ func DeviceSensor_T_Calss_ALL_Del(T_Calss_id int) {
 //	}
 //}
 // 修改
-func DeviceSensor_T_Bind_Add(T_sn string, T_id int, admin_r Admin.Admin) (err error) {
+func DeviceSensor_T_Bind_Add(T_sn string, T_id int, admin_r Account.Admin) (err error) {
 	o := orm.NewOrm()
 	v := DeviceSensor{T_sn: T_sn, T_id: T_id}
 	T_Bind := "U" + strconv.Itoa(admin_r.Id) + "|"
@@ -411,16 +470,7 @@ func Read_DeviceSensor_ALL_T_sn(T_sn string, page int, page_z int) (DeviceSensor
 	var r []DeviceSensor
 	qs.Limit(page_z, offset).Filter("T_sn", T_sn).OrderBy("T_id").All(&r)
 	cnt, _ = qs.Filter("T_sn", T_sn).Count()
-	//for i, v := range r {
-	//	DeviceSensorData, is := Read_DeviceSensorData_ById_New(v.T_sn, v.T_id)
-	//	if !is {
-	//		continue
-	//	}
-	//	//fmt.Println(v.T_sn, v.T_id, DeviceSensorData.T_time)
-	//	r[i].T_t = DeviceSensorData.T_t
-	//	r[i].T_rh = DeviceSensorData.T_rh
-	//	r[i].T_time = DeviceSensorData.T_time
-	//}
+
 	for _, v := range r {
 		DeviceSensor_r = append(DeviceSensor_r, DeviceSensorToDeviceSensor_R(v))
 	}
@@ -428,7 +478,7 @@ func Read_DeviceSensor_ALL_T_sn(T_sn string, page int, page_z int) (DeviceSensor
 }
 
 // 获取列表
-func Read_DeviceSensor_class_ALL_1(user_ Admin.Admin, T_Calss_id int, page int, page_z int, T_sn string, T_name string, SN_type string) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
+func Read_DeviceSensor_class_ALL_1(user_ Account.Admin, T_Calss_id int, page int, page_z int, T_sn string, T_name string, SN_type string) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -499,92 +549,7 @@ func Read_DeviceSensor_class_ALL_1(user_ Admin.Admin, T_Calss_id int, page int,
 }
 
 // 获取列表
-func Read_DeviceSensor_v2_List(user_ Admin.Admin, T_sn string, T_name string, T_Calss_id int, T_give int, T_datashow int, page int, page_z int) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(DeviceSensor))
-	var offset int64
-	if page_z == 0 {
-		page_z = conf.Page_size
-	}
-	if page <= 1 {
-		offset = 0
-	} else {
-		offset = int64((page - 1) * page_z)
-	}
-
-	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
-	if user_.Admin_master <= 1 {
-		T_Bind = ""
-	}
-
-	fmt.Println("T_Bind:", T_Bind)
-
-	var r []DeviceSensor
-	cond := orm.NewCondition()
-	cond1 := cond.And("T_Bind__icontains", T_Bind) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
-
-	if T_Calss_id > 0 {
-		T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
-		fmt.Println("T_Calss:", T_Calss)
-		cond1 = cond1.And("T_Calss__icontains", T_Calss)
-	}
-
-	if len(T_sn) > 0 {
-		cond1 = cond1.And("T_sn__icontains", T_sn)
-	}
-
-	if len(T_name) > 0 {
-		cond1 = cond1.AndCond(cond.Or("T_name__icontains", T_name).Or("T_sn__icontains", T_name))
-	}
-
-	if T_give != -1 { // 0 :丢弃  1:正常    空:所有
-		cond1 = cond1.And("T_give", T_give)
-	} else {
-		// 非内部权限
-		println("user_.Admin_power:", user_.Admin_power)
-		if user_.Admin_power < 6 {
-			cond1 = cond1.And("T_give", 1)
-		}
-	}
-
-	if T_datashow != -1 { // 空:正常显示   1:强制显示 屏蔽数据展示
-		cond1 = cond1.And("T_datashow", 1)
-	}
-
-	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
-	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
-
-	//
-	//qs.Limit(page_z, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", SN_type).Filter("T_sn__icontains", T_sn).Filter("T_name__icontains", T_name).OrderBy("T_sort").All(&r)
-	//cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", T_sn).Filter("T_sn__icontains", SN_type).Filter("T_name__icontains", T_name).Count()
-
-	//for i, v := range r {
-	//
-	//	// 提前最新数据
-	//	DeviceSensorData, is := Read_DeviceSensorData_ById_New(v.T_sn, v.T_id)
-	//	if !is {
-	//		continue
-	//	}
-	//	if DeviceSensorData.T_time.After(v.T_time) {
-	//		//fmt.Println(v.T_sn, v.T_id, DeviceSensorData.T_time)
-	//		r[i].T_t = DeviceSensorData.T_t
-	//		r[i].T_rh = DeviceSensorData.T_rh
-	//		r[i].T_time = DeviceSensorData.T_time
-	//	}
-	//
-	//}
-	for _, v := range r {
-		DeviceSensor_r = append(DeviceSensor_r, DeviceSensorToDeviceSensor_R(v))
-	}
-	return DeviceSensor_r, cnt
-	//return r, cnt
-}
-
-// 获取列表
-func Read_DeviceSensor_Map_ALL_1(user_ Admin.Admin, T_Calss_id int, T_sn string, T_name string, SN_type string) (r []DeviceSensor) {
+func Read_DeviceSensor_Map_ALL_1(user_ Account.Admin, T_Calss_id int, T_sn string, T_name string, SN_type string) (r []DeviceSensor) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名

+ 121 - 41
models/Device/DeviceSensorParameter.go

@@ -1,36 +1,41 @@
 package Device
 
 import (
+	"Cold_Api/conf"
+	"Cold_Api/models"
+	"encoding/json"
 	"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/go-sql-driver/mysql"
+	"strconv"
 	"time"
 )
 
 // 模板
 type DeviceSensorParameter struct {
-	Id int `orm:"column(ID);size(11);auto;pk"`
-
-	T_sn   string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_id   int    `orm:"size(11);null"`  // 传感器编号
-	T_name string `orm:"size(256);null"` // 标题
-
-	//T_t      float32    `orm:"size(10);null"`  // 温度
-	//T_rh        float32 `orm:"size(10);null"`  // 湿度
+	Id   int    `orm:"column(ID);size(11);auto;pk"`
+	T_sn string `orm:"index;size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_id int    `orm:"index;size(11);null"`  // 传感器编号
 
+	// 报警
 	T_Tlower  float32 `orm:"size(200);null"` //  温度下限
 	T_Tupper  float32 `orm:"size(200);null"` //  温度上限
 	T_RHlower float32 `orm:"size(200);null"` //  湿度下限
 	T_RHupper float32 `orm:"size(200);null"` //  湿度上限
-	T_en      int     `orm:"size(2);1"`      // en:是否启用传感器,
-	T_free    int     `orm:"size(2);1"`      // free:监测点是否为闲置状态(空库,只监测不报警)
-
+	// 预警
 	T_enprel int     `orm:"size(2);1"`      // 是否启用预警
 	T_tprel  float32 `orm:"size(200);null"` //  温度预警下限
 	T_tpreu  float32 `orm:"size(200);null"` //  温度预警上限
 	T_hprel  float32 `orm:"size(200);null"` //  湿度预警下限
 	T_hpreu  float32 `orm:"size(200);null"` //  温度预警上限
 
+	T_en   int `orm:"size(2);1"` // en:是否启用传感器,
+	T_free int `orm:"size(2);1"` // free:监测点是否为闲置状态(空库,只监测不报警)
+
+	// 逻辑字段
 	T_uuid      string `orm:"size(256);null"` //处理 人员
 	T_Msid      int64  `orm:"size(50);0"`     // 消息识别ID
 	T_SendState int    `orm:"size(2);0"`      // 发送状态  0 待发送   1 发送成功  2 失败  3 覆盖
@@ -40,54 +45,141 @@ type DeviceSensorParameter struct {
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
 
+type DeviceSensorParameter_R struct {
+
+	// 报警
+	T_Tlower  float32 //  温度下限
+	T_Tupper  float32 //  温度上限
+	T_RHlower float32 //  湿度下限
+	T_RHupper float32 //  湿度上限
+	// 预警
+	T_enprel int     // 是否启用预警
+	T_tprel  float32 //  温度预警下限
+	T_tpreu  float32 //  温度预警上限
+	T_hprel  float32 //  湿度预警下限
+	T_hpreu  float32 //  温度预警上限
+
+	T_en   int // en:是否启用传感器,
+	T_free int // free:监测点是否为闲置状态(空库,只监测不报警)
+
+	T_time models.JsonTime
+}
+
+func DeviceSensorParameter_To_DeviceSensorParameter_R(r DeviceSensorParameter) (t DeviceSensorParameter_R) {
+	t.T_Tlower = r.T_Tlower
+	t.T_Tupper = r.T_Tupper
+	t.T_RHlower = r.T_RHlower
+	t.T_RHupper = r.T_RHupper
+	t.T_enprel = r.T_enprel
+	t.T_tprel = r.T_tprel
+	t.T_tpreu = r.T_tpreu
+	t.T_hprel = r.T_hprel
+	t.T_hpreu = r.T_hpreu
+	t.T_en = r.T_en
+	t.T_free = r.T_free
+	t.T_time.Time = r.CreateTime
+
+	return t
+}
 func (t *DeviceSensorParameter) TableName() string {
 	return "DeviceSensorParameter" // 数据库名称   // ************** 替换 FormulaList **************
 }
 
+var redisCache_DeviceSensorParameter cache.Cache
+
 func init() {
 	//注册模型
 	orm.RegisterModel(new(DeviceSensorParameter))
+	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+		"redis_DeviceSensorParameter", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	fmt.Println(config)
+	var err error
+	redisCache_DeviceSensorParameter, err = cache.NewCache("redis", config)
+	if err != nil || redisCache_DeviceSensorParameter == nil {
+		errMsg := "failed to init redis"
+		fmt.Println(errMsg, err)
+	}
 
 }
 
-// ---------------- 特殊方法 -------------------
-// 获取列表
-func Read_DeviceSensorParameter_SN_T_id(T_sn string, T_id int) (r []DeviceSensorParameter) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
+// ---------------- Redis -------------------
+//Redis_Set(m.T_sn,m) // Redis 更新缓存
+func Redis_DeviceSensorParameter_Set(key string, r DeviceSensorParameter_R) (err error) {
 
-	qs := o.QueryTable(new(DeviceSensorParameter))
+	//json序列化
+	str, err := json.Marshal(r)
+	if err != nil {
+		fmt.Print(err)
+		return
+	}
 
-	qs.Limit(3, 0).Filter("T_sn", T_sn).Filter("T_id", T_id).Filter("T_State", 2).OrderBy("-Id").All(&r)
+	err = redisCache_DeviceSensorParameter.Put(key, str, 8*time.Hour)
+	if err != nil {
+		fmt.Println("set key:", key, ",value:", str, err)
+	}
+	return
+}
 
-	return r
+//if r,is :=Redis_Get(T_sn);is{
+//return r,nil
+//}
+func Redis_DeviceSensorParameter_Get(key string) (r DeviceSensorParameter_R, is bool) {
+	if redisCache_DeviceSensorParameter.IsExist(key) {
+		//println("找到key:",key)
+		v := redisCache_DeviceSensorParameter.Get(key)
+		json.Unmarshal(v.([]byte), &r)
+		return r, true
+	}
+	//println("没有 找到key:",key)
+	return DeviceSensorParameter_R{}, false
 }
 
-// 获取列表
-func Read_DeviceSensorParameter_List(T_sn string, T_id int) (r []DeviceSensorParameter) {
+// ---------------- 特殊方法 -------------------
+// 获取设备参数
+func Read_V2DeviceSensorParameter(T_sn string, T_id int) (t DeviceSensorParameter_R, bool bool) {
+	key := T_sn + "|" + strconv.Itoa(T_id)
+	if t, is := Redis_DeviceSensorParameter_Get(key); is {
+		return t, true
+	}
+	o := orm.NewOrm()
+	r := DeviceSensorParameter{T_sn: T_sn, T_id: T_id, T_State: 1}
+	err := o.Read(&r, "T_sn", "T_id", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	if err != nil {
+		fmt.Println("DeviceSensorParameter", err)
+		return t, false
+	}
+	t = DeviceSensorParameter_To_DeviceSensorParameter_R(r)
+	Redis_DeviceSensorParameter_Set(key, t)
+	return t, true
+}
 
+// 获取列表  T_State  1 系统获取   2 用户提交
+func Read_V2DeviceSensorParameter_List(T_sn string, T_id int, T_State int, page_z int) (r []DeviceSensorParameter) {
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
 	qs := o.QueryTable(new(DeviceSensorParameter))
+	cond := orm.NewCondition()
 
-	qs.Limit(3, 0).Filter("T_sn", T_sn).Filter("T_id", T_id).Filter("T_State", 2).OrderBy("-Id").All(&r)
+	cond = cond.And("T_sn", T_sn)
+	cond = cond.And("T_id", T_id)
+	if T_State != 0 {
+		cond = cond.And("T_State", T_State)
+	}
+	qs.Limit(page_z, 0).SetCond((*orm2.Condition)(cond)).OrderBy("-Id").All(&r)
 
 	return r
 }
 
 // 添加
-func Add_DeviceSensorParameter(m DeviceSensorParameter) (int64, bool) {
+func Add_DeviceSensorParameter(m DeviceSensorParameter) bool {
 	o := orm.NewOrm()
-
-	id, err := o.Insert(&m)
+	_, err := o.Insert(&m)
 	if err != nil {
 		fmt.Println(err)
-		return id, false
+		return false
 	}
-
-	return id, true
+	return true
 }
 
 // 修改
@@ -100,18 +192,6 @@ func Update_DeviceSensorParameter(r DeviceSensorParameter, cols ...string) bool
 	return false
 }
 
-// 修改
-func Update_DeviceSensorParameter_(m []DeviceSensorParameter) (err error) {
-	o := orm.NewOrm()
-	for _, v := range m {
-		println(v.Id, v.T_SendState)
-		if num, err := o.Update(&v, "T_SendState"); err == nil {
-			fmt.Println("Number of records updated in database:", num)
-		}
-	}
-
-	return err
-}
 func DELETE_DeviceSensorParameter(SN string) bool {
 
 	sql := "DELETE FROM `culd`.`DeviceSensorParameter` WHERE `t_sn` = '" + SN + "' "

+ 34 - 2
models/Device/DeviceTask.go

@@ -1,7 +1,9 @@
 package Device
 
 import (
+	"Cold_Api/conf"
 	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
 	"time"
 )
@@ -42,11 +44,41 @@ func Read_DeviceTask_All_Limit_1(T_sn string) (DeviceTask, bool) {
 }
 
 // 获取全部
-func Read_DeviceTask_All_50(T_sn string,Time_end string,Time_start string) ([]DeviceTask, bool) {
+func Read_DeviceTask_All_50(T_sn string, Time_end string, Time_start string) ([]DeviceTask, bool) {
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(DeviceTask))
 	var r_l []DeviceTask
-	qs.Filter("T_sn", T_sn).Filter("T_Ut_start__gte",Time_start ).Filter("T_Ut_end__lte", Time_end).OrderBy("-Id").All(&r_l)
+	qs.Filter("T_sn", T_sn).Filter("T_Ut_start__gte", Time_start).Filter("T_Ut_end__lte", Time_end).OrderBy("-Id").All(&r_l)
 
 	return r_l, false
 }
+
+// 获取全部
+func Read_V2_DeviceTask_All(T_sn string, Time_start string, Time_end string, page int, page_z int) (r_l []DeviceTask, cnt int64) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(DeviceTask))
+	var offset int64
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
+
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_sn", T_sn) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+	if len(Time_start) > 1 {
+		cond1 = cond1.And("T_Ut_start__gte", Time_start)
+	}
+	if len(Time_end) > 1 {
+		cond1 = cond1.And("T_Ut_end__lte", Time_end)
+	}
+
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r_l)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	return
+}

+ 26 - 0
models/Device/DeviceType.go

@@ -0,0 +1,26 @@
+package Device
+
+import (
+	"github.com/beego/beego/v2/adapter/orm"
+	_ "github.com/go-sql-driver/mysql"
+)
+
+// 设备类型: 1库房   2移动  。。。
+type DeviceType struct {
+	Id int `orm:"column(ID);size(11);auto;pk"`
+
+	T_name string `orm:"size(256);null"`  // 标题
+	T_text string `orm:"type(text);null"` // 详情
+
+	T_State int `orm:"size(2);1"` // 0 删除   1 正常
+}
+
+func (t *DeviceType) TableName() string {
+	return "DeviceType" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(DeviceType))
+
+}

+ 0 - 136
models/Device/DeviceWarningList.go

@@ -1,136 +0,0 @@
-package Device
-
-import (
-	"Cold_Api/logs"
-	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/adapter/orm"
-	_ "github.com/go-sql-driver/mysql"
-	"time"
-)
-
-// 模板
-type DeviceWarningList struct {
-	Id     int    `orm:"column(ID);size(11);auto;pk"`
-	T_name string `orm:"size(256);null"`            // 分类
-	T_Tips string `orm:"type(text);size(256);null"` // 提示
-}
-
-func (t *DeviceWarningList) TableName() string {
-	return "DeviceWarningList" // 数据库名称   // ************** 替换 FormulaList **************
-}
-
-//var redisCache_DeviceWarningList cache.Cache
-
-func init() {
-	//注册模型
-	orm.RegisterModel(new(DeviceWarningList))
-	//
-	//config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
-	//	"redis_DeviceWarningList", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
-	//fmt.Println(config)
-	//var err error
-	//redisCache_DeviceWarningList, err = cache.NewCache("redis", config)
-	//if err != nil || redisCache_DeviceWarningList == nil {
-	//	errMsg := "failed to init redis"
-	//	fmt.Println(errMsg, err)
-	//	panic(err)
-	//}
-
-	//go Read_DeviceWarningList_All_1()
-}
-
-// ---------------- Redis -------------------
-//Redis_Set(m.T_sn,m) // Redis 更新缓存
-//func Redis_DeviceWarningList_Set(r DeviceWarningList) (err error) {
-//	//json序列化
-//	str, err := json.Marshal(r)
-//	if err != nil {
-//		fmt.Print(err)
-//		return
-//	}
-//
-//	err = redisCache_DeviceWarningList.Put(r.T_name, str, 0)
-//	if err != nil {
-//		fmt.Println("set key:", r.T_name, ",value:", str, err)
-//	}
-//	return
-//}
-//
-////if r,is :=Redis_Get(T_sn);is{
-////return r,nil
-////}
-//func Redis_DeviceWarningList_Get(key string) (r DeviceWarningList, is bool) {
-//	if redisCache_DeviceWarningList.IsExist(key) {
-//		//println("找到key:",key)
-//		v := redisCache_DeviceWarningList.Get(key)
-//
-//		json.Unmarshal(v.([]byte), &r)
-//		return r, true
-//	}
-//	//println("没有 找到key:",key)
-//	return DeviceWarningList{}, false
-//}
-// ---------------- 特殊方法 -------------------
-//
-//// 获取 ById
-//func Read_DeviceWarningList(T_name string) (r DeviceWarningList) {
-//
-//	if r, is := Redis_DeviceWarningList_Get(T_name); is {
-//		//println("Redis_Get  OK")
-//		return r
-//	}
-//	o := orm.NewOrm()
-//	r = DeviceWarningList{T_name: T_name}
-//	err := o.Read(&r,"T_name") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
-//	if err != nil {
-//		o.Insert(&r)
-//		o.Read(&r,"T_name")
-//	}
-//
-//	Redis_DeviceWarningList_Set(r)
-//	return r
-//}
-//
-//// 修改
-//func Update_DeviceWarningList(r DeviceWarningList, cols ...string) bool {
-//	o := orm.NewOrm()
-//	if num, err := o.Update(&r, cols...); err == nil {
-//		fmt.Println("Number of records updated in database:", num)
-//		Redis_DeviceWarningList_Set(r) // Redis 更新缓存
-//		return true
-//	}
-//
-//	return false
-//}
-//
-//// 获取全部
-//func Read_DeviceWarningList_All_1(){
-//	logs.Println("=========== 初始化报警规则 =========")
-//	time.Sleep(3*time.Second)
-//	o := orm.NewOrm()
-//	var r []DeviceWarningList
-//	qs := o.QueryTable(new(DeviceWarningList))
-//	qs.All(&r)
-//
-//	for _,v := range r{
-//		Redis_DeviceWarningList_Set(v)
-//	}
-//
-//	return
-//}
-
-// 获取全部
-func Read_DeviceWarningList_All_T_Notice_mechanism() string {
-	logs.Println("=========== 初始化报警规则 =========")
-	time.Sleep(3 * time.Second)
-	o := orm.NewOrm()
-	var r []DeviceWarningList
-	qs := o.QueryTable(new(DeviceWarningList))
-	qs.All(&r)
-	str := ""
-	for _, v := range r {
-		str += v.T_Tips
-	}
-
-	return str
-}

+ 33 - 0
models/GTime.go

@@ -0,0 +1,33 @@
+package models
+
+import (
+	"database/sql/driver"
+	"fmt"
+	"time"
+)
+
+type JsonTime struct {
+	time.Time
+}
+
+func (t JsonTime) MarshalJSON() ([]byte, error) {
+	str := fmt.Sprintf("\"%s\"", t.Format("2006-01-02 15:04:05"))
+	return []byte(str), nil
+}
+
+func (t JsonTime) Value() (driver.Value, error) {
+	var zeroTime time.Time
+	if t.Time.UnixNano() == zeroTime.UnixNano() {
+		return nil, nil
+	}
+	return t.Time, nil
+}
+
+func (t *JsonTime) Scan(v interface{}) error {
+	value, ok := v.(time.Time)
+	if ok {
+		*t = JsonTime{Time: value}
+		return nil
+	}
+	return fmt.Errorf("error %v", v)
+}

+ 10 - 12
models/System/SqlLogs.go → models/RawSql/SqlLogs.go

@@ -1,4 +1,4 @@
-package System
+package RawSql
 
 import (
 	"Cold_Api/conf"
@@ -10,12 +10,12 @@ import (
 
 type SqlLogs struct {
 	Id         int    `orm:"column(ID);size(11);auto;pk"`
-	Logs_uuid string `orm:"size(256);null"` //
-	Logs_class string `orm:"size(256);null"` //
-	Logs_Txt string `orm:"type(text);null"` // 详情
+	Logs_uuid  string `orm:"size(256);null"`  //
+	Logs_class string `orm:"size(256);null"`  //
+	Logs_Txt   string `orm:"type(text);null"` // 详情
 
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"`     //auto_now 每次 model 保存时都会对时间自动更新
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` //auto_now_add 第一次保存时才设置时间
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
+	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
 }
 
 func (t *SqlLogs) TableName() string {
@@ -29,14 +29,14 @@ func init() {
 }
 
 // 添加  System.Add_SqlLogs("MqttServer","参数请求 [Rt_Parameter]","base")
-func Add_SqlLogs(Logs_uuid string,Logs_class string,Logs_Txt string) {
+func Add_SqlLogs(Logs_uuid string, Logs_class string, Logs_Txt string) {
 	o := orm.NewOrm()
-	m := SqlLogs{Logs_uuid:Logs_uuid,Logs_class:Logs_class,Logs_Txt:Logs_Txt}
+	m := SqlLogs{Logs_uuid: Logs_uuid, Logs_class: Logs_class, Logs_Txt: Logs_Txt}
 	o.Insert(&m)
 }
 
 // 获取列表
-func Read_SqlLogs_ALL(page int,Logs_class string) (r []SqlLogs,cnt int64) {
+func Read_SqlLogs_ALL(page int, Logs_class string) (r []SqlLogs, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -52,7 +52,7 @@ func Read_SqlLogs_ALL(page int,Logs_class string) (r []SqlLogs,cnt int64) {
 	qs.Limit(conf.Page_size, offset).Filter("Logs_class__icontains", Logs_class).OrderBy("-Id").All(&r)
 	cnt, _ = qs.Filter("Logs_class__icontains", Logs_class).Count()
 
-	return r,cnt
+	return r, cnt
 }
 
 // 获取列表
@@ -65,7 +65,5 @@ func Read_SqlLogs_Class() (lists orm2.ParamsList) {
 	}
 	fmt.Println(len(pl_lists))
 
-
 	return pl_lists
 }
-

+ 0 - 51
models/System/News.go

@@ -1,51 +0,0 @@
-package System
-
-import (
-	"fmt"
-	"github.com/beego/beego/v2/adapter/orm"
-	"time"
-)
-
-type News struct {
-	Id         int       `orm:"column(ID);size(11);auto;pk"`
-	Admin_uuid string    `orm:"size(256);null"`                                        //
-	News_Title string    `orm:"size(256);null"`                                        // 标题
-	News_Url   string    `orm:"size(256);null"`                                        // 地址
-	News_Tag   int       `orm:"size(2);null"`                                          //  标记 1 未阅读
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
-}
-
-func (t *News) TableName() string {
-	return "News" // 数据库名称   // ************** 替换 FormulaList **************
-}
-
-func init() {
-	//注册模型
-	orm.RegisterModel(new(News))
-
-}
-
-// 获取 ById
-func Read_AdminNews_all_1(Admin_uuid string) (r []News) {
-	o := orm.NewOrm()
-	qs := o.QueryTable(new(News))
-	qs.Filter("Admin_uuid", Admin_uuid).Filter("News_Tag", 1).All(&r)
-	return r
-}
-
-// 修改 排序
-func Update_AdminNews_News_Tag_2(Id int) (err error) {
-	o := orm.NewOrm()
-	v := News{Id: Id}
-
-	if err = o.Read(&v, "Id", "Admin_uuid"); err == nil {
-		var num int64
-		v.News_Tag = 2
-		if num, err = o.Update(&v, "News_Tag"); err == nil {
-			fmt.Println("Number of records updated in database:", num)
-		}
-	}
-
-	return
-}

+ 0 - 165
models/Template/Template.go

@@ -1,165 +0,0 @@
-package Template
-
-import (
-	"Cold_Api/conf"
-	"fmt"
-	"github.com/beego/beego/v2/adapter/orm"
-	_ "github.com/go-sql-driver/mysql"
-	"time"
-)
-
-// 模板
-type Template struct {
-	Id                int    `orm:"column(ID);size(11);auto;pk"`
-
-	T_name       string `orm:"size(256);null"`  // 标题
-	T_class      int    `orm:"size(200);null"`  // 分类
-	T_img        string `orm:"size(256);null"`  // 图片
-	T_int    int    `orm:"size(200);null"`  	//  数量
-	T_text       string `orm:"type(text);null"` // 详情
-
-	T_Visit             int    `orm:"size(200);1"`     // 浏览量
-	T_State       int    `orm:"size(2);1"`       // 0 删除   1 正常
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"`   //auto_now_add 第一次保存时才设置时间
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`   //auto_now 每次 model 保存时都会对时间自动更新
-}
-
-func (t *Template) TableName() string {
-	return "Template" // 数据库名称   // ************** 替换 FormulaList **************
-}
-
-func init() {
-	//注册模型
-	orm.RegisterModel(new(Template))
-
-}
-
-// ---------------- 特殊方法 -------------------
-// 修改
-func Update_TTemplate(r Template, cols ...string) bool {
-	o := orm.NewOrm()
-	if num, err := o.Update(&r, cols...); err == nil {
-		fmt.Println("Number of records updated in database:", num)
-		return true
-	}
-	return false
-}
-// 获取 ById
-func Read_List_ById(id int) (r Template) {
-	o := orm.NewOrm()
-	r = Template{Id: id}
-	err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
-	if err != nil {
-		fmt.Println(err)
-	}
-	return r
-}
-
-// 添加
-func Add_List(m Template) (id int64, err error) {
-	o := orm.NewOrm()
-	id, err = o.Insert(&m)
-	if err != nil {
-		fmt.Println(err)
-	}
-	return id, err
-}
-
-// 删除
-func Delete_List_ById(id int) (err error) {
-	o := orm.NewOrm()
-	v := Template{Id: id}
-	// ascertain id exists in the database
-	if err = o.Read(&v); err == nil {
-		var num int64
-		if num, err = o.Delete(&Template{Id: id}); err == nil {
-			fmt.Println("Number of records deleted in database:", num)
-		}
-	}
-	return
-}
-// 删除
-func Delete_List(m Template) (err error) {
-	o := orm.NewOrm()
-	if num, err := o.Delete(&m); err == nil {
-		fmt.Println("Number of records deleted in database:", num)
-	}
-
-	return
-}
-
-// 修改
-func Update_List_ById(m Template) (err error) {
-	o := orm.NewOrm()
-	v := Template{Id: m.Id}
-	// ascertain id exists in the database
-	if err = o.Read(&v); err == nil {
-		var num int64
-		v.T_State = 0
-		if num, err = o.Update(&v, "T_State"); err == nil {
-			fmt.Println("Number of records updated in database:", num)
-		}
-	}
-	return err
-}
-
-// 获取列表
-func Read_List_1(page int,name string,class int) (r []Template,cnt int64) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(Template))
-	var offset int64
-	if page <= 1 {
-		offset = 0
-	} else {
-		offset = int64((page - 1) * conf.Page_size)
-	}
-
-	if class == 0 {
-		qs.Limit(conf.Page_size, offset).Filter("T_name__icontains", name).OrderBy("-Id").Filter("T_State", 1).All(&r)
-		cnt, _ = qs.Filter("T_name__icontains", name).Filter("T_State", 1).Count()
-	} else {
-		qs.Limit(conf.Page_size, offset).Filter("T_name__icontains", name).Filter("T_class", class).Filter("T_State", 1).OrderBy("-Id").All(&r)
-		cnt, _ = qs.Filter("T_name__icontains", name).Filter("T_class", class).Filter("T_State", 1).Count()
-	}
-
-	return r,cnt
-}
-// 获取列表 /时间筛选  Time_start_ Time_end_    2021-12-30,所以下面要加后缀 时间
-func Read_DeviceWarning_1(page int, T_sn string, T_Title string,Time_start_ string,Time_end_ string) (r []Template, cnt int64) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(Template))
-	var offset int64
-	if page <= 1 {
-		offset = 0
-	} else {
-		offset = int64((page - 1) * conf.Page_size)
-	}
-
-	if(len(Time_start_) > 1 && len(Time_end_) > 1 ) {
-		fmt.Println(Time_start_,Time_end_)
-		qs.Limit(conf.Page_size, offset).Filter("T_Ut__lte", Time_end_+" 23:59:59").Filter("T_Ut__gte", Time_start_+" 00:00:00").Filter("T_Title__icontains", T_Title).Filter("T_sn__icontains", T_sn).OrderBy("-Id").Filter("T_State", 1).All(&r)
-		cnt, _ = qs.Filter("T_Ut__lte", Time_end_+" 23:59:59").Filter("T_Ut__gte", Time_start_+" 00:00:00").Filter("T_Title__icontains", T_Title).Filter("T_sn__icontains", T_sn).Filter("T_State", 1).Count()
-		return r, cnt
-	}
-
-	if(len(Time_start_) > 1) {
-		qs.Limit(conf.Page_size, offset).Filter("T_Ut__gte", Time_start_+" 00:00:00").Filter("T_Title__icontains", T_Title).Filter("T_sn__icontains", T_sn).OrderBy("-Id").Filter("T_State", 1).All(&r)
-		cnt, _ = qs.Filter("T_Ut__gte", Time_start_+" 00:00:00").Filter("T_Title__icontains", T_Title).Filter("T_sn__icontains", T_sn).Filter("T_State", 1).Count()
-		return r, cnt
-	}else if(len(Time_end_) > 1) {
-		qs.Limit(conf.Page_size, offset).Filter("T_Ut__lte", Time_end_+" 23:59:59").Filter("T_Title__icontains", T_Title).Filter("T_sn__icontains", T_sn).OrderBy("-Id").Filter("T_State", 1).All(&r)
-		cnt, _ = qs.Filter("T_Ut__lte", Time_end_+" 23:59:59").Filter("T_Title__icontains", T_Title).Filter("T_sn__icontains", T_sn).Filter("T_State", 1).Count()
-		return r, cnt
-	}
-
-	qs.Limit(conf.Page_size, offset).Filter("T_Title__icontains", T_Title).Filter("T_sn__icontains", T_sn).OrderBy("-Id").Filter("T_State", 1).All(&r)
-	cnt, _ = qs.Filter("T_Title__icontains", T_Title).Filter("T_sn__icontains", T_sn).Filter("T_State", 1).Count()
-
-	return r, cnt
-}

+ 0 - 85
models/Template/TemplateClass.go

@@ -1,85 +0,0 @@
-package Template
-
-import (
-	"fmt"
-	"github.com/beego/beego/v2/adapter/orm"
-	_ "github.com/go-sql-driver/mysql"
-	"time"
-)
-
-type TemplateClass struct {
-	Id         int       `orm:"column(ID);size(11);auto;pk"`
-	T_name string    `orm:"size(256);null"`                  // 分类
-	T_State       int    `orm:"size(2);1"`       // 0 删除   1 正常
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"`   //auto_now_add 第一次保存时才设置时间
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`   //auto_now 每次 model 保存时都会对时间自动更新
-}
-
-func (t *TemplateClass) TableName() string {
-	return "TemplateClass" // 数据库名称   // ************** 替换 DesignClass **************
-}
-
-func init() {
-	//注册模型
-	orm.RegisterModel(new(TemplateClass))
-
-}
-
-// ---------------- 特殊方法 -------------------
-
-
-
-// 获取 ById
-func Read_Class_ById(id int) TemplateClass {
-	o := orm.NewOrm()
-	r := TemplateClass{Id: id}
-	err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
-	if err != nil {
-		fmt.Println(err)
-	}
-	return r
-}
-// 添加
-func Add_Class(m TemplateClass) (id int64, err error) {
-	o := orm.NewOrm()
-	id, err = o.Insert(&m)
-	if err != nil {
-		fmt.Println(err)
-	}
-	return
-}
-// 修改
-func Update_Class_ById(m TemplateClass) (err error) {
-	o := orm.NewOrm()
-	v := TemplateClass{Id: m.Id}
-	// ascertain id exists in the database
-	if err = o.Read(&v); err == nil {
-		var num int64
-		if num, err = o.Update(&m, "T_name"); err == nil {
-			fmt.Println("Number of records updated in database:", num)
-		}
-	}
-	return
-}
-
-// 删除
-func Delete_Class_ById(id int) (err error) {
-	o := orm.NewOrm()
-	v := TemplateClass{Id: id}
-	// ascertain id exists in the database
-	if err = o.Read(&v); err == nil {
-		var num int64
-		v.T_State = 0
-		if num, err = o.Update(&v, "T_State"); err == nil {
-			fmt.Println("Number of records updated in database:", num)
-		}
-	}
-	return
-}
-// 获取全部
-func Read_Class_All_1() (r []TemplateClass) {
-	o := orm.NewOrm()
-	qs := o.QueryTable(new(TemplateClass))
-	qs.Filter("T_State", 1).All(&r)
-	return r
-}

+ 181 - 59
models/Device/DeviceWarning.go → models/Warning/Warning.go

@@ -1,8 +1,9 @@
-package Device
+package Warning
 
 import (
 	"Cold_Api/conf"
-	"Cold_Api/models/Admin"
+	"Cold_Api/controllers/lib"
+	"Cold_Api/models/Account"
 	"fmt"
 	"github.com/beego/beego/v2/adapter/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
@@ -13,61 +14,66 @@ import (
 )
 
 // 模板
-type DeviceWarning struct {
-	Id int `orm:"column(ID);size(11);auto;pk"`
-
-	T_sn   string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_Bind string `orm:"size(256);null"` //设备绑定  Uid
-	//T_class      int    `orm:"size(200);null"`  // 分类
-	//T_img        string `orm:"size(256);null"`  // 图片
-	T_Id   int    `orm:"size(200);null"` //  传感器 ID
-	T_Name string `orm:"size(256);null"` // 传感器  温度探头1
-	T_Msid int    `orm:"size(256);null"` //
-
-	T_T  float32 `orm:"size(20);null"` //  湿度下限
-	T_RH float32 `orm:"size(20);null"` //  湿度上限
-
-	T_Title  string `orm:"size(256);null"` // 报警标题 温度超上限报警
-	T_Addr   string `orm:"size(256);null"` //  地址    车载环境监测仪
-	T_Remark string `orm:"size(256);null"` // 备注
-
-	T_Ut   time.Time `orm:"type(timestamp);null;"` // 采集时间
-	T_Text string    `orm:"size(256);null"`        // 备注
-	T_Log  string    `orm:"type(text);null"`       // 处理日志
-
-	T_State    int       `orm:"size(2);1"`                                             // 0 删除    1 已处理   2 未处理
+type Warning struct {
+	Id        int       `orm:"column(ID);size(11);auto;pk"`
+	T_pid     int       `orm:"index;size(256);null"`        // Account.Company 绑定公司
+	T_tp      int       `orm:"index;size(200);null"`        // 报警类型   ->WarningList
+	T_sn      string    `orm:"index;size(256);null"`        // 设备序列号
+	T_D_name  string    `orm:"size(256);null"`              // 设备名称
+	T_id      int       `orm:"index;size(200);null"`        // 传感器 ID
+	T_DS_name string    `orm:"size(256);null"`              // 传感器名称
+	T_Remark  string    `orm:"type(text);null"`             // 采集内容
+	T_Ut      time.Time `orm:"index;type(timestamp);null;"` // 采集时间
+
+	T_Text string `orm:"type(text);null"` // 处理备注
+	T_Log  string `orm:"type(text);null"` // 通知日志
+	T_Msid int64  `orm:"size(256);null"`  // 消息ID
+
+	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常   2 未处理
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
 
+/*
+分表机制
+|--------30天--------|
+|-----8月---||--------7月---------||--------6月---------||--------5月---------|
+
+每天备份 到对应 月份
+
+*/
+
 // 模板
-type DeviceWarning_R struct {
-	T_sn     string    // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_Id     int       //  传感器 ID
-	T_Name   string    // 传感器  温度探头1
-	T_T      float32   //  湿度下限
-	T_RH     float32   //  湿度上限
-	T_Title  string    // 报警标题 温度超上限报警
-	T_Addr   string    //  地址    车载环境监测仪
-	T_Remark string    // 备注
-	T_Ut     time.Time // 采集时间
-	T_Text   string    // 备注
-	T_Log    []string  // 处理日志
-	T_State  int       // 0 删除   1 未处理   2 已处理
+type Warning_R struct {
+	Id         int
+	T_sn       string   // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_Id       int      //  传感器 ID
+	T_Name     string   // 传感器  温度探头1
+	T_T        float32  //  湿度下限
+	T_RH       float32  //  湿度上限
+	T_Title    string   // 报警标题 温度超上限报警
+	T_Addr     string   //  地址    车载环境监测仪
+	T_Remark   string   // 备注
+	T_Ut       string   // 采集时间
+	T_Text     string   // 备注
+	T_Log      []string // 处理日志
+	T_State    int      // 0 删除   1 未处理   2 已处理
+	CreateTime string   // 创建时间
 }
 
-func (t *DeviceWarning) TableName() string {
-	return "DeviceWarning" // 数据库名称   // ************** 替换 FormulaList **************
+func (t *Warning) TableName() string {
+	return "Warning" // 数据库名称   // ************** 替换 FormulaList **************
 }
 
 func init() {
 	//注册模型
-	orm.RegisterModel(new(DeviceWarning))
+	orm.RegisterModel(new(Warning))
 	orm.Debug = true
 }
 
 // ---------------- 特殊方法 -------------------
-func DeviceWarningToDeviceWarning_R(t DeviceWarning) (r DeviceWarning_R) {
+func WarningToWarning_R(t Warning) (r Warning_R) {
+	r.Id = t.Id
 	r.T_sn = t.T_sn
 	r.T_Id = t.T_Id
 	r.T_Name = t.T_Name
@@ -76,17 +82,18 @@ func DeviceWarningToDeviceWarning_R(t DeviceWarning) (r DeviceWarning_R) {
 	r.T_Title = t.T_Title
 	r.T_Addr = t.T_Addr
 	r.T_Remark = t.T_Remark
-	r.T_Ut = t.T_Ut
+	r.T_Ut = t.T_Ut.Format("2006-01-02 15:04:05")
 	r.T_Text = t.T_Text
 	r.T_State = t.T_State
 	r.T_Log = strings.Split(t.T_Log, "\n")
+	r.CreateTime = t.CreateTime.Format("2006-01-02 15:04:05")
 	return r
 }
 
 // 获取 ById
-func Read_DeviceWarning_ById(id int) (r DeviceWarning) {
+func Read_Warning_ById(id int) (r Warning) {
 	o := orm.NewOrm()
-	r = DeviceWarning{Id: id}
+	r = Warning{Id: id}
 	err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 		fmt.Println(err)
@@ -95,7 +102,7 @@ func Read_DeviceWarning_ById(id int) (r DeviceWarning) {
 }
 
 // 添加
-func Add_DeviceWarning(m DeviceWarning) (id int64, err error) {
+func Add_Warning(m Warning) (id int64, err error) {
 	o := orm.NewOrm()
 
 	id, err = o.Insert(&m)
@@ -106,7 +113,7 @@ func Add_DeviceWarning(m DeviceWarning) (id int64, err error) {
 }
 
 // 修改
-func Update_DeviceWarning(r DeviceWarning, cols ...string) bool {
+func Update_Warning(r Warning, cols ...string) bool {
 	o := orm.NewOrm()
 	if num, err := o.Update(&r, cols...); err == nil {
 		fmt.Println("Number of records updated in database:", num)
@@ -116,9 +123,9 @@ func Update_DeviceWarning(r DeviceWarning, cols ...string) bool {
 }
 
 // 修改
-func Update_DeviceWarning_ById(m DeviceWarning) (err error) {
+func Update_Warning_ById(m Warning) (err error) {
 	o := orm.NewOrm()
-	v := DeviceWarning{Id: m.Id}
+	v := Warning{Id: m.Id}
 	// ascertain id exists in the database
 	if err = o.Read(&v); err == nil {
 		var num int64
@@ -131,9 +138,9 @@ func Update_DeviceWarning_ById(m DeviceWarning) (err error) {
 }
 
 // 修改
-func Update_DeviceWarning_Delete(m DeviceWarning) (err error) {
+func Update_Warning_Delete(m Warning) (err error) {
 	o := orm.NewOrm()
-	v := DeviceWarning{Id: m.Id}
+	v := Warning{Id: m.Id}
 	// ascertain id exists in the database
 	if err = o.Read(&v); err == nil {
 		v.T_State = 0
@@ -145,12 +152,12 @@ func Update_DeviceWarning_Delete(m DeviceWarning) (err error) {
 }
 
 // 获取列表
-func Read_DeviceWarning_1(user_ Admin.Admin, page int, T_sn string, T_Name string, Time_start_ string, Time_end_ string) (r []DeviceWarning, cnt int64) {
+func Read_Warning_1(user_ Account.Admin, page int, T_sn string, T_Name string, Time_start_ string, Time_end_ string) (r []Warning, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
-	qs := o.QueryTable(new(DeviceWarning))
+	qs := o.QueryTable(new(Warning))
 	var offset int64
 	var page_z int64
 	page_z = int64(conf.Page_size)
@@ -220,12 +227,12 @@ func Read_DeviceWarning_1(user_ Admin.Admin, page int, T_sn string, T_Name strin
 }
 
 // 获取列表
-func Read_DeviceWarning(user_ Admin.Admin, T_sn string, T_id string, T_title string, T_handle int, Time_start_ string, Time_end_ string, page int, page_z int) (r []DeviceWarning, cnt int64) {
+func Read_Warning(user_ Account.Admin, T_sn string, T_id string, T_title string, T_handle int, Time_start_ string, Time_end_ string, page int, page_z int) (r []Warning_R, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(DeviceWarning))
+	var map_r []Warning
+	qs := o.QueryTable(new(Warning))
 	var offset int64
 	if page_z == 0 {
 		page_z = conf.Page_size
@@ -274,14 +281,129 @@ func Read_DeviceWarning(user_ Admin.Admin, T_sn string, T_id string, T_title str
 		cond1 = cond1.And("T_Text__isnull", false).And("T_State", 2)
 	}
 
-	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-T_Ut").All(&r)
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-T_Ut").All(&map_r)
 	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	for _, v := range map_r {
+		r = append(r, WarningToWarning_R(v))
+	}
+
 	return r, cnt
 
 }
 
+// 获取列表
+func Read_Warning_Backups(user_ Account.Admin, T_year string, T_month string, T_sn string, T_id string, T_title string, T_handle int, Time_start_ string, Time_end_ string, page int, page_z int) (r []Warning_R, cnt int64) {
+
+	o := orm.NewOrm()
+	var maps []Warning
+	var maps_z []orm2.ParamsList
+	// 也可以直接使用 Model 结构体作为表名
+	// Warning_2022_07
+	if len(T_month) == 1 {
+		T_month = "0" + T_month
+	}
+	Wtab := "Warning_" + T_year + "_" + T_month
+
+	var offset int
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = (page - 1) * page_z
+	}
+
+	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
+	if user_.Admin_master <= 1 {
+		T_Bind = ""
+	}
+	fmt.Println("T_Bind:", T_Bind)
+	sql_WHERE := ""
+
+	cond := orm.NewCondition()
+
+	cond1 := cond.And("T_State__gt", 0)
+	sql_WHERE += " t__state > 0 "
+
+	if len(T_Bind) > 0 {
+		//cond1 = cond1.And("T_Bind__icontains", T_Bind)
+		T_Bind = lib.ReplaceSQL(T_Bind)
+		sql_WHERE += " AND t__bind LIKE '%" + T_Bind + "%' "
+	}
+	if len(T_title) > 0 {
+		//cond1 = cond1.And("T_Title", T_title)
+		T_title = lib.ReplaceSQL(T_title)
+		sql_WHERE += " AND t__title = '" + T_title + "'"
+	}
+
+	if len(T_sn) > 0 {
+		//cond1 = cond1.And("T_sn", T_sn)
+		T_sn = lib.ReplaceSQL(T_sn)
+		sql_WHERE += " AND t_sn = '" + T_sn + "'"
+	}
+	if len(T_id) > 0 {
+		//cond1 = cond1.And("T_Id", T_id)
+		T_id = lib.ReplaceSQL(T_id)
+		sql_WHERE += " AND t__id = " + T_id
+	}
+
+	if len(Time_start_) > 0 {
+		//cond1 = cond1.And("T_Ut__gte", Time_start_)
+		Time_start_ = lib.ReplaceSQL(Time_start_)
+		sql_WHERE += " AND t__ut >= " + Time_start_
+	}
+	if len(Time_end_) > 0 {
+		//cond1 = cond1.And("T_Ut__lte", Time_end_)
+		Time_end_ = lib.ReplaceSQL(Time_end_)
+		sql_WHERE += " AND t__ut <= " + Time_end_
+	}
+	//不填或0:所有      1:已处理     2:未处理
+	if T_handle == 1 {
+		//cond1 = cond1.And("T_Text__isnull", true)
+		sql_WHERE += " AND t__text IS NULL"
+	}
+	if T_handle == 2 {
+		cond1 = cond1.And("T_Text__isnull", false).And("T_State", 2)
+		sql_WHERE += " AND t__text IS NOT NULL AND t__state = 2 "
+	}
+
+	// -------------
+
+	sql := "SELECT COUNT(ID) FROM " + Wtab + " WHERE " + sql_WHERE
+	fmt.Println(sql)
+	_, err := o.Raw(sql).ValuesList(&maps_z)
+	if err != nil {
+		return r, 0
+	}
+	if len(maps_z) == 0 {
+		return r, 0
+	}
+	//fmt.Println("maps_z;",maps_z[0][0])
+	sql = "SELECT ID ,t_sn ,t__id ,t__name ,t__msid ,t__t ,t__r_h ,t__title ,t__addr ,t__remark ,t__ut ,t__state ,create_time ,update_time ,t__bind ,t__text ,t__handel ,t__log " +
+		"FROM " + Wtab + " WHERE " + sql_WHERE + " ORDER BY t__ut DESC "
+	if page_z != 9999 {
+		sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(page_z)
+	}
+
+	fmt.Println(sql)
+	_, err = o.Raw(sql).QueryRows(&maps)
+
+	//value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cnt), 64)
+	//key, _ := strconv.Atoi(maps_z[0][0].(string))
+	key, _ := strconv.ParseInt(maps_z[0][0].(string), 10, 64)
+
+	for _, v := range maps {
+		r = append(r, WarningToWarning_R(v))
+	}
+
+	return r, key
+
+}
+
 //
-func Read_Warning_ALL_T_Bind_TIME_1d_Count(user_ Admin.Admin, T_sn string) int {
+func Read_Warning_ALL_T_Bind_TIME_1d_Count(user_ Account.Admin, T_sn string) int {
 	o := orm.NewOrm()
 	var maps_z []orm2.ParamsList
 
@@ -295,7 +417,7 @@ func Read_Warning_ALL_T_Bind_TIME_1d_Count(user_ Admin.Admin, T_sn string) int {
 
 	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
 
-	sql := "SELECT * FROM DeviceWarning WHERE t__title NOT LIKE '%恢复%' AND t__title NOT LIKE '%任务%' AND t__ut > '" + timeStr + "' AND t__ut < '" + timeStr1 + "' AND t__bind LIKE '%" + T_Bind + "%' AND t_sn  LIKE '%" + T_sn + "%' group by t_sn"
+	sql := "SELECT * FROM Warning WHERE t__title NOT LIKE '%恢复%' AND t__title NOT LIKE '%任务%' AND t__ut > '" + timeStr + "' AND t__ut < '" + timeStr1 + "' AND t__bind LIKE '%" + T_Bind + "%' AND t_sn  LIKE '%" + T_sn + "%' group by t_sn"
 	fmt.Println(sql)
 	_, err := o.Raw(sql).ValuesList(&maps_z)
 	if err != nil {

+ 28 - 26
models/Warning/WarningSand.go

@@ -1,6 +1,7 @@
 package Warning
 
 import (
+	"Cold_Api/models/Account"
 	"Cold_Api/models/Admin"
 	"fmt"
 	"github.com/beego/beego/v2/adapter/orm"
@@ -12,25 +13,25 @@ import (
 
 // 模板
 type WarningSand struct {
-	Id int `orm:"column(ID);size(11);auto;pk"`
-	T_sn   string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	Id   int    `orm:"column(ID);size(11);auto;pk"`
+	T_sn string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
 
-	T_Id int `orm:"size(200);null"` //  传感器 ID
+	T_Id   int    `orm:"size(200);null"` //  传感器 ID
 	T_Name string `orm:"size(256);null"` // 传感器  温度探头1
-	T_Msid int `orm:"size(256);null"` //
+	T_Msid int    `orm:"size(256);null"` //
 
-	T_T    float32    `orm:"size(20);null"`  	//  湿度下限
-	T_RH    float32    `orm:"size(20);null"`  	//  湿度上限
+	T_T  float32 `orm:"size(20);null"` //  湿度下限
+	T_RH float32 `orm:"size(20);null"` //  湿度上限
 
-	T_Title string `orm:"size(256);null"` // 报警标题 温度超上限报警
-	T_Addr string `orm:"size(256);null"` //  地址    车载环境监测仪
+	T_Title  string `orm:"size(256);null"` // 报警标题 温度超上限报警
+	T_Addr   string `orm:"size(256);null"` //  地址    车载环境监测仪
 	T_Remark string `orm:"size(256);null"` // 备注
 
-	T_Ut    time.Time `orm:"type(timestamp);null;"` // 采集时间
-	T_Bind       string `orm:"size(256);null"`  //设备绑定 Uid  (这里单独改没有,要在 设备里面加入)
+	T_Ut   time.Time `orm:"type(timestamp);null;"` // 采集时间
+	T_Bind string    `orm:"size(256);null"`        //设备绑定 Uid  (这里单独改没有,要在 设备里面加入)
 
-	T_Filter      int    `orm:"size(200);null"`  // 过滤次数
-	T_Send_x int `orm:"type(text);size(256);null"` //   发送记录
+	T_Filter   int       `orm:"size(200);null"`                                        // 过滤次数
+	T_Send_x   int       `orm:"type(text);size(256);null"`                             //   发送记录
 	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 等待发送 2 发送成功
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
@@ -58,8 +59,9 @@ func Read_WarningWx_ById(id int) (r WarningSand) {
 	}
 	return r
 }
+
 // 添加
-func Add_WarningHand(m WarningSand)  {
+func Add_WarningHand(m WarningSand) {
 	warningWxList := Read_DeviceWarning(m)
 	if len(warningWxList) == 0 {
 		Add_Warning(m)
@@ -85,7 +87,7 @@ func Read_DeviceWarning(Warning WarningSand) (r []WarningSand) {
 	qs := o.QueryTable(new(WarningSand))
 	now := time.Now()
 	// N 个小时前
-	dd, _ := time.ParseDuration("-1m")   //"s", "m", "h".
+	dd, _ := time.ParseDuration("-1m") //"s", "m", "h".
 	currentTime := now.Add(dd)
 
 	qs.Filter("T_sn", Warning.T_sn).Filter("T_Id", Warning.T_Id).Filter("T_Title", Warning.T_Title).Filter("CreateTime__gte", currentTime.Format("2006-01-02 15:04:05")).OrderBy("-Id").All(&r)
@@ -95,8 +97,9 @@ func Read_DeviceWarning(Warning WarningSand) (r []WarningSand) {
 	}
 	return r
 }
+
 // 获取时  累加 1
-func ColAdd_DeviceWarningBy_ID(id int ) {
+func ColAdd_DeviceWarningBy_ID(id int) {
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	design := new(WarningSand)
@@ -112,11 +115,11 @@ func Read_WarningSand_ALL_T_sn_TIME_Count(T_sn string) (cnt int) {
 	var maps_z []orm2.ParamsList
 
 	now := time.Now()
-	timeStr:= now.Format("2006-01-02") + " 00:00:00"
+	timeStr := now.Format("2006-01-02") + " 00:00:00"
 
-	sql := "SELECT COUNT(ID) FROM WarningSand WHERE t__title NOT LIKE '%恢复%' AND t__ut > '"+timeStr+"' AND t_sn LIKE '%"+T_sn+"%' ";
+	sql := "SELECT COUNT(ID) FROM WarningSand WHERE t__title NOT LIKE '%恢复%' AND t__ut > '" + timeStr + "' AND t_sn LIKE '%" + T_sn + "%' "
 	fmt.Println(sql)
-	_, err := o.Raw( sql).ValuesList(&maps_z)
+	_, err := o.Raw(sql).ValuesList(&maps_z)
 	if err != nil {
 		return 0
 	}
@@ -125,23 +128,23 @@ func Read_WarningSand_ALL_T_sn_TIME_Count(T_sn string) (cnt int) {
 	}
 
 	//value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cnt), 64)
-	key,_ := strconv.Atoi(maps_z[0][0].(string))
+	key, _ := strconv.Atoi(maps_z[0][0].(string))
 	return key
 }
 
 //
-func Read_WarningSand_ALL_T_Bind_TIME_Count(user_ Admin.Admin,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
 
 	now := time.Now()
-	timeStr:= now.Format("2006-01-02") + " 00:00:00"
+	timeStr := now.Format("2006-01-02") + " 00:00:00"
 
-	T_Bind := "U"+strconv.Itoa(user_.Id)+"|"
+	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
 
-	sql := "SELECT COUNT(ID) FROM WarningSand WHERE t__title NOT LIKE '%恢复%' AND t__ut > '"+timeStr+"' AND t__bind LIKE '%"+T_Bind+"%' AND t_sn  LIKE '%"+T_sn+"%'";
+	sql := "SELECT COUNT(ID) FROM WarningSand WHERE t__title NOT LIKE '%恢复%' AND t__ut > '" + timeStr + "' AND t__bind LIKE '%" + T_Bind + "%' AND t_sn  LIKE '%" + T_sn + "%'"
 	fmt.Println(sql)
-	_, err := o.Raw( sql).ValuesList(&maps_z)
+	_, err := o.Raw(sql).ValuesList(&maps_z)
 	if err != nil {
 		return 0
 	}
@@ -150,7 +153,6 @@ func Read_WarningSand_ALL_T_Bind_TIME_Count(user_ Admin.Admin,T_sn string) (cnt
 	}
 
 	//value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cnt), 64)
-	key,_ := strconv.Atoi(maps_z[0][0].(string))
+	key, _ := strconv.Atoi(maps_z[0][0].(string))
 	return key
 }
-

+ 44 - 0
models/Warning/WarningType.go

@@ -0,0 +1,44 @@
+package Warning
+
+import (
+	"Cold_Api/logs"
+	_ "github.com/astaxie/beego/cache/redis"
+	"github.com/beego/beego/v2/adapter/orm"
+	_ "github.com/go-sql-driver/mysql"
+	"time"
+)
+
+// 模板
+type WarningType struct {
+	Id     int    `orm:"column(ID);size(11);auto;pk"`
+	T_name string `orm:"size(256);null"`            // 分类
+	T_Tips string `orm:"type(text);size(256);null"` // 提示
+}
+
+func (t *WarningType) TableName() string {
+	return "WarningType" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+//var redisCache_WarningType cache.Cache
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(WarningType))
+
+}
+
+// 获取全部
+func Read_WarningType_All_T_Notice_mechanism() string {
+	logs.Println("=========== 初始化报警规则 =========")
+	time.Sleep(3 * time.Second)
+	o := orm.NewOrm()
+	var r []WarningType
+	qs := o.QueryTable(new(WarningType))
+	qs.All(&r)
+	str := ""
+	for _, v := range r {
+		str += v.T_Tips
+	}
+
+	return str
+}

+ 18 - 0
models/关系图.txt

@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Admin  Company                   Device                  DeviceSensor
+          -DeviceWarning            -DeviceParameter            -DeviceSensorParameter
+          -DeviceClass
+          -DeviceNotice

+ 12 - 30
routers/Data.go

@@ -6,36 +6,18 @@ import (
 )
 
 func init() {
-	//   -----------3、用户管理
-	//3.1用户账户只可以由管理员添加。
-	//3.2管理员账户只可以有一个。
-	//3.3用户可添加和删除子账号。
-	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
-	//-----------
-	beego.Router("/Data/Device_Sensor", &controllers.DataController{}, "*:Device_Sensor") // 设置 设备参数
+	var version = "/v3"
+	// 数据展示
+	beego.Router(version+"/Data/List", &controllers.DataController{}, "*:V2_Device_Sensor_Data_More") // 获取未读消息
+	beego.Router(version+"/Data/Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel")  // 获取未读消息
+	beego.Router(version+"/Data/PDF", &controllers.DataController{}, "*:Device_Sensor_Data_PDF")      // 获取未读消息
 
-	beego.Router("/Data/DataReal_html", &controllers.DataController{}, "*:DataReal_html")                                // 获取 基本信息
-	beego.Router("/Data/DataRealCalss_html", &controllers.DataController{}, "*:DataRealCalss_html")                      // 获取 基本信息
-	beego.Router("/Data/DataList_html", &controllers.DataController{}, "*:DataList_html")                                // 获取 基本信息
-	beego.Router("/Data/DataLine_html", &controllers.DataController{}, "*:DataLine_html")                                // 获取 基本信息
-	beego.Router("/Data/DataMap_html", &controllers.DataController{}, "*:DataMap_html")                                  // 获取 基本信息
-	beego.Router("/Data/Device_Sensor_List", &controllers.DataController{}, "*:Device_Sensor_List")                      // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data", &controllers.DataController{}, "*:Device_Sensor_Data")                      // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_More", &controllers.DataController{}, "*:Device_Sensor_Data_More")            // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_More_ColdVerify", &controllers.DataController{}, "*:Device_Sensor_Data_More") // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel")          // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_Excel_m", &controllers.DataController{}, "*:Device_Sensor_Data_Excel_m")      // 设置 设备参数
-	beego.Router("/Data/Device_Sensor_Data_PDF", &controllers.DataController{}, "*:Device_Sensor_Data_PDF")              // 设置 设备参数
-	beego.Router("/Data/DataPlane", &controllers.DataController{}, "*:DataPlane")                                        // 设置 设备参数
-
-	beego.Router("/Data/DataScreen", &controllers.DataController{}, "*:DataScreen")                           // 设置 设备参数
-	beego.Router("/Data/DataScreen_Data", &controllers.DataController{}, "*:DataScreen_Data")                 // 设置 设备参数
-	beego.Router("/Data/DeviceSensor_Data_Print", &controllers.DataController{}, "*:DeviceSensor_Data_Print") // 设置 设备参数
-	beego.Router("/Data/DataScreen_Map", &controllers.DataController{}, "*:DataScreen_Map")                   // 设置 设备参数
-
-	//beego.Router("/Data/Raw", &controllers.DataController{}, "*:Raw") // 设置 设备参数
+	// 2D
+	//beego.Router(version+"/Data/DataView3d_html", &controllers.DataController{}, "*:DataView3d_html")
+	//beego.Router(version+"/Data/UpDataView3d", &controllers.DataController{}, "*:UpDataView3d")
 	// 3D
-	beego.Router("/Data/DataView3d_html", &controllers.DataController{}, "*:DataView3d_html")
-	beego.Router("/Data/UpDataView3d", &controllers.DataController{}, "*:UpDataView3d")
-
+	beego.Router(version+"/Data/DataView3d_html", &controllers.DataController{}, "*:DataView3d_html")
+	beego.Router(version+"/Data/UpDataView3d", &controllers.DataController{}, "*:UpDataView3d")
+	// 执行 SQL
+	beego.Router(version+"/Data/Raw", &controllers.RawSqlController{}, "*:Rawv3") // 执行 SQL
 }

+ 48 - 71
routers/Device.go

@@ -6,76 +6,53 @@ import (
 )
 
 func init() {
-	//   -----------3、用户管理
-	//3.1用户账户只可以由管理员添加。
-	//3.2管理员账户只可以有一个。
-	//3.3用户可添加和删除子账号。
-	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
-	//-----------
-	// 设备日志
-	beego.Router("/Device/DeviceLogs", &controllers.DeviceController{}, "*:DeviceLogs") // 获取未读消息
-
-	beego.Router("/Device/Read_DeviceParameter", &controllers.DeviceController{}, "*:Read_DeviceParameter")             // 获取 基本信息
-	beego.Router("/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_DeviceSensorParameter") // 获取 基本信息
-	//beego.Router("/Device/Read_DeviceParameter", &controllers.DeviceController{}, "*:Read_DeviceParameter")           // 获取 基本信息
-	beego.Router("/Device/Pu_DeviceParameter", &controllers.DeviceController{}, "*:Pu_DeviceParameter")               // 设置 设备参数
-	beego.Router("/Device/Pu_DeviceParameter_Sensor", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor") // 设置 传感器参数
-	//beego.Router("/Device/Pu_DeviceParameter_Sensor_Cache", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor_Cache") // 设置 传感器参数
-	beego.Router("/Device/Pu_DeviceParameter_T_l_p", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_l_p")   // 设置 传感器参数
-	beego.Router("/Device/Pu_DeviceParameter_T_give", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_give") // 设置 传感器参数
-
-	beego.Router("/Device/Device_html", &controllers.DeviceController{}, "*:Device_html")                       // 获取未读消息
-	beego.Router("/Device/Device_", &controllers.DeviceController{}, "*:Device_")                               // 获取未读消息
-	beego.Router("/Device/Device_Post", &controllers.DeviceController{}, "*:Device_Post")                       // 获取未读消息
-	beego.Router("/Device/Device_Add", &controllers.DeviceController{}, "*:Device_Post")                        // 获取未读消息
-	beego.Router("/Device/Device_Del", &controllers.DeviceController{}, "*:Device_Del")                         // 获取未读消息
-	beego.Router("/Device/DeviceBind_html", &controllers.DeviceController{}, "*:DeviceBind_html")               // 获取未读消息
-	beego.Router("/Device/DeviceBind_List", &controllers.DeviceController{}, "*:DeviceBind_List")               // 获取未读消息
-	beego.Router("/Device/DeviceBind_Sensor_List", &controllers.DeviceController{}, "*:DeviceBind_Sensor_List") // 获取未读消息
-	beego.Router("/Device/DeviceBind_Del", &controllers.DeviceController{}, "*:DeviceBind_Del")                 // 获取未读消息
-	beego.Router("/Device/DeviceBind_Add", &controllers.DeviceController{}, "*:DeviceBind_Add")                 // 获取未读消息
-	beego.Router("/Device/DeviceBind_Add_All", &controllers.DeviceController{}, "*:DeviceBind_Add_All")         // 获取未读消息
-	beego.Router("/Device/DeviceBind_html_", &controllers.DeviceController{}, "*:DeviceBind_html_")             // 获取未读消息
-
-	beego.Router("/Device/DeviceClass_html", &controllers.DeviceController{}, "*:DeviceClass_html") // 获取未读消息
-	beego.Router("/Device/DeviceClass_", &controllers.DeviceController{}, "*:DeviceClass_")         // 获取未读消息
-	beego.Router("/Device/DeviceClass_Syn", &controllers.DeviceController{}, "*:DeviceClass_Syn")   // 获取未读消息
-	beego.Router("/Device/DeviceClass_Post", &controllers.DeviceController{}, "*:DeviceClass_Post") // 获取未读消息
-	beego.Router("/Device/DeviceClass_Del", &controllers.DeviceController{}, "*:DeviceClass_Del")   // 获取未读消息
-
-	beego.Router("/Device/DeviceClassBind_html", &controllers.DeviceController{}, "*:DeviceClassBind_html_") // 获取未读消息
-	beego.Router("/Device/DeviceClassBind_List", &controllers.DeviceController{}, "*:DeviceClassBind_List")  // 获取未读消息
-	beego.Router("/Device/DeviceClassBind_Del", &controllers.DeviceController{}, "*:DeviceClassBind_Del")    // 获取未读消息
-	beego.Router("/Device/DeviceClassBind_Add", &controllers.DeviceController{}, "*:DeviceClassBind_Add")    // 获取未读消息
-
-	beego.Router("/Device/Get_DeviceClassId_QRCode", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode")   // 获取未读消息
-	beego.Router("/Device/Get_DeviceClassId_QRCode2", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode2") // 获取未读消息
-	beego.Router("/Device/Get_DeviceClassId", &controllers.DeviceController{}, "*:Get_DeviceClassId")                 // 获取未读消息
-
-	beego.Router("/Device/Device_List", &controllers.DeviceController{}, "*:Device_List")                                 // 获取未读消息
-	beego.Router("/Device/Device_Parameter", &controllers.DeviceController{}, "*:Device_Parameter_html")                  // 获取未读消息
-	beego.Router("/Device/Device_Parameter_Del", &controllers.DeviceController{}, "*:Device_Parameter_Del")               // 获取未读消息
-	beego.Router("/Device/Device_Parameter_Del_Device", &controllers.DeviceController{}, "*:Device_Parameter_Del_Device") // 获取未读消息
-	beego.Router("/Device/DeviceSensor_List", &controllers.DeviceController{}, "*:DeviceSensor_List")                     // 获取未读消息
-	beego.Router("/Device/DeviceSensor_List_html", &controllers.DeviceController{}, "*:DeviceSensor_List_html")           // 获取未读消息
-	beego.Router("/Device/DeviceWarning_List_html", &controllers.DeviceController{}, "*:DeviceWarning_List_html")         // 获取未读消息
-	beego.Router("/Device/DeviceWarning_List", &controllers.DeviceController{}, "*:DeviceWarning_List")                   // 获取未读消息
-	beego.Router("/Device/DeviceWarning_", &controllers.DeviceController{}, "*:DeviceWarning_")                           // 获取未读消息
-	beego.Router("/Device/DeviceWarning_log", &controllers.DeviceController{}, "*:DeviceWarning_log")                     // 获取未读消息
-	beego.Router("/Device/DeviceWarning_M", &controllers.DeviceController{}, "*:DeviceWarning_M")                         // 获取未读消息
-	beego.Router("/Device/DeviceWarning_Post", &controllers.DeviceController{}, "*:DeviceWarning_Post")                   // 获取未读消息
-	beego.Router("/Device/DeviceWarning_Data_Excel", &controllers.DeviceController{}, "*:DeviceWarning_Data_Excel")       // 获取未读消息
-	beego.Router("/Device/DeviceWarning_Del", &controllers.DeviceController{}, "*:DeviceWarning_Del")                     // 获取未读消息
-	beego.Router("/Device/DeviceWarningListT_Tips", &controllers.DeviceController{}, "*:DeviceWarningList_T_Tips")        // 获取未读消息
-
-	beego.Router("/Device/UpDeviceSensor_Tsort", &controllers.DeviceController{}, "*:UpDeviceSensor_Tsort")     // 获取未读消息
-	beego.Router("/Device/UpDeviceSensor_T3dview", &controllers.DeviceController{}, "*:UpDeviceSensor_T3dview") // 获取未读消息
-	// 获取未读消息
-	beego.Router("/Device/UpDeviceSensor_T_datashow", &controllers.DeviceController{}, "*:UpDeviceSensor_T_datashow") // 获取未读消息
-
-	beego.Router("/Device/DeviceTask_List", &controllers.DeviceController{}, "*:DeviceTask_List") // 设置 设备参数
-	beego.Router("/Device/DeviceTask_Post", &controllers.DeviceController{}, "*:DeviceTask_Post") // 设置 设备参数
-
-	beego.Router("/Device/DeviceData_Add", &controllers.DeviceController{}, "*:DeviceData_Add") // 设置 设备参数
+	var version = "/v3"
+	//---------------------------------- 设备管理
+
+	// 设备
+	beego.Router(version+"/Device/List", &controllers.DeviceController{}, "*:Device_v2_List")                                      //
+	beego.Router(version+"/Device/Add", &controllers.DeviceController{}, "*:Device_Post")                                          //
+	beego.Router(version+"/Device/Edit", &controllers.DeviceController{}, "*:Device_Edit")                                         //
+	beego.Router(version+"/Device/Del", &controllers.DeviceController{}, "*:Device_Del")                                           //
+	beego.Router(version+"/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_v2_DeviceSensorParameter") //
+	beego.Router(version+"/Device/DeviceTask_Post", &controllers.DeviceController{}, "*:DeviceTask_Post")                          //
+	beego.Router(version+"/Device/Log", &controllers.DeviceController{}, "*:V2DeviceLogs")                                         //
+
+	beego.Router(version+"/Device/Parameter_List", &controllers.DeviceController{}, "*:Device_v2_Parameter_List") //
+	beego.Router(version+"/Device/Parameter_Pu", &controllers.DeviceController{}, "*:Device_v2_Parameter_Pu")     //
+
+	// 权限绑定
+	beego.Router(version+"/Device/Bind_Add", &controllers.DeviceController{}, "*:V2_DeviceBind_Add") //
+	beego.Router(version+"/Device/Bind_Del", &controllers.DeviceController{}, "*:V2_DeviceBind_Del") //
+	// 设备任务列表
+	beego.Router(version+"/DeviceTask/List", &controllers.DeviceController{}, "*:V2_DeviceTask_List")
+
+	// 设备-传感器
+	beego.Router(version+"/DeviceSensor/List", &controllers.DeviceController{}, "*:DeviceSensor_v2_List") //
+	beego.Router(version+"/DeviceSensor/Edit", &controllers.DeviceController{}, "*:DeviceSensor_Edit")    //
+	beego.Router(version+"/DeviceSensor/Del", &controllers.DeviceController{}, "*:DeviceSensor_Del")      //
+
+	beego.Router(version+"/DeviceSensor/Parameter_List", &controllers.DeviceController{}, "*:DeviceSensor_v2_Parameter_List") //
+	beego.Router(version+"/DeviceSensor/Parameter_Pu", &controllers.DeviceController{}, "*:DeviceSensor_v2_Parameter_Pu")     //
+
+	//分类绑定
+	beego.Router(version+"/Class/List", &controllers.DeviceController{}, "*:V2_Class_List") // 获取未读消息
+	beego.Router(version+"/Class/Get", &controllers.DeviceController{}, "*:V2_Class_Get")   // 获取未读消息
+	beego.Router(version+"/Class/Add", &controllers.DeviceController{}, "*:V2_Class_Add")   // 获取未读消息
+	beego.Router(version+"/Class/Edit", &controllers.DeviceController{}, "*:V2_Class_Edit") // 获取未读消息
+	beego.Router(version+"/Class/Del", &controllers.DeviceController{}, "*:V2_Class_Del")   // 获取未读消息
+	// 绑定
+	beego.Router(version+"/Class/Bind_Del", &controllers.DeviceController{}, "*:V2_ClassBind_Del") // 获取未读消息
+	beego.Router(version+"/Class/Bind_Add", &controllers.DeviceController{}, "*:V2_ClassBind_Add") // 获取未读消息
+	//二维码
+	//beego.Router("/Device/Get_DeviceClassId_QRCode", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode")   // 获取未读消息
+	//beego.Router("/Device/Get_DeviceClassId_QRCode2", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode2") // 获取未读消息
+
+	// 设备报警
+	beego.Router(version+"/DeviceWarning/List", &controllers.DeviceController{}, "*:V2_DeviceWarning_List")          // 获取未读消息
+	beego.Router(version+"/DeviceWarning/Get", &controllers.DeviceController{}, "*:V2_DeviceWarning_Get")            // 获取未读消息
+	beego.Router(version+"/DeviceWarning/Edit", &controllers.DeviceController{}, "*:V2_DeviceWarning_Post")          // 获取未读消息
+	beego.Router(version+"/DeviceWarning/Del", &controllers.DeviceController{}, "*:V2_DeviceWarning_Del")            // 获取未读消息
+	beego.Router(version+"/DeviceWarning/ToExcel", &controllers.DeviceController{}, "*:V2_DeviceWarning_Data_Excel") // 获取未读消息
 
 }

+ 0 - 14
routers/Function.go

@@ -1,14 +0,0 @@
-package routers
-
-import (
-	"Cold_Api/controllers"
-	beego "github.com/beego/beego/v2/server/web"
-)
-
-func init() {
-	beego.Router("/GoodsOrder/GoodsOrder_html", &controllers.GoodsOrderController{}, "*:GoodsOrder_html")   // 获取未读消息
-	beego.Router("/GoodsOrder/GoodsOrder__html", &controllers.GoodsOrderController{}, "*:GoodsOrder__html") // 获取未读消息
-	beego.Router("/GoodsOrder/List_Post", &controllers.GoodsOrderController{}, "*:List_Post")               // 获取未读消息
-	beego.Router("/GoodsOrder/List_Del", &controllers.GoodsOrderController{}, "*:List_Del")                 // 获取未读消息
-	beego.Router("/GoodsOrder/Data_PDF", &controllers.GoodsOrderController{}, "*:Data_PDF")                 // 获取未读消息
-}

+ 19 - 0
routers/GoodsOrder.go

@@ -0,0 +1,19 @@
+package routers
+
+import (
+	"Cold_Api/controllers"
+	beego "github.com/beego/beego/v2/server/web"
+)
+
+func init() {
+	var version = "/v3"
+
+	// 订单管理
+	beego.Router(version+"/GoodsOrder/List", &controllers.GoodsOrderController{}, "*:GoodsOrder_List") // 获取未读消息
+	beego.Router(version+"/GoodsOrder/Get", &controllers.GoodsOrderController{}, "*:GoodsOrder_Get")   // 获取未读消息
+	beego.Router(version+"/GoodsOrder/Add", &controllers.GoodsOrderController{}, "*:GoodsOrder_Add")   // 获取未读消息
+	beego.Router(version+"/GoodsOrder/Edit", &controllers.GoodsOrderController{}, "*:GoodsOrder_Edit") // 获取未读消息
+	beego.Router(version+"/GoodsOrder/Del", &controllers.GoodsOrderController{}, "*:GoodsOrder_Del")   // 获取未读消息
+	beego.Router(version+"/GoodsOrder/PDF", &controllers.GoodsOrderController{}, "*:GoodsOrder_PDF")   // 获取未读消息
+
+}

+ 23 - 31
routers/User.go

@@ -6,36 +6,28 @@ import (
 )
 
 func init() {
-	//   -----------3、用户管理
-	//3.1用户账户只可以由管理员添加。
-	//3.2管理员账户只可以有一个。
-	//3.3用户可添加和删除子账号。
-	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
-	//-----------
-
-	beego.Router("/User/Admin_html", &controllers.UserController{}, "*:Admin_html") // 获取未读消息
-	beego.Router("/User/Admin_", &controllers.UserController{}, "*:Admin_")         // 获取未读消息
-	beego.Router("/User/Admin_Post", &controllers.UserController{}, "*:Admin_Post") // 获取未读消息
-	beego.Router("/User/Admin_Del", &controllers.UserController{}, "*:Admin_Del")   // 获取未读消息
-
-	beego.Router("/User/User_html", &controllers.UserController{}, "*:User_html")   // 获取未读消息
-	beego.Router("/User/User_", &controllers.UserController{}, "*:User_")           // 获取未读消息
-	beego.Router("/User/User_Get", &controllers.UserController{}, "*:User_Get")     // 获取未读消息
-	beego.Router("/User/User_Info", &controllers.UserController{}, "*:User_Info")   // 获取未读消息
-	beego.Router("/User/User_Info_", &controllers.UserController{}, "*:User_Info_") // 获取未读消息
-	beego.Router("/User/User_Post", &controllers.UserController{}, "*:User_Post")   // 获取未读消息
-	beego.Router("/User/User_Del", &controllers.UserController{}, "*:User_Del")     // 获取未读消息
-	beego.Router("/User/User_Entry", &controllers.UserController{}, "*:User_Entry") // 获取未读消息
-
-	beego.Router("/User/Power", &controllers.UserController{}, "*:Power_html")      // 获取未读消息
-	beego.Router("/User/Power_", &controllers.UserController{}, "*:Power_")         // 获取未读消息
-	beego.Router("/User/Power_Post", &controllers.UserController{}, "*:Power_Post") // 获取未读消息
-	beego.Router("/User/Power_Del", &controllers.UserController{}, "*:Power_Del")   // 获取未读消息
-
-	beego.Router("/User/Panel_plan_Syn", &controllers.UserController{}, "*:Panel_plan_Syn") // 获取未读消息
-	beego.Router("/User/InspectTokey", &controllers.UserController{}, "*:InspectTokey")     // 获取未读消息
-
-	// 日志
-	beego.Router("/User/UserLogs", &controllers.LogsController{}, "*:UserLogs") // 获取未读消息
+	var version = "/v3"
+
+	//---------------------------------- 用户管理
+	// 用户
+	beego.Router(version+"/Login_verification", &controllers.AdminController{}, "*:Login_verification")
+	beego.Router(version+"/User/Info", &controllers.UserController{}, "*:User_v2_Info")   // 用户列表
+	beego.Router(version+"/User/List", &controllers.UserController{}, "*:V2_User_List")   // 用户列表
+	beego.Router(version+"/User/Get", &controllers.UserController{}, "*:User_v2_Get")     // 获取用户信息
+	beego.Router(version+"/User/Add", &controllers.UserController{}, "*:User_v2_Add")     //
+	beego.Router(version+"/User/Edit", &controllers.UserController{}, "*:User_v2_Edit")   //
+	beego.Router(version+"/User/AEdit", &controllers.UserController{}, "*:User_v2_AEdit") //
+	beego.Router(version+"/User/ADel", &controllers.UserController{}, "*:V2_User_Del")    //
+	beego.Router(version+"/User/Entry", &controllers.UserController{}, "*:V2_User_Entry") // 获取未读消息
+	// 用户日志
+	beego.Router(version+"/User/LogsClass", &controllers.LogsController{}, "*:V2_UserLogsClass") // 获取未读消息
+	beego.Router(version+"/User/LogsList", &controllers.LogsController{}, "*:V2_UserLogs")       // 获取未读消息
+
+	// 权限
+	beego.Router(version+"/Power/List", &controllers.UserController{}, "*:Power_List")    //
+	beego.Router(version+"/Power/Get", &controllers.UserController{}, "*:Power_Get")      //
+	beego.Router(version+"/Power/Add", &controllers.UserController{}, "*:Power_v2_Add")   //
+	beego.Router(version+"/Power/Edit", &controllers.UserController{}, "*:Power_v2_Edit") //
+	beego.Router(version+"/Power/Del", &controllers.UserController{}, "*:Power_v2_Del")   //
 
 }

+ 7 - 44
routers/router.go

@@ -7,51 +7,14 @@ import (
 )
 
 func init() {
-	//   -----------网关接口-----------
-	// 添加网关
-	//beego.Router("/API/A_Device_List", &controllers.DeviceController{}, "*:A_Device_List") // *全部;  get,post:
-	//// 添加网关
-	//beego.Router("/API/Add_A_Device", &controllers.DeviceController{}, "*:Add_A_Device") // *全部;  get,post:
-	//// 修改网关
-	//beego.Router("/API/Up_A_Device", &controllers.DeviceController{}, "*:Up_A_Device") // *全部;  get,post:
-	//// 删除网关
-	//beego.Router("/API/Delete_A_Device", &controllers.DeviceController{}, "*:Delete_A_Device") // *全部;  get,post:
-	// 用户 - 微信授权
-	beego.Router("/", &controllers.AdminController{}, "*:Login")
-	// 网关 WebSocket
-	beego.Router("/ws/join", &WebSocket.WebSocketController{}, "get:Join")
+	var version = "/v3"
 
-	beego.Router("/UpFile", &controllers.UpFileController{}, "*:UpFile") // *全部;  get,post:
+	// 公共
+	beego.Router(version+"/ws/join", &WebSocket.WebSocketController{}, "get:Join")
+	beego.Router(version+"/UpFile", &controllers.UpFileController{}, "*:UpFile")
 
-	beego.Router("/Login", &controllers.AdminController{}, "*:Login")                           // *全部;  get,post:
-	beego.Router("/Login_verification", &controllers.AdminController{}, "*:Login_verification") // *全部;  get,post:
-
-	beego.Router("/Index", &controllers.AdminController{}, "*:Index")
-	beego.Router("/Home", &controllers.AdminController{}, "*:Home")
-	beego.Router("/User/Info", &controllers.AdminController{}, "*:Info")
-
-	beego.Router("/Nows_rend", &controllers.AdminController{}, "*:Nows_rend") // 获取未读消息
-	// 日志
-	beego.Router("/System/Logs", &controllers.LogsController{}, "*:List") // 获取未读消息
-
-	// 微信服务端
-	//beego.Router("/Wx/Wx_handler", &controllers.WxController{}, "*:Wx_handler")  // 获取未读消息
-	//beego.Router("/Wx/Wx_handler", &controllers.WxController{}, "*:Wx")  // 获取未读消息
-
-	beego.Router("/RawSql/Raw_html", &controllers.RawSqlController{}, "*:RawSql_html")   // 获取未读消息
-	beego.Router("/RawSql/Raw__html", &controllers.RawSqlController{}, "*:RawSql__html") // 获取未读消息
-	beego.Router("/RawSql/List_Post", &controllers.RawSqlController{}, "*:List_Post")    // 获取未读消息
-	beego.Router("/RawSql/List_Del", &controllers.RawSqlController{}, "*:List_Del")      // 获取未读消息
-
-	// 模板路由
-	beego.Router("/Template/List", &controllers.TemplateController{}, "*:List")           // 获取未读消息
-	beego.Router("/Template/List_", &controllers.TemplateController{}, "*:List_")         // 获取未读消息
-	beego.Router("/Template/List_Post", &controllers.TemplateController{}, "*:List_Post") // 获取未读消息
-	beego.Router("/Template/List_Del", &controllers.TemplateController{}, "*:List_Del")   // 获取未读消息
-
-	beego.Router("/Template/Class", &controllers.TemplateController{}, "*:Class")           // 获取未读消息
-	beego.Router("/Template/Class_", &controllers.TemplateController{}, "*:Class_")         // 获取未读消息
-	beego.Router("/Template/Class_Post", &controllers.TemplateController{}, "*:Class_Post") // 获取未读消息
-	beego.Router("/Template/Class_Del", &controllers.TemplateController{}, "*:Class_Del")   // 获取未读消息
+	// 系统日志
+	beego.Router(version+"/System/LogsClass", &controllers.LogsController{}, "*:LogsClass") // 获取未读消息
+	beego.Router(version+"/System/LogsList", &controllers.LogsController{}, "*:LogsList")   // 获取未读消息
 
 }

+ 187 - 0
routers/v2.go

@@ -0,0 +1,187 @@
+package routers
+
+import (
+	"Cold_Api/controllers"
+	"Cold_Api/controllers/WebSocket"
+	beego "github.com/beego/beego/v2/server/web"
+)
+
+func init() {
+	//   -----------网关接口-----------
+	// 添加网关
+	//beego.Router("/API/A_Device_List", &controllers.DeviceController{}, "*:A_Device_List") // *全部;  get,post:
+	//// 添加网关
+	//beego.Router("/API/Add_A_Device", &controllers.DeviceController{}, "*:Add_A_Device") // *全部;  get,post:
+	//// 修改网关
+	//beego.Router("/API/Up_A_Device", &controllers.DeviceController{}, "*:Up_A_Device") // *全部;  get,post:
+	//// 删除网关
+	//beego.Router("/API/Delete_A_Device", &controllers.DeviceController{}, "*:Delete_A_Device") // *全部;  get,post:
+	// 用户 - 微信授权
+	beego.Router("/", &controllers.AdminController{}, "*:Login")
+	// 网关 WebSocket
+	beego.Router("/ws/join", &WebSocket.WebSocketController{}, "get:Join")
+
+	beego.Router("/UpFile", &controllers.UpFileController{}, "*:UpFile") // *全部;  get,post:
+
+	beego.Router("/Login", &controllers.AdminController{}, "*:Login")                           // *全部;  get,post:
+	beego.Router("/Login_verification", &controllers.AdminController{}, "*:Login_verification") // *全部;  get,post:
+
+	beego.Router("/Index", &controllers.AdminController{}, "*:Index")
+	beego.Router("/Home", &controllers.AdminController{}, "*:Home")
+	beego.Router("/User/Info", &controllers.AdminController{}, "*:Info")
+
+	beego.Router("/Nows_rend", &controllers.AdminController{}, "*:Nows_rend") // 获取未读消息
+	// 日志
+	beego.Router("/System/Logs", &controllers.LogsController{}, "*:List") // 获取未读消息
+
+	// 微信服务端
+	//beego.Router("/Wx/Wx_handler", &controllers.WxController{}, "*:Wx_handler")  // 获取未读消息
+	//beego.Router("/Wx/Wx_handler", &controllers.WxController{}, "*:Wx")  // 获取未读消息
+
+	beego.Router("/RawSql/Raw_html", &controllers.RawSqlController{}, "*:RawSql_html")   // 获取未读消息
+	beego.Router("/RawSql/Raw__html", &controllers.RawSqlController{}, "*:RawSql__html") // 获取未读消息
+	beego.Router("/RawSql/List_Post", &controllers.RawSqlController{}, "*:List_Post")    // 获取未读消息
+	beego.Router("/RawSql/List_Del", &controllers.RawSqlController{}, "*:List_Del")      // 获取未读消息
+
+	//   -----------3、用户管理
+	//3.1用户账户只可以由管理员添加。
+	//3.2管理员账户只可以有一个。
+	//3.3用户可添加和删除子账号。
+	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
+	//-----------
+
+	beego.Router("/User/Admin_html", &controllers.UserController{}, "*:Admin_html") // 获取未读消息
+	beego.Router("/User/Admin_", &controllers.UserController{}, "*:Admin_")         // 获取未读消息
+	beego.Router("/User/Admin_Post", &controllers.UserController{}, "*:Admin_Post") // 获取未读消息
+	beego.Router("/User/Admin_Del", &controllers.UserController{}, "*:Admin_Del")   // 获取未读消息
+
+	beego.Router("/User/User_html", &controllers.UserController{}, "*:User_html")   // 获取未读消息
+	beego.Router("/User/User_", &controllers.UserController{}, "*:User_")           // 获取未读消息
+	beego.Router("/User/User_Get", &controllers.UserController{}, "*:User_Get")     // 获取未读消息
+	beego.Router("/User/User_Info", &controllers.UserController{}, "*:User_Info")   // 获取未读消息
+	beego.Router("/User/User_Info_", &controllers.UserController{}, "*:User_Info_") // 获取未读消息
+	beego.Router("/User/User_Post", &controllers.UserController{}, "*:User_Post")   // 获取未读消息
+	beego.Router("/User/User_Del", &controllers.UserController{}, "*:User_Del")     // 获取未读消息
+	beego.Router("/User/User_Entry", &controllers.UserController{}, "*:User_Entry") // 获取未读消息
+
+	beego.Router("/User/Power", &controllers.UserController{}, "*:Power_html")      // 获取未读消息
+	beego.Router("/User/Power_", &controllers.UserController{}, "*:Power_")         // 获取未读消息
+	beego.Router("/User/Power_Post", &controllers.UserController{}, "*:Power_Post") // 获取未读消息
+	beego.Router("/User/Power_Del", &controllers.UserController{}, "*:Power_Del")   // 获取未读消息
+
+	beego.Router("/User/Panel_plan_Syn", &controllers.UserController{}, "*:Panel_plan_Syn") // 获取未读消息
+	beego.Router("/User/InspectTokey", &controllers.UserController{}, "*:InspectTokey")     // 获取未读消息
+
+	// 日志
+	beego.Router("/User/UserLogs", &controllers.LogsController{}, "*:UserLogs") // 获取未读消息
+
+	beego.Router("/GoodsOrder/GoodsOrder_html", &controllers.GoodsOrderController{}, "*:GoodsOrder_html")   // 获取未读消息
+	beego.Router("/GoodsOrder/GoodsOrder__html", &controllers.GoodsOrderController{}, "*:GoodsOrder__html") // 获取未读消息
+	beego.Router("/GoodsOrder/List_Post", &controllers.GoodsOrderController{}, "*:List_Post")               // 获取未读消息
+	beego.Router("/GoodsOrder/List_Del", &controllers.GoodsOrderController{}, "*:List_Del")                 // 获取未读消息
+	beego.Router("/GoodsOrder/Data_PDF", &controllers.GoodsOrderController{}, "*:Data_PDF")                 // 获取未读消息
+
+	//   -----------3、用户管理
+	//3.1用户账户只可以由管理员添加。
+	//3.2管理员账户只可以有一个。
+	//3.3用户可添加和删除子账号。
+	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
+	//-----------
+	// 设备日志
+	beego.Router("/Device/DeviceLogs", &controllers.DeviceController{}, "*:DeviceLogs") // 获取未读消息
+
+	beego.Router("/Device/Read_DeviceParameter", &controllers.DeviceController{}, "*:Read_DeviceParameter")             // 获取 基本信息
+	beego.Router("/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_DeviceSensorParameter") // 获取 基本信息
+	//beego.Router("/Device/Read_DeviceParameter", &controllers.DeviceController{}, "*:Read_DeviceParameter")           // 获取 基本信息
+	beego.Router("/Device/Pu_DeviceParameter", &controllers.DeviceController{}, "*:Pu_DeviceParameter")               // 设置 设备参数
+	beego.Router("/Device/Pu_DeviceParameter_Sensor", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor") // 设置 传感器参数
+	//beego.Router("/Device/Pu_DeviceParameter_Sensor_Cache", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor_Cache") // 设置 传感器参数
+	beego.Router("/Device/Pu_DeviceParameter_T_l_p", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_l_p")   // 设置 传感器参数
+	beego.Router("/Device/Pu_DeviceParameter_T_give", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_give") // 设置 传感器参数
+
+	beego.Router("/Device/Device_html", &controllers.DeviceController{}, "*:Device_html")                       // 获取未读消息
+	beego.Router("/Device/Device_", &controllers.DeviceController{}, "*:Device_")                               // 获取未读消息
+	beego.Router("/Device/Device_Post", &controllers.DeviceController{}, "*:Device_Post")                       // 获取未读消息
+	beego.Router("/Device/Device_Add", &controllers.DeviceController{}, "*:Device_Post")                        // 获取未读消息
+	beego.Router("/Device/Device_Del", &controllers.DeviceController{}, "*:Device_Del")                         // 获取未读消息
+	beego.Router("/Device/DeviceBind_html", &controllers.DeviceController{}, "*:DeviceBind_html")               // 获取未读消息
+	beego.Router("/Device/DeviceBind_List", &controllers.DeviceController{}, "*:DeviceBind_List")               // 获取未读消息
+	beego.Router("/Device/DeviceBind_Sensor_List", &controllers.DeviceController{}, "*:DeviceBind_Sensor_List") // 获取未读消息
+	beego.Router("/Device/DeviceBind_Del", &controllers.DeviceController{}, "*:DeviceBind_Del")                 // 获取未读消息
+	beego.Router("/Device/DeviceBind_Add", &controllers.DeviceController{}, "*:DeviceBind_Add")                 // 获取未读消息
+	beego.Router("/Device/DeviceBind_Add_All", &controllers.DeviceController{}, "*:DeviceBind_Add_All")         // 获取未读消息
+	beego.Router("/Device/DeviceBind_html_", &controllers.DeviceController{}, "*:DeviceBind_html_")             // 获取未读消息
+
+	beego.Router("/Device/DeviceClass_html", &controllers.DeviceController{}, "*:DeviceClass_html") // 获取未读消息
+	beego.Router("/Device/DeviceClass_", &controllers.DeviceController{}, "*:DeviceClass_")         // 获取未读消息
+	beego.Router("/Device/DeviceClass_Syn", &controllers.DeviceController{}, "*:DeviceClass_Syn")   // 获取未读消息
+	beego.Router("/Device/DeviceClass_Post", &controllers.DeviceController{}, "*:DeviceClass_Post") // 获取未读消息
+	beego.Router("/Device/DeviceClass_Del", &controllers.DeviceController{}, "*:DeviceClass_Del")   // 获取未读消息
+
+	beego.Router("/Device/DeviceClassBind_html", &controllers.DeviceController{}, "*:DeviceClassBind_html_") // 获取未读消息
+	beego.Router("/Device/DeviceClassBind_List", &controllers.DeviceController{}, "*:DeviceClassBind_List")  // 获取未读消息
+	beego.Router("/Device/DeviceClassBind_Del", &controllers.DeviceController{}, "*:DeviceClassBind_Del")    // 获取未读消息
+	beego.Router("/Device/DeviceClassBind_Add", &controllers.DeviceController{}, "*:DeviceClassBind_Add")    // 获取未读消息
+
+	beego.Router("/Device/Get_DeviceClassId_QRCode", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode")   // 获取未读消息
+	beego.Router("/Device/Get_DeviceClassId_QRCode2", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode2") // 获取未读消息
+	beego.Router("/Device/Get_DeviceClassId", &controllers.DeviceController{}, "*:Get_DeviceClassId")                 // 获取未读消息
+
+	beego.Router("/Device/Device_List", &controllers.DeviceController{}, "*:Device_List")                                 // 获取未读消息
+	beego.Router("/Device/Device_Parameter", &controllers.DeviceController{}, "*:Device_Parameter_html")                  // 获取未读消息
+	beego.Router("/Device/Device_Parameter_Del", &controllers.DeviceController{}, "*:Device_Parameter_Del")               // 获取未读消息
+	beego.Router("/Device/Device_Parameter_Del_Device", &controllers.DeviceController{}, "*:Device_Parameter_Del_Device") // 获取未读消息
+	beego.Router("/Device/DeviceSensor_List", &controllers.DeviceController{}, "*:DeviceSensor_List")                     // 获取未读消息
+	beego.Router("/Device/DeviceSensor_List_html", &controllers.DeviceController{}, "*:DeviceSensor_List_html")           // 获取未读消息
+	beego.Router("/Device/DeviceWarning_List_html", &controllers.DeviceController{}, "*:DeviceWarning_List_html")         // 获取未读消息
+	beego.Router("/Device/DeviceWarning_List", &controllers.DeviceController{}, "*:DeviceWarning_List")                   // 获取未读消息
+	beego.Router("/Device/DeviceWarning_", &controllers.DeviceController{}, "*:DeviceWarning_")                           // 获取未读消息
+	beego.Router("/Device/DeviceWarning_log", &controllers.DeviceController{}, "*:DeviceWarning_log")                     // 获取未读消息
+	beego.Router("/Device/DeviceWarning_M", &controllers.DeviceController{}, "*:DeviceWarning_M")                         // 获取未读消息
+	beego.Router("/Device/DeviceWarning_Post", &controllers.DeviceController{}, "*:DeviceWarning_Post")                   // 获取未读消息
+	beego.Router("/Device/DeviceWarning_Data_Excel", &controllers.DeviceController{}, "*:DeviceWarning_Data_Excel")       // 获取未读消息
+	beego.Router("/Device/DeviceWarning_Del", &controllers.DeviceController{}, "*:DeviceWarning_Del")                     // 获取未读消息
+	beego.Router("/Device/DeviceWarningListT_Tips", &controllers.DeviceController{}, "*:DeviceWarningList_T_Tips")        // 获取未读消息
+
+	beego.Router("/Device/UpDeviceSensor_Tsort", &controllers.DeviceController{}, "*:UpDeviceSensor_Tsort")     // 获取未读消息
+	beego.Router("/Device/UpDeviceSensor_T3dview", &controllers.DeviceController{}, "*:UpDeviceSensor_T3dview") // 获取未读消息
+	// 获取未读消息
+	beego.Router("/Device/UpDeviceSensor_T_datashow", &controllers.DeviceController{}, "*:UpDeviceSensor_T_datashow") // 获取未读消息
+
+	beego.Router("/Device/DeviceTask_List", &controllers.DeviceController{}, "*:DeviceTask_List") // 设置 设备参数
+	beego.Router("/Device/DeviceTask_Post", &controllers.DeviceController{}, "*:DeviceTask_Post") // 设置 设备参数
+
+	beego.Router("/Device/DeviceData_Add", &controllers.DeviceController{}, "*:DeviceData_Add") // 设置 设备参数
+
+	//   -----------3、用户管理
+	//3.1用户账户只可以由管理员添加。
+	//3.2管理员账户只可以有一个。
+	//3.3用户可添加和删除子账号。
+	//3.4用户可对子账号分配管理权限,包括:设备数据查看权限,设备运行参数修改权限。
+	//-----------
+	beego.Router("/Data/Device_Sensor", &controllers.DataController{}, "*:Device_Sensor") // 设置 设备参数
+
+	beego.Router("/Data/DataReal_html", &controllers.DataController{}, "*:DataReal_html")                                // 获取 基本信息
+	beego.Router("/Data/DataRealCalss_html", &controllers.DataController{}, "*:DataRealCalss_html")                      // 获取 基本信息
+	beego.Router("/Data/DataList_html", &controllers.DataController{}, "*:DataList_html")                                // 获取 基本信息
+	beego.Router("/Data/DataLine_html", &controllers.DataController{}, "*:DataLine_html")                                // 获取 基本信息
+	beego.Router("/Data/DataMap_html", &controllers.DataController{}, "*:DataMap_html")                                  // 获取 基本信息
+	beego.Router("/Data/Device_Sensor_List", &controllers.DataController{}, "*:Device_Sensor_List")                      // 设置 设备参数
+	beego.Router("/Data/Device_Sensor_Data", &controllers.DataController{}, "*:Device_Sensor_Data")                      // 设置 设备参数
+	beego.Router("/Data/Device_Sensor_Data_More", &controllers.DataController{}, "*:Device_Sensor_Data_More")            // 设置 设备参数
+	beego.Router("/Data/Device_Sensor_Data_More_ColdVerify", &controllers.DataController{}, "*:Device_Sensor_Data_More") // 设置 设备参数
+	beego.Router("/Data/Device_Sensor_Data_Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel")          // 设置 设备参数
+	beego.Router("/Data/Device_Sensor_Data_Excel_m", &controllers.DataController{}, "*:Device_Sensor_Data_Excel_m")      // 设置 设备参数
+	beego.Router("/Data/Device_Sensor_Data_PDF", &controllers.DataController{}, "*:Device_Sensor_Data_PDF")              // 设置 设备参数
+	beego.Router("/Data/DataPlane", &controllers.DataController{}, "*:DataPlane")                                        // 设置 设备参数
+
+	beego.Router("/Data/DataScreen", &controllers.DataController{}, "*:DataScreen")                           // 设置 设备参数
+	beego.Router("/Data/DataScreen_Data", &controllers.DataController{}, "*:DataScreen_Data")                 // 设置 设备参数
+	beego.Router("/Data/DeviceSensor_Data_Print", &controllers.DataController{}, "*:DeviceSensor_Data_Print") // 设置 设备参数
+	beego.Router("/Data/DataScreen_Map", &controllers.DataController{}, "*:DataScreen_Map")                   // 设置 设备参数
+
+	//beego.Router("/Data/Raw", &controllers.DataController{}, "*:Raw") // 设置 设备参数
+	// 3D
+	beego.Router("/Data/DataView3d_html", &controllers.DataController{}, "*:DataView3d_html")
+	beego.Router("/Data/UpDataView3d", &controllers.DataController{}, "*:UpDataView3d")
+}

+ 0 - 109
routers/v3.go

@@ -1,109 +0,0 @@
-package routers
-
-import (
-	"Cold_Api/controllers"
-	"Cold_Api/controllers/WebSocket"
-	beego "github.com/beego/beego/v2/server/web"
-)
-
-func init() {
-	var version = "/v3"
-
-	// 公共
-	beego.Router(version+"/ws/join", &WebSocket.WebSocketController{}, "get:Join")
-	beego.Router(version+"/UpFile", &controllers.UpFileController{}, "*:UpFile")
-
-	//---------------------------------- 用户管理
-	// 用户
-	beego.Router(version+"/Login_verification", &controllers.AdminController{}, "*:Login_verification")
-	beego.Router(version+"/User/Info", &controllers.UserController{}, "*:User_v2_Info")   // 用户列表
-	beego.Router(version+"/User/List", &controllers.UserController{}, "*:V2_User_List")   // 用户列表
-	beego.Router(version+"/User/Get", &controllers.UserController{}, "*:User_v2_Get")     // 获取用户信息
-	beego.Router(version+"/User/Add", &controllers.UserController{}, "*:User_v2_Add")     //
-	beego.Router(version+"/User/Edit", &controllers.UserController{}, "*:User_v2_Edit")   //
-	beego.Router(version+"/User/AEdit", &controllers.UserController{}, "*:User_v2_AEdit") //
-	beego.Router(version+"/User/ADel", &controllers.UserController{}, "*:V2_User_Del")    //
-	beego.Router(version+"/User/Entry", &controllers.UserController{}, "*:V2_User_Entry") // 获取未读消息
-	// 用户日志
-	beego.Router(version+"/User/LogsClass", &controllers.LogsController{}, "*:V2_UserLogsClass") // 获取未读消息
-	beego.Router(version+"/User/LogsList", &controllers.LogsController{}, "*:V2_UserLogs")       // 获取未读消息
-
-	// 权限
-	beego.Router(version+"/Power/List", &controllers.UserController{}, "*:Power_List")    //
-	beego.Router(version+"/Power/Get", &controllers.UserController{}, "*:Power_Get")      //
-	beego.Router(version+"/Power/Add", &controllers.UserController{}, "*:Power_v2_Add")   //
-	beego.Router(version+"/Power/Edit", &controllers.UserController{}, "*:Power_v2_Edit") //
-	beego.Router(version+"/Power/Del", &controllers.UserController{}, "*:Power_v2_Del")   //
-
-	//---------------------------------- 设备管理
-
-	// 设备
-	beego.Router(version+"/Device/List", &controllers.DeviceController{}, "*:Device_v2_List")                                      //
-	beego.Router(version+"/Device/Add", &controllers.DeviceController{}, "*:Device_Post")                                          //
-	beego.Router(version+"/Device/Edit", &controllers.DeviceController{}, "*:Device_Edit")                                         //
-	beego.Router(version+"/Device/Del", &controllers.DeviceController{}, "*:Device_Del")                                           //
-	beego.Router(version+"/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_v2_DeviceSensorParameter") //
-	beego.Router(version+"/Device/DeviceTask_Post", &controllers.DeviceController{}, "*:DeviceTask_Post")                          //
-
-	beego.Router(version+"/Device/Parameter_List", &controllers.DeviceController{}, "*:Device_v2_Parameter_List") //
-	beego.Router(version+"/Device/Parameter_Pu", &controllers.DeviceController{}, "*:Device_v2_Parameter_Pu")     //
-
-	// 权限绑定
-	beego.Router(version+"/Device/Bind_Add", &controllers.DeviceController{}, "*:V2_DeviceBind_Add") //
-	beego.Router(version+"/Device/Bind_Del", &controllers.DeviceController{}, "*:V2_DeviceBind_Del") //
-
-	// 设备-传感器
-	beego.Router(version+"/DeviceSensor/List", &controllers.DeviceController{}, "*:DeviceSensor_v2_List") //
-	beego.Router(version+"/DeviceSensor/Edit", &controllers.DeviceController{}, "*:DeviceSensor_Edit")    //
-	beego.Router(version+"/DeviceSensor/Del", &controllers.DeviceController{}, "*:DeviceSensor_Del")      //
-
-	beego.Router(version+"/DeviceSensor/Parameter_List", &controllers.DeviceController{}, "*:DeviceSensor_v2_Parameter_List") //
-	beego.Router(version+"/DeviceSensor/Parameter_Pu", &controllers.DeviceController{}, "*:DeviceSensor_v2_Parameter_Pu")     //
-
-	//分类绑定
-	beego.Router(version+"/Class/List", &controllers.DeviceController{}, "*:V2_Class_List") // 获取未读消息
-	beego.Router(version+"/Class/Get", &controllers.DeviceController{}, "*:V2_Class_Get")   // 获取未读消息
-	beego.Router(version+"/Class/Add", &controllers.DeviceController{}, "*:V2_Class_Add")   // 获取未读消息
-	beego.Router(version+"/Class/Edit", &controllers.DeviceController{}, "*:V2_Class_Edit") // 获取未读消息
-	beego.Router(version+"/Class/Del", &controllers.DeviceController{}, "*:V2_Class_Del")   // 获取未读消息
-	// 绑定
-	beego.Router(version+"/Class/Bind_Del", &controllers.DeviceController{}, "*:V2_ClassBind_Del") // 获取未读消息
-	beego.Router(version+"/Class/Bind_Add", &controllers.DeviceController{}, "*:V2_ClassBind_Add") // 获取未读消息
-	//二维码
-	beego.Router("/Device/Get_DeviceClassId_QRCode", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode")   // 获取未读消息
-	beego.Router("/Device/Get_DeviceClassId_QRCode2", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode2") // 获取未读消息
-
-	// 设备报警
-	beego.Router(version+"/DeviceWarning/List", &controllers.DeviceController{}, "*:V2_DeviceWarning_List")          // 获取未读消息
-	beego.Router(version+"/DeviceWarning/Get", &controllers.DeviceController{}, "*:V2_DeviceWarning_Get")            // 获取未读消息
-	beego.Router(version+"/DeviceWarning/Edit", &controllers.DeviceController{}, "*:V2_DeviceWarning_Post")          // 获取未读消息
-	beego.Router(version+"/DeviceWarning/Del", &controllers.DeviceController{}, "*:V2_DeviceWarning_Del")            // 获取未读消息
-	beego.Router(version+"/DeviceWarning/ToExcel", &controllers.DeviceController{}, "*:V2_DeviceWarning_Data_Excel") // 获取未读消息
-
-	// 数据展示
-	beego.Router(version+"/Data/List", &controllers.DataController{}, "*:V2_Device_Sensor_Data_More") // 获取未读消息
-	beego.Router(version+"/Data/Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel")  // 获取未读消息
-	beego.Router(version+"/Data/PDF", &controllers.DataController{}, "*:Device_Sensor_Data_PDF")      // 获取未读消息
-
-	// 2D
-	//beego.Router(version+"/Data/DataView3d_html", &controllers.DataController{}, "*:DataView3d_html")
-	//beego.Router(version+"/Data/UpDataView3d", &controllers.DataController{}, "*:UpDataView3d")
-	// 3D
-	beego.Router(version+"/Data/DataView3d_html", &controllers.DataController{}, "*:DataView3d_html")
-	beego.Router(version+"/Data/UpDataView3d", &controllers.DataController{}, "*:UpDataView3d")
-	// 执行 SQL
-	beego.Router(version+"/Data/Raw", &controllers.RawSqlController{}, "*:Rawv3") // 执行 SQL
-
-	// 订单管理
-	beego.Router(version+"/GoodsOrder/List", &controllers.GoodsOrderController{}, "*:GoodsOrder_List") // 获取未读消息
-	beego.Router(version+"/GoodsOrder/Get", &controllers.GoodsOrderController{}, "*:GoodsOrder_Get")   // 获取未读消息
-	beego.Router(version+"/GoodsOrder/Add", &controllers.GoodsOrderController{}, "*:GoodsOrder_Add")   // 获取未读消息
-	beego.Router(version+"/GoodsOrder/Edit", &controllers.GoodsOrderController{}, "*:GoodsOrder_Edit") // 获取未读消息
-	beego.Router(version+"/GoodsOrder/Del", &controllers.GoodsOrderController{}, "*:GoodsOrder_Del")   // 获取未读消息
-	beego.Router(version+"/GoodsOrder/PDF", &controllers.GoodsOrderController{}, "*:GoodsOrder_PDF")   // 获取未读消息
-
-	// 系统日志
-	beego.Router(version+"/System/LogsClass", &controllers.LogsController{}, "*:LogsClass") // 获取未读消息
-	beego.Router(version+"/System/LogsList", &controllers.LogsController{}, "*:LogsList")   // 获取未读消息
-
-}

+ 0 - 1
server.pid

@@ -1 +0,0 @@
-99966

+ 1 - 6
tests/default_test.go

@@ -2,16 +2,11 @@ package test
 
 import (
 	"fmt"
-	"strings"
 	"testing"
-	"time"
 )
 
 // TestBeego is a sample to run an endpoint test
 func TestBeego(t *testing.T) {
 
-	T_time_s := strings.Split("2022-11-15 00:00:00|2822-11-23 00:00:00", "|")
-
-	println("T_time_s:", T_time_s[0])
-	fmt.Println(time.ParseInLocation("2006-01-02 15:04:05", T_time_s[0], time.Local))
+	println(fmt.Sprintf("%2d", 4))
 }

+ 1 - 1
views/Data/DataLine.html

@@ -445,7 +445,7 @@
                 "            width=\"40\"/>\n" +
                 "       <div style=\"float: left;\"  >\n" +
                 "           <div style=\"margin-top: 4px;font-size: 14px;height: 24px;\">" + DS_lite[i].T_name + "</div>\n" +
-                "           <div style=\"margin-top: -3px;font-size: 12px\">SN:" + DS_lite[i].T_sn + " [" + DS_lite[i].T_id + "]</div>\n" +
+                "           <div style=\"margin-top: -3px;font-size: 12px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;width: 200px;\">SN:" + DS_lite[i].T_sn + " [" + DS_lite[i].T_id + "]</div>\n" +
                 "       </div>\n" +
                 "       <div class=\"layui-card-header\" style=\"float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF\">\n" +
                 "           \n" +

+ 2 - 4
views/Data/DataList.html

@@ -386,8 +386,6 @@
 
     }
 
-
-
     //获取div中所有的复选框  .value
     var checkboxs = document.getElementsByClassName("checkboxxx");
     function Checkboxs_All () {
@@ -484,7 +482,7 @@
                 "            width=\"40\"/>\n" +
                 "       <div style=\"float: left;\">\n" +
                 "           <div style=\"margin-top: 4px;font-size: 14px;height: 24px;\">" + DS_lite[i].T_name + "</div>\n" +
-                "           <div style=\"margin-top: -3px;font-size: 12px\">SN:" + DS_lite[i].T_sn + " [" + DS_lite[i].T_id + "]</div>\n" +
+                "           <div style=\"margin-top: -3px;font-size: 12px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;width: 200px;\">SN:" + DS_lite[i].T_sn + " [" + DS_lite[i].T_id + "]</div>\n" +
                 "       </div>\n" +
                 "       <div class=\"layui-card-header\"\n" +
                 "            style=\"float: right;padding-left: 0px;padding-top: 6px;color: #1E9FFF\">\n" +
@@ -563,7 +561,7 @@
             if(Admin_rh == 0 && DS_lite[i].T_sn.indexOf("YD") != -1){
 
             }else {
-                if(DS_lite[i].T_rh <= DS_lite[i].T_RHlower || DS_lite[i].T_rh >= DS_lite[i].T_RHupper){
+                if(DS_lite[i].T_rh < DS_lite[i].T_RHlower || DS_lite[i].T_rh >= DS_lite[i].T_RHupper){
                     style_s = " style='background-color: #ff8585' "
                 }
             }

+ 4 - 1
views/Device/DeviceWarning.html

@@ -93,7 +93,10 @@
                                         <td>{{$elem.T_sn}}</td>
                                         <td>{{$elem.T_Addr}}</td>
                                         <td>[{{$elem.T_Id}}]-{{$elem.T_Name}}</td>
-                                        <td>{{$elem.T_T}}</td>
+                                        <td>
+                                            {{$elem.T_T}}
+
+                                        </td>
                                         <td>
                                             {{if or (eq 0 ($elem.T_sn | IsYD)) (eq 1 $.Admin_r.Admin_rh)}}
                                                 {{$elem.T_RH}}