siked 2 anni fa
commit
02035847e2

+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 9 - 0
.idea/ERP_user.iml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="Go" enabled="true" />
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 14 - 0
.idea/deployment.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="PublishConfigData" remoteFilesAllowedToDisappearOnAutoupload="false">
+    <serverData>
+      <paths name="huitong">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+    </serverData>
+  </component>
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/ERP_user.iml" filepath="$PROJECT_DIR$/.idea/ERP_user.iml" />
+    </modules>
+  </component>
+</project>

BIN
ERP_user


+ 53 - 0
ERP_user.go

@@ -0,0 +1,53 @@
+package main
+
+import (
+	_ "bzd_server/Nats"
+	"bzd_server/conf"
+	_ "bzd_server/routers"
+	"fmt"
+	"github.com/beego/beego/v2/adapter/orm"
+	beego "github.com/beego/beego/v2/server/web"
+	"github.com/beego/beego/v2/server/web/filter/cors"
+	_ "github.com/go-sql-driver/mysql"
+	"runtime"
+	"strconv"
+)
+
+func init() {
+	fmt.Println(runtime.GOOS)
+	orm.RegisterDriver("mysql", orm.DRMySQL)
+	//orm.RegisterDataBase("default", "mysql", "zdxq:7e5853d9178edfcc@tcp(47.108.133.234:3306)/zdxq?charset=utf8",100,200)
+	orm.RegisterDataBase("default", "mysql",
+		conf.MysqlServer_Username+":"+conf.MysqlServer_Password+"@tcp("+conf.MysqlServer_UrlPort+")/"+conf.MysqlServer_Database+"?charset=utf8mb4&loc=Local&parseTime=True",
+		conf.MysqlServer_MaxIdleConnections, conf.MysqlServer_MaxOpenConnections)
+	orm.RunSyncdb("default", false, false) // 创建数据库
+}
+
+func main() {
+
+	HTTPPort, _ := beego.AppConfig.String("HTTPPort")
+	HTTPPort_int, _ := strconv.Atoi(HTTPPort)
+
+	beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
+		// 允许访问所有源
+		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", "Content-Type"},
+		// 如果设置,则允许共享身份验证凭据,例如cookie
+		AllowCredentials: true,
+	}))
+
+	appname, _ := beego.AppConfig.String("appname")
+
+	beego.BConfig.AppName = appname              // 项目名
+	beego.BConfig.ServerName = appname           //server  名称
+	beego.BConfig.RunMode = "dev"                //  应用的运行模式
+	beego.BConfig.Listen.HTTPPort = HTTPPort_int //监听端口  本地:8518  线上:8528
+
+	beego.Run()
+
+}

+ 135 - 0
Nats/Nats.go

@@ -0,0 +1,135 @@
+package Nats
+
+import (
+	"bzd_server/conf"
+	"bzd_server/models/Account"
+	"bzd_server/models/System"
+	"fmt"
+	"github.com/nats-io/nats.go"
+	"github.com/vmihailenco/msgpack/v5"
+)
+
+var Nats *nats.Conn
+
+func init() {
+	fmt.Println("============Nats init============")
+	var err error
+	// 连接Nats服务器
+	Nats, err = nats.Connect("nats://" + conf.NatsServer_Url)
+	if err != nil {
+		fmt.Println("nats 连接失败!")
+		panic(err)
+	}
+	fmt.Println("nats OK!")
+
+	go NatsInit()
+
+}
+
+func NatsInit() {
+	// 请求-响应, 响应 test3 消息。
+	_, _ = Nats.Subscribe("verification", func(m *nats.Msg) {
+		fmt.Printf("verification message: %s\n", string(m.Data))
+
+		type T_User struct {
+			T_uuid  string `xml:"T_uuid"`
+			T_power string `xml:"T_power"`
+			T_name  string `xml:"T_name"`
+			T_user  string `xml:"T_user"`
+		}
+		type T_R struct {
+			Code int16  `xml:"Code"`
+			Msg  string `xml:"Msg"`
+			Data T_User `xml:"Data"` // 泛型
+		}
+
+		var t_R T_R
+
+		// 验证登录
+		b_, admin_r := Account.Verification(string(m.Data), "")
+		if !b_ {
+			fmt.Println("Unmarshal error")
+			t_R.Code = 201
+			t_R.Msg = "ToKey !!!"
+			b, _ := msgpack.Marshal(&t_R)
+			_ = Nats.Publish(m.Reply, b)
+			return
+		}
+
+		t_R.Code = 200
+		t_R.Msg = "ok"
+		t_R.Data.T_uuid = admin_r.T_uuid
+		t_R.Data.T_power = admin_r.T_power
+		t_R.Data.T_name = admin_r.T_name
+		t_R.Data.T_user = admin_r.T_user
+
+		b, _ := msgpack.Marshal(&t_R)
+		_ = Nats.Publish(m.Reply, b)
+	})
+	// 发布-订阅 模式,异步订阅 test1
+	_, _ = Nats.Subscribe("AddSysLogs", func(m *nats.Msg) {
+		fmt.Printf("AddSysLogs message: %s\n", string(m.Data))
+
+		type T_S struct {
+			T_class string
+			T_title string
+			T_txt   string
+		}
+
+		var t_S T_S
+
+		err := msgpack.Unmarshal(m.Data, &t_S)
+		if err != nil {
+
+			System.Add_SysLogs("Nats", "Nats AddSysLogs 解析失败", string(m.Data))
+			return
+		}
+
+		System.Add_SysLogs(t_S.T_class, t_S.T_title, t_S.T_txt)
+
+	})
+	// 发布-订阅 模式,异步订阅 test1
+	_, _ = Nats.Subscribe("AddUserLogs", func(m *nats.Msg) {
+		fmt.Printf("AddUserLogs message: %s\n", string(m.Data))
+
+		type T_S struct {
+			T_uuid  string
+			T_class string
+			T_title string
+			T_txt   string
+		}
+
+		var t_S T_S
+
+		err := msgpack.Unmarshal(m.Data, &t_S)
+		if err != nil {
+			System.Add_SysLogs("Nats", "Nats AddUserLogs 解析失败", string(m.Data))
+			return
+		}
+
+		System.Add_UserLogs(t_S.T_uuid, t_S.T_class, t_S.T_title, t_S.T_txt)
+
+	})
+
+	// 发布-订阅 模式,异步订阅 test1
+	_, _ = Nats.Subscribe("AddNews", func(m *nats.Msg) {
+		fmt.Printf("AddNews message: %s\n", string(m.Data))
+
+		type T_S struct {
+			T_uuid  string
+			T_Title string
+			T_Url   string
+		}
+
+		var t_S T_S
+
+		err := msgpack.Unmarshal(m.Data, &t_S)
+		if err != nil {
+			System.Add_SysLogs("Nats", "Nats AddNews 解析失败", string(m.Data))
+			return
+		}
+
+		System.Add_News(System.News{T_uuid: t_S.T_uuid, T_Title: t_S.T_Title, T_Url: t_S.T_Url})
+
+	})
+}

