Sfoglia il codice sorgente

add:统一异常处理,日志优化

zoie 2 anni fa
parent
commit
c758f168e3

+ 28 - 4
Nats/Nats.go

@@ -71,17 +71,41 @@ func NatsInit() {
 			//"请将本内容发送到 深圳市宝智达科技有限公司 微信公众号-|"+lib.AesEncryptCBC(T_calss_id, "0123456789012345")+"|-",
 			Content_r := lib.GetBetweenStr(person_QRCode.EventKey, "-|", "|-")
 			decryptCode := lib.AesDecryptCBC(Content_r, "0123456789012345")
-			fmt.Println("解密结果 UUID:", decryptCode, "  Content_r:", Content_r)
-			Admin_r, err := Account.Read_Admin_ByUuid(decryptCode)
+			T_uuid_name := strings.Split(decryptCode, "/")
+			var uuid, name string
+			if len(T_uuid_name) == 2 {
+				uuid = strings.Split(decryptCode, "/")[0]
+				name = strings.Split(decryptCode, "/")[1]
+			}
+
+			fmt.Println("解密结果 UUID name:", decryptCode, "  Content_r:", Content_r)
+			Admin_r, err := Account.Read_Admin_ByUuid(uuid)
 			if err != nil {
 				_ = lib.Nats.Publish(m.Reply, []byte(""))
 				return
 			}
+			T_wx := fmt.Sprintf("%s/%s", person_QRCode.FromUserName, name)
+
+			// 已绑定 name相同 提示已绑定
+			// 已绑定 name不同 在数据库修改name
+			if strings.Contains(Admin_r.T_wx, person_QRCode.FromUserName) {
+				list := strings.Split(Admin_r.T_wx, "|")
+				for _, v := range list {
+					if strings.Split(v, "/")[0] == person_QRCode.FromUserName {
+						if v == T_wx {
+							_ = lib.Nats.Publish(m.Reply, []byte(name+" 已绑定!"))
+							return
+						}
+						Admin_r.T_wx = strings.Replace(Admin_r.T_wx, v, T_wx, 1)
+					}
+				}
+			} else {
+				Admin_r.T_wx += T_wx + "|"
+			}
 
-			Admin_r.T_wx = person_QRCode.FromUserName
 			Account.Update_Admin(Admin_r, "T_wx")
 
-			_ = lib.Nats.Publish(m.Reply, []byte(Admin_r.T_name+" 绑定成功!"))
+			_ = lib.Nats.Publish(m.Reply, []byte(name+" 绑定成功!"))
 			return
 		}
 		_ = lib.Nats.Publish(m.Reply, []byte(""))

+ 1 - 0
conf/config.go

@@ -9,6 +9,7 @@ var NatsServer_Url, _ = beego.AppConfig.String("NatsServer_Url")
 
 var HTTPPort, _ = beego.AppConfig.String("HTTPPort")
 var AppName, _ = beego.AppConfig.String("appname")
+var RunMode, _ = beego.AppConfig.String("RunMode")
 
 var Version, _ = beego.AppConfig.String("Version")
 

+ 9 - 3
controllers/Data.go

