|
|
@@ -3,7 +3,9 @@ package Nats
|
|
|
import (
|
|
|
"ERP_project/conf"
|
|
|
"ERP_project/models/Account"
|
|
|
+ "encoding/json"
|
|
|
"fmt"
|
|
|
+
|
|
|
"github.com/astaxie/beego/logs"
|
|
|
"github.com/beego/beego/v2/adapter/orm"
|
|
|
"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)
|
|
|
+ })
|
|
|
+
|
|
|
}
|