+ 8 - 0
Z_Build.bat

@@ -0,0 +1,8 @@
+cd %~dp0
+set GOARCH=amd64
+set GOOS=linux
+set GOPATH=C:\Users\SIKED\go
+set GO111MODULE=auto
+
+go build ERP_user.go
+

+ 28 - 0
conf/app.conf

@@ -0,0 +1,28 @@
+appname = ERP_user
+HTTPPort = 8200
+runmode = dev
+Graceful = true
+EnableDocs = true
+copyrequestbody = true
+
+# Nats
+NatsServer_Url = "127.0.0.1:4222"
+
+
+# Mysql
+MysqlServer_UrlPort = "47.111.15.17:3306"
+# MysqlServer_UrlPort = "192.168.0.7:3306"
+MysqlServer_Database = "erp_user"
+MysqlServer_Username = "erp_user"
+MysqlServer_Password = "DxwTJra8k5rrMdRG"
+MysqlServer_MaxIdleConnections = 100
+MysqlServer_MaxOpenConnections = 200
+
+
+# Redis
+Redis_address = "47.111.15.17:6379"
+Redis_password = ""
+Redis_dbNum = "1"
+
+
+

+ 19 - 0
conf/config.go

@@ -0,0 +1,19 @@
+package conf
+
+import beego "github.com/beego/beego/v2/server/web"
+
+var Page_size = 10
+var NatsServer_Url, _ = beego.AppConfig.String("NatsServer_Url")
+
+// Mysql
+var MysqlServer_UrlPort, _ = beego.AppConfig.String("MysqlServer_UrlPort")
+var MysqlServer_Database, _ = beego.AppConfig.String("MysqlServer_Database")
+var MysqlServer_Username, _ = beego.AppConfig.String("MysqlServer_Username")
+var MysqlServer_Password, _ = beego.AppConfig.String("MysqlServer_Password")
+var MysqlServer_MaxIdleConnections, _ = beego.AppConfig.Int("MysqlServer_MaxIdleConnections")
+var MysqlServer_MaxOpenConnections, _ = beego.AppConfig.Int("MysqlServer_MaxOpenConnections")
+
+// Redis
+var Redis_address = "localhost:6379"
+var Redis_password = ""
+var Redis_dbNum = "10"

+ 80 - 0
controllers/News.go

@@ -0,0 +1,80 @@
+package controllers
+
+import (
+	"bzd_server/conf"
+	"bzd_server/lib"
+	"bzd_server/models/Account"
+	"bzd_server/models/System"
+	beego "github.com/beego/beego/v2/server/web"
+	"math"
+)
+
+type NewsController struct {
+	beego.Controller
+}
+
+// 列表 -
+func (c *NewsController) List() {
+	b_, admin_r := Account.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
+	}
+	// 分页参数 初始化
+	page, _ := c.GetInt("page")
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	// 查询
+	T_title := c.GetString("T_title")
+	T_Tag, _ := c.GetInt("T_Tag")
+	R_List, R_cnt := System.Read_News_List_1(admin_r.T_uuid, T_title, T_Tag, page, page_z)
+
+	// 封装 返回数据
+	type R_JSONS struct {
+		//必须的大写开头
+		Lite      []System.News_R
+		Num       int64
+		Page      int
+		Page_size int
+	}
+	var r_jsons R_JSONS
+	r_jsons.Num = R_cnt
+	r_jsons.Lite = R_List
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
+func (c *NewsController) See() {
+	b_, admin_r := Account.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
+	}
+
+	Id, _ := c.GetInt("Id")
+
+	if Id == 0 {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
+		c.ServeJSON()
+		return
+	}
+
+	System.Update_News_Tag_1(Id, admin_r.T_uuid)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}

+ 182 - 0
controllers/Power.go