@@ -20,8 +20,8 @@ import (
 
 type DataController struct {
 	beego.Controller
-	Admin_r Account.Admin // 登陆的用户
-	T_pid   int           // 公司id
+	Admin_r *Account.Admin // 登陆的用户
+	T_pid   int            // 公司id
 }
 
 func (c *DataController) Prepare() {
@@ -89,8 +89,14 @@ func (c *DataController) Device_Sensor_List() {
 	}
 	T_name := c.GetString("T_name")
 
+	T_RealTime, T_RealTime_err := c.GetInt("T_RealTime")
+	if T_RealTime_err != nil {
+		T_RealTime = 0
+	}
+
 	var cnt int64
-	r_jsons.DeviceSensor_lite, cnt = Device.Read_DeviceSensor_List_For_Data(c.T_pid, T_sn, T_name, T_Class_id, T_type, page, page_z)
+	Device.Read_DeviceSensorParameter_All_Map(T_sn, 0)
+	r_jsons.DeviceSensor_lite, cnt = Device.Read_DeviceSensor_List_For_Data(c.T_pid, T_sn, T_name, T_Class_id, T_type, T_RealTime, page, page_z)
 
 	page_size := math.Ceil(float64(cnt) / float64(page_z))
 	r_jsons.Page = int(page)

+ 72 - 9
controllers/Device.go

@@ -21,8 +21,8 @@ import (
 // Handle
 type DeviceController struct {
 	beego.Controller
-	Admin_r Account.Admin // 登陆的用户
-	T_pid   int           // 公司id
+	Admin_r *Account.Admin // 登陆的用户
+	T_pid   int            // 公司id
 }
 
 func (c *DeviceController) Prepare() {
@@ -77,6 +77,29 @@ func (c *DeviceController) Device_List() {
 	return
 
 }
+func (c *DeviceController) Device_Get() {
+	var r_jsons lib.R_JSONS
+
+	T_sn := c.GetString("T_sn")
+	Device_r, err := Device.Read_Device_ByT_sn(T_sn)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 303, Msg: "查询失败!"}
+		c.ServeJSON()
+		return
+	}
+	if Device_r.T_pid != c.T_pid {
+		c.Data["json"] = lib.JSONS{Code: 303, Msg: "无权查看!"}
+		c.ServeJSON()
+		return
+	}
+
+	r_jsons.Data = Device.DeviceToDevice_R(Device_r)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+
+}
 func (c *DeviceController) Device_Add() {
 	var err error
 	T_sn := c.GetString("T_sn")
@@ -305,7 +328,26 @@ func (c *DeviceController) DeviceLogs() {
 func (c *DeviceController) Device_Parameter_List() {
 	Sn := c.GetString("T_sn")
 
-	DeviceParameter_lite := Device.Read_DeviceParameter_SN_List(Sn)
+	page, _ := c.GetInt("page")
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+	DeviceParameter_lite := Device.Read_DeviceParameter_SN_List(Sn, page, page_z)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: DeviceParameter_lite}
+	c.ServeJSON()
+	return
+}
+
+// 获取设备参数
+func (c *DeviceController) Device_Parameter_Get() {
+	Sn := c.GetString("T_sn")
+
+	DeviceParameter_lite := Device.Read_DeviceParameter_SN(Sn)
 	if len(DeviceParameter_lite) == 0 {
 		NatsServer.Read_DeviceParameter(Sn)
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "未同步参数,请检查设备是否正常!"}
@@ -386,7 +428,7 @@ func (c *DeviceController) Device_Parameter_Pu() {
 		c.ServeJSON()
 		return
 	}
-	DeviceParameter_lite := Device.Read_DeviceParameter_SN_List(T_SN)
+	DeviceParameter_lite := Device.Read_DeviceParameter_SN(T_SN)
 	if len(DeviceParameter_lite) == 0 {
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "未同步参数,请检查设备是否正常!"}
 		c.ServeJSON()
@@ -436,6 +478,7 @@ func (c *DeviceController) Device_Parameter_Pu() {
 	if v := c.GetString("T_name"); len(v) > 0 {
 		DeviceParameter.T_name = v
 	}
+	DeviceParameter.Id = 0
 	DeviceParameter.T_State = 2
 	DeviceParameter.T_uuid = c.Admin_r.T_uuid
 	DeviceParameter.T_SendState = 0
@@ -620,14 +663,14 @@ func (c *DeviceController) DeviceSensor_Del() {
 	return
 }
 
-// 传感器参数列表
-func (c *DeviceController) DeviceSensor_Parameter_List() {
+// 传感器参数
+func (c *DeviceController) DeviceSensor_Parameter_Get() {
 
 	Sn := c.GetString("T_sn")
 	Id, _ := c.GetInt("T_id")
 
 	//c.Data["DeviceSensor"], _ = Device.Read_DeviceSensor_ByTsn_Tid(Sn, Id)
-	DeviceSensorParameter_lite := Device.Read_DeviceSensorParameter_List(Sn, Id, 1, 10)
+	DeviceSensorParameter_lite := Device.Read_DeviceSensorParameter_T_sn_T_id(Sn, Id)
 	if len(DeviceSensorParameter_lite) == 0 {
 		NatsServer.Read_DeviceSensorParameter(Sn)
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "未同步参数,请检查设备是否正常!"}
@@ -640,6 +683,26 @@ func (c *DeviceController) DeviceSensor_Parameter_List() {
 	return
 }
 
+// 传感器参数列表
+func (c *DeviceController) DeviceSensor_Parameter_List() {
+	Sn := c.GetString("T_sn")
+	Id, _ := c.GetInt("T_id")
+	page, _ := c.GetInt("page")
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	DeviceSensorParameter_lite := Device.Read_DeviceSensorParameter_List(Sn, Id, 2, page, page_z)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: DeviceSensorParameter_lite}
+	c.ServeJSON()
+	return
+}
+
 // 修改传感器参数
 func (c *DeviceController) DeviceSensor_Parameter_Pu() {
 
@@ -1741,13 +1804,13 @@ func (c *DeviceController) NoticeBind_Add() {
 		c.ServeJSON()
 		return
 	}
-	R_DeviceClass, err := Company.Read_CompanyNotice_ById(T_notice_id)
+	R_CompanyNotice, err := Company.Read_CompanyNotice_ById(T_notice_id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 205, Msg: "T_class_id Err!"}
 		c.ServeJSON()
 		return
 	}
-	if R_DeviceClass.T_pid != c.T_pid {
+	if R_CompanyNotice.T_pid != c.T_pid {
 		c.Data["json"] = lib.JSONS{Code: 205, Msg: "T_pid Err!"}
 		c.ServeJSON()
 		return

+ 3 - 2
controllers/DeviceReal.go

@@ -10,15 +10,16 @@ import (
 // 循环刷新
 func DeviceRealTime() {
 	fmt.Println("=====================DeviceRealTime GO===============")
-	time.Sleep(time.Second * 10)
+	time.Sleep(time.Second * 3)
 	for true {
 		for k, v := range lib.DeviceRealSnMap {
 			fmt.Println("DeviceRealSnMap:", k, " num:", v)
 			NatsServer.Get_Device_Realtime(k)
 
 			v--
+			lib.DeviceRealSnMap[k] = v
 			if v == 0 {
-				delete(lib.CountrySnMap, k)
+				delete(lib.DeviceRealSnMap, k)
 			}
 			time.Sleep(time.Millisecond * 100)
 		}

+ 32 - 0
controllers/Error.go

@@ -0,0 +1,32 @@
+package controllers
+
+import (
+	"Cold_Api/controllers/lib"
+	beego "github.com/beego/beego/v2/server/web"
+)
+
+// 定义错误控制器
+type ErrorController struct {
+	beego.Controller
+}
+
+// 定义404错误, 调用例子: this.Abort("404")
+func (c *ErrorController) Error404() {
+	c.Data["json"] = lib.JSONS{Code: 202, Msg: "页面未找到!"}
+	c.ServeJSON()
+	return
+}
+
+// 定义500错误, 调用例子: this.Abort("500")
+func (c *ErrorController) Error500() {
+	c.Data["json"] = lib.JSONS{Code: 202, Msg: "服务器异常,请稍后重试!"}
+	c.ServeJSON()
+	return
+}
+
+// 定义db错误, 调用例子: this.Abort("Db")
+func (c *ErrorController) ErrorDb() {
+	c.Data["json"] = lib.JSONS{Code: 202, Msg: "服务器异常,请稍后重试!"}
+	c.ServeJSON()
+	return
+}

+ 7 - 2
controllers/Product.go

@@ -28,7 +28,7 @@ func (c *ProductController) Prepare() {
 		User_tokey = GetString
 	}
 
-	c.Admin_r = lib.Admin_r
+	c.Admin_r = *lib.Admin_r
 	T_pid := c.Admin_r.T_pid
 	if T_pid == 0 {
 		T_pid, _ = Account.Redis_Tokey_T_pid_Get(User_tokey)
@@ -67,7 +67,12 @@ func (c *ProductController) ProductUpgrade_List() {
 	return
 }
 func (c *ProductController) ProductUpgrade_T_model_List() {
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Product.Read_ProductUpgrade_T_model()}
+	var list []string
+	for _, v := range Product.Read_ProductType_All() {
+		list = append(list, v.T_model)
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: list}
 	c.ServeJSON()
 	return
 }

+ 29 - 13
controllers/User.go

@@ -34,7 +34,7 @@ func (c *UserController) Prepare() {
 		User_tokey = GetString
 	}
 
-	c.Admin_r = lib.Admin_r
+	c.Admin_r = *lib.Admin_r
 	T_pid := c.Admin_r.T_pid
 	if T_pid == 0 {
 		T_pid, _ = Account.Redis_Tokey_T_pid_Get(User_tokey)
@@ -45,15 +45,9 @@ func (c *UserController) Prepare() {
 
 // 获取微信二维码  ( 扫描后 ,Nats 自动绑定在 Admin->T_wx )
 func (c *UserController) User_WxQRCode() {
-	// 验证登录
-	b_, admin_r := 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
-	}
 
-	WxQRCode_str, _ := NatsServer.Wx_GenerateQRCode("-|" + lib.AesEncryptCBC(admin_r.T_uuid, "0123456789012345") + "|- @宝智达冷链 微信公众号通知")
+	T_name := c.GetString("T_name")
+	WxQRCode_str, _ := NatsServer.Wx_GenerateQRCode("-|" + lib.AesEncryptCBC(c.Admin_r.T_uuid+"/"+T_name, "0123456789012345") + "|- @宝智达冷链 微信公众号通知")
 	WxQRCode_str = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + WxQRCode_str
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: WxQRCode_str}
@@ -66,7 +60,7 @@ func (c *UserController) Company_Tree() {
 	var r_jsons lib.R_JSONS
 
 	T_name := c.GetString("T_name")
-	r_jsons.Data, r_jsons.Num = Account.Read_Company_Tree(c.Admin_r, T_name)
+	r_jsons.Data = Account.Read_Company_Tree(c.Admin_r, T_name)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()
@@ -77,7 +71,7 @@ func (c *UserController) Company_List() {
 
 	var r_jsons lib.R_JSONS
 	T_name := c.GetString("T_name")
-	r_jsons.Data, r_jsons.Num = Account.Read_Company_List(T_name)
+	r_jsons.Data = Account.Read_Company_List(T_name)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()
@@ -87,11 +81,17 @@ func (c *UserController) Company_List() {
 func (c *UserController) Company_Add() {
 	T_mid, _ := c.GetInt("T_mid")
 	T_name := c.GetString("T_name")
+	T_plan := c.GetString("T_plan")
+	T_data := c.GetString("T_data")
+	T_v3d := c.GetString("T_v3d")
 
 	var_ := Account.Company{
 		T_mid:   T_mid,
 		T_name:  T_name,
 		T_State: 1,
+		T_plan:  T_plan,
+		T_data:  T_data,
+		T_v3d:   T_v3d,
 	}
 
 	id, err := Account.Add_Company(var_)
@@ -133,12 +133,24 @@ func (c *UserController) Company_Edit() {
 	}
 
 	T_name := c.GetString("T_name")
+	T_plan := c.GetString("T_plan")
+	T_data := c.GetString("T_data")
+	T_v3d := c.GetString("T_v3d")
 
 	if len(T_name) > 0 {
 		Company_r.T_name = T_name
 	}
+	if len(T_plan) > 0 {
+		Company_r.T_plan = T_plan
+	}
+	if len(T_data) > 0 {
+		Company_r.T_data = T_data
+	}
+	if len(T_v3d) > 0 {
+		Company_r.T_v3d = T_v3d
+	}
 
-	is := Account.Update_Company(Company_r, "T_name")
+	is := Account.Update_Company(Company_r, "T_name", "T_plan", "T_data", "T_v3d")
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
 		c.ServeJSON()
@@ -295,6 +307,7 @@ func (c *UserController) User_Post() {
 	T_pass := c.GetString("T_pass")
 	T_phone := c.GetString("T_phone")
 	T_mail := c.GetString("T_mail")
+	T_wx := c.GetString("T_wx")
 	if len(T_pass) < 8 && len(T_pass) > 0 {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "密码异常!"}
 		c.ServeJSON()
@@ -312,7 +325,10 @@ func (c *UserController) User_Post() {
 	if len(T_mail) > 0 {
 		admin_r.T_mail = T_mail
 	}
-	is := Account.Update_Admin(admin_r, "T_name", "T_pass", "T_phone", "T_mail")
+	if len(T_wx) > 0 {
+		admin_r.T_wx = T_wx
+	}
+	is := Account.Update_Admin(admin_r, "T_name", "T_pass", "T_phone", "T_mail", "T_wx")
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 204, Msg: "修改失败!"}
 		c.ServeJSON()

+ 1 - 1
controllers/lib/Qiniu.go

@@ -62,7 +62,7 @@ func Pload_qiniu(localFile string, name string) bool {
 	}
 	err := formUploader.PutFile(context.Background(), &ret, upToken, name, localFile, &putExtra)
 	if err != nil {
-		logs.Println(err)
+		logs.Error("Pload_qiniu", err)
 		System.Add_Logs("七牛云", "上传文件失败"+localFile, err.Error())
 		return false
 	}

+ 4 - 3
controllers/lib/lib.go

@@ -26,7 +26,7 @@ type Cl_ struct {
 var CountrySnMap map[string]Cl_    /*创建集合 */
 var DeviceRealSnMap map[string]int /*创建集合 */
 var Nats *nats.Conn
-var Admin_r Account.Admin
+var Admin_r *Account.Admin
 
 func init() {
 	CountrySnMap = make(map[string]Cl_)
@@ -81,12 +81,13 @@ func Verification(GetCookie string, GetString string) (bool, Account.Admin) {
 		return false, Account.Admin{}
 	}
 	var err error
-	Admin_r, err = Account.Read_Admin_ByUuid(T_uuid)
+	admin_r, err := Account.Read_Admin_ByUuid(T_uuid)
 	if err != nil {
 		return false, Account.Admin{}
 	}
+	Admin_r = &admin_r
 	log.Println("登录 Admin_name 为:", Admin_r.T_name)
-	return true, Admin_r
+	return true, admin_r
 }
 
 // 登录验证

+ 2 - 2
controllers/lib/libString.go

@@ -40,11 +40,11 @@ func Md5(str string) string {
 // 转化
 func TimeStrToTime(T_time string) (time.Time, bool) {
 
-	stamp, err := time.ParseInLocation("2006-01-02 15:04:05", T_time, time.Local)
+	stamp, err := time.Parse("2006-01-02 15:04:05", T_time)
 
 	if err != nil {
 		return time.Time{}, false
 	}
 
-	return stamp, false
+	return stamp, true
 }

+ 26 - 14
logs/LogPrintln.go

@@ -1,7 +1,7 @@
 package logs
 
 import (
-	"fmt"
+	"Cold_Api/conf"
 	"github.com/astaxie/beego/logs"
 	"runtime"
 	"time"
@@ -14,7 +14,10 @@ func init() {
 	logx = logs.NewLogger()
 	logx.SetLogger(logs.AdapterFile, `{"filename":"logs/logx/logx.log"}`)
 	logx.EnableFuncCallDepth(true)
-
+	logx.SetLogFuncCallDepth(3)
+	if conf.RunMode == "dev" {
+		logx.SetLogger("console")
+	}
 	if runtime.GOOS == "windows" {
 		Test = true
 	} else {
@@ -22,17 +25,26 @@ func init() {
 	}
 }
 
-func Println(a ...interface{}) {
-	//if Test {
-	//
-	//}
-	fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "=>", a)
-	logx.Info(time.Now().Format("2006-01-02 15:04:05")+">", a)
+func Println(v ...interface{}) {
+	logx.Info(time.Now().Format("2006-01-02 15:04:05")+">", v)
 }
 
-//func Println(a ...interface{}) {
-//	if test {
-//		fmt.Printf("=>", a)
-//	}
-//	logx.Info(">", a)
-//}
+// Debug Log DEBUG level message.
+func Debug(format string, v ...interface{}) {
+	logx.Debug(format, v...)
+}
+
+// Info Log ERROR level message.
+func Info(format string, v ...interface{}) {
+	logx.Info(format, v...)
+}
+
+// Error Log ERROR level message.
+func Error(format string, v ...interface{}) {
+	logx.Error(format, v...)
+}
+
+// Warning Log WARNING level message.
+func Warning(format string, v ...interface{}) {
+	logx.Warning(format, v...)
+}

+ 57 - 0
logs/logx/logx.log

@@ -133,3 +133,60 @@
 2023/01/09 16:04:25.751 [I]  2023-01-09 16:04:25>%!(EXTRA []interface {}=[nats OK!])
 2023/01/18 16:04:58.471 [I]  2023-01-18 16:04:58>%!(EXTRA []interface {}=[============Nats init============])
 2023/01/18 16:04:58.501 [I]  2023-01-18 16:04:58>%!(EXTRA []interface {}=[nats OK!])
+2023/02/22 11:37:56.577 [I] [Nats.go:22]  ============Nats init============
+2023/02/22 11:37:56.591 [I] [Nats.go:30]  nats OK!
+2023/02/22 11:37:56.755 [I] [filter.go:21]  =========== 初始化路由筛选信息 =========
+2023/02/22 11:37:57.302 [I] [ProductType.go:67]  =========== 初始化产品类型 =========
+2023/02/22 11:37:58.755 [I] [WarningType.go:165]  =========== 初始化报警类型 =========
+2023/02/22 11:46:04.144 [I] [Nats.go:22]  ============Nats init============
+2023/02/22 11:46:04.162 [I] [Nats.go:30]  nats OK!
+2023/02/22 11:46:04.360 [I] [filter.go:21]  =========== 初始化路由筛选信息 =========
+2023/02/22 11:46:05.046 [I] [ProductType.go:67]  =========== 初始化产品类型 =========
+2023/02/22 11:46:06.359 [I] [WarningType.go:165]  =========== 初始化报警类型 =========
+2023/02/22 11:47:02.938 [I] [Nats.go:22]  ============Nats init============
+2023/02/22 11:47:02.974 [I] [Nats.go:30]  nats OK!
+2023/02/22 11:47:03.143 [I] [filter.go:21]  =========== 初始化路由筛选信息 =========
+2023/02/22 11:47:03.826 [I] [ProductType.go:67]  =========== 初始化产品类型 =========
+2023/02/22 11:47:05.142 [I] [WarningType.go:165]  =========== 初始化报警类型 =========
+2023/02/22 12:41:46.085 [I] [Nats.go:22]  ============Nats init============
+2023/02/22 12:41:46.109 [I] [Nats.go:30]  nats OK!
+2023/02/22 12:41:46.212 [I] [filter.go:21]  =========== 初始化路由筛选信息 =========
+2023/02/22 12:41:46.945 [I] [ProductType.go:67]  =========== 初始化产品类型 =========
+2023/02/22 12:41:48.210 [I] [WarningType.go:165]  =========== 初始化报警类型 =========
+2023/02/22 12:43:16.752 [I] [User.go:1067]  登录用户 菜单 pid 为:%!(EXTRA int=33)
+2023/02/22 12:44:02.172 [I] [Nats.go:22]  ============Nats init============%!(EXTRA []interface {}=[])
+2023/02/22 12:44:02.198 [I] [Nats.go:30]  nats OK!%!(EXTRA []interface {}=[])
+2023/02/22 12:44:02.296 [I] [filter.go:21]  =========== 初始化路由筛选信息 =========%!(EXTRA []interface {}=[])
+2023/02/22 12:44:03.079 [I] [ProductType.go:67]  =========== 初始化产品类型 =========%!(EXTRA []interface {}=[])
+2023/02/22 12:44:04.295 [I] [WarningType.go:165]  =========== 初始化报警类型 =========%!(EXTRA []interface {}=[])
+2023/02/22 12:45:24.310 [I] [Nats.go:22]  %!(EXTRA []interface {}=[============Nats init============])
+2023/02/22 12:45:24.360 [I] [Nats.go:30]  %!(EXTRA []interface {}=[nats OK!])
+2023/02/22 12:45:24.482 [I] [filter.go:21]  %!(EXTRA []interface {}=[=========== 初始化路由筛选信息 =========])
+2023/02/22 12:45:25.086 [I] [ProductType.go:67]  %!(EXTRA []interface {}=[=========== 初始化产品类型 =========])
+2023/02/22 12:45:26.481 [I] [WarningType.go:165]  %!(EXTRA []interface {}=[=========== 初始化报警类型 =========])
+2023/02/22 12:46:01.408 [I] [Nats.go:22]  [============Nats init============]
+2023/02/22 12:46:01.443 [I] [Nats.go:30]  [nats OK!]
+2023/02/22 12:46:01.587 [I] [filter.go:21]  [=========== 初始化路由筛选信息 =========]
+2023/02/22 12:46:02.321 [I] [ProductType.go:67]  [=========== 初始化产品类型 =========]
+2023/02/22 12:46:03.586 [I] [WarningType.go:165]  [=========== 初始化报警类型 =========]
+2023/02/22 12:46:34.017 [I] [Nats.go:22]  [============Nats init============]
+2023/02/22 12:46:34.084 [I] [Nats.go:30]  [nats OK!]
+2023/02/22 12:46:34.215 [I] [filter.go:21]  [=========== 初始化路由筛选信息 =========]
+2023/02/22 12:46:34.919 [I] [ProductType.go:67]  [=========== 初始化产品类型 =========]
+2023/02/22 12:46:36.213 [I] [WarningType.go:165]  [=========== 初始化报警类型 =========]
+2023/02/22 12:47:05.585 [I] [Nats.go:22]  ============Nats init============
+2023/02/22 12:47:05.675 [I] [Nats.go:30]  nats OK!
+2023/02/22 12:47:05.766 [I] [filter.go:21]  =========== 初始化路由筛选信息 =========
+2023/02/22 12:47:06.432 [I] [ProductType.go:67]  =========== 初始化产品类型 =========
+2023/02/22 12:47:07.766 [I] [WarningType.go:165]  =========== 初始化报警类型 =========
+2023/02/22 12:47:32.818 [I] [User.go:1067]  登录用户 菜单 pid 为:%!(EXTRA int=33)
+2023/02/22 12:50:11.570 [I] [Nats.go:22]  %!(EXTRA string=============Nats init============)
+2023/02/22 12:50:11.585 [I] [Nats.go:30]  nats OK!
+2023/02/22 12:50:11.657 [I] [filter.go:21]  %!(EXTRA string============ 初始化路由筛选信息 =========)
+2023/02/22 12:50:12.440 [I] [ProductType.go:67]  %!(EXTRA string============ 初始化产品类型 =========)
+2023/02/22 12:50:13.656 [I] [WarningType.go:165]  %!(EXTRA string============ 初始化报警类型 =========)
+2023/02/22 12:53:11.535 [I] [Nats.go:22]  2023-02-22 12:53:11>%!(EXTRA []interface {}=[============Nats init============])
+2023/02/22 12:53:11.556 [I] [Nats.go:30]  2023-02-22 12:53:11>%!(EXTRA []interface {}=[nats OK!])
+2023/02/22 12:53:11.715 [I] [filter.go:21]  2023-02-22 12:53:11>%!(EXTRA []interface {}=[=========== 初始化路由筛选信息 =========])
+2023/02/22 12:53:12.425 [I] [ProductType.go:67]  2023-02-22 12:53:12>%!(EXTRA []interface {}=[=========== 初始化产品类型 =========])
+2023/02/22 12:53:13.714 [I] [WarningType.go:165]  2023-02-22 12:53:13>%!(EXTRA []interface {}=[=========== 初始化报警类型 =========])

+ 6 - 57
main.go

@@ -4,7 +4,6 @@ import (
 	_ "Cold_Api/Nats"
 	"Cold_Api/conf"
 	"Cold_Api/controllers"
-	"Cold_Api/models/Device"
 	_ "Cold_Api/models/Product"
 	"Cold_Api/routers"
 	_ "Cold_Api/routers"
@@ -15,7 +14,6 @@ import (
 	_ "github.com/go-sql-driver/mysql"
 	"runtime"
 	"strconv"
-	"strings"
 )
 
 func init() {
@@ -29,7 +27,6 @@ func init() {
 		conf.MysqlServer_Username+":"+conf.MysqlServer_Password+"@tcp("+conf.MysqlServer_UrlPort+")/"+conf.MysqlServer_Database+"?charset=utf8mb4&loc=Local&parseTime=True",
 		conf.MysqlServer_MaxIdleConnections, conf.MysqlServer_MaxOpenConnections)
 	orm.RunSyncdb("default", false, false) // 创建数据库
-
 	println(conf.MysqlServer_Username + ":" + conf.MysqlServer_Password + "@tcp(" + conf.MysqlServer_UrlPort + ")/" + conf.MysqlServer_Database + "?charset=utf8mb4&loc=Local&parseTime=True")
 }
 func main() {
@@ -47,14 +44,15 @@ func main() {
 		ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Access-Control-Allow-Headers", "Content-Type"},
 		// 如果设置,则允许共享身份验证凭据,例如cookie
 		AllowCredentials: true,
-	})).InsertFilter("/*", beego.BeforeRouter, routers.RBACFilter)
-
+	}))
+	beego.ErrorController(&controllers.ErrorController{})
+	//过滤器,拦截所有请求
+	beego.InsertFilter("/*", beego.BeforeRouter, routers.RBACFilter)
 	beego.BConfig.AppName = conf.AppName                    // 项目名
 	beego.BConfig.ServerName = conf.AppName + conf.HTTPPort //server  名称
-	beego.BConfig.RunMode = "dev"                           //  应用的运行模式
+	beego.BConfig.RunMode = conf.RunMode                    //  应用的运行模式
 	beego.BConfig.Listen.HTTPPort = HTTPPort_int            //监听端口  本地:8518  线上:8528
-	beego.AddFuncMap("convertm", convertM)
-	beego.AddFuncMap("IsYD", IsYD)
+	beego.BConfig.WebConfig.AutoRender = false
 
 	go controllers.DeviceRealTime() // 实时 数据
 
@@ -62,52 +60,3 @@ func main() {
 	beego.Run()
 
 }
-
-// 转十进制
-func convertM(Devicesensor Device.DeviceSensor) (out string) {
-	//var TouTime float64
-	//TouTime = 2 * 60
-	//now := time.Now()
-	//DeviceData_, is := Device.Read_DeviceSensorData_ById_New(Devicesensor.T_sn, Devicesensor.T_id)
-	//if is {
-	//	// 谁 是最新的
-	//	fmt.Println(DeviceData_.T_time, DeviceData_.T_time.Format("2006-01-02 15:04:05"))
-	//	fmt.Println(Devicesensor.T_time, Devicesensor.T_time.Format("2006-01-02 15:04:05"))
-	//	if DeviceData_.T_time.Unix() > Devicesensor.T_time.Unix() {
-	//		subM := now.Sub(DeviceData_.T_time)
-	//		fmt.Println(subM.Minutes(), "分钟")
-	//		if subM.Minutes() > TouTime {
-	//			return "温湿度传感器-2.png"
-	//		} else {
-	//			return "温湿度传感器-1.png"
-	//		}
-	//	}
-	//}
-
-	//fmt.Println(Devicesensor.T_time, Devicesensor.T_time.Format("2006-01-02 15:04:05"))
-	//subM := now.Sub(Devicesensor.T_time)
-	//fmt.Println(int(subM.Minutes()), "分钟")
-	//if subM.Minutes() > TouTime {
-	//	// 传感器超时
-	//	return "温湿度传感器-2.png"
-	//}
-
-	//if (0 == Devicesensor.T_Tlower && 0 == Devicesensor.T_RHlower) && (0 == Devicesensor.T_Tupper && 0 == Devicesensor.T_RHupper) {
-	//	return "温湿度传感器-1.png"
-	//}
-	//if Devicesensor.T_t < Devicesensor.T_Tlower || Devicesensor.T_rh < Devicesensor.T_RHlower || Devicesensor.T_t > Devicesensor.T_Tupper || Devicesensor.T_rh > Devicesensor.T_RHupper {
-	//	// 传感器 超标
-	//	return "温湿度传感器-3.png"
-	//}
-	// 传感器正常
-	return "温湿度传感器-1.png"
-}
-
-// 转十进制
-func IsYD(sn string) (out int) {
-	if strings.Contains(sn, "YD") {
-		return 1
-	}
-	// 传感器正常
-	return 0
-}

+ 81 - 38
models/Account/Admin.go

@@ -2,6 +2,7 @@ package Account
 
 import (
 	"Cold_Api/conf"
+	"Cold_Api/logs"
 	"encoding/json"
 	"fmt"
 	"github.com/astaxie/beego/cache"
@@ -90,8 +91,7 @@ func init() {
 	var err error
 	redisCache_Admin, err = cache.NewCache("redis", config)
 	if err != nil || redisCache_Admin == nil {
-		errMsg := "failed to init redis"
-		fmt.Println(errMsg, err)
+		logs.Error("Redis Admin init err", err)
 	}
 
 }
@@ -102,13 +102,13 @@ func Redis_Admin_Set(r Admin) (err error) {
 	//json序列化
 	str, err := json.Marshal(r)
 	if err != nil {
-		fmt.Print(err)
+		logs.Error("json Marshal err", err)
 		return
 	}
 
 	err = redisCache_Admin.Put(r.T_uuid, str, 24*time.Hour)
 	if err != nil {
-		fmt.Println("set key:", r.T_uuid, ",value:", str, err)
+		logs.Error("Redis_Admin_Set", "set key:", r.T_uuid, ",value:", str, err)
 	}
 	return
 }
@@ -121,7 +121,11 @@ func Redis_Admin_Get(key string) (r Admin, is bool) {
 		//println("找到key:",key)
 		v := redisCache_Admin.Get(key)
 
-		json.Unmarshal(v.([]byte), &r)
+		err := json.Unmarshal(v.([]byte), &r)
+		if err != nil {
+			logs.Error("json Unmarshal err", err)
+			return Admin{}, false
+		}
 		return r, true
 	}
 	//println("没有 找到key:",key)
@@ -130,6 +134,9 @@ func Redis_Admin_Get(key string) (r Admin, is bool) {
 
 func Redis_Admin_DelK(key string) (err error) {
 	err = redisCache_Admin.Delete(key)
+	if err != nil {
+		logs.Error("Redis_Admin_DelK", err)
+	}
 	return
 }
 
@@ -140,7 +147,8 @@ func Add_Admin(m Admin) (id int64, err error) {
 	o := orm.NewOrm()
 	id, err = o.Insert(&m)
 	if err != nil {
-		fmt.Println(err)
+		logs.Error("Add_Admin", err)
+		return id, err
 	}
 	m.Id = int(id)
 	Redis_Admin_Set(m)
@@ -171,7 +179,7 @@ func Read_Admin_T_user(T_user string) (Admin, error) {
 	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)
+		logs.Error("Read_Admin_T_user", err)
 	}
 	return r, err
 }
@@ -182,7 +190,8 @@ func Read_AdminLogin_verification(T_user string, T_pass string) (error, Admin) {
 	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)
+		logs.Error("Read_AdminLogin_verification", err)
+		return err, r
 	}
 	Redis_Admin_Set(r) // Redis 更新缓存
 	return err, r
@@ -191,23 +200,27 @@ func Read_AdminLogin_verification(T_user string, T_pass string) (error, Admin) {
 // 修改
 func Update_Admin(m Admin, 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_Admin_Set(m) // Redis 更新缓存
-		return true
+	num, err := o.Update(&m, cols...)
+	if err != nil {
+		logs.Error("Update_Admin", err)
+		return false
 	}
-	return false
+	fmt.Println("Number of records updated in database:", num)
+	Redis_Admin_Set(m) // Redis 更新缓存
+	return true
+
 }
 
 // 删除
 func Delete_Admin(v Admin) bool {
 	o := orm.NewOrm()
 	v.T_State = 0
-	if num, err := o.Update(&v, "T_State"); err == nil {
-		fmt.Println("Number of records updated in database:", num)
-	} else {
+	num, err := o.Update(&v, "T_State")
+	if err != nil {
+		logs.Error("Delete_Admin", err)
 		return false
 	}
+	fmt.Println("Number of records updated in database:", num)
 	Redis_Admin_DelK(v.T_uuid) // Redis 更新缓存
 	return true
 }
@@ -218,7 +231,7 @@ func Read_Admin_ById(Id int) (r Admin, err error) {
 	r = Admin{Id: Id, T_State: 1}
 	err = o.Read(&r, "Id", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
-		fmt.Println(err)
+		logs.Error("Read_Admin_ById", err)
 	}
 	return r, err
 }
@@ -233,7 +246,7 @@ func Read_Admin_ByUuid(T_uuid string) (r Admin, err error) {
 	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)
+		logs.Error("Read_Admin_ByUuid", err)
 	}
 	return r, err
 }
@@ -260,8 +273,14 @@ func Read_Admin_List(T_pid int, T_name string, page int, page_z int) (AdminList
 		cond1 = cond1.AndCond(cond.Or("T_name__icontains", T_name).Or("T_user__icontains", T_name))
 	}
 
-	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("Id").All(&maps)
-	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("Id").All(&maps)
+	if err != nil {
+		logs.Error("Read_Admin_List", err)
+	}
+	cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	if err != nil {
+		logs.Error("Read_Admin_List Count", err)
+	}
 
 	for _, v := range maps {
 		AdminList = append(AdminList, AdminToAdmin_R(v))
@@ -281,7 +300,11 @@ func Read_Admin_List_T_pids(T_pid int) (AdminList []Admin_R) {
 
 	cond1 := cond.And("T_State", 1).And("T_pid", 0).And("T_pids__icontains", "P"+strconv.Itoa(T_pid)+"|")
 
-	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
+	_, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
+	if err != nil {
+		logs.Error("Read_Admin_List_T_pids", err)
+		return AdminList
+	}
 
 	for _, v := range maps {
 		AdminList = append(AdminList, AdminToAdmin_R(v))
@@ -301,7 +324,11 @@ func Read_Admin_List_T_pid(T_pid int) (AdminList []Admin_R) {
 
 	cond1 := cond.And("T_State", 1).And("T_pid", T_pid)
 
-	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
+	_, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
+	if err != nil {
+		logs.Error("Read_Admin_List_T_pids", err)
+		return AdminList
+	}
 
 	for _, v := range maps {
 		AdminList = append(AdminList, AdminToAdmin_R(v))
@@ -315,7 +342,11 @@ func Read_Admin_Num_ByT_power(T_power int) int {
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	qs := o.QueryTable(new(Admin))
-	cnt, _ := qs.Filter("T_State", 1).Filter("T_power", T_power).Count()
+	cnt, err := qs.Filter("T_State", 1).Filter("T_power", T_power).Count()
+	if err != nil {
+		logs.Error("Read_Admin_Num_ByT_power", err)
+		return 0
+	}
 	return int(cnt)
 }
 
@@ -325,7 +356,11 @@ func Read_Admin_Num_ByT_pid(T_pids []int) int {
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	qs := o.QueryTable(new(Admin))
-	cnt, _ := qs.Filter("T_State", 1).Filter("T_pid__in", T_pids).Count()
+	cnt, err := qs.Filter("T_State", 1).Filter("T_pid__in", T_pids).Count()
+	if err != nil {
+		logs.Error("Read_Admin_Num_ByT_pid", err)
+		return 0
+	}
 	return int(cnt)
 }
 
@@ -338,7 +373,12 @@ func Read_Admin_List_All() (AdminList []Admin_R) {
 	qs := o.QueryTable(new(Admin))
 	var maps []Admin
 
-	qs.All(&maps)
+	_, err := qs.All(&maps)
+	if err != nil {
+		logs.Error("Read_Admin_List_All", err)
+		return AdminList
+	}
+
 	for _, v := range maps {
 		AdminList = append(AdminList, AdminToAdmin_R(v))
 	}
@@ -354,13 +394,14 @@ func Add_Company_bind(Admin_r Admin, T_pids []int) (err error) {
 		Admin_r.T_pids = Admin_r.T_pids + T_Pid_bind
 	}
 
-	if num, err := o.Update(&Admin_r, "T_pids"); err == nil {
-		fmt.Println("Number of records updated in database:", num)
-		Redis_Admin_Set(Admin_r) // Redis 更新缓存
+	num, err := o.Update(&Admin_r, "T_pids")
+	if err != nil {
+		logs.Error("Add_Company_bind", err)
 		return err
 	}
-
-	return err
+	fmt.Println("Number of records updated in database:", num)
+	Redis_Admin_Set(Admin_r) // Redis 更新缓存
+	return nil
 }
 
 func Delete_Company_bind(Admin_r Admin, T_pids []int) (err error) {
@@ -371,13 +412,14 @@ func Delete_Company_bind(Admin_r Admin, T_pids []int) (err error) {
 		Admin_r.T_pids = strings.Replace(Admin_r.T_pids, T_Pid_bind, "", -1)
 	}
 
-	if num, err := o.Update(&Admin_r, "T_pids"); err == nil {
-		fmt.Println("Number of records updated in database:", num)
-		Redis_Admin_Set(Admin_r) // Redis 更新缓存
+	num, err := o.Update(&Admin_r, "T_pids")
+	if err != nil {
+		logs.Error("Delete_Company_bind", err)
 		return err
 	}
-
-	return err
+	fmt.Println("Number of records updated in database:", num)
+	Redis_Admin_Set(Admin_r) // Redis 更新缓存
+	return nil
 
 }
 
@@ -398,11 +440,12 @@ func Delete_Company_bind_T_pids(o orm.Ormer, T_pid int) (err error) {
 	for _, v := range maps {
 		if err = o.Read(&v, "Id"); err == nil {
 			v.T_pids = strings.Replace(v.T_pids, T_Pid_bind, "", -1)
-			if num, err := o.Update(&v, "T_pids"); err == nil {
-				fmt.Println("Number of records updated in database:", num)
-				Redis_Admin_Set(v) // Redis 更新缓存
+			_, err = o.Update(&v, "T_pids")
+			if err != nil {
+				logs.Error("Delete_Company_bind_T_pids", v.T_uuid, T_pid, err)
 				return err
 			}
+			Redis_Admin_DelK(v.T_uuid) // Redis 更新缓存
 		}
 	}
 

+ 90 - 49
models/Account/Company.go

@@ -2,6 +2,7 @@ package Account
 
 import (
 	"Cold_Api/conf"
+	"Cold_Api/logs"
 	"Cold_Api/models"
 	"encoding/json"
 	"fmt"
@@ -16,10 +17,15 @@ import (
 
 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_mid  int    `orm:"size(200);null"`       //  上一级 ID
+	T_name string `orm:"size(256);null"`       // 公司名称
+	T_key  string `orm:"size(256);index;null"` // 公司密钥
 
-	T_path string // 公司路径
+	T_plan string `orm:"type(text);null"` //  平面图
+	T_data string `orm:"type(text);null"` //  大数据
+	T_v3d  string `orm:"type(text);null"` //  3D 视图
+
+	T_path string `orm:"size(256);null"` // 公司路径 /0/1/5/
 
 	T_State    int       `orm:"size(200);default(1)"`                                  //  0删除  1 正常
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
@@ -30,8 +36,11 @@ type Company struct {
 
 type Company_R struct {
 	Id       int
-	T_mid    int    //  上一级 ID
+	T_mid    int    // 上一级 ID
 	T_name   string // 公司名称
+	T_plan   string // 平面图
+	T_data   string // 大数据
+	T_v3d    string // 3D 视图
 	Children []Company_R
 }
 
@@ -58,8 +67,7 @@ func init() {
 	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)
+		logs.Error("Redis Company init err", err)
 	}
 
 }
@@ -69,13 +77,13 @@ func Redis_Company_Set(r Company) (err error) {
 	//json序列化
 	str, err := json.Marshal(r)
 	if err != nil {
-		fmt.Print(err)
+		logs.Error("json Marshal err", 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)
+		logs.Error("set key:", strconv.Itoa(r.Id), ",value:", str, err)
 	}
 	return
 }
@@ -85,7 +93,11 @@ func Redis_Company_Get(key string) (r Company, is bool) {
 		//println("找到key:",key)
 		v := redisCache_Company.Get(key)
 
-		json.Unmarshal(v.([]byte), &r)
+		err := json.Unmarshal(v.([]byte), &r)
+		if err != nil {
+			logs.Error("json Unmarshal err", err)
+			return Company{}, false
+		}
 		return r, true
 	}
 	//println("没有 找到key:",key)
@@ -94,6 +106,9 @@ func Redis_Company_Get(key string) (r Company, is bool) {
 
 func Redis_Company_DelK(key string) (err error) {
 	err = redisCache_Company.Delete(key)
+	if err != nil {
+		logs.Error("Redis_Company_DelK", err)
+	}
 	return
 }
 
@@ -103,9 +118,21 @@ func Redis_Company_DelK(key string) (err error) {
 func Add_Company(var_ Company) (id int64, err error) {
 	o := orm.NewOrm()
 	o.Begin()
+
+	var rand_x int64
+	for true {
+		var_.T_key = models.GetRandstring(16, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", rand_x)
+		err = o.Read(&var_, "T_key") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+		if err != nil {
+			break
+		}
+		rand_x++
+	}
+
 	id, err = o.Insert(&var_)
 	if err != nil {
 		o.Rollback()
+		logs.Error("Add_Company", err)
 		return id, err
 	}
 
@@ -114,6 +141,7 @@ func Add_Company(var_ Company) (id int64, err error) {
 		Company_r, err := Read_Company_ById(var_.T_mid)
 		if err != nil {
 			o.Rollback()
+			logs.Error("Read_Company_ById", err)
 			return id, err
 		}
 		T_Path = Company_r.T_path + strconv.Itoa(int(id)) + "/"
@@ -124,6 +152,7 @@ func Add_Company(var_ Company) (id int64, err error) {
 	_, err = o.Update(&var_, "T_path")
 	if err != nil {
 		o.Rollback()
+		logs.Error("Update Company", err)
 		return id, err
 	}
 	o.Commit()
@@ -136,12 +165,14 @@ func Add_Company(var_ Company) (id int64, err error) {
 // 修改
 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
+	num, err := o.Update(&m, cols...)
+	if err != nil {
+		logs.Error("Update_Company", err)
+		return false
 	}
-	return false
+	fmt.Println("Number of records updated in database:", num)
+	Redis_Company_Set(m) // Redis 更新缓存
+	return true
 }
 
 // 删除
@@ -150,11 +181,12 @@ func Delete_Company(orm orm.Ormer, id int) bool {
 		Id:      id,
 		T_State: 0,
 	}
-	if num, err := orm.Update(&m, "T_State"); err == nil {
-		fmt.Println("Number of records updated in database:", num)
-	} else {
+	num, err := orm.Update(&m, "T_State")
+	if err != nil {
+		logs.Error("Delete_Company", err)
 		return false
 	}
+	fmt.Println("Number of records updated in database:", num)
 	Redis_Company_DelK(strconv.Itoa(m.Id))
 	return true
 }
@@ -169,15 +201,18 @@ func Read_Company_ById(Id int) (r Company, e error) {
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(Company))
 	e = qs.Filter("Id", Id).Filter("T_State", 1).One(&r)
+	if e != nil {
+		logs.Error("Read_Company_ById", e)
+	}
 	return r, e
 }
 
 // 获取列表
-func Read_Company_Tree(admin_r Admin, T_name string) (CompanyList []Company_R, cnt int64) {
+func Read_Company_Tree(admin_r Admin, T_name string) (CompanyList []Company_R) {
 
 	// 内部用户未绑定公司
 	if admin_r.T_pid > 0 || len(admin_r.T_pids) == 0 {
-		return CompanyList, cnt
+		return CompanyList
 	}
 
 	o := orm.NewOrm()
@@ -203,8 +238,11 @@ func Read_Company_Tree(admin_r Admin, T_name string) (CompanyList []Company_R, c
 		cond1 = cond1.And("T_name__icontains", T_name)
 	}
 
-	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
-	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	_, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
+	if err != nil {
+		logs.Error("Read_Company_Tree", err)
+		return CompanyList
+	}
 
 	parentMap, flag := getCompanyParent(maps)
 	if flag {
@@ -234,7 +272,7 @@ func Read_Company_Tree(admin_r Admin, T_name string) (CompanyList []Company_R, c
 		}
 	}
 
-	return CompanyList, cnt
+	return CompanyList
 }
 
 func ReadCompanyIds_T_pids(T_pids []int) []int {
@@ -243,7 +281,11 @@ func ReadCompanyIds_T_pids(T_pids []int) []int {
 	var companyIds []int
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(Company))
-	qs.Filter("Id__in", T_pids).Filter("T_State", 1).All(&companyList)
+	_, err := qs.Filter("Id__in", T_pids).Filter("T_State", 1).All(&companyList)
+	if err != nil {
+		logs.Error("ReadCompanyIds_T_pids", err)
+		return companyIds
+	}
 	for _, company := range companyList {
 		subIds := ReadCompanyIds_T_path(company.T_path)
 		companyIds = append(companyIds, subIds...)
@@ -257,14 +299,18 @@ func ReadCompanyIds_T_path(T_path string) (companyIds []int) {
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(Company))
 	var CompanyList []Company
-	qs.Filter("T_path__startswith", T_path).Filter("T_State", 1).All(&CompanyList)
+	_, err := qs.Filter("T_path__startswith", T_path).Filter("T_State", 1).All(&CompanyList)
+	if err != nil {
+		logs.Error("ReadCompanyIds_T_path", err)
+		return companyIds
+	}
 	for _, v := range CompanyList {
 		companyIds = append(companyIds, v.Id)
 	}
 	return companyIds
 }
 
-func Read_Company_List(T_name string) (CompanyList []Company_R, cnt int64) {
+func Read_Company_List(T_name string) (CompanyList []Company_R) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -279,8 +325,11 @@ func Read_Company_List(T_name string) (CompanyList []Company_R, cnt int64) {
 		cond1 = cond1.And("T_name__icontains", T_name)
 	}
 
-	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
-	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	_, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
+	if err != nil {
+		logs.Error("Read_Company_List", err)
+		return CompanyList
+	}
 
 	parentMap, flag := getCompanyParent(maps)
 	if flag {
@@ -310,24 +359,7 @@ func Read_Company_List(T_name string) (CompanyList []Company_R, cnt int64) {
 		}
 	}
 
-	return CompanyList, cnt
-}
-
-func CompanyTree(list []Company, parentId int) []Company_R {
-	res := make([]Company_R, 0)
-	for _, v := range list {
-		if v.T_mid == parentId {
-			r := Company_R{
-				Id:       v.Id,
-				T_mid:    v.T_mid,
-				T_name:   v.T_name,
-				Children: nil,
-			}
-			r.Children = CompanyTree(list, v.Id)
-			res = append(res, r)
-		}
-	}
-	return res
+	return CompanyList
 }
 
 func CompanyCall(CompanyList []Company, company Company_R) Company_R {
@@ -372,15 +404,20 @@ func Read_Company_List_All_ByT_name(T_name string) (maps []Company) {
 	// 也可以直接使用 Model 结构体作为表名
 
 	qs := o.QueryTable(new(Company))
+	cond := orm.NewCondition()
+
 	if len(T_name) > 0 {
-		qs.Filter("T_name__icontains", T_name).All(&maps)
+		cond = cond.And("T_name__icontains", T_name)
+	}
+	_, err := qs.SetCond((*orm2.Condition)(cond)).All(&maps)
+	if err != nil {
+		logs.Error("Read_Company_List_All_ByT_name", err)
 		return maps
 	}
-	qs.All(&maps)
 	return maps
 }
 
-// 获取铜壶绑定的公司列表
+// 获取内部用户绑定的公司列表
 func Read_Company_List_ByT_pids(T_pids string) (CompanyList []Company_R) {
 
 	o := orm.NewOrm()
@@ -395,7 +432,11 @@ func Read_Company_List_ByT_pids(T_pids string) (CompanyList []Company_R) {
 		cond1 = cond1.And("Id__in", list)
 	}
 
-	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("Id").All(&maps)
+	_, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("Id").All(&maps)
+	if err != nil {
+		logs.Error("Read_Company_List_ByT_pids", err)
+		return CompanyList
+	}
 
 	parentMap, flag := getCompanyParent(maps)
 	if flag {

+ 55 - 17
models/Account/Menu.go

@@ -2,6 +2,7 @@ package Account
 
 import (
 	"Cold_Api/conf"
+	"Cold_Api/logs"
 	"Cold_Api/models"
 	"encoding/json"
 	"fmt"
@@ -56,8 +57,7 @@ func init() {
 	fmt.Println(menuConfig)
 	redisCache_Menu, err = cache.NewCache("redis", menuConfig)
 	if err != nil || redisCache_Menu == nil {
-		errMsg := "failed to init redis"
-		fmt.Println(errMsg, err)
+		logs.Error("Redis Menu init err", err)
 	}
 
 	apiConfig := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
@@ -65,8 +65,7 @@ func init() {
 	fmt.Println(apiConfig)
 	redisCache_API, err = cache.NewCache("redis", apiConfig)
 	if err != nil || redisCache_API == nil {
-		errMsg := "failed to init redis"
-		fmt.Println(errMsg, err)
+		logs.Error("Redis API init err", err)
 	}
 }
 
@@ -75,13 +74,13 @@ func Redis_API_Set(Power_Id int, r []API) (err error) {
 	//json序列化
 	str, err := json.Marshal(r)
 	if err != nil {
-		fmt.Print(err)
+		logs.Error("json Marshal err", err)
 		return
 	}
 
 	err = redisCache_API.Put(strconv.Itoa(Power_Id), str, 24*time.Hour)
 	if err != nil {
-		fmt.Println("set key:", strconv.Itoa(Power_Id), ",value:", str, err)
+		logs.Error("Redis_API_Set", "set key:", strconv.Itoa(Power_Id), ",value:", str, err)
 	}
 	return
 }
@@ -91,7 +90,11 @@ func Redis_API_Get(key string) (r []API, is bool) {
 		//println("找到key:",key)
 		v := redisCache_API.Get(key)
 
-		json.Unmarshal(v.([]byte), &r)
+		err := json.Unmarshal(v.([]byte), &r)
+		if err != nil {
+			logs.Error("json Unmarshal err", err)
+			return []API{}, false
+		}
 		return r, true
 	}
 	//println("没有 找到key:",key)
@@ -100,6 +103,9 @@ func Redis_API_Get(key string) (r []API, is bool) {
 
 func Redis_API_DelK(key string) (err error) {
 	err = redisCache_API.Delete(key)
+	if err != nil {
+		logs.Error("Redis_API_DelK", err)
+	}
 	return
 }
 
@@ -117,7 +123,7 @@ func Redis_Munu_Set(Power_Id, T_pid int, r []Menu) (err error) {
 
 	err = redisCache_Menu.Put(keys, str, 30*24*time.Hour)
 	if err != nil {
-		fmt.Println("set key:", strconv.Itoa(Power_Id)+"|"+strconv.Itoa(T_pid), ",value:", str, err)
+		logs.Error("set key:", strconv.Itoa(Power_Id)+"|"+strconv.Itoa(T_pid), ",value:", str, err)
 	}
 	return
 }
@@ -131,7 +137,11 @@ func Redis_Menu_Get(Power_Id, T_pid int) (r []Menu, is bool) {
 		//println("找到key:",key)
 		v := redisCache_Menu.Get(key)
 
-		json.Unmarshal(v.([]byte), &r)
+		err := json.Unmarshal(v.([]byte), &r)
+		if err != nil {
+			logs.Error("json Unmarshal err", err)
+			return []Menu{}, false
+		}
 		return r, true
 	}
 	//println("没有 找到key:",key)
@@ -140,7 +150,14 @@ func Redis_Menu_Get(Power_Id, T_pid int) (r []Menu, is bool) {
 
 func Redis_Menu_DelK(Power_Id int) (err error) {
 	err = redisCache_Menu.Delete(strconv.Itoa(Power_Id))
+	if err != nil {
+		logs.Error("Redis_Menu_DelK", err)
+		return
+	}
 	err = redisCache_Menu.Delete(strconv.Itoa(Power_Id) + "-Pid")
+	if err != nil {
+		logs.Error("Redis_Menu_DelK Pid", err)
+	}
 	return
 }
 
@@ -202,7 +219,11 @@ func Read_Menu_Bind_List(Power_Id int, Bind_Menu string, T_pid int) (maps []Menu
 		cond = cond.And("T_pid", 0)
 	}
 	if Bind_Menu == "*" {
-		qs.SetCond((*orm2.Condition)(cond)).OrderBy("T_sort").All(&maps)
+		_, err := qs.SetCond((*orm2.Condition)(cond)).OrderBy("T_sort", "Id").All(&maps)
+		if err != nil {
+			logs.Error("Read_Menu_Bind_List", err)
+			return
+		}
 		m := Menu_Call(maps, 0)
 		Redis_Munu_Set(Power_Id, T_pid, m)
 		return m
@@ -216,7 +237,11 @@ func Read_Menu_Bind_List(Power_Id int, Bind_Menu string, T_pid int) (maps []Menu
 
 	cond = cond.And("Id__in", models.IntIdsDistinct(AllIds)).Or("T_State", 2)
 
-	qs.SetCond((*orm2.Condition)(cond)).OrderBy("T_sort", "Id").All(&maps)
+	_, err := qs.SetCond((*orm2.Condition)(cond)).OrderBy("T_sort", "Id").All(&maps)
+	if err != nil {
+		logs.Error("Read_Menu_Bind_List", err)
+		return
+	}
 
 	m := Menu_Call(maps, 0)
 
@@ -238,7 +263,11 @@ func recursiveMenu(T_pid int, MenuIds []int, AllIds *[]int) error {
 	}
 	cond = cond.And("Id__in", MenuIds)
 
-	qs.SetCond((*orm2.Condition)(cond)).OrderBy("T_sort", "Id").All(&subMenus)
+	_, err := qs.SetCond((*orm2.Condition)(cond)).OrderBy("T_sort", "Id").All(&subMenus)
+	if err != nil {
+		logs.Error("recursiveMenu", err)
+		return err
+	}
 
 	subIds := make([]int, 0)
 	for _, menu := range subMenus {
@@ -256,7 +285,11 @@ func Read_Menu_List_All() (maps []Menu, menu_ids []int) {
 	// 也可以直接使用 Model 结构体作为表名
 
 	qs := o.QueryTable(new(Menu))
-	qs.Filter("T_State", 1).OrderBy("Id", "-T_sort").All(&maps)
+	_, err := qs.Filter("T_State", 1).OrderBy("Id", "-T_sort").All(&maps)
+	if err != nil {
+		logs.Error("Read_Menu_List_All", err)
+		return
+	}
 	for _, v := range maps {
 		menu_ids = append(menu_ids, v.Id)
 	}
@@ -353,10 +386,12 @@ func Read_API_List_ByPower_Id(Power_Id int, Menu_Bind string) (maps []API) {
 	qs := o.QueryTable(new(API))
 
 	list := models.SplitStringIds(Menu_Bind, "M")
-	qs.Filter("T_Menu_Id__in", list).All(&maps)
-
+	_, err := qs.Filter("T_Menu_Id__in", list).All(&maps)
+	if err != nil {
+		logs.Error("Read_API_List_ByPower_Id", err)
+		return
+	}
 	Redis_API_Set(Power_Id, maps)
-
 	return maps
 }
 
@@ -367,7 +402,10 @@ func Read_API_List_By_Menu_Bind(Menu_Bind string) (maps []API) {
 	qs := o.QueryTable(new(API))
 
 	list := models.SplitStringIds(Menu_Bind, "M")
-	qs.Filter("T_Menu_Id__in", list).All(&maps)
+	_, err := qs.Filter("T_Menu_Id__in", list).All(&maps)
+	if err != nil {
+		logs.Error("Read_API_List_By_Menu_Bind", err)
+	}
 
 	return maps
 }

+ 60 - 68
models/Account/Power.go

@@ -2,13 +2,13 @@ package Account
 
 import (
 	"Cold_Api/conf"
+	"Cold_Api/logs"
 	"Cold_Api/models"
 	"encoding/json"
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
 	"github.com/beego/beego/v2/adapter/orm"
-	"math/rand"
 	"strconv"
 	"strings"
 	"time"
@@ -73,8 +73,7 @@ func init() {
 	var err error
 	redisCache_Power, err = cache.NewCache("redis", config)
 	if err != nil || redisCache_Power == nil {
-		errMsg := "failed to init redis"
-		fmt.Println(errMsg, err)
+		logs.Error("Redis Power init err", err)
 	}
 
 }
@@ -85,13 +84,13 @@ func Redis_Power_Set(r Power) (err error) {
 	//json序列化
 	str, err := json.Marshal(r)
 	if err != nil {
-		fmt.Print(err)
+		logs.Error("json Marshal err", err)
 		return
 	}
 
 	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)
+		logs.Error("set key:", strconv.Itoa(r.Id), ",value:", str, err)
 	}
 	return
 }
@@ -104,7 +103,11 @@ func Redis_Power_Get(key string) (r Power, is bool) {
 		//println("找到key:",key)
 		v := redisCache_Power.Get(key)
 
-		json.Unmarshal(v.([]byte), &r)
+		err := json.Unmarshal(v.([]byte), &r)
+		if err != nil {
+			logs.Error("json Unmarshal err", err)
+			return Power{}, false
+		}
 		return r, true
 	}
 	//println("没有 找到key:",key)
@@ -113,28 +116,14 @@ func Redis_Power_Get(key string) (r Power, is bool) {
 
 func Redis_Power_DelK(key string) (err error) {
 	err = redisCache_Power.Delete(key)
+	if err != nil {
+		logs.Error("Redis_Power_DelK", err)
+	}
 	return
 }
 
 // ---------------- 特殊方法 -------------------
 
-// 修改
-func Update_Power_ById_Basics(m Power) (err error) {
-	o := orm.NewOrm()
-	v := Power{Id: m.Id}
-	// ascertain id exists in the database
-	if err = o.Read(&v); err == nil {
-		var num int64
-		m.Id = v.Id
-		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_Power_Set(m)
-	}
-
-	return err
-}
-
 // 添加
 func Add_Power(m Power) (id int64, err error) {
 	o := orm.NewOrm()
@@ -142,8 +131,8 @@ func Add_Power(m Power) (id int64, err error) {
 	// 生成编号
 	rand_x := 0
 	for true {
-		m.T_code = GetRandString(6, "", int64(rand_x)) // 1,336,336
-		err := o.Read(&m, "T_code")                    // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+		m.T_code = models.GetRandstring(6, "", int64(rand_x)) // 1,336,336
+		err := o.Read(&m, "T_code")                           // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 		if err != nil {
 			break
 		}
@@ -152,11 +141,12 @@ func Add_Power(m Power) (id int64, err error) {
 
 	id, err = o.Insert(&m)
 	if err != nil {
-		fmt.Println(err)
+		logs.Error("Add_Power", err)
+		return id, err
 	}
-
 	Redis_API_Set(int(id), Read_API_List_By_Menu_Bind(m.T_menu))
 	Redis_Power_Set(m)
+
 	return id, err
 }
 
@@ -171,10 +161,10 @@ func Read_Power_ById(Id int) (r Power, err error) {
 	r = Power{Id: Id, T_State: 1}
 	err = o.Read(&r, "Id", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
-		fmt.Println(err)
-	} else {
-		Redis_Power_Set(r)
+		logs.Error("Read_Power_ById", err)
+		return
 	}
+	Redis_Power_Set(r)
 
 	return r, err
 }
@@ -194,8 +184,16 @@ func Read_Power_List(T_name string, page int, page_z int) (r []Power_, cnt int64
 		offset = int64((page - 1) * page_z)
 	}
 
-	qs.Limit(page_z, offset).Filter("T_name__icontains", T_name).Filter("T_State", 1).OrderBy("Id").All(&maps)
-	cnt, _ = qs.Filter("T_name__icontains", T_name).Filter("T_State", 1).Count()
+	_, err := qs.Limit(page_z, offset).Filter("T_name__icontains", T_name).Filter("T_State", 1).OrderBy("Id").All(&maps)
+	if err != nil {
+		logs.Error("Read_Power_List", err)
+		return
+	}
+	cnt, err = qs.Filter("T_name__icontains", T_name).Filter("T_State", 1).Count()
+	if err != nil {
+		logs.Error("Read_Power_List Count", err)
+		return
+	}
 	for _, v := range maps {
 		r = append(r, PowerToPower_(v))
 	}
@@ -208,13 +206,18 @@ func Read_Power_List_ALL_User(T_select string) (r []Power_) {
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	var maps []Power
+	var err error
 	qs := o.QueryTable(new(Power))
 
 	if T_select == "*" {
-		qs.Filter("Id__gt", 1).Filter("T_State", 1).OrderBy("Id").All(&maps)
+		_, err = qs.Filter("Id__gt", 1).Filter("T_State", 1).OrderBy("Id").All(&maps)
 	} else {
 		list := models.SplitStringIds(T_select, "S")
-		qs.Filter("Id__in", list).Filter("T_State", 1).OrderBy("Id").All(&maps)
+		_, err = qs.Filter("Id__in", list).Filter("T_State", 1).OrderBy("Id").All(&maps)
+	}
+	if err != nil {
+		logs.Error("Read_Power_List_ALL_User", err)
+		return
 	}
 	for _, v := range maps {
 		r = append(r, PowerToPower_(v))
@@ -229,7 +232,11 @@ func Read_Power_List_ALL_T_select(T_select string) (r []Power_R) {
 	// 也可以直接使用 Model 结构体作为表名
 	var maps []Power
 	qs := o.QueryTable(new(Power))
-	qs.Filter("Id__gt", 1).Filter("T_State", 1).OrderBy("Id").All(&maps)
+	_, err := qs.Filter("Id__gt", 1).Filter("T_State", 1).OrderBy("Id").All(&maps)
+	if err != nil {
+		logs.Error("Read_Power_List_ALL_T_select", err)
+		return
+	}
 	for _, v := range maps {
 		r = append(r, PowerToPower_R(v, T_select))
 	}
@@ -239,59 +246,44 @@ func Read_Power_List_ALL_T_select(T_select string) (r []Power_R) {
 // 修改
 func Update_Power(v Power, cols ...string) bool {
 	o := orm.NewOrm()
-	if num, err := o.Update(&v, cols...); err == nil {
-		fmt.Println("Number of records updated in database:", num)
-		Redis_API_Set(v.Id, Read_API_List_By_Menu_Bind(v.T_menu))
-		Redis_Power_Set(v)    // Redis 更新缓存
-		Redis_Menu_DelK(v.Id) // 删除菜单缓存
-		return true
+	num, err := o.Update(&v, cols...)
+	if err != nil {
+		logs.Error("Update_Power", err)
+		return false
 	}
-	return false
+	fmt.Println("Number of records updated in database:", num)
+	Redis_API_Set(v.Id, Read_API_List_By_Menu_Bind(v.T_menu))
+	Redis_Power_Set(v)    // Redis 更新缓存
+	Redis_Menu_DelK(v.Id) // 删除菜单缓存
+	return true
 }
 
 // 删除
 func Delete_Power(v Power) bool {
 	o := orm.NewOrm()
 	v.T_State = 0
-	if num, err := o.Update(&v, "T_State"); err == nil {
-		fmt.Println("Number of records updated in database:", num)
-	} else {
+	num, err := o.Update(&v, "T_State")
+	if err != nil {
+		logs.Error("Delete_Power", err)
 		return false
 	}
+	fmt.Println("Number of records updated in database:", num)
 	Redis_Menu_DelK(v.Id)                // 删除菜单缓存
 	Redis_API_DelK(strconv.Itoa(v.Id))   // Redis 删除API缓存
 	Redis_Power_DelK(strconv.Itoa(v.Id)) // Redis 删除缓存
 	return true
 }
 
-// #取得随机字符串:通过打乱slice来操作
-func GetRandString(length int, char string, rand_x int64) string {
-	if length < 1 {
-		return ""
-	}
-
-	if len(char) <= 6 || len(char) <= length {
-		char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
-	}
-
-	charArr := strings.Split(char, "")
-	ran := rand.New(rand.NewSource(time.Now().Unix() + rand_x))
-
-	l := len(charArr)
-	for i := l - 1; i > 0; i-- {
-		r := ran.Intn(i)
-		charArr[r], charArr[i] = charArr[i], charArr[r]
-	}
-	rchar := charArr[:length]
-	return strings.Join(rchar, "")
-}
-
 // 获取全部
 func Read_Power_All_Map() {
 	o := orm.NewOrm()
 	var r []Power
 	qs := o.QueryTable(new(Power))
-	qs.All(&r)
+	_, err := qs.All(&r)
+	if err != nil {
+		logs.Error("Read_Power_All_Map", err)
+		return
+	}
 
 	for _, v := range r {
 		Power_list[v.Id] = v.T_name

+ 14 - 6
models/Account/Tokey.go

@@ -2,6 +2,7 @@ package Account
 
 import (
 	"Cold_Api/conf"
+	"Cold_Api/logs"
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
@@ -23,8 +24,7 @@ func init() {
 	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)
+		logs.Error("Redis Tokey init err", err)
 	}
 }
 
@@ -39,8 +39,10 @@ func Add_Tokey_Set(Uuid string) string {
 		}
 		fmt.Print("申请 TOKEY 重复!重新生成。", Tokey)
 	}
-	redisCache_Tokey.Put(Tokey, Uuid+"|0", 2*time.Hour)
-
+	err := redisCache_Tokey.Put(Tokey, Uuid+"|0", 2*time.Hour)
+	if err != nil {
+		logs.Error("Add_Tokey_Set", err)
+	}
 	return Tokey
 }
 
@@ -56,7 +58,10 @@ func Redis_Tokey_Get(Tokey string) (string, bool) {
 		v := redisCache_Tokey.Get(Tokey)
 		value := string(v.([]byte)) //这里的转换很重要,Get返回的是interface
 
-		redisCache_Tokey.Put(Tokey, value, 2*time.Hour) //  重新计次
+		err := redisCache_Tokey.Put(Tokey, value, 2*time.Hour) //  重新计次
+		if err != nil {
+			logs.Error("Redis_Tokey_Get", err)
+		}
 		return value, true
 	}
 	//println("没有 找到key:",key)
@@ -72,7 +77,10 @@ func Redis_Tokey_T_pid_Set(Tokey string, T_pid int) bool {
 		v := redisCache_Tokey.Get(Tokey)
 		value := string(v.([]byte)) //这里的转换很重要,Get返回的是interface
 		T_uuid := strings.Split(value, "|")[0]
-		redisCache_Tokey.Put(Tokey, T_uuid+"|"+strconv.Itoa(T_pid), 2*time.Hour) //  重新计次
+		err := redisCache_Tokey.Put(Tokey, T_uuid+"|"+strconv.Itoa(T_pid), 2*time.Hour) //  重新计次
+		if err != nil {
+			logs.Error("Redis_Tokey_T_pid_Set", err)
+		}
 		return true
 	}
 	return false

+ 47 - 23
models/Company/CompanyClass.go

@@ -2,6 +2,7 @@ package Company
 
 import (
 	"Cold_Api/conf"
+	"Cold_Api/logs"
 	"encoding/json"
 	"fmt"
 	"github.com/astaxie/beego/cache"
@@ -45,8 +46,8 @@ func init() {
 	var err error
 	redisCache_CompanyClass, err = cache.NewCache("redis", config)
 	if err != nil || redisCache_CompanyClass == nil {
-		errMsg := "failed to init redis"
-		fmt.Println(errMsg, err)
+		errMsg := "failed to init redis_CompanyClass"
+		logs.Error(errMsg, err)
 		panic(errMsg)
 	}
 }
@@ -58,14 +59,13 @@ func Redis_CompanyClass_Set(r CompanyClass) (err error) {
 	//json序列化
 	str, err := json.Marshal(r)
 	if err != nil {
-		fmt.Print(err)
+		logs.Error("json Marshal err", err)
 		return
 	}
 
 	err = redisCache_CompanyClass.Put(key, str, 2*time.Hour)
 	if err != nil {
-		fmt.Println("set key:", key, ",value:", str, err)
-		fmt.Println("set key:", key, ",value:", str, err)
+		logs.Error("set key:", key, ",value:", str, err)
 	}
 	return
 }
@@ -79,8 +79,11 @@ func Redis_CompanyClass_Get(key string) (CompanyClass, bool) {
 		//println("找到key:",key)
 		v := redisCache_CompanyClass.Get(key)
 		var r CompanyClass
-		json.Unmarshal(v.([]byte), &r)
-
+		err := json.Unmarshal(v.([]byte), &r)
+		if err != nil {
+			logs.Error("json Unmarshal err", err)
+			return CompanyClass{}, false
+		}
 		return r, true
 	}
 
@@ -88,6 +91,10 @@ func Redis_CompanyClass_Get(key string) (CompanyClass, bool) {
 }
 func Redis_CompanyClass_DelK(key string) (err error) {
 	err = redisCache_CompanyClass.Delete(key)
+	if err != nil {
+		logs.Error("Redis_CompanyClass_DelK", err)
+		return
+	}
 	return
 }
 
@@ -109,7 +116,7 @@ func Read_CompanyClass_ById(id int) (r CompanyClass, err error) {
 	r = CompanyClass{Id: id, T_State: 1}
 	err = o.Read(&r, "Id", "T_State")
 	if err != nil {
-		fmt.Println(err)
+		logs.Error("Read_CompanyClass_ById", err)
 		return r, err
 	}
 	Redis_CompanyClass_Set(r)
@@ -121,7 +128,8 @@ func Add_CompanyClass(m CompanyClass) (id int64, err error) {
 	o := orm.NewOrm()
 	id, err = o.Insert(&m)
 	if err != nil {
-		fmt.Println(err)
+		logs.Error("Add_CompanyClass", err)
+		return
 	}
 	Redis_CompanyClass_Set(m)
 	return
@@ -130,28 +138,32 @@ func Add_CompanyClass(m CompanyClass) (id int64, err error) {
 // 修改
 func Update_CompanyClass(r CompanyClass, 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_CompanyClass_Set(r)
-		return true
+	num, err := o.Update(&r, cols...)
+	if err != nil {
+		logs.Error("Update_CompanyClass", err)
+		return false
 	}
-	return false
+	fmt.Println("Number of records updated in database:", num)
+	Redis_CompanyClass_Set(r)
+	return true
 }
 
 // 删除
 func Delete_CompanyClass_ById(id int) bool {
 	o := orm.NewOrm()
 	v := CompanyClass{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)
-			key := strconv.Itoa(v.Id)
-			Redis_CompanyClass_DelK(key)
-			return true
+		num, err = o.Update(&v, "T_State")
+		if err != nil {
+			logs.Error("Delete_CompanyClass_ById", err)
+			return false
 		}
+		fmt.Println("Number of records updated in database:", num)
+		key := strconv.Itoa(v.Id)
+		Redis_CompanyClass_DelK(key)
+		return true
 	}
 	return false
 }
@@ -181,8 +193,16 @@ func Read_CompanyClass_List(T_pid int, T_name string, page int, page_z int) (r [
 		cond1 = cond1.And("T_name__icontains", T_name)
 	}
 
-	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
-	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
+	if err != nil {
+		logs.Error("Read_CompanyClass_List", err)
+		return
+	}
+	cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	if err != nil {
+		logs.Error("Read_CompanyClass_List Count", err)
+		return
+	}
 
 	for _, v := range map_r {
 		r = append(r, CompanyClassToCompanyClass_R(v))
@@ -208,7 +228,11 @@ func Read_CompanyClass_All(T_pid int, T_name string) (r []CompanyClass_R) {
 		cond1 = cond1.And("T_name__icontains", T_name)
 	}
 
-	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
+	_, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
+	if err != nil {
+		logs.Error("Read_CompanyClass_All", err)
+		return
+	}
 
 	for _, v := range map_r {
 		r = append(r, CompanyClassToCompanyClass_R(v))

+ 98 - 56
models/Company/CompanyNotice.go

@@ -2,6 +2,7 @@ package Company
 
 import (
 	"Cold_Api/conf"
+	"Cold_Api/logs"
 	"encoding/json"
 	"fmt"
 	"github.com/astaxie/beego/cache"
@@ -61,8 +62,8 @@ func init() {
 	var err error
 	redisCache_CompanyNotice, err = cache.NewCache("redis", config)
 	if err != nil || redisCache_CompanyNotice == nil {
-		errMsg := "failed to init redis"
-		fmt.Println(errMsg, err)
+		errMsg := "failed to init redis_CompanyNotice"
+		logs.Error(errMsg, err)
 		panic(errMsg)
 	}
 
@@ -75,13 +76,13 @@ func Redis_CompanyNotice_Set(r CompanyNotice) (err error) {
 	//json序列化
 	str, err := json.Marshal(r)
 	if err != nil {
-		fmt.Print(err)
+		logs.Error("json Marshal err", err)
 		return
 	}
 
 	err = redisCache_CompanyNotice.Put(key, str, 2*time.Hour)
 	if err != nil {
-		fmt.Println("set key:", key, ",value:", str, err)
+		logs.Error("set key:", key, ",value:", str, err)
 	}
 	return
 }
@@ -95,7 +96,11 @@ func Redis_CompanyNotice_Get(key string) (CompanyNotice, bool) {
 		//println("找到key:",key)
 		v := redisCache_CompanyNotice.Get(key)
 		var r CompanyNotice
-		json.Unmarshal(v.([]byte), &r)
+		err := json.Unmarshal(v.([]byte), &r)
+		if err != nil {
+			logs.Error("Redis_CompanyNotice_Get", err)
+			return r, false
+		}
 
 		return r, true
 	}
@@ -104,6 +109,9 @@ func Redis_CompanyNotice_Get(key string) (CompanyNotice, bool) {
 }
 func Redis_CompanyNotice_DelK(key string) (err error) {
 	err = redisCache_CompanyNotice.Delete(key)
+	if err != nil {
+		logs.Error("Redis_CompanyNotice_DelK", err)
+	}
 	return
 }
 
@@ -133,7 +141,7 @@ func Read_CompanyNotice_ById(id int) (r CompanyNotice, err error) {
 	r = CompanyNotice{Id: id}
 	err = o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
-		fmt.Println(err)
+		logs.Error("Read_CompanyNotice_ById", err)
 		return r, err
 	}
 
@@ -146,7 +154,8 @@ func Add_CompanyNotice(m CompanyNotice) (id int64, err error) {
 	o := orm.NewOrm()
 	id, err = o.Insert(&m)
 	if err != nil {
-		fmt.Println(err)
+		logs.Error("Add_CompanyNotice", err)
+		return id, err
 	}
 	Redis_CompanyNotice_Set(m)
 	return
@@ -160,12 +169,15 @@ func Delete_CompanyNotice_ById(id int) bool {
 	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)
-			key := strconv.Itoa(v.Id)
-			Redis_CompanyNotice_DelK(key)
-			return true
+		num, err = o.Update(&v, "T_State")
+		if err != nil {
+			logs.Error("Delete_CompanyNotice_ById", err)
+			return false
 		}
+		fmt.Println("Number of records updated in database:", num)
+		key := strconv.Itoa(v.Id)
+		Redis_CompanyNotice_DelK(key)
+		return true
 	}
 	return false
 }
@@ -173,12 +185,14 @@ func Delete_CompanyNotice_ById(id int) bool {
 // 修改
 func Update_CompanyNotice(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_CompanyNotice_Set(m)
-		return true
+	num, err := o.Update(&m, cols...)
+	if err != nil {
+		logs.Error("Update_CompanyNotice", err)
+		return false
 	}
-	return false
+	fmt.Println("Number of records updated in database:", num)
+	Redis_CompanyNotice_Set(m)
+	return true
 }
 
 // 删除
@@ -187,22 +201,17 @@ func Delete_CompanyNotice_ByT_pid_All(T_pid int) {
 	qs := o.QueryTable(new(CompanyNotice))
 
 	var r []CompanyNotice
-	qs.Filter("T_pid", T_pid).Filter("T_State", 1).All(&r)
+	_, err := qs.Filter("T_pid", T_pid).Filter("T_State", 1).All(&r)
+	if err != nil {
+		logs.Error("Delete_CompanyNotice_ByT_pid_All", err)
+		return
+	}
 	for _, v := range r {
 		v.T_State = 0
 		if _, err := o.Update(&v, "T_State"); err == nil {
 			Redis_CompanyNotice_DelK(strconv.Itoa(v.Id))
 		}
 	}
-
-}
-
-// 获取全部
-func Read_CompanyNotice_All_1() (r []CompanyNotice) {
-	o := orm.NewOrm()
-	qs := o.QueryTable(new(CompanyNotice))
-	qs.Filter("T_State", 1).All(&r)
-	return r
 }
 
 // 获取列表
@@ -220,27 +229,22 @@ func Read_CompanyNotice_List(T_pid int, T_name string, page int, page_z int) (r
 		offset = int64((page - 1) * page_z)
 	}
 
-	qs.Limit(conf.Page_size, offset).Filter("T_pid", T_pid).Filter("T_name__icontains", T_name).Filter("T_State", 1).OrderBy("-Id").All(&maps)
-	cnt, _ = qs.Filter("T_pid", T_pid).Filter("T_name__icontains", T_name).Filter("T_State", 1).Count()
+	_, err := qs.Limit(conf.Page_size, offset).Filter("T_pid", T_pid).Filter("T_name__icontains", T_name).Filter("T_State", 1).OrderBy("-Id").All(&maps)
+	if err != nil {
+		logs.Error("Read_CompanyNotice_List", err)
+		return
+	}
+	cnt, err = qs.Filter("T_pid", T_pid).Filter("T_name__icontains", T_name).Filter("T_State", 1).Count()
+	if err != nil {
+		logs.Error("Read_CompanyNotice_List Count", err)
+		return
+	}
 	for _, v := range maps {
 		r = append(r, CompanyNoticeToCompanyNotice_R(v))
 	}
 	return r, cnt
 }
 
-// 获取列表
-func Read_CompanyNotice_ALL_T_pid(T_pid int) (r []CompanyNotice) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-
-	qs := o.QueryTable(new(CompanyNotice))
-
-	qs.Filter("T_pid", T_pid).OrderBy("-Id").Filter("T_State", 1).All(&r)
-
-	return r
-}
-
 // 获取全部列表
 func Read_CompanyNotice_All(T_pid int, T_name string) (r []CompanyNotice_R) {
 
@@ -257,7 +261,11 @@ func Read_CompanyNotice_All(T_pid int, T_name string) (r []CompanyNotice_R) {
 		cond1 = cond1.And("T_name", T_name)
 	}
 
-	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
+	_, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&map_r)
+	if err != nil {
+		logs.Error("Read_CompanyNotice_All", err)
+		return
+	}
 
 	for _, v := range map_r {
 		r = append(r, CompanyNoticeToCompanyNotice_R(v))
@@ -272,23 +280,37 @@ func Add_T_Notice_bind(T_sn string, T_id int, T_Notice_id int) (err error) {
 	o := orm.NewOrm()
 	v := CompanyNotice{Id: T_Notice_id}
 	T_Notice_bind := T_sn + strconv.Itoa(T_id) + "|"
-	if err = o.Read(&v, "Id"); err == nil {
-		v.T_Notice_bind = strings.Replace(v.T_Notice_bind, T_Notice_bind, "", -1)
-		v.T_Notice_bind = v.T_Notice_bind + T_Notice_bind
-		o.Update(&v, "T_Notice_bind")
+	err = o.Read(&v, "Id")
+	if err != nil {
+		logs.Error("Add_T_Notice_bind", err)
+		return err
+	}
+	v.T_Notice_bind = strings.Replace(v.T_Notice_bind, T_Notice_bind, "", -1)
+	v.T_Notice_bind = v.T_Notice_bind + T_Notice_bind
+	_, err = o.Update(&v, "T_Notice_bind")
+	if err != nil {
+		logs.Error("Add_T_Notice_bind", err)
+		return
 	}
-	return err
+	return nil
 }
 
 func Delete_T_Notice_bind(T_sn string, T_id int, T_Notice_id int) (err error) {
 	o := orm.NewOrm()
 	v := CompanyNotice{Id: T_Notice_id}
 	T_Notice_bind := T_sn + strconv.Itoa(T_id) + "|"
-	if err = o.Read(&v, "Id"); err == nil {
-		v.T_Notice_bind = strings.Replace(v.T_Notice_bind, T_Notice_bind, "", -1)
-		o.Update(&v, "T_Notice_bind")
+	err = o.Read(&v, "Id")
+	if err != nil {
+		logs.Error("Delete_T_Notice_bind", err)
+		return
+	}
+	v.T_Notice_bind = strings.Replace(v.T_Notice_bind, T_Notice_bind, "", -1)
+	_, err = o.Update(&v, "T_Notice_bind")
+	if err != nil {
+		logs.Error("Delete_T_Notice_bind", err)
+		return
 	}
-	return err
+	return
 
 }
 
@@ -310,7 +332,14 @@ func Update_CompanyNotice_Bind_By_T_uuid(T_uuid, T_name string) bool {
 			Or("T_Notice_message__icontains", T_uuid).
 			Or("T_Notice_mailbox__icontains", T_uuid))
 
-	qs.SetCond((*orm2.Condition)(cond1)).All(&map_r)
+	_, err := qs.SetCond((*orm2.Condition)(cond1)).All(&map_r)
+
+	if err != nil {
+		logs.Error("Delete_CompanyNotice_Bind_By_T_uuid_T_pid", err)
+		o.Rollback()
+		return false
+	}
+
 	T_uuid_name := fmt.Sprintf("%s/%s|", T_uuid, T_name)
 	for _, v := range map_r {
 		v.T_Notice_wx = Replice_T_Notice_Bind(T_uuid, v.T_Notice_wx, T_uuid_name)
@@ -318,8 +347,9 @@ func Update_CompanyNotice_Bind_By_T_uuid(T_uuid, T_name string) bool {
 		v.T_Notice_phone = Replice_T_Notice_Bind(T_uuid, v.T_Notice_phone, T_uuid_name)
 		v.T_Notice_message = Replice_T_Notice_Bind(T_uuid, v.T_Notice_message, T_uuid_name)
 		v.T_Notice_mailbox = Replice_T_Notice_Bind(T_uuid, v.T_Notice_mailbox, T_uuid_name)
-		_, err := o.Update(&v, "T_Notice_wx", "T_Notice_wx2", "T_Notice_phone", "T_Notice_message", "T_Notice_mailbox", "T_Notice_mechanism")
+		_, err = o.Update(&v, "T_Notice_wx", "T_Notice_wx2", "T_Notice_phone", "T_Notice_message", "T_Notice_mailbox", "T_Notice_mechanism")
 		if err != nil {
+			logs.Error("Update_CompanyNotice_Bind_By_T_uuid", err)
 			o.Rollback()
 			return false
 		}
@@ -349,7 +379,12 @@ func Delete_CompanyNotice_Bind_By_T_uuid(T_uuid string) bool {
 			Or("T_Notice_message__icontains", T_uuid).
 			Or("T_Notice_mailbox__icontains", T_uuid))
 
-	qs.SetCond((*orm2.Condition)(cond1)).All(&map_r)
+	_, err := qs.SetCond((*orm2.Condition)(cond1)).All(&map_r)
+	if err != nil {
+		logs.Error("Delete_CompanyNotice_Bind_By_T_uuid_T_pid", err)
+		o.Rollback()
+		return false
+	}
 
 	for _, v := range map_r {
 		v.T_Notice_wx = Replice_T_Notice_Bind(T_uuid, v.T_Notice_wx, "")
@@ -359,6 +394,7 @@ func Delete_CompanyNotice_Bind_By_T_uuid(T_uuid string) bool {
 		v.T_Notice_mailbox = Replice_T_Notice_Bind(T_uuid, v.T_Notice_mailbox, "")
 		_, err := o.Update(&v, "T_Notice_wx", "T_Notice_wx2", "T_Notice_phone", "T_Notice_message", "T_Notice_mailbox", "T_Notice_mechanism")
 		if err != nil {
+			logs.Error("Delete_CompanyNotice_Bind_By_T_uuid", err)
 			o.Rollback()
 			return false
 		}
@@ -389,7 +425,12 @@ func Delete_CompanyNotice_Bind_By_T_uuid_T_pid(T_uuid string, T_pids []int) bool
 			Or("T_Notice_message__icontains", T_uuid).
 			Or("T_Notice_mailbox__icontains", T_uuid))
 
-	qs.SetCond((*orm2.Condition)(cond1)).All(&map_r)
+	_, err := qs.SetCond((*orm2.Condition)(cond1)).All(&map_r)
+	if err != nil {
+		logs.Error("Delete_CompanyNotice_Bind_By_T_uuid_T_pid", err)
+		o.Rollback()
+		return false
+	}
 
 	for _, v := range map_r {
 		v.T_Notice_wx = Replice_T_Notice_Bind(T_uuid, v.T_Notice_wx, "")
@@ -399,6 +440,7 @@ func Delete_CompanyNotice_Bind_By_T_uuid_T_pid(T_uuid string, T_pids []int) bool
 		v.T_Notice_mailbox = Replice_T_Notice_Bind(T_uuid, v.T_Notice_mailbox, "")
 		_, err := o.Update(&v, "T_Notice_wx", "T_Notice_wx2", "T_Notice_phone", "T_Notice_message", "T_Notice_mailbox", "T_Notice_mechanism")
 		if err != nil {
+			logs.Error("Delete_CompanyNotice_Bind_By_T_uuid_T_pid", err)
 			o.Rollback()
 			return false
 		}

+ 12 - 6
models/Device/Device.go

@@ -59,7 +59,6 @@ type Device_R struct {
 	T_ish             int    // 湿度   1开启   2关闭
 	T_Dattery         int    // 电量
 	T_Site            string // GPS
-	T_give            int    // 屏蔽状态 0 屏蔽  1 正常
 	T_monitor         int    // 监控状态 0 未监控 1 监控 停止记录
 	T_online          int    // 在线状态 0 未启用  1 在线  2 离线
 	T_online_s        int    // 在线状态-备用  0 未启用  1 在线  2 离线
@@ -110,9 +109,16 @@ func DeviceToDevice_R(r Device) (t Device_R) {
 	t.T_sn = r.T_sn
 	t.T_devName = r.T_devName
 	t.T_protocol = r.T_protocol
-	t.T_VerifyTime = r.T_VerifyTime.Format("2006-01-02 15:04:05")
-	t.T_CalibrationTime = r.T_CalibrationTime.Format("2006-01-02 15:04:05")
-	t.T_PatrolTime = r.T_PatrolTime.Format("2006-01-02 15:04:05")
+	if !r.T_VerifyTime.IsZero() {
+		t.T_VerifyTime = r.T_VerifyTime.Format("2006-01-02 15:04:05")
+	}
+	if !r.T_CalibrationTime.IsZero() {
+		t.T_CalibrationTime = r.T_CalibrationTime.Format("2006-01-02 15:04:05")
+	}
+	if !r.T_PatrolTime.IsZero() {
+		t.T_PatrolTime = r.T_PatrolTime.Format("2006-01-02 15:04:05")
+	}
+
 	t.T_ist = r.T_ist
 	t.T_ish = r.T_ish
 	t.T_Dattery = r.T_Dattery
@@ -229,7 +235,7 @@ func Update_Device(r Device, cols ...string) bool {
 }
 
 // 获取列表
-func Read_Device_List(admin Account.Admin, T_pid int, T_name string, T_monitor string, T_online string, page int, page_z int) (r []Device_R, cnt int64) {
+func Read_Device_List(admin *Account.Admin, T_pid int, T_name string, T_monitor string, T_online string, page int, page_z int) (r []Device_R, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -250,7 +256,7 @@ func Read_Device_List(admin Account.Admin, T_pid int, T_name string, T_monitor s
 	}
 
 	if len(T_name) > 0 {
-		cond1 = cond1.AndCond(cond.Or("T_sn__icontains", T_name).Or("T_devName__icontains", T_name).Or("T_MSISDN__icontains", T_name))
+		cond1 = cond1.AndCond(cond.Or("T_sn__icontains", T_name).Or("T_devName__icontains", T_name))
 	}
 
 	if len(T_monitor) > 0 {

+ 17 - 41
models/Device/DeviceData.go

@@ -3,11 +3,11 @@ package Device
 import (
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
-	"Cold_Api/logs"
 	"encoding/json"
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
+	"github.com/astaxie/beego/logs"
 	"github.com/beego/beego/v2/adapter/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
@@ -78,26 +78,25 @@ func DeviceData_ToDeviceData_R(r DeviceData_) (t DeviceData_R) {
 	t.T_rh = r.T_rh
 	t.T_site = r.T_site
 	t.T_time = r.T_time.Format("2006-01-02 15:04:05")
+	t.T_sp = r.T_sp
 	sp := Read_DeviceSensorParameter_Map_Get(r.T_sp)
 	t.T_name = sp.T_name
 	t.T_tl = sp.T_Tlower
 	t.T_tu = sp.T_Tupper
 	t.T_rhl = sp.T_RHlower
-	t.T_rhu = sp.T_Tupper
+	t.T_rhu = sp.T_RHupper
 
-	return
+	return t
 }
 
 // ---------------- Redis -------------------
 // Redis_Set(m.T_sn,m) // Redis 更新缓存
-func RedisDeviceData_Set(key string, r DeviceData_R) (err error) {
+func RedisDeviceData_Set(key string, r DeviceData_) (err error) {
 	if redis_DeviceData.IsExist(key) {
-		var t DeviceData_R
+		var t DeviceData_
 		v := redis_DeviceData.Get(key)
 		json.Unmarshal(v.([]byte), &t)
-		tTime, _ := time.Parse("2006-01-02 15:04:05", t.T_time)
-		rTime, _ := time.Parse("2006-01-02 15:04:05", r.T_time)
-		if tTime.Unix() > rTime.Unix() {
+		if t.T_time.Unix() > r.T_time.Unix() {
 			// 储存的 是最新数据
 			return
 		}
@@ -116,13 +115,13 @@ func RedisDeviceData_Set(key string, r DeviceData_R) (err error) {
 	return
 }
 
-func RedisDeviceData_Get(key string) (r DeviceData_R, is bool) {
+func RedisDeviceData_Get(key string) (r DeviceData_, is bool) {
 	if redis_DeviceData.IsExist(key) {
 		v := redis_DeviceData.Get(key)
 		json.Unmarshal(v.([]byte), &r)
 		return r, true
 	}
-	return DeviceData_R{}, false
+	return DeviceData_{}, false
 }
 
 // -------------------------------------------------------
@@ -142,7 +141,7 @@ func DELETE_DeviceDatar(SN string) bool {
 	timeStr := time.Now().Format("2006_01_02_15_04_05")
 	//sql := "DROP TABLE z_device_data_" + SN
 	sql := "ALTER TABLE z_device_data_" + SN + " RENAME TO " + "z_device_data_" + SN + "_dle_" + timeStr + ";"
-	logs.Println("DELETE_DeviceDatar:", sql)
+	logs.Info("DELETE_DeviceDatar sql:", sql)
 	o := orm.NewOrm()
 	_, err := o.Raw(sql).Exec()
 	if err != nil {
@@ -177,20 +176,20 @@ func Add_DeviceData(SN string, v DeviceData_T) bool {
 	o := orm.NewOrm()
 
 	// 检查 超过时间,查询 数据库
-	logs.Println("Add_DeviceData 时间差s:", time.Now().Unix()-v.T_time.Unix())
+	logs.Info("Add_DeviceData 时间差s:", time.Now().Unix()-v.T_time.Unix())
 	if time.Now().Unix()-v.T_time.Unix() >= 60*40 {
 		// 查看是否 有记录
 		var maps_z []orm2.ParamsList
 		sql_c := "SELECT COUNT(ID) FROM z_device_data_" + SN + " WHERE t_time = '" + v.T_time.Format("2006-01-02 15:04:05") + "' AND t_id = " + strconv.Itoa(v.T_id)
-		logs.Println("检查 超过时间,查询 数据库 SQL:", sql_c)
+		logs.Info("检查 超过时间,查询 数据库 SQL:", sql_c)
 		_, err := o.Raw(sql_c).ValuesList(&maps_z)
 		if err != nil {
-			logs.Println(err)
+			logs.Info(err)
 			return false
 		}
 		//fmt.Println("maps_z[0][0]:",maps_z[0][0])
 		if lib.To_int(maps_z[0][0]) > 0 {
-			logs.Println("存在记录,跳过!")
+			logs.Info("存在记录,跳过!")
 			return true
 		}
 	}
@@ -210,29 +209,6 @@ func Add_DeviceData(SN string, v DeviceData_T) bool {
 	return true
 }
 
-///---------------
-//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_DeviceData_ById_List(SN string, T_id int, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_R, int) {
 	o := orm.NewOrm()
 	var maps []DeviceData_
@@ -418,21 +394,21 @@ func Read_DeviceData_List_GROUP_BY_t_time(SN string, Time_start_ string, Time_en
 	return maps_z
 }
 
-func Read_DeviceData(T_sn string, T_id int) (t DeviceData_R) {
+func Read_DeviceData(T_sn string, T_id int) (t DeviceData_) {
 	key := T_sn + "|" + strconv.Itoa(T_id)
 	if t, is := RedisDeviceData_Get(key); is {
 		return t
 	}
 
 	o := orm.NewOrm()
-	var maps []DeviceData_R
+	var maps []DeviceData_
 	sql := "SELECT t_id,t_sp,t_t,t_rh,t_site,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_time,t_time AS t_time1 FROM z_device_data_" + T_sn + " WHERE " + " t_id = " + strconv.Itoa(T_id) + " ORDER BY t_time1 DESC LIMIT 0,1"
 
 	fmt.Println(sql)
 	_, err := o.Raw(sql).QueryRows(&maps)
 
 	if err != nil {
-		logs.Println("Read_DeviceData: ", err)
+		logs.Error("Read_DeviceData: ", err)
 		return t
 	}
 

+ 75 - 29
models/Device/DeviceParameter.go

@@ -5,6 +5,7 @@ import (
 	"github.com/beego/beego/v2/adapter/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
+	"strconv"
 	"time"
 )
 
@@ -17,8 +18,8 @@ type DeviceParameter struct {
 	T_name string `orm:"size(256);null"` //设备名称 (传 * 代表托管给平台处理) *
 
 	T_saveT int `orm:"size(5);null"` //数据保存间隔 s(60~3600) 默认:60 *
-	T_overA int `orm:"size(5);null"` //数据保存间隔 超限报警触发间隔 s(60~600) 默认:60  *
-	T_outA  int `orm:"size(5);null"` //超限报警触发间隔 s(0,60~600)  为0时只触发一次 默认:60 *
+	T_overA int `orm:"size(5);null"` //超限报警触发间隔 s(60~600) 默认:60  *
+	T_outA  int `orm:"size(5);null"` //断电报警触发间隔 s(0,60~600)  为0时只触发一次 默认:60 *
 	T_lostA int `orm:"size(5);null"` //传感器掉线报警触发间隔  s(0,60~600) 为0时只触发一次 默认:60  *
 	T_bat   int `orm:"size(5);null"` //电池电量下限   %(0~30) 默认:20 *
 
@@ -44,19 +45,63 @@ func (t *DeviceParameter) TableName() string {
 }
 
 type DeviceParameter_R struct {
-	T_sn     string // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
-	T_name   string // 设备名称 (传 * 代表托管给平台处理) *
-	T_saveT  int    // 数据保存间隔 s(60~3600) 默认:60 *
-	T_overA  int    // 数据保存间隔 超限报警触发间隔 s(60~600) 默认:60  *
-	T_outA   int    // 超限报警触发间隔 s(0,60~600)  为0时只触发一次 默认:60 *
-	T_lostA  int    // 传感器掉线报警触发间隔  s(0,60~600) 为0时只触发一次 默认:60  *
-	T_bat    int    // 电池电量下限   %(0~30) 默认:20 *
-	T_warn   int    // 超限预警触发间隔 s(0,60~600)为0时只触发一次 默认:60  *
-	T_warnD  int    // 超限预警延时   s(0~600) 默认:0 *
-	T_speed  int    // 传感器采样率   s(1~240) 默认:15 *
-	T_btname string // 蓝牙打印机名称
-	T_btsid  int    // 打印机服务号
-	T_btchar int    // 蓝牙特征码
+	//T_sn        string // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	//T_name      string // 设备名称 (传 * 代表托管给平台处理) *
+	//T_saveT     int    // 数据保存间隔 s(60~3600) 默认:60 *
+	//T_overA     int    // 超限报警触发间隔 s(60~600) 默认:60  *
+	//T_outA      int    // 断电报警触发间隔 s(0,60~600)  为0时只触发一次 默认:60 *
+	//T_lostA     int    // 传感器掉线报警触发间隔  s(0,60~600) 为0时只触发一次 默认:60  *
+	//T_bat       int    // 电池电量下限   %(0~30) 默认:20 *
+	//T_warn      int    // 超限预警触发间隔 s(0,60~600)为0时只触发一次 默认:60  *
+	//T_warnD     int    // 超限预警延时   s(0~600) 默认:0 *
+	//T_speed     int    // 传感器采样率   s(1~240) 默认:15 *
+	//T_btname    string // 蓝牙打印机名称
+	//T_btsid     int    // 打印机服务号
+	//T_btchar    int    // 蓝牙特征码
+	//T_uuid      string // 处理 人员
+	//T_Msid      int64  // 消息识别ID
+	T_SendState int    // 发送状态  0 待发送   1 发送成功  2 发送失败  3 丢弃
+	T_text      string // 设备参数记录
+}
+
+func DeviceParameterToDeviceParameter_R(r DeviceParameter) (t DeviceParameter_R) {
+	//t.T_sn = r.T_sn
+	//t.T_name = r.T_name
+	//t.T_saveT = r.T_saveT
+	//t.T_overA = r.T_overA
+	//t.T_outA = r.T_outA
+	//t.T_lostA = r.T_lostA
+	//t.T_bat = r.T_bat
+	//t.T_warn = r.T_warn
+	//t.T_warnD = r.T_warnD
+	//t.T_speed = r.T_speed
+	//t.T_btname = r.T_btname
+	//t.T_btsid = r.T_btsid
+	//t.T_btchar = r.T_btchar
+	//t.T_uuid = r.T_uuid
+	//t.T_Msid = r.T_Msid
+	t.T_SendState = r.T_SendState
+	t.T_text = DeviceParameter_T_text(r)
+	return t
+}
+
+func DeviceParameter_T_text(r DeviceParameter) string {
+	s := ""
+	s += "操作人UUID:" + r.T_uuid
+	s += " 设备名称:" + r.T_name
+	s += " 数据保存间隔:" + strconv.Itoa(r.T_saveT)
+	s += " 超限报警触发间隔:" + strconv.Itoa(r.T_overA)
+	s += " 断电报警触发间隔:" + strconv.Itoa(r.T_outA)
+	s += " 传感器掉线报警触发:" + strconv.Itoa(r.T_lostA)
+	s += " 电池电量下限:" + strconv.Itoa(r.T_bat)
+	s += " 超限预警触发间隔:" + strconv.Itoa(r.T_warn)
+	s += " 超限预警延时:" + strconv.Itoa(r.T_warnD)
+	s += " 传感器采样率:" + strconv.Itoa(r.T_speed)
+	s += " 蓝牙打印机名称:" + r.T_btname
+	s += " 打印机服务号:" + strconv.Itoa(r.T_btsid)
+	s += " 蓝牙特征码:" + strconv.Itoa(r.T_btchar)
+	s += " 修改时间:" + r.UpdateTime.Format("2006-01-02 15:04:05")
+	return s
 }
 
 func init() {
@@ -122,21 +167,14 @@ func DELETE_DeviceParameter(SN string) bool {
 	return true
 }
 
-// 获取列表
+// 获取设备参数
 func Read_DeviceParameter_SN(T_sn string) (r []DeviceParameter) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
 	qs := o.QueryTable(new(DeviceParameter))
-	cond := orm.NewCondition()
-
-	cond1 := cond.And("T_sn", T_sn)
-
-	cond1 = cond.AndCond(cond1).AndCond(cond.And("T_State", 1).Or("T_SendState", 1))
-
-	qs.Limit(1, 0).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
-
+	qs.Limit(1, 0).Filter("T_sn", T_sn).Filter("T_State", 1).OrderBy("-Id").All(&r)
 	return r
 }
 
@@ -153,16 +191,24 @@ func Read_DeviceParameter_SN_T_State_1(T_sn string) (r []DeviceParameter) {
 	return r
 }
 
-// 获取列表
-func Read_DeviceParameter_SN_List(T_sn string) (r []DeviceParameter) {
+// 用户提交的设备参数列表
+func Read_DeviceParameter_SN_List(T_sn string, page, page_z int) (r []DeviceParameter_R) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
 
 	qs := o.QueryTable(new(DeviceParameter))
-
-	qs.Limit(10, 0).Filter("T_sn", T_sn).Filter("T_State", 1).OrderBy("-Id").All(&r)
-
+	var maps []DeviceParameter
+	qs.Limit(page_z, offset).Filter("T_sn", T_sn).Filter("T_State", 2).OrderBy("-Id").All(&maps)
+	for _, v := range maps {
+		r = append(r, DeviceParameterToDeviceParameter_R(v))
+	}
 	return r
 }
 

+ 28 - 13
models/Device/DeviceSensor.go

@@ -65,6 +65,7 @@ type DeviceSensor_R struct {
 	T_monitor  int    // 记录状态
 	T_online   int    // 在线状态 1 在线  0 离线
 	T_datashow int    // 0 屏蔽数据展示  1 正常数据展示
+	T_type     int    // 1库房   2移动
 
 	T_DeviceSensorData      DeviceData_R            // 传感器最新数据
 	T_DeviceSensorParameter DeviceSensorParameter_R //  设备参数
@@ -153,7 +154,7 @@ func Redis_DeviceSensor_DelK(r DeviceSensor) (err error) {
 // ---------------- 特殊方法 -------------------
 
 func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r DeviceSensor_R) {
-	lib.DeviceRealSnMap[DeviceSensor_r.T_sn] = 3 // 连续请求 实时数据
+	lib.DeviceRealSnMap[DeviceSensor_.T_sn] = 3 // 连续请求 实时数据
 
 	DeviceSensor_r.T_sn = DeviceSensor_.T_sn
 	DeviceSensor_r.T_id = DeviceSensor_.T_id
@@ -162,6 +163,7 @@ func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r De
 	DeviceSensor_r.T_Dattery = DeviceSensor_.T_Dattery
 	DeviceSensor_r.T_monitor = DeviceSensor_.T_monitor
 	DeviceSensor_r.T_3dview = DeviceSensor_.T_3dview
+	DeviceSensor_r.T_type = DeviceSensor_.T_type
 	DeviceSensor_r.T_sort = DeviceSensor_.T_sort
 
 	DeviceSensor_r.T_datashow = DeviceSensor_.T_datashow
@@ -179,20 +181,15 @@ func DeviceSensorToDeviceSensor_R(DeviceSensor_ DeviceSensor) (DeviceSensor_r De
 	// 最新数据
 	//key_data := DeviceSensor_.T_sn + "|" + strconv.Itoa(DeviceSensor_.T_id)
 	//DeviceSensor_r.T_DeviceSensorData, _ = RedisDeviceData_Get(key_data)
+	DeviceData := Read_DeviceData(DeviceSensor_.T_sn, DeviceSensor_.T_id)
+
+	DeviceSensor_r.T_DeviceSensorData = DeviceData_ToDeviceData_R(DeviceData)
 
-	DeviceSensor_r.T_DeviceSensorData = Read_DeviceData(DeviceSensor_.T_sn, DeviceSensor_.T_id)
-	dsp := Read_DeviceSensorParameter_Map_Get(DeviceSensor_r.T_DeviceSensorData.T_sp)
-	DeviceSensor_r.T_DeviceSensorData.T_tl = dsp.T_Tlower
-	DeviceSensor_r.T_DeviceSensorData.T_tu = dsp.T_Tupper
-	DeviceSensor_r.T_DeviceSensorData.T_rhl = dsp.T_RHlower
-	DeviceSensor_r.T_DeviceSensorData.T_rhu = dsp.T_RHupper
 	return
 }
 
 // ---------------- 特殊方法 -------------------
 
-// ----------------------------------- v2 -------------------------------------------------------------
-
 // 获取列表 - 总数
 func Read_DeviceSensor_Num_ByT_sn(T_sn string) int {
 	o := orm.NewOrm()
@@ -203,7 +200,7 @@ func Read_DeviceSensor_Num_ByT_sn(T_sn string) int {
 }
 
 // 获取列表
-func Read_DeviceSensorList(admin_r Account.Admin, T_pid int, T_sn string, T_name string, T_Class_id, T_datashow, T_type, T_State int, page int, page_z int) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
+func Read_DeviceSensorList(admin_r *Account.Admin, T_pid int, T_sn string, T_name string, T_Class_id, T_datashow, T_type, T_State int, page int, page_z int) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -645,7 +642,7 @@ func Update_Device_To_DeviceSensor(r_Device Device) bool {
 }
 
 // 传感器管理列列表 -------------------
-func Read_DeviceSensorManageList(admin_r Account.Admin, T_pid int, T_name string, T_calss_id, T_en, T_free, T_datashow, T_sort, page, page_z int) (DeviceSensor_p []DeviceSensor_P, cnt int64) {
+func Read_DeviceSensorManageList(admin_r *Account.Admin, T_pid int, T_name string, T_calss_id, T_en, T_free, T_datashow, T_sort, page, page_z int) (DeviceSensor_p []DeviceSensor_P, cnt int64) {
 	o := orm.NewOrm()
 	var maps []DeviceSensor_P
 	var maps_z []orm2.ParamsList
@@ -719,7 +716,7 @@ func Read_DeviceSensorManageList(admin_r Account.Admin, T_pid int, T_name string
 }
 
 // 数据展示菜单下 传感器参数列表
-func Read_DeviceSensor_List_For_Data(T_pid int, T_sn string, T_name string, T_Class_id, T_type int, page int, page_z int) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
+func Read_DeviceSensor_List_For_Data(T_pid int, T_sn string, T_name string, T_Class_id, T_type, T_RealTime int, page int, page_z int) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -748,6 +745,8 @@ func Read_DeviceSensor_List_For_Data(T_pid int, T_sn string, T_name string, T_Cl
 
 	if len(T_sn) > 0 {
 		cond1 = cond1.And("T_sn__icontains", T_sn)
+	} else {
+		cond1 = cond1.And("T_datashow", 1)
 	}
 
 	if len(T_name) > 0 {
@@ -757,9 +756,25 @@ func Read_DeviceSensor_List_For_Data(T_pid int, T_sn string, T_name string, T_Cl
 	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
 	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
 
+	// 实时数据页面,温度或者湿度不在正常区间,排在最前面
+	if T_RealTime == 1 {
+		var DeviceSensor_unusual []DeviceSensor_R
+		for _, v := range r {
+			v_r := DeviceSensorToDeviceSensor_R(v)
+			data := v_r.T_DeviceSensorData
+			// 温度或者湿度不在正常区间,排在最前面
+			if data.T_t > data.T_tu || data.T_t < data.T_tl || data.T_rh > data.T_rhu || data.T_rh < data.T_rhl {
+				DeviceSensor_unusual = append(DeviceSensor_unusual, v_r)
+			} else {
+				DeviceSensor_r = append(DeviceSensor_r, v_r)
+			}
+		}
+		DeviceSensor_unusual = append(DeviceSensor_unusual, DeviceSensor_r...)
+		return DeviceSensor_unusual, cnt
+	}
+
 	for _, v := range r {
 		DeviceSensor_r = append(DeviceSensor_r, DeviceSensorToDeviceSensor_R(v))
 	}
 	return DeviceSensor_r, cnt
-	//return r, cnt
 }

+ 62 - 2
models/Device/DeviceSensorParameter.go

@@ -78,6 +78,11 @@ type DeviceSensorParameter_M struct {
 	T_RHupper float32 //  湿度上限
 }
 
+type DeviceSensorParameter_T struct {
+	T_SendState int // 发送状态  0 待发送   1 发送成功  2 失败  3 覆盖
+	T_text      string
+}
+
 func DeviceSensorParameterToDeviceSensorParameter_R(r DeviceSensorParameter) (t DeviceSensorParameter_R) {
 	t.T_Tlower = r.T_Tlower
 	t.T_Tupper = r.T_Tupper
@@ -104,6 +109,36 @@ func DeviceSensorParameterToDeviceSensorParameter_M(r DeviceSensorParameter) (t
 	t.T_RHupper = r.T_RHupper
 	return t
 }
+
+func DeviceSensorParameterToDeviceSensorParameter_T(r DeviceSensorParameter) (t DeviceSensorParameter_T) {
+	t.T_text = DeviceSensorParameter_T_text(r)
+	t.T_SendState = r.T_SendState
+	return t
+}
+
+func DeviceSensorParameter_T_text(r DeviceSensorParameter) string {
+	s := ""
+	s += "操作人UUID:" + r.T_uuid
+	s += " 设备名称:" + r.T_name
+	s += fmt.Sprintf(" 温度下限:%f", r.T_Tlower)
+	s += fmt.Sprintf(" 温度上限:%f", r.T_Tupper)
+	s += fmt.Sprintf(" 湿度下限:%f", r.T_RHlower)
+	s += fmt.Sprintf(" 湿度上限:%f", r.T_RHupper)
+
+	s += fmt.Sprintf(" 是否启用预警:%d", r.T_enprel)
+	s += fmt.Sprintf(" 温度预警下限:%f", r.T_tprel)
+	s += fmt.Sprintf(" 温度预警上限:%f", r.T_tpreu)
+	s += fmt.Sprintf(" 湿度预警下限:%f", r.T_hprel)
+	s += fmt.Sprintf(" 温度预警上限:%f", r.T_hpreu)
+
+	s += fmt.Sprintf(" 传感器采样率:%d", r.T_speed)
+	s += fmt.Sprintf(" 是否启用传感器:%d", r.T_en)
+	s += fmt.Sprintf(" 监测点是否为闲置状态:%d", r.T_free)
+
+	s += " 修改时间:" + r.UpdateTime.Format("2006-01-02 15:04:05")
+	return s
+}
+
 func (t *DeviceSensorParameter) TableName() string {
 	return "device_sensor_parameter" // 数据库名称   // ************** 替换 FormulaList **************
 }
@@ -191,19 +226,43 @@ func Read_DeviceSensorParameter(T_sn string, T_id int) (t DeviceSensorParameter_
 }
 
 // 获取列表  T_State  1 系统获取   2 用户提交
-func Read_DeviceSensorParameter_List(T_sn string, T_id int, T_State int, page_z int) (r []DeviceSensorParameter) {
+func Read_DeviceSensorParameter_T_sn_T_id(T_sn string, T_id int) (r []DeviceSensorParameter) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(DeviceSensorParameter))
+	cond := orm.NewCondition()
+	cond = cond.And("T_sn", T_sn).And("T_id", T_id).And("T_State", 1)
+
+	qs.Limit(1, 0).SetCond((*orm2.Condition)(cond)).All(&r)
+
+	return r
+}
+
+// 获取列表  T_State  1 系统获取   2 用户提交
+func Read_DeviceSensorParameter_List(T_sn string, T_id int, T_State int, page, page_z int) (r []DeviceSensorParameter_T) {
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 
 	qs := o.QueryTable(new(DeviceSensorParameter))
 	cond := orm.NewCondition()
 
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
 	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)
+	var maps []DeviceSensorParameter
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond)).OrderBy("-Id").All(&maps)
+
+	for _, v := range maps {
+		r = append(r, DeviceSensorParameterToDeviceSensorParameter_T(v))
+	}
 
 	return r
 }
@@ -250,6 +309,7 @@ func Read_DeviceSensorParameter_All_Map(T_sn string, T_id int) {
 	cond := orm.NewCondition()
 
 	//cond = cond.And("T_sn", T_sn).And("T_id", T_id).AndCond(cond.And("T_State", 1).OrCond(cond.And("T_State", 2).And("T_SendState", 1)))
+	cond = cond.And("T_State", 1)
 	if len(T_sn) > 0 {
 		cond = cond.And("T_sn", T_sn)
 	}

+ 12 - 0
models/Product/ProductType.go

@@ -49,6 +49,18 @@ func init() {
 }
 
 // 获取全部
+func Read_ProductType_All() (r []ProductType) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(ProductType))
+	_, err := qs.All(&r)
+	if err != nil {
+		logs.Error("Read_ProductType_All", err)
+		return r
+	}
+	return r
+}
+
+// 获取全部
 func Read_ProductType_All_Map() {
 	time.Sleep(time.Second)
 

+ 24 - 0
models/tools.go

@@ -1,10 +1,34 @@
 package models
 
 import (
+	"math/rand"
 	"strconv"
 	"strings"
+	"time"
 )
 
+// #取得随机字符串:通过打乱slice来操作
+func GetRandstring(length int, char string, rand_x int64) string {
+	if length < 1 {
+		return ""
+	}
+
+	if len(char) <= 6 || len(char) <= length {
+		char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+	}
+
+	charArr := strings.Split(char, "")
+	ran := rand.New(rand.NewSource(time.Now().Unix() + rand_x))
+
+	l := len(charArr)
+	for i := l - 1; i > 0; i-- {
+		r := ran.Intn(i)
+		charArr[r], charArr[i] = charArr[i], charArr[r]
+	}
+	rchar := charArr[:length]
+	return strings.Join(rchar, "")
+}
+
 func SplitStringIds(str string, prefix string) (r []string) {
 	Ids_str := strings.TrimRight(str, "|")
 	Ids := strings.Split(Ids_str, "|")

+ 16 - 7
routers/filter.go

@@ -5,17 +5,21 @@ import (
 	"Cold_Api/controllers/lib"
 	"Cold_Api/logs"
 	"Cold_Api/models/Account"
+	"fmt"
 	"github.com/beego/beego/v2/server/web/context"
 	"strings"
 )
 
 var (
 	version                    = conf.Version
-	filterExcludeURLMap        = make(map[string]int)
-	filterOnlyLoginCheckURLMap = make(map[string]int)
+	filterExcludeURLMap        = make(map[string]int) // 不鉴权的URL
+	filterOnlyLoginCheckURLMap = make(map[string]int) // 只鉴权登录的URL
 )
 
-var InitSetFilterUrl = func() {
+func init() {
+	//初始化配置 不鉴权的URL和只鉴权登录的URL
+	logs.Println("=========== 初始化路由筛选信息 =========")
+
 	excludeUrl := conf.FilterExcludeURL
 	if len(excludeUrl) > 0 {
 		excludeUrlSlice := strings.Split(excludeUrl, ",")
@@ -44,7 +48,7 @@ func RBACFilter(ctx *context.Context) {
 	b_, admin_r := lib.Verification(ctx.GetCookie("User_tokey"), ctx.Input.Query("User_tokey"))
 	if !b_ {
 		ctx.Output.JSON(lib.JSONS{Code: 201, Msg: "请重新登陆!"}, true, false)
-
+		return
 	}
 	//判断是否只验证登录的URL
 	if _, ok := filterOnlyLoginCheckURLMap[ctx.Request.URL.Path]; b_ && ok {
@@ -68,6 +72,7 @@ func RBACFilter(ctx *context.Context) {
 	if !flag {
 		data := lib.JSONS{Code: 202, Msg: "无权访问!"}
 		ctx.Output.JSON(data, true, false)
+		return
 	}
 
 }
@@ -87,8 +92,12 @@ func T_pidFilter(ctx *context.Context) {
 	if len(User_tokey) == 0 {
 		User_tokey = GetString
 	}
-
-	T_pid := lib.Admin_r.T_pid
+	b_, admin_r := lib.Verification(ctx.GetCookie("User_tokey"), ctx.Input.Query("User_tokey"))
+	if !b_ {
+		ctx.Output.JSON(lib.JSONS{Code: 201, Msg: "请重新登陆!"}, true, false)
+		return
+	}
+	T_pid := admin_r.T_pid
 	if T_pid == 0 {
 		T_pid, _ = Account.Redis_Tokey_T_pid_Get(User_tokey)
 	}
@@ -97,5 +106,5 @@ func T_pidFilter(ctx *context.Context) {
 		data := lib.JSONS{Code: 202, Msg: "T_pid Err!"}
 		ctx.Output.JSON(data, true, false)
 	}
-	logs.Println("T_pid", T_pid)
+	fmt.Println("公司 T_pid 为", T_pid)
 }

+ 0 - 5
routers/router.go

@@ -21,9 +21,4 @@ func init() {
 	beego.Router(version+"/System/UserLogsClass", &controllers.LogsController{}, "*:UserLogsClass") // 获取未读消息
 	beego.Router(version+"/System/UserLogsList", &controllers.LogsController{}, "*:UserLogsList")   // 获取未读消息
 
-	//初始化配置 不鉴权的URL和只鉴权登录的URL
-	InitSetFilterUrl()
-	//过滤器,拦截所有请求
-	//beego.InsertFilter("/*", beego.BeforeRouter, RBACFilter)
-
 }

+ 3 - 0
routers/v3.go

@@ -13,11 +13,13 @@ func init() {
 			//设备
 			beego.NSRouter("/List", &controllers.DeviceController{}, "*:Device_List"), // 设备列表
 			beego.NSRouter("/Add", &controllers.DeviceController{}, "*:Device_Add"),   // 添加设备
+			beego.NSRouter("/Get", &controllers.DeviceController{}, "*:Device_Get"),   // 获取设备
 			//beego.NSRouter("/Del", &controllers.DeviceController{}, "*:Device_Del"),                                          // 删除设备
 			beego.NSRouter("/Edit", &controllers.DeviceController{}, "*:Device_Edit"),                       // 修改设备
 			beego.NSRouter("/RestartShutdown", &controllers.DeviceController{}, "*:Device_RestartShutdown"), // 重启/关机
 			beego.NSRouter("/ProductUpgrade", &controllers.DeviceController{}, "*:Device_ProductUpgrade"),   // 版本升级
 
+			beego.NSRouter("/Parameter_Get", &controllers.DeviceController{}, "*:Device_Parameter_Get"),   // 设备参数
 			beego.NSRouter("/Parameter_List", &controllers.DeviceController{}, "*:Device_Parameter_List"), // 设备参数列表
 			beego.NSRouter("/Parameter_Pu", &controllers.DeviceController{}, "*:Device_Parameter_Pu"),     // 修改设备参数
 			//beego.NSRouter("/Device_Parameter_Del_Device", &controllers.DeviceController{}, "*:Device_Parameter_Del_Device"), // 删除此设备
@@ -47,6 +49,7 @@ func init() {
 			beego.NSRouter("/List", &controllers.DeviceController{}, "*:DeviceSensor_List"),                     // 传感器列表
 			beego.NSRouter("/Edit", &controllers.DeviceController{}, "*:DeviceSensor_Edit"),                     // 修改传感器
 			beego.NSRouter("/Del", &controllers.DeviceController{}, "*:DeviceSensor_Del"),                       // 删除传感器
+			beego.NSRouter("/Parameter_Get", &controllers.DeviceController{}, "*:DeviceSensor_Parameter_Get"),   // 传感器参数
 			beego.NSRouter("/Parameter_List", &controllers.DeviceController{}, "*:DeviceSensor_Parameter_List"), // 传感器参数列表
 			beego.NSRouter("/Parameter_Pu", &controllers.DeviceController{}, "*:DeviceSensor_Parameter_Pu"),     // 修改传感器参数
 			// 传感器管理列表