Bladeren bron

update: 优化权限管理

zoie 2 jaren geleden
bovenliggende
commit
a4c550f2e7

+ 2 - 2
Nats/Nats.go

@@ -309,12 +309,12 @@ func NatsInit() {
 		power, _ := Account.Read_Power_ById(t_Req.Power_Id)
 		power, _ := Account.Read_Power_ById(t_Req.Power_Id)
 
 
 		flag := false
 		flag := false
-		if power.T_Menu_Bind == "*" {
+		if power.T_menu == "*" {
 			flag = true
 			flag = true
 		}
 		}
 
 
 		if !flag {
 		if !flag {
-			api := Account.Read_API_List_ByPower_Id(power.Id, power.T_Menu_Bind)
+			api := Account.Read_API_List_ByPower_Id(power.Id, power.T_menu)
 			for _, v := range api {
 			for _, v := range api {
 				if conf.Version+v.T_uri == t_Req.Req_Url {
 				if conf.Version+v.T_uri == t_Req.Req_Url {
 					flag = true
 					flag = true

+ 23 - 12
controllers/Device.go

@@ -6,6 +6,7 @@ import (
 	"Cold_Api/controllers/lib"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/models/Company"
 	"Cold_Api/models/Company"
 	"Cold_Api/models/Device"
 	"Cold_Api/models/Device"
+	"Cold_Api/models/Product"
 	"Cold_Api/models/System"
 	"Cold_Api/models/System"
 	"Cold_Api/models/Warning"
 	"Cold_Api/models/Warning"
 	"fmt"
 	"fmt"
@@ -52,21 +53,16 @@ func (c *DeviceController) Device_List() {
 	}
 	}
 
 
 	Name := c.GetString("T_name")
 	Name := c.GetString("T_name")
-	T_pid, T_pid_err := c.GetInt("T_pid")
 	T_online := c.GetString("T_online")
 	T_online := c.GetString("T_online")
 	T_monitor := c.GetString("T_monitor")
 	T_monitor := c.GetString("T_monitor")
+	T_type, _ := c.GetInt("T_type")
 
 
-	if admin_r.T_pid > 0 {
-		T_pid = admin_r.T_pid
-	} else {
-		if T_pid_err != nil || T_pid <= 0 {
-			c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_pid Err!"}
-			c.ServeJSON()
-			return
-		}
+	T_pid := admin_r.T_pid
+	if T_pid == 0 {
+		T_pid, _ = c.GetInt("T_pid")
 	}
 	}
-
-	r_jsons.Device_lite, r_jsons.Num = Device.Read_Device_List(T_pid, Name, T_monitor, T_online, page, page_z)
+	Product.Read_ProductType_All()
+	r_jsons.Device_lite, r_jsons.Num = Device.Read_Device_List(T_pid, Name, T_monitor, T_online, T_type, page, page_z)
 
 
 	r_jsons.Page = page
 	r_jsons.Page = page
 	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
 	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
@@ -1102,6 +1098,21 @@ func (c *DeviceController) DeviceWarningList_T_Tips() {
 	return
 	return
 }
 }
 
 
+// 告警类型列表
+func (c *DeviceController) WarningType_List_All() {
+	// 验证登录
+	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Warning.Read_WarningType_All()}
+	c.ServeJSON()
+	return
+}
+
 // 设备分类 ------------------------------------------
 // 设备分类 ------------------------------------------
 func (c *DeviceController) CompanyClass_List() {
 func (c *DeviceController) CompanyClass_List() {
 	// 验证登录
 	// 验证登录
@@ -2002,7 +2013,7 @@ func (c *DeviceController) NoticeBind_Del() {
 }
 }
 
 
 // 设备类型
 // 设备类型
-func (c *DeviceController) DeviceType_All() {
+func (c *DeviceController) DeviceType_List_All() {
 	type R_JSONS struct {
 	type R_JSONS struct {
 		//必须的大写开头
 		//必须的大写开头
 		Data      []Device.DeviceType
 		Data      []Device.DeviceType

+ 130 - 70
controllers/User.go

@@ -5,6 +5,7 @@ import (
 	"Cold_Api/controllers/lib"
 	"Cold_Api/controllers/lib"
 	"Cold_Api/models/Account"
 	"Cold_Api/models/Account"
 	"Cold_Api/models/System"
 	"Cold_Api/models/System"
+	"Cold_Api/models/Warning"
 	beego "github.com/beego/beego/v2/server/web"
 	beego "github.com/beego/beego/v2/server/web"
 	uuid "github.com/satori/go.uuid"
 	uuid "github.com/satori/go.uuid"
 	"math"
 	"math"
@@ -35,6 +36,17 @@ func (c *UserController) Company_List() {
 	return
 	return
 }
 }
 
 
+func (c *UserController) Company_All() {
+
+	var r_jsons lib.R_JSONS
+
+	r_jsons.Data = Account.Read_Company_All()
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
 func (c *UserController) Company_Add() {
 func (c *UserController) Company_Add() {
 
 
 	// 验证登录
 	// 验证登录
@@ -226,43 +238,73 @@ func (c *UserController) User_Info() {
 		return
 		return
 	}
 	}
 
 
-	T_pid := admin_r.T_pid
-	if T_pid == 0 {
-		T_pid, _ = c.GetInt("T_pid")
-	}
 	type User_ struct {
 	type User_ struct {
-		T_uuid  string
-		T_pid   int
-		T_power int
-		T_user  string
-		T_name  string
-		T_phone string
-		T_mail  string
-		T_wx    string
-		Power   Account.Power // 权限
+		User Account.Admin_R
+		//Power Account.Power // 权限
 		//Menu    map[string]Account.Menu_R // 菜单
 		//Menu    map[string]Account.Menu_R // 菜单
-		Menu []Account.Menu // 菜单
+		//Menu []Account.Menu // 菜单
 	}
 	}
 
 
 	Admin_r := User_{}
 	Admin_r := User_{}
-
-	Admin_r.T_uuid = admin_r.T_uuid
-	Admin_r.T_pid = admin_r.T_pid
-	Admin_r.T_power = admin_r.T_power
-	Admin_r.T_user = admin_r.T_user
-	Admin_r.T_name = admin_r.T_name
-	Admin_r.T_phone = admin_r.T_phone
-	Admin_r.T_mail = admin_r.T_mail
-	Admin_r.T_wx = admin_r.T_wx
-	Power, _ := Account.Read_Power_ById(admin_r.T_power)
-	Admin_r.Power = Power
-	Admin_r.Menu = Account.Read_Menu_Tree(Power.T_Menu_Bind, T_pid)
+	Admin_r.User = Account.AdminToAdmin_R(admin_r)
+	//Admin_r.Power, _ = Account.Read_Power_ById(admin_r.T_power)
+	//Admin_r.Menu = Account.Read_Menu_Tree(Power.T_menu, T_pid)
 
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Admin_r}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Admin_r}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
 }
 }
 
 
+func (c *UserController) User_Post() {
+	// 验证登录
+	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
+	}
+
+	T_name := c.GetString("T_name")
+	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_name) > 0 {
+		admin_r.T_name = T_name
+	}
+	if len(T_pass) > 0 {
+		admin_r.T_pass = T_pass
+	}
+	if len(T_phone) > 0 {
+		admin_r.T_phone = T_phone
+	}
+	if len(T_mail) > 0 {
+		admin_r.T_mail = T_mail
+	}
+	if len(T_wx) > 0 {
+		admin_r.T_wx = T_wx
+	}
+
+	if len(T_pass) < 8 {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "Admin_pass Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	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()
+		return
+	}
+	admin_r.T_pass = "******"
+	System.Add_UserLogs_T(admin_r.T_uuid, "用户管理", "修改个人信息", admin_r)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
 func (c *UserController) User_Add() {
 func (c *UserController) User_Add() {
 
 
 	// 验证登录
 	// 验证登录
@@ -721,16 +763,23 @@ func (c *UserController) Power_List() {
 // 权限管理
 // 权限管理
 func (c *UserController) Power_List_All() {
 func (c *UserController) Power_List_All() {
 	// 验证登录
 	// 验证登录
-	b_, _ := 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.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
 
 
+	r, err := Account.Read_Power_ById(admin_r.T_power)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id Err!"}
+		c.ServeJSON()
+		return
+	}
+
 	var r_jsons lib.R_JSONS
 	var r_jsons lib.R_JSONS
 
 
-	r_jsons.Data, r_jsons.Num = Account.Read_Power_List_ALL()
+	r_jsons.Data = Account.Read_Power_List_ALL_User(r.T_select)
 
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()
 	c.ServeJSON()
@@ -745,6 +794,14 @@ func (c *UserController) Power_Get() {
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
+	type Data struct {
+		Power   Account.Power_
+		Menu    []Account.Menu
+		Select  []Account.Power_R
+		Warning []Warning.WarningType_R
+	}
+
+	var data Data
 
 
 	id, id_err := c.GetInt("T_id")
 	id, id_err := c.GetInt("T_id")
 
 
@@ -754,14 +811,35 @@ func (c *UserController) Power_Get() {
 		return
 		return
 	}
 	}
 
 
-	Data, err := Account.Read_Power_ById(id)
+	power, err := Account.Read_Power_ById(id)
 	if err != nil {
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
+	data.Power = Account.PowerToPower_(power)
+	data.Menu = Account.Read_Menu_List_All_T_Menu(power.T_menu)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_menu Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	data.Select = Account.Read_Power_List_ALL_T_select(power.T_select)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_select Err!"}
+		c.ServeJSON()
+		return
+	}
 
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Data}
+	data.Warning = Warning.Read_WarningType_All_T_Warning(power.T_warning)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_warning Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: data}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
 }
 }
@@ -776,26 +854,16 @@ func (c *UserController) Power_Add() {
 	}
 	}
 
 
 	T_name := c.GetString("T_name")
 	T_name := c.GetString("T_name")
-	T_role, T_role_err := c.GetInt("T_role")
-	if T_role_err != nil || T_role == 0 {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_role Err!"}
-		c.ServeJSON()
-		return
-	}
-	T_warning, T_warning_err := c.GetInt("T_warning")
-	if T_warning_err != nil || T_warning == 0 {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_warning Err!"}
-		c.ServeJSON()
-		return
-	}
-	T_Menu_Bind := c.GetString("T_Menu_Bind")
+	T_select := c.GetString("T_select")
+	T_warning := c.GetString("T_warning")
+	T_menu := c.GetString("T_menu")
 
 
 	var_ := Account.Power{
 	var_ := Account.Power{
-		T_name:      T_name,
-		T_role:      T_role,
-		T_warning:   T_warning,
-		T_Menu_Bind: T_Menu_Bind,
-		T_State:     1,
+		T_name:    T_name,
+		T_select:  T_select,
+		T_warning: T_warning,
+		T_menu:    T_menu,
+		T_State:   1,
 	}
 	}
 
 
 	_, err := Account.Add_Power(var_)
 	_, err := Account.Add_Power(var_)
@@ -833,25 +901,23 @@ func (c *UserController) Power_Edit() {
 	}
 	}
 
 
 	T_name := c.GetString("T_name")
 	T_name := c.GetString("T_name")
-	T_role, T_role_err := c.GetInt("T_role")
-
-	T_warning, T_warning_err := c.GetInt("T_warning")
-
-	T_Menu_Bind := c.GetString("T_Menu_Bind")
+	T_select := c.GetString("T_select")
+	T_warning := c.GetString("T_warning")
+	T_menu := c.GetString("T_menu")
 	if len(T_name) > 0 {
 	if len(T_name) > 0 {
 		r.T_name = T_name
 		r.T_name = T_name
 	}
 	}
-	if T_role_err == nil && T_role > 0 {
-		r.T_role = T_role
+	if len(T_select) > 0 {
+		r.T_select = T_select
 	}
 	}
-	if T_warning_err == nil && T_warning > 0 {
+	if len(T_warning) > 0 {
 		r.T_warning = T_warning
 		r.T_warning = T_warning
 	}
 	}
-	if len(T_Menu_Bind) > 0 {
-		r.T_Menu_Bind = T_Menu_Bind
+	if len(T_menu) > 0 {
+		r.T_menu = T_menu
 	}
 	}
 
 
-	is := Account.Update_Power(r, "T_name", "T_role", "T_warning", "T_Menu_Bind")
+	is := Account.Update_Power(r, "T_name", "T_select", "T_warning", "T_menu")
 	if !is {
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
 		c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
 		c.ServeJSON()
 		c.ServeJSON()
@@ -898,7 +964,7 @@ func (c *UserController) Power_Del() {
 }
 }
 
 
 // 菜单列表
 // 菜单列表
-func (c *UserController) Menu_List() {
+func (c *UserController) User_Menu_List() {
 	// 验证登录
 	// 验证登录
 	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_ {
@@ -915,7 +981,7 @@ func (c *UserController) Menu_List() {
 		return
 		return
 	}
 	}
 
 
-	r_jsons.Data = Account.Read_Menu_List(power.T_Menu_Grant)
+	r_jsons.Data = Account.Read_Menu_Bind_List(power.T_menu)
 
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()
 	c.ServeJSON()
@@ -923,9 +989,9 @@ func (c *UserController) Menu_List() {
 }
 }
 
 
 // 权限菜单列表
 // 权限菜单列表
-func (c *UserController) Bind_Menu_List() {
+func (c *UserController) Menu_List_All() {
 	// 验证登录
 	// 验证登录
-	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !b_ {
 	if !b_ {
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
 		c.ServeJSON()
 		c.ServeJSON()
@@ -933,14 +999,8 @@ func (c *UserController) Bind_Menu_List() {
 	}
 	}
 
 
 	var r_jsons lib.R_JSONS
 	var r_jsons lib.R_JSONS
-	power, err := Account.Read_Power_ById(admin_r.T_power)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 200, Msg: "获取菜单失败"}
-		c.ServeJSON()
-		return
-	}
 
 
-	r_jsons.Data = Account.Read_Menu_Bind_List(power.T_Menu_Grant, power.T_Menu_Bind)
+	r_jsons.Data = Account.Read_Menu_List_All()
 
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()
 	c.ServeJSON()

+ 33 - 1
models/Account/Company.go

@@ -168,7 +168,7 @@ func Read_Company_List(admin_r Admin, Company_name string) (CompanyList []Compan
 	}
 	}
 
 
 	if len(admin_r.T_pids) > 0 {
 	if len(admin_r.T_pids) > 0 {
-		T_pids := models.SplitStringIds(admin_r.T_pids)
+		T_pids := models.SplitStringIds(admin_r.T_pids, "P")
 		cond1 = cond1.AndCond(cond.Or("Id__in", T_pids).Or("T_mid__in", T_pids))
 		cond1 = cond1.AndCond(cond.Or("Id__in", T_pids).Or("T_mid__in", T_pids))
 	}
 	}
 
 
@@ -209,6 +209,38 @@ func Read_Company_List(admin_r Admin, Company_name string) (CompanyList []Compan
 
 
 	return CompanyList, cnt
 	return CompanyList, cnt
 }
 }
+func Read_Company_All() (CompanyList []Company_R) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(Company))
+	var maps []Company
+
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_State", 1)
+
+	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
+
+	return CompanyTree(maps, 0)
+}
+
+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
+}
 
 
 func CompanyCall(CompanyList []Company, company Company_R) Company_R {
 func CompanyCall(CompanyList []Company, company Company_R) Company_R {
 	list := CompanyList
 	list := CompanyList

+ 24 - 81
models/Account/Menu.go

@@ -21,7 +21,7 @@ type Menu struct {
 	T_permission string `orm:"size(256);null"`     // 权限表示
 	T_permission string `orm:"size(256);null"`     // 权限表示
 	T_sort       int    `orm:"size(11);null"`      // 排序
 	T_sort       int    `orm:"size(11);null"`      // 排序
 	T_pid        int    `orm:"size(2);default(0)"` // 1 进入公司后才能访问的菜单1,0 公共菜单
 	T_pid        int    `orm:"size(2);default(0)"` // 1 进入公司后才能访问的菜单1,0 公共菜单
-	T_bind       bool   `orm:"-"`                  // 是否选中
+	T_check      bool   `orm:"-"`                  // 是否选中
 	Children     []Menu `orm:"-"`
 	Children     []Menu `orm:"-"`
 }
 }
 
 
@@ -42,14 +42,6 @@ func (t *API) TableName() string {
 	return "api" // 数据库名称   // ************** 替换 FormulaList **************
 	return "api" // 数据库名称   // ************** 替换 FormulaList **************
 }
 }
 
 
-type Menu_R struct {
-	Id       int
-	T_name   string // 菜单标题
-	T_mid    int    // 菜单标题
-	T_pid    int
-	Children map[string]Menu_R
-}
-
 // var redisCache_Menu cache.Cache
 // var redisCache_Menu cache.Cache
 var redisCache_API cache.Cache
 var redisCache_API cache.Cache
 
 
@@ -155,35 +147,42 @@ func Read_Menu_ById(Id int) (r Menu, e error) {
 }
 }
 
 
 // 获取列表
 // 获取列表
-func Read_Menu_List(Grant_Menu string) (maps []Menu) {
+func Read_Menu_Bind_List(Bind_Menu string) (maps []Menu) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	// 也可以直接使用 Model 结构体作为表名
 
 
 	qs := o.QueryTable(new(Menu))
 	qs := o.QueryTable(new(Menu))
-	if Grant_Menu == "*" {
+	if Bind_Menu == "*" {
 		qs.OrderBy("-T_sort").All(&maps)
 		qs.OrderBy("-T_sort").All(&maps)
 	} else {
 	} else {
-		list := models.SplitStringIds(Grant_Menu)
+		list := models.SplitStringIds(Bind_Menu, "M")
 		qs.Filter("Id__in", list).OrderBy("-T_sort").All(&maps)
 		qs.Filter("Id__in", list).OrderBy("-T_sort").All(&maps)
 	}
 	}
 	m := Menu_Call(maps, 0)
 	m := Menu_Call(maps, 0)
 	return m
 	return m
 }
 }
 
 