@@ -0,0 +1,182 @@
+package controllers
+
+import (
+	"bzd_server/conf"
+	"bzd_server/lib"
+	"bzd_server/models/Account"
+
+	beego "github.com/beego/beego/v2/server/web"
+	"math"
+)
+
+type PowerController struct {
+	beego.Controller
+}
+
+// 列表 -
+func (c *PowerController) List() {
+
+	// 分页参数 初始化
+	page, _ := c.GetInt("page")
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	// 查询
+	T_name := c.GetString("T_name")
+	R_List, R_cnt := Account.Read_Power_List_1(T_name, page, page_z)
+
+	// 封装 返回数据
+	type R_JSONS struct {
+		//必须的大写开头
+		Lite      []Account.Power_R
+		Num       int64
+		Page      int
+		Page_size int
+	}
+	var r_jsons R_JSONS
+	r_jsons.Num = R_cnt
+	r_jsons.Lite = R_List
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
+func (c *PowerController) GetT() {
+
+	T_id := c.GetString("T_id")
+
+	if len(T_id) < 1 {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	R, err := Account.Read_Power_ByT_id(T_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改!"}
+		c.ServeJSON()
+		return
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Account.PowerToPower_R(R)}
+	c.ServeJSON()
+	return
+
+}
+func (c *PowerController) Add() {
+	// 验证登录
+	b_, admin_r := Account.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.T_power != "AAAAAAAA" {
+		c.Data["json"] = lib.JSONS{Code: 301, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_name := c.GetString("T_name")
+
+	var_ := Account.Power{
+		T_name: T_name,
+	}
+
+	_, err := Account.Add_Power(var_)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}
+
+func (c *PowerController) Edit() {
+	// 验证登录
+	b_, admin_r := Account.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.T_power != "AAAAAAAA" {
+		c.Data["json"] = lib.JSONS{Code: 301, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_id := c.GetString("T_id")
+	T_name := c.GetString("T_name")
+
+	var_ := Account.Power{
+		T_id:   T_id,
+		T_name: T_name,
+	}
+
+	if len(T_id) < 1 {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "修改失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	R, err := Account.Read_Power_ByT_id(var_.T_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
+		c.ServeJSON()
+		return
+	}
+	var_.Id = R.Id
+	Account.Update_Power(var_, "T_name")
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}
+func (c *PowerController) Del() {
+	// 验证登录
+	b_, admin_r := Account.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.T_power != "AAAAAAAA" {
+		c.Data["json"] = lib.JSONS{Code: 301, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_id := c.GetString("T_id")
+	if len(T_id) == 0 {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
+		c.ServeJSON()
+		return
+	}
+	R, err := Account.Read_Power_ByT_id(T_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "e!"}
+		c.ServeJSON()
+		return
+	}
+
+	Account.Delete_Power(R)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}

+ 83 - 0
controllers/SysLogs.go

@@ -0,0 +1,83 @@
+package controllers
+
+import (
+	"bzd_server/conf"
+	"bzd_server/lib"
+	"bzd_server/models/Account"
+	"bzd_server/models/System"
+	beego "github.com/beego/beego/v2/server/web"
+	"math"
+)
+
+type SysLogsController struct {
+	beego.Controller
+}
+
+// 列表 -
+func (c *SysLogsController) List() {
+	// 验证登录
+	b_, admin_r := Account.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.T_power != "AAAAAAAA" {
+		c.Data["json"] = lib.JSONS{Code: 301, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	// 分页参数 初始化
+	page, _ := c.GetInt("page")
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	// 查询
+	T_class := c.GetString("T_class")
+	T_title := c.GetString("T_title")
+	R_List, R_cnt := System.Read_SysLogs_List_1(T_class, T_title, page, page_z)
+
+	// 封装 返回数据
+	type R_JSONS struct {
+		//必须的大写开头
+		Lite      []System.SysLogs_R
+		Num       int64
+		Page      int
+		Page_size int
+	}
+	var r_jsons R_JSONS
+	r_jsons.Num = R_cnt
+	r_jsons.Lite = R_List
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
+// 列表 -
+func (c *SysLogsController) List_DISTINCT_Class() {
+	// 验证登录
+	b_, admin_r := Account.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.T_power != "AAAAAAAA" {
+		c.Data["json"] = lib.JSONS{Code: 301, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: System.Read_SysLogs_Class()}
+	c.ServeJSON()
+	return
+}

+ 280 - 0
controllers/User.go

@@ -0,0 +1,280 @@
+package controllers
+
+import (
+	"bzd_server/conf"
+	"bzd_server/lib"
+	"bzd_server/models/Account"
+	"bzd_server/models/System"
+	beego "github.com/beego/beego/v2/server/web"
+	"math"
+	"time"
+)
+
+type UserController struct {
+	beego.Controller
+}
+
+// 验证登录
+func (c *UserController) Login_verification() {
+	Admin_user := c.GetString("bzd_username")
+	Admin_pass := c.GetString("bzd_password")
+
+	//println("Login_verification", Admin_user, Admin_pass)
+	err, user_r := Account.Read_User_verification(Admin_user, Admin_pass)
+
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "E!"}
+	} else {
+		User_tokey := Account.Add_Tokey(user_r.T_uuid)
+		c.Ctx.SetCookie("User_tokey", User_tokey, time.Second*60*60)
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "OK!", Data: User_tokey}
+
+		System.Add_UserLogs(user_r.T_uuid, "用户", "用户登陆", "")
+
+	}
+
+	c.ServeJSON()
+	return
+
+}
+
+// --------------------------------------------------------------------------------------------------------------
+
+// 列表 -
+func (c *UserController) List() {
+	// 验证登录
+	b_, _ := Account.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
+	}
+
+	// 分页参数 初始化
+	page, _ := c.GetInt("page")
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	// 查询
+	T_name := c.GetString("T_name")
+	T_power := c.GetString("T_power")
+	R_List, R_cnt := Account.Read_User_List_1(T_name, T_power, page, page_z)
+
+	// 封装 返回数据
+	type R_JSONS struct {
+		//必须的大写开头
+		Lite      []Account.User_R
+		Num       int64
+		Page      int
+		Page_size int
+	}
+	var r_jsons R_JSONS
+	r_jsons.Num = R_cnt
+	r_jsons.Lite = R_List
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
+// 列表 -
+func (c *UserController) Info() {
+	// 验证登录
+	b_, admin_r := Account.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: Account.UserToUser_R(admin_r)}
+	c.ServeJSON()
+	return
+}
+func (c *UserController) Add() {
+
+	// 验证登录
+	b_, admin_r := Account.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.T_power != "AAAAAAAA" {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_power := c.GetString("T_power")
+	T_name := c.GetString("T_name")
+	T_user := c.GetString("T_user")
+	T_pass := c.GetString("T_pass")
+
+	var_ := Account.User{
+		T_power: T_power,
+		T_name:  T_name,
+		T_user:  T_user,
+		T_pass:  T_pass,
+	}
+	if len(T_power) < 1 {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "失败!"}
+		c.ServeJSON()
+		return
+	}
+	_, err := Account.Read_Power_ByT_id(T_power)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 205, Msg: "参数异常!"}
+		c.ServeJSON()
+		return
+	}
+	if len(var_.T_name) < 3 {
+		c.Data["json"] = lib.JSONS{Code: 206, Msg: "名字 长度太短 < 3!"}
+		c.ServeJSON()
+		return
+	}
+	if len(var_.T_user) < 3 {
+		c.Data["json"] = lib.JSONS{Code: 207, Msg: "用户名 长度太短 < 3!"}
+		c.ServeJSON()
+		return
+	}
+	if len(var_.T_pass) < 3 {
+		c.Data["json"] = lib.JSONS{Code: 208, Msg: "密码异常!"}
+		c.ServeJSON()
+		return
+	}
+
+	_, err = Account.Add_User(var_)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 209, Msg: "添加失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}
+
+func (c *UserController) Edit() {
+
+	// 验证登录
+	b_, admin_r := Account.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_uuid := c.GetString("T_uuid")
+	T_power := c.GetString("T_power")
+	T_name := c.GetString("T_name")
+	T_user := c.GetString("T_user")
+	T_pass := c.GetString("T_pass")
+
+	var err error
+	R := admin_r
+
+	// AAAAAAAAA
+	if len(T_uuid) > 0 || len(T_power) > 0 {
+		if admin_r.T_power == "AAAAAAAA" {
+			R, err = Account.Read_User_ByT_uuid(T_uuid)
+			if err != nil {
+				c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
+				c.ServeJSON()
+				return
+			}
+		} else {
+			c.Data["json"] = lib.JSONS{Code: 203, Msg: "没有权限!"}
+			c.ServeJSON()
+			return
+		}
+
+	}
+
+	if len(T_name) > 0 {
+		R.T_name = T_name
+		if len(T_name) < 3 {
+			c.Data["json"] = lib.JSONS{Code: 204, Msg: "名字 长度太短 < 3!"}
+			c.ServeJSON()
+			return
+		}
+	}
+	if len(T_user) > 0 {
+		R.T_user = T_user
+		if len(T_user) < 3 {
+			c.Data["json"] = lib.JSONS{Code: 205, Msg: "用户名 长度太短 < 3!"}
+			c.ServeJSON()
+			return
+		}
+	}
+	if len(T_pass) > 0 {
+		R.T_pass = T_pass
+		if len(T_power) < 8 {
+			c.Data["json"] = lib.JSONS{Code: 206, Msg: "密码太短了!"}
+			c.ServeJSON()
+			return
+		}
+	}
+
+	if len(T_power) > 0 {
+		R.T_power = T_power
+
+		_, err := Account.Read_Power_ByT_id(T_power)
+		if err != nil {
+			c.Data["json"] = lib.JSONS{Code: 208, Msg: "权限参数异常!"}
+			c.ServeJSON()
+			return
+		}
+	}
+
+	Account.Update_User(R, "T_power", "T_name", "T_user", "T_pass")
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}
+func (c *UserController) Del() {
+	// 验证登录
+	b_, admin_r := Account.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.T_power != "AAAAAAAA" {
+		c.Data["json"] = lib.JSONS{Code: 301, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_uuid := c.GetString("T_uuid")
+	if len(T_uuid) == 0 {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "e!"}
+		c.ServeJSON()
+		return
+	}
+
+	R, err := Account.Read_User_ByT_uuid(T_uuid)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "e!"}
+		c.ServeJSON()
+		return
+	}
+
+	Account.Delete_User(R)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}

+ 73 - 0
controllers/UserLogs.go

@@ -0,0 +1,73 @@
+package controllers
+
+import (
+	"bzd_server/conf"
+	"bzd_server/lib"
+	"bzd_server/models/Account"
+	"bzd_server/models/System"
+	beego "github.com/beego/beego/v2/server/web"
+	"math"
+)
+
+type UserLogsController struct {
+	beego.Controller
+}
+
+// 列表 -
+func (c *UserLogsController) List() {
+	// 验证登录
+	b_, admin_r := Account.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
+	}
+
+	// 分页参数 初始化
+	page, _ := c.GetInt("page")
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	// 查询
+	T_class := c.GetString("T_class")
+	T_title := c.GetString("T_title")
+	R_List, R_cnt := System.Read_UserLogs_List_1(admin_r.T_uuid, T_class, T_title, page, page_z)
+
+	// 封装 返回数据
+	type R_JSONS struct {
+		//必须的大写开头
+		Lite      []System.UserLogs_R
+		Num       int64
+		Page      int
+		Page_size int
+	}
+	var r_jsons R_JSONS
+	r_jsons.Num = R_cnt
+	r_jsons.Lite = R_List
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
+// 列表 -
+func (c *UserLogsController) List_DISTINCT_Class() {
+	// 验证登录
+	b_, _ := Account.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: System.Read_UserLogs_Class()}
+	c.ServeJSON()
+	return
+}

+ 49 - 0
go.mod

@@ -0,0 +1,49 @@
+module bzd_server
+
+go 1.17
+
+require (
+	github.com/beego/beego/v2 v2.0.1
+	github.com/beorn7/perks v1.0.1 // indirect
+	github.com/cespare/xxhash/v2 v2.1.1 // indirect
+	github.com/go-sql-driver/mysql v1.6.0
+	github.com/golang/protobuf v1.4.2 // indirect
+	github.com/hashicorp/golang-lru v0.5.4 // indirect
+	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
+	github.com/mitchellh/mapstructure v1.3.3 // indirect
+	github.com/pkg/errors v0.9.1 // indirect
+	github.com/prometheus/client_golang v1.7.0 // indirect
+	github.com/prometheus/client_model v0.2.0 // indirect
+	github.com/prometheus/common v0.10.0 // indirect
+	github.com/satori/go.uuid v1.2.0
+	github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
+	golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be // indirect
+	golang.org/x/mod v0.3.0 // indirect
+	golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect
+	golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec // indirect
+	golang.org/x/text v0.3.7 // indirect
+	golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58 // indirect
+	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
+	google.golang.org/protobuf v1.23.0 // indirect
+	gopkg.in/yaml.v2 v2.2.8 // indirect
+)
+
+require (
+	github.com/astaxie/beego v1.12.3
+	github.com/nats-io/nats.go v1.19.0
+	github.com/vmihailenco/msgpack/v5 v5.3.5
+)
+
+require (
+	github.com/gomodule/redigo v2.0.0+incompatible // indirect
+	github.com/kr/pretty v0.3.0 // indirect
+	github.com/nats-io/nats-server/v2 v2.9.4 // indirect
+	github.com/nats-io/nkeys v0.3.0 // indirect
+	github.com/nats-io/nuid v1.0.1 // indirect
+	github.com/prometheus/procfs v0.1.3 // indirect
+	github.com/rogpeppe/go-internal v1.8.0 // indirect
+	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
+	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
+	gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
+
+)

+ 316 - 0
go.sum

@@ -0,0 +1,316 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
+github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
+github.com/astaxie/beego v1.12.3 h1:SAQkdD2ePye+v8Gn1r4X6IKZM1wd28EyUOVQ3PDSOOQ=
+github.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA=
+github.com/beego/beego/v2 v2.0.1 h1:07a7Z0Ok5vbqyqh+q53sDPl9LdhKh0ZDy3gbyGrhFnE=
+github.com/beego/beego/v2 v2.0.1/go.mod h1:8zyHi1FnWO1mZLwTn62aKRIZF/aIKvkCBB2JYs+eqQI=
+github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ=
+github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60=
+github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
+github.com/coreos/etcd v3.3.25+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/couchbase/go-couchbase v0.0.0-20200519150804-63f3cdb75e0d/go.mod h1:TWI8EKQMs5u5jLKW/tsb9VwauIrMIxQG1r5fMsswK5U=
+github.com/couchbase/gomemcached v0.0.0-20200526233749-ec430f949808/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c=
+github.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
+github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI=
+github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk=
+github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
+github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg=
+github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
+github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
+github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
+github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
+github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ=
+github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
+github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
+github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
+github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g=
+github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8=
+github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/nats-io/jwt/v2 v2.3.0 h1:z2mA1a7tIf5ShggOFlR1oBPgd6hGqcDYsISxZByUzdI=
+github.com/nats-io/nats-server/v2 v2.9.4 h1:GvRgv1936J/zYUwMg/cqtYaJ6L+bgeIOIvPslbesdow=
+github.com/nats-io/nats-server/v2 v2.9.4/go.mod h1:AB6hAnGZDlYfqb7CTAm66ZKMZy9DpfierY1/PbpvI2g=
+github.com/nats-io/nats.go v1.19.0 h1:H6j8aBnTQFoVrTGB6Xjd903UMdE7jz6DS4YkmAqgZ9Q=
+github.com/nats-io/nats.go v1.19.0/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA=
+github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8=
+github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4=
+github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
+github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
+github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
+github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.7.0 h1:wCi7urQOGBsYcQROHqpUUX4ct84xp40t9R9JX0FuA/U=
+github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
+github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=
+github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8=
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
+github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
+github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
+github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
+github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 h1:DAYUYH5869yV94zvCES9F51oYtN5oGlwjxJJz7ZCnik=
+github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
+github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw=
+github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s=
+github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
+github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
+github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
+github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU=
+github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc=
+github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
+github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=
+github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU=
+go.etcd.io/etcd v3.3.25+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI=
+go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
+go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
+go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
+go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
+golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be h1:fmw3UbQh+nxngCAHrDCCztao/kbYFnWjoqop8dHx05A=
+golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec h1:BkDtF2Ih9xZ7le9ndzTA7KJow28VbQW3odyk/8drmuI=
+golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/time v0.0.0-20220922220347-f3bd1da661af h1:Yx9k8YCG3dvF87UAn2tu2HQLf2dt/eR1bXxpLMWeH+Y=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58 h1:1Bs6RVeBFtLZ8Yi1Hk07DiOqzvwLD/4hln4iahvFlag=
+golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=

+ 1 - 0
lastupdate.tmp

@@ -0,0 +1 @@
+{"C:\\BZD\\ERP\\ERP_user\\controllers":1667983172150574100}

+ 18 - 0
lib/lib.go

@@ -0,0 +1,18 @@
+package lib
+
+func init() {
+
+}
+
+type JSONS struct {
+	//必须的大写开头
+	Code int16
+	Msg  string
+	Data interface{} // 泛型
+}
+
+// func_page 分页   [{3 1} {4 2} {4 3} {4 4} {4 5} {4 6} {4 7} {4 8} {4 9} {5 2}]-
+type Page_T struct {
+	A int
+	V int64
+}

+ 29 - 0
lib/libString.go

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

+ 146 - 0
models/Account/Power.go

@@ -0,0 +1,146 @@
+package Account
+
+import (
+	"bzd_server/lib"
+	"fmt"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type Power struct {
+	Id     int    `orm:"column(ID);size(11);auto;pk"`
+	T_id   string `orm:"size(8);null"`   //  权限ID
+	T_name string `orm:"size(256);null"` //  权限名称
+
+	T_State    int       `orm:"size(200);1"`                                           //  0删除  1 正常
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
+	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
+}
+type Power_R struct {
+	T_id   string `orm:"size(256);null"` //  权限ID
+	T_name string `orm:"size(256);null"` //  权限名称
+}
+
+func (t *Power) TableName() string {
+	return "Power" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(Power))
+	//  初始化
+	go func() {
+		time.Sleep(3 * time.Second)
+		_, num := Read_Power_List_1("", 1, 10)
+		if num == 0 {
+			T_id, _ := Add_Power(Power{
+				T_name: "管理员",
+				T_id:   "AAAAAAAA",
+			})
+
+			Add_User(User{
+				T_power: T_id,
+				T_name:  "超级管理员",
+				T_user:  "admin",
+				T_pass:  "21232f297a57a5a743894a0e4a801fc3",
+			})
+
+		}
+	}()
+
+}
+
+func PowerToPower_R(r Power) (m Power_R) {
+	m.T_id = r.T_id
+	m.T_name = r.T_name
+	return
+}
+
+// 添加
+func Add_Power(r Power) (id string, err error) {
+	o := orm.NewOrm()
+
+	//生成编号
+	rand_x := 0
+	if len(r.T_id) == 0 {
+		for true {
+			r.T_id = lib.GetRandstring(8, "", int64(rand_x)) // 1,336,336
+			err := o.Read(&r, "T_id")                        // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+			if err != nil {
+				break
+			}
+			rand_x += 1
+		}
+	}
+
+	r.T_State = 1
+	_, err = o.Insert(&r)
+	if err != nil {
+		fmt.Println(err)
+	}
+	return r.T_id, err
+}
+
+// 获取 ById
+func Read_Power_ByT_id(T_id string) (r Power, err error) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(Power))
+	err = qs.Filter("T_id", T_id).One(&r)
+	return r, err
+}
+
+// 修改
+func Update_Power(m Power, cols ...string) bool {
+	o := orm.NewOrm()
+	if num, err := o.Update(&m, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+		return true
+	}
+	return false
+}
+
+// 删除
+func Delete_Power(v Power) bool {
+	o := orm.NewOrm()
+	if num, err := o.Delete(&v); err == nil {
+		fmt.Println("Number of records deleted in database:", num)
+	} else {
+		return false
+	}
+
+	return true
+}
+
+// 获取列表
+func Read_Power_List_1(T_name string, page int, page_z int) (r_ []Power_R, cnt int64) {
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	qs := o.QueryTable(new(Power))
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	// 过滤
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_State", 1) //.And("T_State", 1) .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+
+	if len(T_name) > 0 {
+		//cond1.AndCond(cond.And("T_class", class))
+		cond1 = cond1.And("T_name__icontains", T_name)
+	}
+
+	// 查询
+	var r []Power
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	for _, v := range r {
+		r_ = append(r_, PowerToPower_R(v))
+	}
+
+	return r_, cnt
+}

+ 105 - 0
models/Account/Tokey.go

@@ -0,0 +1,105 @@
+package Account
+
+import (
+	"bzd_server/conf"
+	"fmt"
+	"github.com/astaxie/beego/cache"
+	_ "github.com/astaxie/beego/cache/redis"
+	uuid "github.com/satori/go.uuid"
+	"log"
+	"time"
+)
+
+var redisCache_Tokey cache.Cache
+
+func init() {
+	//注册模型
+	//orm.RegisterModel(new(Tokey))
+
+	config := fmt.Sprintf(`{"key":"%s","conn":"%s","dbNum":"%s","password":"%s"}`,
+		"redis_Tokey", conf.Redis_address, conf.Redis_dbNum, conf.Redis_password)
+	fmt.Println(config)
+	var err error
+	redisCache_Tokey, err = cache.NewCache("redis", config)
+	if err != nil || redisCache_Tokey == nil {
+		errMsg := "failed to init redis"
+		fmt.Println(errMsg, err)
+	}
+}
+
+// ---------------- Redis -------------------
+//Redis_Set(m.T_sn,m) // Redis 更新缓存
+func Redis_Tokey_Set(key string, r string) (err error) {
+	err = redisCache_Tokey.Put(key, r, 24*time.Hour)
+	if err != nil {
+		fmt.Println("set key:", key, ",value:", r, err)
+	}
+	return
+}
+
+//if r,is :=Redis_Get(T_sn);is{
+//return r,nil
+//}
+func Redis_Tokey_Get(key string) (r string, is bool) {
+	if redisCache_Tokey.IsExist(key) {
+		//println("找到key:",key)
+		v := redisCache_Tokey.Get(key)
+		value := string(v.([]byte))
+		Redis_Tokey_Set(key, value)
+		return value, true
+	}
+	//println("没有 找到key:",key)
+	return "", false
+}
+
+func Redis_DelK(key string) (err error) {
+	err = redisCache_Tokey.Delete(key)
+	return
+}
+
+// ---------------- 特殊方法 -------------------
+
+// 验证 TOKEY
+func Read_Tokey(User_tokey string) (string, bool) {
+	return Redis_Tokey_Get(User_tokey)
+}
+
+// 添加 Tokey
+func Add_Tokey(User_uuid string) (Tokey string) {
+
+	for true {
+		Tokey = uuid.NewV4().String()
+		_, is := Redis_Tokey_Get(Tokey)
+		if !is {
+			break
+		}
+		fmt.Print("申请 TOKEY 重复!重新生成。", Tokey)
+	}
+	Redis_Tokey_Set(Tokey, User_uuid)
+
+	return Tokey
+}
+
+// 登录验证
+func Verification(GetCookie string, GetString string) (bool, User) {
+	// 自适应 参数
+	User_tokey := GetCookie
+	if len(User_tokey) == 0 {
+		User_tokey = GetString
+	}
+	if len(User_tokey) == 0 {
+		return false, User{}
+	}
+	// 判断 tokey 是否存在
+	tokey, is := Read_Tokey(User_tokey)
+	if !is {
+		return false, User{}
+	}
+
+	user_r, err := Read_User_ByT_uuid(tokey)
+	if err != nil {
+		return false, User{}
+	}
+	log.Println("登录 User_name 为:", user_r.T_name)
+	return true, user_r
+}

+ 151 - 0
models/Account/User.go

@@ -0,0 +1,151 @@
+package Account
+
+import (
+	"bzd_server/lib"
+	"errors"
+	"fmt"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type User struct {
+	Id      int    `orm:"column(ID);size(11);auto;pk"`
+	T_uuid  string `orm:"size(32);null"`  //
+	T_power string `orm:"size(8);0"`      // 权限ID
+	T_name  string `orm:"size(256);null"` //
+	T_user  string `orm:"size(256);null"` //
+	T_pass  string `orm:"size(256);null"` //
+
+	T_State    int       `orm:"size(200);1"`                                           //  0删除  1 正常
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
+	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
+}
+type User_R struct {
+	T_uuid  string //
+	T_power string // 权限ID
+	T_name  string //
+	T_user  string //
+}
+
+func (t *User) TableName() string {
+	return "User" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(User))
+
+}
+func UserToUser_R(r User) (m User_R) {
+	m.T_uuid = r.T_uuid
+	m.T_power = r.T_power
+	m.T_name = r.T_name
+	m.T_user = r.T_user
+	return
+}
+
+// 验证登录
+func Read_User_verification(T_user string, T_pass string) (error, User) {
+	o := orm.NewOrm()
+	r := User{T_user: T_user, T_pass: T_pass}
+	err := o.Read(&r, "T_user", "T_pass") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	if err != nil {
+		fmt.Println(err)
+	}
+	return err, r
+}
+
+// 添加
+func Add_User(r User) (id int64, err error) {
+	o := orm.NewOrm()
+
+	//生成编号
+	rand_x := 0
+	for true {
+		r.T_uuid = lib.GetRandstring(32, "", int64(rand_x)) // 1,336,336
+		err := o.Read(&r, "T_uuid")                         // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+		if err != nil {
+			break
+		}
+		rand_x += 1
+	}
+	// 查看是否重复
+	err = o.Read(&r, "T_user") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	if err == nil {
+		return 0, errors.New("T_user !!!!")
+	}
+
+	r.T_State = 1
+	id, err = o.Insert(&r)
+	if err != nil {
+		fmt.Println(err)
+	}
+	return id, err
+}
+
+// 获取 ById
+func Read_User_ByT_uuid(T_uuid string) (r User, e error) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(User))
+	e = qs.Filter("T_uuid", T_uuid).One(&r)
+	return
+}
+
+// 修改
+func Update_User(m User, cols ...string) bool {
+	o := orm.NewOrm()
+	if num, err := o.Update(&m, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+		return true
+	}
+	return false
+}
+
+// 删除
+func Delete_User(v User) bool {
+	o := orm.NewOrm()
+	if num, err := o.Delete(&v); err == nil {
+		fmt.Println("Number of records deleted in database:", num)
+	} else {
+		return false
+	}
+
+	return true
+}
+
+// 获取列表
+func Read_User_List_1(T_name string, T_power string, page int, page_z int) (r_ []User_R, cnt int64) {
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	qs := o.QueryTable(new(User))
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	// 过滤
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_State", 1) //.And("T_State", 1) .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+
+	if len(T_name) > 0 {
+		//cond1.AndCond(cond.And("T_class", class))
+		cond1 = cond1.AndCond(cond.Or("T_name__icontains", T_name).Or("T_user__icontains", T_name))
+	}
+	if len(T_power) > 0 {
+		cond1 = cond1.And("T_power", T_power)
+	}
+
+	// 查询
+	var r []User
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	for _, v := range r {
+		r_ = append(r_, UserToUser_R(v))
+	}
+
+	return r_, cnt
+}

