siked 2 jaren geleden
bovenliggende
commit
7516f0dd4d

+ 2 - 1
.idea/deployment.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
 <project version="4">
-  <component name="PublishConfigData" remoteFilesAllowedToDisappearOnAutoupload="false">
+  <component name="PublishConfigData" uploadOnCheckin="12489421-0ef7-4128-bf1d-1146ff757569" remoteFilesAllowedToDisappearOnAutoupload="false">
     <serverData>
     <serverData>
       <paths name="huitong">
       <paths name="huitong">
         <serverdata>
         <serverdata>
@@ -10,5 +10,6 @@
         </serverdata>
         </serverdata>
       </paths>
       </paths>
     </serverData>
     </serverData>
+    <option name="myUploadOnCheckinName" value="huitong" />
   </component>
   </component>
 </project>
 </project>

BIN
Cold_Api6200


BIN
Cold_Api6201


File diff suppressed because it is too large
+ 896 - 126
controllers/Device.go


+ 18 - 15
controllers/GoodsOrder.go

@@ -1,6 +1,7 @@
 package controllers
 package controllers
 
 
 import (
 import (
+	"Cold_Api/Nats/NatsServer"
 	"Cold_Api/conf"
 	"Cold_Api/conf"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/models/Device"
 	"Cold_Api/models/Device"
@@ -9,6 +10,7 @@ import (
 	beego "github.com/beego/beego/v2/server/web"
 	beego "github.com/beego/beego/v2/server/web"
 	"github.com/signintech/gopdf"
 	"github.com/signintech/gopdf"
 	"math"
 	"math"
+	"os"
 	"strconv"
 	"strconv"
 
 
 	"time"
 	"time"
@@ -162,8 +164,9 @@ func (c *GoodsOrderController) List_Post() {
 	T_start_Ut_T, _ := c.GetFloat("T_start_Ut_T")
 	T_start_Ut_T, _ := c.GetFloat("T_start_Ut_T")
 	T_end_Ut_T, _ := c.GetFloat("T_end_Ut_T")
 	T_end_Ut_T, _ := c.GetFloat("T_end_Ut_T")
 	T_text := c.GetString("T_text")
 	T_text := c.GetString("T_text")
-	T_start_Ut_, err := time.Parse("2006-01-02 15:04:05", T_start_Ut)
-	T_end_Ut_, err := time.Parse("2006-01-02 15:04:05", T_end_Ut)
+
+	T_start_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_start_Ut, time.Local)
+	T_end_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_end_Ut, time.Local)
 	var_ := Function.GoodsOrder{
 	var_ := Function.GoodsOrder{
 		T_uuid:       admin_r.Admin_uuid,
 		T_uuid:       admin_r.Admin_uuid,
 		T_orderid:    T_orderid,
 		T_orderid:    T_orderid,
@@ -496,20 +499,20 @@ func (c *GoodsOrderController) Data_PDF() {
 		return
 		return
 	}
 	}
 
 
-	//// 上传 OSS
-	//url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
-	//if !is {
-	//	c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
-	//	c.ServeJSON()
-	//	return
-	//}
-	////删除目录
-	//err = os.Remove(timeStr)
-	//if err != nil {
-	//	fmt.Println(err)
-	//}
+	// 上传 OSS
+	url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
+		c.ServeJSON()
+		return
+	}
+	//删除目录
+	err = os.Remove(timeStr)
+	if err != nil {
+		fmt.Println(err)
+	}
 
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "url"}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
 
 

+ 686 - 2
controllers/User.go

@@ -264,6 +264,49 @@ func (c *UserController) User_Entry() {
 
 
 }
 }
 
 
