|
@@ -5,7 +5,6 @@ import (
|
5
|
5
|
"errors"
|
6
|
6
|
"net/http"
|
7
|
7
|
"spaceofcheng/services/models"
|
8
|
|
- "spaceofcheng/services/models/customer"
|
9
|
8
|
"spaceofcheng/services/models/model"
|
10
|
9
|
"spaceofcheng/services/utils"
|
11
|
10
|
"strings"
|
|
@@ -21,18 +20,14 @@ const (
|
21
|
20
|
|
22
|
21
|
// SysServ 系统处理
|
23
|
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
|
27
|
// NewSysServ 初始化
|
31
|
28
|
func NewSysServ(ctx *utils.Context) *SysServ {
|
32
|
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,6 +63,11 @@ func (s *SysServ) AuthAndInitCtx(gctx *context.Context) map[string]interface{} {
|
68
|
63
|
return s.authWechat(gctx)
|
69
|
64
|
}
|
70
|
65
|
|
|
66
|
+ // 小程序 端
|
|
67
|
+ if clientType == utils.ClientMini {
|
|
68
|
+ return s.authMini(gctx)
|
|
69
|
+ }
|
|
70
|
+
|
71
|
71
|
return map[string]interface{}{
|
72
|
72
|
"code": http.StatusBadRequest,
|
73
|
73
|
"error": errors.New("暂无该客户端的 API"),
|
|
@@ -111,7 +111,7 @@ func (s *SysServ) NewToken() string {
|
111
|
111
|
|
112
|
112
|
// 入库
|
113
|
113
|
if !token.Guest {
|
114
|
|
- if err := s.dao.InsertToken(tokenEncodeStr); err != nil {
|
|
114
|
+ if err := models.InsertToken(tokenEncodeStr); err != nil {
|
115
|
115
|
utils.LogError("入库 Token 失败: " + err.Error())
|
116
|
116
|
return tokenEncodeStr
|
117
|
117
|
}
|
|
@@ -163,11 +163,11 @@ func (s *SysServ) authWechat(gctx *context.Context) map[string]interface{} {
|
163
|
163
|
} else {
|
164
|
164
|
// 初始化微信配置
|
165
|
165
|
if err := s.initWechatClient(s.org.OrgId); err != nil {
|
166
|
|
- utils.LogError("初始化微信客户端失败: " + err.Error())
|
|
166
|
+ utils.LogError("初始化微信服务失败: " + err.Error())
|
167
|
167
|
|
168
|
168
|
return map[string]interface{}{
|
169
|
169
|
"code": http.StatusInternalServerError,
|
170
|
|
- "error": errors.New("初始化微信客户端失败"),
|
|
170
|
+ "error": errors.New("初始化微信服务失败"),
|
171
|
171
|
}
|
172
|
172
|
}
|
173
|
173
|
|
|
@@ -223,7 +223,7 @@ func (s *SysServ) authWechat(gctx *context.Context) map[string]interface{} {
|
223
|
223
|
}
|
224
|
224
|
|
225
|
225
|
// 查询数据库是否存在已有映射
|
226
|
|
- userMapList, err := s.dao.GetUserMappingByOpenID(openID)
|
|
226
|
+ userMapList, err := models.GetUserMappingByOpenID(openID)
|
227
|
227
|
if err != nil {
|
228
|
228
|
utils.LogError("校验人员失败: " + err.Error())
|
229
|
229
|
return map[string]interface{}{
|
|
@@ -267,7 +267,7 @@ func (s *SysServ) authWechat(gctx *context.Context) map[string]interface{} {
|
267
|
267
|
}
|
268
|
268
|
|
269
|
269
|
// 更新映射信息, 没有的话则插入
|
270
|
|
- err = s.dao.UpdateUserMapping(userMapping)
|
|
270
|
+ err = models.EditUserMapping(userMapping)
|
271
|
271
|
if err != nil {
|
272
|
272
|
utils.LogError("保存用户映射信息失败: " + err.Error())
|
273
|
273
|
return map[string]interface{}{
|
|
@@ -294,7 +294,7 @@ func (s *SysServ) authWechat(gctx *context.Context) map[string]interface{} {
|
294
|
294
|
}
|
295
|
295
|
}
|
296
|
296
|
} else {
|
297
|
|
- cust, err = s.customerdao.GetCustomerByID(userMapping.UserId)
|
|
297
|
+ cust, err = models.GetCustomerByID(userMapping.UserId)
|
298
|
298
|
if err != nil {
|
299
|
299
|
utils.LogError("查询用户信息失败: " + err.Error())
|
300
|
300
|
return map[string]interface{}{
|
|
@@ -317,6 +317,20 @@ func (s *SysServ) authWechat(gctx *context.Context) map[string]interface{} {
|
317
|
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
|
334
|
// wechartSignIn 使用 code 微信登录
|
321
|
335
|
func (s *SysServ) wechartSignIn(gctx *context.Context, code string) (*utils.WechatUser, error) {
|
322
|
336
|
// 获取 微信信息
|
|
@@ -349,7 +363,7 @@ func (s *SysServ) getToken(gctx *context.Context) (*utils.JWTToken, error) {
|
349
|
363
|
}
|
350
|
364
|
|
351
|
365
|
// 校验 token
|
352
|
|
- tk, err := s.dao.GetToken(tokenEnStr)
|
|
366
|
+ tk, err := models.GetToken(tokenEnStr)
|
353
|
367
|
if err != nil {
|
354
|
368
|
utils.LogError("查询 Token 失败: " + err.Error())
|
355
|
369
|
return nil, errors.New("校验Token失败或已过期")
|
|
@@ -365,7 +379,7 @@ func (s *SysServ) getToken(gctx *context.Context) (*utils.JWTToken, error) {
|
365
|
379
|
// UpdateTokenExpire 更新 token 为过期
|
366
|
380
|
// 如果发生错误, 此处选择忽略
|
367
|
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
|
383
|
utils.LogError("更新 Token 过期失败: " + err.Error())
|
370
|
384
|
}
|
371
|
385
|
}
|
|
@@ -384,13 +398,13 @@ func (s *SysServ) needAuth(gctx *context.Context) bool {
|
384
|
398
|
|
385
|
399
|
// SetUserProfile 设置用户信息
|
386
|
400
|
func (s *SysServ) SetUserProfile(id string) error {
|
387
|
|
- user, err := s.dao.GetPureUserInfo(id)
|
|
401
|
+ user, err := models.GetPureUserInfo(id)
|
388
|
402
|
if err != nil {
|
389
|
403
|
return utils.LogError("获取用户基本信息失败: " + err.Error())
|
390
|
404
|
}
|
391
|
405
|
s.ctx.Set("user", *user)
|
392
|
406
|
|
393
|
|
- cases, err := s.dao.GetUserCase(id)
|
|
407
|
+ cases, err := models.GetUserCase(id)
|
394
|
408
|
if err != nil {
|
395
|
409
|
return utils.LogError("获取用户案场信息失败: " + err.Error())
|
396
|
410
|
}
|
|
@@ -421,7 +435,7 @@ func (s *SysServ) saveNewCustomer(wxUser *utils.WechatUser, userMap *model.TaUse
|
421
|
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
|
439
|
utils.LogError("更新客户信息失败: " + err.Error())
|
426
|
440
|
return nil, errors.New("更新客户信息失败")
|
427
|
441
|
}
|
|
@@ -435,14 +449,14 @@ func (s *SysServ) saveNewCustomer(wxUser *utils.WechatUser, userMap *model.TaUse
|
435
|
449
|
account.PayedAmount = "0"
|
436
|
450
|
account.PayedPoints = "0"
|
437
|
451
|
|
438
|
|
- if err := s.customerdao.SaveAccount(account); err != nil {
|
|
452
|
+ if err := models.SaveAccount(account); err != nil {
|
439
|
453
|
utils.LogError("插入账户信息失败: " + err.Error())
|
440
|
454
|
return nil, errors.New("更新客户信息失败")
|
441
|
455
|
}
|
442
|
456
|
|
443
|
457
|
// 更新映射表信息
|
444
|
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
|
460
|
utils.LogError("更新用户映射信息失败:" + err.Error())
|
447
|
461
|
return nil, errors.New("映射用户信息失败")
|
448
|
462
|
}
|
|
@@ -450,62 +464,9 @@ func (s *SysServ) saveNewCustomer(wxUser *utils.WechatUser, userMap *model.TaUse
|
450
|
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
|
467
|
// initWechatClient 初始化微信客户端
|
507
|
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
|
470
|
if err != nil {
|
510
|
471
|
utils.LogError("获取微信配置失败: " + err.Error())
|
511
|
472
|
return errors.New("获取微信配置失败")
|
|
@@ -527,11 +488,31 @@ func (s *SysServ) initWechatClient(orgID string) error {
|
527
|
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
|
511
|
// SetOrgByID 获取组织
|
531
|
512
|
func (s *SysServ) SetOrgByID(orgID string) error {
|
532
|
513
|
orgID = utils.DecodeBase64NoTail(orgID)
|
533
|
514
|
|
534
|
|
- org, err := s.dao.GetOrg(orgID)
|
|
515
|
+ org, err := models.GetOrg(orgID)
|
535
|
516
|
if err != nil {
|
536
|
517
|
utils.LogError("获取组织信息失败: " + err.Error())
|
537
|
518
|
return errors.New("获取组织信息失败")
|