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 `json:"name"` Type string `json:"type"` 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 `json:"name"` Type string `json:"type"` 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 `json:"sub_button"` } type WechatMenu struct { Button []WechatMenuDetail `json:"button"` } type WechatMenus struct { Menu WechatMenu `json:"menu"` } 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() beego.Error(menu) var keyList []*model.TaWechatKeyValue if menu != nil { menus := menu["menu"].(map[string]interface{}) wechatmenu := menus["button"].([]interface{}) for i := 0; i < len(wechatmenu); i++ { m := wechatmenu[i].(map[string]interface{}) if m["type"] != nil { if m["type"].(string) == "click" { key, err := c.kdao.GetValueByKey(m["key"].(string)) if err != nil { c.ResponseError(err) } keyList = append(keyList, key) } } if m["sub_button"] != nil { subbuttons := m["sub_button"].([]interface{}) for j := 0; j < len(subbuttons); j++ { subb := subbuttons[j].(map[string]interface{}) if subb["type"].(string) == "click" { key, err := c.kdao.GetValueByKey(subb["key"].(string)) if err != nil { c.ResponseError(err) } keyList = append(keyList, key) } } } } } 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 var menu WechatMenus err := json.Unmarshal([]byte(str), &menu) //var data []byte = []byte(str) if err != nil { c.ResponseError(err) } wechatmenu := menu.Menu.Button beego.Error(wechatmenu) 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(wechatmenu) var upwechat WechatMenu upwechat.Button = wechatmenu menuData, err := json.Marshal(upwechat) if err != nil { c.ResponseError(err) } beego.Error(string(menuData)) 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) } c.ResponseJSON("操作成功!") }