package wechatmenu import ( "encoding/json" "strings" "wechat-conf/controllers" "wechat-conf/models/model" "wechat-conf/service/keyvalue" "wechat-conf/service/sysuser" "wechat-conf/service/wechatmenu" "wechat-conf/utils" "github.com/astaxie/beego" ) // MenuController 信息 type MenuController struct { dao *wechatmenu.WechatmenuServ sdao *sysuser.SysuserServ kdao *keyvalue.KeyvalueServ controllers.BaseController } // Constructor 初始化 Controller // @Title Constructor // @Description 初始化 Controller, 系统自动调用 func (c *MenuController) Constructor() { c.dao = wechatmenu.NewWechatmenuServ(c.Context) c.sdao = sysuser.NewSysuserServ(c.Context) c.kdao = keyvalue.NewKeyvalueServ(c.Context) } type Wehchatmenu struct { WechatJson string } type WechatMenuDetailSub struct { Name string Type string Value string `json:"value,omitempty"` Url string `json:"url,omitempty"` Media_Id string `json:"media_id,omitempty"` Key string `json:"key,omitempty"` } type WechatMenuDetail struct { Name string Type string Value string `json:"value,omitempty"` Url string `json:"url,omitempty"` Media_Id string `json:"media_id,omitempty"` Key string `json:"key,omitempty"` Sub_Button []WechatMenuDetailSub } type WechatMenu struct { Button []WechatMenuDetail } type Wechat struct { Menu WechatMenu } func (c *MenuController) GetMenuList() { user := c.Context.Get("user").(*model.SysUser) appId, err := c.sdao.GetAppIdByOrgId(user.OrgId) if err != nil { c.ResponseError(err) } client, err := utils.Component.GetWxClient(appId) if err != nil { c.ResponseError(err) } menu, err := client.GetMenu() wechatmenu := menu["button"].([]WechatMenuDetail) beego.Error("___________wechatmenulist____________") beego.Error(wechatmenu) beego.Error("_________________________________") var keyList []*model.TaWechatKeyValue for i := 0; i < len(wechatmenu); i++ { if wechatmenu[i].Type == "click" { key, err := c.kdao.GetValueByKey(wechatmenu[i].Key) if err != nil { c.ResponseError(err) } keyList = append(keyList, key) } for j := 0; j < len(wechatmenu[i].Sub_Button); j++ { if wechatmenu[i].Sub_Button[j].Type == "click" { key, err := c.kdao.GetValueByKey(wechatmenu[i].Key) if err != nil { c.ResponseError(err) } keyList = append(keyList, key) } } } beego.Error("___________keylist____________") beego.Error(keyList) beego.Error("_________________________________") var code string = err.Error() if err != nil { var code string = err.Error() if strings.Contains(code, "46003") { c.ResponseJSON(menu) } else { c.ResponseError(err) } } c.ResponseJSON(map[string]interface{}{ "menu": menu, "keyList": keyList, }) } func (c *MenuController) RefreshMenu() { user := c.Context.Get("user").(*model.SysUser) wechatJson := Wehchatmenu{} if err := c.ParseForm(&wechatJson); err != nil { c.ResponseError(err) } str := wechatJson.WechatJson beego.Error("____________str___________") beego.Error(str) beego.Error("__________________________") var menu Wechat err := json.Unmarshal([]byte(str), &menu) //var data []byte = []byte(str) if err != nil { c.ResponseError(err) } wechatmenu := menu.Menu.Button beego.Error("___________wechatmenu____________") beego.Error(wechatmenu) beego.Error("_________________________________") for i := 0; i < len(wechatmenu); i++ { if wechatmenu[i].Type == "text" { wechatmenu[i].Type = "click" var keyvalue = model.TaWechatKeyValue{ KeyId: utils.GetGUID(), Value: wechatmenu[i].Value, } err := c.kdao.AddKeyvalue(keyvalue) if err != nil { c.ResponseError(err) } wechatmenu[i].Key = keyvalue.KeyId wechatmenu[i].Value = "" } for j := 0; j < len(wechatmenu[i].Sub_Button); j++ { if wechatmenu[i].Sub_Button[j].Type == "text" { wechatmenu[i].Sub_Button[j].Type = "click" var keyvalue = model.TaWechatKeyValue{ KeyId: utils.GetGUID(), Value: wechatmenu[i].Sub_Button[j].Value, } err := c.kdao.AddKeyvalue(keyvalue) if err != nil { c.ResponseError(err) } wechatmenu[i].Sub_Button[j].Key = keyvalue.KeyId wechatmenu[i].Sub_Button[j].Value = "" } } } beego.Error("___________wechatmenuData____________") beego.Error(wechatmenu) beego.Error("_________________________________") menuData, err := json.Marshal(wechatmenu) if err != nil { c.ResponseError(err) } err = c.dao.UpdateWechatMenu(string(menuData), user.OrgId) if err != nil { c.ResponseError(err) } appId, err := c.sdao.GetAppIdByOrgId(user.OrgId) if err != nil { c.ResponseError(err) } client, err := utils.Component.GetWxClient(appId) if err != nil { c.ResponseError(err) } err = client.RefreshMenu(menuData) if err != nil { c.ResponseError(err) } }