+func (c *UserController) V2_User_Entry() {
+	// 验证登录
+	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
+	}
+	if admin_r.Admin_power > 6 {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	Admin_uuid := c.GetString("T_uuid")
+	if len(Admin_uuid) > 0 {
+		admin_r_a, err := Admin.Read_Admin_ByUuid(Admin_uuid)
+		if err != nil {
+			c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
+			c.ServeJSON()
+			return
+		}
+		if admin_r.Id != admin_r_a.Admin_master {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "e!"}
+			c.ServeJSON()
+			return
+		}
+
+		User_tokey := Admin.Add_Tokey_Set(admin_r_a.Admin_uuid)
+		c.Ctx.SetCookie("User_tokey", User_tokey, time.Second*60*60)
+
+	} else {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "e!"}
+		c.ServeJSON()
+		return
+	}
+	System.Add_UserLogs(admin_r.Admin_uuid, "用户管理", "无钥匙进入", Admin_uuid)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}
+
 // 用户管理
 // 用户管理
 func (c *UserController) User_html() {
 func (c *UserController) User_html() {
 	// 验证登录
 	// 验证登录
@@ -272,6 +315,7 @@ func (c *UserController) User_html() {
 		c.Ctx.Redirect(302, "Login")
 		c.Ctx.Redirect(302, "Login")
 		return
 		return
 	}
 	}
+
 	page, _ := c.GetInt("page")
 	page, _ := c.GetInt("page")
 	println(page)
 	println(page)
 	if page < 1 {
 	if page < 1 {
@@ -301,6 +345,46 @@ func (c *UserController) User_html() {
 	c.TplName = "User/User.html"
 	c.TplName = "User/User.html"
 }
 }
 
 
+// 用户管理
+func (c *UserController) V2_User_List() {
+	// 验证登录
+	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
+	}
+	type R_JSONS struct {
+		//必须的大写开头
+		Data      []Admin.Admin
+		Num       int64
+		Page      int
+		Page_size int
+	}
+
+	var r_jsons R_JSONS
+
+	page, _ := c.GetInt("page")
+	println(page)
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	Name := c.GetString("T_name")
+
+	r_jsons.Data, r_jsons.Num = Admin.Read_v2_Admin_List(admin_r.Id, Name, page, page_z)
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
 func (c *UserController) User_() {
 func (c *UserController) User_() {
 	// 验证登录
 	// 验证登录
 	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
@@ -378,12 +462,95 @@ func (c *UserController) User_Get() {
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
 }
 }
+func (c *UserController) User_v2_Get() {
+	// 验证登录
+	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
+	}
+	type User_ struct {
+		User_uuid      string
+		User_name      string           //
+		User_power     int              //
+		User_telephone string           // 电话
+		User_mail      string           //  邮箱
+		User_gender    int              // 性别  0未知   1男   2女
+		User_text      string           // 详情
+		User_rh        int              // 显示湿度
+		User_Power     Admin.AdminPower // 权限
+	}
+
+	User_uuid := c.GetString("User_uuid")
+	if len(User_uuid) < 8 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "User_uuid Err!"}
+		c.ServeJSON()
+		return
+	}
+	admin_r, err := Admin.Read_Admin_ByUuid(User_uuid)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "User_uuid Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	Admin_r := User_{}
+
+	Admin_r.User_rh = admin_r.Admin_rh
+	Admin_r.User_uuid = admin_r.Admin_uuid
+	Admin_r.User_power = admin_r.Admin_power
+	Admin_r.User_name = admin_r.Admin_name
+	Admin_r.User_telephone = admin_r.Admin_telephone
+	Admin_r.User_mail = admin_r.Admin_mail
+	Admin_r.User_gender = admin_r.Admin_gender
+	Admin_r.User_text = admin_r.Admin_text
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Admin_r}
+	c.ServeJSON()
+	return
+}
+func (c *UserController) User_v2_Info() {
+	// 验证登录
+	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
+	}
+	type User_ struct {
+		User_uuid      string
+		User_name      string           //
+		User_telephone string           // 电话
+		User_mail      string           //  邮箱
+		User_gender    int              // 性别  0未知   1男   2女
+		User_text      string           // 详情
+		User_rh        int              // 显示湿度
+		User_Power     Admin.AdminPower // 权限
+	}
+
+	Admin_r := User_{}
+
+	Admin_r.User_rh = admin_r.Admin_rh
+	Admin_r.User_uuid = admin_r.Admin_uuid
+	Admin_r.User_name = admin_r.Admin_name
+	Admin_r.User_telephone = admin_r.Admin_telephone
+	Admin_r.User_mail = admin_r.Admin_mail
+	Admin_r.User_gender = admin_r.Admin_gender
+	Admin_r.User_text = admin_r.Admin_text
+	Admin_r.User_Power, _ = Admin.Read_AdminPower_ById(admin_r.Admin_power)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Admin_r}
+	c.ServeJSON()
+	return
+}
 func (c *UserController) User_Post() {
 func (c *UserController) User_Post() {
 
 
 	// 验证登录
 	// 验证登录
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !b_ {
 	if !b_ {
-		c.Ctx.Redirect(302, "Login")
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
 		return
 		return
 	}
 	}
 	//Adminpower,_ := Admin.Read_AdminPower_ById(admin_r.Admin_power)
 	//Adminpower,_ := Admin.Read_AdminPower_ById(admin_r.Admin_power)
@@ -487,6 +654,214 @@ func (c *UserController) User_Post() {
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
 }
 }
+
+func (c *UserController) User_v2_Add() {
+
+	// 验证登录
+	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
+	}
+
+	Admin_power, _ := c.GetInt("T_power")
+	Admin_name := c.GetString("T_name")
+	Admin_user := c.GetString("T_user")
+	Admin_pass := c.GetString("T_pass")
+	Admin_telephone := c.GetString("T_phone")
+	Admin_mail := c.GetString("T_mail")
+	Admin_text := c.GetString("T_text")
+
+	var_ := Admin.Admin{
+		Admin_uuid:      uuid.NewV4().String(),
+		Admin_name:      Admin_name,
+		Admin_master:    admin_r.Id,
+		Admin_user:      Admin_user,
+		Admin_telephone: Admin_telephone,
+		Admin_mail:      Admin_mail,
+		Admin_text:      Admin_text,
+		Admin_pass:      Admin_pass,
+		Admin_power:     Admin_power,
+		T_State:         1,
+	}
+	if len(Admin_pass) > 0 && len(Admin_pass) < 7 {
+		c.Data["json"] = lib.JSONS{Code: 302, Msg: "Admin_pass Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	if admin_r.Admin_power > Admin_power {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "你没有权限 配置 权限!"}
+		c.ServeJSON()
+		return
+	}
+	if len(Admin_pass) < 8 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "密码异常!"}
+		c.ServeJSON()
+		return
+	}
+
+	err, _ := Admin.Read_Admin_Admin_user(Admin_user)
+	if err == nil {
+		c.Data["json"] = lib.JSONS{Code: 302, Msg: "账户重复!"}
+		c.ServeJSON()
+		return
+	}
+
+	_, err = Admin.Add_Admin(var_)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
+		c.ServeJSON()
+		return
+	}
+	var_.Admin_pass = "****************"
+
+	System.Add_UserLogs_T(admin_r.Admin_uuid, "用户管理", "添加操作", var_)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
+func (c *UserController) User_v2_Edit() {
+
+	// 验证登录
+	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
+	}
+	Admin_name := c.GetString("T_name")
+	Admin_pass := c.GetString("T_pass")
+	Admin_telephone := c.GetString("T_phone")
+	Admin_mail := c.GetString("T_mail")
+	Admin_text := c.GetString("T_text")
+
+	if len(Admin_name) > 0 {
+		admin_r.Admin_name = Admin_name
+	}
+	if len(Admin_pass) > 0 {
+		admin_r.Admin_pass = Admin_pass
+	}
+	if len(Admin_telephone) > 0 {
+		admin_r.Admin_telephone = Admin_telephone
+	}
+	if len(Admin_mail) > 0 {
+		admin_r.Admin_mail = Admin_mail
+	}
+	if len(Admin_text) > 0 {
+		admin_r.Admin_text = Admin_text
+	}
+
+	if len(Admin_pass) > 0 && len(Admin_pass) < 7 {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "Admin_pass Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	is := Admin.Update_Admin(admin_r, "Admin_name", "Admin_pass", "Admin_telephone", "Admin_mail", "Admin_text")
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "修改失败!"}
+		c.ServeJSON()
+		return
+	}
+	admin_r.Admin_pass = "****************"
+
+	System.Add_UserLogs_T(admin_r.Admin_uuid, "用户管理", "操作", admin_r)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
+func (c *UserController) User_v2_AEdit() {
+
+	// 验证登录
+	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
+	}
+
+	if admin_r.Admin_power > 6 {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	Admin_uuid := c.GetString("T_uuid")
+	Admin_user := c.GetString("T_user")
+	Admin_name := c.GetString("T_name")
+	Admin_pass := c.GetString("T_pass")
+	Admin_telephone := c.GetString("T_phone")
+	Admin_mail := c.GetString("T_mail")
+	Admin_text := c.GetString("T_text")
+	Admin_power, _ := c.GetInt("T_power")
+
+	if len(Admin_uuid) < 5 {
+		c.Data["json"] = lib.JSONS{Code: 302, Msg: "Admin_uuid Err!"}
+		c.ServeJSON()
+		return
+	}
+	// 权限超出
+	if admin_r.Admin_power > Admin_power {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "你没有权限 配置 权限!"}
+		c.ServeJSON()
+		return
+	}
+	err, r_u := Admin.Read_Admin_ByAdmin_uuid(Admin_uuid)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
+		c.ServeJSON()
+		return
+	}
+	// 用户名重复
+	if len(Admin_user) > 0 {
+		err, y_user := Admin.Read_Admin_Admin_user(Admin_user)
+		if err == nil {
+			if y_user.Id != r_u.Id {
+				c.Data["json"] = lib.JSONS{Code: 302, Msg: "用户名重复!"}
+				c.ServeJSON()
+				return
+			}
+		}
+		r_u.Admin_user = Admin_user
+	}
+
+	if len(Admin_name) > 0 {
+		r_u.Admin_name = Admin_name
+	}
+	if len(Admin_pass) > 0 {
+		r_u.Admin_pass = Admin_pass
+	}
+	if Admin_power > 0 {
+		r_u.Admin_power = Admin_power
+	}
+	if len(Admin_telephone) > 0 {
+		r_u.Admin_telephone = Admin_telephone
+	}
+	if len(Admin_mail) > 0 {
+		r_u.Admin_mail = Admin_mail
+	}
+	if len(Admin_text) > 0 {
+		r_u.Admin_text = Admin_text
+	}
+
+	is := Admin.Update_Admin(admin_r, "Admin_user", "Admin_name", "Admin_pass", "Admin_telephone", "Admin_mail", "Admin_text", "Admin_power")
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "修改失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	r_u.Admin_pass = "****************"
+	System.Add_UserLogs_T(admin_r.Admin_uuid, "用户管理", "操作", r_u)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
 func (c *UserController) User_Del() {
 func (c *UserController) User_Del() {
 	// 验证登录
 	// 验证登录
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
@@ -494,7 +869,11 @@ func (c *UserController) User_Del() {
 		c.Ctx.Redirect(302, "Login")
 		c.Ctx.Redirect(302, "Login")
 		return
 		return
 	}
 	}
-
+	if admin_r.Admin_power > 6 {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
 	Admin_uuid := c.GetString("Admin_uuid")
 	Admin_uuid := c.GetString("Admin_uuid")
 	if len(Admin_uuid) > 0 {
 	if len(Admin_uuid) > 0 {
 		admin_r_lod, err := Admin.Read_Admin_ByUuid(Admin_uuid)
 		admin_r_lod, err := Admin.Read_Admin_ByUuid(Admin_uuid)
@@ -523,6 +902,48 @@ func (c *UserController) User_Del() {
 
 
 }
 }
 
 
+func (c *UserController) V2_User_Del() {
+	// 验证登录
+	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
+	}
+	if admin_r.Admin_power > 6 {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	Admin_uuid := c.GetString("T_uuid")
+	if len(Admin_uuid) > 0 {
+		admin_r_lod, err := Admin.Read_Admin_ByUuid(Admin_uuid)
+		if err != nil {
+			c.Data["json"] = lib.JSONS{Code: 204, Msg: "e!"}
+			c.ServeJSON()
+			return
+		}
+		if admin_r_lod.Admin_master < admin_r.Admin_master {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "e!"}
+			c.ServeJSON()
+			return
+		}
+		admin_r_lod.T_State = 0
+		Admin.Update_Admin(admin_r_lod, "T_State")
+		//Admin.Update_Delete_Admin_ByAdmin_uuid(Admin_uuid)
+	} else {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "e!"}
+		c.ServeJSON()
+		return
+	}
+	System.Add_UserLogs_T(admin_r.Admin_uuid, "用户管理", "删除", Admin_uuid)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}
+
 // 权限管理
 // 权限管理
 func (c *UserController) Power_html() {
 func (c *UserController) Power_html() {
 	// 验证登录
 	// 验证登录
@@ -563,6 +984,56 @@ func (c *UserController) Power_html() {
 	c.TplName = "User/Power.html"
 	c.TplName = "User/Power.html"
 }
 }
 
 
+// 权限管理
+func (c *UserController) Power_List() {
+	// 验证登录
+	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
+	}
+	if admin_r.Id != 1 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+	if admin_r.Admin_master != 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+	type R_JSONS struct {
+		//必须的大写开头
+		Data      []Admin.AdminPower
+		Num       int64
+		Page      int
+		Page_size int
+	}
+
+	var r_jsons R_JSONS
+
+	page, _ := c.GetInt("page")
+	println(page)
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	Name := c.GetString("T_name")
+
+	r_jsons.Data, r_jsons.Num = Admin.Read_Power_List_ALL(page, Name)
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
 func (c *UserController) Power_() {
 func (c *UserController) Power_() {
 	// 验证登录
 	// 验证登录
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
@@ -587,6 +1058,40 @@ func (c *UserController) Power_() {
 
 
 	c.TplName = "User/Power-.html"
 	c.TplName = "User/Power-.html"
 }
 }
+func (c *UserController) Power_Get() {
+	// 验证登录
+	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
+	}
+	if admin_r.Id != 1 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+	if admin_r.Admin_master != 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	id, _ := c.GetInt("T_id")
+
+	if id == 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	Data, _ := Admin.Read_AdminPower_ById(id)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Data}
+	c.ServeJSON()
+	return
+}
+
 func (c *UserController) Power_Post() {
 func (c *UserController) Power_Post() {
 
 
 	var err error
 	var err error
@@ -711,6 +1216,185 @@ func (c *UserController) Power_Del() {
 
 
 }
 }
 
 
+func (c *UserController) Power_v2_Add() {
+	// 验证登录
+	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
+	}
+	if admin_r.Id != 1 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+	if admin_r.Admin_master != 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	Power_name := c.GetString("Power_name")
+	Power_Administration, _ := c.GetInt("Power_Administration")
+	Power_User_r, _ := c.GetInt("Power_User_r")
+	Power_User_entry, _ := c.GetInt("Power_User_entry")
+	Power_Device_r, _ := c.GetInt("Power_Device_r")
+	Power_Device_a, _ := c.GetInt("Power_Device_a")
+	Power_Device_Parameter_e, _ := c.GetInt("Power_Device_Parameter_e")
+	Power_DeviceSensor_Parameter_e, _ := c.GetInt("Power_DeviceSensor_Parameter_e")
+	Power_Device_Bind_e, _ := c.GetInt("Power_Device_Bind_e")
+	Power_DeviceSensor_Compensate_e, _ := c.GetInt("Power_DeviceSensor_Compensate_e")
+	Power_DeviceSensor_Class, _ := c.GetInt("Power_DeviceSensor_Class")
+	Power_DataScreen_r, _ := c.GetInt("Power_DataScreen_r")
+	Logs_Sys_r, _ := c.GetInt("Logs_Sys_r")
+	Logs_User_r, _ := c.GetInt("Logs_User_r")
+
+	var_ := Admin.AdminPower{
+		Power_name:                      Power_name,
+		Power_Administration:            Power_Administration,
+		Power_User_r:                    Power_User_r,
+		Power_User_entry:                Power_User_entry,
+		Power_Device_r:                  Power_Device_r,
+		Power_Device_a:                  Power_Device_a,
+		Power_Device_Parameter_e:        Power_Device_Parameter_e,
+		Power_DeviceSensor_Parameter_e:  Power_DeviceSensor_Parameter_e,
+		Power_Device_Bind_e:             Power_Device_Bind_e,
+		Power_DeviceSensor_Class:        Power_DeviceSensor_Class,
+		Power_DeviceSensor_Compensate_e: Power_DeviceSensor_Compensate_e,
+		Power_DataScreen_r:              Power_DataScreen_r,
+		Logs_Sys_r:                      Logs_Sys_r,
+		Logs_User_r:                     Logs_User_r,
+		T_State:                         1,
+	}
+
+	_, err := Admin.Add_AdminPower(var_)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	System.Add_UserLogs_T(admin_r.Admin_uuid, "权限管理", "权限操作", var_)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+func (c *UserController) Power_v2_Edit() {
+	// 验证登录
+	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
+	}
+	if admin_r.Id != 1 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+	if admin_r.Admin_master != 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+	id, _ := c.GetInt("T_id")
+
+	Power_name := c.GetString("Power_name")
+	Power_Administration, _ := c.GetInt("Power_Administration")
+	Power_User_r, _ := c.GetInt("Power_User_r")
+	Power_User_entry, _ := c.GetInt("Power_User_entry")
+	Power_Device_r, _ := c.GetInt("Power_Device_r")
+	Power_Device_a, _ := c.GetInt("Power_Device_a")
+	Power_Device_Parameter_e, _ := c.GetInt("Power_Device_Parameter_e")
+	Power_DeviceSensor_Parameter_e, _ := c.GetInt("Power_DeviceSensor_Parameter_e")
+	Power_Device_Bind_e, _ := c.GetInt("Power_Device_Bind_e")
+	Power_DeviceSensor_Compensate_e, _ := c.GetInt("Power_DeviceSensor_Compensate_e")
+	Power_DeviceSensor_Class, _ := c.GetInt("Power_DeviceSensor_Class")
+	Power_DataScreen_r, _ := c.GetInt("Power_DataScreen_r")
+	Logs_Sys_r, _ := c.GetInt("Logs_Sys_r")
+	Logs_User_r, _ := c.GetInt("Logs_User_r")
+	var_ := Admin.AdminPower{
+		Id:                              id,
+		Power_name:                      Power_name,
+		Power_Administration:            Power_Administration,
+		Power_User_r:                    Power_User_r,
+		Power_User_entry:                Power_User_entry,
+		Power_Device_r:                  Power_Device_r,
+		Power_Device_a:                  Power_Device_a,
+		Power_Device_Parameter_e:        Power_Device_Parameter_e,
+		Power_DeviceSensor_Parameter_e:  Power_DeviceSensor_Parameter_e,
+		Power_Device_Bind_e:             Power_Device_Bind_e,
+		Power_DeviceSensor_Class:        Power_DeviceSensor_Class,
+		Power_DeviceSensor_Compensate_e: Power_DeviceSensor_Compensate_e,
+		Power_DataScreen_r:              Power_DataScreen_r,
+		Logs_Sys_r:                      Logs_Sys_r,
+		Logs_User_r:                     Logs_User_r,
+		T_State:                         1,
+	}
+
+	err := Admin.Update_AdminPower_ById_Basics(var_)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
+		c.ServeJSON()
+		return
+	}
+	System.Add_UserLogs_T(admin_r.Admin_uuid, "权限管理", "权限操作", var_)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+func (c *UserController) Power_v2_Del() {
+	// 验证登录
+	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
+	}
+	if admin_r.Id != 1 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+	if admin_r.Admin_master != 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+	id, _ := c.GetInt("T_id")
+
+	if id > 0 {
+		admin_r_lod, err := Admin.Read_AdminPower_ById(id)
+		if err != nil {
+			c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
+			c.ServeJSON()
+			return
+		}
+		Admin_List_ALL_AdminPower := Admin.Read_Admin_List_ALL_AdminPower(admin_r_lod.Id)
+
+		if len(Admin_List_ALL_AdminPower) > 0 {
+			S_Msg := "无法删除!【"
+			for _, v := range Admin_List_ALL_AdminPower {
+				S_Msg += v.Admin_name + ","
+			}
+			c.Data["json"] = lib.JSONS{Code: 205, Msg: S_Msg + "】 属于该权限!删除这些账号后即可删除! "}
+			c.ServeJSON()
+			return
+		}
+		Admin.Update_Delete_AdminPower_Byid(admin_r_lod.Id)
+	} else {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "e!"}
+		c.ServeJSON()
+		return
+	}
+	System.Add_UserLogs(admin_r.Admin_uuid, "权限管理", "权限删除", strconv.Itoa(id))
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}
+
 // 同步面板
 // 同步面板
 func (c *UserController) Panel_plan_Syn() {
 func (c *UserController) Panel_plan_Syn() {
 	// 验证登录
 	// 验证登录

+ 9 - 3
controllers/lib/lib.go

@@ -37,13 +37,19 @@ type JSONS struct {
 	Msg  string
 	Msg  string
 	Data interface{} // 泛型
 	Data interface{} // 泛型
 }
 }
+type R_JSONS_List struct {
+	//必须的大写开头
+	Data      []interface{}
+	Num       int64
+	Page      int
+	Page_size int
+}
 type R_JSONS struct {
 type R_JSONS struct {
 	//必须的大写开头
 	//必须的大写开头
-	List      interface{}
-	Num       int
+	Data      interface{}
+	Num       int64
 	Page      int
 	Page      int
 	Page_size int
 	Page_size int
-	Pages     []Page_T
 }
 }
 
 
 // 登录验证
 // 登录验证

+ 1 - 1
lastupdate.tmp

@@ -1 +1 @@
-{"C:\\BZD\\Cold\\Cold_Api\\controllers":1667541171969316800}
+{"C:\\BZD\\Cold\\Cold_Api\\controllers":1668390880628656800}

+ 12 - 0
logs/logx/logx.log

@@ -0,0 +1,12 @@
+2022/11/08 16:34:07.640 [I]  2022-11-08 16:34:07>%!(EXTRA []interface {}=[============Nats init============])
+2022/11/08 16:34:07.925 [I]  2022-11-08 16:34:07>%!(EXTRA []interface {}=[nats OK!])
+2022/11/08 16:34:36.861 [I]  2022-11-08 16:34:36>%!(EXTRA []interface {}=[============Nats init============])
+2022/11/08 16:34:36.984 [I]  2022-11-08 16:34:36>%!(EXTRA []interface {}=[nats OK!])
+2022/11/08 16:50:12.010 [I]  2022-11-08 16:50:12>%!(EXTRA []interface {}=[============Nats init============])
+2022/11/08 16:50:12.134 [I]  2022-11-08 16:50:12>%!(EXTRA []interface {}=[nats OK!])
+2022/11/11 16:04:30.932 [I]  2022-11-11 16:04:30>%!(EXTRA []interface {}=[============Nats init============])
+2022/11/11 16:04:32.106 [I]  2022-11-11 16:04:32>%!(EXTRA []interface {}=[nats OK!])
+2022/11/14 09:54:56.828 [I]  2022-11-14 09:54:56>%!(EXTRA []interface {}=[============Nats init============])
+2022/11/14 09:54:57.757 [I]  2022-11-14 09:54:57>%!(EXTRA []interface {}=[nats OK!])
+2022/11/14 09:55:59.235 [I]  2022-11-14 09:55:59>%!(EXTRA []interface {}=[============Nats init============])
+2022/11/14 09:55:59.378 [I]  2022-11-14 09:55:59>%!(EXTRA []interface {}=[nats OK!])

+ 9 - 5
main.go

@@ -36,10 +36,15 @@ func main() {
 	HTTPPort_int, _ := strconv.Atoi(conf.HTTPPort)
 	HTTPPort_int, _ := strconv.Atoi(conf.HTTPPort)
 
 
 	beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
 	beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
-		AllowAllOrigins:  true,
-		AllowMethods:     []string{"*"},
-		AllowHeaders:     []string{"Origin", "Authorization", "Access-Control-Allow-Origin"},
-		ExposeHeaders:    []string{"Content-Length", "Access-Control-Allow-Origin"},
+		// 允许访问所有源
+		AllowAllOrigins: true,
+		// 可选参数"GET", "POST", "PUT", "DELETE", "OPTIONS" (*为所有)
+		AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
+		// 指的是允许的Header的种类
+		AllowHeaders: []string{"Origin", "Authorization", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
+		// 公开的HTTP标头列表
+		ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Access-Control-Allow-Headers", "Content-Type"},
+		// 如果设置,则允许共享身份验证凭据,例如cookie
 		AllowCredentials: true,
 		AllowCredentials: true,
 	}))
 	}))
 
 
