Selaa lähdekoodia

Merge branch 'master' of http://git.shengws.com/zhangbj/scrm-go

xiaoming_global 5 vuotta sitten
vanhempi
commit
f327de76a1

+ 26 - 28
controllers/base_api_controller.go Näytä tiedosto

@@ -2,8 +2,6 @@ package controllers
2 2
 
3 3
 import (
4 4
 	"SCRM/enums"
5
-	"SCRM/models"
6
-	"SCRM/service/admin_service"
7 5
 )
8 6
 
9 7
 type BaseAPIController struct {
@@ -53,33 +51,33 @@ type BaseAuthAPIController struct {
53 51
 func (this *BaseAuthAPIController) Prepare() {
54 52
 	this.BaseAPIController.Prepare()
55 53
 	if this.GetAdminUserInfo() == nil {
56
-		var userAdmin models.AdminUser
57
-		userAdmin.Id = 380
58
-		userAdmin.Mobile = "13532250447"
59
-		userAdmin.IsSuperAdmin = true
60
-		userAdmin.Status = 1
61
-		userAdmin.CreateTime = 1530786071
62
-		userAdmin.ModifyTime = 1530786071
63
-		var subscibe models.ServeSubscibe
64
-		subscibe.ID = 1
65
-		subscibe.OrgId = 4
66
-		subscibe.PeriodStart = 1538035409
67
-		subscibe.PeriodEnd = 1569571409
68
-		subscibe.State = 1
69
-		subscibe.Status = 1
70
-		subscibe.CreatedTime = 1538035409
71
-		subscibe.UpdatedTime = 1538035409
72
-		subscibes := make(map[int64]*models.ServeSubscibe, 0)
73
-		subscibes[4] = &subscibe
74
-		var adminUserInfo admin_service.AdminUserInfo
75
-		adminUserInfo.CurrentOrgId = 4
76
-		adminUserInfo.CurrentAppId = 5
77
-		adminUserInfo.AdminUser = &userAdmin
78
-		adminUserInfo.Subscibes = subscibes
79
-		this.SetSession("admin_user_info", &adminUserInfo)
54
+		// var userAdmin models.AdminUser
55
+		// userAdmin.Id = 380
56
+		// userAdmin.Mobile = "13532250447"
57
+		// userAdmin.IsSuperAdmin = true
58
+		// userAdmin.Status = 1
59
+		// userAdmin.CreateTime = 1530786071
60
+		// userAdmin.ModifyTime = 1530786071
61
+		// var subscibe models.ServeSubscibe
62
+		// subscibe.ID = 1
63
+		// subscibe.OrgId = 4
64
+		// subscibe.PeriodStart = 1538035409
65
+		// subscibe.PeriodEnd = 1569571409
66
+		// subscibe.State = 1
67
+		// subscibe.Status = 1
68
+		// subscibe.CreatedTime = 1538035409
69
+		// subscibe.UpdatedTime = 1538035409
70
+		// subscibes := make(map[int64]*models.ServeSubscibe, 0)
71
+		// subscibes[4] = &subscibe
72
+		// var adminUserInfo admin_service.AdminUserInfo
73
+		// adminUserInfo.CurrentOrgId = 4
74
+		// adminUserInfo.CurrentAppId = 5
75
+		// adminUserInfo.AdminUser = &userAdmin
76
+		// adminUserInfo.Subscibes = subscibes
77
+		// this.SetSession("admin_user_info", &adminUserInfo)
80 78
 
81
-		//this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNotLogin)
82
-		//this.StopRun()
79
+		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNotLogin)
80
+		this.StopRun()
83 81
 	}
84 82
 }
85 83
 

+ 116 - 0
controllers/marketing_tool/activity_controller.go Näytä tiedosto

@@ -0,0 +1,116 @@
1
+package marketing_tool
2
+
3
+import (
4
+	"SCRM/controllers"
5
+	"SCRM/enums"
6
+	"SCRM/models"
7
+	"SCRM/service/marketing_tool_service"
8
+	"time"
9
+
10
+	"github.com/astaxie/beego"
11
+)
12
+
13
+func ActivityCtlRegistRouters() {
14
+	beego.Router("/api/activities", &ActivityAPIController{}, "get:Activities")
15
+}
16
+
17
+type ActivityAPIController struct {
18
+	controllers.BaseAuthAPIController
19
+}
20
+
21
+// /api/activities [get]
22
+// @param page?:int
23
+// @param keyword?:string
24
+// @param status?:int 1.已发布 2.待发布 3.未通过 4.已结束 其他取全部
25
+func (this *ActivityAPIController) Activities() {
26
+	page, _ := this.GetInt("page")
27
+	keyword := this.GetString("keyword")
28
+	status, _ := this.GetInt("status")
29
+	if page <= 0 {
30
+		page = 1
31
+	}
32
+	if status < 1 || status > 4 {
33
+		status = 0
34
+	}
35
+
36
+	adminUserInfo := this.GetAdminUserInfo()
37
+	var activities []*models.Activity
38
+	var totalCount int64
39
+	var getActivityErr error
40
+	if status == 1 {
41
+		activities, totalCount, getActivityErr = marketing_tool_service.GetActivitiesWithStatus(adminUserInfo.CurrentOrgId, adminUserInfo.CurrentAppId, keyword, 1, page, 10)
42
+	} else if status == 2 {
43
+		activities, totalCount, getActivityErr = marketing_tool_service.GetActivitiesWithStatus(adminUserInfo.CurrentOrgId, adminUserInfo.CurrentAppId, keyword, 4, page, 10)
44
+	} else if status == 3 {
45
+		activities, totalCount, getActivityErr = marketing_tool_service.GetActivitiesWithStatus(adminUserInfo.CurrentOrgId, adminUserInfo.CurrentAppId, keyword, 3, page, 10)
46
+	} else if status == 4 {
47
+		activities, totalCount, getActivityErr = marketing_tool_service.GetDidEndedActivities(adminUserInfo.CurrentOrgId, adminUserInfo.CurrentAppId, keyword, page, 10)
48
+	} else {
49
+		activities, totalCount, getActivityErr = marketing_tool_service.GetValidActivities(adminUserInfo.CurrentOrgId, adminUserInfo.CurrentAppId, keyword, page, 10)
50
+	}
51
+
52
+	if getActivityErr != nil {
53
+		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
54
+		return
55
+	}
56
+
57
+	activityJSONList := make([]map[string]interface{}, 0, len(activities))
58
+	for _, activity := range activities {
59
+		var json map[string]interface{}
60
+		// 活动状态 1:已发布 2:待审核 3:未通过 4:草稿 9:已删除
61
+		if activity.Status == 1 { // 已发布/已结束
62
+			json = this._convertToPublishedActivityViewJSON(activity)
63
+		} else if activity.Status == 3 { // 未通过
64
+			json = this._convertToUnapprovedActivityViewJSON(activity)
65
+		} else if activity.Status == 4 { // 草稿
66
+			json = this._convertToActivityDraftsViewJSON(activity)
67
+		}
68
+		activityJSONList = append(activityJSONList, json)
69
+	}
70
+
71
+	this.ServeSuccessJSON(map[string]interface{}{
72
+		"activities": activityJSONList,
73
+		"total":      totalCount,
74
+	})
75
+}
76
+
77
+func (this *ActivityAPIController) _convertToPublishedActivityViewJSON(activity *models.Activity) map[string]interface{} {
78
+	json := make(map[string]interface{})
79
+	now := time.Now().Unix()
80
+	if activity.StartTime < now {
81
+		json["status"] = 4
82
+	} else {
83
+		json["status"] = 1
84
+	}
85
+	json["id"] = activity.Id
86
+	json["poster_photo"] = activity.PosterPhoto
87
+	json["title"] = activity.Title
88
+	json["is_recommend"] = activity.IsRecommend
89
+	json["read_num"] = activity.ReadNum
90
+	json["comment_num"] = activity.CommentNum
91
+	json["star_num"] = activity.StarNum
92
+	json["join_num"] = activity.JoinNum
93
+	json["limit_num"] = activity.LimitNum
94
+	json["start_time"] = activity.StartTime
95
+	return json
96
+}
97
+
98
+func (this *ActivityAPIController) _convertToActivityDraftsViewJSON(activity *models.Activity) map[string]interface{} {
99
+	json := make(map[string]interface{})
100
+	json["status"] = 2
101
+	json["id"] = activity.Id
102
+	json["poster_photo"] = activity.PosterPhoto
103
+	json["title"] = activity.Title
104
+	return json
105
+}
106
+
107
+func (this *ActivityAPIController) _convertToUnapprovedActivityViewJSON(activity *models.Activity) map[string]interface{} {
108
+	json := make(map[string]interface{})
109
+	json["status"] = 3
110
+	json["id"] = activity.Id
111
+	json["poster_photo"] = activity.PosterPhoto
112
+	json["title"] = activity.Title
113
+	json["reason"] = activity.Reason
114
+	json["start_time"] = activity.StartTime
115
+	return json
116
+}

+ 5 - 0
controllers/marketing_tool/router_collector.go Näytä tiedosto

@@ -0,0 +1,5 @@
1
+package marketing_tool
2
+
3
+func RegisterRouters() {
4
+	ActivityCtlRegistRouters()
5
+}

+ 103 - 0
controllers/members/card_controller.go Näytä tiedosto

@@ -0,0 +1,103 @@
1
+package members
2
+
3
+import (
4
+	base_ctl "SCRM/controllers"
5
+	"SCRM/enums"
6
+	"SCRM/models"
7
+	"SCRM/service/member_service"
8
+	"time"
9
+
10
+	"fmt"
11
+
12
+	"github.com/astaxie/beego"
13
+	"github.com/bwmarrin/snowflake"
14
+)
15
+
16
+func CardCtlRegistRouters() {
17
+	beego.Router("/api/member/card/edit", &CardAPIController{}, "Put:EditMemberCard")
18
+}
19
+
20
+type CardAPIController struct {
21
+	base_ctl.BaseAuthAPIController
22
+}
23
+
24
+func (c *CardAPIController) EditMemberCard() {
25
+	id, _ := c.GetInt64("id", 0)
26
+	if id <= 0 {
27
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "参数错误:id")
28
+		return
29
+	}
30
+	cardID, _ := c.GetInt64("card_id", 0)
31
+	if cardID <= 0 { //设置为无卡
32
+		cardID = 0
33
+	}
34
+	adminUserInfo := c.GetAdminUserInfo()
35
+	timeNow := time.Now().Unix()
36
+	member, err := member_service.GetOnlyMemberByID(adminUserInfo.CurrentOrgId, id)
37
+	if err != nil {
38
+		c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "设置会员卡失败:("+err.Error()+")")
39
+		return
40
+	}
41
+	if member == nil {
42
+		c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "设置会员卡失败:(会员记录不存在)")
43
+		return
44
+	}
45
+
46
+	returnData := make(map[string]interface{}, 0)
47
+	if cardID == 0 {
48
+		err = member_service.DeleteUserCard(adminUserInfo.CurrentOrgId, id)
49
+		if err != nil {
50
+			c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "设置会员卡失败:("+err.Error()+")")
51
+			return
52
+		}
53
+		returnData["user_card"] = nil
54
+	} else {
55
+
56
+		card, err := member_service.GetCardByID(adminUserInfo.CurrentOrgId, cardID)
57
+		if err != nil {
58
+			c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "设置会员卡失败:("+err.Error()+")")
59
+			return
60
+		}
61
+		if card == nil {
62
+			c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "设置会员卡失败:(会员卡不存在)")
63
+			return
64
+		}
65
+
66
+		oldUserCard, err := member_service.GetUserCardByID(adminUserInfo.CurrentOrgId, id)
67
+		if err != nil {
68
+			c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "设置会员卡失败:("+err.Error()+")")
69
+			return
70
+		}
71
+		var userCard models.UserCard
72
+		if oldUserCard != nil {
73
+			userCard = *oldUserCard
74
+		} else {
75
+			node, err := snowflake.NewNode(1)
76
+			if err != nil {
77
+				c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "设置会员卡失败:(生成卡号时出错)")
78
+				return
79
+			}
80
+			cardNo := node.Generate()
81
+
82
+			userCard.CardId = card.ID
83
+			userCard.CardName = card.CardName
84
+			userCard.CustomerId = id
85
+			userCard.UserOrgId = adminUserInfo.CurrentOrgId
86
+			userCard.CreatedTime = timeNow
87
+			userCard.CardNo = fmt.Sprintf("%s", cardNo)
88
+		}
89
+
90
+		userCard.UpdatedTime = timeNow
91
+		userCard.Status = 1
92
+		err = member_service.SaveUserCard(&userCard, member)
93
+		if err != nil {
94
+			c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "设置会员卡失败:("+err.Error()+")")
95
+			return
96
+		}
97
+		returnData["user_card"] = userCard
98
+		returnData["member"] = member
99
+	}
100
+
101
+	c.ServeSuccessJSON(returnData)
102
+	return
103
+}