+ 109 - 0
models/System/News.go

@@ -0,0 +1,109 @@
+package System
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type News struct {
+	Id         int       `orm:"column(ID);size(11);auto;pk"`
+	T_uuid     string    `orm:"size(256);null"`                                        //
+	T_Title    string    `orm:"size(256);null"`                                        // 标题
+	T_Url      string    `orm:"size(256);null"`                                        // 地址
+	T_Tag      int       `orm:"size(2);null"`                                          // 标记   0未阅读   1 已阅读
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
+}
+type News_R struct {
+	Id         int
+	T_uuid     string
+	T_Title    string
+	T_Url      string
+	T_Tag      int
+	CreateTime string
+}
+
+func (t *News) TableName() string {
+	return "News" // 数据库名称
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(News))
+}
+func NewsToNews_R(r News) (m News_R) {
+	m.Id = r.Id
+	m.T_uuid = r.T_uuid
+	m.T_Title = r.T_Title
+	m.T_Url = r.T_Url
+	m.T_Tag = r.T_Tag
+	m.CreateTime = r.CreateTime.Format("2006-01-02 15:04:05")
+	return
+}
+
+// 添加
+func Add_News(r News) (id int64, err error) {
+	o := orm.NewOrm()
+	r.T_Tag = 0
+	id, err = o.Insert(&r)
+	if err != nil {
+		fmt.Println(err)
+	}
+	return id, err
+}
+
+// 获取列表
+func Read_News_List_1(T_uuid string, T_Title string, T_Tag int, page int, page_z int) (r_ []News_R, cnt int64) {
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	qs := o.QueryTable(new(News))
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	// 过滤
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_uuid", T_uuid) //  .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+
+	if len(T_Title) > 0 {
+		//cond1.AndCond(cond.And("T_class", class))
+		cond1 = cond1.And("T_Title__icontains", T_Title)
+	}
+	if T_Tag == 0 {
+		cond1 = cond1.And("T_Tag", 0)
+	}
+	var r []News
+	// 查询
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	for _, v := range r {
+		r_ = append(r_, NewsToNews_R(v))
+	}
+
+	return r_, cnt
+}
+
+// 修改 排序
+func Update_News_Tag_1(Id int, T_uuid string) (err error) {
+	o := orm.NewOrm()
+	v := News{Id: Id}
+
+	if err = o.Read(&v, "Id"); err == nil {
+		var num int64
+		if v.T_uuid != T_uuid {
+			return
+		}
+
+		v.T_Tag = 1
+		if num, err = o.Update(&v, "T_Tag"); err == nil {
+			fmt.Println("Number of records updated in database:", num)
+		}
+	}
+
+	return
+}