@@ -73,7 +78,6 @@ func convertM(Devicesensor Device.DeviceSensor) (out string) {
 	//		} else {
 	//		} else {
 	//			return "温湿度传感器-1.png"
 	//			return "温湿度传感器-1.png"
 	//		}
 	//		}
-	//
 	//	}
 	//	}
 	//}
 	//}
 
 

+ 43 - 32
models/Admin/Admin.go

@@ -6,7 +6,9 @@ import (
 	"fmt"
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	"github.com/astaxie/beego/cache"
 	_ "github.com/astaxie/beego/cache/redis"
 	_ "github.com/astaxie/beego/cache/redis"
-	"github.com/beego/beego/v2/client/orm"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	_ "github.com/go-sql-driver/mysql"
 	"time"
 	"time"
 )
 )
 
 
@@ -174,23 +176,11 @@ func Add_Admin(m Admin) (id int64, err error) {
 //	return err
 //	return err
 //}
 //}
 
 
-// 修改
-func Update_Admin(r Admin, 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_Admin_Set(r) // Redis 更新缓存
-		return true
-	}
-
-	return false
-}
-
 func Read_Admin_Admin_user(Admin_user string) (error, Admin) {
 func Read_Admin_Admin_user(Admin_user string) (error, Admin) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	r := Admin{Admin_user: Admin_user}
-	err := o.Read(&r, "Admin_user") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	r := Admin{Admin_user: Admin_user, T_State: 1}
+	err := o.Read(&r, "Admin_user", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
@@ -199,8 +189,8 @@ func Read_Admin_Admin_user(Admin_user string) (error, Admin) {
 func ReadLogin_verification(Admin_user string, Admin_pass string) (error, Admin) {
 func ReadLogin_verification(Admin_user string, Admin_pass string) (error, Admin) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	r := Admin{Admin_user: Admin_user, Admin_pass: Admin_pass}
-	err := o.Read(&r, "Admin_user", "Admin_pass") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	r := Admin{Admin_user: Admin_user, Admin_pass: Admin_pass, T_State: 1}
+	err := o.Read(&r, "Admin_user", "Admin_pass", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
@@ -211,9 +201,9 @@ func ReadLogin_verification(Admin_user string, Admin_pass string) (error, Admin)
 // 修改
 // 修改
 func Update_Admin_ById_Basics(m Admin) (err error) {
 func Update_Admin_ById_Basics(m Admin) (err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	v := Admin{Admin_uuid: m.Admin_uuid}
+	v := Admin{Admin_uuid: m.Admin_uuid, T_State: 1}
 	// ascertain id exists in the database
 	// ascertain id exists in the database
-	if err = o.Read(&v, "Admin_uuid"); err == nil {
+	if err = o.Read(&v, "Admin_uuid", "T_State"); err == nil {
 		var num int64
 		var num int64
 		if len(m.Admin_name) > 0 {
 		if len(m.Admin_name) > 0 {
 			v.Admin_name = m.Admin_name
 			v.Admin_name = m.Admin_name
@@ -243,6 +233,17 @@ func Update_Admin_ById_Basics(m Admin) (err error) {
 	return err
 	return err
 }
 }
 
 
+// 修改
+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
+	}
+	return false
+}
+
 // 获取 ById
 // 获取 ById
 func Read_Admin_ByAdmin_uuid(Admin_uuid string) (e error, r Admin) {
 func Read_Admin_ByAdmin_uuid(Admin_uuid string) (e error, r Admin) {
 	if r, is := Redis_Admin_Get(Admin_uuid); is {
 	if r, is := Redis_Admin_Get(Admin_uuid); is {
@@ -252,7 +253,7 @@ func Read_Admin_ByAdmin_uuid(Admin_uuid string) (e error, r Admin) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(Admin))
 	qs := o.QueryTable(new(Admin))
-	e = qs.Filter("Admin_uuid", Admin_uuid).One(&r)
+	e = qs.Filter("Admin_uuid", Admin_uuid, "T_State", 1).One(&r)
 	return e, r
 	return e, r
 }
 }
 
 
@@ -264,8 +265,8 @@ func Read_Admin_ByUuid(Admin_uuid string) (r Admin, err error) {
 	}
 	}
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	r = Admin{Admin_uuid: Admin_uuid}
-	err = o.Read(&r, "Admin_uuid") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	r = Admin{Admin_uuid: Admin_uuid, T_State: 1}
+	err = o.Read(&r, "Admin_uuid", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
@@ -292,7 +293,7 @@ func Read_Admin_ById_x(Id int) (r Admin) {
 }
 }
 
 
 // 获取列表
 // 获取列表
-func Read_Admin_List_ALL_T(page int, Admin_name string, Admin_master int) (maps []orm.Params, cnt int64) {
+func Read_Admin_List_ALL_User(page int, Admin_name string, Admin_master int) (maps []Admin, cnt int64) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	// 也可以直接使用 Model 结构体作为表名
@@ -305,31 +306,41 @@ func Read_Admin_List_ALL_T(page int, Admin_name string, Admin_master int) (maps
 		offset = int64((page - 1) * conf.Page_size)
 		offset = int64((page - 1) * conf.Page_size)
 	}
 	}
 
 
-	qs.Limit(conf.Page_size, offset).Filter("Admin_name__icontains", Admin_name).Filter("Admin_master__gt", Admin_master).Filter("T_State", 1).OrderBy("-Id").Values(
-		&maps,
-		"Id", "Admin_uuid", "Admin_master", "Admin_name", "Admin_user", "CreateTime", "UpdateTime")
-
-	cnt, _ = qs.Filter("Admin_name__icontains", Admin_name).Filter("Admin_master__gt", Admin_master).Filter("T_State", 1).Count()
+	qs.Limit(conf.Page_size, offset).Filter("Admin_name__icontains", Admin_name).Exclude("Admin_master", 0).Filter("Admin_master", Admin_master).Filter("T_State", 1).OrderBy("-Id").All(&maps)
+	cnt, _ = qs.Filter("Admin_name__icontains", Admin_name).Filter("Admin_master", Admin_master).Filter("T_State", 1).Count()
 
 
 	return maps, cnt
 	return maps, cnt
 }
 }
 
 
 // 获取列表
 // 获取列表
-func Read_Admin_List_ALL_User(page int, Admin_name string, Admin_master int) (maps []Admin, cnt int64) {
+func Read_v2_Admin_List(Admin_master int, Admin_name string, page int, page_z int) (maps []Admin, cnt int64) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	// 也可以直接使用 Model 结构体作为表名
 
 
 	qs := o.QueryTable(new(Admin))
 	qs := o.QueryTable(new(Admin))
 	var offset int64
 	var offset int64
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
 	if page <= 1 {
 	if page <= 1 {
 		offset = 0
 		offset = 0
 	} else {
 	} else {
-		offset = int64((page - 1) * conf.Page_size)
+		offset = int64((page - 1) * page_z)
 	}
 	}
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_State", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
 
 
-	qs.Limit(conf.Page_size, offset).Filter("Admin_name__icontains", Admin_name).Exclude("Admin_master", 0).Filter("Admin_master", Admin_master).Filter("T_State", 1).OrderBy("-Id").All(&maps)
-	cnt, _ = qs.Filter("Admin_name__icontains", Admin_name).Filter("Admin_master", Admin_master).Filter("T_State", 1).Count()
+	if Admin_master > 0 {
+		cond1 = cond1.AndCond(cond.And("Admin_master", Admin_master))
+	}
+
+	if len(Admin_name) > 0 {
+		cond1 = cond1.AndCond(cond.Or("Admin_name__icontains", Admin_name).Or("Admin_user__icontains", Admin_name))
+	}
+
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
 
 
 	return maps, cnt
 	return maps, cnt
 }
 }

+ 73 - 0
models/Device/Device.go

@@ -57,6 +57,21 @@ type R_Device struct {
 	UpdateTime    time.Time        //auto_now 每次 model 保存时都会对时间自动更新
 	UpdateTime    time.Time        //auto_now 每次 model 保存时都会对时间自动更新
 }
 }
 
 
+type R2_Device struct {
+	T_sn        string // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_MSISDN    string //MSISDN
+	T_devName   string //设备名称
+	T_sensor    int    //  传感器数量
+	T_monitor   int    //  监控状态 1 监控  0 未监控
+	T_give      int    // 0 丢弃  1 正常
+	T_online    int    //  在线状态 1 在线  0 离线
+	T_online_4g int    //  在线状态4G 1 在线  0 离线
+	T_Dattery   int    //电量
+	T_protocol  int    //协议
+
+	UpdateTime time.Time //auto_now 每次 model 保存时都会对时间自动更新
+}
+
 type Device_task struct {
 type Device_task struct {
 	T_sn   string
 	T_sn   string
 	T_task string
 	T_task string
@@ -300,6 +315,64 @@ func Read_Device_ALL_bind_1(user_ Admin.Admin, page int, page_z int, T_sn string
 }
 }
 
 
 // 获取列表
 // 获取列表
+func Read_Device_v2_List(user_ Admin.Admin, T_name string, T_monitor string, T_online string, page int, page_z int) (r []R2_Device, cnt int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(Device))
+	var offset int64
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
+
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
+	//最高管理、一级账户、没有任何限制
+	if user_.Admin_master <= 1 {
+		T_Bind = ""
+	}
+
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_Bind__icontains", T_Bind).And("T_State", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+
+	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))
+	}
+
+	if len(T_monitor) > 0 {
+		T_monitor_int, err := strconv.Atoi(T_monitor)
+		if err == nil {
+			cond1 = cond1.AndCond(cond.And("T_monitor", T_monitor_int))
+		}
+	}
+
+	if T_online == "1" {
+		cond1 = cond1.AndCond(cond.And("T_online", 1))
+	} else if T_online == "2" {
+		cond1 = cond1.AndCond(cond.And("T_online", 2))
+	} else if T_online == "3" {
+		cond1 = cond1.AndCond(cond.And("T_online", 3))
+	} else if T_online == "0" {
+		cond1 = cond1.AndCond(cond.And("T_online", 0).Or("T_online", 2).Or("T_online", 3))
+	}
+
+	// 非内部权限 - 丢弃
+	if user_.Admin_power > 6 {
+		cond1 = cond1.AndCond(cond.And("T_give", 1))
+	}
+
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("Id").OrderBy("-T_give").All(&r)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	return r, cnt
+}
+
+// 获取列表
 func Read_Device_ALL_bind(user_ Admin.Admin) (r []Device) {
 func Read_Device_ALL_bind(user_ Admin.Admin) (r []Device) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()

+ 33 - 0
models/Device/DeviceClass.go

@@ -33,6 +33,18 @@ type DeviceClass struct {
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
 }
+type DeviceClass_R struct {
+	T_name             string `orm:"size(256);null"`  // 分类
+	T_Notice_wx        string `orm:"type(text);null"` //w微信公众号  appid/名字|
+	T_Notice_wx2       string `orm:"type(text);null"` //w微信公众号  appid/名字|
+	T_Notice_phone     string `orm:"type(text);null"` //p手机  1111111|
+	T_Notice_message   string `orm:"type(text);null"` //m短信   1111111|
+	T_Notice_mailbox   string `orm:"type(text);null"` //e邮箱    1111111|
+	T_Notice_mechanism string `orm:"type(text);null"` // 报警机制
+	// 湿度超下限预警,处理,w启用,数量,上限,~|
+	// 湿度超下限预警,0,0,0,0,0,0,0,0,0,0,0,0|
+
+}
 
 
 func (t *DeviceClass) TableName() string {
 func (t *DeviceClass) TableName() string {
 	return "DeviceClass" // 数据库名称   // ************** 替换 DesignClass **************
 	return "DeviceClass" // 数据库名称   // ************** 替换 DesignClass **************
@@ -97,6 +109,16 @@ func Redis_DeviceClass_DelK(key string) (err error) {
 }
 }
 
 
 // ---------------- 特殊方法 -------------------
 // ---------------- 特殊方法 -------------------
+func DeviceClassToDeviceClass_R(t DeviceClass) (r DeviceClass_R) {
+	r.T_name = t.T_name
+	r.T_Notice_wx = t.T_Notice_wx
+	r.T_Notice_wx2 = t.T_Notice_wx2
+	r.T_Notice_phone = t.T_Notice_phone
+	r.T_Notice_message = t.T_Notice_message
+	r.T_Notice_mailbox = t.T_Notice_mailbox
+	r.T_Notice_mechanism = t.T_Notice_mechanism
+	return r
+}
 
 
 // 获取 ById
 // 获取 ById
 func Read_Class_ById(id int) (r DeviceClass, err error) {
 func Read_Class_ById(id int) (r DeviceClass, err error) {
@@ -161,6 +183,17 @@ func Delete_Class_ById(id int) DeviceClass {
 	return v
 	return v
 }
 }
 
 
+// 修改
+func Update_Class(m DeviceClass, cols ...string) bool {
+	o := orm.NewOrm()
+	if num, err := o.Update(&m, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+		Redis_DeviceClass_Set(m)
+		return true
+	}
+	return false
+}
+
 // 删除
 // 删除
 func Delete_Class_ByUuid_All(user_ Admin.Admin) {
 func Delete_Class_ByUuid_All(user_ Admin.Admin) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()

+ 45 - 34
models/Device/DeviceParameter.go

@@ -14,28 +14,28 @@ type DeviceParameter struct {
 
 
 	T_sn string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
 	T_sn string `orm:"size(256);null"` // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
 
 
-	T_devName        string  `orm:"size(256);null"` //设备名称
-	T_uploadTime     int     `orm:"size(200);null"` //实时数据上传间隔
-	T_saveTime       int     `orm:"size(200);null"` //数据保存间隔
-	T_overrunSave    int     `orm:"size(200);null"` //数据超限保存间隔
-	T_overrunAlarm   int     `orm:"size(200);null"` //超限报警触发间隔
-	T_outageAlarm    int     `orm:"size(200);null"` //断电报警触发间隔
-	T_lostAlarm    int     `orm:"size(200);null"`  //传感器掉线报警触发间隔
-	T_warningTime    int     `orm:"size(200);null"` // 超限预警触发间隔
-	T_warningDelay   int     `orm:"size(200);null"` //超限预警延时
-	T_batteryLimit   int     `orm:"size(200);null"` //电池电量下限
-	T_tempPre        float32 `orm:"size(200);null"` //温度预警提前量
-	T_humPre         float32 `orm:"size(200);null"` //湿度预警提前量
-	T_enwarning      int     `orm:"size(2);null"`   //是否启动超限预警
-	T_company        string  `orm:"size(256);''"` //公司名称
-	T_btname        string  `orm:"size(256);''"` //蓝牙打印机名称
-	T_btserverID        string  `orm:"size(256);''"` //打印机服务号
-	T_btchar        string  `orm:"size(256);''"` //蓝牙特征码
-	T_decTotal        string  `orm:"size(256);''"` ////配置管理主机总终端数量
-	T_chDecTotal        string  `orm:"size(256);''"` //[18,19,21,12,30,0,0,0,0,0]  //配置每个通道数量[第1通道,第2通道…第10通道]
+	T_devName      string  `orm:"size(256);null"` //设备名称
+	T_uploadTime   int     `orm:"size(200);null"` //实时数据上传间隔
+	T_saveTime     int     `orm:"size(200);null"` //数据保存间隔
+	T_overrunSave  int     `orm:"size(200);null"` //数据超限保存间隔
+	T_overrunAlarm int     `orm:"size(200);null"` //超限报警触发间隔
+	T_outageAlarm  int     `orm:"size(200);null"` //断电报警触发间隔
+	T_lostAlarm    int     `orm:"size(200);null"` //传感器掉线报警触发间隔
+	T_warningTime  int     `orm:"size(200);null"` // 超限预警触发间隔
+	T_warningDelay int     `orm:"size(200);null"` //超限预警延时
+	T_batteryLimit int     `orm:"size(200);null"` //电池电量下限
+	T_tempPre      float32 `orm:"size(200);null"` //温度预警提前量
+	T_humPre       float32 `orm:"size(200);null"` //湿度预警提前量
+	T_enwarning    int     `orm:"size(2);null"`   //是否启动超限预警
+	T_company      string  `orm:"size(256);''"`   //公司名称
+	T_btname       string  `orm:"size(256);''"`   //蓝牙打印机名称
+	T_btserverID   string  `orm:"size(256);''"`   //打印机服务号
+	T_btchar       string  `orm:"size(256);''"`   //蓝牙特征码
+	T_decTotal     string  `orm:"size(256);''"`   ////配置管理主机总终端数量
+	T_chDecTotal   string  `orm:"size(256);''"`   //[18,19,21,12,30,0,0,0,0,0]  //配置每个通道数量[第1通道,第2通道…第10通道]
 
 
 	T_uuid      string    `orm:"size(256);null"`                                        //处理 人员
 	T_uuid      string    `orm:"size(256);null"`                                        //处理 人员
-	T_Msid int       `orm:"size(50);0"`                                             // 消息识别ID
+	T_Msid      int       `orm:"size(50);0"`                                            // 消息识别ID
 	T_SendState int       `orm:"size(2);0"`                                             // 发送状态  0 待发送   1 发送成功  2 发送失败  3 丢弃
 	T_SendState int       `orm:"size(2);0"`                                             // 发送状态  0 待发送   1 发送成功  2 发送失败  3 丢弃
 	T_State     int       `orm:"size(2);1"`                                             //  1 系统获取   2 用户提交
 	T_State     int       `orm:"size(2);1"`                                             //  1 系统获取   2 用户提交
 	CreateTime  time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	CreateTime  time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
@@ -55,16 +55,16 @@ func init() {
 // ---------------- 特殊方法 -------------------
 // ---------------- 特殊方法 -------------------
 
 
 // 添加
 // 添加
-func Add_DeviceParameter(m DeviceParameter) (DeviceParameter,bool) {
+func Add_DeviceParameter(m DeviceParameter) (DeviceParameter, bool) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 
 
 	id, err := o.Insert(&m)
 	id, err := o.Insert(&m)
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
-		return m,false
+		return m, false
 	}
 	}
 	m.Id = int(id)
 	m.Id = int(id)
-	return m,true
+	return m, true
 }
 }
 
 
 // 修改
 // 修改
@@ -78,7 +78,7 @@ func Update_DeviceParameter(r DeviceParameter, cols ...string) bool {
 }
 }
 
 
 // 获取列表
 // 获取列表
-func Read_DeviceParameter_SN_Msid(T_sn string,T_Msid int) (r DeviceParameter,err error) {
+func Read_DeviceParameter_SN_Msid(T_sn string, T_Msid int) (r DeviceParameter, err error) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	// 也可以直接使用 Model 结构体作为表名
@@ -87,8 +87,7 @@ func Read_DeviceParameter_SN_Msid(T_sn string,T_Msid int) (r DeviceParameter,err
 
 
 	err = qs.Filter("T_sn", T_sn).Filter("T_Msid", T_Msid).One(&r)
 	err = qs.Filter("T_sn", T_sn).Filter("T_Msid", T_Msid).One(&r)
 
 
-
-	return r,err
+	return r, err
 }
 }
 
 
 // 修改
 // 修改
@@ -102,7 +101,7 @@ func Update_DeviceParameter_(m DeviceParameter) (err error) {
 }
 }
 func DELETE_DeviceParameter(SN string) bool {
 func DELETE_DeviceParameter(SN string) bool {
 
 
-	sql := "DELETE FROM `culd`.`DeviceParameter` WHERE `t_sn` = '"+SN+"' "
+	sql := "DELETE FROM `culd`.`DeviceParameter` WHERE `t_sn` = '" + SN + "' "
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	_, err := o.Raw(sql).Exec()
 	_, err := o.Raw(sql).Exec()
 	if err != nil {
 	if err != nil {
@@ -110,6 +109,7 @@ func DELETE_DeviceParameter(SN string) bool {
 	}
 	}
 	return true
 	return true
 }
 }
+
 // 获取列表
 // 获取列表
 func Read_DeviceParameter_SN(T_sn string) (r []DeviceParameter) {
 func Read_DeviceParameter_SN(T_sn string) (r []DeviceParameter) {
 
 
@@ -121,11 +121,10 @@ func Read_DeviceParameter_SN(T_sn string) (r []DeviceParameter) {
 
 
 	cond1 := cond.And("T_sn", T_sn)
 	cond1 := cond.And("T_sn", T_sn)
 
 
-	cond1 = cond.AndCond(cond1).AndCond(cond.And("T_State", 1).Or("T_SendState",1))
+	cond1 = cond.AndCond(cond1).AndCond(cond.And("T_State", 1).Or("T_SendState", 1))
 
 
 	qs.Limit(1, 0).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
 	qs.Limit(1, 0).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
 
 
-
 	return r
 	return r
 }
 }
 
 
@@ -139,9 +138,22 @@ func Read_DeviceParameter_SN_T_State_1(T_sn string) (r []DeviceParameter) {
 
 
 	qs.Limit(3, 0).Filter("T_sn", T_sn).Filter("T_State", 2).OrderBy("-Id").All(&r)
 	qs.Limit(3, 0).Filter("T_sn", T_sn).Filter("T_State", 2).OrderBy("-Id").All(&r)
 
 
+	return r
+}
+
+// 获取列表
+func Read_DeviceParameter_SN_List(T_sn string) (r []DeviceParameter) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(DeviceParameter))
+
+	qs.Limit(3, 0).Filter("T_sn", T_sn).Filter("T_State", 2).OrderBy("-Id").All(&r)
 
 
 	return r
 	return r
 }
 }
+
 // 获取列表
 // 获取列表
 func Read_DeviceParameter_SN_T_SendState_0(T_sn string) (r []DeviceParameter) {
 func Read_DeviceParameter_SN_T_SendState_0(T_sn string) (r []DeviceParameter) {
 
 
@@ -152,7 +164,6 @@ func Read_DeviceParameter_SN_T_SendState_0(T_sn string) (r []DeviceParameter) {
 
 
 	qs.Limit(1, 0).Filter("T_sn", T_sn).Filter("T_State", 2).Filter("T_SendState", 0).OrderBy("-Id").All(&r)
 	qs.Limit(1, 0).Filter("T_sn", T_sn).Filter("T_State", 2).Filter("T_SendState", 0).OrderBy("-Id").All(&r)
 
 
-
 	return r
 	return r
 }
 }
 
 
@@ -160,7 +171,6 @@ func Read_DeviceParameter_SN_T_SendState_0(T_sn string) (r []DeviceParameter) {
 func Read_DeviceParameter_SN_T_SendState_0_sql() (maps []orm2.ParamsList) {
 func Read_DeviceParameter_SN_T_SendState_0_sql() (maps []orm2.ParamsList) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 
 
-
 	sql := "SELECT DISTINCT t_sn FROM `culd`.`DeviceParameter` WHERE `t__send_state` = '0' AND `t__state` = '2'"
 	sql := "SELECT DISTINCT t_sn FROM `culd`.`DeviceParameter` WHERE `t__send_state` = '0' AND `t__state` = '2'"
 
 
 	fmt.Println(sql)
 	fmt.Println(sql)
@@ -168,14 +178,15 @@ func Read_DeviceParameter_SN_T_SendState_0_sql() (maps []orm2.ParamsList) {
 
 
 	return maps
 	return maps
 }
 }
+
 // 获取最新数据
 // 获取最新数据
-func UPDATE_DeviceParameter_SN_T_SendState_2_sql(T_sn string)  {
+func UPDATE_DeviceParameter_SN_T_SendState_2_sql(T_sn string) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 
 
-	res, err := o.Raw("UPDATE DeviceParameter SET `t__send_state` = 3 WHERE `t_sn` LIKE '%"+T_sn+"%' AND `t__send_state` = '0' AND `t__state` = '2'").Exec()
+	res, err := o.Raw("UPDATE DeviceParameter SET `t__send_state` = 3 WHERE `t_sn` LIKE '%" + T_sn + "%' AND `t__send_state` = '0' AND `t__state` = '2'").Exec()
 	if err == nil {
 	if err == nil {
 		num, _ := res.RowsAffected()
 		num, _ := res.RowsAffected()
 		fmt.Println("mysql row affected nums: ", num)
 		fmt.Println("mysql row affected nums: ", num)
 	}
 	}
 
 
-}
+}

+ 81 - 2
models/Device/DeviceSensor.go

@@ -433,16 +433,15 @@ func Read_DeviceSensor_class_ALL_1(user_ Admin.Admin, T_Calss_id int, page int,
 
 
 	qs := o.QueryTable(new(DeviceSensor))
 	qs := o.QueryTable(new(DeviceSensor))
 	var offset int64
 	var offset int64
-
 	if page_z == 0 {
 	if page_z == 0 {
 		page_z = conf.Page_size
 		page_z = conf.Page_size
 	}
 	}
-
 	if page <= 1 {
 	if page <= 1 {
 		offset = 0
 		offset = 0
 	} else {
 	} else {
 		offset = int64((page - 1) * page_z)
 		offset = int64((page - 1) * page_z)
 	}
 	}
+
 	T_Calss := ""
 	T_Calss := ""
 	if T_Calss_id != 0 {
 	if T_Calss_id != 0 {
 		T_Calss = "C" + strconv.Itoa(T_Calss_id) + "|"
 		T_Calss = "C" + strconv.Itoa(T_Calss_id) + "|"
@@ -460,6 +459,86 @@ func Read_DeviceSensor_class_ALL_1(user_ Admin.Admin, T_Calss_id int, page int,
 	cond := orm.NewCondition()
 	cond := orm.NewCondition()
 	cond1 := cond.And("T_Bind__icontains", T_Bind).And("T_Calss__icontains", T_Calss).And("T_sn__icontains", SN_type).And("T_sn__icontains", T_sn).And("T_name__icontains", T_name).And("T_datashow", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
 	cond1 := cond.And("T_Bind__icontains", T_Bind).And("T_Calss__icontains", T_Calss).And("T_sn__icontains", SN_type).And("T_sn__icontains", T_sn).And("T_name__icontains", T_name).And("T_datashow", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
 	if len(T_sn) < 6 {
 	if len(T_sn) < 6 {
+		cond1 = cond1.AndCond(cond.And("T_give", 1))
+	}
+	// 非内部权限
+	println("user_.Admin_power:", user_.Admin_power)
+	if len(T_sn) < 6 {
+		cond1 = cond1.AndCond(cond.And("T_give", 1))
+	}
+
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	//
+	//qs.Limit(page_z, offset).Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", SN_type).Filter("T_sn__icontains", T_sn).Filter("T_name__icontains", T_name).OrderBy("T_sort").All(&r)
+	//cnt, _ = qs.Filter("T_Bind__icontains", T_Bind).Filter("T_Calss__icontains", T_Calss).Filter("T_sn__icontains", T_sn).Filter("T_sn__icontains", SN_type).Filter("T_name__icontains", T_name).Count()
+
+	//for i, v := range r {
+	//
+	//	// 提前最新数据
+	//	DeviceSensorData, is := Read_DeviceSensorData_ById_New(v.T_sn, v.T_id)
+	//	if !is {
+	//		continue
+	//	}
+	//	if DeviceSensorData.T_time.After(v.T_time) {
+	//		//fmt.Println(v.T_sn, v.T_id, DeviceSensorData.T_time)
+	//		r[i].T_t = DeviceSensorData.T_t
+	//		r[i].T_rh = DeviceSensorData.T_rh
+	//		r[i].T_time = DeviceSensorData.T_time
+	//	}
+	//
+	//}
+	for _, v := range r {
+		DeviceSensor_r = append(DeviceSensor_r, DeviceSensorToDeviceSensor_R(v))
+	}
+	return DeviceSensor_r, cnt
+	//return r, cnt
+}
+
+// 获取列表
+func Read_DeviceSensor_v2_List(user_ Admin.Admin, T_sn string, T_name string, T_Calss_id int, page int, page_z int) (DeviceSensor_r []DeviceSensor_R, cnt int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(DeviceSensor))
+	var offset int64
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
+	if user_.Admin_master <= 1 {
+		T_Bind = ""
+	}
+
+	fmt.Println("T_Bind:", T_Bind)
+
+	var r []DeviceSensor
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_Bind__icontains", T_Bind).And("T_name__icontains", T_name).And("T_datashow", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+
+	if T_Calss_id > 0 {
+		T_Calss := "C" + strconv.Itoa(T_Calss_id) + "|"
+		fmt.Println("T_Calss:", T_Calss)
+		cond1 = cond1.AndCond(cond.And("T_Calss__icontains", T_Calss))
+	}
+
+	if len(T_sn) < 6 {
+		cond1 = cond1.AndCond(cond.And("T_sn__icontains", T_sn))
+	}
+
+	if len(T_sn) < 6 {
+		cond1 = cond1.AndCond(cond.And("T_sn__icontains", T_sn))
+	}
+
+	if len(T_sn) < 6 {
 		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_give", 1))
 		cond1 = cond.AndCond(cond1).AndCond(cond.And("T_give", 1))
 	}
 	}
 	// 非内部权限
 	// 非内部权限

+ 19 - 48
models/Device/DeviceSensorParameter.go

@@ -3,7 +3,6 @@ package Device
 import (
 import (
 	"fmt"
 	"fmt"
 	"github.com/beego/beego/v2/adapter/orm"
 	"github.com/beego/beego/v2/adapter/orm"
-	orm2 "github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
 	_ "github.com/go-sql-driver/mysql"
 	"time"
 	"time"
 )
 )
@@ -27,7 +26,7 @@ type DeviceSensorParameter struct {
 	T_free    int     `orm:"size(2);1"`      // free:监测点是否为闲置状态(空库,只监测不报警)
 	T_free    int     `orm:"size(2);1"`      // free:监测点是否为闲置状态(空库,只监测不报警)
 
 
 	T_uuid      string `orm:"size(256);null"` //处理 人员
 	T_uuid      string `orm:"size(256);null"` //处理 人员
-	T_Msid      int    `orm:"size(50);0"`     // 消息识别ID
+	T_Msid      int64  `orm:"size(50);0"`     // 消息识别ID
 	T_SendState int    `orm:"size(2);0"`      // 发送状态  0 待发送   1 发送成功  2 失败  3 覆盖
 	T_SendState int    `orm:"size(2);0"`      // 发送状态  0 待发送   1 发送成功  2 失败  3 覆盖
 	T_State     int    `orm:"size(2);1"`      //  1 系统获取   2 用户提交
 	T_State     int    `orm:"size(2);1"`      //  1 系统获取   2 用户提交
 
 
@@ -59,18 +58,32 @@ func Read_DeviceSensorParameter_SN_T_id(T_sn string, T_id int) (r []DeviceSensor
 	return r
 	return r
 }
 }
 
 
+// 获取列表
+func Read_DeviceSensorParameter_List(T_sn string, T_id int) (r []DeviceSensorParameter) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(DeviceSensorParameter))
+
+	qs.Limit(3, 0).Filter("T_sn", T_sn).Filter("T_id", T_id).Filter("T_State", 2).OrderBy("-Id").All(&r)
+
+	return r
+}
+
 // 添加
 // 添加
-func Add_DeviceSensorParameter(m DeviceSensorParameter) (int64 ,bool) {
+func Add_DeviceSensorParameter(m DeviceSensorParameter) (int64, bool) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 
 
 	id, err := o.Insert(&m)
 	id, err := o.Insert(&m)
 	if err != nil {
 	if err != nil {
 		fmt.Println(err)
 		fmt.Println(err)
-		return id,false
+		return id, false
 	}
 	}
 
 
-	return id,true
+	return id, true
 }
 }
+
 // 修改
 // 修改
 func Update_DeviceSensorParameter(r DeviceSensorParameter, cols ...string) bool {
 func Update_DeviceSensorParameter(r DeviceSensorParameter, cols ...string) bool {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
@@ -81,23 +94,6 @@ func Update_DeviceSensorParameter(r DeviceSensorParameter, cols ...string) bool
 	return false
 	return false
 }
 }
 
 
-// 获取列表
-func Read_DeviceSensorParameter_SN_T_id_Msid(T_sn string, T_Msid int) ( DeviceSensorParameter, bool) {
-
-	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-	var r []DeviceSensorParameter
-	qs := o.QueryTable(new(DeviceSensorParameter))
-
-	qs.Filter("T_sn", T_sn).Filter("T_Msid", T_Msid).OrderBy("-Id").All(&r)
-
-	if len(r) == 0{
-		return DeviceSensorParameter{}, false
-	}
-
-	return r[0], true
-}
-
 // 修改
 // 修改
 func Update_DeviceSensorParameter_(m []DeviceSensorParameter) (err error) {
 func Update_DeviceSensorParameter_(m []DeviceSensorParameter) (err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
@@ -112,7 +108,7 @@ func Update_DeviceSensorParameter_(m []DeviceSensorParameter) (err error) {
 }
 }
 func DELETE_DeviceSensorParameter(SN string) bool {
 func DELETE_DeviceSensorParameter(SN string) bool {
 
 
-	sql := "DELETE FROM `culd`.`DeviceSensorParameter` WHERE `t_sn` = '"+SN+"' "
+	sql := "DELETE FROM `culd`.`DeviceSensorParameter` WHERE `t_sn` = '" + SN + "' "
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	_, err := o.Raw(sql).Exec()
 	_, err := o.Raw(sql).Exec()
 	if err != nil {
 	if err != nil {
@@ -120,28 +116,3 @@ func DELETE_DeviceSensorParameter(SN string) bool {
 	}
 	}
 	return true
 	return true
 }
 }
-
-// 获取最新数据
-func UPDATE_DeviceSensorParamete_SN_T_SendState_2_sql(T_sn string,T_id string)  {
-	o := orm.NewOrm()
-
-	res, err := o.Raw("UPDATE DeviceSensorParameter SET `t__send_state` = 3 WHERE `t_sn` LIKE '%"+T_sn+"%' AND `t_id` = "+T_id+" AND `t__send_state` = '0' AND `t__state` = '2'").Exec()
-	if err == nil {
-		num, _ := res.RowsAffected()
-		fmt.Println("mysql row affected nums: ", num)
-	}
-
-}
-
-// 获取最新数据
-func Read_DeviceSensorParameter_SN_T_SendState_0_sql(sn string) (maps []orm2.ParamsList) {
-	o := orm.NewOrm()
-
-
-	sql := "SELECT DISTINCT t_sn,t_id FROM `culd`.`DeviceSensorParameter` WHERE  `t_sn` LIKE '%"+sn+"%' AND  `t__send_state` = '0' AND `t__state` = '2'"
-
-	fmt.Println(sql)
-	o.Raw(sql).ValuesList(&maps)
-
-	return maps
-}

+ 85 - 0
models/Device/DeviceWarning.go

@@ -8,6 +8,7 @@ import (
 	orm2 "github.com/beego/beego/v2/client/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
 	_ "github.com/go-sql-driver/mysql"
 	"strconv"
 	"strconv"
+	"strings"
 	"time"
 	"time"
 )
 )
 
 
@@ -39,6 +40,22 @@ type DeviceWarning struct {
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
 }
 
 
+// 模板
+type DeviceWarning_R struct {
+	T_sn     string    `orm:"size(256);null"`        // 设备序列号 KF开头,环境监测主机。 YD开头,温途监测主机
+	T_Id     int       `orm:"size(200);null"`        //  传感器 ID
+	T_Name   string    `orm:"size(256);null"`        // 传感器  温度探头1
+	T_T      float32   `orm:"size(20);null"`         //  湿度下限
+	T_RH     float32   `orm:"size(20);null"`         //  湿度上限
+	T_Title  string    `orm:"size(256);null"`        // 报警标题 温度超上限报警
+	T_Addr   string    `orm:"size(256);null"`        //  地址    车载环境监测仪
+	T_Remark string    `orm:"size(256);null"`        // 备注
+	T_Ut     time.Time `orm:"type(timestamp);null;"` // 采集时间
+	T_Text   string    `orm:"size(256);null"`        // 备注
+	T_Log    []string  `orm:"type(text);null"`       // 处理日志
+
+}
+
 func (t *DeviceWarning) TableName() string {
 func (t *DeviceWarning) TableName() string {
 	return "DeviceWarning" // 数据库名称   // ************** 替换 FormulaList **************
 	return "DeviceWarning" // 数据库名称   // ************** 替换 FormulaList **************
 }
 }
@@ -50,6 +67,20 @@ func init() {
 }
 }
 
 
 // ---------------- 特殊方法 -------------------
 // ---------------- 特殊方法 -------------------
+func DeviceWarningToDeviceWarning_R(t DeviceWarning) (r DeviceWarning_R) {
+	r.T_sn = t.T_sn
+	r.T_Id = t.T_Id
+	r.T_Name = t.T_Name
+	r.T_T = t.T_T
+	r.T_RH = t.T_RH
+	r.T_Title = t.T_Title
+	r.T_Addr = t.T_Addr
+	r.T_Remark = t.T_Remark
+	r.T_Ut = t.T_Ut
+	r.T_Text = t.T_Text
+	r.T_Log = strings.Split(t.T_Log, "\n")
+	return r
+}
 
 
 // 获取 ById
 // 获取 ById
 func Read_DeviceWarning_ById(id int) (r DeviceWarning) {
 func Read_DeviceWarning_ById(id int) (r DeviceWarning) {
@@ -187,6 +218,60 @@ func Read_DeviceWarning_1(user_ Admin.Admin, page int, T_sn string, T_Name strin
 	//return r, cnt
 	//return r, cnt
 }
 }
 
 
+// 获取列表
+func Read_DeviceWarning(user_ Admin.Admin, T_sn string, T_id string, T_title string, Time_start_ string, Time_end_ string, page int, page_z int) (r []DeviceWarning, cnt int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(DeviceWarning))
+	var offset int64
+	if page_z == 0 {
+		page_z = conf.Page_size
+	}
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
+	if user_.Admin_master <= 1 {
+		T_Bind = ""
+	}
+	fmt.Println("T_Bind:", T_Bind)
+
+	cond := orm.NewCondition()
+
+	cond1 := cond.And("T_State__gt", 0)
+
+	if len(T_Bind) > 0 {
+		cond1 = cond1.And("T_Bind__icontains", T_Bind)
+	}
+	if len(T_title) > 0 {
+		cond1 = cond1.And("T_Title", T_title)
+	}
+
+	if len(T_sn) > 0 {
+		cond1 = cond1.And("T_sn", T_sn)
+	}
+	if len(T_id) > 0 {
+		cond1 = cond1.And("T_Id", T_id)
+	}
+
+	if len(Time_start_) > 0 {
+		cond1 = cond1.And("T_Ut__gte", Time_start_)
+	}
+	if len(Time_end_) > 0 {
+		cond1 = cond1.And("T_Ut__lte", Time_end_)
+	}
+
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-T_Ut").All(&r)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	return r, cnt
+
+}
+
 //
 //
 func Read_Warning_ALL_T_Bind_TIME_1d_Count(user_ Admin.Admin, T_sn string) int {
 func Read_Warning_ALL_T_Bind_TIME_1d_Count(user_ Admin.Admin, T_sn string) int {
 	o := orm.NewOrm()
 	o := orm.NewOrm()

+ 77 - 0
routers/v3.go

@@ -0,0 +1,77 @@
+package routers
+
+import (
+	"Cold_Api/controllers"
+	"Cold_Api/controllers/WebSocket"
+	beego "github.com/beego/beego/v2/server/web"
+)
+
+func init() {
+	var version = "/v3"
+
+	// 公共
+	beego.Router(version+"/ws/join", &WebSocket.WebSocketController{}, "get:Join")
+	beego.Router(version+"/UpFile", &controllers.UpFileController{}, "*:UpFile")
+
+	//---------------------------------- 用户管理
+	// 用户
+	beego.Router(version+"/Login_verification", &controllers.AdminController{}, "*:Login_verification")
+	beego.Router(version+"/User/Info", &controllers.UserController{}, "*:User_v2_Info")   // 用户列表
+	beego.Router(version+"/User/List", &controllers.UserController{}, "*:V2_User_List")   // 用户列表
+	beego.Router(version+"/User/Get", &controllers.UserController{}, "*:User_v2_Get")     // 获取用户信息
+	beego.Router(version+"/User/Add", &controllers.UserController{}, "*:User_v2_Add")     //
+	beego.Router(version+"/User/Edit", &controllers.UserController{}, "*:User_v2_Edit")   //
+	beego.Router(version+"/User/AEdit", &controllers.UserController{}, "*:User_v2_AEdit") //
+	beego.Router(version+"/User/ADel", &controllers.UserController{}, "*:V2_User_Del")    //
+	beego.Router(version+"/User/Entry", &controllers.UserController{}, "*:V2_User_Entry") // 获取未读消息
+
+	// 权限
+	beego.Router(version+"/Power/List", &controllers.UserController{}, "*:Power_List")    //
+	beego.Router(version+"/Power/Get", &controllers.UserController{}, "*:Power_Get")      //
+	beego.Router(version+"/Power/Add", &controllers.UserController{}, "*:Power_v2_Add")   //
+	beego.Router(version+"/Power/Edit", &controllers.UserController{}, "*:Power_v2_Edit") //
+	beego.Router(version+"/Power/Del", &controllers.UserController{}, "*:Power_v2_Del")   //
+
+	//---------------------------------- 设备管理
+
+	// 设备
+	beego.Router(version+"/Device/List", &controllers.DeviceController{}, "*:Device_v2_List")                                      //
+	beego.Router(version+"/Device/Add", &controllers.DeviceController{}, "*:Device_Post")                                          //
+	beego.Router(version+"/Device/Edit", &controllers.DeviceController{}, "*:Device_Edit")                                         //
+	beego.Router(version+"/Device/Del", &controllers.DeviceController{}, "*:Device_Del")                                           //
+	beego.Router(version+"/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_v2_DeviceSensorParameter") //
+	beego.Router(version+"/Device/DeviceTask_Post", &controllers.DeviceController{}, "*:DeviceTask_Post")                          //
+
+	beego.Router(version+"/Device/Parameter_List", &controllers.DeviceController{}, "*:Device_v2_Parameter_List") //
+	beego.Router(version+"/Device/Parameter_Pu", &controllers.DeviceController{}, "*:Device_v2_Parameter_Pu")     //
+
+	// 权限绑定
+	beego.Router(version+"/Device/Bind_Add", &controllers.DeviceController{}, "*:V2_DeviceBind_Add") //
+	beego.Router(version+"/Device/Bind_Del", &controllers.DeviceController{}, "*:V2_DeviceBind_Del") //
+
+	// 设备-传感器
+	beego.Router(version+"/DeviceSensor/List", &controllers.DeviceController{}, "*:DeviceSensor_v2_List") //
+	beego.Router(version+"/DeviceSensor/Edit", &controllers.DeviceController{}, "*:DeviceSensor_Edit")    //
+	beego.Router(version+"/DeviceSensor/Del", &controllers.DeviceController{}, "*:DeviceSensor_Del")      //
+
+	beego.Router(version+"/DeviceSensor/Parameter_List", &controllers.DeviceController{}, "*:DeviceSensor_v2_Parameter_List") //
+	beego.Router(version+"/DeviceSensor/Parameter_Pu", &controllers.DeviceController{}, "*:DeviceSensor_v2_Parameter_Pu")     //
+
+	//分类绑定
+	beego.Router(version+"/Class/List", &controllers.DeviceController{}, "*:V2_Class_List") // 获取未读消息
+	beego.Router(version+"/Class/Get", &controllers.DeviceController{}, "*:V2_Class_Get")   // 获取未读消息
+	beego.Router(version+"/Class/Add", &controllers.DeviceController{}, "*:V2_Class_Add")   // 获取未读消息
+	beego.Router(version+"/Class/Edit", &controllers.DeviceController{}, "*:V2_Class_Edit") // 获取未读消息
+	beego.Router(version+"/Class/Del", &controllers.DeviceController{}, "*:V2_Class_Del")   // 获取未读消息
+
+	beego.Router(version+"/Class/Bind_Del", &controllers.DeviceController{}, "*:V2_ClassBind_Del") // 获取未读消息
+	beego.Router(version+"/Class/Bind_Add", &controllers.DeviceController{}, "*:V2_ClassBind_Add") // 获取未读消息
+
+	// 设备报警
+	beego.Router(version+"/DeviceWarning/List", &controllers.DeviceController{}, "*:V2_DeviceWarning_List")          // 获取未读消息
+	beego.Router(version+"/DeviceWarning/Get", &controllers.DeviceController{}, "*:V2_DeviceWarning_Get")            // 获取未读消息
+	beego.Router(version+"/DeviceWarning/Edit", &controllers.DeviceController{}, "*:V2_DeviceWarning_Post")          // 获取未读消息
+	beego.Router(version+"/DeviceWarning/Del", &controllers.DeviceController{}, "*:V2_DeviceWarning_Del")            // 获取未读消息
+	beego.Router(version+"/DeviceWarning/ToExcel", &controllers.DeviceController{}, "*:V2_DeviceWarning_Data_Excel") // 获取未读消息
+
+}

+ 1 - 1
server.pid

@@ -1 +1 @@
-13468
+19576

+ 4 - 4
views/Data/DataScreen.html

@@ -698,6 +698,7 @@
 
 
     // 各公司物流端使用次数占比 - 饼状图
     // 各公司物流端使用次数占比 - 饼状图
     function YD_1_pie(Data) {
     function YD_1_pie(Data) {
+        if(Data == null) return
         datax = []
         datax = []
         var myechart = echarts.init($('.pie')[1]);
         var myechart = echarts.init($('.pie')[1]);
         for (let i = 0; i < Data.length; i++) {
         for (let i = 0; i < Data.length; i++) {
@@ -805,6 +806,7 @@
     // 运输端数据统计
     // 运输端数据统计
     var setInterval_x
     var setInterval_x
     function YD_1_2(Data) {
     function YD_1_2(Data) {
+        console.log("YD_1_2:",Data)
         var data = {
         var data = {
             t1: { orders: Data.Device_YD_1_Count , amount: Data.Device_YD_1_Count_use },
             t1: { orders: Data.Device_YD_1_Count , amount: Data.Device_YD_1_Count_use },
             t2: { orders: Data.Device_YD_2_Count , amount: Data.Device_YD_2_Count_use }
             t2: { orders: Data.Device_YD_2_Count , amount: Data.Device_YD_2_Count_use }
@@ -848,7 +850,7 @@
     var Map_list = new Map();
     var Map_list = new Map();
     function Amap_inte() {
     function Amap_inte() {
         map = new AMap.Map('container', {
         map = new AMap.Map('container', {
-            resizeEnable: true,
+            resizeEnable: true,////是否监控地图容器尺寸变化
             center: [104.101765,41.561402],
             center: [104.101765,41.561402],
             zoom: 4,
             zoom: 4,
             features: ['bg', 'road', 'building', 'point'], // 设置地图显示要素(Features)  区域面(bg)  道路(road)  建筑物(building)  标注(point)
             features: ['bg', 'road', 'building', 'point'], // 设置地图显示要素(Features)  区域面(bg)  道路(road)  建筑物(building)  标注(point)
@@ -856,7 +858,7 @@
         });
         });
 
 
         // 样式
         // 样式
-        var styleName = "amap://styles/darkblue";
+        var styleName = "amap://styles/normal";
         map.setMapStyle(styleName);
         map.setMapStyle(styleName);
 
 
         //map_list.get("sn1").T_Marker.setPosition([116.474203,39.970199])
         //map_list.get("sn1").T_Marker.setPosition([116.474203,39.970199])
@@ -1261,7 +1263,6 @@
         // 图标取图偏移量
         // 图标取图偏移量
         //imageOffset: new AMap.Pixel(-9, -3)
         //imageOffset: new AMap.Pixel(-9, -3)
     });
     });
-
     var Icon_2_1 = new AMap.Icon({
     var Icon_2_1 = new AMap.Icon({
         // 图标尺寸
         // 图标尺寸
         size: new AMap.Size(60, 60),
         size: new AMap.Size(60, 60),
@@ -1282,7 +1283,6 @@
         // 图标取图偏移量
         // 图标取图偏移量
         //imageOffset: new AMap.Pixel(-9, -3)
         //imageOffset: new AMap.Pixel(-9, -3)
     });
     });
-
 </script>
 </script>
 <style>
 <style>
 
 

+ 2 - 2
views/GoodsOrder/GoodsOrder-.html

@@ -175,8 +175,8 @@
                                             time: 2000
                                             time: 2000
                                         });
                                         });
                                         //关闭当前frame
                                         //关闭当前frame
-                                        parent.layer.close(parent.layer.getFrameIndex(window.name));
-                                        parent.location.reload();
+                                        // parent.layer.close(parent.layer.getFrameIndex(window.name));
+                                        // parent.location.reload();
 
 
                                         form.render('select');
                                         form.render('select');
                                         // return false;
                                         // return false;

Some files were not shown because too many files changed in this diff