zjxpcyc 6 年前
父节点
当前提交
3c390742fc
共有 13 个文件被更改,包括 245 次插入3464 次删除
  1. 1
    1
      conf/db.conf
  2. 0
    1
      controllers/base.go
  3. 1
    1
      controllers/card/card.go
  4. 2
    6
      controllers/customer/customer.go
  5. 2
    0
      controllers/file.go
  6. 0
    13
      controllers/session.go
  7. 63
    0
      controllers/wechat.go
  8. 23
    3309
      log/common.log
  9. 1
    1
      models/models.go
  10. 68
    56
      models/sys.go
  11. 6
    0
      routers/guest.go
  12. 57
    76
      service/sys.go
  13. 21
    0
      utils/wechat.go

+ 1
- 1
conf/db.conf 查看文件

6
 
6
 
7
 ; 数据库地址,可以使用IP
7
 ; 数据库地址,可以使用IP
8
 # db_addr      = 192.168.0.122
8
 # db_addr      = 192.168.0.122
9
-db_addr      = localhost
9
+db_addr      = 192.168.0.122
10
 
10
 
11
 ; 端口
11
 ; 端口
12
 db_port      = 3306
12
 db_port      = 3306

+ 0
- 1
controllers/base.go 查看文件

77
 	}
77
 	}
78
 
78
 
79
 	c.destroyContext(status < http.StatusMultipleChoices)
79
 	c.destroyContext(status < http.StatusMultipleChoices)
80
-
81
 	c.crosPolicy()
80
 	c.crosPolicy()
82
 	c.ServeJSON()
81
 	c.ServeJSON()
83
 	c.StopRun()
82
 	c.StopRun()

+ 1
- 1
controllers/card/card.go 查看文件

169
 
169
 
170
 // GetCardWithCustomer 获取卡及领取信息
170
 // GetCardWithCustomer 获取卡及领取信息
171
 func (c *CardController) GetCardWithCustomer() {
171
 func (c *CardController) GetCardWithCustomer() {
172
-
172
+	c.ResponseJSON("ok")
173
 }
173
 }

+ 2
- 6
controllers/customer/customer.go 查看文件

82
 		}
82
 		}
83
 	}
83
 	}
84
 	userMapping := c.Context.Get("userMap").(model.TaUserMapping)
84
 	userMapping := c.Context.Get("userMap").(model.TaUserMapping)
85
-	cust, err := c.serv.BindWechatUser(&userMapping, phone)
85
+	_, err := c.serv.BindWechatUser(&userMapping, phone)
86
 	if err != nil {
86
 	if err != nil {
87
 		c.ResponseError(err)
87
 		c.ResponseError(err)
88
 	}
88
 	}
89
 
89
 
90
-	c.SetSession(controllers.SNCustID, cust.CustomerId)
91
-
92
 	c.ResponseJSON("ok")
90
 	c.ResponseJSON("ok")
93
 }
91
 }
94
 
92
 
111
 
109
 
112
 	userMapping := c.Context.Get("userMap").(model.TaUserMapping)
110
 	userMapping := c.Context.Get("userMap").(model.TaUserMapping)
113
 
111
 
114
-	cust, err := c.serv.BindWechatCust(&userMapping, phone, csID, arID)
112
+	_, err := c.serv.BindWechatCust(&userMapping, phone, csID, arID)
115
 	if err != nil {
113
 	if err != nil {
116
 		c.ResponseError(err)
114
 		c.ResponseError(err)
117
 	}
115
 	}
118
 
116
 
119
-	c.SetSession(controllers.SNCustID, cust.CustomerId)
120
-
121
 	c.ResponseJSON("ok")
117
 	c.ResponseJSON("ok")
122
 }
118
 }
123
 
119
 

+ 2
- 0
controllers/file.go 查看文件

67
 
67
 
68
 	r := bytes.NewReader(buf.Bytes())
68
 	r := bytes.NewReader(buf.Bytes())
69
 	http.ServeContent(c.Ctx.ResponseWriter, c.Ctx.Request, fn, time.Now().Local(), r)
69
 	http.ServeContent(c.Ctx.ResponseWriter, c.Ctx.Request, fn, time.Now().Local(), r)
70
+
71
+	c.destroyContext(true)
70
 	c.StopRun()
72
 	c.StopRun()
71
 }
73
 }

+ 0
- 13
controllers/session.go 查看文件

1
-package controllers
2
-
3
-// session key 列表
4
-const (
5
-	// 用户ID
6
-	SNUserID = "userid"
7
-
8
-	// 客户ID
9
-	SNCustID = "custid"
10
-
11
-	// 内置 wechat_user
12
-	// 请勿使用 wechat_user 作为 session 的key
13
-)

+ 63
- 0
controllers/wechat.go 查看文件

