scrm-go

menu_controller.go 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. package mpwechat
  2. import (
  3. base_ctl "SCRM/controllers"
  4. "SCRM/enums"
  5. "SCRM/models"
  6. "SCRM/service/wechat_service"
  7. "time"
  8. "encoding/json"
  9. "github.com/astaxie/beego"
  10. )
  11. func MpMenusCtlRegistRouters() {
  12. beego.Router("/api/mpwechat/menus", &MpMenusAPIController{}, "Get:GetMenus")
  13. beego.Router("/api/mpwechat/savemenus", &MpMenusAPIController{}, "Put:SaveMenus")
  14. }
  15. type MpMenusAPIController struct {
  16. base_ctl.BaseAuthAPIController
  17. }
  18. func (c *MpMenusAPIController) GetMenus() {
  19. adminUserInfo := c.GetAdminUserInfo()
  20. buttons, err := wechat_service.GetOrgMenusWithMsgs(adminUserInfo.CurrentOrgId)
  21. if err != nil {
  22. c.ServeFailJsonSend(enums.ErrorCodeDataException, "读取菜单配置信息失败:("+err.Error()+")")
  23. return
  24. }
  25. if buttons != nil && buttons.ButtonStatus != 1 {
  26. buttons = nil
  27. }
  28. var menus wechat_service.SelfMenuInfo
  29. if buttons != nil {
  30. err = json.Unmarshal([]byte(buttons.ButtonFileds), &menus)
  31. if err != nil {
  32. c.ServeFailJsonSend(enums.ErrorCodeDataException, "解析菜单配置信息失败:("+err.Error()+")")
  33. return
  34. }
  35. msgMap := make(map[string]string, 0)
  36. for _, msg := range buttons.Messages {
  37. msgMap[msg.MessageKeyName] = msg.MessageContent
  38. }
  39. for index, menu := range menus.Button {
  40. if _, exist := msgMap[menu.Key]; exist {
  41. menus.Button[index].Message = msgMap[menu.Key]
  42. }
  43. for sindex, sub := range menus.Button[index].SubButton {
  44. if _, exist := msgMap[sub.Key]; exist {
  45. menus.Button[index].SubButton[sindex].Message = msgMap[sub.Key]
  46. }
  47. }
  48. }
  49. }
  50. returnData := make(map[string]interface{}, 0)
  51. returnData["buttons"] = buttons
  52. returnData["menus"] = menus
  53. c.ServeSuccessJSON(returnData)
  54. return
  55. }
  56. func (c *MpMenusAPIController) SaveMenus() {
  57. adminUserInfo := c.GetAdminUserInfo()
  58. authorization, err := wechat_service.GetAuthorizationByOrgID(adminUserInfo.CurrentOrgId)
  59. if err != nil {
  60. c.ServeFailJsonSend(enums.ErrorCodeDataException, "保存菜单失败:("+err.Error()+")")
  61. return
  62. }
  63. if authorization == nil || authorization.AuthorizerStatus != 1 {
  64. c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "保存菜单失败:(未授权)")
  65. return
  66. }
  67. // 授权方公众号类型,0代表订阅号,1代表由历史老帐号升级后的订阅号,2代表服务号
  68. // 授权方认证类型,-1代表未认证,0代表微信认证,1代表新浪微博认证,2代表腾讯微博认证,3代表已资质认证通过但还未通过名称认证,4代表已资质认证通过、还未通过名称认证,但通过了新浪微博认证,5代表已资质认证通过、还未通过名称认证,但通过了腾讯微博认证
  69. if (authorization.AuthorizerServiceTypeInfo == 0 || authorization.AuthorizerServiceTypeInfo == 1) && authorization.AuthorizerVerifyTypeInfo == -1 {
  70. c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "保存菜单失败:(未认证的订阅号没有自定义菜单的接口权限)")
  71. return
  72. }
  73. var buttons wechat_service.SelfMenuInfo
  74. err = json.Unmarshal(c.Ctx.Input.RequestBody, &buttons)
  75. if err != nil {
  76. c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "解析菜单失败:("+err.Error()+")")
  77. return
  78. }
  79. clickMap := make(map[string]string, 0)
  80. for pindex, button := range buttons.Button {
  81. if button.Type == "click" && len(button.Key) > 0 && len(button.SubButton) == 0 {
  82. clickMap[button.Key] = button.Message
  83. }
  84. if button.Type != "click" {
  85. buttons.Button[pindex].Key = ""
  86. }
  87. if len(button.SubButton) > 0 {
  88. for sindex, child := range button.SubButton {
  89. if child.Type == "click" && len(child.Key) > 0 {
  90. clickMap[child.Key] = child.Message
  91. }
  92. buttons.Button[pindex].SubButton[sindex].Message = ""
  93. if child.Type != "click" {
  94. buttons.Button[pindex].SubButton[sindex].Key = ""
  95. }
  96. }
  97. }
  98. buttons.Button[pindex].Message = ""
  99. }
  100. messages, err := wechat_service.GetOrgAllClickMessages(adminUserInfo.CurrentOrgId)
  101. if err != nil {
  102. c.ServeFailJsonSend(enums.ErrorCodeDataException, "保存菜单失败:("+err.Error()+")")
  103. return
  104. }
  105. oldMsgs := make(map[string]models.AuthorizationMessageManagements)
  106. for _, message := range messages {
  107. if _, exist := clickMap[message.MessageKeyName]; exist {
  108. msg := *message
  109. oldMsgs[message.MessageKeyName] = msg
  110. }
  111. }
  112. buttonFileds, err := json.Marshal(buttons)
  113. if err != nil {
  114. c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "解析菜单失败:("+err.Error()+")")
  115. return
  116. }
  117. timeNow := time.Now().Unix()
  118. var saveButton wechat_service.Buttons
  119. saveButton.UserOrgID = adminUserInfo.CurrentOrgId
  120. saveButton.UpdatedTime = timeNow
  121. saveButton.ButtonStatus = 1
  122. saveButton.SendStatus = 0
  123. saveButton.ButtonFileds = string(buttonFileds)
  124. button, err := wechat_service.GetMenusByOrgID(adminUserInfo.CurrentOrgId)
  125. if err != nil {
  126. c.ServeFailJsonSend(enums.ErrorCodeDataException, "保存菜单失败:("+err.Error()+")")
  127. return
  128. }
  129. if button != nil {
  130. saveButton.ID = button.ID
  131. saveButton.CreatedTime = button.CreatedTime
  132. }
  133. saveButton.Messages = make([]*models.AuthorizationMessageManagements, 0)
  134. for keyName, Content := range clickMap {
  135. var msg models.AuthorizationMessageManagements
  136. msg.MessageMsgType = "event"
  137. msg.MessageMsgEvent = "click"
  138. msg.MessageContent = Content
  139. msg.UpdatedTime = timeNow
  140. msg.MessageStatus = 1
  141. msg.MessageKeyName = keyName
  142. msg.UserOrgId = adminUserInfo.CurrentOrgId
  143. if _, exist := oldMsgs[keyName]; exist {
  144. msg.ID = oldMsgs[keyName].ID
  145. msg.CreatedTime = oldMsgs[keyName].CreatedTime
  146. } else {
  147. msg.CreatedTime = timeNow
  148. }
  149. saveButton.Messages = append(saveButton.Messages, &msg)
  150. }
  151. err = wechat_service.SaveButtons(&saveButton)
  152. if err != nil {
  153. c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "保存菜单失败:("+err.Error()+")")
  154. return
  155. }
  156. err = wechat_service.SendMpWechatMenus(authorization.AuthorizerAccessToken, buttonFileds)
  157. if err != nil {
  158. c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "保存菜单成功,但发布菜单到公众号失败:("+err.Error()+")")
  159. return
  160. }
  161. returnData := make(map[string]interface{}, 0)
  162. returnData["buttons"] = buttons
  163. c.ServeSuccessJSON(returnData)
  164. return
  165. }