+ 100 - 0
models/System/SysLogs.go

@@ -0,0 +1,100 @@
+package System
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type SysLogs struct {
+	Id      int    `orm:"column(ID);size(11);auto;pk"`
+	T_class string `orm:"size(256);null"`  //
+	T_title string `orm:"size(256);null"`  // 标题
+	T_txt   string `orm:"type(text);null"` // 详情
+
+	CreateTime time.Time `orm:"auto_now_add;type(datetime)"` //auto_now 每次 model 保存时都会对时间自动更新
+}
+type SysLogs_R struct {
+	T_class    string `orm:"size(256);null"`  //
+	T_title    string `orm:"size(256);null"`  // 标题
+	T_txt      string `orm:"type(text);null"` // 详情
+	CreateTime string
+}
+
+func (t *SysLogs) TableName() string {
+	return "SysLogs" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(SysLogs))
+	go func() {
+		time.Sleep(3 * time.Second)
+		Add_SysLogs("系统", "服务启动", "")
+	}()
+}
+func SysLogsToSysLogs_R(r SysLogs) (m SysLogs_R) {
+	m.T_class = r.T_class
+	m.T_title = r.T_title
+	m.T_txt = r.T_txt
+	m.CreateTime = r.CreateTime.Format("2006-01-02 15:04:05")
+	return
+}
+
+// 添加  System.Add_SysLogs("MqttServer","参数请求 [Rt_Parameter]","base")
+func Add_SysLogs(SysLogs_class string, SysLogs_title string, SysLogs_txt string) {
+	o := orm.NewOrm()
+	m := SysLogs{T_class: SysLogs_class, T_title: SysLogs_title, T_txt: SysLogs_txt}
+	o.Insert(&m)
+}
+
+// 获取列表
+func Read_SysLogs_List_1(SysLogs_class string, SysLogs_title string, page int, page_z int) (r_ []SysLogs_R, cnt int64) {
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	qs := o.QueryTable(new(SysLogs))
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	// 过滤
+	cond := orm.NewCondition()
+	cond1 := cond //.And("T_State", 1) .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+
+	if len(SysLogs_class) > 0 {
+		//cond1.AndCond(cond.And("T_class", class))
+		cond1 = cond1.And("T_class", SysLogs_class)
+	}
+	if len(SysLogs_title) > 0 {
+		//cond1.AndCond(cond.And("T_class", class))
+		cond1 = cond1.And("T_title", SysLogs_title)
+	}
+
+	// 查询
+	var r []SysLogs
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	for _, v := range r {
+		r_ = append(r_, SysLogsToSysLogs_R(v))
+	}
+
+	return r_, cnt
+}
+
+// 获取列表
+func Read_SysLogs_Class() (lists orm2.ParamsList) {
+	o := orm.NewOrm()
+	var pl_lists orm2.ParamsList
+	num, err := o.Raw("SELECT DISTINCT t_class FROM SysLogs LIMIT 0,1000").ValuesFlat(&pl_lists)
+	if err == nil {
+		fmt.Println("user nums: ", num)
+	}
+	fmt.Println(len(pl_lists))
+
+	return pl_lists
+}