+ 286 - 0
controllers/members/members_controller.go Näytä tiedosto

@@ -17,6 +17,8 @@ import (
17 17
 func MemberCtlRegistRouters() {
18 18
 	beego.Router("/api/members", &MembersAPIController{}, "get:GetMembers")
19 19
 	beego.Router("/api/member/create", &MembersAPIController{}, "Post:CreateMember")
20
+	beego.Router("/api/member/edit", &MembersAPIController{}, "Put:EditMember")
21
+	beego.Router("/api/members/delete", &MembersAPIController{}, "Delete:DeleteMembers")
20 22
 }
21 23
 
22 24
 type MembersAPIController struct {
@@ -350,3 +352,287 @@ func (c *MembersAPIController) CreateMember() {
350 352
 	return
351 353
 
352 354
 }
355
+
356
+func (c *MembersAPIController) EditMember() {
357
+	id, _ := c.GetInt64("id", 0)
358
+	if id <= 0 {
359
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "参数错误:id")
360
+		return
361
+	}
362
+	adminUserInfo := c.GetAdminUserInfo()
363
+
364
+	member, err := member_service.GetOnlyMemberByID(adminUserInfo.CurrentOrgId, id)
365
+	if err != nil {
366
+		c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "编辑会员失败:("+err.Error()+")")
367
+		return
368
+	}
369
+	if member == nil {
370
+		c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "编辑会员失败:(会员记录不存在)")
371
+		return
372
+	}
373
+
374
+	timeNow := time.Now().Unix()
375
+
376
+	dataBody := make(map[string]interface{}, 0)
377
+	err = json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody)
378
+	if err != nil {
379
+		utils.ErrorLog(err.Error())
380
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "参数错误")
381
+		return
382
+	}
383
+
384
+	if dataBody["name"] == nil || reflect.TypeOf(dataBody["name"]).String() != "string" {
385
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:姓名")
386
+		return
387
+	}
388
+	name, _ := dataBody["name"].(string)
389
+	if len(name) == 0 {
390
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "姓名不能为空")
391
+		return
392
+	}
393
+	member.Name = name
394
+
395
+	if dataBody["mobile"] == nil || reflect.TypeOf(dataBody["mobile"]).String() != "string" {
396
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:手机号")
397
+		return
398
+	}
399
+	mobile, _ := dataBody["mobile"].(string)
400
+	if len(mobile) == 0 {
401
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "手机号不能为空")
402
+		return
403
+	}
404
+	if !utils.CheckMobile(mobile) {
405
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "手机号格式不正确")
406
+		return
407
+	}
408
+	changeMobile := true
409
+	if member.Mobile == mobile {
410
+		changeMobile = false
411
+	}
412
+	member.Mobile = mobile
413
+
414
+	if dataBody["gender"] == nil || reflect.TypeOf(dataBody["gender"]).String() != "float64" {
415
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:性别")
416
+		return
417
+	}
418
+	gender := int64(dataBody["gender"].(float64))
419
+
420
+	if gender != 1 && gender != 2 {
421
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "性别选择不正确")
422
+		return
423
+	}
424
+	member.Gender = gender
425
+
426
+	if dataBody["birthday"] == nil || reflect.TypeOf(dataBody["birthday"]).String() != "string" {
427
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:生日")
428
+		return
429
+	}
430
+	birthday, _ := dataBody["birthday"].(string)
431
+	if len(birthday) == 0 {
432
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "生日格式不正确")
433
+		return
434
+	}
435
+
436
+	timeLayout := "2006-01-02 15:04:05"
437
+	theTime, err := utils.ParseTimeStringToTime(timeLayout, birthday+" 00:00:00")
438
+	if err != nil {
439
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "生日格式不正确")
440
+		return
441
+	}
442
+	member.Birthday = theTime.Unix()
443
+
444
+	if dataBody["province_id"] == nil || reflect.TypeOf(dataBody["province_id"]).String() != "float64" {
445
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:地区(省)")
446
+		return
447
+	}
448
+	provinceID := int64(dataBody["province_id"].(float64))
449
+	if provinceID <= 0 {
450
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "请选择地区")
451
+		return
452
+	}
453
+	member.ProvinceId = provinceID
454
+
455
+	if dataBody["city_id"] == nil || reflect.TypeOf(dataBody["city_id"]).String() != "float64" {
456
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:地区(市)")
457
+		return
458
+	}
459
+	cityID := int64(dataBody["city_id"].(float64))
460
+	if cityID <= 0 {
461
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "请选择地区")
462
+		return
463
+	}
464
+	member.CityId = cityID
465
+
466
+	if dataBody["district_id"] == nil || reflect.TypeOf(dataBody["district_id"]).String() != "float64" {
467
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:地区(区/县)")
468
+		return
469
+	}
470
+	districtID := int64(dataBody["district_id"].(float64))
471
+	if districtID <= 0 {
472
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "请选择地区")
473
+		return
474
+	}
475
+	member.DistrictId = districtID
476
+
477
+	if dataBody["illness"] == nil || reflect.TypeOf(dataBody["illness"]).String() != "[]interface {}" {
478
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:病种")
479
+		return
480
+	}
481
+	illnessInters := dataBody["illness"].([]interface{})
482
+	if len(illnessInters) <= 0 {
483
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "请选择病种")
484
+		return
485
+	}
486
+	member.Illness = make([]*member_service.CustomerIllness, 0)
487
+	illnessIDS := make([]int64, 0)
488
+	illnessIDMap := make(map[int64]int64, 0)
489
+	for _, illnessInter := range illnessInters {
490
+		id := int64(illnessInter.(float64))
491
+		illnessIDS = append(illnessIDS, id)
492
+		illnessIDMap[id] = id
493
+	}
494
+	allIllness, err := member_service.GetMemberAllIllness(adminUserInfo.CurrentOrgId, member.ID)
495
+	if err != nil {
496
+		c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "编辑会员失败:("+err.Error()+")")
497
+		return
498
+	}
499
+	oldIllIDMap := make(map[int64]int64, 0)
500
+	for _, illItem := range allIllness {
501
+		item := *illItem
502
+		item.Status = 1
503
+		if _, exist := illnessIDMap[item.IllnessId]; !exist {
504
+			item.Status = 0
505
+			item.UpdatedTime = timeNow
506
+		}
507
+		member.Illness = append(member.Illness, &item)
508
+		oldIllIDMap[item.IllnessId] = item.IllnessId
509
+	}
510
+
511
+	for _, id := range illnessIDMap {
512
+		if _, exist := oldIllIDMap[id]; exist {
513
+			continue
514
+		}
515
+		var illItem member_service.CustomerIllness
516
+		illItem.UserOrgId = adminUserInfo.CurrentOrgId
517
+		illItem.IllnessId = id
518
+		illItem.Status = 1
519
+		illItem.UpdatedTime = timeNow
520
+		illItem.CreatedTime = timeNow
521
+		member.Illness = append(member.Illness, &illItem)
522
+	}
523
+
524
+	if dataBody["ill_date"] == nil || reflect.TypeOf(dataBody["ill_date"]).String() != "string" {
525
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:患病时间")
526
+		return
527
+	}
528
+	illDate, _ := dataBody["ill_date"].(string)
529
+	if len(illDate) == 0 {
530
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "患病时间格式不正确")
531
+		return
532
+	}
533
+
534
+	illDateTime, err := utils.ParseTimeStringToTime(timeLayout, illDate+" 00:00:00")
535
+	if err != nil {
536
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "患病时间格式不正确")
537
+		return
538
+	}
539
+	member.IllDate = illDateTime.Unix()
540
+
541
+	if dataBody["treat_type"] == nil || reflect.TypeOf(dataBody["treat_type"]).String() != "float64" {
542
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:治疗方式")
543
+		return
544
+	}
545
+	treatType := int64(dataBody["treat_type"].(float64))
546
+	if treatType <= 0 {
547
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "请选择治疗方式")
548
+		return
549
+	}
550
+	member.TreatType = treatType
551
+
552
+	if dataBody["remark"] != nil && reflect.TypeOf(dataBody["remark"]).String() == "string" {
553
+		remark, _ := dataBody["remark"].(string)
554
+		if len(remark) > 0 {
555
+			member.Remark = remark
556
+		}
557
+	}
558
+
559
+	if dataBody["avatar"] != nil && reflect.TypeOf(dataBody["avatar"]).String() == "string" {
560
+		avatar, _ := dataBody["avatar"].(string)
561
+		if len(avatar) > 0 {
562
+			member.Avatar = avatar
563
+		}
564
+	}
565
+
566
+	if changeMobile {
567
+		customer, err := member_service.GetCustomerByMobile(adminUserInfo.CurrentOrgId, member.Mobile)
568
+		if err != nil {
569
+			c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "编辑会员失败:("+err.Error()+")")
570
+			return
571
+		}
572
+		if customer != nil && customer.ID != member.ID {
573
+			c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "编辑会员失败:(已经存在该手机号的客户)")
574
+			return
575
+		}
576
+	}
577
+	member.UpdatedTime = timeNow
578
+
579
+	err = member_service.EditMember(member)
580
+	if err != nil {
581
+		c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "编辑会员失败:("+err.Error()+")")
582
+		return
583
+	}
584
+
585
+	illness := member.Illness
586
+	member.Illness = make([]*member_service.CustomerIllness, 0)
587
+	for _, ill := range illness {
588
+		illItem := *ill
589
+		if illItem.Status == 0 {
590
+			continue
591
+		}
592
+		member.Illness = append(member.Illness, &illItem)
593
+	}
594
+
595
+	returnData := make(map[string]interface{}, 0)
596
+	returnData["member"] = member
597
+	c.ServeSuccessJSON(returnData)
598
+	return
599
+
600
+}
601
+
602
+func (c *MembersAPIController) DeleteMembers() {
603
+	adminUserInfo := c.GetAdminUserInfo()
604
+
605
+	dataBody := make(map[string]interface{}, 0)
606
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody)
607
+	if err != nil {
608
+		utils.ErrorLog(err.Error())
609
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "参数错误")
610
+		return
611
+	}
612
+
613
+	idsInters := dataBody["ids"].([]interface{})
614
+	if len(idsInters) == 0 {
615
+		if err != nil {
616
+			c.ServeFailJsonSend(enums.ErrorCodeDBDelete, "删除会员失败:(没有选择会员)")
617
+			return
618
+		}
619
+	}
620
+
621
+	ids := make([]int64, 0)
622
+	for _, idsInter := range idsInters {
623
+		id := int64(idsInter.(float64))
624
+		ids = append(ids, id)
625
+	}
626
+
627
+	err = member_service.DeleteMembers(adminUserInfo.CurrentOrgId, ids)
628
+	if err != nil {
629
+		c.ServeFailJsonSend(enums.ErrorCodeDBDelete, "删除会员失败:("+err.Error()+")")
630
+		return
631
+	}
632
+
633
+	returnData := make(map[string]interface{}, 0)
634
+	returnData["msg"] = "ok"
635
+
636
+	c.ServeSuccessJSON(returnData)
637
+	return
638
+}

