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