+ 102 - 0
models/System/UserLogs.go

@@ -0,0 +1,102 @@
+package System
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type UserLogs struct {
+	Id      int    `orm:"column(ID);size(11);auto;pk"`
+	T_uuid  string `orm:"size(32);null"`   //
+	T_class string `orm:"size(256);null"`  //
+	T_title string `orm:"size(256);null"`  // 标题
+	T_txt   string `orm:"type(text);null"` // 详情
+
+	CreateTime time.Time `orm:"auto_now_add;type(datetime)"` //auto_now 每次 model 保存时都会对时间自动更新
+}
+type UserLogs_R struct {
+	T_class    string `orm:"size(256);null"`  //
+	T_title    string `orm:"size(256);null"`  // 标题
+	T_txt      string `orm:"type(text);null"` // 详情
+	CreateTime string
+}
+
+func (t *UserLogs) TableName() string {
+	return "UserLogs" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(UserLogs))
+
+}
+func UserLogsToUserLogs_R(r UserLogs) (m UserLogs_R) {
+	m.T_class = r.T_class
+	m.T_title = r.T_title
+	m.T_txt = r.T_txt
+	m.CreateTime = r.CreateTime.Format("2006-01-02 15:04:05")
+	return
+}
+
+// 添加  System.Add_UserLogs("MqttServer","参数请求 [Rt_Parameter]","base")
+func Add_UserLogs(T_uuid string, UserLogs_class string, UserLogs_title string, UserLogs_txt string) {
+	o := orm.NewOrm()
+	m := UserLogs{T_uuid: T_uuid, T_class: UserLogs_class, T_title: UserLogs_title, T_txt: UserLogs_txt}
+	o.Insert(&m)
+}
+
+// 获取列表
+func Read_UserLogs_List_1(T_uuid string, UserLogs_class string, UserLogs_title string, page int, page_z int) (r_ []UserLogs_R, cnt int64) {
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	qs := o.QueryTable(new(UserLogs))
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	// 过滤
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_uuid", T_uuid) //.And("T_State", 1) .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+
+	if len(UserLogs_class) > 0 {
+		//cond1.AndCond(cond.And("T_class", class))
+		cond1 = cond1.And("T_class", UserLogs_class)
+	}
+	if len(UserLogs_title) > 0 {
+		//cond1.AndCond(cond.And("T_class", class))
+		cond1 = cond1.And("T_title", UserLogs_title)
+	}
+
+	// 查询
+	var r []UserLogs
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
+	cnt, _ = qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	for _, v := range r {
+		r_ = append(r_, UserLogsToUserLogs_R(v))
+	}
+
+	return r_, cnt
+}
+
+type CLASS_lists struct {
+	UserLogs_class string
+}
+
+// 获取列表
+func Read_UserLogs_Class() (lists orm2.ParamsList) {
+	o := orm.NewOrm()
+	var pl_lists orm2.ParamsList
+	num, err := o.Raw("SELECT DISTINCT t_class FROM UserLogs LIMIT 0,1000").ValuesFlat(&pl_lists)
+	if err == nil {
+		fmt.Println("user nums: ", num)
+	}
+	fmt.Println(len(pl_lists))
+
+	return pl_lists
+}