+ 2 - 0
controllers/members/router_controller.go Näytä tiedosto

@@ -2,4 +2,6 @@ package members
2 2
 
3 3
 func RegisterRouters() {
4 4
 	MemberCtlRegistRouters()
5
+	TagCtlRegistRouters()
6
+	CardCtlRegistRouters()
5 7
 }

+ 241 - 0
controllers/members/tags_controller.go Näytä tiedosto

@@ -0,0 +1,241 @@
1
+package members
2
+
3
+import (
4
+	base_ctl "SCRM/controllers"
5
+	"SCRM/enums"
6
+	"SCRM/models"
7
+	"SCRM/service/member_service"
8
+	"SCRM/utils"
9
+	"reflect"
10
+	"time"
11
+
12
+	"encoding/json"
13
+
14
+	"github.com/astaxie/beego"
15
+)
16
+
17
+func TagCtlRegistRouters() {
18
+	beego.Router("/api/member/tag/edit", &TagAPIController{}, "Post:EditMemberTags")
19
+	beego.Router("/api/members/tags/add", &TagAPIController{}, "Post:AddMembersTags")
20
+	beego.Router("/api/members/tags", &TagAPIController{}, "Get:GetTags")
21
+}
22
+
23
+type TagAPIController struct {
24
+	base_ctl.BaseAuthAPIController
25
+}
26
+
27
+func (c *TagAPIController) EditMemberTags() {
28
+	id, _ := c.GetInt64("id", 0)
29
+	if id <= 0 {
30
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "参数错误:id")
31
+		return
32
+	}
33
+	adminUserInfo := c.GetAdminUserInfo()
34
+	member, err := member_service.GetOnlyMemberByID(adminUserInfo.CurrentOrgId, id)
35
+	if err != nil {
36
+		c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "编辑会员标签失败:("+err.Error()+")")
37
+		return
38
+	}
39
+	if member == nil {
40
+		c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "编辑会员标签失败:(会员记录不存在)")
41
+		return
42
+	}
43
+
44
+	timeNow := time.Now().Unix()
45
+
46
+	dataBody := make(map[string]interface{}, 0)
47
+	err = json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody)
48
+	if err != nil {
49
+		utils.ErrorLog(err.Error())
50
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "参数错误")
51
+		return
52
+	}
53
+
54
+	if dataBody["tags"] == nil || reflect.TypeOf(dataBody["tags"]).String() != "[]interface {}" {
55
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:tags")
56
+		return
57
+	}
58
+
59
+	returnData := make(map[string]interface{}, 0)
60
+
61
+	tagsInters := dataBody["tags"].([]interface{})
62
+	if len(tagsInters) == 0 {
63
+		err = member_service.DeleteMemeberAllTags(adminUserInfo.CurrentOrgId, member.ID)
64
+		if err != nil {
65
+			c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "编辑会员标签失败:("+err.Error()+")")
66
+			return
67
+		}
68
+		returnData["tags"] = nil
69
+	} else {
70
+		userTags := make([]*models.UserTagLinks, 0)
71
+		tagIds := make([]int64, 0)
72
+		tagIDMap := make(map[int64]int64, 0)
73
+		for _, tagsInter := range tagsInters {
74
+			id := int64(tagsInter.(float64))
75
+			tagIds = append(tagIds, id)
76
+			tagIDMap[id] = id
77
+		}
78
+		allTags, err := member_service.GetMemberAllTags(adminUserInfo.CurrentOrgId, member.ID)
79
+		if err != nil {
80
+			c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "编辑会员标签失败:("+err.Error()+")")
81
+			return
82
+		}
83
+		oldTagIDMap := make(map[int64]int64, 0)
84
+		for _, tagItem := range allTags {
85
+			item := *tagItem
86
+			item.Status = 1
87
+			if _, exist := tagIDMap[item.TagId]; !exist {
88
+				item.Status = 0
89
+				item.UpdatedTime = timeNow
90
+			}
91
+			userTags = append(userTags, &item)
92
+			oldTagIDMap[item.TagId] = item.TagId
93
+		}
94
+
95
+		for _, id := range tagIDMap {
96
+			if _, exist := oldTagIDMap[id]; exist {
97
+				continue
98
+			}
99
+			var tagItem models.UserTagLinks
100
+			tagItem.UserOrgId = adminUserInfo.CurrentOrgId
101
+			tagItem.TagId = id
102
+			tagItem.UserLinkId = member.ID
103
+			tagItem.Status = 1
104
+			tagItem.UpdatedTime = timeNow
105
+			tagItem.CreatedTime = timeNow
106
+			userTags = append(userTags, &tagItem)
107
+		}
108
+		err = member_service.SaveMemberTags(userTags)
109
+
110
+		if err != nil {
111
+			c.ServeFailJsonSend(enums.ErrorCodeDBUpdate, "编辑会员标签失败:("+err.Error()+")")
112
+			return
113
+		}
114
+
115
+		returnData["tags"] = tagIds
116
+	}
117
+	c.ServeSuccessJSON(returnData)
118
+	return
119
+}
120
+
121
+func (c *TagAPIController) AddMembersTags() {
122
+	adminUserInfo := c.GetAdminUserInfo()
123
+	timeNow := time.Now().Unix()
124
+
125
+	dataBody := make(map[string]interface{}, 0)
126
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody)
127
+	if err != nil {
128
+		utils.ErrorLog(err.Error())
129
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "参数错误")
130
+		return
131
+	}
132
+
133
+	if dataBody["tags"] == nil || reflect.TypeOf(dataBody["tags"]).String() != "[]interface {}" {
134
+		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "缺少参数:tags")
135
+		return
136
+	}
137
+
138
+	idsInters := dataBody["ids"].([]interface{})
139
+	if len(idsInters) == 0 {
140
+		if err != nil {
141
+			c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "添加会员标签失败:(没有选择会员)")
142
+			return
143
+		}
144
+	}
145
+
146
+	ids := make([]int64, 0)
147
+	idsMap := make(map[int64]int64, 0)
148
+	for _, idsInter := range idsInters {
149
+		id := int64(idsInter.(float64))
150
+		ids = append(ids, id)
151
+		idsMap[id] = id
152
+	}
153
+
154
+	tagsInters := dataBody["tags"].([]interface{})
155
+	if len(tagsInters) == 0 {
156
+		if err != nil {
157
+			c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "添加会员标签失败:(没有选择标签)")
158
+			return
159
+		}
160
+	}
161
+	tagIds := make([]int64, 0)
162
+	tagIDMap := make(map[int64]int64, 0)
163
+	for _, tagsInter := range tagsInters {
164
+		id := int64(tagsInter.(float64))
165
+		tagIds = append(tagIds, id)
166
+		tagIDMap[id] = id
167
+	}
168
+
169
+	allTags, err := member_service.GetMembersAllTags(adminUserInfo.CurrentOrgId, ids)
170
+	if err != nil {
171
+		c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "添加会员标签失败:("+err.Error()+")")
172
+		return
173
+	}
174
+
175
+	userTags := make([]*models.UserTagLinks, 0)
176
+	oldTagIDMap := make(map[int64]map[int64]int64, 0)
177
+	for _, tagItem := range allTags {
178
+		_, exist := tagIDMap[tagItem.TagId]
179
+		_, uexist := idsMap[tagItem.UserLinkId]
180
+		if exist && uexist {
181
+			item := *tagItem
182
+			item.Status = 1
183
+			item.UpdatedTime = timeNow
184
+			userTags = append(userTags, &item)
185
+			if _, oex := oldTagIDMap[item.UserLinkId]; !oex {
186
+				oldTagIDMap[item.UserLinkId] = make(map[int64]int64, 0)
187
+			}
188
+			oldTagIDMap[item.UserLinkId][item.TagId] = item.TagId
189
+		}
190
+	}
191
+
192
+	for _, userid := range idsMap {
193
+		for _, tagid := range tagIDMap {
194
+			if _, exist := oldTagIDMap[userid]; exist {
195
+				if _, exist := oldTagIDMap[userid][tagid]; exist {
196
+					continue
197
+				}
198
+			}
199
+			var tagItem models.UserTagLinks
200
+			tagItem.UserOrgId = adminUserInfo.CurrentOrgId
201
+			tagItem.TagId = tagid
202
+			tagItem.UserLinkId = userid
203
+			tagItem.Status = 1
204
+			tagItem.UpdatedTime = timeNow
205
+			tagItem.CreatedTime = timeNow
206
+			userTags = append(userTags, &tagItem)
207
+		}
208
+	}
209
+	err = member_service.SaveMemberTags(userTags)
210
+
211
+	if err != nil {
212
+		c.ServeFailJsonSend(enums.ErrorCodeDBCreate, "添加会员标签失败:("+err.Error()+")")
213
+		return
214
+	}
215
+
216
+	returnData := make(map[string]interface{}, 0)
217
+	returnData["msg"] = "ok"
218
+
219
+	c.ServeSuccessJSON(returnData)
220
+	return
221
+}
222
+
223
+func (c *TagAPIController) GetTags() {
224
+	page, _ := c.GetInt64("page", 1)
225
+	limit, _ := c.GetInt64("limit", 10)
226
+	searchKey := c.GetString("search", "")
227
+	if page <= 0 {
228
+		page = 1
229
+	}
230
+	if limit <= 0 {
231
+		limit = 10
232
+	}
233
+
234
+	adminUserInfo := c.GetAdminUserInfo()
235
+	tags, _ := member_service.GetPageTagList(adminUserInfo.CurrentOrgId, page, limit, searchKey)
236
+
237
+	returnData := make(map[string]interface{}, 0)
238
+	returnData["tags"] = tags
239
+	c.ServeSuccessJSON(returnData)
240
+	return
241
+}