1
+package controllers
2
+
3
+import (
4
+	"errors"
5
+	"net/url"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/utils"
8
+)
9
+
10
+// GetWxJsSDKSignature 获取 微信 jssdk 签名
11
+func (c *BaseController) GetWxJsSDKSignature() {
12
+	org := c.Context.Get("org").(model.SysOrg)
13
+	url, _ := url.QueryUnescape(c.GetString("url"))
14
+
15
+	cli := utils.WxClientFor(org.OrgId)
16
+	if cli == nil {
17
+		c.ResponseError(errors.New("初始化微信服务失败"))
18
+	}
19
+
20
+	res := cli.GetJsTicketSignature(url)
21
+	c.ResponseJSON(res)
22
+}
23
+
24
+// MiniLogin 获取小程序 OPENID
25
+func (c *BaseController) MiniLogin() {
26
+	org := c.Context.Get("org").(model.SysOrg)
27
+	code := c.GetString("code")
28
+
29
+	cli := utils.MiniClientFor(org.OrgId)
30
+	if cli == nil {
31
+		c.ResponseError(errors.New("初始化小程序服务失败"))
32
+	}
33
+
34
+	res, err := cli.GetOpenID(code)
35
+	if err != nil {
36
+		utils.LogError("获取用户信息失败: " + err.Error())
37
+		c.ResponseError(errors.New("获取用户信息失败"))
38
+	}
39
+
40
+	c.ResponseJSON(res)
41
+}
42
+
43
+// DecodeMiniData 解密小程序信息
44
+func (c *BaseController) DecodeMiniData() {
45
+	org := c.Context.Get("org").(model.SysOrg)
46
+
47
+	cli := utils.MiniClientFor(org.OrgId)
48
+	if cli == nil {
49
+		c.ResponseError(errors.New("初始化小程序服务失败"))
50
+	}
51
+
52
+	data := c.GetString("encrypted_data")
53
+	key := c.GetString("session_key")
54
+	iv := c.GetString("iv")
55
+
56
+	res, err := cli.GetUserFromEncryptData(data, key, iv)
57
+	if err != nil {
58
+		utils.LogError("解密用户信息失败: " + err.Error())
59
+		c.ResponseError(errors.New("解密用户信息失败"))
60
+	}
61
+
62
+	c.ResponseJSON(res)
63
+}

+ 23
- 3309
log/common.log
文件差异内容过多而无法显示
查看文件


+ 1
- 1
models/models.go 查看文件

20
 	dns := getMySQLDNS()
20
 	dns := getMySQLDNS()
21
 
21
 
22
 	engine, err := xorm.NewEngine(dbType, dns)
22
 	engine, err := xorm.NewEngine(dbType, dns)
23
-	// dao.ShowSQL()
23
+	// engine.ShowSQL()
24
 
24
 