File diff suppressed because it is too large
+ 406 - 0
nohup.out


+ 40 - 0
routers/User.go

@@ -0,0 +1,40 @@
+package routers
+
+import (
+	"bzd_server/controllers"
+	beego "github.com/beego/beego/v2/server/web"
+)
+
+func init() {
+
+	//-----------
+	beego.Router("/", &controllers.UserController{}, "*:Login_verification")
+	beego.Router("/Login_verification", &controllers.UserController{}, "*:Login_verification") // 获取未读消息
+
+	//-----------用户管理
+	beego.Router("/User/List", &controllers.UserController{}, "*:List") //
+	beego.Router("/User/Info", &controllers.UserController{}, "*:Info") //
+	beego.Router("/User/Add", &controllers.UserController{}, "*:Add")   //
+	beego.Router("/User/Edit", &controllers.UserController{}, "*:Edit") //
+	beego.Router("/User/Del", &controllers.UserController{}, "*:Del")   //
+
+	//-----------权限管理
+	beego.Router("/Power/List", &controllers.PowerController{}, "*:List") //
+	beego.Router("/Power/Get", &controllers.PowerController{}, "*:GetT")  //
+	beego.Router("/Power/Add", &controllers.PowerController{}, "*:Add")   //
+	beego.Router("/Power/Edit", &controllers.PowerController{}, "*:Edit") //
+	beego.Router("/Power/Del", &controllers.PowerController{}, "*:Del")   //
+
+	//-----------系统日志管理
+	beego.Router("/SysLogs/List", &controllers.SysLogsController{}, "*:List")                          //
+	beego.Router("/SysLogs/DISTINCT_Class", &controllers.SysLogsController{}, "*:List_DISTINCT_Class") // 获取分类列表
+
+	//-----------用户日志管理
+	beego.Router("/UserLogs/List", &controllers.UserLogsController{}, "*:List")                          //
+	beego.Router("/UserLogs/DISTINCT_Class", &controllers.UserLogsController{}, "*:List_DISTINCT_Class") // 获取分类列表
+
+	//-----------消息通知
+	beego.Router("/News/List", &controllers.NewsController{}, "*:List") //
+	beego.Router("/News/See", &controllers.NewsController{}, "*:See")   //
+
+}

+ 2 - 0
run.sh

@@ -0,0 +1,2 @@
+#无日志输出
+nohup ./Cold_server >/dev/null 2>&1 &

File diff suppressed because it is too large
+ 1 - 0
test.log


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