+ 2 - 0
controllers/短信模块临时备注 Näytä tiedosto

@@ -0,0 +1,2 @@
1
+修改个人信息
2
+权限管理中添加管理员

+ 85 - 0
models/activity_models.go Näytä tiedosto

@@ -0,0 +1,85 @@
1
+package models
2
+
3
+// 表
4
+type Activity struct {
5
+	Id               int    `gorm:"column:id" json:"id"`                                 // 活动 ID
6
+	Title            string `json:"title"`                                               // 活动标题
7
+	Subtitle         string `json:"subtitle"`                                            // 活动副标题
8
+	CityId           int    `gorm:"column:city_id" json:"city_id"`                       // 活动地点 ID
9
+	Address          string `json:"address"`                                             // 活动详细地址
10
+	Lng              string `gorm:"column:longitude" json:"lng"`                         // 活动位置的经度
11
+	Lat              string `gorm:"column:latitude" json:"lat"`                          // 活动位置的纬度
12
+	SignUpDeadline   int64  `gorm:"column:sign_up_deadline" json:"sign_up_deadline"`     // 报名截止时间戳
13
+	SignUpNotice     string `gorm:"column:sign_up_notice" json:"sign_up_notice"`         // 报名须知
14
+	StartTime        int64  `gorm:"column:start_time" json:"start_time"`                 // 活动开始时间戳
15
+	PosterPhoto      string `gorm:"column:poster_photo" json:"poster_photo"`             // 活动海报
16
+	PosterPhotoThumb string `gorm:"column:poster_photo_thumb" json:"poster_photo_thumb"` // 活动海报缩略图
17
+	LimitNum         int    `gorm:"column:limit_num;" json:"limit_num"`                  // 限制报名人数,0表示无限制
18
+	JoinNum          int    `gorm:"column:join_num" json:"join_num"`                     // 已报名人数
19
+	PhoneNumber      string `gorm:"column:phone_number" json:"phone_number"`             // 联系方式
20
+	Type             int8   `json:"type"`                                                // 活动形式
21
+	IsInsurance      int8   `gorm:"column:is_insurance;" json:"is_insurance"`            // 是否提供保险:报名不需要保险0:否;报名需要保险1:是;2不需要报名
22
+	Status           int    `json:"status"`                                              // 活动状态 1:已发布 2:待审核 3:未通过 4:草稿 9:已删除
23
+	Reason           string `json:"reason"`                                              // 审核原因
24
+	IsRecommend      int8   `gorm:"column:is_recommend;" json:"is_recommend"`            // 0:未推荐;1:已推荐
25
+	CreateTime       int64  `gorm:"column:ctime" json:"-"`                               // 创建时间
26
+	ModifyTime       int64  `gorm:"column:mtime" json:"-"`                               // 修改时间
27
+	UserOrgId        int    `gorm:"column:user_org_id" json:"-"`                         // 所属发布机构 ID
28
+	UserAppId        int    `gorm:"column:user_app_id" json:"-"`                         // 所属发布应用 ID
29
+	CommentNum       int    `gorm:"column:comment_num;" json:"comment_num"`              // 评论数
30
+	StarNum          int    `gorm:"column:star_num" json:"star_num"`                     // 点赞书
31
+	ReadNum          int    `gorm:"column:read_num;" json:"read_num"`                    // 阅读数
32
+}
33
+
34
+func (Activity) TableName() string {
35
+	return "sgj_patient_activity"
36
+}
37
+
38
+type ActivityParagraph struct {
39
+	Id         int `gorm:"PRIMARY_KEY;AUTO_INCREMENT"` // 记录 ID
40
+	ActivityId int `gorm:"column:activity_id"`         // 活动 ID
41
+	Title      string
42
+	Text       string
43
+	Image      string
44
+	Status     int8  // 状态 0.无效 1.有效
45
+	CreateTime int64 `gorm:"column:ctime"` // 创建时间
46
+	ModifyTime int64 `gorm:"column:mtime"` // 修改时间
47
+}
48
+
49
+func (ActivityParagraph) TableName() string {
50
+	return "sgj_patient_activity_paragraph"
51
+}
52
+
53
+type ActivityUser struct {
54
+	Id          int    `gorm:"PRIMARY_KEY;AUTO_INCREMENT"` // 记录 ID
55
+	ActivityId  int    `gorm:"column:activity_id"`         // 活动 ID
56
+	UserId      int    `gorm:"column:user_id"`             // 参与者 ID
57
+	IDCardNo    string `gorm:"column:idcard_no"`           // 身份证号
58
+	Mobile      string
59
+	Realname    string
60
+	Avatar      string
61
+	AvatarThumb string
62
+	Status      int8  // 状态 0.无效 1.有效
63
+	CreateTime  int64 `gorm:"column:ctime"` // 报名时间
64
+	ModifyTime  int64 `gorm:"column:mtime"` // 修改时间
65
+}
66
+
67
+func (ActivityUser) TableName() string {
68
+	return "sgj_patient_activity_user"
69
+}
70
+
71
+type ActivityWxShare struct {
72
+	Id         int `gorm:"PRIMARY_KEY;AUTO_INCREMENT"` // 记录 ID
73
+	ActivityId int `gorm:"column:activity_id"`         // 活动 ID
74
+	Title      string
75
+	Subtitle   string
76
+	Image      string
77
+	Status     int8   // 状态 0.无效 1.有效
78
+	CreateTime int64  `gorm:"column:ctime"`     // 创建时间
79
+	ModifyTime int64  `gorm:"column:mtime"`     // 修改时间
80
+	ShortURL   string `gorm:"column:short_url"` // 短链接
81
+}
82
+
83
+func (ActivityWxShare) TableName() string {
84
+	return "sgj_patient_activity_wx_share"
85
+}

