فهرست منبع

add:菜单管理

zoie 3 روز پیش
والد
کامیت
f34db13714
3فایلهای تغییر یافته به همراه229 افزوده شده و 1 حذف شده
  1. 226 0
      Nats/Nats.go
  2. 1 1
      go.mod
  3. 2 0
      go.sum

+ 226 - 0
Nats/Nats.go

@@ -3,7 +3,9 @@ package Nats
 import (
 import (
 	"ERP_project/conf"
 	"ERP_project/conf"
 	"ERP_project/models/Account"
 	"ERP_project/models/Account"
+	"encoding/json"
 	"fmt"
 	"fmt"
+
 	"github.com/astaxie/beego/logs"
 	"github.com/astaxie/beego/logs"
 	"github.com/beego/beego/v2/adapter/orm"
 	"github.com/beego/beego/v2/adapter/orm"
 	"github.com/nats-io/nats.go"
 	"github.com/nats-io/nats.go"
@@ -231,4 +233,228 @@ func NatsInit() {
 
 
 	})
 	})
 
 
+	// ========== 菜单相关NATS服务 ==========
+	// 请求-响应 添加菜单
+	_, _ = Nats.Subscribe(conf.NatsSubj_Prefix+conf.Sys_Name+"_Add_Menu", func(m *nats.Msg) {
+		type T_S struct {
+			Menu menulibs.Menu
+			APIs string // API JSON字符串
+		}
+		type T_R struct {
+			Code int16  `xml:"Code"`
+			Msg  string `xml:"Msg"`
+			Data int    `xml:"Data"`
+		}
+
+		var t_S T_S
+		var t_R T_R
+
+		err := msgpack.Unmarshal(m.Data, &t_S)
+		if err != nil {
+			t_R.Code = 202
+			t_R.Msg = "msgpack unmarshal err!"
+			b, _ := msgpack.Marshal(&t_R)
+			_ = Nats.Publish(m.Reply, b)
+			return
+		}
+
+		o := orm.NewOrm()
+		MenuDao := menulibs.NewMenu(o)
+		id64, err := MenuDao.Add_Menu(t_S.Menu)
+		if err != nil {
+			t_R.Code = 202
+			t_R.Msg = "添加菜单失败!"
+			b, _ := msgpack.Marshal(&t_R)
+			_ = Nats.Publish(m.Reply, b)
+			return
+		}
+		id := int(id64)
+
+		// 处理API JSON字符串
+		if len(t_S.APIs) > 0 {
+			var apiList []struct {
+				T_name   string `json:"T_name"`
+				T_uri    string `json:"T_uri"`
+				T_method string `json:"T_method"`
+			}
+			err = json.Unmarshal([]byte(t_S.APIs), &apiList)
+			if err == nil && len(apiList) > 0 {
+				var apis []menulibs.API
+				for _, api := range apiList {
+					if len(api.T_method) == 0 {
+						api.T_method = "POST"
+					}
+					apis = append(apis, menulibs.API{
+						T_Menu_Id: id,
+						T_name:    api.T_name,
+						T_uri:     api.T_uri,
+						T_method:  api.T_method,
+						T_enable:  1,
+					})
+				}
+				APIDao := menulibs.NewAPI(o, Account.RedisCache_API)
+				_, _ = APIDao.InsertMulti_API(apis)
+			}
+		}
+
+		t_R.Code = 200
+		t_R.Msg = "ok"
+		t_R.Data = id
+		b, _ := msgpack.Marshal(&t_R)
+		_ = Nats.Publish(m.Reply, b)
+	})
+
+	// 请求-响应 更新菜单
+	_, _ = Nats.Subscribe(conf.NatsSubj_Prefix+conf.Sys_Name+"_Update_Menu", func(m *nats.Msg) {
+		type T_S struct {
+			Menu menulibs.Menu
+			Cols []string // 需要更新的字段
+			APIs string   // API JSON字符串
+		}
+		type T_R struct {
+			Code int16  `xml:"Code"`
+			Msg  string `xml:"Msg"`
+			Data int    `xml:"Data"`
+		}
+
+		var t_S T_S
+		var t_R T_R
+
+		err := msgpack.Unmarshal(m.Data, &t_S)
+		if err != nil {
+			t_R.Code = 202
+			t_R.Msg = "msgpack unmarshal err!"
+			b, _ := msgpack.Marshal(&t_R)
+			_ = Nats.Publish(m.Reply, b)
+			return
+		}
+
+		o := orm.NewOrm()
+		MenuDao := menulibs.NewMenu(o)
+		APIDao := menulibs.NewAPI(o, Account.RedisCache_API)
+
+		// 更新菜单
+		if len(t_S.Cols) > 0 {
+			_, err = MenuDao.Update_Menu(t_S.Menu, t_S.Cols...)
+			if err != nil {
+				t_R.Code = 202
+				t_R.Msg = "更新菜单失败!"
+				b, _ := msgpack.Marshal(&t_R)
+				_ = Nats.Publish(m.Reply, b)
+				return
+			}
+		}
+
+		// 处理API JSON字符串
+		if len(t_S.APIs) > 0 {
+			// 先删除旧的API(软删除)
+			_, _ = APIDao.Delete_API_ByMenuId(t_S.Menu.Id)
+
+			var apiList []struct {
+				T_name   string `json:"T_name"`
+				T_uri    string `json:"T_uri"`
+				T_method string `json:"T_method"`
+			}
+			err = json.Unmarshal([]byte(t_S.APIs), &apiList)
+			if err == nil && len(apiList) > 0 {
+				var apis []menulibs.API
+				for _, api := range apiList {
+					if len(api.T_method) == 0 {
+						api.T_method = "POST"
+					}
+					apis = append(apis, menulibs.API{
+						T_Menu_Id: t_S.Menu.Id,
+						T_name:    api.T_name,
+						T_uri:     api.T_uri,
+						T_method:  api.T_method,
+						T_enable:  1,
+					})
+				}
+				_, _ = APIDao.InsertMulti_API(apis)
+			}
+		}
+
+		t_R.Code = 200
+		t_R.Msg = "ok"
+		t_R.Data = t_S.Menu.Id
+		b, _ := msgpack.Marshal(&t_R)
+		_ = Nats.Publish(m.Reply, b)
+	})
+
+	// 请求-响应 删除菜单
+	_, _ = Nats.Subscribe(conf.NatsSubj_Prefix+conf.Sys_Name+"_Delete_Menu", func(m *nats.Msg) {
+		type T_R struct {
+			Code int16  `xml:"Code"`
+			Msg  string `xml:"Msg"`
+			Data int    `xml:"Data"`
+		}
+
+		var menu menulibs.Menu
+		var t_R T_R
+
+		err := msgpack.Unmarshal(m.Data, &menu)
+		if err != nil {
+			t_R.Code = 202
+			t_R.Msg = "msgpack unmarshal err!"
+			b, _ := msgpack.Marshal(&t_R)
+			_ = Nats.Publish(m.Reply, b)
+			return
+		}
+
+		o := orm.NewOrm()
+		MenuDao := menulibs.NewMenu(o)
+		_, err = MenuDao.Delete_Menu(menu)
+		if err != nil {
+			t_R.Code = 202
+			t_R.Msg = "删除菜单失败!"
+			b, _ := msgpack.Marshal(&t_R)
+			_ = Nats.Publish(m.Reply, b)
+			return
+		}
+
+		t_R.Code = 200
+		t_R.Msg = "ok"
+		t_R.Data = menu.Id
+		b, _ := msgpack.Marshal(&t_R)
+		_ = Nats.Publish(m.Reply, b)
+	})
+
+	// 请求-响应 根据ID获取菜单
+	_, _ = Nats.Subscribe(conf.NatsSubj_Prefix+conf.Sys_Name+"_Read_Menu_ById", func(m *nats.Msg) {
+		type T_R struct {
+			Code int16         `xml:"Code"`
+			Msg  string        `xml:"Msg"`
+			Data menulibs.Menu `xml:"Data"`
+		}
+
+		var id int
+		var t_R T_R
+
+		err := msgpack.Unmarshal(m.Data, &id)
+		if err != nil {
+			t_R.Code = 202
+			t_R.Msg = "msgpack unmarshal err!"
+			b, _ := msgpack.Marshal(&t_R)
+			_ = Nats.Publish(m.Reply, b)
+			return
+		}
+
+		o := orm.NewOrm()
+		MenuDao := menulibs.NewMenu(o)
+		menu, err := MenuDao.Read_Menu_ById(id)
+		if err != nil {
+			t_R.Code = 202
+			t_R.Msg = "查询菜单失败!"
+			b, _ := msgpack.Marshal(&t_R)
+			_ = Nats.Publish(m.Reply, b)
+			return
+		}
+
+		t_R.Code = 200
+		t_R.Msg = "ok"
+		t_R.Data = menu
+		b, _ := msgpack.Marshal(&t_R)
+		_ = Nats.Publish(m.Reply, b)
+	})
+
 }
 }