25
 	if err != nil {
25
 	if err != nil {
26
 		panic(err)
26
 		panic(err)

+ 68
- 56
models/sys.go 查看文件

3
 import (
3
 import (
4
 	"errors"
4
 	"errors"
5
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
6
-	"spaceofcheng/services/utils"
7
 	"time"
6
 	"time"
8
 
7
 
9
 	"github.com/yl10/kit/guid"
8
 	"github.com/yl10/kit/guid"
10
-
11
-	"github.com/go-xorm/xorm"
12
 )
9
 )
13
 
10
 
14
-// SysDAO 系统
15
-type SysDAO struct {
16
-	ctx *utils.Context
17
-	db  *xorm.Session
18
-}
19
-
20
-// NewSysDAO New Inst
21
-func NewSysDAO(ctx *utils.Context) *SysDAO {
22
-	return &SysDAO{
23
-		ctx: ctx,
24
-		db:  ctx.DB,
25
-	}
26
-}
27
-
28
 // GetPureUserInfo 获取用户基本信息
11
 // GetPureUserInfo 获取用户基本信息
29
-func (m *SysDAO) GetPureUserInfo(id string) (*model.SysUser, error) {
12
+func GetPureUserInfo(id string) (*model.SysUser, error) {
30
 	user := model.SysUser{}
13
 	user := model.SysUser{}
31
 
14
 
32
-	has, err := m.db.Where("user_id=?", id).Get(&user)
15
+	has, err := DBEngine.Where("user_id=?", id).Get(&user)
33
 	if err != nil {
16
 	if err != nil {
34
 		return nil, err
17
 		return nil, err
35
 	}
18
 	}
46
 }
29
 }
47
 
30
 
48
 // GetUserMenu 获取用户菜单
31
 // GetUserMenu 获取用户菜单
49
-func (m *SysDAO) GetUserMenu(userID string) ([]model.SysMenu, error) {
32
+func GetUserMenu(userID string) ([]model.SysMenu, error) {
50
 	query := `
33
 	query := `
51
 		SELECT t.*
34
 		SELECT t.*
52
 		FROM sys_menu t
35
 		FROM sys_menu t
57
 	`
40
 	`
58
 
41
 
59
 	var menus []model.SysMenu
42
 	var menus []model.SysMenu
60
-	if err := m.db.SQL(query, userID, STATUS_NORMAL).Find(&menus); err != nil {
43
+	if err := DBEngine.SQL(query, userID, STATUS_NORMAL).Find(&menus); err != nil {
61
 		return nil, err
44
 		return nil, err
62
 	}
45
 	}
63
 
46
 
65
 }
48
 }
66
 
49
 
67
 // GetUserCase 获取用户案场
50
 // GetUserCase 获取用户案场
68
-func (m *SysDAO) GetUserCase(userID string) ([]model.SysUserCase, error) {
51
+func GetUserCase(userID string) ([]model.SysUserCase, error) {
69
 	query := `
52
 	query := `
70
 		SELECT t.*
53
 		SELECT t.*
71
 		FROM sys_user_case t
54
 		FROM sys_user_case t
74
 	`
57
 	`
75
 
58
 
76
 	var cases []model.SysUserCase
59
 	var cases []model.SysUserCase
77
-	if err := m.db.SQL(query, userID, STATUS_NORMAL).Find(&cases); err != nil {
60
+	if err := DBEngine.SQL(query, userID, STATUS_NORMAL).Find(&cases); err != nil {
78
 		return nil, err
61
 		return nil, err
79
 	}
62
 	}
80
 
63
 
82
 }
65
 }
83
 
66
 
84
 // GetOrg 获取机构信息
67
 // GetOrg 获取机构信息
85
-func (m *SysDAO) GetOrg(orgID string) (*model.SysOrg, error) {
68
+func GetOrg(orgID string) (*model.SysOrg, error) {
86
 	var org model.SysOrg
69
 	var org model.SysOrg
87
-	has, err := m.db.Where("org_id=?", orgID).And("status=?", STATUS_NORMAL).Get(&org)
70
+	has, err := DBEngine.Where("org_id=?", orgID).And("status=?", STATUS_NORMAL).Get(&org)
88
 	if err != nil {
71
 	if err != nil {
89
 		return nil, err
72
 		return nil, err
90
 	}
73
 	}
98
 
81
 
99
 // GetCustomer 获取用户信息
82
 // GetCustomer 获取用户信息
100
 // 暂时无法解决 一个用户 多组织架构的问题
83
 // 暂时无法解决 一个用户 多组织架构的问题
101
-func (m *SysDAO) GetCustomer(custID string) (*model.TaCustomer, error) {
84
+func GetCustomer(custID string) (*model.TaCustomer, error) {
102
 	var cust model.TaCustomer
85
 	var cust model.TaCustomer
103
 
86
 
104
-	has, err := m.db.Where("customer_id=?", custID).And("status=?", STATUS_NORMAL).Get(&cust)
87
+	has, err := DBEngine.Where("customer_id=?", custID).And("status=?", STATUS_NORMAL).Get(&cust)
105
 	if err != nil {
88
 	if err != nil {
106
 		return nil, err
89
 		return nil, err
107
 	}
90
 	}
114
 }
97
 }
115
 
98
 
116
 // GetUserMappingByOpenID 获取用户映射信息
99
 // GetUserMappingByOpenID 获取用户映射信息
117
-func (m *SysDAO) GetUserMappingByOpenID(openID string) ([]model.TaUserMapping, error) {
100
+func GetUserMappingByOpenID(openID string) ([]model.TaUserMapping, error) {
118
 	var users []model.TaUserMapping
101
 	var users []model.TaUserMapping
119
 
102
 
120
-	err := m.db.Where("openid=?", openID).Find(&users)
103
+	err := DBEngine.Where("openid=?", openID).Find(&users)
121
 	return users, err
104
 	return users, err
122
 }
105
 }
123
 
106
 
124
-// UpdateUserMapping 保存用户映射信息
125
-func (m *SysDAO) UpdateUserMapping(user *model.TaUserMapping) error {
107
+// EditUserMapping 保存用户映射信息
108
+func EditUserMapping(user *model.TaUserMapping) error {
126
 	// 如果没有映射ID, 则新增记录
109
 	// 如果没有映射ID, 则新增记录
127
 	if user.MappingId == "" {
110
 	if user.MappingId == "" {
128
 		user.MappingId = guid.NewGUIDString()
111
 		user.MappingId = guid.NewGUIDString()
129
-		_, err := m.db.Insert(user)
112
+		_, err := DBEngine.Insert(user)
130
 		return err
113
 		return err
131
 	}
114
 	}
132
 
115
 
134
 	cols := []string{
117
 	cols := []string{
135
 		"account_info",
118
 		"account_info",
136
 	}
119
 	}
137
-	_, err := m.db.Cols(cols...).
120
+	_, err := DBEngine.Cols(cols...).
138
 		Where("account_type=?", user.AccountType).
121
 		Where("account_type=?", user.AccountType).
139
 		And("openid=?", user.Openid).
122
 		And("openid=?", user.Openid).
140
 		Update(user)
123
 		Update(user)
141
 	return err
124
 	return err
142
 }
125
 }
143
 
126
 
144
-// GetCaseByContext 获取案场
145
-func GetCaseByContext(ctx *utils.Context) (string, error) {
146
-	csRaw := ctx.Get("currentCase")
147
-	if csRaw == nil {
148
-		return "", errors.New("当前人员无案场权限")
149
-	}
150
-
151
-	cs := csRaw.(model.SysUserCase)
152
-	if cs.CaseId == "" || cs.Status == STATUS_DEL {
153
-		return "", errors.New("当前人员无案场权限")
154
-	}
155
-
156
-	return cs.CaseId, nil
157
-}
158
-
159
 // GetWeChatConfig 获取微信配置
127
 // GetWeChatConfig 获取微信配置
160
-func (m *SysDAO) GetWeChatConfig(org string) (*model.SysWechatConf, error) {
128
+func GetWeChatConfig(org, cliType string) (*model.SysWechatConf, error) {
161
 	conf := new(model.SysWechatConf)
129
 	conf := new(model.SysWechatConf)
162
 
130
 
163
-	if _, err := m.db.Where("org_id=?", org).And("type=?", WECHAT_WX).Get(conf); err != nil {
131
+	if _, err := DBEngine.Where("org_id=?", org).And("type=?", cliType).Get(conf); err != nil {
164
 		return nil, err
132
 		return nil, err
165
 	}
133
 	}
166
 
134
 
168
 }
136
 }
169
 
137
 
170
 // InsertToken 插入 token 生成记录
138
 // InsertToken 插入 token 生成记录
171
-func (m *SysDAO) InsertToken(token string) error {
139
+func InsertToken(token string) error {
172
 	tk := model.SysTokenLog{
140
 	tk := model.SysTokenLog{
173
 		Token:      token,
141
 		Token:      token,
174
 		Status:     STATUS_NORMAL,
142
 		Status:     STATUS_NORMAL,
175
 		CreateDate: time.Now().Local(),
143
 		CreateDate: time.Now().Local(),
176
 	}
144
 	}
177
 
145
 
178
-	if _, err := m.db.Insert(&tk); err != nil {
146
+	if _, err := DBEngine.Insert(&tk); err != nil {
179
 		return err
147
 		return err
180
 	}
148
 	}
181
 
149
 
183
 }
151
 }
184
 
152
 
185
 // UpdateTokenExpire 设置 token 过期
153
 // UpdateTokenExpire 设置 token 过期
186
-func (m *SysDAO) UpdateTokenExpire(token string) error {
154
+func UpdateTokenExpire(token string) error {
187
 	tk := model.SysTokenLog{
155
 	tk := model.SysTokenLog{
188
 		Status: STATUS_DEL,
156
 		Status: STATUS_DEL,
189
 	}
157
 	}
190
 
158
 
191
-	if _, err := m.db.Cols("status").Where("token=?", token).Update(&tk); err != nil {
159
+	if _, err := DBEngine.Cols("status").Where("token=?", token).Update(&tk); err != nil {
192
 		return err
160
 		return err
193
 	}
161
 	}
194
 
162
 
196
 }
164
 }
197
 
165
 
198
 // GetToken 获取 token
166
 // GetToken 获取 token
199
-func (m *SysDAO) GetToken(token string) (*model.SysTokenLog, error) {
167
+func GetToken(token string) (*model.SysTokenLog, error) {
200
 	tk := model.SysTokenLog{}
168
 	tk := model.SysTokenLog{}
201
 
169
 
202
-	if _, err := m.db.Where("token=?", token).Get(&tk); err != nil {
170
+	if _, err := DBEngine.Where("token=?", token).Get(&tk); err != nil {
203
 		return nil, err
171
 		return nil, err
204
 	}
172
 	}
205
 
173
 
206
 	return &tk, nil
174
 	return &tk, nil
207
 }
175
 }
176
+
177
+// GetCustomerByID 依据ID获取客户
178
+func GetCustomerByID(id string) (*model.TaCustomer, error) {
179
+	cust := new(model.TaCustomer)
180
+
181
+	if _, err := DBEngine.Where("customer_id=?", id).Get(cust); err != nil {
182
+		return nil, err
183
+	}
184
+
185
+	return cust, nil
186
+}
187
+
188
+func SaveCustomer(cust *model.TaCustomer) error {
189
+	cust.CustomerId = guid.NewGUIDString()
190
+	cust.CreateDate = time.Now().Local()
191
+	cust.Status = STATUS_NORMAL
192
+
193
+	_, err := DBEngine.Insert(cust)
194
+	return err
195
+}
196
+
197
+// SaveAccount 保存账户信息
198
+func SaveAccount(account *model.TaCustomerAccount) error {
199
+	if account.CustomerId == "" {
200
+		return errors.New("账户未关联人员")
201
+	}
202
+
203
+	account.Status = STATUS_NORMAL
204
+	account.CreateDate = time.Now().Local()
205
+	account.AccountId = guid.NewGUIDString()
206
+
207
+	_, err := DBEngine.Insert(account)
208
+	return err
209
+}
210
+
211
+// UpdateUserMapping 更新用户映射
212
+func UpdateUserMapping(userMap *model.TaUserMapping, cols []string) error {
213
+	if userMap.MappingId == "" {
214
+		return errors.New("用户映射信息不存在")
215
+	}
216
+
217
+	_, err := DBEngine.Where("mapping_id=?", userMap.MappingId).Cols(cols...).Update(userMap)
218
+	return err
219
+}

+ 6
- 0
routers/guest.go 查看文件

50
 		// 登录
50
 		// 登录
51
 		beego.NSRouter("/signin", &user.UserController{}, "post:SignIn"),
51
 		beego.NSRouter("/signin", &user.UserController{}, "post:SignIn"),
52
 
52
 
53
+		// 微信
54
+		// js sdk 签名
55
+		beego.NSRouter("/wechat/jssdk/signature", &controllers.BaseController{}, "get:GetWxJsSDKSignature"),
56
+		beego.NSRouter("/wechat/mini/login", &controllers.BaseController{}, "post:MiniLogin"),
57
+		beego.NSRouter("/wechat/mini/decodedata", &controllers.BaseController{}, "post:DecodeMiniData"),
58
+
53
 		beego.NSRouter("/websocket/:grps/:id", &controllers.BaseController{}, "get:Ws"),
59
 		beego.NSRouter("/websocket/:grps/:id", &controllers.BaseController{}, "get:Ws"),
54
 	)
60
 	)
55
 }
61
 }