+ 5 - 3
routers/router.go Näytä tiedosto

@@ -2,14 +2,15 @@ package routers
2 2
 
3 3
 import (
4 4
 	"SCRM/controllers/admin_user"
5
+	"SCRM/controllers/article"
5 6
 	"SCRM/controllers/global"
6 7
 	"SCRM/controllers/login"
8
+	"SCRM/controllers/marketing_tool"
9
+	"SCRM/controllers/members"
7 10
 	"SCRM/controllers/role"
8 11
 
9 12
 	"github.com/astaxie/beego"
10 13
 	"github.com/astaxie/beego/plugins/cors"
11
-	"SCRM/controllers/article"
12
-	"SCRM/controllers/members"
13 14
 )
14 15
 
15 16
 func init() {
@@ -25,6 +26,7 @@ func init() {
25 26
 	admin_user.RegisterRouters()
26 27
 	login.RegisterRouters()
27 28
 	role.RegisterRouters()
29
+	members.RegisterRouters()
30
+	marketing_tool.RegisterRouters()
28 31
 	article.RegisterRouters()
29
-    members.RegisterRouters()
30 32
 }

+ 90 - 0
service/marketing_tool_service/activity_service.go Näytä tiedosto

@@ -0,0 +1,90 @@
1
+package marketing_tool_service
2
+
3
+import (
4
+	"SCRM/models"
5
+	"SCRM/service"
6
+	"time"
7
+)
8
+
9
+func GetValidActivities(orgID int64, appID int64, keyWord string, page int, count int) ([]*models.Activity, int64, error) {
10
+	if count <= 0 {
11
+		return []*models.Activity{}, 0, nil
12
+	}
13
+	if page < 1 {
14
+		page = 1
15
+	}
16
+
17
+	var activities []*models.Activity
18
+	var totalCount int64
19
+	db := service.PatientReadDB().Model(&models.Activity{}).Where("user_org_id = ? AND user_app_id = ? AND status <> 9", orgID, appID)
20
+	if len(keyWord) > 0 {
21
+		likeParam := "%" + keyWord + "%"
22
+		db = db.Where("title LIKE ?", likeParam)
23
+	}
24
+
25
+	err := db.
26
+		Count(&totalCount).
27
+		Order("ctime desc").Limit(count).Offset((page - 1) * count).Find(&activities).
28
+		Error
29
+
30
+	if err == nil {
31
+		return activities, totalCount, nil
32
+	} else {
33
+		return nil, 0, err
34
+	}
35
+}
36
+
37
+func GetActivitiesWithStatus(orgID int64, appID int64, keyWord string, status int, page int, count int) ([]*models.Activity, int64, error) {
38
+	if count <= 0 {
39
+		return []*models.Activity{}, 0, nil
40
+	}
41
+	if page < 1 {
42
+		page = 1
43
+	}
44
+
45
+	var activities []*models.Activity
46
+	var totalCount int64
47
+	db := service.PatientReadDB().Model(&models.Activity{}).Where("user_org_id = ? AND user_app_id = ? AND status = ?", orgID, appID, status)
48
+	if len(keyWord) > 0 {
49
+		likeParam := "%" + keyWord + "%"
50
+		db = db.Where("title LIKE ?", likeParam)
51
+	}
52
+	err := db.
53
+		Count(&totalCount).
54
+		Order("ctime desc").Limit(count).Offset((page - 1) * count).Find(&activities).
55
+		Error
56
+
57
+	if err == nil {
58
+		return activities, totalCount, nil
59
+	} else {
60
+		return nil, 0, err
61
+	}
62
+}
63
+
64
+func GetDidEndedActivities(orgID int64, appID int64, keyWord string, page int, count int) ([]*models.Activity, int64, error) {
65
+	if count <= 0 {
66
+		return []*models.Activity{}, 0, nil
67
+	}
68
+	if page < 1 {
69
+		page = 1
70
+	}
71
+
72
+	var activities []*models.Activity
73
+	var totalCount int64
74
+	now := time.Now().Unix()
75
+	db := service.PatientReadDB().Model(&models.Activity{}).Where("user_org_id = ? AND user_app_id = ? AND status = 1 AND start_time < ?", orgID, appID, now)
76
+	if len(keyWord) > 0 {
77
+		likeParam := "%" + keyWord + "%"
78
+		db = db.Where("title LIKE ?", likeParam)
79
+	}
80
+	err := db.
81
+		Count(&totalCount).
82
+		Order("ctime desc").Limit(count).Offset((page - 1) * count).Find(&activities).
83
+		Error
84
+
85
+	if err == nil {
86
+		return activities, totalCount, nil
87
+	} else {
88
+		return nil, 0, err
89
+	}
90
+}

+ 55 - 0
service/member_service/cards_service.go Näytä tiedosto

@@ -3,10 +3,65 @@ package member_service
3 3
 import (
4 4
 	"SCRM/models"
5 5
 	"SCRM/service"
6
+	"time"
7
+
8
+	"github.com/jinzhu/gorm"
6 9
 )
7 10
 
8 11
 func GetCardList(orgID int64) (cards []*models.UserMembershipCard, err error) {
9 12
 	err = service.UserReadDB().Model(&models.UserMembershipCard{}).Where("status=1 and user_org_id=?", orgID).Order("card_level asc, id asc ").Find(&cards).Error
13
+	return
14
+}
15
+
16
+func GetCardByID(orgID, cardID int64) (*models.UserMembershipCard, error) {
17
+	var card models.UserMembershipCard
18
+	var err error
19
+	err = service.UserReadDB().Model(&models.UserMembershipCard{}).Where("id=? and user_org_id=? and status=1", cardID, orgID).First(&card).Error
20
+	if err == gorm.ErrRecordNotFound {
21
+		return nil, nil
22
+	}
23
+	if err != nil {
24
+		return nil, err
25
+	}
26
+	return &card, nil
27
+}
28
+
29
+func GetUserCardByID(orgID, customerID int64) (*models.UserCard, error) {
30
+	var card models.UserCard
31
+	var err error
32
+	err = service.UserReadDB().Model(&models.UserCard{}).Where("user_org_id=? and customer_id=? and status=1", orgID, customerID).First(&card).Error
33
+	if err == gorm.ErrRecordNotFound {
34
+		return nil, nil
35
+	}
36
+	if err != nil {
37
+		return nil, err
38
+	}
39
+	return &card, nil
40
+}
41
+
42
+func DeleteUserCard(orgID, customerID int64) (err error) {
43
+	err = service.UserWriteDB().Model(&models.UserCard{}).Where("user_org_id=? and customer_id=? ", orgID, customerID).Update(map[string]interface{}{"Status": 0, "UpdatedTime": time.Now().Unix()}).Error
44
+	return
45
+}
46
+
47
+func SaveUserCard(card *models.UserCard, member *Members) (err error) {
48
+	if member.Membership == 1 {
49
+		err = service.UserWriteDB().Save(card).Error
50
+	} else {
51
+		tx := service.UserWriteDB().Begin()
52
+		err = service.UserWriteDB().Save(card).Error
53
+		if err != nil {
54
+			tx.Rollback()
55
+			return
56
+		}
57
+
58
+		err = service.UserWriteDB().Model(&models.UserCustomer{}).Where("id=? and user_org_id=? ", member.ID, member.UserOrgId).Update(map[string]interface{}{"Membership": 1, "UpdatedTime": time.Now().Unix()}).Error
59
+		if err != nil {
60
+			tx.Rollback()
61
+			return
62
+		}
63
+		tx.Commit()
64
+	}
10 65
 
11 66
 	return
12 67
 }

+ 12 - 2
service/member_service/illness_service.go Näytä tiedosto

@@ -1,12 +1,22 @@
1 1
 package member_service
2 2
 
3 3
 import (
4
-	"SCRM/service"
5 4
 	"SCRM/models"
5
+	"SCRM/service"
6 6
 )
7 7
 
8
-
9 8
 func GetIllnessList() (ills []*models.Illness, err error) {
10 9
 	err = service.UserReadDB().Where("status=1").Find(&ills).Error
11 10
 	return
12 11
 }
12
+
13
+func GetMemberAllIllnessByIllIDs(orgID, customerID int64, ids []int64) (ills []*CustomerIllness, err error) {
14
+	err = service.UserReadDB().Where("user_org_id = ? and customer_id =? and illness_id IN (?) ", orgID, customerID, ids).Find(&ills).Error
15
+	return
16
+}
17
+
18
+//GetMemberAllIllness 取所有(包括已经软删除的记录)
19
+func GetMemberAllIllness(orgID, customerID int64) (ills []*CustomerIllness, err error) {
20
+	err = service.UserReadDB().Where("user_org_id = ? and customer_id =? ", orgID, customerID).Find(&ills).Error
21
+	return
22
+}

+ 30 - 0
service/member_service/member_service.go Näytä tiedosto

@@ -5,6 +5,8 @@ import (
5 5
 	"SCRM/service"
6 6
 	"strings"
7 7
 
8
+	"time"
9
+
8 10
 	"github.com/jinzhu/gorm"
9 11
 )
10 12
 
@@ -42,6 +44,7 @@ func GetMemberList(orgID, page, limit, level, source, tag, startTime, endTime in
42 44
 			return db.Where("user_org_id=? and status=1", orgID)
43 45
 		}).
