Bladeren bron

wechatmenu

胡轶钦 6 jaren geleden
bovenliggende
commit
628c883057

+ 114
- 8
controllers/wechatmenu/wechatmenu.go Bestand weergeven

@@ -1,9 +1,11 @@
1 1
 package wechatmenu
2 2
 
3 3
 import (
4
+	"encoding/json"
4 5
 	"strings"
5 6
 	"wechat-conf/controllers"
6 7
 	"wechat-conf/models/model"
8
+	"wechat-conf/service/keyvalue"
7 9
 	"wechat-conf/service/sysuser"
8 10
 	"wechat-conf/service/wechatmenu"
9 11
 	"wechat-conf/utils"
@@ -15,6 +17,7 @@ import (
15 17
 type MenuController struct {
16 18
 	dao  *wechatmenu.WechatmenuServ
17 19
 	sdao *sysuser.SysuserServ
20
+	kdao *keyvalue.KeyvalueServ
18 21
 	controllers.BaseController
19 22
 }
20 23
 
@@ -24,6 +27,34 @@ type MenuController struct {
24 27
 func (c *MenuController) Constructor() {
25 28
 	c.dao = wechatmenu.NewWechatmenuServ(c.Context)
26 29
 	c.sdao = sysuser.NewSysuserServ(c.Context)
30
+	c.kdao = keyvalue.NewKeyvalueServ(c.Context)
31
+}
32
+
33
+type Wehchatmenu struct {
34
+	WechatJson string
35
+}
36
+type WechatMenuDetailSub struct {
37
+	Name     string
38
+	Type     string
39
+	Value    string `json:"value,omitempty"`
40
+	Url      string `json:"url,omitempty"`
41
+	Media_Id string `json:"media_id,omitempty"`
42
+	Key      string `json:"key,omitempty"`
43
+}
44
+type WechatMenuDetail struct {
45
+	Name       string
46
+	Type       string
47
+	Value      string `json:"value,omitempty"`
48
+	Url        string `json:"url,omitempty"`
49
+	Media_Id   string `json:"media_id,omitempty"`
50
+	Key        string `json:"key,omitempty"`
51
+	Sub_Button []WechatMenuDetailSub
52
+}
53
+type WechatMenu struct {
54
+	Button []WechatMenuDetail
55
+}
56
+type Wechat struct {
57
+	Menu WechatMenu
27 58
 }
28 59
 
29 60
 func (c *MenuController) GetMenuList() {
@@ -38,6 +69,32 @@ func (c *MenuController) GetMenuList() {
38 69
 		c.ResponseError(err)
39 70
 	}
40 71
 	menu, err := client.GetMenu()
72
+	wechatmenu := menu["button"].([]WechatMenuDetail)
73
+	beego.Error("___________wechatmenulist____________")
74
+	beego.Error(wechatmenu)
75
+	beego.Error("_________________________________")
76
+	var keyList []*model.TaWechatKeyValue
77
+	for i := 0; i < len(wechatmenu); i++ {
78
+		if wechatmenu[i].Type == "click" {
79
+			key, err := c.kdao.GetValueByKey(wechatmenu[i].Key)
80
+			if err != nil {
81
+				c.ResponseError(err)
82
+			}
83
+			keyList = append(keyList, key)
84
+		}
85
+		for j := 0; j < len(wechatmenu[i].Sub_Button); j++ {
86
+			if wechatmenu[i].Sub_Button[j].Type == "click" {
87
+				key, err := c.kdao.GetValueByKey(wechatmenu[i].Key)
88
+				if err != nil {
89
+					c.ResponseError(err)
90
+				}
91
+				keyList = append(keyList, key)
92
+			}
93
+		}
94
+	}
95
+	beego.Error("___________keylist____________")
96
+	beego.Error(keyList)
97
+	beego.Error("_________________________________")
41 98
 	var code string = err.Error()
42 99
 	if err != nil {
43 100
 		if strings.Contains(code, "46003") {
@@ -46,11 +103,10 @@ func (c *MenuController) GetMenuList() {
46 103
 			c.ResponseError(err)
47 104
 		}
48 105
 	}
49
-	c.ResponseJSON(menu)
50
-}
51
-
52
-type Wehchatmenu struct {
53
-	WechatJson string
106
+	c.ResponseJSON(map[string]interface{}{
107
+		"menu":    menu,
108
+		"keyList": keyList,
109
+	})
54 110
 }
55 111
 
56 112
 func (c *MenuController) RefreshMenu() {
@@ -60,8 +116,58 @@ func (c *MenuController) RefreshMenu() {
60 116
 		c.ResponseError(err)
61 117
 	}
62 118
 	str := wechatJson.WechatJson
63
-	var data []byte = []byte(str)
64
-	err := c.dao.UpdateWechatMenu(str, user.OrgId)
119
+	beego.Error("____________str___________")
120
+	beego.Error(str)
121
+	beego.Error("__________________________")
122
+	var menu Wechat
123
+	err := json.Unmarshal([]byte(str), &menu)
124
+	//var data []byte = []byte(str)
125
+	if err != nil {
126
+		c.ResponseError(err)
127
+	}
128
+	wechatmenu := menu.Menu.Button
129
+	beego.Error("___________wechatmenu____________")
130
+	beego.Error(wechatmenu)
131
+	beego.Error("_________________________________")
132
+	for i := 0; i < len(wechatmenu); i++ {
133
+		if wechatmenu[i].Type == "text" {
134
+			wechatmenu[i].Type = "click"
135
+			var keyvalue = model.TaWechatKeyValue{
136
+				KeyId: utils.GetGUID(),
137
+				Value: wechatmenu[i].Value,
138
+			}
139
+			err := c.kdao.AddKeyvalue(keyvalue)
140
+			if err != nil {
141
+				c.ResponseError(err)
142
+			}
143
+			wechatmenu[i].Key = keyvalue.KeyId
144
+			wechatmenu[i].Value = ""
145
+		}
146
+		for j := 0; j < len(wechatmenu[i].Sub_Button); j++ {
147
+			if wechatmenu[i].Sub_Button[j].Type == "text" {
148
+				wechatmenu[i].Sub_Button[j].Type = "click"
149
+				var keyvalue = model.TaWechatKeyValue{
150
+					KeyId: utils.GetGUID(),
151
+					Value: wechatmenu[i].Sub_Button[j].Value,
152
+				}
153
+				err := c.kdao.AddKeyvalue(keyvalue)
154
+				if err != nil {
155
+					c.ResponseError(err)
156
+				}
157
+				wechatmenu[i].Sub_Button[j].Key = keyvalue.KeyId
158
+				wechatmenu[i].Sub_Button[j].Value = ""
159
+			}
160
+		}
161
+	}
162
+	beego.Error("___________wechatmenuData____________")
163
+	beego.Error(wechatmenu)
164
+	beego.Error("_________________________________")
165
+	menuData, err := json.Marshal(wechatmenu)
166
+	if err != nil {
167
+		c.ResponseError(err)
168
+	}
169
+
170
+	err = c.dao.UpdateWechatMenu(string(menuData), user.OrgId)
65 171
 	if err != nil {
66 172
 		c.ResponseError(err)
67 173
 	}
@@ -73,7 +179,7 @@ func (c *MenuController) RefreshMenu() {
73 179
 	if err != nil {
74 180
 		c.ResponseError(err)
75 181
 	}
76
-	err = client.RefreshMenu(data)
182
+	err = client.RefreshMenu(menuData)
77 183
 	if err != nil {
78 184
 		c.ResponseError(err)
79 185
 	}

+ 46
- 0
models/model/keyvalue/keyvalue.go Bestand weergeven

@@ -0,0 +1,46 @@
1
+package keyvalue
2
+
3
+import (
4
+	"strconv"
5
+	"wechat-conf/models"
6
+	"wechat-conf/models/model"
7
+	"wechat-conf/utils"
8
+
9
+	"github.com/go-xorm/xorm"
10
+)
11
+
12
+// KeyvalueDAO 当前数据库操作对象
13
+type KeyvalueDAO struct {
14
+	ctx *utils.Context
15
+	db  *xorm.Session
16
+}
17
+
18
+// NewKeyvalueDAO New Inst
19
+func NewKeyvalueDAO(ctx *utils.Context) *KeyvalueDAO {
20
+	return &KeyvalueDAO{
21
+		ctx: ctx,
22
+		db:  ctx.DB,
23
+	}
24
+}
25
+
26
+func (m *KeyvalueDAO) GetValueByKey(key string) (*model.TaWechatKeyValue, error) {
27
+	var keyvalue []model.TaWechatKeyValue
28
+	sql := `SELECT
29
+	* 
30
+FROM
31
+	ta_wechat_key_value 
32
+WHERE
33
+	key_id = '` + key + `'
34
+	and status > ` + strconv.Itoa(models.STATUS_DEL)
35
+	err := m.db.Sql(sql).Find(&keyvalue)
36
+	if len(keyvalue) > 0 {
37
+		return &keyvalue[0], err
38
+	}
39
+	return nil, err
40
+}
41
+
42
+func (m *KeyvalueDAO) AddValueKey(valueKey model.TaWechatKeyValue) error {
43
+	valueKey.Status = models.STATUS_NORMAL
44
+	_, err := m.db.Insert(valueKey)
45
+	return err
46
+}

+ 7
- 0
models/model/ta_wechat_key_value.go Bestand weergeven

@@ -0,0 +1,7 @@
1
+package model
2
+
3
+type TaWechatKeyValue struct {
4
+	KeyId  string `xorm:"not null pk VARCHAR(64)"`
5
+	Value  string `xorm:"TEXT"`
6
+	Status int    `xorm:"SMALLINT(6)"`
7
+}

+ 1
- 1
models/wechatmenu/wechatmenu.go Bestand weergeven

@@ -48,7 +48,7 @@ func (m *WechatMenuDAO) UpdateWechatMenu(wechatMenu, orgId string) error {
48 48
 	var cols = []string{
49 49
 		"wechat_config_json",
50 50
 	}
51
-	_, err := m.db.Cols(cols...).Where("org_id = ?", menu.WechatConfigId).Update(menu)
51
+	_, err := m.db.Cols(cols...).Where("org_id = ?", menu.WechatConfigId).And("status > ?", strconv.Itoa(models.STATUS_DEL)).Update(menu)
52 52
 	return err
53 53
 }
54 54
 func (m *WechatMenuDAO) DeleteWechatMenu(wechatConfigId string) error {

+ 15
- 0
service/autoreply/autoreply.go Bestand weergeven

@@ -57,6 +57,21 @@ func (s *AutoreplyServ) GetAutoReplyById(autoReplyId string) (*model.TaAutoReply
57 57
 func (s *AutoreplyServ) SaveAutoReply(autoreply model.TaAutoReply, orgId string) (*model.TaAutoReply, error) {
58 58
 	var newAutoreply *model.TaAutoReply
59 59
 	var err error
60
+	if autoreply.RuleName == "" {
61
+		return nil, errors.New("规则名不能为空")
62
+	}
63
+	if autoreply.AutoType == models.AUTOREPLY_KEYWORDS && autoreply.Keywords == "" {
64
+		return nil, errors.New("关键词不能为空")
65
+	}
66
+	if autoreply.PairType == "" {
67
+		return nil, errors.New("匹配规则不能为空")
68
+	}
69
+	if autoreply.MessageType == models.MESSAGE_TYPE_CONTENT && autoreply.MessageContent == "" {
70
+		return nil, errors.New("图文不能为空")
71
+	}
72
+	if autoreply.MessageType == models.MESSAGE_TYPE_IMG && autoreply.MessageImg == "" {
73
+		return nil, errors.New("图片不能为空")
74
+	}
60 75
 	if autoreply.AutoReplyId == "" {
61 76
 		autoreply.OrgId = orgId
62 77
 		newAutoreply, err = s.dao.AddAutoReply(autoreply)

+ 38
- 0
service/keyvalue/keyvalue.go Bestand weergeven

@@ -0,0 +1,38 @@
1
+package keyvalue
2
+
3
+import (
4
+	"errors"
5
+	"wechat-conf/models/model"
6
+	"wechat-conf/models/model/keyvalue"
7
+	"wechat-conf/utils"
8
+)
9
+
10
+// KeyvalueServ 用户
11
+type KeyvalueServ struct {
12
+	ctx *utils.Context
13
+	dao *keyvalue.KeyvalueDAO
14
+}
15
+
16
+// NewKeyvalueServ 初始化
17
+func NewKeyvalueServ(ctx *utils.Context) *KeyvalueServ {
18
+	return &KeyvalueServ{
19
+		ctx: ctx,
20
+		dao: keyvalue.NewKeyvalueDAO(ctx),
21
+	}
22
+}
23
+func (s *KeyvalueServ) GetValueByKey(keyId string) (*model.TaWechatKeyValue, error) {
24
+	keyvalue, err := s.dao.GetValueByKey(keyId)
25
+	if err != nil {
26
+		utils.LogError("获取值失败: " + err.Error())
27
+		return nil, errors.New("获取值失败")
28
+	}
29
+	return keyvalue, nil
30
+}
31
+func (s *KeyvalueServ) AddKeyvalue(keyvalue model.TaWechatKeyValue) error {
32
+	err := s.dao.AddValueKey(keyvalue)
33
+	if err != nil {
34
+		utils.LogError("新增值失败: " + err.Error())
35
+		return errors.New("新增值失败")
36
+	}
37
+	return nil
38
+}

+ 9
- 0
service/sysuser/sysuser.go Bestand weergeven

@@ -56,6 +56,15 @@ func (s *SysuserServ) GetSysuserById(userId string) (*model.SysUser, error) {
56 56
 func (s *SysuserServ) SaveUser(user model.SysUser) (*model.SysUser, error) {
57 57
 	var newUser *model.SysUser
58 58
 	var err error
59
+	if user.RealName == "" {
60
+		return nil, errors.New("真实姓名不能为空")
61
+	}
62
+	if user.UserName == "" {
63
+		return nil, errors.New("用户名不能为空")
64
+	}
65
+	if user.Phone == "" {
66
+		return nil, errors.New("手机号不能为空")
67
+	}
59 68
 	if user.UserId == "" {
60 69
 		user.UserId = utils.GetGUID()
61 70
 		user.Pwd = encrypt.Md5(encrypt.Md5("123456"), user.UserId)