-func Read_Menu_Bind_List(Grant_Menu string, Bind_Menu string) (maps []Menu) {
+func Read_Menu_List_All() (maps []Menu) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	// 也可以直接使用 Model 结构体作为表名
 
 
 	qs := o.QueryTable(new(Menu))
 	qs := o.QueryTable(new(Menu))
-	if Grant_Menu == "*" {
-		qs.OrderBy("-T_sort").All(&maps)
-	} else {
-		list := models.SplitStringIds(Grant_Menu)
-		qs.Filter("Id__in", list).OrderBy("-T_sort").All(&maps)
-	}
-	m := Bind_Menu_Call(maps, 0, Bind_Menu)
+	qs.OrderBy("-T_sort").All(&maps)
+	m := Menu_Call(maps, 0)
+
+	return m
+}
+
+func Read_Menu_List_All_T_Menu(T_Menu string) (maps []Menu) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(Menu))
+	qs.OrderBy("-T_sort").All(&maps)
+	m := Bind_Menu_Call(maps, 0, T_Menu)
 
 
 	return m
 	return m
 }
 }
@@ -203,7 +202,7 @@ func Read_Menu_Tree(Menu_Bind string, T_pid int) (MenuList []Menu) {
 	cond1 := cond.And("T_pid__in", T_pid_list)
 	cond1 := cond.And("T_pid__in", T_pid_list)
 	var maps []Menu
 	var maps []Menu
 	if Menu_Bind != "*" {
 	if Menu_Bind != "*" {
-		list := models.SplitStringIds(Menu_Bind)
+		list := models.SplitStringIds(Menu_Bind, "M")
 		cond1 = cond1.And("Id__in", list)
 		cond1 = cond1.And("Id__in", list)
 	}
 	}
 	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-T_sort").All(&maps)
 	qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-T_sort").All(&maps)
@@ -233,8 +232,8 @@ func Bind_Menu_Call(list []Menu, parentId int, Bind_Menu string) []Menu {
 	res := make([]Menu, 0)
 	res := make([]Menu, 0)
 	for _, v := range list {
 	for _, v := range list {
 		if v.T_mid == parentId {
 		if v.T_mid == parentId {
-			if strings.Contains(Bind_Menu, strconv.Itoa(v.Id)) || Bind_Menu == "*" {
-				v.T_bind = true
+			if strings.Contains(Bind_Menu, strconv.Itoa(v.Id)+"|") || Bind_Menu == "*" {
+				v.T_check = true
 			}
 			}
 			v.Children = Bind_Menu_Call(list, v.Id, Bind_Menu)
 			v.Children = Bind_Menu_Call(list, v.Id, Bind_Menu)
 			res = append(res, v)
 			res = append(res, v)
@@ -256,62 +255,6 @@ func Menu_Call(list []Menu, parentId int) []Menu {
 	return res
 	return res
 }
 }
 
 
-func MenuCall(MenuList []Menu, company Menu) Menu {
-	list := MenuList
-	min := make([]Menu, 0)
-	for j := 0; j < len(list); j++ {
-		if company.Id != list[j].T_mid {
-			continue
-		}
-		mi := Menu{}
-		mi.Id = list[j].Id
-		mi.T_mid = list[j].T_mid
-		mi.T_name = list[j].T_name
-		mi.Children = []Menu{}
-		ms := MenuCall(MenuList, mi)
-		min = append(min, ms)
-	}
-	company.Children = min
-	return company
-}
-
-func getMenuParent(MenuList []Menu) (map[int]bool, bool) {
-	list := MenuList
-	var flag = false
-	var parentMap = map[int]bool{}
-	for j := 0; j < len(list); j++ {
-		parentMap[list[j].T_mid] = false
-	}
-
-	for j := 0; j < len(list); j++ {
-		if _, ok := parentMap[list[j].Id]; !ok {
-			continue
-		}
-		parentMap[list[j].Id] = true
-		flag = true
-	}
-	return parentMap, flag
-}
-
-// Menu_Tree 构建菜单树
-// {"workorder":{"Id":70,"T_name":"工单管理","T_mid":0,"T_pid":1,"Children":{"workorder:list":{"Id":71,"T_name":"工单列表","T_mid":70,"T_pid":1,"Children":{}}}}}
-func Menu_Tree(list []Menu, parentId int) map[string]Menu_R {
-	res := make(map[string]Menu_R, 0)
-	for _, v := range list {
-		if v.T_mid == parentId {
-			r := Menu_R{
-				Id:     v.Id,
-				T_mid:  v.T_mid,
-				T_pid:  v.T_pid,
-				T_name: v.T_name,
-			}
-			r.Children = Menu_Tree(list, v.Id)
-			res[v.T_permission] = r
-		}
-	}
-	return res
-}
-
 // 添加
 // 添加
 func Add_API(m API) (id int64, err error) {
 func Add_API(m API) (id int64, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
@@ -386,7 +329,7 @@ func Read_API_List_ByPower_Id(Power_Id int, Menu_Bind string) (maps []API) {
 
 
 	qs := o.QueryTable(new(API))
 	qs := o.QueryTable(new(API))
 
 
-	list := models.SplitStringIds(Menu_Bind)
+	list := models.SplitStringIds(Menu_Bind, "M")
 	qs.Filter("T_Menu_Id__in", list).All(&maps)
 	qs.Filter("T_Menu_Id__in", list).All(&maps)
 
 
 	Redis_API_Set(Power_Id, maps)
 	Redis_API_Set(Power_Id, maps)
@@ -400,7 +343,7 @@ func Read_API_List_By_Menu_Bind(Menu_Bind string) (maps []API) {
 
 
 	qs := o.QueryTable(new(API))
 	qs := o.QueryTable(new(API))
 
 
-	list := models.SplitStringIds(Menu_Bind)
+	list := models.SplitStringIds(Menu_Bind, "M")
 	qs.Filter("T_Menu_Id__in", list).All(&maps)
 	qs.Filter("T_Menu_Id__in", list).All(&maps)
 
 
 	return maps
 	return maps

+ 64 - 18
models/Account/Power.go

@@ -2,6 +2,7 @@ package Account
 
 
 import (
 import (
 	"Cold_Api/conf"
 	"Cold_Api/conf"
+	"Cold_Api/models"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	"github.com/astaxie/beego/cache"
@@ -14,22 +15,47 @@ import (
 )
 )
 
 
 type Power struct {
 type Power struct {
-	Id           int       `orm:"column(ID);size(11);auto;pk"`
-	T_code       string    `orm:"size(256);null"`                                        //  唯一编码
-	T_name       string    `orm:"size(256);null"`                                        //  权限名称
-	T_role       int       `orm:"size(2);default(0)"`                                    //  1-内部 2-实施 3-养护员
-	T_warning    int       `orm:"size(2);default(0)"`                                    //  告警权限 1-超标 2-异常 3-系统
-	T_Menu_Bind  string    `orm:"size(256);null"`                                        //  权限绑定菜单id 1|2|3|4|5|
-	T_Menu_Grant string    `orm:"size(256);null"`                                        //  可以授予的菜单id 1|2|3|4|5| * 代表全部菜单
-	T_State      int       `orm:"size(2);default(1)"`                                    //  0删除  1 正常
-	CreateTime   time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
-	UpdateTime   time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
+	Id         int       `orm:"column(ID);size(11);auto;pk"`
+	T_code     string    `orm:"size(256);null"`                                        //  唯一编码
+	T_name     string    `orm:"size(256);null"`                                        //  权限名称
+	T_select   string    `orm:"size(256);null"`                                        //  Account.Power.Id S1|S2|
+	T_warning  string    `orm:"size(256);null"`                                        //  Warning.WarningType.Id W1|W2|W3|W4|W5|
+	T_menu     string    `orm:"size(256);null"`                                        //  Account.Menu.Id 设备通知策略  M1|M2|
+	T_State    int       `orm:"size(2);default(1)"`                                    //  0删除  1 正常
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
+	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
 }
 }
 
 
 func (t *Power) TableName() string {
 func (t *Power) TableName() string {
 	return "power" // 数据库名称   // ************** 替换 FormulaList **************
 	return "power" // 数据库名称   // ************** 替换 FormulaList **************
 }
 }
 
 
+type Power_R struct {
+	Id      int
+	T_name  string //  权限名称
+	T_check bool   // 是否勾选
+}
+
+type Power_ struct {
+	Id     int
+	T_name string //  权限名称
+}
+
+func PowerToPower_R(r Power, T_select string) (v Power_R) {
+	v.Id = r.Id
+	v.T_name = r.T_name
+	if strings.Contains(T_select, strconv.Itoa(v.Id)+"|") || T_select == "*" {
+		v.T_check = true
+	}
+	return v
+}
+
+func PowerToPower_(r Power) (v Power_) {
+	v.Id = r.Id
+	v.T_name = r.T_name
+	return v
+}
+
 var redisCache_Power cache.Cache
 var redisCache_Power cache.Cache
 
 
 func init() {
 func init() {
@@ -124,7 +150,7 @@ func Add_Power(m Power) (id int64, err error) {
 		fmt.Println(err)
 		fmt.Println(err)
 	}
 	}
 
 
-	Redis_API_Set(int(id), Read_API_List_By_Menu_Bind(m.T_Menu_Bind))
+	Redis_API_Set(int(id), Read_API_List_By_Menu_Bind(m.T_menu))
 	Redis_Power_Set(m)
 	Redis_Power_Set(m)
 	return id, err
 	return id, err
 }
 }
@@ -179,18 +205,38 @@ func Read_Power_List(T_name string, page int, page_z int) (maps []Power, cnt int
 	return maps, cnt
 	return maps, cnt
 }
 }
 
 
-// 获取列表
-func Read_Power_List_ALL() (maps []Power, cnt int64) {
+// 添加用户 - 权限选择列表
+func Read_Power_List_ALL_User(T_select string) (r []Power_) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	// 也可以直接使用 Model 结构体作为表名
-
+	var maps []Power
 	qs := o.QueryTable(new(Power))
 	qs := o.QueryTable(new(Power))
 
 
-	qs.Filter("T_State", 1).OrderBy("Id").All(&maps)
-	cnt, _ = qs.Filter("T_State", 1).Count()
+	if T_select == "*" {
+		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)
+	}
+	for _, v := range maps {
+		r = append(r, PowerToPower_(v))
+	}
+	return r
+}
 
 
-	return maps, cnt
+// 获取列表
+func Read_Power_List_ALL_T_select(T_select string) (r []Power_R) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	var maps []Power
+	qs := o.QueryTable(new(Power))
+	qs.Filter("Id__gt", 1).Filter("T_State", 1).OrderBy("Id").All(&maps)
+	for _, v := range maps {
+		r = append(r, PowerToPower_R(v, T_select))
+	}
+	return r
 }
 }
 
 
 // 修改
 // 修改
@@ -198,7 +244,7 @@ func Update_Power(v Power, cols ...string) bool {
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	if num, err := o.Update(&v, cols...); err == nil {
 	if num, err := o.Update(&v, cols...); err == nil {
 		fmt.Println("Number of records updated in database:", num)
 		fmt.Println("Number of records updated in database:", num)
-		Redis_API_Set(v.Id, Read_API_List_By_Menu_Bind(v.T_Menu_Bind))
+		Redis_API_Set(v.Id, Read_API_List_By_Menu_Bind(v.T_menu))
 		Redis_Power_Set(v) // Redis 更新缓存
 		Redis_Power_Set(v) // Redis 更新缓存
 		return true
 		return true
 	}
 	}

+ 29 - 3
models/Device/Device.go

@@ -2,6 +2,7 @@ package Device
 
 
 import (
 import (
 	"Cold_Api/conf"
 	"Cold_Api/conf"
+	"Cold_Api/models/Product"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
 	"github.com/astaxie/beego/cache"
 	"github.com/astaxie/beego/cache"
@@ -35,6 +36,13 @@ type Device struct {
 	T_online   int    `orm:"index;size(2);default(1)"` // 在线状态 0 未启用  1 在线  2 离线
 	T_online   int    `orm:"index;size(2);default(1)"` // 在线状态 0 未启用  1 在线  2 离线
 	T_online_s int    `orm:"index;size(2);default(0)"` // 在线状态-备用  0 未启用  1 在线  2 离线
 	T_online_s int    `orm:"index;size(2);default(0)"` // 在线状态-备用  0 未启用  1 在线  2 离线
 
 
+	// 硬件信息
+	T_model string `orm:"size(200);null"` // KF200BG  设备型号
+	T_sver  string `orm:"size(200);null"` // "1.0.0",//软件版本
+	T_hver  string `orm:"size(200);null"` // "1.0.0",//硬件版本
+	T_imei  string `orm:"size(200);null"` // "867387060327718",//模组imei
+	T_iccid string `orm:"size(200);null"` // "89860477102170049750",//sim卡号
+
 	T_State    int       `orm:"index;size(2);default(1)"`                              // 0 删除   1 正常
 	T_State    int       `orm:"index;size(2);default(1)"`                              // 0 删除   1 正常
 	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 保存时都会对时间自动更新
@@ -51,11 +59,18 @@ type Device_R struct {
 	T_ish             int    // 湿度   1开启   2关闭
 	T_ish             int    // 湿度   1开启   2关闭
 	T_Dattery         int    // 电量
 	T_Dattery         int    // 电量
 	T_Site            string // GPS
 	T_Site            string // GPS
-	T_type            int    // 1库房   2移动
+	T_type            int    // 1库房  2移动
 	T_give            int    // 屏蔽状态 0 屏蔽  1 正常
 	T_give            int    // 屏蔽状态 0 屏蔽  1 正常
 	T_monitor         int    // 监控状态 0 未监控 1 监控
 	T_monitor         int    // 监控状态 0 未监控 1 监控
 	T_online          int    // 在线状态 0 未启用  1 在线  2 离线
 	T_online          int    // 在线状态 0 未启用  1 在线  2 离线
 	T_online_s        int    // 在线状态-备用  0 未启用  1 在线  2 离线
 	T_online_s        int    // 在线状态-备用  0 未启用  1 在线  2 离线
+	// 硬件信息
+	T_model           string // KF200BG  产品型号
+	T_ProductTypeName string // 验证工具LoRa  产品统称 + 类型
+	T_sver            string // "1.0.0",//软件版本
+	T_hver            string // "1.0.0",//硬件版本
+	T_imei            string // "867387060327718",//模组imei
+	T_iccid           string // "89860477102170049750",//sim卡号
 	CreateTime        string //auto_now_add 第一次保存时才设置时间
 	CreateTime        string //auto_now_add 第一次保存时才设置时间
 	UpdateTime        string //auto_now 每次 model 保存时都会对时间自动更新
 	UpdateTime        string //auto_now 每次 model 保存时都会对时间自动更新
 
 
@@ -104,6 +119,12 @@ func DeviceToDevice_R(r Device) (t Device_R) {
 	t.T_monitor = r.T_monitor
 	t.T_monitor = r.T_monitor
 	t.T_online = r.T_online
 	t.T_online = r.T_online
 	t.T_online_s = r.T_online_s
 	t.T_online_s = r.T_online_s
+	t.T_model = r.T_model
+	t.T_ProductTypeName = Product.Read_ProductType_Get(r.T_model)
+	t.T_sver = r.T_sver
+	t.T_hver = r.T_hver
+	t.T_imei = r.T_imei
+	t.T_iccid = r.T_iccid
 	t.CreateTime = r.CreateTime.Format("2006-01-02 15:04:05")
 	t.CreateTime = r.CreateTime.Format("2006-01-02 15:04:05")
 	t.UpdateTime = r.UpdateTime.Format("2006-01-02 15:04:05")
 	t.UpdateTime = r.UpdateTime.Format("2006-01-02 15:04:05")
 
 
@@ -200,7 +221,7 @@ func Update_Device(r Device, cols ...string) bool {
 }
 }
 
 
 // 获取列表
 // 获取列表
-func Read_Device_List(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(T_pid int, T_name string, T_monitor string, T_online string, T_type int, page int, page_z int) (r []Device_R, cnt int64) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	// 也可以直接使用 Model 结构体作为表名
@@ -231,12 +252,17 @@ func Read_Device_List(T_pid int, T_name string, T_monitor string, T_online strin
 		}
 		}
 	}
 	}
 
 
+	if T_type > 0 {
+		cond1 = cond1.AndCond(cond.And("T_type", T_type))
+
+	}
+
 	if T_online == "1" {
 	if T_online == "1" {
 		cond1 = cond1.AndCond(cond.And("T_online", 1))
 		cond1 = cond1.AndCond(cond.And("T_online", 1))
 	} else if T_online == "2" {
 	} else if T_online == "2" {
 		cond1 = cond1.AndCond(cond.And("T_online", 2))
 		cond1 = cond1.AndCond(cond.And("T_online", 2))
 	} else if T_online == "0" {
 	} else if T_online == "0" {
-		cond1 = cond1.AndCond(cond.And("T_online", 0))
+		cond1 = cond1.AndCond(cond.And("T_online", 0).Or("T_online", 2))
 	}
 	}
 
 
 	var rx []Device
 	var rx []Device

+ 4 - 4
models/Device/DeviceType.go

@@ -9,11 +9,11 @@ import (
 type DeviceType struct {
 type DeviceType struct {
 	Id int `orm:"column(ID);size(11);auto;pk"`
 	Id int `orm:"column(ID);size(11);auto;pk"`
 
 
-	T_name string `orm:"size(256);null"`  // 标题
-	T_text string `orm:"type(text);null"` // 详情
-	T_view int    `orm:"size(2);1"`       // 1 库房   2 移动
+	T_name string `orm:"size(256);null"`     // 标题
+	T_text string `orm:"type(text);null"`    // 详情
+	T_view int    `orm:"size(2);default(1)"` // 1 库房   2 移动
 
 
-	T_State int `orm:"size(2);1"` // 0 删除   1 正常
+	T_State int `orm:"size(2);default(1)"` // 0 删除   1 正常
 }
 }
 
 
 func (t *DeviceType) TableName() string {
 func (t *DeviceType) TableName() string {

+ 85 - 0
models/Product/ProductType.go

@@ -0,0 +1,85 @@
+package Product
+
+import (
+	"Cold_Api/logs"
+	_ "github.com/astaxie/beego/cache/redis"
+	"github.com/beego/beego/v2/adapter/orm"
+	_ "github.com/go-sql-driver/mysql"
+	"time"
+)
+
+// 产品类型
+type ProductType struct {
+	Id      int    `orm:"column(ID);size(11);auto;pk"`
+	T_name  string `orm:"size(256);null"` // 产品统称 + 类型
+	T_model string `orm:"size(256);null"` // 产品型号
+}
+
+// 产品统称	产品型号	类型
+// 验证工具	M1	LoRa
+// YZ100N	NB-Iot
+// YZ200G	4G-Cat.1
+// 库房采集器(高配版)	KF100N	RS485(NB-Iot)
+// 库房采集器(标准版)	KF100B	RS485
+// 库房采集器(黑白版)	KF200L	RS485
+// 冰箱采集器(数码管版)	BX200GSE	4G-Cat.1
+// 冰箱采集器(黑白版)	BX200GBL	4G-Cat.1
+// 保温箱采集器V1	BW100	4G-Cat.1
+// 运输采集器V1	YD100	4G-Cat.1/GPS
+// 保温箱采集器V2	BW200	4G-Cat.1
+// 运输采集器V2	YD200	4G-Cat.1/GPS
+// 新管理主机	MD100	TCP/4G/WiFi
+// 小管理主机	MD200G	4G-Cat.1/RS485
+
+var ProductType_list map[string]string // 泛型
+
+func (t *ProductType) TableName() string {
+	return "product_type" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+//var redisCache_WarningType cache.Cache
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(ProductType))
+
+	ProductType_list = make(map[string]string)
+
+	//go Read_WarningType_All()
+}
+
+// 获取全部
+func Read_ProductType_All() {
+	time.Sleep(time.Second)
+
+	logs.Println("=========== 初始化产品类型 =========")
+
+	o := orm.NewOrm()
+	//for true {
+	//	var r []ProductType
+	//	qs := o.QueryTable(new(ProductType))
+	//	qs.All(&r)
+	//
+	//	for _, v := range r {
+	//		ProductType_list[v.T_model] = v.T_name
+	//	}
+	//	time.Sleep(1 * time.Hour)
+	//}
+	var r []ProductType
+	qs := o.QueryTable(new(ProductType))
+	qs.All(&r)
+
+	for _, v := range r {
+		ProductType_list[v.T_model] = v.T_name
+	}
+
+}
+func Read_ProductType_Get(T_model string) string {
+	// 有先加入 给全部人发消息
+	v, ok := ProductType_list[T_model] /*如果确定是真实的,则存在,否则不存在 */
+	if ok {
+		return v
+	} else {
+		return "未知类型"
+	}
+}

+ 30 - 0
models/Product/ProductUpgrade.go

@@ -0,0 +1,30 @@
+package Product
+
+import (
+	_ "github.com/astaxie/beego/cache/redis"
+	"github.com/beego/beego/v2/adapter/orm"
+	_ "github.com/go-sql-driver/mysql"
+	"time"
+)
+
+// 产品类型
+type ProductUpgrade struct {
+	Id         int    `orm:"column(ID);size(11);auto;pk"`
+	T_model    string `orm:"size(256);null"` // 产品型号
+	T_version  string `orm:"size(256);null"` // 版本
+	T_file     string `orm:"size(256);null"` // 文件
+	T_remarks  string `orm:"size(256);null"` // 备注
+	T_carryout int    `orm:"size(1);null"`   // 全量发布
+
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
+}
+
+func (t *ProductUpgrade) TableName() string {
+	return "product_upgrade" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(ProductUpgrade))
+
+}

+ 4 - 1
models/SplitString.go

@@ -2,8 +2,11 @@ package models
 
 
 import "strings"
 import "strings"
 
 
-func SplitStringIds(str string) []string {
+func SplitStringIds(str string, prefix string) (r []string) {
 	Ids_str := strings.TrimRight(str, "|")
 	Ids_str := strings.TrimRight(str, "|")
 	Ids := strings.Split(Ids_str, "|")
 	Ids := strings.Split(Ids_str, "|")
+	for _, v := range Ids {
+		r = append(r, strings.TrimLeft(v, prefix))
+	}
 	return Ids
 	return Ids
 }
 }

+ 54 - 0
models/Warning/WarningType.go

@@ -5,6 +5,8 @@ import (
 	_ "github.com/astaxie/beego/cache/redis"
 	_ "github.com/astaxie/beego/cache/redis"
 	"github.com/beego/beego/v2/adapter/orm"
 	"github.com/beego/beego/v2/adapter/orm"
 	_ "github.com/go-sql-driver/mysql"
 	_ "github.com/go-sql-driver/mysql"
+	"strconv"
+	"strings"
 	"time"
 	"time"
 )
 )
 
 
@@ -27,6 +29,32 @@ func init() {
 
 
 }
 }
 
 
+type WarningType_R struct {
+	Id      int
+	T_name  string // 分类
+	T_check bool   // 是否勾选
+}
+
+type WarningType_ struct {
+	Id     int
+	T_name string // 分类
+}
+
+func WarningTypeToWarningType_R(r WarningType, T_warning string) (v WarningType_R) {
+	v.Id = r.Id
+	v.T_name = r.T_name
+	if strings.Contains(T_warning, "W"+strconv.Itoa(v.Id)+"|") || T_warning == "*" {
+		v.T_check = true
+	}
+	return v
+}
+
+func WarningTypeToWarningType_(r WarningType) (v WarningType_) {
+	v.Id = r.Id
+	v.T_name = r.T_name
+	return v
+}
+
 // 获取全部
 // 获取全部
 func Read_WarningType_All_T_Notice_mechanism() string {
 func Read_WarningType_All_T_Notice_mechanism() string {
 	logs.Println("=========== 初始化报警规则 =========")
 	logs.Println("=========== 初始化报警规则 =========")
@@ -42,3 +70,29 @@ func Read_WarningType_All_T_Notice_mechanism() string {
 
 
 	return str
 	return str
 }
 }
+
+// 获取全部
+func Read_WarningType_All() (r []WarningType_) {
+	o := orm.NewOrm()
+	var maps []WarningType
+	qs := o.QueryTable(new(WarningType))
+	qs.All(&maps)
+
+	for _, v := range maps {
+		r = append(r, WarningTypeToWarningType_(v))
+	}
+	return r
+}
+
+// 获取全部
+func Read_WarningType_All_T_Warning(T_warning string) (r []WarningType_R) {
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	var maps []WarningType
+	qs := o.QueryTable(new(WarningType))
+	qs.OrderBy("Id").All(&maps)
+	for _, v := range maps {
+		r = append(r, WarningTypeToWarningType_R(v, T_warning))
+	}
+	return r
+}

+ 9 - 7
routers/User.go

@@ -13,7 +13,8 @@ func init() {
 	// 用户
 	// 用户
 	beego.Router(version+"/Login_verification", &controllers.AdminController{}, "*:Login_verification")
 	beego.Router(version+"/Login_verification", &controllers.AdminController{}, "*:Login_verification")
 	beego.Router(version+"/User/List", &controllers.UserController{}, "*:User_List") // 用户列表
 	beego.Router(version+"/User/List", &controllers.UserController{}, "*:User_List") // 用户列表
-	beego.Router(version+"/User/Info", &controllers.UserController{}, "*:User_Info") // 当前登录用户信息
+	beego.Router(version+"/User/Info", &controllers.UserController{}, "*:User_Info") // 个人信息
+	beego.Router(version+"/User/Post", &controllers.UserController{}, "*:User_Post") // 修改个人信息
 	beego.Router(version+"/User/Get", &controllers.UserController{}, "*:User_Get")   // 获取用户信息
 	beego.Router(version+"/User/Get", &controllers.UserController{}, "*:User_Get")   // 获取用户信息
 	beego.Router(version+"/User/Add", &controllers.UserController{}, "*:User_Add")   // 增加用户
 	beego.Router(version+"/User/Add", &controllers.UserController{}, "*:User_Add")   // 增加用户
 	beego.Router(version+"/User/Edit", &controllers.UserController{}, "*:User_Edit") // 编辑用户
 	beego.Router(version+"/User/Edit", &controllers.UserController{}, "*:User_Edit") // 编辑用户
@@ -35,13 +36,14 @@ func init() {
 	beego.Router(version+"/Power/Del", &controllers.UserController{}, "*:Power_Del")           // 删除权限
 	beego.Router(version+"/Power/Del", &controllers.UserController{}, "*:Power_Del")           // 删除权限
 
 
 	// 菜单
 	// 菜单
-	beego.Router(version+"/Menu/List", &controllers.UserController{}, "*:Menu_List")           //
-	beego.Router(version+"/Menu/Bind_List", &controllers.UserController{}, "*:Bind_Menu_List") //
+	beego.Router(version+"/Menu/List", &controllers.UserController{}, "*:User_Menu_List")    // 用户权限绑定的菜单
+	beego.Router(version+"/Menu/List_All", &controllers.UserController{}, "*:Menu_List_All") // 权限管理-菜单列表
 
 
 	// 公司管理
 	// 公司管理
-	beego.Router(version+"/Company/List", &controllers.UserController{}, "*:Company_List") //公司列表
-	beego.Router(version+"/Company/Add", &controllers.UserController{}, "*:Company_Add")   //添加公司
-	beego.Router(version+"/Company/Edit", &controllers.UserController{}, "*:Company_Edit") //修改公司
-	beego.Router(version+"/Company/Del", &controllers.UserController{}, "*:Company_Del")   //删除公司
+	beego.Router(version+"/Company/List", &controllers.UserController{}, "*:Company_List") // 公司列表
+	beego.Router(version+"/Company/All", &controllers.UserController{}, "*:Company_All")   // 所有公司列表
+	beego.Router(version+"/Company/Add", &controllers.UserController{}, "*:Company_Add")   // 添加公司
+	beego.Router(version+"/Company/Edit", &controllers.UserController{}, "*:Company_Edit") // 修改公司
+	beego.Router(version+"/Company/Del", &controllers.UserController{}, "*:Company_Del")   // 删除公司
 
 
 }
 }

+ 2 - 2
routers/filter.go

@@ -53,11 +53,11 @@ func FilterRBAC(ctx *context.Context) {
 
 
 	power, _ := Account.Read_Power_ById(admin.T_power)
 	power, _ := Account.Read_Power_ById(admin.T_power)
 
 
-	if power.T_Menu_Bind == "*" {
+	if power.T_menu == "*" {
 		return
 		return
 	}
 	}
 
 
-	api := Account.Read_API_List_ByPower_Id(power.Id, power.T_Menu_Bind)
+	api := Account.Read_API_List_ByPower_Id(power.Id, power.T_menu)
 	flag := false
 	flag := false
 	for _, v := range api {
 	for _, v := range api {
 		if version+v.T_uri == ctx.Request.URL.Path {
 		if version+v.T_uri == ctx.Request.URL.Path {

+ 0 - 2
routers/router.go

@@ -16,8 +16,6 @@ func init() {
 	beego.Router(version+"/System/LogsClass", &controllers.LogsController{}, "*:LogsClass") // 获取未读消息
 	beego.Router(version+"/System/LogsClass", &controllers.LogsController{}, "*:LogsClass") // 获取未读消息
 	beego.Router(version+"/System/LogsList", &controllers.LogsController{}, "*:LogsList")   // 获取未读消息
 	beego.Router(version+"/System/LogsList", &controllers.LogsController{}, "*:LogsList")   // 获取未读消息
 
 
-	// 字典数据
-	beego.Router(version+"/System/DictData", &controllers.DictDataController{}, "*:DictData_All") // 字典数据
 	//初始化配置 不鉴权的URL和只鉴权登录的URL
 	//初始化配置 不鉴权的URL和只鉴权登录的URL
 	InitSetFilterUrl()
 	InitSetFilterUrl()
 	//过滤器,拦截所有请求
 	//过滤器,拦截所有请求

+ 5 - 2
routers/v3.go

@@ -21,7 +21,7 @@ func init() {
 	beego.Router(version+"/Device/Pu_DeviceParameter_T_l_p", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_type")  // 设置设备参数
 	beego.Router(version+"/Device/Pu_DeviceParameter_T_l_p", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_type")  // 设置设备参数
 	beego.Router(version+"/Device/Pu_DeviceParameter_T_give", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_give") // 设备是否弃用
 	beego.Router(version+"/Device/Pu_DeviceParameter_T_give", &controllers.DeviceController{}, "*:Pu_DeviceParameter_T_give") // 设备是否弃用
 
 
-	// 设备传感器
+	// 同步传感器
 	//beego.Router(version+"/Device/Pu_DeviceParameter_Sensor", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor")   // 设置传感器参数
 	//beego.Router(version+"/Device/Pu_DeviceParameter_Sensor", &controllers.DeviceController{}, "*:Pu_DeviceParameter_Sensor")   // 设置传感器参数
 	beego.Router(version+"/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_DeviceSensorParameter") // 获取传感器参数
 	beego.Router(version+"/Device/Read_DeviceSensorParameter", &controllers.DeviceController{}, "*:Read_DeviceSensorParameter") // 获取传感器参数
 
 
@@ -48,6 +48,9 @@ func init() {
 	beego.Router(version+"/DeviceWarning/ToExcel", &controllers.DeviceController{}, "*:DeviceWarning_Data_Excel")          // 导出excel
 	beego.Router(version+"/DeviceWarning/ToExcel", &controllers.DeviceController{}, "*:DeviceWarning_Data_Excel")          // 导出excel
 	beego.Router(version+"/Device/DeviceWarningListT_Tips", &controllers.DeviceController{}, "*:DeviceWarningList_T_Tips") // 获取未读消息
 	beego.Router(version+"/Device/DeviceWarningListT_Tips", &controllers.DeviceController{}, "*:DeviceWarningList_T_Tips") // 获取未读消息
 
 
+	// 告警类型
+	beego.Router(version+"/WarningType/List_All", &controllers.DeviceController{}, "*:WarningType_List_All") // 告警类型列表
+
 	//分类管理
 	//分类管理
 	beego.Router(version+"/CompanyClass/List", &controllers.DeviceController{}, "*:CompanyClass_List") // 分类列表
 	beego.Router(version+"/CompanyClass/List", &controllers.DeviceController{}, "*:CompanyClass_List") // 分类列表
 	beego.Router(version+"/CompanyClass/All", &controllers.DeviceController{}, "*:CompanyClass_All")   // 所有分类列表
 	beego.Router(version+"/CompanyClass/All", &controllers.DeviceController{}, "*:CompanyClass_All")   // 所有分类列表
@@ -85,5 +88,5 @@ func init() {
 
 
 	beego.Router(version+"/Data/List", &controllers.DataController{}, "*:Device_Sensor_Data_More") // 传感器设备列表
 	beego.Router(version+"/Data/List", &controllers.DataController{}, "*:Device_Sensor_Data_More") // 传感器设备列表
 
 
-	beego.Router(version+"/DeviceType/All", &controllers.DeviceController{}, "*:DeviceType_All") // 传感器设备列表
+	beego.Router(version+"/DeviceType/List_All", &controllers.DeviceController{}, "*:DeviceType_List_All") // 传感器设备列表
 }
 }