44 46
 		Preload("UserCard.Card", "user_org_id=? and status=1", orgID).
47
+		Preload("Illness", "user_org_id=? and status=1", orgID).
45 48
 		Select("c.id, c.user_org_id, c.user_id, c.mobile, c.name, c.gender, c.province_id, c.city_id, c.address, c.birthday, c.treat_type, c.relationship, c.illness_id, c.wechat_openid, c.membership, c.sources, c.status, c.created_time, c.updated_time, c.avatar, c.wechat_unionid, c.remark, c.medical_diagnose, c.yz_uid, c.ill_date, c.district_id").Find(&members).Error
46 49
 	if err != nil {
47 50
 		return
@@ -81,11 +84,29 @@ func GetUserByMobile(mobile string) (*models.User, error) {
81 84
 	return &user, nil
82 85
 }
83 86
 
87
+func GetOnlyMemberByID(orgID, id int64) (*Members, error) {
88
+	var member Members
89
+	var err error
90
+	err = service.UserReadDB().Where("id =? and user_org_id=? and status=1", id, orgID).Find(&member).Error
91
+	if err == gorm.ErrRecordNotFound {
92
+		return nil, nil
93
+	}
94
+	if err != nil {
95
+		return nil, err
96
+	}
97
+	return &member, nil
98
+}
99
+
84 100
 func CreateMember(member *Members) (err error) {
85 101
 	err = service.UserWriteDB().Create(member).Error
86 102
 	return
87 103
 }
88 104
 
105
+func EditMember(member *Members) (err error) {
106
+	err = service.UserWriteDB().Save(member).Error
107
+	return
108
+}
109
+
89 110
 func CreateMemberWithUser(member *Members, user *models.User) (err error) {
90 111
 	tx := service.UserWriteDB().Begin()
91 112
 	err = tx.Create(user).Error
@@ -104,3 +125,12 @@ func CreateMemberWithUser(member *Members, user *models.User) (err error) {
104 125
 
105 126
 	return
106 127
 }
128
+
129
+func DeleteMembers(orgID int64, ids []int64) (err error) {
130
+	if len(ids) == 1 {
131
+		err = service.UserWriteDB().Model(&models.UserCustomer{}).Where("id =? and user_org_id =?", ids[0], orgID).Update(map[string]interface{}{"Status": 0, "UpdatedTime": time.Now().Unix()}).Error
132
+	} else {
133
+		err = service.UserWriteDB().Model(&models.UserCustomer{}).Where("id IN (?) and user_org_id =?", ids, orgID).Update(map[string]interface{}{"Status": 0, "UpdatedTime": time.Now().Unix()}).Error
134
+	}
135
+	return
136
+}

+ 32 - 0
service/member_service/models.go Näytä tiedosto

@@ -34,4 +34,36 @@ type CustomerIllness struct {
34 34
 func (CustomerIllness) TableName() string {
35 35
 	return "sgj_user_customer_illness"
36 36
 }
37
+<<<<<<< .mine
37 38
 
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+=======
54
+
55
+type Tags struct {
56
+	models.UserTags
57
+
58
+	MemberCount int64
59
+}
60
+
61
+func (Tags) TableName() string {
62
+	return "sgj_user_tags"
63
+}
64
+
65
+type TagsMemberCount struct {
66
+	MemberCount int64 `gorm:"member_count"`
67
+	TagID       int64 `gorm:"tag_id"`
68
+}
69
+>>>>>>> .theirs

+ 102 - 1
service/member_service/tags_service.go Näytä tiedosto

@@ -3,10 +3,111 @@ package member_service
3 3
 import (
4 4
 	"SCRM/models"
5 5
 	"SCRM/service"
6
+	"errors"
7
+	"strings"
8
+	"time"
6 9
 )
7 10
 
8 11
 func GetTagList(orgID int64) (tags []*models.UserTags, err error) {
9
-	err = service.UserReadDB().Model(&models.UserTags{}).Where("status=1 and user_org_id=?", orgID).Order("id asc").Find(&tags).Error
12
+	err = service.UserReadDB().Model(&models.UserTags{}).Where("user_org_id=? and status=1", orgID).Order("id asc").Find(&tags).Error
10 13
 
11 14
 	return
12 15
 }
16
+
17
+//GetMemberAllTags 取所有(包括已经软删除的记录)
18
+func GetMemberAllTags(orgID, customerID int64) (tags []*models.UserTagLinks, err error) {
19
+	err = service.UserReadDB().Where("user_org_id = ? and user_link_id =? ", orgID, customerID).Find(&tags).Error
20
+	return
21
+}
22
+
23
+//GetMembersAllTags 取所有(包括已经软删除的记录)
24
+func GetMembersAllTags(orgID int64, customerIDs []int64) (tags []*models.UserTagLinks, err error) {
25
+	err = service.UserReadDB().Where("user_org_id = ? and user_link_id in (?) ", orgID, customerIDs).Find(&tags).Error
26
+	return
27
+}
28
+
29
+//DeleteMemeberAllTags 删除会员所有标签
30
+func DeleteMemeberAllTags(orgID, customerID int64) (err error) {
31
+	err = service.UserWriteDB().Model(&models.UserTagLinks{}).Where("user_org_id = ? and user_link_id =? ", orgID, customerID).Update(map[string]interface{}{"Status": 0, "UpdatedTime": time.Now().Unix()}).Error
32
+	return
33
+}
34
+
35
+func SaveMemberTags(tags []*models.UserTagLinks) (err error) {
36
+	if len(tags) == 0 {
37
+		err = errors.New("NotRecordToUpdate")
38
+		return
39
+	}
40
+
41
+	insertSql := "INSERT INTO sgj_user_tag_links (tag_id, user_link_id, status, created_time, updated_time, user_org_id) VALUES "
42
+	insertParams := make([]string, 0)
43
+	insertData := make([]interface{}, 0)
44
+	updateIds := make([]int64, 0)
45
+	deleteIds := make([]int64, 0)
46
+	for _, tag := range tags {
47
+		if tag.ID == 0 {
48
+			insertParams = append(insertParams, "(?,?,?,?,?,?)")
49
+			insertData = append(insertData, tag.TagId)
50
+			insertData = append(insertData, tag.UserLinkId)
51
+			insertData = append(insertData, tag.Status)
52
+			insertData = append(insertData, tag.CreatedTime)
53
+			insertData = append(insertData, tag.UpdatedTime)
54
+			insertData = append(insertData, tag.UserOrgId)
55
+		} else {
56
+			if tag.Status == 1 {
57
+				updateIds = append(updateIds, tag.ID)
58
+			} else {
59
+				deleteIds = append(deleteIds, tag.ID)
60
+			}
61
+		}
62
+	}
63
+
64
+	tx := service.UserWriteDB().Begin()
65
+	if len(insertParams) > 0 {
66
+		insertSql += strings.Join(insertParams, ", ")
67
+		err = tx.Exec(insertSql, insertData...).Error
68
+		if err != nil {
69
+			tx.Rollback()
70
+			return
71
+		}
72
+	}
73
+
74
+	if len(updateIds) > 0 {
75
+		err = service.UserWriteDB().Model(&models.UserTagLinks{}).Where("id IN (?)", updateIds).Update(map[string]interface{}{"Status": 1, "UpdatedTime": time.Now().Unix()}).Error
76
+		if err != nil {
77
+			tx.Rollback()
78
+			return
79
+		}
80
+	}
81
+	if len(deleteIds) > 0 {
82
+		err = service.UserWriteDB().Model(&models.UserTagLinks{}).Where("id IN (?)", deleteIds).Update(map[string]interface{}{"Status": 0, "UpdatedTime": time.Now().Unix()}).Error
83
+		if err != nil {
84
+			tx.Rollback()
85
+			return
86
+		}
87
+	}
88
+
89
+	tx.Commit()
90
+	return
91
+}
92
+
93
+func GetPageTagList(orgID, page, limit int64, search string) (tags []*Tags, err error) {
94
+	db := service.UserReadDB().Model(&models.UserTags{}).Where("user_org_id=? and status=1", orgID)
95
+
96
+	if len(search) > 0 {
97
+		searchKey := "%" + search + "%"
98
+		db = db.Where("tag_name LIKE ?", searchKey)
99
+	}
100
+	offset := (page - 1) * limit
101
+
102
+	err = service.UserReadDB().Model(&models.UserTags{}).Where("user_org_id=? and status=1", orgID).Order("id desc").Offset(offset).Limit(limit).Find(&tags).Error
103
+
104
+	if len(tags) > 0 {
105
+		// var tmcs []*TagsMemberCount
106
+		// tagIDs := make([]int64, 0)
107
+		// for _, tag := range tags {
108
+		// 	tagIDs = append(tagIDs, tag.ID)
109
+		// }
110
+
111
+	}
112
+	return
113
+}