+ 1 - 1
go.mod

@@ -9,7 +9,7 @@ require (
 	github.com/go-sql-driver/mysql v1.7.0
 	github.com/go-sql-driver/mysql v1.7.0
 	github.com/nats-io/nats.go v1.23.0
 	github.com/nats-io/nats.go v1.23.0
 	github.com/vmihailenco/msgpack/v5 v5.3.5
 	github.com/vmihailenco/msgpack/v5 v5.3.5
-	gogs.baozhida.cn/zoie/ERP_libs v0.0.0-20241029034120-31ca607abb2e
+	gogs.baozhida.cn/zoie/ERP_libs v0.0.0-20251106072747-8715c5686ee8
 )
 )
 
 
 require (
 require (

+ 2 - 0
go.sum

@@ -313,6 +313,8 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 gogs.baozhida.cn/zoie/ERP_libs v0.0.0-20241029034120-31ca607abb2e h1:sUbmO6gD9GcYjW1abZ2Brfw5xay2a3R6KlSVy7+QE4I=
 gogs.baozhida.cn/zoie/ERP_libs v0.0.0-20241029034120-31ca607abb2e h1:sUbmO6gD9GcYjW1abZ2Brfw5xay2a3R6KlSVy7+QE4I=
 gogs.baozhida.cn/zoie/ERP_libs v0.0.0-20241029034120-31ca607abb2e/go.mod h1:wS/rgL1FkdfMsCwKpwG04dZtG4SOFcBADi4lxHN7UeM=
 gogs.baozhida.cn/zoie/ERP_libs v0.0.0-20241029034120-31ca607abb2e/go.mod h1:wS/rgL1FkdfMsCwKpwG04dZtG4SOFcBADi4lxHN7UeM=
+gogs.baozhida.cn/zoie/ERP_libs v0.0.0-20251106072747-8715c5686ee8 h1:UisQz0DrnbqRFLRgeD7iiungJp6qZlyfRUsMQpXUOmE=
+gogs.baozhida.cn/zoie/ERP_libs v0.0.0-20251106072747-8715c5686ee8/go.mod h1:wS/rgL1FkdfMsCwKpwG04dZtG4SOFcBADi4lxHN7UeM=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 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-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-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=