+ 57
- 76
service/sys.go 查看文件

5
 	"errors"
5
 	"errors"
6
 	"net/http"
6
 	"net/http"
7
 	"spaceofcheng/services/models"
7
 	"spaceofcheng/services/models"
8
-	"spaceofcheng/services/models/customer"
9
 	"spaceofcheng/services/models/model"
8
 	"spaceofcheng/services/models/model"
10
 	"spaceofcheng/services/utils"
9
 	"spaceofcheng/services/utils"
11
 	"strings"
10
 	"strings"
21
 
20
 
22
 // SysServ 系统处理
21
 // SysServ 系统处理
23
 type SysServ struct {
22
 type SysServ struct {
24
-	org         model.SysOrg
25
-	ctx         *utils.Context
26
-	dao         *models.SysDAO
27
-	customerdao *customer.CustomerDAO
23
+	org model.SysOrg
24
+	ctx *utils.Context
28
 }
25
 }
29
 
26
 
30
 // NewSysServ 初始化
27
 // NewSysServ 初始化
31
 func NewSysServ(ctx *utils.Context) *SysServ {
28
 func NewSysServ(ctx *utils.Context) *SysServ {
32
 	return &SysServ{
29
 	return &SysServ{
33
-		ctx:         ctx,
34
-		dao:         models.NewSysDAO(ctx),
35
-		customerdao: customer.NewCustomerDAO(ctx),
30
+		ctx: ctx,
36
 	}
31
 	}
37
 }
32
 }
38
 
33
 
68
 		return s.authWechat(gctx)
63
 		return s.authWechat(gctx)
69
 	}
64
 	}
70
 
65
 
66
+	// 小程序 端
67
+	if clientType == utils.ClientMini {
68
+		return s.authMini(gctx)
69
+	}
70
+
71
 	return map[string]interface{}{
71
 	return map[string]interface{}{
72
 		"code":  http.StatusBadRequest,
72
 		"code":  http.StatusBadRequest,
73
 		"error": errors.New("暂无该客户端的 API"),
73
 		"error": errors.New("暂无该客户端的 API"),
111
 
111
 
112
 	// 入库
112
 	// 入库
113
 	if !token.Guest {
113
 	if !token.Guest {
114
-		if err := s.dao.InsertToken(tokenEncodeStr); err != nil {
114
+		if err := models.InsertToken(tokenEncodeStr); err != nil {
115
 			utils.LogError("入库 Token 失败: " + err.Error())
115
 			utils.LogError("入库 Token 失败: " + err.Error())
116
 			return tokenEncodeStr
116
 			return tokenEncodeStr
117
 		}
117
 		}
163
 	} else {
163
 	} else {
164
 		// 初始化微信配置
164
 		// 初始化微信配置
165
 		if err := s.initWechatClient(s.org.OrgId); err != nil {
165
 		if err := s.initWechatClient(s.org.OrgId); err != nil {
166
-			utils.LogError("初始化微信客户端失败: " + err.Error())
166
+			utils.LogError("初始化微信服务失败: " + err.Error())
167
 
167
 
168
 			return map[string]interface{}{
168
 			return map[string]interface{}{
169
 				"code":  http.StatusInternalServerError,
169
 				"code":  http.StatusInternalServerError,
170
-				"error": errors.New("初始化微信客户端失败"),
170
+				"error": errors.New("初始化微信服务失败"),
171
 			}
171
 			}
172
 		}
172
 		}
173
 
173
 
223
 	}
223
 	}
224
 
224
 
225
 	// 查询数据库是否存在已有映射
225
 	// 查询数据库是否存在已有映射
226
-	userMapList, err := s.dao.GetUserMappingByOpenID(openID)
226
+	userMapList, err := models.GetUserMappingByOpenID(openID)
227
 	if err != nil {
227
 	if err != nil {
228
 		utils.LogError("校验人员失败: " + err.Error())
228
 		utils.LogError("校验人员失败: " + err.Error())
229
 		return map[string]interface{}{
229
 		return map[string]interface{}{
267
 	}
267
 	}
268
 
268
 
269
 	// 更新映射信息, 没有的话则插入
269
 	// 更新映射信息, 没有的话则插入
270
-	err = s.dao.UpdateUserMapping(userMapping)
270
+	err = models.EditUserMapping(userMapping)
271
 	if err != nil {
271
 	if err != nil {
272
 		utils.LogError("保存用户映射信息失败: " + err.Error())
272
 		utils.LogError("保存用户映射信息失败: " + err.Error())
273
 		return map[string]interface{}{
273
 		return map[string]interface{}{
294
 			}
294
 			}
295
 		}
295
 		}
296
 	} else {
296
 	} else {
297
-		cust, err = s.customerdao.GetCustomerByID(userMapping.UserId)
297
+		cust, err = models.GetCustomerByID(userMapping.UserId)
298
 		if err != nil {
298
 		if err != nil {
299
 			utils.LogError("查询用户信息失败: " + err.Error())
299
 			utils.LogError("查询用户信息失败: " + err.Error())
300
 			return map[string]interface{}{
300
 			return map[string]interface{}{
317
 	return nil
317
 	return nil
318
 }
318
 }
319
 
319
 
320
+// 小程序端暂时无人员或者其他业务要求
321
+func (s *SysServ) authMini(gctx *context.Context) map[string]interface{} {
322
+	if err := s.initMiniClient(s.org.OrgId); err != nil {
323
+		utils.LogError("初始化小程序服务失败: " + err.Error())
324
+
325
+		return map[string]interface{}{
326
+			"code":  http.StatusInternalServerError,
327
+			"error": errors.New("初始化小程序服务失败"),
328
+		}
329
+	}
330
+
331
+	return nil
332
+}
333
+
320
 // wechartSignIn 使用 code 微信登录
334
 // wechartSignIn 使用 code 微信登录
321
 func (s *SysServ) wechartSignIn(gctx *context.Context, code string) (*utils.WechatUser, error) {
335
 func (s *SysServ) wechartSignIn(gctx *context.Context, code string) (*utils.WechatUser, error) {
322
 	// 获取 微信信息
336
 	// 获取 微信信息
349
 	}
363
 	}
350
 
364
 
351
 	// 校验 token
365
 	// 校验 token
352
-	tk, err := s.dao.GetToken(tokenEnStr)
366
+	tk, err := models.GetToken(tokenEnStr)
353
 	if err != nil {
367
 	if err != nil {
354
 		utils.LogError("查询 Token 失败: " + err.Error())
368
 		utils.LogError("查询 Token 失败: " + err.Error())
355
 		return nil, errors.New("校验Token失败或已过期")
369
 		return nil, errors.New("校验Token失败或已过期")
365
 // UpdateTokenExpire 更新 token 为过期
379
 // UpdateTokenExpire 更新 token 为过期
366
 // 如果发生错误, 此处选择忽略
380
 // 如果发生错误, 此处选择忽略
367
 func (s *SysServ) UpdateTokenExpire(token string) {
381
 func (s *SysServ) UpdateTokenExpire(token string) {
368
-	if err := s.dao.UpdateTokenExpire(token); err != nil {
382
+	if err := models.UpdateTokenExpire(token); err != nil {
369
 		utils.LogError("更新 Token 过期失败: " + err.Error())
383
 		utils.LogError("更新 Token 过期失败: " + err.Error())
370
 	}
384
 	}
371
 }
385
 }
384
 
398
 
385
 // SetUserProfile 设置用户信息
399
 // SetUserProfile 设置用户信息
386
 func (s *SysServ) SetUserProfile(id string) error {
400
 func (s *SysServ) SetUserProfile(id string) error {
387
-	user, err := s.dao.GetPureUserInfo(id)
401
+	user, err := models.GetPureUserInfo(id)
388
 	if err != nil {
402
 	if err != nil {
389
 		return utils.LogError("获取用户基本信息失败: " + err.Error())
403
 		return utils.LogError("获取用户基本信息失败: " + err.Error())
390
 	}
404
 	}
391
 	s.ctx.Set("user", *user)
405
 	s.ctx.Set("user", *user)
392
 
406
 
393
-	cases, err := s.dao.GetUserCase(id)
407
+	cases, err := models.GetUserCase(id)
394
 	if err != nil {
408
 	if err != nil {
395
 		return utils.LogError("获取用户案场信息失败: " + err.Error())
409
 		return utils.LogError("获取用户案场信息失败: " + err.Error())
396
 	}
410
 	}
421
 		OrgId:        s.org.OrgId,
435
 		OrgId:        s.org.OrgId,
422
 	}
436
 	}
423
 
437
 
424
-	if err := s.customerdao.SaveCustomer(&cust); err != nil {
438
+	if err := models.SaveCustomer(&cust); err != nil {
425
 		utils.LogError("更新客户信息失败: " + err.Error())
439
 		utils.LogError("更新客户信息失败: " + err.Error())
426
 		return nil, errors.New("更新客户信息失败")
440
 		return nil, errors.New("更新客户信息失败")
427
 	}
441
 	}
435
 	account.PayedAmount = "0"
449
 	account.PayedAmount = "0"
436
 	account.PayedPoints = "0"
450
 	account.PayedPoints = "0"
437
 
451
 
438
-	if err := s.customerdao.SaveAccount(account); err != nil {
452
+	if err := models.SaveAccount(account); err != nil {
439
 		utils.LogError("插入账户信息失败: " + err.Error())
453
 		utils.LogError("插入账户信息失败: " + err.Error())
440
 		return nil, errors.New("更新客户信息失败")
454
 		return nil, errors.New("更新客户信息失败")
441
 	}
455
 	}
442
 
456
 
443
 	// 更新映射表信息
457
 	// 更新映射表信息
444
 	userMap.UserId = cust.CustomerId
458
 	userMap.UserId = cust.CustomerId
445
-	if err := s.customerdao.UpdateUserMapping(userMap, []string{"user_id"}); err != nil {
459
+	if err := models.UpdateUserMapping(userMap, []string{"user_id"}); err != nil {
446
 		utils.LogError("更新用户映射信息失败:" + err.Error())
460
 		utils.LogError("更新用户映射信息失败:" + err.Error())
447
 		return nil, errors.New("映射用户信息失败")
461
 		return nil, errors.New("映射用户信息失败")
448
 	}
462
 	}
450
 	return &cust, nil
464
 	return &cust, nil
451
 }
465
 }
452
 
466
 
453
-// CheckWechatUserMapping 校验并更新客户信息
454
-// 如果不存在, 则插入新数据
455
-func (s *SysServ) CheckWechatUserMapping(user map[string]interface{}) (*model.TaUserMapping, error) {
456
-	openID := user["openid"].(string)
457
-
458
-	uuID := ""
459
-	uuidRaw, ok := user["unionid"]
460
-	if ok {
461
-		uuID = uuidRaw.(string)
462
-	}
463
-
464
-	accountRaw, err := json.Marshal(user)
465
-	if err != nil {
466
-		return nil, err
467
-	}
468
-	account := string(accountRaw)
469
-
470
-	userMapping := model.TaUserMapping{
471
-		AccountType: models.ACCMAP_WECHAT,
472
-		Openid:      openID,
473
-		Uuid:        uuID,
474
-		AccountInfo: account,
475
-	}
476
-
477
-	// 查询数据库是否存在已有映射
478
-	userMapList, err := s.dao.GetUserMappingByOpenID(openID)
479
-
480
-	if err != nil {
481
-		return nil, err
482
-	}
483
-
484
-	// 如果存在
485
-	if len(userMapList) > 0 {
486
-		for _, um := range userMapList {
487
-			if userMapping.Openid == um.Openid &&
488
-				userMapping.AccountType == um.AccountType {
489
-				userMapping.UserId = um.UserId
490
-
491
-				// 存在的用户, 使用 ID 作为检查条件去更新
492
-				userMapping.MappingId = um.MappingId
493
-			}
494
-		}
495
-	}
496
-
497
-	// 更新数据库内容, 没有的话则插入
498
-	err = s.dao.UpdateUserMapping(&userMapping)
499
-	if err != nil {
500
-		return nil, err
501
-	}
502
-
503
-	return &userMapping, nil
504
-}
505
-
506
 // initWechatClient 初始化微信客户端
467
 // initWechatClient 初始化微信客户端
507
 func (s *SysServ) initWechatClient(orgID string) error {
468
 func (s *SysServ) initWechatClient(orgID string) error {
508
-	conf, err := s.dao.GetWeChatConfig(orgID)
469
+	conf, err := models.GetWeChatConfig(orgID, models.WECHAT_WX)
509
 	if err != nil {
470
 	if err != nil {
510
 		utils.LogError("获取微信配置失败: " + err.Error())
471
 		utils.LogError("获取微信配置失败: " + err.Error())
511
 		return errors.New("获取微信配置失败")
472
 		return errors.New("获取微信配置失败")
527
 	return nil
488
 	return nil
528
 }
489
 }
529
 
490
 
491
+func (s *SysServ) initMiniClient(orgID string) error {
492
+	conf, err := models.GetWeChatConfig(orgID, models.WECHAT_MINI)
493
+	if err != nil {
494
+		utils.LogError("获取小程序配置失败: " + err.Error())
495
+		return errors.New("获取小程序配置失败")
496
+	}
497
+
498
+	if conf == nil || conf.ConfId == "" {
499
+		return errors.New("未找到小程序配置")
500
+	}
501
+
502
+	cert := map[string]string{
503
+		"appid":  conf.Appid,
504
+		"secret": conf.Secret,
505
+	}
506
+
507
+	utils.MiniClientSingleton(orgID, cert)
508
+	return nil
509
+}
510
+
530
 // SetOrgByID 获取组织
511
 // SetOrgByID 获取组织
531
 func (s *SysServ) SetOrgByID(orgID string) error {
512
 func (s *SysServ) SetOrgByID(orgID string) error {
532
 	orgID = utils.DecodeBase64NoTail(orgID)
513
 	orgID = utils.DecodeBase64NoTail(orgID)
533
 
514
 
534
-	org, err := s.dao.GetOrg(orgID)
515
+	org, err := models.GetOrg(orgID)
535
 	if err != nil {
516
 	if err != nil {
536
 		utils.LogError("获取组织信息失败: " + err.Error())
517
 		utils.LogError("获取组织信息失败: " + err.Error())
537
 		return errors.New("获取组织信息失败")
518
 		return errors.New("获取组织信息失败")

+ 21
- 0
utils/wechat.go 查看文件

1
 package utils
1
 package utils
2
 
2
 
3
 import (
3
 import (
4
+	"github.com/zjxpcyc/wechat/mini"
4
 	"github.com/zjxpcyc/wechat/wx"
5
 	"github.com/zjxpcyc/wechat/wx"
5
 )
6
 )
6
 
7
 
7
 var wxClients map[string]*wx.Client
8
 var wxClients map[string]*wx.Client
9
+var miniClients map[string]*mini.Client
8
 
10
 
9
 type WechatUser struct {
11
 type WechatUser struct {
10
 	OpenID     string  `json:"openid"`
12
 	OpenID     string  `json:"openid"`
30
 	}
32
 	}
31
 }
33
 }
32
 
34
 
35
+// MiniClientSingleton 初始化
36
+func MiniClientSingleton(org string, cert map[string]string) {
37
+	if miniClients == nil {
38
+		miniClients = map[string]*mini.Client{
39
+			org: mini.NewClient(cert),
40
+		}
41
+	} else {
42
+		if _, ok := miniClients[org]; !ok {
43
+			miniClients[org] = mini.NewClient(cert)
44
+		}
45
+	}
46
+}
47
+
33
 // WxClientFor 微信客户端
48
 // WxClientFor 微信客户端
34
 func WxClientFor(org string) *wx.Client {
49
 func WxClientFor(org string) *wx.Client {
35
 	return wxClients[org]
50
 	return wxClients[org]
36
 }
51
 }
37
 
52
 
53
+// MiniClientFor 小程序客户端
54
+func MiniClientFor(org string) *mini.Client {
55
+	return miniClients[org]
56
+}
57
+
38
 // GetWxAppID 获取微信ID
58
 // GetWxAppID 获取微信ID
39
 func GetWxAppID(org string) string {
59
 func GetWxAppID(org string) string {
40
 	return wxClients[org].GetAppID()
60
 	return wxClients[org].GetAppID()
42
 
62
 
43
 func init() {
63
 func init() {
44
 	wx.SetLogInst(defaultLogger)
64
 	wx.SetLogInst(defaultLogger)
65
+	mini.SetLogInst(defaultLogger)
45
 }
66
 }
46
 
67
 
47
 // MapToWechatUser 映射微信人员
68
 // MapToWechatUser 映射微信人员