瀏覽代碼

修复 营销活动,完成 签到录入

keyman1995 6 年之前
父節點
當前提交
73502f1c9e
共有 77 個檔案被更改,包括 2666 行新增3650 行删除
  1. 1
    0
      conf/app.conf
  2. 174
    0
      controllers/card/card.go
  3. 180
    0
      controllers/coupon/coupon.go
  4. 5
    1
      controllers/customer/customer.go
  5. 6
    6
      controllers/gymcard/gymcard.go
  6. 55
    2
      controllers/user/user.go
  7. 0
    3062
      log/common.log
  8. 35
    0
      models/bodychecklist/bodychecklist.go
  9. 269
    0
      models/card/card.go
  10. 42
    0
      models/card/image.go
  11. 44
    0
      models/card/share.go
  12. 42
    0
      models/card/target.go
  13. 7
    0
      models/cases/cases.go
  14. 21
    0
      models/constant.go
  15. 17
    7
      models/coupon/coupon.go
  16. 3
    2
      models/coupon/image.go
  17. 11
    3
      models/coupon/target.go
  18. 1
    2
      models/coupon/types.go
  19. 27
    4
      models/customer/customer.go
  20. 17
    0
      models/goods/goods.go
  21. 4
    1
      models/goods/spec.go
  22. 1
    1
      models/goods/type.go
  23. 45
    7
      models/gymcard/gymcard.go
  24. 6
    3
      models/model/sys_case_record.go
  25. 1
    1
      models/model/sys_wechat_conf.go
  26. 15
    0
      models/model/ta_body_check.go
  27. 9
    0
      models/model/ta_card_coupon_channel.go
  28. 13
    0
      models/model/ta_case_equipment.go
  29. 13
    16
      models/model/ta_checkin_record.go
  30. 20
    20
      models/model/ta_coupon.go
  31. 17
    20
      models/model/ta_coupon_card.go
  32. 0
    2
      models/model/ta_coupon_card_target.go
  33. 3
    1
      models/model/ta_coupon_give_record.go
  34. 1
    0
      models/model/ta_coupon_target.go
  35. 1
    1
      models/model/ta_course_orders_coupon.go
  36. 1
    1
      models/model/ta_customer_account.go
  37. 2
    0
      models/model/ta_customer_card.go
  38. 2
    0
      models/model/ta_customer_coupon.go
  39. 1
    1
      models/model/ta_customer_course.go
  40. 3
    0
      models/model/ta_customer_gym.go
  41. 9
    0
      models/model/ta_experience_card_image.go
  42. 10
    0
      models/model/ta_experience_card_share.go
  43. 0
    14
      models/model/ta_experience_card_verification.go
  44. 1
    0
      models/model/ta_forbid_user.go
  45. 2
    2
      models/model/ta_goods_orders.go
  46. 20
    0
      models/model/ta_luckdraw.go
  47. 21
    0
      models/model/ta_luckdraw_prize.go
  48. 20
    0
      models/model/ta_luckdraw_record.go
  49. 16
    0
      models/model/ta_luckdraw_writeoff.go
  50. 14
    0
      models/model/ta_presentation.go
  51. 10
    0
      models/model/ta_presentation_detail.go
  52. 14
    0
      models/model/ta_prize_detail.go
  53. 22
    0
      models/model/ta_share_lucky_record.go
  54. 25
    0
      models/model/ta_statistics_card_coupon_usage.go
  55. 8
    0
      models/model/td_check_spec.go
  56. 6
    0
      models/model/td_check_type.go
  57. 0
    7
      models/model/td_coupon_type.go
  58. 1
    1
      models/model/td_goods_type.go
  59. 8
    0
      models/model/td_luckdraw_theme.go
  60. 10
    5
      models/model/td_spec.go
  61. 11
    0
      models/model/td_wechat_conf.go
  62. 100
    8
      models/system/user.go
  63. 267
    242
      routers/common.go
  64. 48
    32
      routers/wechat.go
  65. 276
    0
      service/card/card.go
  66. 179
    59
      service/coupon/coupon.go
  67. 6
    4
      service/customer/customer.go
  68. 52
    33
      service/events/events.go
  69. 66
    8
      service/events/giveCoupon.go
  70. 25
    0
      service/events/utils.go
  71. 9
    1
      service/goods/spec.go
  72. 9
    1
      service/goods/type.go
  73. 45
    22
      service/gymcard/gymcard.go
  74. 2
    2
      service/sys.go
  75. 174
    7
      service/user.go
  76. 5
    2
      service/verify/verify.go
  77. 60
    36
      utils/event.go

+ 1
- 0
conf/app.conf 查看文件

@@ -6,6 +6,7 @@ copyrequestbody = true
6 6
 EnableDocs = true
7 7
 sessionon = true
8 8
 excelpath = ./
9
+clienturl = http://dev.ycjcjy.com/c-v2
9 10
 
10 11
 
11 12
 [cros]

+ 174
- 0
controllers/card/card.go 查看文件

@@ -0,0 +1,174 @@
1
+package card
2
+
3
+import (
4
+	"encoding/json"
5
+	"errors"
6
+	"net/http"
7
+	"spaceofcheng/services/controllers"
8
+	cardModel "spaceofcheng/services/models/card"
9
+	"spaceofcheng/services/service/card"
10
+	"spaceofcheng/services/utils"
11
+	"strings"
12
+)
13
+
14
+// CardController 商品
15
+type CardController struct {
16
+	serv *card.CardServ
17
+	controllers.BaseController
18
+}
19
+
20
+// Constructor 初始化 Controller
21
+// @Title Constructor
22
+// @Description 初始化 Controller, 系统自动调用
23
+func (c *CardController) Constructor() {
24
+	c.serv = card.NewCardServ(c.Context)
25
+}
26
+
27
+// ListByCase 获取卡列表
28
+func (c *CardController) ListByCase() {
29
+	caseid := c.GetString("caseid")
30
+	page, _ := c.GetInt("page")
31
+	pagesize, _ := c.GetInt("pagesize")
32
+	if page < 0 {
33
+		page = 1
34
+	}
35
+
36
+	if pagesize <= 0 {
37
+		pagesize = 10
38
+	}
39
+
40
+	list, total, err := c.serv.GetCardList(caseid, page, pagesize)
41
+	if err != nil {
42
+		c.ResponseError(err)
43
+	}
44
+
45
+	c.ResponseJSON(map[string]interface{}{
46
+		"list":     list,
47
+		"page":     page,
48
+		"pagesize": pagesize,
49
+		"pagenum":  total,
50
+	})
51
+}
52
+
53
+// GetCardByIDForAdmin 获取卡
54
+// 管理端
55
+func (c *CardController) GetCardByIDForAdmin() {
56
+	id := c.GetString(":id")
57
+	if id == "" {
58
+		c.ResponseError(errors.New("未指定卡"))
59
+	}
60
+
61
+	card, err := c.serv.GetCardByIDWithCheck(id)
62
+	if err != nil {
63
+		c.ResponseError(err)
64
+	}
65
+
66
+	c.ResponseJSON(map[string]interface{}{
67
+		"Card": card,
68
+	})
69
+}
70
+
71
+// GetCardByID 获取卡
72
+// 微信端
73
+func (c *CardController) GetCardByID() {
74
+	id := c.GetString(":id")
75
+	if id == "" {
76
+		c.ResponseError(errors.New("未指定卡"))
77
+	}
78
+
79
+	card, err := c.serv.GetCardByID(id)
80
+	if err != nil {
81
+		c.ResponseError(err)
82
+	}
83
+
84
+	c.ResponseJSON(map[string]interface{}{
85
+		"Card": card,
86
+	})
87
+}
88
+
89
+// GetMyCard 获取我的卡券
90
+// 微信端
91
+func (c *CardController) GetMyCard() {
92
+
93
+}
94
+
95
+// SaveCard 保存卡
96
+func (c *CardController) SaveCard() {
97
+	jsnStr := c.GetString("info")
98
+	if jsnStr == "" {
99
+		c.ResponseError(errors.New("未接收到保存内容"))
100
+	}
101
+
102
+	card := cardModel.CardInfo{}
103
+
104
+	if err := json.Unmarshal([]byte(jsnStr), &card); err != nil {
105
+		utils.LogError("接收卡信息失败: " + err.Error())
106
+		c.ResponseError(errors.New("接收参数失败"), http.StatusInternalServerError)
107
+	}
108
+
109
+	// TODO
110
+	// 校验各字段不能为空
111
+
112
+	// 入库
113
+	card.CardId = ""
114
+	if err := c.serv.SaveCard(&card); err != nil {
115
+		c.ResponseError(err)
116
+	}
117
+
118
+	c.ResponseJSON(map[string]interface{}{
119
+		"Card": card,
120
+	})
121
+}
122
+
123
+// UpdateCard 更新卡
124
+func (c *CardController) UpdateCard() {
125
+	jsnStr := c.GetString("info")
126
+	if jsnStr == "" {
127
+		c.ResponseError(errors.New("未接收到更新内容"))
128
+	}
129
+
130
+	id := c.GetString(":id")
131
+	if id == "" {
132
+		c.ResponseError(errors.New("未指定卡"))
133
+	}
134
+
135
+	card := cardModel.CardInfo{}
136
+
137
+	if err := json.Unmarshal([]byte(jsnStr), &card); err != nil {
138
+		utils.LogError("接收卡信息失败: " + err.Error())
139
+		c.ResponseError(errors.New("接收参数失败"), http.StatusInternalServerError)
140
+	}
141
+
142
+	// TODO
143
+	// 校验各字段不能为空
144
+
145
+	// 入库
146
+	card.CardId = id
147
+	if err := c.serv.UpdateCard(&card); err != nil {
148
+		c.ResponseError(err)
149
+	}
150
+
151
+	c.ResponseJSON(map[string]interface{}{
152
+		"Card": card,
153
+	})
154
+}
155
+
156
+// GiveCard 赠送卡
157
+func (c *CardController) GiveCard() {
158
+	id := c.GetString(":id")
159
+	if id == "" {
160
+		c.ResponseError(errors.New("未指定卡"))
161
+	}
162
+
163
+	uids := c.GetString(":users")
164
+	if uids == "" {
165
+		c.ResponseError(errors.New("未指定赠送人"))
166
+	}
167
+
168
+	err := c.serv.GiveCard(id, strings.Split(uids, ","))
169
+	if err != nil {
170
+		c.ResponseError(err)
171
+	}
172
+
173
+	c.ResponseJSON("ok")
174
+}

+ 180
- 0
controllers/coupon/coupon.go 查看文件

@@ -0,0 +1,180 @@
1
+package coupon
2
+
3
+import (
4
+	"encoding/json"
5
+	"errors"
6
+	"net/http"
7
+	"spaceofcheng/services/controllers"
8
+	cpModel "spaceofcheng/services/models/coupon"
9
+	"spaceofcheng/services/service/coupon"
10
+	"spaceofcheng/services/utils"
11
+	"strings"
12
+)
13
+
14
+// CouponController 商品
15
+type CouponController struct {
16
+	serv *coupon.CouponServ
17
+	controllers.BaseController
18
+}
19
+
20
+// Constructor 初始化 Controller
21
+// @Title Constructor
22
+// @Description 初始化 Controller, 系统自动调用
23
+func (c *CouponController) Constructor() {
24
+	c.serv = coupon.NewCouponServ(c.Context)
25
+}
26
+
27
+// ListByCase 获取券列表
28
+func (c *CouponController) ListByCase() {
29
+	caseID := c.GetString("caseid")
30
+
31
+	page, _ := c.GetInt("page")
32
+	pagesize, _ := c.GetInt("pagesize")
33
+	if page < 0 {
34
+		page = 1
35
+	}
36
+
37
+	if pagesize <= 0 {
38
+		pagesize = 10
39
+	}
40
+
41
+	list, total, err := c.serv.GetCouponList(caseID, page, pagesize)
42
+	if err != nil {
43
+		c.ResponseError(err)
44
+	}
45
+
46
+	c.ResponseJSON(map[string]interface{}{
47
+		"list":     list,
48
+		"page":     page,
49
+		"pagesize": pagesize,
50
+		"pagenum":  total,
51
+	})
52
+}
53
+
54
+// GetCouponByIDForAdmin 获取优惠券
55
+// 管理端
56
+func (c *CouponController) GetCouponByIDForAdmin() {
57
+	id := c.GetString(":id")
58
+	if id == "" {
59
+		c.ResponseError(errors.New("未指定券"))
60
+	}
61
+
62
+	cp, err := c.serv.GetCouponByIDWithCheck(id)
63
+	if err != nil {
64
+		c.ResponseError(err)
65
+	}
66
+
67
+	c.ResponseJSON(map[string]interface{}{
68
+		"coupon": cp,
69
+	})
70
+}
71
+
72
+// GetCouponByID 获取优惠券
73
+// 微信端
74
+func (c *CouponController) GetCouponByID() {
75
+	id := c.GetString(":id")
76
+	if id == "" {
77
+		c.ResponseError(errors.New("未指定券"))
78
+	}
79
+
80
+	cp, err := c.serv.GetCouponByID(id)
81
+	if err != nil {
82
+		c.ResponseError(err)
83
+	}
84
+
85
+	c.ResponseJSON(map[string]interface{}{
86
+		"coupon": cp,
87
+	})
88
+}
89
+
90
+// SaveCoupon 保存优惠券
91
+func (c *CouponController) SaveCoupon() {
92
+	jsnStr := c.GetString("info")
93
+	if jsnStr == "" {
94
+		c.ResponseError(errors.New("未接收到保存内容"))
95
+	}
96
+
97
+	cp := cpModel.CouponInfo{}
98
+
99
+	if err := json.Unmarshal([]byte(jsnStr), &cp); err != nil {
100
+		utils.LogError("接收优惠券信息失败: " + err.Error())
101
+		c.ResponseError(errors.New("接收参数失败"), http.StatusInternalServerError)
102
+	}
103
+
104
+	// TODO
105
+	// 校验各字段不能为空
106
+
107
+	// 入库
108
+	cp.CouponId = ""
109
+	if err := c.serv.SaveCoupon(&cp); err != nil {
110
+		c.ResponseError(err)
111
+	}
112
+
113
+	c.ResponseJSON(map[string]interface{}{
114
+		"coupon": cp,
115
+	})
116
+}
117
+
118
+// UpdateCoupon 更新优惠券
119
+func (c *CouponController) UpdateCoupon() {
120
+	jsnStr := c.GetString("info")
121
+	if jsnStr == "" {
122
+		c.ResponseError(errors.New("未接收到更新内容"))
123
+	}
124
+
125
+	id := c.GetString(":id")
126
+	if id == "" {
127
+		c.ResponseError(errors.New("未指定券"))
128
+	}
129
+
130
+	cp := cpModel.CouponInfo{}
131
+
132
+	if err := json.Unmarshal([]byte(jsnStr), &cp); err != nil {
133
+		utils.LogError("接收优惠券信息失败: " + err.Error())
134
+		c.ResponseError(errors.New("接收参数失败"), http.StatusInternalServerError)
135
+	}
136
+
137
+	// TODO
138
+	// 校验各字段不能为空
139
+
140
+	// 入库
141
+	cp.CouponId = id
142
+	if err := c.serv.UpdateCoupon(&cp); err != nil {
143
+		c.ResponseError(err)
144
+	}
145
+
146
+	c.ResponseJSON(map[string]interface{}{
147
+		"coupon": cp,
148
+	})
149
+}
150
+
151
+// GiveCoupon 赠送优惠券
152
+func (c *CouponController) GiveCoupon() {
153
+	id := c.GetString(":id")
154
+	if id == "" {
155
+		c.ResponseError(errors.New("未指定券"))
156
+	}
157
+
158
+	uids := c.GetString(":users")
159
+	if uids == "" {
160
+		c.ResponseError(errors.New("未指定赠送人"))
161
+	}
162
+
163
+	err := c.serv.GiveCoupon(id, strings.Split(uids, ","))
164
+	if err != nil {
165
+		c.ResponseError(err)
166
+	}
167
+
168
+	c.ResponseJSON("ok")
169
+}
170
+
171
+// GetCouponBySendType 根据类型获取优惠券
172
+func (c *CouponController) GetCouponBySendType() {
173
+	sendtype := c.GetString(":type")
174
+	coupons, err := c.serv.GetCouponBySendType(sendtype)
175
+	if err != nil {
176
+		c.ResponseError(err)
177
+	}
178
+
179
+	c.ResponseJSON(coupons)
180
+}

+ 5
- 1
controllers/customer/customer.go 查看文件

@@ -25,10 +25,14 @@ func (c *CustomerController) Constructor() {
25 25
 // CustWXList 获取客户列表
26 26
 func (c *CustomerController) CustWXList() {
27 27
 	phone := c.GetString("phone")
28
+	username := c.GetString("username")
29
+	recommendname := c.GetString("recommendname")
30
+	begindate := c.GetString("begindate")
31
+	enddate := c.GetString("enddate")
28 32
 	page, _ := c.GetInt("page")
29 33
 	pageSize, _ := c.GetInt("pagesize")
30 34
 
31
-	custList, total, err := c.serv.GetCustWithWXList(phone, page, pageSize)
35
+	custList, total, err := c.serv.GetCustWithWXList(phone, username, recommendname, begindate, enddate, page, pageSize)
32 36
 	if err != nil {
33 37
 		utils.LogError("获取客户列表失败: " + err.Error())
34 38
 		c.ResponseError(

+ 6
- 6
controllers/gymcard/gymcard.go 查看文件

@@ -49,7 +49,7 @@ func (c *GymcardController) GetGymcardListByCustomerId() {
49 49
 
50 50
 // GetGymcardDetailbyId 根据游泳健身卡ID获取游泳健身卡详情
51 51
 func (c *GymcardController) GetGymcardDetailbyId() {
52
-	id := c.GetString("gymcardId")
52
+	id := c.GetString(":gymcardId")
53 53
 	gymcard, err := c.dao.GetGymcardDetailById(id)
54 54
 	if err != nil {
55 55
 		c.ResponseError(err)
@@ -59,7 +59,7 @@ func (c *GymcardController) GetGymcardDetailbyId() {
59 59
 
60 60
 // GetCustomerGymDetailById 根据客户健身卡ID获取客户健身卡详情
61 61
 func (c *GymcardController) GetCustomerGymDetailById() {
62
-	id := c.GetString("customerGymId")
62
+	id := c.GetString(":customerGymId")
63 63
 	customerGym, err := c.dao.GetCustomerGymDetailById(id)
64 64
 	if err != nil {
65 65
 		c.ResponseError(err)
@@ -69,7 +69,7 @@ func (c *GymcardController) GetCustomerGymDetailById() {
69 69
 
70 70
 // GetCustomerGymByPhone 根据客户手机获取客户可用的游泳健身卡
71 71
 func (c *GymcardController) GetCustomerGymByPhone() {
72
-	phone := c.GetString("phone")
72
+	phone := c.GetString(":phone")
73 73
 	customerGym, err := c.dao.GetCustomerGymByPhone(phone)
74 74
 	if err != nil {
75 75
 		c.ResponseError(err)
@@ -92,8 +92,8 @@ func (c *GymcardController) SaveGymcard() {
92 92
 
93 93
 // SendGymToCustomer 客户领卡
94 94
 func (c *GymcardController) SendGymToCustomer() {
95
-	gymcardId := c.GetString("gymcardId")
96
-	sysuserId := c.GetString("sysuserId")
95
+	gymcardId := c.GetString(":gymcardId")
96
+	sysuserId := c.GetString(":sysuserId")
97 97
 	customerGym, err := c.dao.SendGymCardToUser(gymcardId, sysuserId)
98 98
 	if err != nil {
99 99
 		c.ResponseError(err)
@@ -105,7 +105,7 @@ func (c *GymcardController) SendGymToCustomer() {
105 105
 func (c *GymcardController) VerifyCustomerGymcard() {
106 106
 	cases := c.Context.Get("cases").([]model.SysUserCase)
107 107
 	caseids := c.GetCaseIDs(cases)
108
-	customerGymId := c.GetString("customerGymId")
108
+	customerGymId := c.GetString(":customerGymId")
109 109
 	err := c.dao.UpdateCustomerGym(customerGymId, caseids)
110 110
 	if err != nil {
111 111
 		c.ResponseError(err)

+ 55
- 2
controllers/user/user.go 查看文件

@@ -137,10 +137,14 @@ func (c *UserController) UserMapRole() {
137 137
 
138 138
 // GetUserCustomer 我的推荐客户
139 139
 func (c *UserController) GetUserCustomer() {
140
-	userid := c.GetString(":userid")
140
+	customer := c.Context.Get("customer").(model.TaCustomer)
141
+	if customer.UserId == "" {
142
+		c.ResponseError(errors.New("无法获取推荐客户信息!"))
143
+	}
141 144
 	page, _ := c.GetInt("page")
142 145
 	pageSize, _ := c.GetInt("pagesize")
143
-	customers, err := c.dao.GetUserCustomer(userid, page, pageSize)
146
+	isrecommend := c.GetString("isrecommend")
147
+	customers, err := c.dao.GetUserCustomer(customer.UserId, isrecommend, page, pageSize)
144 148
 	if err != nil {
145 149
 		c.ResponseError(err)
146 150
 	}
@@ -244,3 +248,52 @@ func (c *UserController) GetUserByTel() {
244 248
 	}
245 249
 	c.ResponseJSON(user)
246 250
 }
251
+
252
+// GetForbidUsers 获取所有禁止人员信息
253
+func (c *UserController) GetForbidUsers() {
254
+	// caseid := c.GetString("caseid")
255
+	// if caseid == "" {
256
+	// 	c.ResponseError(errors.New("没有案场信息"))
257
+	// }
258
+	users, err := c.dao.GetForbidUsers()
259
+	if err != nil {
260
+		utils.LogError("获取禁止人员信息失败: " + err.Error())
261
+		c.ResponseError(errors.New("获取禁止人员信息失败"))
262
+	}
263
+	c.ResponseJSON(users)
264
+}
265
+
266
+// SaveForbidUser 保存禁止人员信息
267
+func (c *UserController) SaveForbidUser() {
268
+	userid := c.GetString(":userid")
269
+	forbidtype := c.GetString(":type")
270
+	err := c.dao.SaveForbidUser(userid, forbidtype)
271
+	if err != nil {
272
+		utils.LogError("保存禁止人员信息失败: " + err.Error())
273
+		c.ResponseError(errors.New("保存禁止人员信息失败"))
274
+	}
275
+	c.ResponseJSON("操作成功")
276
+}
277
+
278
+// OpenForbidUser 开启禁止人员
279
+func (c *UserController) OpenForbidUser() {
280
+	userid := c.GetString(":userid")
281
+	forbidtype := c.GetString(":type")
282
+	err := c.dao.OpenForbidUser(userid, forbidtype)
283
+	if err != nil {
284
+		utils.LogError("开启禁止人员信息失败: " + err.Error())
285
+		c.ResponseError(errors.New("开启禁止人员信息失败"))
286
+	}
287
+	c.ResponseJSON("操作成功")
288
+}
289
+
290
+// GetCaseUserByType 根据用户类型获取用户信息
291
+func (c *UserController) GetCaseUserByType() {
292
+	usertype := c.GetString(":type")
293
+	users, err := c.dao.GetCaseUserByType(usertype)
294
+	if err != nil {
295
+		utils.LogError("获取人员信息失败: " + err.Error())
296
+		c.ResponseError(errors.New("获取人员信息失败"))
297
+	}
298
+	c.ResponseJSON(users)
299
+}

+ 0
- 3062
log/common.log
文件差異過大導致無法顯示
查看文件


+ 35
- 0
models/bodychecklist/bodychecklist.go 查看文件

@@ -0,0 +1,35 @@
1
+package bodychecklist
2
+
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+	"spaceofcheng/services/utils"
6
+
7
+	"github.com/go-xorm/xorm"
8
+)
9
+
10
+// BodychecklistDAO 当前数据库操作对象
11
+type BodychecklistDAO struct {
12
+	ctx *utils.Context
13
+	db  *xorm.Session
14
+}
15
+
16
+// NewBodychecklistDAO New Inst
17
+func NewBodychecklistDAO(ctx *utils.Context) *BodychecklistDAO {
18
+	return &BodychecklistDAO{
19
+		ctx: ctx,
20
+		db:  ctx.DB,
21
+	}
22
+}
23
+
24
+type BodyCheck struct {
25
+	model.TaBodyCheck `xorm:"extends"`
26
+	CaseName          string
27
+	Sex               string
28
+	CustomerName      string
29
+	Phone             string
30
+}
31
+
32
+// func (m *BodychecklistDAO) GetBodychecklist(caseid, phone, customerName string, page, pageSize int) ([]BodyCheck, error) {
33
+// 	var bodycheck []BodyCheck
34
+// 	sql:=``
35
+// }

+ 269
- 0
models/card/card.go 查看文件

@@ -0,0 +1,269 @@
1
+package card
2
+
3
+import (
4
+	"errors"
5
+	"fmt"
6
+	"spaceofcheng/services/models"
7
+	"spaceofcheng/services/models/model"
8
+	"spaceofcheng/services/utils"
9
+	"strconv"
10
+	"strings"
11
+	"time"
12
+
13
+	"github.com/go-xorm/xorm"
14
+	"github.com/yl10/kit/guid"
15
+)
16
+
17
+// CardDAO 当前数据库操作对象
18
+type CardDAO struct {
19
+	ctx *utils.Context
20
+	db  *xorm.Session
21
+}
22
+
23
+// NewCardDAO New Inst
24
+func NewCardDAO(ctx *utils.Context) *CardDAO {
25
+	return &CardDAO{
26
+		ctx: ctx,
27
+		db:  ctx.DB,
28
+	}
29
+}
30
+
31
+// CardInfo 卡
32
+type CardInfo struct {
33
+	model.TaCouponCard `xorm:"extends"`
34
+	Images             []model.TaExperienceCardImage
35
+	Targets            []model.TaCouponCardTarget
36
+	Share              *model.TaExperienceCardShare
37
+}
38
+
39
+// GetCardList 获取卡列表
40
+func (m *CardDAO) GetCardList(filters []string, limit []int) ([]model.TaCouponCard, int64, error) {
41
+	var cds []model.TaCouponCard
42
+
43
+	filterString := ""
44
+	if len(filters) > 0 {
45
+		filterString = strings.Join(filters, " and ")
46
+		filterString += " and "
47
+	}
48
+
49
+	sql := `select * from ta_coupon_card where %s status > ` + strconv.Itoa(models.STATUS_DEL) + ` order by create_date desc`
50
+
51
+	total, err := utils.NewPageNaviEngine(m.ctx).GetPageList(&cds, fmt.Sprintf(sql, filterString), limit)
52
+	if err != nil {
53
+		return nil, 0, err
54
+	}
55
+
56
+	return cds, total, nil
57
+}
58
+
59
+// GetCardByID 获取卡明细
60
+func (m *CardDAO) GetCardByID(cardid string) (*CardInfo, error) {
61
+	var card []CardInfo
62
+	sql := `select * from ta_coupon_card where card_id=? and status>` + strconv.Itoa(models.STATUS_DEL)
63
+
64
+	err := m.db.Sql(sql, cardid).Find(&card)
65
+	if err != nil {
66
+		return nil, err
67
+	}
68
+	if len(card) == 0 {
69
+		return nil, nil
70
+	}
71
+	imgs, err := m.GetCardImgsByCardID(cardid)
72
+	if err != nil {
73
+		return nil, err
74
+	}
75
+	card[0].Images = imgs
76
+	targets, err := m.GetCardTargetByCardID(cardid)
77
+	if err != nil {
78
+		return nil, err
79
+	}
80
+	card[0].Targets = targets
81
+	share, err := m.GetCardShareByCardID(cardid)
82
+	if err != nil {
83
+		return nil, err
84
+	}
85
+	card[0].Share = share
86
+	return &card[0], err
87
+}
88
+
89
+// AddCard 新增卡信息
90
+func (m *CardDAO) AddCard(card *model.TaCouponCard) error {
91
+	if card.CardId == "" {
92
+		card.CardId = guid.NewGUIDString()
93
+	}
94
+
95
+	userRaw := m.ctx.Get("user")
96
+	if userRaw != nil {
97
+		user := userRaw.(model.SysUser)
98
+		card.CreateUser = user.UserId
99
+	}
100
+
101
+	card.Status = models.STATUS_NORMAL
102
+	card.CreateDate = time.Now().Local()
103
+
104
+	if _, err := m.db.Insert(card); err != nil {
105
+		return err
106
+	}
107
+
108
+	return nil
109
+}
110
+
111
+// UpdateCard 更新优惠券
112
+func (m *CardDAO) UpdateCard(card *model.TaCouponCard, cols []string) error {
113
+	if card.CardId == "" {
114
+		return errors.New("无卡信息")
115
+	}
116
+
117
+	if _, err := m.db.Cols(cols...).Where("card_id=?", card.CardId).Update(card); err != nil {
118
+		return err
119
+	}
120
+
121
+	return nil
122
+}
123
+
124
+// DeleteCard 删除卡
125
+func (m *CardDAO) DeleteCard(id string) error {
126
+	if id == "" {
127
+		return errors.New("无卡信息")
128
+	}
129
+
130
+	card := model.TaCouponCard{
131
+		CardId: id,
132
+		Status: models.STATUS_DEL,
133
+	}
134
+
135
+	if err := m.UpdateCard(&card, []string{"status"}); err != nil {
136
+		return err
137
+	}
138
+
139
+	return nil
140
+}
141
+
142
+// SaveCustomerCard 保存用户卡
143
+func (m *CardDAO) SaveCustomerCard(card *model.TaCustomerCard) error {
144
+	if card.CustomerCardId == "" {
145
+		card.CustomerCardId = guid.NewGUIDString()
146
+	}
147
+
148
+	card.Status = models.STATUS_NORMAL
149
+
150
+	if _, err := m.db.Insert(card); err != nil {
151
+		return err
152
+	}
153
+
154
+	return nil
155
+}
156
+
157
+// SaveCustomerCards 保存用户卡
158
+func (m *CardDAO) SaveCustomerCards(cards []model.TaCustomerCard) error {
159
+	for i := range cards {
160
+		if cards[i].CustomerCardId == "" {
161
+			cards[i].CustomerCardId = guid.NewGUIDString()
162
+		}
163
+
164
+		cards[i].Status = models.STATUS_NORMAL
165
+	}
166
+
167
+	if _, err := m.db.Insert(cards); err != nil {
168
+		return err
169
+	}
170
+
171
+	return nil
172
+}
173
+
174
+// CheckCustCard 检查客户是否已经有了该卡券
175
+// 如果用户有了卡券, 但是用过了,或者卡券过期了,仍然可以再次拥有
176
+func (m *CardDAO) CheckCustCard(custID, CardID string, startDate, endDate time.Time) ([]model.TaCustomerCard, error) {
177
+	var cps []model.TaCustomerCard
178
+	query := `
179
+		SELECT
180
+			*
181
+		FROM
182
+			ta_customer_card t
183
+		WHERE
184
+			t.card_id = ?
185
+		AND t.customer_id = ?
186
+		AND t.status = ?
187
+		AND (
188
+			(t.start_date BETWEEN ? AND ?)
189
+			OR (t.end_date BETWEEN ? AND ?)
190
+			OR (
191
+				t.start_date <= ?
192
+				AND t.end_date >= ?
193
+			)
194
+		)
195
+	`
196
+
197
+	if err := m.db.SQL(
198
+		query,
199
+		CardID,
200
+		models.STATUS_NORMAL,
201
+		custID,
202
+		startDate,
203
+		endDate,
204
+		startDate,
205
+		endDate,
206
+		startDate,
207
+		endDate,
208
+	).Find(&cps); err != nil {
209
+		return nil, err
210
+	}
211
+
212
+	return cps, nil
213
+}
214
+
215
+// 案场可用卡信息
216
+type CaseUsableCard struct {
217
+	model.TaCouponCard `xorm:"extends"`
218
+	CustomerCard       []model.TaCustomerCard
219
+}
220
+
221
+// GetCaseUsableCard 获取案场可用卡信息
222
+func (m *CardDAO) GetCaseUsableCard(caseid, userid string, page, pageSize int) ([]CaseUsableCard, error) {
223
+	var cards []CaseUsableCard
224
+	sql := `select * from ta_coupon_card where case_id=? and status=? and end_date>now() order by create_date limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
225
+	err := m.db.Sql(sql, caseid, models.STATUS_NORMAL).Find(&cards)
226
+	if userid != "" {
227
+		for inx, card := range cards {
228
+			cCards, err := m.GetCustomerCardByCardAndUser(card.CardId, userid)
229
+			if err != nil {
230
+				return nil, err
231
+			}
232
+			cards[inx].CustomerCard = cCards
233
+		}
234
+	}
235
+	return cards, err
236
+}
237
+
238
+// GetCustomerCardByCardAndUser 根据卡与用户获取领取的用户信息
239
+func (m *CardDAO) GetCustomerCardByCardAndUser(cardid, userid string) ([]model.TaCustomerCard, error) {
240
+	var customerCards []model.TaCustomerCard
241
+	err := m.db.Where("card_id=?", cardid).And("sales_id=?", userid).And("status>?", models.STATUS_DEL).Find(&customerCards)
242
+	return customerCards, err
243
+}
244
+
245
+// GetCardDetail 获取卡详情
246
+func (m *CardDAO) GetCardDetail(cardid string) (*CaseUsableCard, error) {
247
+	var card = new(CaseUsableCard)
248
+	sql := `select * from ta_coupon_card where card_id=? and status>?`
249
+	_, err := m.db.Sql(sql, cardid, models.STATUS_DEL).Get(&card)
250
+	if err != nil {
251
+		return nil, err
252
+	}
253
+	if card == nil || card.CardId == "" {
254
+		return nil, errors.New("无卡信息")
255
+	}
256
+	ccards, err := m.GetCustomerCardByCard(cardid)
257
+	if err != nil {
258
+		return nil, err
259
+	}
260
+	card.CustomerCard = ccards
261
+	return card, nil
262
+}
263
+
264
+// GetCustomerCardByCard 根据卡获取领取的用户信息
265
+func (m *CardDAO) GetCustomerCardByCard(cardid string) ([]model.TaCustomerCard, error) {
266
+	var customerCards []model.TaCustomerCard
267
+	err := m.db.Where("card_id=?", cardid).And("status>?", models.STATUS_DEL).Find(&customerCards)
268
+	return customerCards, err
269
+}

+ 42
- 0
models/card/image.go 查看文件

@@ -0,0 +1,42 @@
1
+package card
2
+
3
+import (
4
+	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/models/model"
6
+
7
+	"github.com/yl10/kit/guid"
8
+)
9
+
10
+// GetCardImgsByCardID 根据卡id获取卡图片
11
+func (m *CardDAO) GetCardImgsByCardID(cardid string) ([]model.TaExperienceCardImage, error) {
12
+	var imgs []model.TaExperienceCardImage
13
+	err := m.db.Where("card_id=?", cardid).And("status>?", models.STATUS_DEL).Find(&imgs)
14
+	return imgs, err
15
+}
16
+
17
+// UpdateImages 更新图片 -- 插入或者更新
18
+func (m *CardDAO) UpdateImages(imgs []model.TaExperienceCardImage, cardID string) error {
19
+	if imgs == nil || len(imgs) == 0 {
20
+		return nil
21
+	}
22
+
23
+	for i := range imgs {
24
+		imgs[i].CardId = cardID
25
+
26
+		if imgs[i].CardImageId == "" {
27
+			imgs[i].CardImageId = guid.NewGUIDString()
28
+			imgs[i].Status = models.STATUS_NORMAL
29
+		}
30
+	}
31
+
32
+	sql := `delete from ta_experience_card_image where card_id=?`
33
+	if _, err := m.db.Exec(sql, cardID); err != nil {
34
+		return err
35
+	}
36
+
37
+	if _, err := m.db.Insert(imgs); err != nil {
38
+		return err
39
+	}
40
+
41
+	return nil
42
+}

+ 44
- 0
models/card/share.go 查看文件

@@ -0,0 +1,44 @@
1
+package card
2
+
3
+import (
4
+	"errors"
5
+	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/model"
7
+
8
+	"github.com/yl10/kit/guid"
9
+)
10
+
11
+// GetCardShareByCardID 根据卡id获取体验卡对应的分享信息
12
+func (m *CardDAO) GetCardShareByCardID(cardid string) (*model.TaExperienceCardShare, error) {
13
+	var share = model.TaExperienceCardShare{}
14
+	_, err := m.db.Where("card_id=?", cardid).Get(&share)
15
+	return &share, err
16
+}
17
+
18
+// SaveCardShare 保存卡分享信息
19
+func (m *CardDAO) SaveCardShare(card *model.TaExperienceCardShare) error {
20
+	if card.CardShareId == "" {
21
+		card.CardShareId = guid.NewGUIDString()
22
+	}
23
+
24
+	card.Status = models.STATUS_NORMAL
25
+
26
+	if _, err := m.db.Insert(card); err != nil {
27
+		return err
28
+	}
29
+
30
+	return nil
31
+}
32
+
33
+// UpdateCardShare 更新卡分享信息
34
+func (m *CardDAO) UpdateCardShare(card *model.TaExperienceCardShare, cols []string) error {
35
+	if card.CardShareId == "" {
36
+		return errors.New("无卡分享信息")
37
+	}
38
+
39
+	if _, err := m.db.Cols(cols...).Where("card_share_id=?", card.CardShareId).Update(card); err != nil {
40
+		return err
41
+	}
42
+
43
+	return nil
44
+}

+ 42
- 0
models/card/target.go 查看文件

@@ -0,0 +1,42 @@
1
+package card
2
+
3
+import (
4
+	"errors"
5
+	"spaceofcheng/services/models/model"
6
+)
7
+
8
+// GetCardTargetByCardID 根据卡id获取体验卡对应的目标信息
9
+func (m *CardDAO) GetCardTargetByCardID(cardid string) ([]model.TaCouponCardTarget, error) {
10
+	var targets []model.TaCouponCardTarget
11
+	err := m.db.Where("card_id=?", cardid).Find(&targets)
12
+	return targets, err
13
+}
14
+
15
+// UpdateTarget 更新关联内容 -- 插入或者更新
16
+func (m *CardDAO) UpdateTarget(targets []model.TaCouponCardTarget, cardID string) error {
17
+	if targets == nil || len(targets) == 0 {
18
+		return nil
19
+	}
20
+
21
+	for i := range targets {
22
+		if targets[i].TargetId == "" {
23
+			return errors.New("关联内容不能为空")
24
+		}
25
+
26
+		// TODO
27
+		// 校验关联内容是否有效
28
+
29
+		targets[i].CardId = cardID
30
+	}
31
+
32
+	// var delTargets []model.TaCouponTarget
33
+	sql := `delete from ta_coupon_card_target where card_id='` + cardID + `'`
34
+	if _, err := m.db.Exec(sql); err != nil {
35
+		return err
36
+	}
37
+	if _, err := m.db.Insert(targets); err != nil {
38
+		return err
39
+	}
40
+
41
+	return nil
42
+}

+ 7
- 0
models/cases/cases.go 查看文件

@@ -154,3 +154,10 @@ func (m *CaseDAO) GetCaseUserByType(csIDs []string, typeID string) ([]UserCase,
154 154
 
155 155
 	return users, nil
156 156
 }
157
+
158
+// GetCaseByIDs 获取案场信息
159
+func (m *CaseDAO) GetCaseByIDs(caseids string) ([]model.SysCase, error) {
160
+	var cases []model.SysCase
161
+	err := m.db.Where("status>" + strconv.Itoa(models.STATUS_DEL)).And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')").Find(&cases)
162
+	return cases, err
163
+}

+ 21
- 0
models/constant.go 查看文件

@@ -117,6 +117,13 @@ const (
117 117
 	GIVE_GIFT_GYM            = "gym"
118 118
 )
119 119
 
120
+// 卡券发放类型
121
+const (
122
+	GIVE_TYPE_SYSTEM  = "system"
123
+	GIVE_TYPE_CASE    = "case"
124
+	GIVE_TYPE_CHANNEL = "channel"
125
+)
126
+
120 127
 // 游泳健身卡种类
121 128
 const (
122 129
 	GYM_CARD_ONCE    = "once"
@@ -124,3 +131,17 @@ const (
124 131
 	GYM_CARD_QUARTER = "quarter"
125 132
 	GYM_CARD_YEAR    = "year"
126 133
 )
134
+
135
+// 系统资源
136
+// 可用于卡券关联内容选择
137
+const (
138
+	SYS_RESOURCE_COURSE = "course"
139
+	SYS_RESOURCE_GOODS  = "goods"
140
+)
141
+
142
+// 卡券状态
143
+const (
144
+	CARD_COUPON_RECEIVED = "received"
145
+	CARD_COUPON_USED     = "used"
146
+	CARD_COUPON_EXPIRE   = "expire"
147
+)

+ 17
- 7
models/coupon/coupon.go 查看文件

@@ -6,6 +6,7 @@ import (
6 6
 	"spaceofcheng/services/models"
7 7
 	"spaceofcheng/services/models/model"
8 8
 	"spaceofcheng/services/utils"
9
+	"strconv"
9 10
 	"strings"
10 11
 	"time"
11 12
 
@@ -45,12 +46,11 @@ func (m *CouponDAO) GetCouponInfoByID(id string) (*CouponInfo, error) {
45 46
 
46 47
 	query := `
47 48
 		SELECT
48
-			t.*, s.coupon_type_name
49
+			*
49 50
 		FROM
50
-			ta_coupon t
51
-		LEFT JOIN td_coupon_type s ON t.coupon_type_id = s.coupon_type_id
51
+			ta_coupon
52 52
 		WHERE
53
-			t.coupon_id = ?
53
+			coupon_id = ?
54 54
 	`
55 55
 
56 56
 	if _, err := m.db.SQL(query, id).Get(cp); err != nil {
@@ -96,9 +96,10 @@ func (m *CouponDAO) GetCouponList(filters []string, limit []int) ([]model.TaCoup
96 96
 	filterString := ""
97 97
 	if len(filters) > 0 {
98 98
 		filterString = strings.Join(filters, " and ")
99
+		filterString += " and "
99 100
 	}
100 101
 
101
-	sql := `select * from ta_coupon where %s status = 1 order by create_date desc`
102
+	sql := `select * from ta_coupon where %s status > ` + strconv.Itoa(models.STATUS_DEL) + ` order by create_date desc`
102 103
 
103 104
 	total, err := utils.NewPageNaviEngine(m.ctx).GetPageList(&cps, fmt.Sprintf(sql, filterString), limit)
104 105
 	if err != nil {
@@ -120,6 +121,9 @@ func (m *CouponDAO) SaveCoupon(cp *model.TaCoupon) error {
120 121
 		cp.CreateUser = user.UserId
121 122
 	}
122 123
 
124
+	org := m.ctx.Get("org").(model.SysOrg)
125
+	cp.OrgId = org.OrgId
126
+
123 127
 	cp.Status = models.STATUS_NORMAL
124 128
 	cp.CreateDate = time.Now().Local()
125 129
 
@@ -215,12 +219,11 @@ func (m *CouponDAO) CheckCustCoupon(custID, couponID string, startDate, endDate
215 219
 			)
216 220
 		)
217 221
 	`
218
-
219 222
 	if err := m.db.SQL(
220 223
 		query,
221 224
 		couponID,
222
-		models.STATUS_NORMAL,
223 225
 		custID,
226
+		models.STATUS_NORMAL,
224 227
 		startDate,
225 228
 		endDate,
226 229
 		startDate,
@@ -248,3 +251,10 @@ func (m *CouponDAO) SaveCouponRecoreds(recs []model.TaCouponGiveRecord) error {
248 251
 
249 252
 	return nil
250 253
 }
254
+
255
+// GetCouponBySendType 根据类型获取优惠券
256
+func (m *CouponDAO) GetCouponBySendType(caseids, sendtype string) ([]model.TaCoupon, error) {
257
+	var coupons []model.TaCoupon
258
+	err := m.db.Where("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").And("send_type=?", sendtype).And("status=?", models.STATUS_NORMAL).Find(&coupons)
259
+	return coupons, err
260
+}

+ 3
- 2
models/coupon/image.go 查看文件

@@ -20,8 +20,9 @@ func (m *CouponDAO) UpdateImages(imgs []model.TaCouponImage, couponID string) er
20 20
 		}
21 21
 	}
22 22
 
23
-	var delImgs []model.TaCouponImage
24
-	if _, err := m.db.Where("coupon_id=?", couponID).Delete(&delImgs); err != nil {
23
+	// var delImgs []model.TaCouponImage
24
+	sql := `delete from ta_coupon_image where coupon_id=?`
25
+	if _, err := m.db.Exec(sql, couponID); err != nil {
25 26
 		return err
26 27
 	}
27 28
 

+ 11
- 3
models/coupon/target.go 查看文件

@@ -1,6 +1,7 @@
1 1
 package coupon
2 2
 
3 3
 import (
4
+	"errors"
4 5
 	"spaceofcheng/services/models/model"
5 6
 )
6 7
 
@@ -11,14 +12,21 @@ func (m *CouponDAO) UpdateTarget(targets []model.TaCouponTarget, couponID string
11 12
 	}
12 13
 
13 14
 	for i := range targets {
15
+		if targets[i].TargetId == "" {
16
+			return errors.New("关联内容不能为空")
17
+		}
18
+
19
+		// TODO
20
+		// 校验关联内容是否有效
21
+
14 22
 		targets[i].CouponId = couponID
15 23
 	}
16 24
 
17
-	var delTargets []model.TaCouponTarget
18
-	if _, err := m.db.Where("coupon_id=?", couponID).Delete(&delTargets); err != nil {
25
+	// var delTargets []model.TaCouponTarget
26
+	sql := `delete from ta_coupon_target where coupon_id='` + couponID + `'`
27
+	if _, err := m.db.Exec(sql); err != nil {
19 28
 		return err
20 29
 	}
21
-
22 30
 	if _, err := m.db.Insert(targets); err != nil {
23 31
 		return err
24 32
 	}

+ 1
- 2
models/coupon/types.go 查看文件

@@ -12,8 +12,7 @@ const (
12 12
 
13 13
 // CouponInfo 优惠券信息
14 14
 type CouponInfo struct {
15
-	model.TaCoupon
16
-	CouponTypeName string
15
+	model.TaCoupon `xorm:"extends"`
17 16
 	Share          model.TaCouponShare
18 17
 	Targets        []model.TaCouponTarget
19 18
 	Images         []model.TaCouponImage

+ 27
- 4
models/customer/customer.go 查看文件

@@ -27,7 +27,7 @@ func NewCustomerDAO(ctx *utils.Context) *CustomerDAO {
27 27
 }
28 28
 
29 29
 // CustWithWXList 客户列表
30
-func (m *CustomerDAO) CustWithWXList(phone string, page ...int) ([]CustWithWX, int64, error) {
30
+func (m *CustomerDAO) CustWithWXList(phone, username, recommendname, begindate, enddate string, page ...int) ([]CustWithWX, int64, error) {
31 31
 	org := m.ctx.Get("org").(model.SysOrg)
32 32
 
33 33
 	if phone == "" {
@@ -36,6 +36,18 @@ func (m *CustomerDAO) CustWithWXList(phone string, page ...int) ([]CustWithWX, i
36 36
 		phone = "%" + phone + "%"
37 37
 	}
38 38
 
39
+	if username == "" {
40
+		username = "%"
41
+	} else {
42
+		username = "%" + username + "%"
43
+	}
44
+
45
+	if recommendname == "" {
46
+		recommendname = "%"
47
+	} else {
48
+		recommendname = "%" + recommendname + "%"
49
+	}
50
+
39 51
 	pageNum := 10
40 52
 	if m.ctx.Get("pageNum") != nil {
41 53
 		pageNum = m.ctx.Get("pageNum").(int)
@@ -67,15 +79,26 @@ func (m *CustomerDAO) CustWithWXList(phone string, page ...int) ([]CustWithWX, i
67 79
 			AND s.account_type = '` + models.ACCMAP_WECHAT + `'
68 80
 		WHERE
69 81
 			t.phone like ?
82
+			AND t.customer_name like ?
83
+			AND t.recommend_name like ?
70 84
 		AND t.status > ?
71
-		AND t.org_id = '` + org.OrgId + `'
72
-		ORDER BY
85
+		AND t.org_id = '` + org.OrgId + `'`
86
+
87
+	if begindate != "" {
88
+		query = query + ` AND t.create_date>'` + begindate + `'`
89
+	}
90
+
91
+	if enddate != "" {
92
+		query = query + ` AND t.create_date<'` + begindate + `'`
93
+	}
94
+
95
+	query = query + ` ORDER BY
73 96
 			t.create_date DESC
74 97
 	`
75 98
 
76 99
 	var cust []CustWithWX
77 100
 
78
-	cnt, err := utils.NewPageNaviEngine(m.ctx).GetPageList(&cust, query, []int{pageNum, offset}, phone, models.STATUS_DEL)
101
+	cnt, err := utils.NewPageNaviEngine(m.ctx).GetPageList(&cust, query, []int{pageNum, offset}, phone, username, recommendname, models.STATUS_DEL)
79 102
 	if err != nil {
80 103
 		return nil, 0, err
81 104
 	}

+ 17
- 0
models/goods/goods.go 查看文件

@@ -250,6 +250,8 @@ func (m *GoodsDAO) UpdateGoods(goods *model.TaGoods, images []string, specs []Sp
250 250
 		"goods_name",
251 251
 		"type_id",
252 252
 		"status",
253
+		"price",
254
+		"case_id",
253 255
 	}
254 256
 
255 257
 	// 商品图片
@@ -320,3 +322,18 @@ func (m *GoodsDAO) GetGoodsImgByGoodsID(goodsid string) ([]model.TaGoodsImg, err
320 322
 	err := m.db.Where("goods_id=?", goodsid).Find(&goodsimg)
321 323
 	return goodsimg, err
322 324
 }
325
+
326
+// GetGoodsBySpec 根据商品规格获取商品信息
327
+func (m *GoodsDAO) GetGoodsBySpec(specid string) ([]model.TaGoods, error) {
328
+	var goods []model.TaGoods
329
+	sql := `select a.* from ta_goods a inner join ta_goods_spec b on a.goods_id=b.goods_id where a.status>` + strconv.Itoa(models.STATUS_DEL) + ` and b.spec_id='` + specid + `'`
330
+	err := m.db.Sql(sql).Find(&goods)
331
+	return goods, err
332
+}
333
+
334
+// GetGoodsByType 根据商品类型获取商品信息
335
+func (m *GoodsDAO) GetGoodsByType(typeid string) ([]model.TaGoods, error) {
336
+	var goods []model.TaGoods
337
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("type_id=?", typeid).Find(&goods)
338
+	return goods, err
339
+}

+ 4
- 1
models/goods/spec.go 查看文件

@@ -6,6 +6,7 @@ import (
6 6
 	"spaceofcheng/services/utils"
7 7
 	"strconv"
8 8
 	"strings"
9
+	"time"
9 10
 )
10 11
 
11 12
 // GetGoodsSpecCount 获取商品规格总数
@@ -18,7 +19,7 @@ func (m *GoodsDAO) GetGoodsSpecCount(caseids string) (int, error) {
18 19
 // GetGoodsSpec 根据案场获取商品规格
19 20
 func (m *GoodsDAO) GetGoodsSpec(caseids string, page int, pageSize int) ([]model.TdSpec, error) {
20 21
 	var goodsSpec []model.TdSpec
21
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Limit(pageSize, (page-1)*pageSize).Find(&goodsSpec)
22
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&goodsSpec)
22 23
 	return goodsSpec, err
23 24
 }
24 25
 
@@ -39,6 +40,7 @@ func (m *GoodsDAO) GetGoodsSpecByID(specid string) (*model.TdSpec, error) {
39 40
 func (m *GoodsDAO) AddGoodsSpec(goodsSpec *model.TdSpec) (*model.TdSpec, error) {
40 41
 	goodsSpec.SpecId = utils.GetGUID()
41 42
 	goodsSpec.Status = models.STATUS_NORMAL
43
+	goodsSpec.CreateDate = time.Now()
42 44
 	_, err := m.db.Insert(goodsSpec)
43 45
 	return goodsSpec, err
44 46
 }
@@ -47,6 +49,7 @@ func (m *GoodsDAO) AddGoodsSpec(goodsSpec *model.TdSpec) (*model.TdSpec, error)
47 49
 func (m *GoodsDAO) UpdateGoodsSpec(goodsSpec model.TdSpec) error {
48 50
 	var cols = []string{
49 51
 		"spec_name",
52
+		"case_id",
50 53
 	}
51 54
 	_, err := m.db.Cols(cols...).Where("spec_id=?", goodsSpec.SpecId).Update(goodsSpec)
52 55
 	return err

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

@@ -25,7 +25,7 @@ func (m *GoodsDAO) GetGoodsTypeByCase(caseid string) ([]model.TdGoodsType, error
25 25
 // GetGoodsType 根据案场获取商品类型
26 26
 func (m *GoodsDAO) GetGoodsType(caseids string, page int, pageSize int) ([]model.TdGoodsType, error) {
27 27
 	var goodstype []model.TdGoodsType
28
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&goodstype)
28
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Desc("create_date").Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&goodstype)
29 29
 	return goodstype, err
30 30
 }
31 31
 

+ 45
- 7
models/gymcard/gymcard.go 查看文件

@@ -31,6 +31,7 @@ type CustomerGym struct {
31 31
 	CardShareInfo       string
32 32
 	CardUseInstruction  string
33 33
 	CardUseRule         string
34
+	Price               string
34 35
 }
35 36
 
36 37
 type Gymcard struct {
@@ -39,6 +40,7 @@ type Gymcard struct {
39 40
 	CardShareInfo      string
40 41
 	CardUseInstruction string
41 42
 	CardUseRule        string
43
+	ChannelId          string
42 44
 }
43 45
 
44 46
 // GetGymcard 根据案场id获取游泳健身卡列表
@@ -54,9 +56,11 @@ FROM
54 56
 	ta_gym_card a
55 57
 	INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
56 58
 	INNER JOIN ta_card_share c ON a.gym_card_id = c.gym_card_id
59
+	INNER JOIN ta_card_coupon_channel d ON a.gym_card_id = d.card_coupon_id
57 60
 	where a.case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')
58
-	and  a.status > ` + strconv.Itoa(models.STATUS_DEL)
59
-	sql += ` order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
61
+	and  a.status > ` + strconv.Itoa(models.STATUS_DEL) + `
62
+	and d.card_coupon_type = '` + models.GIVE_GIFT_GYM + `'`
63
+	sql += ` order by a.create_date desc limit ` + strconv.Itoa(page) + `, ` + strconv.Itoa(pageSize)
60 64
 	err := m.db.Sql(sql).Find(&gymcard)
61 65
 	return gymcard, err
62 66
 }
@@ -116,6 +120,19 @@ func (m *GymcardDAO) AddGymcard(gymcard model.TaGymCard) (model.TaGymCard, error
116 120
 	return gymcard, err
117 121
 }
118 122
 
123
+// AddCardChannel 新增游泳健身卡渠道
124
+func (m *GymcardDAO) AddCardChannel(gymcardId, channelId string) error {
125
+	var cardChannel model.TaCardCouponChannel
126
+	cardChannel.CardCouponChannelId = utils.GetGUID()
127
+	cardChannel.CardCouponId = gymcardId
128
+	cardChannel.CardCouponType = models.GIVE_GIFT_GYM
129
+	cardChannel.ChannelId = channelId
130
+	cardChannel.Status = models.STATUS_NORMAL
131
+	_, err := m.db.Insert(cardChannel)
132
+	return err
133
+
134
+}
135
+
119 136
 // AddGymcardImg 新增游泳健身卡图片
120 137
 func (m *GymcardDAO) AddGymcardImg(gymcardId, imgUrl string) error {
121 138
 	var cardImg model.TaCardImage
@@ -168,6 +185,19 @@ func (m *GymcardDAO) DeleteCardImg(gymcardId string) error {
168 185
 
169 186
 }
170 187
 
188
+// DeleteCardChannel 删除健身卡渠道对应
189
+func (m *GymcardDAO) DeleteCardChannel(gymcardId string) error {
190
+	var cardChannel = model.TaCardCouponChannel{
191
+		CardCouponId: gymcardId,
192
+		Status:       models.STATUS_DEL,
193
+	}
194
+	var cols = []string{
195
+		"status",
196
+	}
197
+	_, err := m.db.Cols(cols...).Where("gym_card_id = ?", cardChannel.CardCouponId).Update(cardChannel)
198
+	return err
199
+}
200
+
171 201
 // DeleteCardImg 删除健身卡分享信息
172 202
 func (m *GymcardDAO) DeleteCardShare(gymcardId string) error {
173 203
 	var cardShare = model.TaCardShare{
@@ -221,7 +251,7 @@ func (m *GymcardDAO) EditGymcardShare(gymcardId, cardShareInfo, cardUseRule, car
221 251
 }
222 252
 
223 253
 // SendGymcardToCustomer 新增用户健身卡
224
-func (m *GymcardDAO) SendGymcardToCustomer(gymcard *model.TaGymCard, customerId string) (*model.TaCustomerGym, error) {
254
+func (m *GymcardDAO) SendGymcardToCustomer(gymcard *model.TaGymCard, customerId, salesId, salesName string) (*model.TaCustomerGym, error) {
225 255
 	var customerGym model.TaCustomerGym
226 256
 	customerGym.CustomerGymId = utils.GetGUID()
227 257
 	customerGym.CaseId = gymcard.CaseId
@@ -234,6 +264,8 @@ func (m *GymcardDAO) SendGymcardToCustomer(gymcard *model.TaGymCard, customerId
234 264
 	customerGym.ReceiveDate = time.Now()
235 265
 	customerGym.StartDate = gymcard.StartDate
236 266
 	customerGym.Status = models.STATUS_NORMAL
267
+	customerGym.SalesId = salesId
268
+	customerGym.SalesName = salesName
237 269
 	_, err := m.db.Insert(customerGym)
238 270
 	return &customerGym, err
239 271
 }
@@ -269,14 +301,16 @@ func (m *GymcardDAO) GetCustomerGymByCustomerId(customerId string, page, pageSiz
269 301
 	b.card_image_url,
270 302
 	c.card_share_info,
271 303
 	c.card_use_instruction,
272
-	c.card_use_rule
304
+	c.card_use_rule,
305
+	d.price
273 306
 FROM
274 307
 	ta_customer_gym a
275 308
 INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
276 309
 INNER JOIN ta_card_share C oN a.gym_card_id = c.gym_card_id
310
+INNER JOIN ta_gym_card d ON a.gym_card_id = d.gym_card_id
277 311
 WHERE
278 312
 	a.customer_id = '` + customerId + `' and a.status >` + strconv.Itoa(models.STATUS_DEL)
279
-	sql += ` order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
313
+	sql += ` order by a.receive_date desc limit ` + strconv.Itoa(page) + `, ` + strconv.Itoa(pageSize)
280 314
 	err := m.db.Sql(sql).Find(&customerGym)
281 315
 	return customerGym, err
282 316
 }
@@ -289,12 +323,14 @@ func (m *GymcardDAO) GetCustomerGymByPhone(phone string) ([]CustomerGym, error)
289 323
 	b.card_image_url,
290 324
 	c.card_share_info,
291 325
 	c.card_use_instruction,
292
-	c.card_use_rule
326
+	c.card_use_rule,
327
+	d.price
293 328
 FROM
294 329
 	ta_customer_gym a
295 330
 INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
296 331
 INNER JOIN ta_card_share C oN a.gym_card_id = c.gym_card_id
297 332
 INNER JOIN ta_customer d ON a.customer_id = d.customer_id
333
+INNER JOIN ta_gym_card e ON a.gym_card_id = e.gym_card_id
298 334
 Where d.phone = '` + phone + `' and a.status >` + strconv.Itoa(models.STATUS_DEL)
299 335
 	err := m.db.Sql(sql).Find(&customerGym)
300 336
 	return customerGym, err
@@ -328,11 +364,13 @@ func (m *GymcardDAO) GetCustomerGymById(customerCardId string) (CustomerGym, err
328 364
 	b.card_image_url,
329 365
 	c.card_share_info,
330 366
 	c.card_use_instruction,
331
-	c.card_use_rule
367
+	c.card_use_rule,
368
+	d.price
332 369
 FROM
333 370
 	ta_customer_gym a
334 371
 INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
335 372
 INNER JOIN ta_card_share C oN a.gym_card_id = c.gym_card_id
373
+INNER JOIN ta_gym_card d ON a.gym_card_id = d.gym_card_id
336 374
 WHERE
337 375
 	a.customer_gym_id = '` + customerCardId + `' and a.status >` + strconv.Itoa(models.STATUS_DEL)
338 376
 	err := m.db.Sql(sql).Find(&customerGym)

+ 6
- 3
models/model/sys_case_record.go 查看文件

@@ -1,13 +1,16 @@
1 1
 package model
2 2
 
3
-import "time"
3
+import (
4
+	"time"
5
+)
4 6
 
5 7
 type SysCaseRecord struct {
6 8
 	RecordId   string    `xorm:"not null pk VARCHAR(64)"`
7 9
 	CaseId     string    `xorm:"not null VARCHAR(64)"`
8
-	Month      string    `xorm:"VARCHAR(20)"`
10
+	Month      string    `xorm:"VARCHAR(100)"`
9 11
 	Num        int       `xorm:"INT(11)"`
10
-	IsOver     int       `xorm:"SMALLINT(6)"`
11 12
 	Status     int       `xorm:"SMALLINT(6)"`
12 13
 	CreateDate time.Time `xorm:"DATETIME"`
14
+	CreateUser string    `xorm:"VARCHAR(64)"`
15
+	IsOver     int       `xorm:"SMALLINT(6)"`
13 16
 }

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

@@ -1,7 +1,7 @@
1 1
 package model
2 2
 
3 3
 type SysWechatConf struct {
4
-	ConfId string `xorm:"VARCHAR(64)"`
4
+	ConfId string `xorm:"not null pk VARCHAR(64)"`
5 5
 	OrgId  string `xorm:"VARCHAR(64)"`
6 6
 	Type   string `xorm:"comment('wechat 微信公众号 mini 小程序') VARCHAR(20)"`
7 7
 	Appid  string `xorm:"VARCHAR(50)"`

+ 15
- 0
models/model/ta_body_check.go 查看文件

@@ -0,0 +1,15 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaBodyCheck struct {
8
+	Id          int       `xorm:"not null pk autoincr INT(11)"`
9
+	UserId      int       `xorm:"not null INT(11)"`
10
+	EquipmentId string    `xorm:"not null VARCHAR(100)"`
11
+	CreateDate  time.Time `xorm:"not null DATETIME"`
12
+	Status      int       `xorm:"not null comment('1为正常') INT(11)"`
13
+	CaseId      int       `xorm:"INT(11)"`
14
+	ReportUrl   string    `xorm:"TEXT"`
15
+}

+ 9
- 0
models/model/ta_card_coupon_channel.go 查看文件

@@ -0,0 +1,9 @@
1
+package model
2
+
3
+type TaCardCouponChannel struct {
4
+	CardCouponChannelId string `xorm:"not null pk VARCHAR(64)"`
5
+	CardCouponType      string `xorm:"VARCHAR(32)"`
6
+	ChannelId           string `xorm:"VARCHAR(64)"`
7
+	CardCouponId        string `xorm:"VARCHAR(64)"`
8
+	Status              int    `xorm:"SMALLINT(6)"`
9
+}

+ 13
- 0
models/model/ta_case_equipment.go 查看文件

@@ -0,0 +1,13 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaCaseEquipment struct {
8
+	Id          int       `xorm:"not null pk autoincr INT(11)"`
9
+	CaseId      int       `xorm:"not null INT(11)"`
10
+	EquipmentId string    `xorm:"VARCHAR(200)"`
11
+	Status      int       `xorm:"INT(11)"`
12
+	CreateDate  time.Time `xorm:"DATETIME"`
13
+}

+ 13
- 16
models/model/ta_checkin_record.go 查看文件

@@ -5,19 +5,16 @@ import (
5 5
 )
6 6
 
7 7
 type TaCheckinRecord struct {
8
-
9
-	 CheckinId     string    `xorm:"not null pk VARCHAR(64)"` 
10
-   CaseId        string    `xorm:"VARCHAR(64)"`  
11
-   CustomerId    string    `xorm:"VARCHAR(64)"`  
12
-   Phone         string    `xorm:"VARCHAR(32)"`   
13
-   OpenId        string    `xorm:"VARCHAR(128)"`  
14
-   Name          string    `xorm:"VARCHAR(32)"`   
15
-   CustomerName  string    `xorm:"VARCHAR(32)"`  
16
-   CaseName      string    `xorm:"VARCHAR(32)"` 
17
-   ActivityId    string    `xorm:"VARCHAR(64)"`  
18
-   ActivityName  string    `xorm:"VARCHAR(64)"`  
19
-   CreateDate    time.Time `xorm:"DATETIME"`     
20
-   Status        int       `xorm:"SMALLINT(6)"`
21
-   
22
-   
23
-}
8
+	CheckinId    string    `xorm:"not null pk VARCHAR(64)"`
9
+	CaseId       string    `xorm:"VARCHAR(64)"`
10
+	CustomerId   string    `xorm:"VARCHAR(64)"`
11
+	Phone        string    `xorm:"VARCHAR(32)"`
12
+	OpenId       string    `xorm:"VARCHAR(128)"`
13
+	Name         string    `xorm:"VARCHAR(32)"`
14
+	CustomerName string    `xorm:"VARCHAR(32)"`
15
+	CaseName     string    `xorm:"VARCHAR(32)"`
16
+	ActivityId   string    `xorm:"VARCHAR(64)"`
17
+	ActivityName string    `xorm:"VARCHAR(64)"`
18
+	CreateDate   time.Time `xorm:"DATETIME"`
19
+	Status       int       `xorm:"SMALLINT(6)"`
20
+}

+ 20
- 20
models/model/ta_coupon.go 查看文件

@@ -5,24 +5,24 @@ import (
5 5
 )
6 6
 
7 7
 type TaCoupon struct {
8
-	CouponId     string    `xorm:"not null pk VARCHAR(64)"`
9
-	CouponName   string    `xorm:"VARCHAR(255)"`
10
-	CouponTypeId string    `xorm:"VARCHAR(64)"`
11
-	SendType     int       `xorm:"comment('0案场 1渠道') SMALLINT(6)"`
12
-	VideoUrl     string    `xorm:"TEXT"`
13
-	CoverUrl     string    `xorm:"TEXT"`
14
-	Price        string    `xorm:"DECIMAL(64)"`
15
-	IsAll        int       `xorm:"TINYINT(1)"`
16
-	StartDate    time.Time `xorm:"DATETIME"`
17
-	EndDate      time.Time `xorm:"DATETIME"`
18
-	ValidDays    int       `xorm:"INT(11)"`
19
-	TotalCount   int       `xorm:"INT(11)"`
20
-	SentCount    int       `xorm:"INT(11)"`
21
-	UsedCount    int       `xorm:"INT(11)"`
22
-	Status       int       `xorm:"comment('0未发布 1发布 2过期') SMALLINT(6)"`
23
-	CaseId       string    `xorm:"VARCHAR(64)"`
24
-	OrgId        string    `xorm:"VARCHAR(64)"`
25
-	CreateDate   time.Time `xorm:"DATETIME"`
26
-	CreateUser   string    `xorm:"VARCHAR(64)"`
27
-	IsOver       int       `xorm:"TINYINT(1)"`
8
+	CouponId   string    `xorm:"not null pk VARCHAR(64)"`
9
+	CouponName string    `xorm:"VARCHAR(255)"`
10
+	CouponType string    `xorm:"VARCHAR(20)"`
11
+	SendType   string    `xorm:"comment('case 案场 channel渠道') VARCHAR(50)"`
12
+	VideoUrl   string    `xorm:"TEXT"`
13
+	CoverUrl   string    `xorm:"TEXT"`
14
+	Price      string    `xorm:"DECIMAL(64)"`
15
+	IsAll      int       `xorm:"TINYINT(1)"`
16
+	StartDate  time.Time `xorm:"DATETIME"`
17
+	EndDate    time.Time `xorm:"DATETIME"`
18
+	ValidDays  int       `xorm:"INT(11)"`
19
+	TotalCount int       `xorm:"INT(11)"`
20
+	SentCount  int       `xorm:"INT(11)"`
21
+	UsedCount  int       `xorm:"INT(11)"`
22
+	Status     int       `xorm:"comment('0未发布 1发布 2过期') SMALLINT(6)"`
23
+	CaseId     string    `xorm:"VARCHAR(64)"`
24
+	OrgId      string    `xorm:"VARCHAR(64)"`
25
+	CreateDate time.Time `xorm:"DATETIME"`
26
+	CreateUser string    `xorm:"VARCHAR(64)"`
27
+	IsOver     int       `xorm:"TINYINT(1)"`
28 28
 }

+ 17
- 20
models/model/ta_coupon_card.go 查看文件

@@ -5,24 +5,21 @@ import (
5 5
 )
6 6
 
7 7
 type TaCouponCard struct {
8
-	CardId           string    `xorm:"not null pk VARCHAR(64)"`
9
-	CardTypeId       string    `xorm:"VARCHAR(64)"`
10
-	SendType         int       `xorm:"comment('0案场 1渠道') SMALLINT(6)"`
11
-	VideoUrl         string    `xorm:"TEXT"`
12
-	CoverUrl         string    `xorm:"TEXT"`
13
-	Price            float32   `xorm:"FLOAT(64)"`
14
-	StartDate        time.Time `xorm:"DATETIME"`
15
-	EndDate          time.Time `xorm:"DATETIME"`
16
-	ShareDescription string    `xorm:"VARCHAR(255)"`
17
-	RuleDescription  string    `xorm:"VARCHAR(400)"`
18
-	UseDescription   string    `xorm:"TEXT"`
19
-	TotalCount       int       `xorm:"INT(11)"`
20
-	SentCount        int       `xorm:"INT(11)"`
21
-	UsedCount        int       `xorm:"INT(11)"`
22
-	Status           int       `xorm:"comment('0未发布 1发布 2过期') SMALLINT(6)"`
23
-	CaseId           string    `xorm:"VARCHAR(64)"`
24
-	OrgId            string    `xorm:"VARCHAR(64)"`
25
-	CreateDate       time.Time `xorm:"DATETIME"`
26
-	CreateUser       string    `xorm:"VARCHAR(64)"`
27
-	IsOver           int       `xorm:"TINYINT(1)"`
8
+	CardId     string    `xorm:"not null pk VARCHAR(64)"`
9
+	CardName   string    `xorm:"VARCHAR(50)"`
10
+	SendType   string    `xorm:"comment('case 案场 channel渠道') VARCHAR(50)"`
11
+	VideoUrl   string    `xorm:"TEXT"`
12
+	CoverUrl   string    `xorm:"TEXT"`
13
+	Price      string    `xorm:"DECIMAL(64)"`
14
+	StartDate  time.Time `xorm:"DATETIME"`
15
+	EndDate    time.Time `xorm:"DATETIME"`
16
+	TotalCount int       `xorm:"INT(11)"`
17
+	SentCount  int       `xorm:"INT(11)"`
18
+	UsedCount  int       `xorm:"INT(11)"`
19
+	Status     int       `xorm:"comment('0未发布 1发布 2过期') SMALLINT(6)"`
20
+	CaseId     string    `xorm:"VARCHAR(64)"`
21
+	OrgId      string    `xorm:"VARCHAR(64)"`
22
+	CreateDate time.Time `xorm:"DATETIME"`
23
+	CreateUser string    `xorm:"VARCHAR(64)"`
24
+	IsOver     int       `xorm:"TINYINT(1)"`
28 25
 }

+ 0
- 2
models/model/ta_coupon_card_target.go 查看文件

@@ -3,7 +3,5 @@ package model
3 3
 type TaCouponCardTarget struct {
4 4
 	TargetId   string `xorm:"not null pk VARCHAR(64)"`
5 5
 	CardId     string `xorm:"VARCHAR(64)"`
6
-	DetailId   string `xorm:"VARCHAR(64)"`
7 6
 	TargetName string `xorm:"VARCHAR(255)"`
8
-	CardState  string `xorm:"VARCHAR(64)"`
9 7
 }

+ 3
- 1
models/model/ta_coupon_give_record.go 查看文件

@@ -1,6 +1,8 @@
1 1
 package model
2 2
 
3
-import "time"
3
+import (
4
+	"time"
5
+)
4 6
 
5 7
 type TaCouponGiveRecord struct {
6 8
 	RecId      string    `xorm:"not null pk VARCHAR(64)"`

+ 1
- 0
models/model/ta_coupon_target.go 查看文件

@@ -2,6 +2,7 @@ package model
2 2
 
3 3
 type TaCouponTarget struct {
4 4
 	TargetId   string `xorm:"not null pk VARCHAR(64)"`
5
+	TargetType string `xorm:"not null pk VARCHAR(64)"`
5 6
 	CouponId   string `xorm:"VARCHAR(64)"`
6 7
 	TargetName string `xorm:"VARCHAR(255)"`
7 8
 }

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

@@ -7,10 +7,10 @@ import (
7 7
 type TaCourseOrdersCoupon struct {
8 8
 	OrdersCouponId string    `xorm:"not null pk VARCHAR(64)"`
9 9
 	OrdersId       string    `xorm:"VARCHAR(64)"`
10
-	CouponType     string    `xorm:"VARCHAR(20)"`
11 10
 	CouponId       string    `xorm:"VARCHAR(64)"`
12 11
 	CouponName     string    `xorm:"VARCHAR(50)"`
13 12
 	UsedAmount     string    `xorm:"DECIMAL(8,2)"`
14 13
 	Status         int       `xorm:"SMALLINT(6)"`
15 14
 	CreateDate     time.Time `xorm:"DATETIME"`
15
+	CouponType     string    `xorm:"VARCHAR(50)"`
16 16
 }

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

@@ -7,7 +7,7 @@ import (
7 7
 type TaCustomerAccount struct {
8 8
 	AccountId    string    `xorm:"not null pk VARCHAR(64)"`
9 9
 	CustomerId   string    `xorm:"VARCHAR(64)"`
10
-	CustomerName string    `xorm:"VARCHAR(200)"`
10
+	CustomerName string    `xorm:"VARCHAR(50)"`
11 11
 	Amount       string    `xorm:"DECIMAL(8,2)"`
12 12
 	Points       string    `xorm:"DECIMAL(8,2)"`
13 13
 	Status       int       `xorm:"SMALLINT(6)"`

+ 2
- 0
models/model/ta_customer_card.go 查看文件

@@ -9,6 +9,8 @@ type TaCustomerCard struct {
9 9
 	CardId           string    `xorm:"VARCHAR(64)"`
10 10
 	CustomerCardName string    `xorm:"VARCHAR(64)"`
11 11
 	CustomerId       string    `xorm:"VARCHAR(64)"`
12
+	SalesId          string    `xorm:"VARCHAR(64)"`
13
+	SalesName        string    `xorm:"VARCHAR(32)"`
12 14
 	StartDate        time.Time `xorm:"DATETIME"`
13 15
 	EndDate          time.Time `xorm:"DATETIME"`
14 16
 	Status           int       `xorm:"SMALLINT(6)"`

+ 2
- 0
models/model/ta_customer_coupon.go 查看文件

@@ -9,6 +9,8 @@ type TaCustomerCoupon struct {
9 9
 	CouponId           string    `xorm:"VARCHAR(64)"`
10 10
 	CustomerCouponName string    `xorm:"VARCHAR(64)"`
11 11
 	CustomerId         string    `xorm:"VARCHAR(64)"`
12
+	SalesId            string    `xorm:"VARCHAR(64)"`
13
+	SalesName          string    `xorm:"VARCHAR(32)"`
12 14
 	StartDate          time.Time `xorm:"DATETIME"`
13 15
 	EndDate            time.Time `xorm:"DATETIME"`
14 16
 	Status             int       `xorm:"SMALLINT(6)"`

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

@@ -11,7 +11,7 @@ type TaCustomerCourse struct {
11 11
 	OrgId            string    `xorm:"VARCHAR(64)"`
12 12
 	CaseId           string    `xorm:"VARCHAR(64)"`
13 13
 	CourseName       string    `xorm:"VARCHAR(50)"`
14
-	LocationId       string    `xorm:"VARCHAR(64)"`
14
+	LocationId       string    `xorm:"CHAR(10)"`
15 15
 	Price            string    `xorm:"DECIMAL(8,2)"`
16 16
 	CourseNum        int       `xorm:"INT(11)"`
17 17
 	JoinNum          int       `xorm:"INT(11)"`

+ 3
- 0
models/model/ta_customer_gym.go 查看文件

@@ -9,8 +9,11 @@ type TaCustomerGym struct {
9 9
 	GymCardId       string    `xorm:"VARCHAR(64)"`
10 10
 	CustomerGymName string    `xorm:"VARCHAR(64)"`
11 11
 	CustomerId      string    `xorm:"VARCHAR(64)"`
12
+	SalesId         string    `xorm:"VARCHAR(64)"`
13
+	SalesName       string    `xorm:"VARCHAR(32)"`
12 14
 	StartDate       time.Time `xorm:"DATETIME"`
13 15
 	EndDate         time.Time `xorm:"DATETIME"`
16
+	CardStatus      string    `xorm:"VARCHAR(32)"`
14 17
 	Status          int       `xorm:"SMALLINT(6)"`
15 18
 	ReceiveDate     time.Time `xorm:"DATETIME"`
16 19
 	GymType         string    `xorm:"VARCHAR(64)"`

+ 9
- 0
models/model/ta_experience_card_image.go 查看文件

@@ -0,0 +1,9 @@
1
+package model
2
+
3
+type TaExperienceCardImage struct {
4
+	CardImageId  string `xorm:"not null pk VARCHAR(64)"`
5
+	CardId       string `xorm:"VARCHAR(64)"`
6
+	CardImageUrl string `xorm:"TEXT"`
7
+	Status       int    `xorm:"SMALLINT(6)"`
8
+	Sort         int    `xorm:"INT(11)"`
9
+}

+ 10
- 0
models/model/ta_experience_card_share.go 查看文件

@@ -0,0 +1,10 @@
1
+package model
2
+
3
+type TaExperienceCardShare struct {
4
+	CardShareId        string `xorm:"not null pk VARCHAR(64)"`
5
+	CardId             string `xorm:"VARCHAR(64)"`
6
+	CardShareInfo      string `xorm:"TEXT"`
7
+	CardUseRule        string `xorm:"TEXT"`
8
+	CardUseInstruction string `xorm:"TEXT"`
9
+	Status             int    `xorm:"SMALLINT(6)"`
10
+}

+ 0
- 14
models/model/ta_experience_card_verification.go 查看文件

@@ -1,14 +0,0 @@
1
-package model
2
-
3
-import (
4
-	"time"
5
-)
6
-
7
-type TaExperienceCardVerification struct {
8
-	ExperienceCardVerifyId   string    `xorm:"not null pk VARCHAR(64)"`
9
-	CustomerCardId           string    `xorm:"VARCHAR(64)"`
10
-	TargetId                 string    `xorm:"VARCHAR(64)"`
11
-	ExperienceCardVerifyTime time.Time `xorm:"DATETIME"`
12
-	ExperienceCardVerifyCase string    `xorm:"VARCHAR(64)"`
13
-	Status                   int       `xorm:"SMALLINT(6)"`
14
-}

+ 1
- 0
models/model/ta_forbid_user.go 查看文件

@@ -13,4 +13,5 @@ type TaForbidUser struct {
13 13
 	EndDate    time.Time `xorm:"DATETIME"`
14 14
 	Status     int       `xorm:"SMALLINT(6)"`
15 15
 	CreateDate time.Time `xorm:"DATETIME"`
16
+	CaseId     string    `xorm:"VARCHAR(64)"`
16 17
 }

+ 2
- 2
models/model/ta_goods_orders.go 查看文件

@@ -16,15 +16,15 @@ type TaGoodsOrders struct {
16 16
 	Amount     string    `xorm:"DECIMAL(8,2)"`
17 17
 	CreateDate time.Time `xorm:"DATETIME"`
18 18
 	Status     int       `xorm:"SMALLINT(6)"`
19
+	MakeStatus string    `xorm:"VARCHAR(20)"`
19 20
 	PayType    string    `xorm:"comment('vip VIP卡城币抵用
20 21
             coupon 优惠券抵用') VARCHAR(20)"`
21 22
 	UserType     string `xorm:"VARCHAR(20)"`
22 23
 	UserId       string `xorm:"VARCHAR(64)"`
23
-	UserName     string `xorm:"VARCHAR(200)"`
24
+	UserName     string `xorm:"VARCHAR(50)"`
24 25
 	OrdersNum    int    `xorm:"INT(11)"`
25 26
 	Remark       string `xorm:"TEXT"`
26 27
 	IsPay        int    `xorm:"TINYINT(1)"`
27 28
 	ActualAmount string `xorm:"DECIMAL(8,2)"`
28 29
 	CouponAmount string `xorm:"DECIMAL(8,2)"`
29
-	MakeStatus   string `xorm:"VARCHAR(20)"`
30 30
 }

+ 20
- 0
models/model/ta_luckdraw.go 查看文件

@@ -0,0 +1,20 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaLuckdraw struct {
8
+	Id           int       `xorm:"not null pk autoincr INT(11)"`
9
+	Name         string    `xorm:"VARCHAR(50)"`
10
+	ThemeId      int       `xorm:"INT(11)"`
11
+	LuckdrawRule string    `xorm:"TEXT"`
12
+	BeginDate    time.Time `xorm:"DATETIME"`
13
+	EndDate      time.Time `xorm:"DATETIME"`
14
+	OrgId        string    `xorm:"VARCHAR(64)"`
15
+	CaseId       int       `xorm:"INT(11)"`
16
+	CreateDate   time.Time `xorm:"DATETIME"`
17
+	CreateUser   string    `xorm:"VARCHAR(64)"`
18
+	Remark       string    `xorm:"TEXT"`
19
+	Status       int       `xorm:"SMALLINT(6)"`
20
+}

+ 21
- 0
models/model/ta_luckdraw_prize.go 查看文件

@@ -0,0 +1,21 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaLuckdrawPrize struct {
8
+	Id                int       `xorm:"not null pk autoincr INT(11)"`
9
+	LuckdrawId        int       `xorm:"INT(11)"`
10
+	PrizeName         string    `xorm:"VARCHAR(50)"`
11
+	PrizeImg          string    `xorm:"TEXT"`
12
+	Stock             int       `xorm:"INT(11)"`
13
+	Remainder         int       `xorm:"INT(11)"`
14
+	Probability       int       `xorm:"INT(11)"`
15
+	PrizeDesc         string    `xorm:"TEXT"`
16
+	PrizeLink         string    `xorm:"TEXT"`
17
+	Status            int       `xorm:"SMALLINT(6)"`
18
+	IsReality         int       `xorm:"SMALLINT(6)"`
19
+	VerificationStart time.Time `xorm:"DATETIME"`
20
+	VerificationEnd   time.Time `xorm:"DATETIME"`
21
+}

+ 20
- 0
models/model/ta_luckdraw_record.go 查看文件

@@ -0,0 +1,20 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaLuckdrawRecord struct {
8
+	Id           int       `xorm:"not null pk autoincr INT(11)"`
9
+	LuckdrawId   int       `xorm:"INT(11)"`
10
+	PrizeId      int       `xorm:"INT(11)"`
11
+	PrizeName    string    `xorm:"VARCHAR(50)"`
12
+	UserId       int       `xorm:"INT(11)"`
13
+	UserName     string    `xorm:"VARCHAR(50)"`
14
+	UserHeadImg  string    `xorm:"TEXT"`
15
+	CreateDate   time.Time `xorm:"DATETIME"`
16
+	Status       int       `xorm:"SMALLINT(6)"`
17
+	WriteoffDate time.Time `xorm:"DATETIME"`
18
+	OrgId        string    `xorm:"VARCHAR(64)"`
19
+	CaseId       int       `xorm:"INT(11)"`
20
+}

+ 16
- 0
models/model/ta_luckdraw_writeoff.go 查看文件

@@ -0,0 +1,16 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaLuckdrawWriteoff struct {
8
+	Id           int       `xorm:"not null pk autoincr INT(11)"`
9
+	LuckdrawId   int       `xorm:"INT(11)"`
10
+	RecordId     int       `xorm:"INT(11)"`
11
+	WriteoffDate time.Time `xorm:"DATETIME"`
12
+	WriteoffUser int       `xorm:"INT(11)"`
13
+	Status       int       `xorm:"SMALLINT(6)"`
14
+	OrgId        string    `xorm:"VARCHAR(64)"`
15
+	CaseId       int       `xorm:"INT(11)"`
16
+}

+ 14
- 0
models/model/ta_presentation.go 查看文件

@@ -0,0 +1,14 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaPresentation struct {
8
+	Id          int       `xorm:"not null pk autoincr INT(11)"`
9
+	CheckId     int       `xorm:"not null INT(11)"`
10
+	CheckType   int       `xorm:"SMALLINT(6)"`
11
+	CheckDate   time.Time `xorm:"DATETIME"`
12
+	CheckResult string    `xorm:"TEXT"`
13
+	ReportUrl   string    `xorm:"TEXT"`
14
+}

+ 10
- 0
models/model/ta_presentation_detail.go 查看文件

@@ -0,0 +1,10 @@
1
+package model
2
+
3
+type TaPresentationDetail struct {
4
+	Id             int    `xorm:"not null pk autoincr INT(11)"`
5
+	PresentationId int    `xorm:"not null INT(11)"`
6
+	CheckName      string `xorm:"VARCHAR(50)"`
7
+	CheckVal       string `xorm:"VARCHAR(500)"`
8
+	SpecName       string `xorm:"VARCHAR(50)"`
9
+	Remark         string `xorm:"TEXT"`
10
+}

+ 14
- 0
models/model/ta_prize_detail.go 查看文件

@@ -0,0 +1,14 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaPrizeDetail struct {
8
+	Id          int       `xorm:"not null pk autoincr INT(11)"`
9
+	PrizeId     int       `xorm:"INT(11)"`
10
+	Url         string    `xorm:"TEXT"`
11
+	Status      int       `xorm:"SMALLINT(6)"`
12
+	ReceiveId   int       `xorm:"INT(11)"`
13
+	ReceiveDate time.Time `xorm:"DATETIME"`
14
+}

+ 22
- 0
models/model/ta_share_lucky_record.go 查看文件

@@ -0,0 +1,22 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaShareLuckyRecord struct {
8
+	Id                 int       `xorm:"not null pk autoincr INT(11)"`
9
+	FromCustomerId     int       `xorm:"INT(11)"`
10
+	FromCustomerName   string    `xorm:"VARCHAR(32)"`
11
+	FromCustomerWxname string    `xorm:"VARCHAR(64)"`
12
+	FromCustomerTel    string    `xorm:"VARCHAR(32)"`
13
+	ToCustomerId       int       `xorm:"INT(11)"`
14
+	ToCustomerName     string    `xorm:"VARCHAR(32)"`
15
+	ToCustomerWxname   string    `xorm:"VARCHAR(64)"`
16
+	ToCustomerTel      string    `xorm:"VARCHAR(32)"`
17
+	CreateDate         time.Time `xorm:"DATETIME"`
18
+	CaseId             int       `xorm:"INT(11)"`
19
+	Status             int       `xorm:"SMALLINT(6)"`
20
+	LuckydrawId        int       `xorm:"INT(11)"`
21
+	LuckydrawName      string    `xorm:"VARCHAR(128)"`
22
+}

+ 25
- 0
models/model/ta_statistics_card_coupon_usage.go 查看文件

@@ -0,0 +1,25 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaStatisticsCardCouponUsage struct {
8
+	CardCouponUsageId string    `xorm:"not null pk VARCHAR(64)"`
9
+	CardCouponType    string    `xorm:"VARCHAR(32)"`
10
+	CardCouponName    string    `xorm:"VARCHAR(64)"`
11
+	CardCouponId      string    `xorm:"VARCHAR(64)"`
12
+	UsedItemId        string    `xorm:"VARCHAR(64)"`
13
+	UsedItemName      string    `xorm:"VARCHAR(32)"`
14
+	ReceiveType       string    `xorm:"VARCHAR(32)"`
15
+	CustomerId        string    `xorm:"VARCHAR(64)"`
16
+	CustomerName      string    `xorm:"VARCHAR(64)"`
17
+	CustomerPhone     string    `xorm:"VARCHAR(100)"`
18
+	SalesId           string    `xorm:"VARCHAR(64)"`
19
+	SalesName         string    `xorm:"VARCHAR(32)"`
20
+	ValidDate         time.Time `xorm:"DATETIME"`
21
+	ReceiveDate       time.Time `xorm:"DATETIME"`
22
+	VerifyDate        time.Time `xorm:"DATETIME"`
23
+	VerifyStatus      string    `xorm:"VARCHAR(32)"`
24
+	Status            int       `xorm:"SMALLINT(6)"`
25
+}

+ 8
- 0
models/model/td_check_spec.go 查看文件

@@ -0,0 +1,8 @@
1
+package model
2
+
3
+type TdCheckSpec struct {
4
+	Id       int    `xorm:"not null pk autoincr INT(11)"`
5
+	Name     string `xorm:"not null VARCHAR(50)"`
6
+	SortName string `xorm:"not null VARCHAR(50)"`
7
+	Standard string `xorm:"VARCHAR(50)"`
8
+}

+ 6
- 0
models/model/td_check_type.go 查看文件

@@ -0,0 +1,6 @@
1
+package model
2
+
3
+type TdCheckType struct {
4
+	Id       int    `xorm:"not null pk autoincr INT(11)"`
5
+	TypeName string `xorm:"VARCHAR(50)"`
6
+}

+ 0
- 7
models/model/td_coupon_type.go 查看文件

@@ -1,7 +0,0 @@
1
-package model
2
-
3
-type TdCouponType struct {
4
-	CouponTypeId   string `xorm:"not null pk VARCHAR(64)"`
5
-	CouponTypeName string `xorm:"VARCHAR(128)"`
6
-	OrgId          string `xorm:"VARCHAR(64)"`
7
-}

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

@@ -7,10 +7,10 @@ import (
7 7
 type TdGoodsType struct {
8 8
 	TypeId      string    `xorm:"not null pk VARCHAR(64)"`
9 9
 	TypeName    string    `xorm:"VARCHAR(32)"`
10
-	EnglishName string    `xorm:"VARCHAR(20)"`
11 10
 	CaseId      string    `xorm:"VARCHAR(64)"`
12 11
 	OrgId       string    `xorm:"VARCHAR(64)"`
13 12
 	CreateUser  string    `xorm:"VARCHAR(64)"`
14 13
 	CreateDate  time.Time `xorm:"DATETIME"`
15 14
 	Status      int       `xorm:"SMALLINT(6)"`
15
+	EnglishName string    `xorm:"VARCHAR(20)"`
16 16
 }

+ 8
- 0
models/model/td_luckdraw_theme.go 查看文件

@@ -0,0 +1,8 @@
1
+package model
2
+
3
+type TdLuckdrawTheme struct {
4
+	Id        int    `xorm:"not null pk autoincr INT(11)"`
5
+	ThemeName string `xorm:"VARCHAR(50)"`
6
+	Status    int    `xorm:"SMALLINT(6)"`
7
+	OrgId     string `xorm:"VARCHAR(64)"`
8
+}

+ 10
- 5
models/model/td_spec.go 查看文件

@@ -1,9 +1,14 @@
1 1
 package model
2 2
 
3
+import (
4
+	"time"
5
+)
6
+
3 7
 type TdSpec struct {
4
-	SpecId   string `xorm:"not null pk VARCHAR(64)"`
5
-	SpecName string `xorm:"VARCHAR(50)"`
6
-	Status   int    `xorm:"SMALLINT(6)"`
7
-	OrgId    string `xorm:"VARCHAR(64)"`
8
-	CaseId   string `xorm:"VARCHAR(64)"`
8
+	SpecId     string    `xorm:"not null pk VARCHAR(64)"`
9
+	SpecName   string    `xorm:"VARCHAR(50)"`
10
+	Status     int       `xorm:"SMALLINT(6)"`
11
+	OrgId      string    `xorm:"VARCHAR(64)"`
12
+	CaseId     string    `xorm:"VARCHAR(64)"`
13
+	CreateDate time.Time `xorm:"DATETIME"`
9 14
 }

+ 11
- 0
models/model/td_wechat_conf.go 查看文件

@@ -0,0 +1,11 @@
1
+package model
2
+
3
+type TdWechatConf struct {
4
+	Appid        string `xorm:"not null pk VARCHAR(100)"`
5
+	Secret       string `xorm:"VARCHAR(100)"`
6
+	Token        string `xorm:"VARCHAR(100)"`
7
+	Aeskey       string `xorm:"VARCHAR(100)"`
8
+	Wxid         string `xorm:"VARCHAR(100)"`
9
+	MessageTplId string `xorm:"VARCHAR(200)"`
10
+	Menu         string `xorm:"TEXT"`
11
+}

+ 100
- 8
models/system/user.go 查看文件

@@ -250,6 +250,13 @@ func (m *UserDAO) SaveUserTag(userid, tagids string) error {
250 250
 	return err
251 251
 }
252 252
 
253
+// GetUserBelongCase 获取用户默认案场
254
+func (m *UserDAO) GetUserBelongCase(userid string) (model.SysUserCase, error) {
255
+	var usercase model.SysUserCase
256
+	_, err := m.db.Where("is_belong=1").And("user_id=?", userid).Get(&usercase)
257
+	return usercase, err
258
+}
259
+
253 260
 // DelUserBelongCase 删除用户的所属案场
254 261
 func (m *UserDAO) DelUserBelongCase(userid string) error {
255 262
 	sql := "delete from sys_user_case where is_belong=1 and user_id='" + userid + "'"
@@ -333,9 +340,19 @@ func (m *UserDAO) UpdateCustomerHeadImg(customerid, username, imgurl string) err
333 340
 }
334 341
 
335 342
 // GetUserCustomer 获取我的推荐客户
336
-func (m *UserDAO) GetUserCustomer(userid string, page int, pageSize int) ([]model.TaCustomer, error) {
343
+func (m *UserDAO) GetUserCustomer(userid, isrecommend string, page int, pageSize int) ([]model.TaCustomer, error) {
337 344
 	var customers []model.TaCustomer
338
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("recommend_id=?", userid).Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&customers)
345
+	sql := `select * from ta_customer where recommend_id='` + userid + `'`
346
+	if isrecommend == "" {
347
+		sql += ` and customer_id in (
348
+			select customer_id from ta_customer_coupon where sales_id='` + userid + `'
349
+			union 
350
+			select customer_id from ta_customer_card where sales_id='` + userid + `'
351
+		)`
352
+	}
353
+	offset := (page - 1) * pageSize
354
+	sql += ` order by create_date desc LIMIT ` + strconv.Itoa(pageSize) + ` OFFSET ` + strconv.Itoa(offset)
355
+	err := m.db.Sql(sql).Find(&customers)
339 356
 	return customers, err
340 357
 }
341 358
 
@@ -411,13 +428,88 @@ func (m *UserDAO) GetUserWithTypeByID(userID string) ([]UserWithType, error) {
411 428
 	return userTypes, nil
412 429
 }
413 430
 
414
-// GetForbidUserByUserID 查询禁用人员
415
-func (m *UserDAO) GetForbidUserByUserID(userID string) ([]model.TaForbidUser, error) {
416
-	var fbUsers []model.TaForbidUser
431
+// CheckUserPhone 用户电话重复校验
432
+func (m *UserDAO) CheckUserPhone(userid, phone, orgid string) (bool, error) {
433
+	var users []model.SysUser
434
+	dao := m.db.Where("phone=?", phone).And("org_id=?", orgid)
435
+	if userid != "" {
436
+		dao.And("user_id <> '" + userid + "'")
437
+	}
438
+	err := dao.Find(&users)
439
+	if err != nil {
440
+		return false, err
441
+	}
442
+	if len(users) > 0 {
443
+		return false, nil
444
+	}
445
+	return true, nil
446
+}
417 447
 
418
-	if err := m.db.Where("user_id=?", userID).Find(&fbUsers); err != nil {
419
-		return nil, err
448
+// CheckUserName 用户账户名重复校验
449
+func (m *UserDAO) CheckUserName(userid, username, orgid string) (bool, error) {
450
+	var users []model.SysUser
451
+	dao := m.db.Where("user_name=?", username).And("org_id=?", orgid)
452
+	if userid != "" {
453
+		dao.And("user_id <> '" + userid + "'")
454
+	}
455
+	err := dao.Find(&users)
456
+	if err != nil {
457
+		return false, err
458
+	}
459
+	if len(users) > 0 {
460
+		return false, nil
420 461
 	}
462
+	return true, nil
463
+}
464
+
465
+// GetForbidUsers 获取所有禁止人员信息
466
+func (m *UserDAO) GetForbidUsers(caseid string) ([]model.TaForbidUser, error) {
467
+	var forbiduser []model.TaForbidUser
468
+	err := m.db.Where("case_id=?", caseid).And("end_date > NOW()").And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&forbiduser)
469
+	return forbiduser, err
470
+}
421 471
 
422
-	return fbUsers, nil
472
+// GetForbidUserByUserID 获取禁止人员信息
473
+func (m *UserDAO) GetForbidUserByUserID(userid string) ([]model.TaForbidUser, error) {
474
+	var forbiduser []model.TaForbidUser
475
+	err := m.db.Where("user_id=?", userid).And("(end_date is null or end_date > NOW())").And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&forbiduser)
476
+	return forbiduser, err
477
+}
478
+
479
+// SaveForbidUser 保存禁止人员信息
480
+func (m *UserDAO) SaveForbidUser(forbid *model.TaForbidUser) error {
481
+	forbid.BeginDate = time.Now().Local()
482
+	forbid.Status = models.STATUS_NORMAL
483
+	forbid.ForbidId = utils.GetGUID()
484
+	_, err := m.db.Insert(forbid)
485
+	return err
486
+}
487
+
488
+// OpenForbidUser 取消禁止信息
489
+func (m *UserDAO) OpenForbidUser(forbid *model.TaForbidUser) error {
490
+	forbid.EndDate = time.Now().Local()
491
+	forbid.Status = models.STATUS_DEL
492
+	var col = []string{
493
+		"end_date",
494
+		"status",
495
+	}
496
+	_, err := m.db.Cols(col...).Where("forbid_id=?", forbid.ForbidId).Update(forbid)
497
+	return err
498
+}
499
+
500
+// UserWithCouponAndCard 用户关联卡券信息
501
+type UserWithCouponAndCard struct {
502
+	model.SysUser  `xorm:"extends"`
503
+	CustomerCoupon []model.TaCustomerCoupon
504
+	CustomerCard   []model.TaCustomerCard
505
+}
506
+
507
+// GetCaseUserByType 获取案场所有销售信息
508
+func (m *UserDAO) GetCaseUserByType(caseid, usertype string) ([]UserWithCouponAndCard, error) {
509
+	var users []UserWithCouponAndCard
510
+	sql := `select a.* from sys_user a inner join sys_user_type b on a.user_id=b.user_id
511
+	inner join sys_user_case c on a.user_id=c.user_id
512
+	where a.status>? and c.case_id =? and b.type_id=?`
513
+	err := m.db.Sql(sql, models.STATUS_DEL, caseid, usertype).Find(&users)
514
+	return users, err
423 515
 }

+ 267
- 242
routers/common.go 查看文件

@@ -1,242 +1,267 @@
1
-package routers
2
-
3
-import (
4
-	"spaceofcheng/services/controllers"
5
-	"spaceofcheng/services/controllers/cases"
6
-	"spaceofcheng/services/controllers/channel"
7
-	"spaceofcheng/services/controllers/course"
8
-	"spaceofcheng/services/controllers/customer"
9
-	"spaceofcheng/services/controllers/goods"
10
-	"spaceofcheng/services/controllers/marketing"
11
-	"spaceofcheng/services/controllers/message"
12
-	"spaceofcheng/services/controllers/system"
13
-	"spaceofcheng/services/controllers/user"
14
-	"spaceofcheng/services/controllers/verify"
15
-	"spaceofcheng/services/controllers/vipcard"
16
-
17
-	"github.com/astaxie/beego"
18
-)
19
-
20
-func getCommonRoutes() beego.LinkNamespace {
21
-	prefix := beego.AppConfig.String("api::common")
22
-
23
-	return beego.NSNamespace(prefix,
24
-		// 商品分类
25
-		beego.NSRouter("/type/goods", &goods.GoodsController{}, "get:GetGoodsType"),
26
-		beego.NSRouter("/type/goods/:typeid", &goods.GoodsController{}, "get:GetGoodsTypeByID"),
27
-		beego.NSRouter("/type/goods", &goods.GoodsController{}, "post:SaveGoodsType"),
28
-		beego.NSRouter("/type/goods/:typeid", &goods.GoodsController{}, "put:SaveGoodsType"),
29
-		beego.NSRouter("/type/goods/:typeid", &goods.GoodsController{}, "delete:DelGoodsType"),
30
-
31
-		// 商品规格
32
-		beego.NSRouter("/spec/goods", &goods.GoodsController{}, "get:GetGoodsSpec"),
33
-		beego.NSRouter("/spec/goods/:specid", &goods.GoodsController{}, "get:GetGoodsSpecByID"),
34
-		beego.NSRouter("/spec/goods", &goods.GoodsController{}, "post:SaveGoodsSpec"),
35
-		beego.NSRouter("/spec/goods/:specid", &goods.GoodsController{}, "put:SaveGoodsSpec"),
36
-		beego.NSRouter("/spec/goods/:specid", &goods.GoodsController{}, "delete:DelGoodsSpec"),
37
-
38
-		// 系统用户
39
-		beego.NSRouter("/user", &user.UserController{}, "get:GetUserList"),
40
-		beego.NSRouter("/user/:userid", &user.UserController{}, "get:GetUserByID"),
41
-		beego.NSRouter("/user", &user.UserController{}, "post:SaveUser"),
42
-		beego.NSRouter("/user", &user.UserController{}, "put:SaveUser"),
43
-		beego.NSRouter("/user/:userid", &user.UserController{}, "delete:DelUser"),
44
-		beego.NSRouter("/user/:userid/password", &user.UserController{}, "put:UpdatePassword"),
45
-		beego.NSRouter("/user/password/reset", &user.UserController{}, "put:ResetPassword"),
46
-		beego.NSRouter("/signout", &user.UserController{}, "post:SignOut"),
47
-		beego.NSRouter("/user/tel/:tel", &user.UserController{}, "get:GetUserByTel"),
48
-
49
-		// 用户类型
50
-		beego.NSRouter("/usertype", &user.UserController{}, "get:GetUserTypes"),
51
-
52
-		// 用户角色
53
-		beego.NSRouter("/userrole", &user.UserController{}, "get:GetUserRole"),
54
-		beego.NSRouter("/userrole", &user.UserController{}, "put:UserMapRole"),
55
-
56
-		// cms 位置
57
-		beego.NSRouter("/cms/location", &message.MessageController{}, "get:GetLocations"),
58
-		beego.NSRouter("/cms/location/:locationid", &message.MessageController{}, "get:GetLocationById"),
59
-		beego.NSRouter("/cms/location", &message.MessageController{}, "post:SaveLocation"),
60
-		beego.NSRouter("/cms/location/:locationid", &message.MessageController{}, "put:SaveLocation"),
61
-		beego.NSRouter("/cms/location/:locationid", &message.MessageController{}, "delete:DelLocation"),
62
-
63
-		beego.NSRouter("/cms/location/:locationid/sort", &message.MessageController{}, "put:UpdateLocationSort"),
64
-
65
-		// cms
66
-		beego.NSRouter("/cms/info", &message.MessageController{}, "get:GetCmsInfoList"),
67
-		beego.NSRouter("/cms/info/:infoid", &message.MessageController{}, "get:GetCmsInfoByID"),
68
-		beego.NSRouter("/cms/info", &message.MessageController{}, "post:SaveCmsInfo"),
69
-		beego.NSRouter("/cms/info/:infoid", &message.MessageController{}, "put:SaveCmsInfo"),
70
-		beego.NSRouter("/cms/info/:infoid", &message.MessageController{}, "delete:DelCmsInfo"),
71
-
72
-		// cms 图片
73
-		beego.NSRouter("/cms/image", &message.MessageController{}, "get:GetImgList"),
74
-		beego.NSRouter("/cms/image/:imgid", &message.MessageController{}, "get:GetImgByID"),
75
-		beego.NSRouter("/cms/image", &message.MessageController{}, "post:SaveImage"),
76
-		beego.NSRouter("/cms/image/:imgid", &message.MessageController{}, "put:SaveImage"),
77
-		beego.NSRouter("/cms/image/:imgid", &message.MessageController{}, "delete:DelImg"),
78
-
79
-		// cms 消息
80
-		beego.NSRouter("/cms/news", &message.MessageController{}, "get:GetNews"),
81
-		beego.NSRouter("/cms/news/:newsid", &message.MessageController{}, "get:GetNewsByID"),
82
-		beego.NSRouter("/cms/news", &message.MessageController{}, "post:SaveNews"),
83
-		beego.NSRouter("/cms/news/:newsid", &message.MessageController{}, "put:SaveNews"),
84
-		beego.NSRouter("/cms/news/:newsid", &message.MessageController{}, "delete:DelNews"),
85
-
86
-		// cms 案场
87
-		beego.NSRouter("/cms/case", &message.MessageController{}, "get:GetCmsCase"),
88
-		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "get:GetCmsCaseByID"),
89
-		beego.NSRouter("/cms/case", &message.MessageController{}, "post:SaveCmsCase"),
90
-		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "put:SaveCmsCase"),
91
-		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "delete:DelCmsCase"),
92
-		beego.NSRouter("/cms/caseshow/:cmscaseid", &message.MessageController{}, "put:CmsCaseShow"),
93
-		beego.NSRouter("/cms/casehide/:cmscaseid", &message.MessageController{}, "put:CmsCaseHide"),
94
-
95
-		// tag 标签
96
-		beego.NSRouter("/case/tag", &cases.CaseController{}, "get:GetTagList"),
97
-		beego.NSRouter("/case/tag/:tagid", &cases.CaseController{}, "get:GetTagByID"),
98
-		beego.NSRouter("/case/tag", &cases.CaseController{}, "post:SaveCaseTag"),
99
-		beego.NSRouter("/case/tag", &cases.CaseController{}, "put:SaveCaseTag"),
100
-		beego.NSRouter("/case/tag/:tagid", &cases.CaseController{}, "delete:DelCaseTag"),
101
-
102
-		// caseuser 案场人员
103
-		beego.NSRouter("/case/user", &cases.CaseController{}, "get:GetCaseUserByCase"),
104
-		beego.NSRouter("/case/userbytype", &cases.CaseController{}, "get:GetCaseUserByType"),
105
-		beego.NSRouter("/case/usertype", &cases.CaseController{}, "get:GetCaseUserType"),
106
-		beego.NSRouter("/case/user/:userid", &cases.CaseController{}, "get:GetCaseUserByID"),
107
-		beego.NSRouter("/case/user", &cases.CaseController{}, "post:SaveCaseUser"),
108
-		beego.NSRouter("/case/user", &cases.CaseController{}, "put:SaveCaseUser"),
109
-		beego.NSRouter("/case/user/:userid", &cases.CaseController{}, "delete:DelCaseUser"),
110
-
111
-		// equipment 体检设备
112
-		beego.NSRouter("/case/equipment", &cases.CaseController{}, "get:GetEquipmentList"),
113
-		beego.NSRouter("/case/equipment/:id", &cases.CaseController{}, "get:GetEquipmentByID"),
114
-		beego.NSRouter("/case/equipment", &cases.CaseController{}, "post:SaveCaseEquipment"),
115
-		beego.NSRouter("/case/equipment", &cases.CaseController{}, "put:SaveCaseEquipment"),
116
-		beego.NSRouter("/case/equipment/:id", &cases.CaseController{}, "delete:DelCaseEquipment"),
117
-
118
-		// case 案场
119
-		beego.NSRouter("/case/info", &cases.CaseController{}, "get:GetCaseList"),
120
-		beego.NSRouter("/case/info/:id", &cases.CaseController{}, "get:GetCaseByID"),
121
-		beego.NSRouter("/case/info", &cases.CaseController{}, "post:SaveCase"),
122
-		beego.NSRouter("/case/info", &cases.CaseController{}, "put:SaveCase"),
123
-		beego.NSRouter("/case/info/:id", &cases.CaseController{}, "delete:DelCase"),
124
-		beego.NSRouter("/case/conf/:caseid", &cases.CaseController{}, "get:GetCaseConf"),
125
-		beego.NSRouter("/case/open/:caseid", &cases.CaseController{}, "put:OpenCaseCoffee"),
126
-		beego.NSRouter("/case/close/:caseid", &cases.CaseController{}, "put:CloseCaseCoffee"),
127
-
128
-		// casekey 案场钥匙
129
-		beego.NSRouter("/case/key", &cases.CaseController{}, "get:GetKeyList"),
130
-		beego.NSRouter("/case/key", &cases.CaseController{}, "post:AddKeys"),
131
-		beego.NSRouter("/case/unlock/:keyid", &cases.CaseController{}, "put:UnLockKey"),
132
-		beego.NSRouter("/case/key/:keyid", &cases.CaseController{}, "delete:DelKey"),
133
-
134
-		// casearea 案场区域
135
-		beego.NSRouter("/case/area", &cases.CaseController{}, "get:GetCaseArea"),
136
-		beego.NSRouter("/case/area/:areaid", &cases.CaseController{}, "get:GetCaseAreaByID"),
137
-		beego.NSRouter("/case/area", &cases.CaseController{}, "post:SaveCaseArea"),
138
-		beego.NSRouter("/case/area", &cases.CaseController{}, "put:SaveCaseArea"),
139
-		beego.NSRouter("/case/area/:areaid", &cases.CaseController{}, "delete:DelCaseArea"),
140
-
141
-		// casetable 案场桌位
142
-		beego.NSRouter("/case/table", &cases.CaseController{}, "get:GetCaseTable"),
143
-		beego.NSRouter("/case/table/:tableid", &cases.CaseController{}, "get:GetCaseTableByID"),
144
-		beego.NSRouter("/case/table", &cases.CaseController{}, "post:SaveCaseTable"),
145
-		beego.NSRouter("/case/table", &cases.CaseController{}, "put:SaveCaseTable"),
146
-		beego.NSRouter("/case/table/:tableid", &cases.CaseController{}, "delete:DelCaseTable"),
147
-
148
-		// caserecord 案场月记录
149
-		beego.NSRouter("/case/record", &cases.CaseController{}, "get:GetCaseRecordList"),
150
-		beego.NSRouter("/case/record", &cases.CaseController{}, "post:SaveCaseRecord"),
151
-
152
-		// channel 渠道
153
-		beego.NSRouter("/channel", &channel.ChannelController{}, "get:GetChannelList"),
154
-		beego.NSRouter("/channel/:channelId", &channel.ChannelController{}, "get:GetChannelById"),
155
-		beego.NSRouter("/channel", &channel.ChannelController{}, "post:SaveChannel"),
156
-		beego.NSRouter("/channel", &channel.ChannelController{}, "put:SaveChannel"),
157
-		beego.NSRouter("/channel/:channelId", &channel.ChannelController{}, "delete:DeleteChannel"),
158
-
159
-		// vipcard VIP卡
160
-		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "get:GetVipList"),
161
-		beego.NSRouter("/vipcard/:code", &vipcard.VipcardController{}, "get:GetVipByCode"),
162
-		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "post:AddVipCard"),
163
-		beego.NSRouter("/vipcard/:vipCardChildCode", &vipcard.VipcardController{}, "put:UserCharge"),
164
-
165
-		// courseVerify 核销课程
166
-		beego.NSRouter("/verify/course/code/:customerCourseId", &verify.VerifyController{}, "get:GetCustomerCourseDetailListById"),
167
-		beego.NSRouter("/verify/course/tel/:tel", &verify.VerifyController{}, "get:GetCustomerCourseDetailListBytel"),
168
-		beego.NSRouter("/verify/course/:customerDetailId", &verify.VerifyController{}, "put:VerifyCourse"),
169
-
170
-		// role 角色
171
-		beego.NSRouter("/role", &system.RoleController{}, "get:GetRoleList"),
172
-		beego.NSRouter("/role/:roleid", &system.RoleController{}, "get:GetRoleByID"),
173
-		beego.NSRouter("/role", &system.RoleController{}, "post:SaveCaseRole"),
174
-		beego.NSRouter("/role", &system.RoleController{}, "put:SaveCaseRole"),
175
-		beego.NSRouter("/role/:roleid", &system.RoleController{}, "delete:DelCaseRole"),
176
-
177
-		beego.NSRouter("/rolemenu/:roleid", &system.RoleController{}, "get:GetRoleMenuByRole"),
178
-		beego.NSRouter("/rolemenu/:roleid", &system.RoleController{}, "put:SaveRoleMenus"),
179
-
180
-		// course 课程
181
-		beego.NSRouter("/coursetag", &course.CourseController{}, "get:GetCourseTagsByPage"),
182
-		// beego.NSRouter("/coursetag", &course.CourseController{}, "get:GetCourseTags"),
183
-
184
-		beego.NSRouter("/course", &course.CourseController{}, "get:GetCourseList"),
185
-		beego.NSRouter("/course/:courseid", &course.CourseController{}, "get:GetCourseByID"),
186
-		beego.NSRouter("/course", &course.CourseController{}, "post:SaveCourse"),
187
-		beego.NSRouter("/course", &course.CourseController{}, "put:SaveCourse"),
188
-		beego.NSRouter("/course/:courseid", &course.CourseController{}, "delete:DeleteCourse"),
189
-		beego.NSRouter("/course/:courseid/public", &course.CourseController{}, "put:CoursePublic"),
190
-		beego.NSRouter("/course/:courseid/unpublic", &course.CourseController{}, "put:CourseUnPublic"),
191
-		beego.NSRouter("/courseimg/:courseid", &course.CourseController{}, "get:GetCourseImgs"),
192
-		beego.NSRouter("/courseimg", &course.CourseController{}, "post:SaveCourseImg"),
193
-		beego.NSRouter("/courseimg", &course.CourseController{}, "put:SaveCourseImg"),
194
-		beego.NSRouter("/courseimg/:courseid", &course.CourseController{}, "delete:DelCourseImg"),
195
-		beego.NSRouter("/schedule", &course.CourseController{}, "get:GetCourseSchedule"),
196
-		beego.NSRouter("/detail", &course.CourseController{}, "get:GetDetails"),
197
-		beego.NSRouter("/detail/:detailid", &course.CourseController{}, "get:GetDetailByID"),
198
-		beego.NSRouter("/detail", &course.CourseController{}, "post:SaveDetail"),
199
-		beego.NSRouter("/detail", &course.CourseController{}, "put:SaveDetail"),
200
-		beego.NSRouter("/detail/:detailid", &course.CourseController{}, "delete:DelCourseDetail"),
201
-
202
-		// 商品
203
-		beego.NSRouter("/goods", &goods.GoodsController{}, "get:GetListByCase"),
204
-		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "get:GetGoodsByID"),
205
-		beego.NSRouter("/goods", &goods.GoodsController{}, "post:UpdateGoods"),
206
-		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "put:UpdateGoods"),
207
-		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "delete:DeleteGoods"),
208
-
209
-		// 商品订单
210
-		beego.NSRouter("/order/goods", &goods.GoodsController{}, "get:GetOrderList"),
211
-		beego.NSRouter("/order/online/goods", &goods.GoodsController{}, "get:GetOnlineOrder"),
212
-		beego.NSRouter("/order/goods/record/:recordid", &goods.GoodsController{}, "get:GetOrdersByRecord"),
213
-
214
-		beego.NSRouter("/order/goods/finish/:id", &goods.GoodsController{}, "put:FinishMake"),
215
-		beego.NSRouter("/order/goods/cancel/:id", &goods.GoodsController{}, "put:CancelMake"),
216
-
217
-		// 文件
218
-		beego.NSRouter("/file", &controllers.BaseController{}, "post:FileUpload"),
219
-
220
-		// 会员
221
-		beego.NSRouter("/customer", &customer.CustomerController{}, "get:CustWXList"),
222
-		beego.NSRouter("/customer/tel/:tel", &customer.CustomerController{}, "get:CustByTel"),
223
-
224
-		// 系统相关
225
-		beego.NSRouter("/system/init", &user.UserController{}, "get:GetEnvVars"),
226
-
227
-		// 营销活动
228
-		beego.NSRouter("/marketing/list", &marketing.MarketingController{}, "get:GetMarketingList"),
229
-		beego.NSRouter("/marketing", &marketing.MarketingController{}, "post:SaveMarketing"),
230
-		beego.NSRouter("/marketing/:activityId", &marketing.MarketingController{}, "get:GetMarketingById"),
231
-		beego.NSRouter("/marketing", &marketing.MarketingController{}, "put:UpdateMarketing"),
232
-		beego.NSRouter("/marketing/normal/:activityId", &marketing.MarketingController{}, "put:DelMarketingNormal"),
233
-		beego.NSRouter("/marketing/disable/:activityId", &marketing.MarketingController{}, "put:DelMarketingDisable"),
234
-		beego.NSRouter("/marketing/:activityId", &marketing.MarketingController{}, "delete:DelMarketing"),
235
-
236
-		// 签到
237
-		beego.NSRouter("/case/signin", &cases.SigninController{}, "get:GetSigninWhere"),
238
-
239
-		// websocket
240
-		beego.NSRouter("/websocket/:grps/:id", &controllers.BaseController{}, "get:Ws"),
241
-	)
242
-}
1
+package routers
2
+
3
+import (
4
+	"spaceofcheng/services/controllers"
5
+	"spaceofcheng/services/controllers/card"
6
+	"spaceofcheng/services/controllers/cases"
7
+	"spaceofcheng/services/controllers/channel"
8
+	"spaceofcheng/services/controllers/coupon"
9
+	"spaceofcheng/services/controllers/course"
10
+	"spaceofcheng/services/controllers/customer"
11
+	"spaceofcheng/services/controllers/goods"
12
+	"spaceofcheng/services/controllers/gymcard"
13
+	"spaceofcheng/services/controllers/marketing"
14
+	"spaceofcheng/services/controllers/message"
15
+	"spaceofcheng/services/controllers/system"
16
+	"spaceofcheng/services/controllers/user"
17
+	"spaceofcheng/services/controllers/verify"
18
+	"spaceofcheng/services/controllers/vipcard"
19
+
20
+	"github.com/astaxie/beego"
21
+)
22
+
23
+func getCommonRoutes() beego.LinkNamespace {
24
+	prefix := beego.AppConfig.String("api::common")
25
+
26
+	return beego.NSNamespace(prefix,
27
+		// 商品分类
28
+		beego.NSRouter("/type/goods", &goods.GoodsController{}, "get:GetGoodsType"),
29
+		beego.NSRouter("/type/goods/:typeid", &goods.GoodsController{}, "get:GetGoodsTypeByID"),
30
+		beego.NSRouter("/type/goods", &goods.GoodsController{}, "post:SaveGoodsType"),
31
+		beego.NSRouter("/type/goods/:typeid", &goods.GoodsController{}, "put:SaveGoodsType"),
32
+		beego.NSRouter("/type/goods/:typeid", &goods.GoodsController{}, "delete:DelGoodsType"),
33
+
34
+		// 商品规格
35
+		beego.NSRouter("/spec/goods", &goods.GoodsController{}, "get:GetGoodsSpec"),
36
+		beego.NSRouter("/spec/goods/:specid", &goods.GoodsController{}, "get:GetGoodsSpecByID"),
37
+		beego.NSRouter("/spec/goods", &goods.GoodsController{}, "post:SaveGoodsSpec"),
38
+		beego.NSRouter("/spec/goods/:specid", &goods.GoodsController{}, "put:SaveGoodsSpec"),
39
+		beego.NSRouter("/spec/goods/:specid", &goods.GoodsController{}, "delete:DelGoodsSpec"),
40
+
41
+		// 系统用户
42
+		beego.NSRouter("/user", &user.UserController{}, "get:GetUserList"),
43
+		beego.NSRouter("/user/:userid", &user.UserController{}, "get:GetUserByID"),
44
+		beego.NSRouter("/user", &user.UserController{}, "post:SaveUser"),
45
+		beego.NSRouter("/user", &user.UserController{}, "put:SaveUser"),
46
+		beego.NSRouter("/user/:userid", &user.UserController{}, "delete:DelUser"),
47
+		beego.NSRouter("/user/:userid/password", &user.UserController{}, "put:UpdatePassword"),
48
+		beego.NSRouter("/user/password/reset", &user.UserController{}, "put:ResetPassword"),
49
+		beego.NSRouter("/signout", &user.UserController{}, "post:SignOut"),
50
+		beego.NSRouter("/user/tel/:tel", &user.UserController{}, "get:GetUserByTel"),
51
+
52
+		// 用户类型
53
+		beego.NSRouter("/usertype", &user.UserController{}, "get:GetUserTypes"),
54
+
55
+		// 用户角色
56
+		beego.NSRouter("/userrole", &user.UserController{}, "get:GetUserRole"),
57
+		beego.NSRouter("/userrole", &user.UserController{}, "put:UserMapRole"),
58
+
59
+		// cms 位置
60
+		beego.NSRouter("/cms/location", &message.MessageController{}, "get:GetLocations"),
61
+		beego.NSRouter("/cms/location/:locationid", &message.MessageController{}, "get:GetLocationById"),
62
+		beego.NSRouter("/cms/location", &message.MessageController{}, "post:SaveLocation"),
63
+		beego.NSRouter("/cms/location/:locationid", &message.MessageController{}, "put:SaveLocation"),
64
+		beego.NSRouter("/cms/location/:locationid", &message.MessageController{}, "delete:DelLocation"),
65
+
66
+		beego.NSRouter("/cms/location/:locationid/sort", &message.MessageController{}, "put:UpdateLocationSort"),
67
+
68
+		// cms
69
+		beego.NSRouter("/cms/info", &message.MessageController{}, "get:GetCmsInfoList"),
70
+		beego.NSRouter("/cms/info/:infoid", &message.MessageController{}, "get:GetCmsInfoByID"),
71
+		beego.NSRouter("/cms/info", &message.MessageController{}, "post:SaveCmsInfo"),
72
+		beego.NSRouter("/cms/info/:infoid", &message.MessageController{}, "put:SaveCmsInfo"),
73
+		beego.NSRouter("/cms/info/:infoid", &message.MessageController{}, "delete:DelCmsInfo"),
74
+
75
+		// cms 图片
76
+		beego.NSRouter("/cms/image", &message.MessageController{}, "get:GetImgList"),
77
+		beego.NSRouter("/cms/image/:imgid", &message.MessageController{}, "get:GetImgByID"),
78
+		beego.NSRouter("/cms/image", &message.MessageController{}, "post:SaveImage"),
79
+		beego.NSRouter("/cms/image/:imgid", &message.MessageController{}, "put:SaveImage"),
80
+		beego.NSRouter("/cms/image/:imgid", &message.MessageController{}, "delete:DelImg"),
81
+
82
+		// cms 消息
83
+		beego.NSRouter("/cms/news", &message.MessageController{}, "get:GetNews"),
84
+		beego.NSRouter("/cms/news/:newsid", &message.MessageController{}, "get:GetNewsByID"),
85
+		beego.NSRouter("/cms/news", &message.MessageController{}, "post:SaveNews"),
86
+		beego.NSRouter("/cms/news/:newsid", &message.MessageController{}, "put:SaveNews"),
87
+		beego.NSRouter("/cms/news/:newsid", &message.MessageController{}, "delete:DelNews"),
88
+
89
+		// cms 案场
90
+		beego.NSRouter("/cms/case", &message.MessageController{}, "get:GetCmsCase"),
91
+		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "get:GetCmsCaseByID"),
92
+		beego.NSRouter("/cms/case", &message.MessageController{}, "post:SaveCmsCase"),
93
+		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "put:SaveCmsCase"),
94
+		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "delete:DelCmsCase"),
95
+		beego.NSRouter("/cms/caseshow/:cmscaseid", &message.MessageController{}, "put:CmsCaseShow"),
96
+		beego.NSRouter("/cms/casehide/:cmscaseid", &message.MessageController{}, "put:CmsCaseHide"),
97
+
98
+		// tag 标签
99
+		beego.NSRouter("/case/tag", &cases.CaseController{}, "get:GetTagList"),
100
+		beego.NSRouter("/case/tag/:tagid", &cases.CaseController{}, "get:GetTagByID"),
101
+		beego.NSRouter("/case/tag", &cases.CaseController{}, "post:SaveCaseTag"),
102
+		beego.NSRouter("/case/tag", &cases.CaseController{}, "put:SaveCaseTag"),
103
+		beego.NSRouter("/case/tag/:tagid", &cases.CaseController{}, "delete:DelCaseTag"),
104
+
105
+		// caseuser 案场人员
106
+		beego.NSRouter("/case/user", &cases.CaseController{}, "get:GetCaseUserByCase"),
107
+		beego.NSRouter("/case/userbytype", &cases.CaseController{}, "get:GetCaseUserByType"),
108
+		beego.NSRouter("/case/usertype", &cases.CaseController{}, "get:GetCaseUserType"),
109
+		beego.NSRouter("/case/user/:userid", &cases.CaseController{}, "get:GetCaseUserByID"),
110
+		beego.NSRouter("/case/user", &cases.CaseController{}, "post:SaveCaseUser"),
111
+		beego.NSRouter("/case/user", &cases.CaseController{}, "put:SaveCaseUser"),
112
+		beego.NSRouter("/case/user/:userid", &cases.CaseController{}, "delete:DelCaseUser"),
113
+
114
+		// equipment 体检设备
115
+		beego.NSRouter("/case/equipment", &cases.CaseController{}, "get:GetEquipmentList"),
116
+		beego.NSRouter("/case/equipment/:id", &cases.CaseController{}, "get:GetEquipmentByID"),
117
+		beego.NSRouter("/case/equipment", &cases.CaseController{}, "post:SaveCaseEquipment"),
118
+		beego.NSRouter("/case/equipment", &cases.CaseController{}, "put:SaveCaseEquipment"),
119
+		beego.NSRouter("/case/equipment/:id", &cases.CaseController{}, "delete:DelCaseEquipment"),
120
+
121
+		// case 案场
122
+		beego.NSRouter("/case/info", &cases.CaseController{}, "get:GetCaseList"),
123
+		beego.NSRouter("/case/info/:id", &cases.CaseController{}, "get:GetCaseByID"),
124
+		beego.NSRouter("/case/info", &cases.CaseController{}, "post:SaveCase"),
125
+		beego.NSRouter("/case/info", &cases.CaseController{}, "put:SaveCase"),
126
+		beego.NSRouter("/case/info/:id", &cases.CaseController{}, "delete:DelCase"),
127
+		beego.NSRouter("/case/conf/:caseid", &cases.CaseController{}, "get:GetCaseConf"),
128
+		beego.NSRouter("/case/open/:caseid", &cases.CaseController{}, "put:OpenCaseCoffee"),
129
+		beego.NSRouter("/case/close/:caseid", &cases.CaseController{}, "put:CloseCaseCoffee"),
130
+
131
+		// casekey 案场钥匙
132
+		beego.NSRouter("/case/key", &cases.CaseController{}, "get:GetKeyList"),
133
+		beego.NSRouter("/case/key", &cases.CaseController{}, "post:AddKeys"),
134
+		beego.NSRouter("/case/unlock/:keyid", &cases.CaseController{}, "put:UnLockKey"),
135
+		beego.NSRouter("/case/key/:keyid", &cases.CaseController{}, "delete:DelKey"),
136
+
137
+		// casearea 案场区域
138
+		beego.NSRouter("/case/area", &cases.CaseController{}, "get:GetCaseArea"),
139
+		beego.NSRouter("/case/area/:areaid", &cases.CaseController{}, "get:GetCaseAreaByID"),
140
+		beego.NSRouter("/case/area", &cases.CaseController{}, "post:SaveCaseArea"),
141
+		beego.NSRouter("/case/area", &cases.CaseController{}, "put:SaveCaseArea"),
142
+		beego.NSRouter("/case/area/:areaid", &cases.CaseController{}, "delete:DelCaseArea"),
143
+
144
+		// casetable 案场桌位
145
+		beego.NSRouter("/case/table", &cases.CaseController{}, "get:GetCaseTable"),
146
+		beego.NSRouter("/case/table/:tableid", &cases.CaseController{}, "get:GetCaseTableByID"),
147
+		beego.NSRouter("/case/table", &cases.CaseController{}, "post:SaveCaseTable"),
148
+		beego.NSRouter("/case/table", &cases.CaseController{}, "put:SaveCaseTable"),
149
+		beego.NSRouter("/case/table/:tableid", &cases.CaseController{}, "delete:DelCaseTable"),
150
+
151
+		// caserecord 案场月记录
152
+		beego.NSRouter("/case/record", &cases.CaseController{}, "get:GetCaseRecordList"),
153
+		beego.NSRouter("/case/record", &cases.CaseController{}, "post:SaveCaseRecord"),
154
+
155
+		// channel 渠道
156
+		beego.NSRouter("/channel", &channel.ChannelController{}, "get:GetChannelList"),
157
+		beego.NSRouter("/channel/:channelId", &channel.ChannelController{}, "get:GetChannelById"),
158
+		beego.NSRouter("/channel", &channel.ChannelController{}, "post:SaveChannel"),
159
+		beego.NSRouter("/channel", &channel.ChannelController{}, "put:SaveChannel"),
160
+		beego.NSRouter("/channel/:channelId", &channel.ChannelController{}, "delete:DeleteChannel"),
161
+
162
+		// vipcard VIP卡
163
+		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "get:GetVipList"),
164
+		beego.NSRouter("/vipcard/:code", &vipcard.VipcardController{}, "get:GetVipByCode"),
165
+		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "post:AddVipCard"),
166
+		beego.NSRouter("/vipcard/:vipCardChildCode", &vipcard.VipcardController{}, "put:UserCharge"),
167
+
168
+		// courseVerify 核销课程
169
+		beego.NSRouter("/verify/course/code/:customerCourseId", &verify.VerifyController{}, "get:GetCustomerCourseDetailListById"),
170
+		beego.NSRouter("/verify/course/tel/:tel", &verify.VerifyController{}, "get:GetCustomerCourseDetailListBytel"),
171
+		beego.NSRouter("/verify/course/:customerDetailId", &verify.VerifyController{}, "put:VerifyCourse"),
172
+
173
+		// gymcard 游泳健身卡
174
+		beego.NSRouter("/gymcard", &gymcard.GymcardController{}, "get:GetGymcardList"),
175
+		beego.NSRouter("/gymcard/:gymcardId", &gymcard.GymcardController{}, "get:GetGymcardDetailbyId"),
176
+		beego.NSRouter("/gymcard/:phone", &gymcard.GymcardController{}, "get:GetCustomerGymByPhone"),
177
+		beego.NSRouter("/gymcard", &gymcard.GymcardController{}, "post:SaveGymcard"),
178
+		beego.NSRouter("/gymcard", &gymcard.GymcardController{}, "put:SaveGymcard"),
179
+		beego.NSRouter("/gymcard/:customerGymId", &gymcard.GymcardController{}, "put:VerifyCustomerGymcard"),
180
+		// role 角色
181
+		beego.NSRouter("/role", &system.RoleController{}, "get:GetRoleList"),
182
+		beego.NSRouter("/role/:roleid", &system.RoleController{}, "get:GetRoleByID"),
183
+		beego.NSRouter("/role", &system.RoleController{}, "post:SaveCaseRole"),
184
+		beego.NSRouter("/role", &system.RoleController{}, "put:SaveCaseRole"),
185
+		beego.NSRouter("/role/:roleid", &system.RoleController{}, "delete:DelCaseRole"),
186
+
187
+		beego.NSRouter("/rolemenu/:roleid", &system.RoleController{}, "get:GetRoleMenuByRole"),
188
+		beego.NSRouter("/rolemenu/:roleid", &system.RoleController{}, "put:SaveRoleMenus"),
189
+
190
+		// course 课程
191
+		beego.NSRouter("/coursetag", &course.CourseController{}, "get:GetCourseTagsByPage"),
192
+		// beego.NSRouter("/coursetag", &course.CourseController{}, "get:GetCourseTags"),
193
+
194
+		beego.NSRouter("/course", &course.CourseController{}, "get:GetCourseList"),
195
+		beego.NSRouter("/course/:courseid", &course.CourseController{}, "get:GetCourseByID"),
196
+		beego.NSRouter("/course", &course.CourseController{}, "post:SaveCourse"),
197
+		beego.NSRouter("/course", &course.CourseController{}, "put:SaveCourse"),
198
+		beego.NSRouter("/course/:courseid", &course.CourseController{}, "delete:DeleteCourse"),
199
+		beego.NSRouter("/course/:courseid/public", &course.CourseController{}, "put:CoursePublic"),
200
+		beego.NSRouter("/course/:courseid/unpublic", &course.CourseController{}, "put:CourseUnPublic"),
201
+		beego.NSRouter("/courseimg/:courseid", &course.CourseController{}, "get:GetCourseImgs"),
202
+		beego.NSRouter("/courseimg", &course.CourseController{}, "post:SaveCourseImg"),
203
+		beego.NSRouter("/courseimg", &course.CourseController{}, "put:SaveCourseImg"),
204
+		beego.NSRouter("/courseimg/:courseid", &course.CourseController{}, "delete:DelCourseImg"),
205
+		beego.NSRouter("/schedule", &course.CourseController{}, "get:GetCourseSchedule"),
206
+		beego.NSRouter("/detail", &course.CourseController{}, "get:GetDetails"),
207
+		beego.NSRouter("/detail/:detailid", &course.CourseController{}, "get:GetDetailByID"),
208
+		beego.NSRouter("/detail", &course.CourseController{}, "post:SaveDetail"),
209
+		beego.NSRouter("/detail", &course.CourseController{}, "put:SaveDetail"),
210
+		beego.NSRouter("/detail/:detailid", &course.CourseController{}, "delete:DelCourseDetail"),
211
+
212
+		// 商品
213
+		beego.NSRouter("/goods", &goods.GoodsController{}, "get:GetListByCase"),
214
+		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "get:GetGoodsByID"),
215
+		beego.NSRouter("/goods", &goods.GoodsController{}, "post:UpdateGoods"),
216
+		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "put:UpdateGoods"),
217
+		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "delete:DeleteGoods"),
218
+
219
+		// 商品订单
220
+		beego.NSRouter("/order/goods", &goods.GoodsController{}, "get:GetOrderList"),
221
+		beego.NSRouter("/order/online/goods", &goods.GoodsController{}, "get:GetOnlineOrder"),
222
+		beego.NSRouter("/order/goods/record/:recordid", &goods.GoodsController{}, "get:GetOrdersByRecord"),
223
+
224
+		beego.NSRouter("/order/goods/finish/:id", &goods.GoodsController{}, "put:FinishMake"),
225
+		beego.NSRouter("/order/goods/cancel/:id", &goods.GoodsController{}, "put:CancelMake"),
226
+
227
+		// 优惠券
228
+		beego.NSRouter("/coupon", &coupon.CouponController{}, "get:ListByCase"),
229
+		beego.NSRouter("/coupon", &coupon.CouponController{}, "post:SaveCoupon"),
230
+		beego.NSRouter("/coupon/:id", &coupon.CouponController{}, "get:GetCouponByIDForAdmin"),
231
+		beego.NSRouter("/coupon/:id", &coupon.CouponController{}, "put:UpdateCoupon"),
232
+		beego.NSRouter("/coupon/:id/to/:users", &coupon.CouponController{}, "post:GiveCoupon"),
233
+		beego.NSRouter("/coupon/type/:type", &coupon.CouponController{}, "get:GetCouponBySendType"),
234
+
235
+		// 卡
236
+		beego.NSRouter("/card", &card.CardController{}, "get:ListByCase"),
237
+		beego.NSRouter("/card", &card.CardController{}, "post:SaveCard"),
238
+		beego.NSRouter("/card/:id", &card.CardController{}, "get:GetCardByIDForAdmin"),
239
+		beego.NSRouter("/card/:id", &card.CardController{}, "put:UpdateCard"),
240
+		beego.NSRouter("/card/:id/to/:users", &card.CardController{}, "post:GiveCard"),
241
+
242
+		// 文件
243
+		beego.NSRouter("/file", &controllers.BaseController{}, "post:FileUpload"),
244
+
245
+		// 会员
246
+		beego.NSRouter("/customer", &customer.CustomerController{}, "get:CustWXList"),
247
+		beego.NSRouter("/customer/tel/:tel", &customer.CustomerController{}, "get:CustByTel"),
248
+
249
+		// 系统相关
250
+		beego.NSRouter("/system/init", &user.UserController{}, "get:GetEnvVars"),
251
+
252
+		// 营销活动
253
+		beego.NSRouter("/marketing/list", &marketing.MarketingController{}, "get:GetMarketingList"),
254
+		beego.NSRouter("/marketing", &marketing.MarketingController{}, "post:SaveMarketing"),
255
+		beego.NSRouter("/marketing/:activityId", &marketing.MarketingController{}, "get:GetMarketingById"),
256
+		beego.NSRouter("/marketing", &marketing.MarketingController{}, "put:UpdateMarketing"),
257
+		beego.NSRouter("/marketing/normal/:activityId", &marketing.MarketingController{}, "put:DelMarketingNormal"),
258
+		beego.NSRouter("/marketing/disable/:activityId", &marketing.MarketingController{}, "put:DelMarketingDisable"),
259
+		beego.NSRouter("/marketing/:activityId", &marketing.MarketingController{}, "delete:DelMarketing"),
260
+
261
+		// 签到
262
+		beego.NSRouter("/case/signin", &cases.SigninController{}, "get:GetSigninWhere"),
263
+
264
+		// websocket
265
+		beego.NSRouter("/websocket/:grps/:id", &controllers.BaseController{}, "get:Ws"),
266
+	)
267
+}

+ 48
- 32
routers/wechat.go 查看文件

@@ -1,32 +1,48 @@
1
-package routers
2
-
3
-import (
4
-	"spaceofcheng/services/controllers/course"
5
-	"spaceofcheng/services/controllers/customer"
6
-	"spaceofcheng/services/controllers/goods"
7
-
8
-	"github.com/astaxie/beego"
9
-)
10
-
11
-func getWechatRoutes() beego.LinkNamespace {
12
-	prefix := beego.AppConfig.String("api::wechat")
13
-
14
-	return beego.NSNamespace(prefix,
15
-		// 会员
16
-		beego.NSRouter("/customer", &customer.CustomerController{}, "get:GetCustWXByID"),
17
-
18
-		// 下单
19
-		beego.NSRouter("/order/goods", &goods.GoodsController{}, "post:PostOrder"),
20
-		beego.NSRouter("/order/course", &course.CourseController{}, "post:PostOrder"),
21
-
22
-		// 课程
23
-		beego.NSRouter("/course/user", &course.CourseController{}, "get:GetCustomerCourse"),
24
-		beego.NSRouter("/course/user/:id", &course.CourseController{}, "get:GetCustomerCourseByID"),
25
-
26
-		// 商品订单
27
-		beego.NSRouter("/goods/user", &goods.GoodsController{}, "get:GetCustomerOrders"),
28
-
29
-		// 案场订单数量
30
-		beego.NSRouter("/goods/case/:caseid", &goods.GoodsController{}, "get:GetCaseOrdersNum"),
31
-	)
32
-}
1
+package routers
2
+
3
+import (
4
+	"spaceofcheng/services/controllers/course"
5
+	"spaceofcheng/services/controllers/customer"
6
+	"spaceofcheng/services/controllers/goods"
7
+	"spaceofcheng/services/controllers/gymcard"
8
+	"spaceofcheng/services/controllers/user"
9
+
10
+	"github.com/astaxie/beego"
11
+)
12
+
13
+func getWechatRoutes() beego.LinkNamespace {
14
+	prefix := beego.AppConfig.String("api::wechat")
15
+
16
+	return beego.NSNamespace(prefix,
17
+		// 会员
18
+		beego.NSRouter("/customer", &customer.CustomerController{}, "get:GetCustWXByID"),
19
+		beego.NSRouter("/customer/user", &user.UserController{}, "get:GetUserCustomer"),
20
+
21
+		// 下单
22
+		beego.NSRouter("/order/goods", &goods.GoodsController{}, "post:PostOrder"),
23
+		beego.NSRouter("/order/course", &course.CourseController{}, "post:PostOrder"),
24
+
25
+		// 课程
26
+		beego.NSRouter("/course/user", &course.CourseController{}, "get:GetCustomerCourse"),
27
+		beego.NSRouter("/course/user/:id", &course.CourseController{}, "get:GetCustomerCourseByID"),
28
+
29
+		// 商品订单
30
+		beego.NSRouter("/goods/user", &goods.GoodsController{}, "get:GetCustomerOrders"),
31
+
32
+		// 案场订单数量
33
+		beego.NSRouter("/goods/case/:caseid", &goods.GoodsController{}, "get:GetCaseOrdersNum"),
34
+
35
+		// 客户游泳健身卡
36
+		beego.NSRouter("/gymcard", &gymcard.GymcardController{}, "get:GetGymcardListByCustomerId"),
37
+		beego.NSRouter("/gymcard/:customerGymId", &gymcard.GymcardController{}, "get:GetCustomerGymDetailById"),
38
+		beego.NSRouter("/gymcard/:gymcardId/:sysuserId", &gymcard.GymcardController{}, "post:SendGymToCustomer"),
39
+
40
+		// 禁止人员
41
+		beego.NSRouter("/user/forbid", &user.UserController{}, "get:GetForbidUsers"),
42
+		beego.NSRouter("/user/forbid/:userid/:type", &user.UserController{}, "post:SaveForbidUser"),
43
+		beego.NSRouter("/user/forbid/:userid/:type", &user.UserController{}, "put:OpenForbidUser"),
44
+
45
+		// 用户
46
+		beego.NSRouter("/user/:type", &user.UserController{}, "get:GetCaseUserByType"),
47
+	)
48
+}

+ 276
- 0
service/card/card.go 查看文件

@@ -0,0 +1,276 @@
1
+package card
2
+
3
+import (
4
+	"errors"
5
+	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/card"
7
+	"spaceofcheng/services/models/customer"
8
+	"spaceofcheng/services/models/model"
9
+	"spaceofcheng/services/utils"
10
+	"strings"
11
+	"time"
12
+
13
+	"github.com/yl10/kit/guid"
14
+)
15
+
16
+// CardServ 系统处理
17
+type CardServ struct {
18
+	ctx     *utils.Context
19
+	dao     *card.CardDAO
20
+	custDao *customer.CustomerDAO
21
+}
22
+
23
+// NewCardServ 初始化
24
+func NewCardServ(ctx *utils.Context) *CardServ {
25
+	return &CardServ{
26
+		ctx:     ctx,
27
+		dao:     card.NewCardDAO(ctx),
28
+		custDao: customer.NewCustomerDAO(ctx),
29
+	}
30
+}
31
+
32
+// GetCardList 获取卡列表
33
+func (s *CardServ) GetCardList(caseID string, pagenavi ...int) ([]model.TaCouponCard, int64, error) {
34
+	filters := []string{}
35
+	if caseID != "" {
36
+		if err := utils.NewAuthEngine(s.ctx).CheckCase(caseID); err != nil {
37
+			return nil, 0, err
38
+		}
39
+
40
+		filters = []string{
41
+			"case_id='" + caseID + "'",
42
+		}
43
+	} else {
44
+		casesRaw := s.ctx.Get("cases")
45
+		if casesRaw == nil {
46
+			return nil, 0, errors.New("请设置过滤案场")
47
+		}
48
+
49
+		cases := casesRaw.([]model.SysUserCase)
50
+		caseIDs := []string{}
51
+		for _, cs := range cases {
52
+			caseIDs = append(caseIDs, cs.CaseId)
53
+		}
54
+
55
+		filters = []string{
56
+			"case_id in ('" + strings.Join(caseIDs, "','") + "')",
57
+		}
58
+	}
59
+
60
+	limit := utils.GetPageNaviLimit(pagenavi...)
61
+	res, total, err := s.dao.GetCardList(filters, limit)
62
+	if err != nil {
63
+		utils.LogError("查询卡列表失败: " + err.Error())
64
+		return nil, 0, errors.New("查询卡列表失败")
65
+	}
66
+
67
+	return res, total, nil
68
+}
69
+
70
+// EditCard 编辑卡 , 没有则新增
71
+func (s *CardServ) EditCard(card *card.CardInfo) error {
72
+	if card.CardId == "" {
73
+		return s.SaveCard(card)
74
+	} else {
75
+		return s.UpdateCard(card)
76
+	}
77
+}
78
+
79
+// SaveCard 保存卡
80
+// 字段校验没有在此函数中设置
81
+func (s *CardServ) SaveCard(cd *card.CardInfo) error {
82
+	if cd.CaseId == "" {
83
+		return errors.New("未指定案场")
84
+	}
85
+
86
+	cd.CardId = guid.NewGUIDString()
87
+
88
+	// 保存主信息
89
+	cardMain := cd.TaCouponCard
90
+	if err := s.dao.AddCard(&cardMain); err != nil {
91
+		utils.LogError("保存卡失败: " + err.Error())
92
+		return errors.New("保存卡失败")
93
+	}
94
+
95
+	// 保存图片
96
+	if err := s.dao.UpdateImages(cd.Images, cd.CardId); err != nil {
97
+		utils.LogError("保存卡图片失败: " + err.Error())
98
+		return errors.New("保存卡图片失败")
99
+	}
100
+
101
+	// 保存分享
102
+	share := cd.Share
103
+	share.CardId = cd.CardId
104
+	if err := s.dao.SaveCardShare(share); err != nil {
105
+		utils.LogError("保存卡分享失败: " + err.Error())
106
+		return errors.New("保存卡分享失败")
107
+	}
108
+
109
+	// 保存关联内容
110
+	if err := s.dao.UpdateTarget(cd.Targets, cd.CardId); err != nil {
111
+		utils.LogError("保存卡关联内容失败: " + err.Error())
112
+		return errors.New("保存卡关联内容失败")
113
+	}
114
+
115
+	return nil
116
+}
117
+
118
+// UpdateCard 更新卡
119
+// 字段校验没有在此函数中设置
120
+func (s *CardServ) UpdateCard(cd *card.CardInfo) error {
121
+	if cd.CaseId == "" {
122
+		return errors.New("未指定案场")
123
+	}
124
+
125
+	if cd.CardId == "" {
126
+		return errors.New("未指定卡")
127
+	}
128
+
129
+	// 更新主信息
130
+	cardMain := cd.TaCouponCard
131
+	if err := s.dao.UpdateCard(&cardMain, []string{"Card_name"}); err != nil {
132
+		utils.LogError("更新卡失败: " + err.Error())
133
+		return errors.New("更新卡失败")
134
+	}
135
+
136
+	// 更新图片
137
+	if err := s.dao.UpdateImages(cd.Images, cd.CardId); err != nil {
138
+		utils.LogError("更新卡图片失败: " + err.Error())
139
+		return errors.New("更新卡图片失败")
140
+	}
141
+
142
+	// 更新分享
143
+	share := cd.Share
144
+	share.CardId = cd.CardId
145
+	cols := []string{"Card_share_info", "use_rule", "use_instruction"}
146
+	if err := s.dao.UpdateCardShare(share, cols); err != nil {
147
+		utils.LogError("更新卡分享失败: " + err.Error())
148
+		return errors.New("更新卡分享失败")
149
+	}
150
+
151
+	// 关联内容 规则 不允许更新
152
+	return nil
153
+}
154
+
155
+// GiveCard 赠送卡券
156
+func (s *CardServ) GiveCard(CardID string, uids []string) error {
157
+	// 当前用户
158
+	userRaw := s.ctx.Get("user")
159
+	if userRaw == nil {
160
+		return errors.New("当前人员信息不正确, 请重试")
161
+	}
162
+	user := userRaw.(model.SysUser)
163
+
164
+	card, err := s.dao.GetCardByID(CardID)
165
+	if err != nil {
166
+		utils.LogError("获取卡失败: " + err.Error())
167
+		return errors.New("校验卡失败")
168
+	}
169
+
170
+	// 案场
171
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(card.CaseId); err != nil {
172
+		return err
173
+	}
174
+
175
+	// 卡必须状态正常
176
+	if card == nil || card.CardId == "" || card.Status != models.STATUS_NORMAL {
177
+		return errors.New("卡已失效或者不存在")
178
+	}
179
+
180
+	for _, uid := range uids {
181
+		// 获取客户信息
182
+		cust, err := s.custDao.GetCustomerByID(uid)
183
+		if err != nil {
184
+			utils.LogError("查询客户信息失败: " + err.Error())
185
+			return errors.New("校验客户信息失败")
186
+		}
187
+
188
+		if err := s.GiveCardTo(&user, cust, card); err != nil {
189
+			return err
190
+		}
191
+	}
192
+
193
+	return nil
194
+}
195
+
196
+// GiveCardTo 赠送卡
197
+// 本方法会被多出调用, 方法内使用 Context 将是不安全的
198
+func (s *CardServ) GiveCardTo(from *model.SysUser, to *model.TaCustomer, card *card.CardInfo) error {
199
+	if from.UserId == "" {
200
+		return errors.New("必须指定赠送人")
201
+	}
202
+
203
+	if to.CustomerId == "" {
204
+		return errors.New("必须指定接收人")
205
+	}
206
+
207
+	// 卡必须状态正常
208
+	if card.CardId == "" || card.Status != models.STATUS_NORMAL {
209
+		return errors.New("卡已失效或者不存在")
210
+	}
211
+
212
+	// 计算卡券有效期
213
+	startDate := card.StartDate
214
+	endDate := card.EndDate
215
+
216
+	// 检查用户是否已经有了该券
217
+	custcardS, err := s.dao.CheckCustCard(to.CustomerId, card.CardId, startDate, endDate)
218
+	if err != nil {
219
+		utils.LogError("校验客户卡失败: " + err.Error())
220
+		return errors.New("校验客户卡失败")
221
+	}
222
+
223
+	if custcardS != nil && len(custcardS) > 0 {
224
+		return errors.New("客户 " + to.CustomerName + " 已经拥有该券")
225
+	}
226
+
227
+	// 放入我的卡券
228
+	custcard := model.TaCustomerCard{
229
+		CardId:           card.CardId,
230
+		CustomerCardName: card.CardName,
231
+		CustomerId:       to.CustomerId,
232
+		StartDate:        startDate,
233
+		EndDate:          endDate,
234
+		ReceiveDate:      time.Now().Local(),
235
+		CaseId:           card.CaseId,
236
+		OrgId:            card.OrgId,
237
+	}
238
+
239
+	// 入库
240
+	if err := s.dao.SaveCustomerCards([]model.TaCustomerCard{custcard}); err != nil {
241
+		utils.LogError("保存客户卡失败: " + err.Error())
242
+		return errors.New("保存客户卡失败")
243
+	}
244
+
245
+	// TODO
246
+	// 券库存处理
247
+
248
+	return nil
249
+}
250
+
251
+// GetCardByID 获取卡
252
+// 未进行权限校验, 非安全的
253
+func (s *CardServ) GetCardByID(cardID string) (*card.CardInfo, error) {
254
+	card, err := s.dao.GetCardByID(cardID)
255
+	if err != nil {
256
+		utils.LogError("获取卡失败: " + err.Error())
257
+		return nil, errors.New("校验卡失败")
258
+	}
259
+
260
+	return card, nil
261
+}
262
+
263
+// GetCardByIDWithCheck 获取卡
264
+func (s *CardServ) GetCardByIDWithCheck(cardID string) (*card.CardInfo, error) {
265
+	card, err := s.dao.GetCardByID(cardID)
266
+	if err != nil {
267
+		utils.LogError("获取卡失败: " + err.Error())
268
+		return nil, errors.New("校验卡失败")
269
+	}
270
+
271
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(card.CaseId); err != nil {
272
+		return nil, err
273
+	}
274
+
275
+	return card, nil
276
+}

+ 179
- 59
service/coupon/coupon.go 查看文件

@@ -7,8 +7,11 @@ import (
7 7
 	"spaceofcheng/services/models/customer"
8 8
 	"spaceofcheng/services/models/model"
9 9
 	"spaceofcheng/services/utils"
10
+	"strings"
10 11
 	"time"
11 12
 
13
+	"github.com/astaxie/beego"
14
+
12 15
 	"github.com/yl10/kit/guid"
13 16
 )
14 17
 
@@ -30,19 +33,34 @@ func NewCouponServ(ctx *utils.Context) *CouponServ {
30 33
 
31 34
 // GetCouponList 获取优惠券列表
32 35
 func (s *CouponServ) GetCouponList(caseID string, pagenavi ...int) ([]model.TaCoupon, int64, error) {
33
-	if caseID == "" {
34
-		return nil, 0, errors.New("未指定案场")
35
-	}
36
+	filters := []string{}
36 37
 
37
-	if err := utils.NewAuthEngine(s.ctx).CheckCase(caseID); err != nil {
38
-		return nil, 0, err
39
-	}
38
+	if caseID != "" {
39
+		if err := utils.NewAuthEngine(s.ctx).CheckCase(caseID); err != nil {
40
+			return nil, 0, err
41
+		}
40 42
 
41
-	limit := utils.GetPageNaviLimit(pagenavi...)
42
-	filters := []string{
43
-		"case_id='" + caseID + "'",
43
+		filters = []string{
44
+			"case_id='" + caseID + "'",
45
+		}
46
+	} else {
47
+		casesRaw := s.ctx.Get("cases")
48
+		if casesRaw == nil {
49
+			return nil, 0, errors.New("请设置过滤案场")
50
+		}
51
+
52
+		cases := casesRaw.([]model.SysUserCase)
53
+		caseIDs := []string{}
54
+		for _, cs := range cases {
55
+			caseIDs = append(caseIDs, cs.CaseId)
56
+		}
57
+
58
+		filters = []string{
59
+			"case_id in ('" + strings.Join(caseIDs, "','") + "')",
60
+		}
44 61
 	}
45 62
 
63
+	limit := utils.GetPageNaviLimit(pagenavi...)
46 64
 	res, total, err := s.dao.GetCouponList(filters, limit)
47 65
 	if err != nil {
48 66
 		utils.LogError("查询优惠券列表失败: " + err.Error())
@@ -86,8 +104,8 @@ func (s *CouponServ) SaveCoupon(cp *coupon.CouponInfo) error {
86 104
 	// 保存分享
87 105
 	share := cp.Share
88 106
 	share.CouponId = cp.CouponId
89
-	cols := []string{"coupon_share_info", "use_rule", "use_instruction"}
90
-	if err := s.dao.UpdateCouponShare(&share, cols); err != nil {
107
+	// cols := []string{"coupon_share_info", "use_rule", "use_instruction"}
108
+	if err := s.dao.SaveCouponShare(&share); err != nil {
91 109
 		utils.LogError("保存优惠券分享失败: " + err.Error())
92 110
 		return errors.New("保存优惠券分享失败")
93 111
 	}
@@ -120,7 +138,18 @@ func (s *CouponServ) UpdateCoupon(cp *coupon.CouponInfo) error {
120 138
 
121 139
 	// 更新主信息
122 140
 	cpMain := cp.TaCoupon
123
-	if err := s.dao.UpdateCoupon(&cpMain, []string{"coupon_name"}); err != nil {
141
+	if err := s.dao.UpdateCoupon(&cpMain, []string{"coupon_name",
142
+		"coupon_type",
143
+		"send_type",
144
+		"video_url",
145
+		"cover_url",
146
+		"price",
147
+		"is_all",
148
+		"start_date",
149
+		"end_date",
150
+		"valid_days",
151
+		"total_count",
152
+		"case_id"}); err != nil {
124 153
 		utils.LogError("更新优惠券失败: " + err.Error())
125 154
 		return errors.New("更新优惠券失败")
126 155
 	}
@@ -140,7 +169,18 @@ func (s *CouponServ) UpdateCoupon(cp *coupon.CouponInfo) error {
140 169
 		return errors.New("更新优惠券分享失败")
141 170
 	}
142 171
 
143
-	// 关联内容 规则 不允许更新
172
+	// 保存关联内容
173
+	if err := s.dao.UpdateTarget(cp.Targets, cp.CouponId); err != nil {
174
+		utils.LogError("保存优惠券关联内容失败: " + err.Error())
175
+		return errors.New("保存优惠券关联内容失败")
176
+	}
177
+
178
+	// 保存规则
179
+	if err := s.dao.UpdateRule(cp.Rules, cp.CouponId); err != nil {
180
+		utils.LogError("保存优惠券规则失败: " + err.Error())
181
+		return errors.New("保存优惠券规则失败")
182
+	}
183
+
144 184
 	return nil
145 185
 }
146 186
 
@@ -165,7 +205,7 @@ func (s *CouponServ) GiveCoupon(couponID string, uids []string) error {
165 205
 	}
166 206
 
167 207
 	// 优惠券必须状态正常
168
-	if cp != nil || cp.CouponId == "" || cp.Status != models.STATUS_NORMAL {
208
+	if cp == nil || cp.CouponId == "" || cp.Status != models.STATUS_NORMAL {
169 209
 		return errors.New("优惠券已失效或者不存在")
170 210
 	}
171 211
 
@@ -176,17 +216,6 @@ func (s *CouponServ) GiveCoupon(couponID string, uids []string) error {
176 216
 		}
177 217
 	}
178 218
 
179
-	// 计算卡券有效期
180
-	startDate := cp.StartDate
181
-	endDate := cp.EndDate
182
-	if cp.ValidDays > 0 {
183
-		startDate = now
184
-		hs := int64(cp.ValidDays * 24)
185
-		endDate = now.Add(time.Hour * time.Duration(hs))
186
-	}
187
-
188
-	cps := make([]model.TaCustomerCoupon, 0)
189
-	recs := make([]model.TaCouponGiveRecord, 0)
190 219
 	for _, uid := range uids {
191 220
 		// 获取客户信息
192 221
 		cust, err := s.custDao.GetCustomerByID(uid)
@@ -195,56 +224,147 @@ func (s *CouponServ) GiveCoupon(couponID string, uids []string) error {
195 224
 			return errors.New("校验客户信息失败")
196 225
 		}
197 226
 
198
-		// 检查用户是否已经有了该券
199
-		custCPS, err := s.dao.CheckCustCoupon(uid, cp.CouponId, startDate, endDate)
200
-		if err != nil {
201
-			utils.LogError("校验客户优惠券失败: " + err.Error())
202
-			return errors.New("校验客户优惠券失败")
227
+		if err := s.GiveCouponTo(&user, cust, cp); err != nil {
228
+			return err
203 229
 		}
230
+	}
204 231
 
205
-		if custCPS != nil && len(custCPS) > 0 {
206
-			return errors.New("客户 " + cust.CustomerName + " 已经拥有该券")
207
-		}
232
+	return nil
233
+}
208 234
 
209
-		// 放入我的卡券
210
-		custCP := model.TaCustomerCoupon{
211
-			CouponId:           cp.CouponId,
212
-			CustomerCouponName: cp.CouponName,
213
-			CustomerId:         uid,
214
-			StartDate:          startDate,
215
-			EndDate:            endDate,
216
-			ReceiveDate:        now,
217
-			CaseId:             cp.CaseId,
218
-			OrgId:              cp.OrgId,
219
-		}
235
+// GiveCouponTo 赠送优惠券
236
+// 本方法会被多出调用, 方法内使用 Context 将是不安全的
237
+func (s *CouponServ) GiveCouponTo(from *model.SysUser, to *model.TaCustomer, cp *model.TaCoupon) error {
238
+	if from.UserId == "" {
239
+		return errors.New("必须指定赠送人")
240
+	}
241
+
242
+	if to.CustomerId == "" {
243
+		return errors.New("必须指定接收人")
244
+	}
245
+
246
+	// 优惠券必须状态正常
247
+	if cp.CouponId == "" || cp.Status != models.STATUS_NORMAL {
248
+		return errors.New("优惠券已失效或者不存在")
249
+	}
220 250
 
221
-		cps = append(cps, custCP)
222
-
223
-		// 放入赠送记录
224
-		rec := model.TaCouponGiveRecord{
225
-			GiftType:   models.GIVE_GIFT_COUPON,
226
-			GiftId:     cp.CouponId,
227
-			GiftName:   cp.CouponName,
228
-			FromId:     user.UserId,
229
-			FromName:   user.UserName,
230
-			ToId:       cust.CustomerId,
231
-			ToName:     cust.CustomerName,
232
-			CreateDate: now,
251
+	now := time.Now().Local()
252
+	if cp.ValidDays <= 0 {
253
+		if cp.EndDate.Before(now) {
254
+			return errors.New("优惠券已失效")
233 255
 		}
256
+	}
257
+
258
+	if cp.TotalCount < cp.SentCount+1 {
259
+		return errors.New("券已经没有库存!")
260
+	}
261
+
262
+	// 计算卡券有效期
263
+	startDate := cp.StartDate
264
+	endDate := cp.EndDate
265
+	if cp.ValidDays > 0 {
266
+		startDate = now
267
+		hs := int64(cp.ValidDays * 24)
268
+		endDate = now.Add(time.Hour * time.Duration(hs))
269
+	}
270
+
271
+	// 检查用户是否已经有了该券
272
+	custCPS, err := s.dao.CheckCustCoupon(to.CustomerId, cp.CouponId, startDate, endDate)
273
+	if err != nil {
274
+		utils.LogError("校验客户优惠券失败: " + err.Error())
275
+		return errors.New("校验客户优惠券失败")
276
+	}
277
+	beego.Error(custCPS)
278
+	if custCPS != nil && len(custCPS) > 0 {
279
+		return errors.New("客户 " + to.CustomerName + " 已经拥有该券")
280
+	}
281
+
282
+	// 放入我的卡券
283
+	custCP := model.TaCustomerCoupon{
284
+		CouponId:           cp.CouponId,
285
+		CustomerCouponName: cp.CouponName,
286
+		CustomerId:         to.CustomerId,
287
+		StartDate:          startDate,
288
+		EndDate:            endDate,
289
+		ReceiveDate:        now,
290
+		CaseId:             cp.CaseId,
291
+		OrgId:              cp.OrgId,
292
+	}
234 293
 
235
-		recs = append(recs, rec)
294
+	// 放入赠送记录
295
+	rec := model.TaCouponGiveRecord{
296
+		GiftType:   models.GIVE_GIFT_COUPON,
297
+		GiftId:     cp.CouponId,
298
+		GiftName:   cp.CouponName,
299
+		FromId:     from.UserId,
300
+		FromName:   from.UserName,
301
+		ToId:       to.CustomerId,
302
+		ToName:     to.CustomerName,
303
+		CreateDate: now,
236 304
 	}
237 305
 
238 306
 	// 入库
239
-	if err := s.dao.SaveCustomerCoupons(cps); err != nil {
307
+	if err := s.dao.SaveCustomerCoupons([]model.TaCustomerCoupon{custCP}); err != nil {
240 308
 		utils.LogError("保存客户优惠券失败: " + err.Error())
241 309
 		return errors.New("保存客户优惠券失败")
242 310
 	}
243 311
 
244
-	if err := s.dao.SaveCouponRecoreds(recs); err != nil {
312
+	if err := s.dao.SaveCouponRecoreds([]model.TaCouponGiveRecord{rec}); err != nil {
245 313
 		utils.LogError("保存优惠券赠送记录失败: " + err.Error())
246 314
 		return errors.New("保存优惠券赠送记录失败")
247 315
 	}
248 316
 
317
+	// TODO
318
+	// 券库存处理
319
+	cp.SentCount = cp.SentCount + 1
320
+	if err := s.dao.UpdateCoupon(cp, []string{"sent_count"}); err != nil {
321
+		utils.LogError("更新优惠券库存失败: " + err.Error())
322
+		return errors.New("更新优惠券库存失败")
323
+	}
249 324
 	return nil
250 325
 }
326
+
327
+// GetCouponByID 获取优惠券
328
+// 未进行权限校验, 非安全的
329
+func (s *CouponServ) GetCouponByID(cpID string) (*model.TaCoupon, error) {
330
+	cp, err := s.dao.GetCouponByID(cpID)
331
+	if err != nil {
332
+		utils.LogError("获取优惠券失败: " + err.Error())
333
+		return nil, errors.New("校验优惠券失败")
334
+	}
335
+
336
+	return cp, nil
337
+}
338
+
339
+// GetCouponByIDWithCheck 获取优惠券
340
+func (s *CouponServ) GetCouponByIDWithCheck(cpID string) (*coupon.CouponInfo, error) {
341
+	cp, err := s.dao.GetCouponInfoByID(cpID)
342
+	if err != nil {
343
+		utils.LogError("获取优惠券失败: " + err.Error())
344
+		return nil, errors.New("校验优惠券失败")
345
+	}
346
+
347
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(cp.CaseId); err != nil {
348
+		return nil, err
349
+	}
350
+
351
+	return cp, nil
352
+}
353
+
354
+// GetCouponBySendType 根据发送类型获取优惠券
355
+func (s *CouponServ) GetCouponBySendType(sendtype string) ([]model.TaCoupon, error) {
356
+	cases := s.ctx.Get("cases").([]model.SysUserCase)
357
+	caseIDs := ""
358
+	for _, value := range cases {
359
+		if caseIDs != "" {
360
+			caseIDs = caseIDs + ","
361
+		}
362
+		caseIDs = caseIDs + value.CaseId
363
+	}
364
+	coupon, err := s.dao.GetCouponBySendType(caseIDs, sendtype)
365
+	if err != nil {
366
+		utils.LogError("获取优惠券失败: " + err.Error())
367
+		return nil, errors.New("校验优惠券失败")
368
+	}
369
+	return coupon, nil
370
+}

+ 6
- 4
service/customer/customer.go 查看文件

@@ -29,8 +29,8 @@ func NewCustomerServ(ctx *utils.Context) *CustomerServ {
29 29
 }
30 30
 
31 31
 // GetCustWithWXList 获取客户列表
32
-func (s *CustomerServ) GetCustWithWXList(phone string, page ...int) ([]customer.CustWithWX, int64, error) {
33
-	return s.dao.CustWithWXList(phone, page...)
32
+func (s *CustomerServ) GetCustWithWXList(phone, username, recommendname, begindate, enddate string, page ...int) ([]customer.CustWithWX, int64, error) {
33
+	return s.dao.CustWithWXList(phone, username, recommendname, begindate, enddate, page...)
34 34
 }
35 35
 
36 36
 // GetCustWithWXByID 获取客户列表
@@ -141,7 +141,8 @@ func (s *CustomerServ) BindWechatUser(userMap *model.TaUserMapping, phone string
141 141
 	}
142 142
 
143 143
 	// triggerRegiteEvent 触发注册事件
144
-	utils.EmitEvent(events.EvtRegiste, *cust)
144
+	evtEngID := utils.EngineIDBy(cust.OrgId, cust.RecommendCase)
145
+	utils.EventEngineBus(evtEngID).EmitEvent(events.EvtRegiste, *cust)
145 146
 
146 147
 	// if cust.CustomerId == userMap.UserId {
147 148
 	// 	return cust, nil
@@ -246,7 +247,8 @@ func (s *CustomerServ) BindWechatCust(userMap *model.TaUserMapping, phone, caseI
246 247
 	}
247 248
 
248 249
 	// triggerRegiteEvent 触发注册事件
249
-	utils.EmitEvent(events.EvtRegiste, *cust)
250
+	evtEngID := utils.EngineIDBy(cust.OrgId, cust.RecommendCase)
251
+	utils.EventEngineBus(evtEngID).EmitEvent(events.EvtRegiste, *cust)
250 252
 
251 253
 	// 更新用户映射信息
252 254
 	userMap.UserId = cust.CustomerId

+ 52
- 33
service/events/events.go 查看文件

@@ -2,6 +2,9 @@ package events
2 2
 
3 3
 import (
4 4
 	"fmt"
5
+	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/utils"
5 8
 	"sync"
6 9
 
7 10
 	"github.com/zjxpcyc/tinyevent"
@@ -19,45 +22,61 @@ var EvtActions = map[string]tinyevent.Action{
19 22
 }
20 23
 
21 24
 // ListenAllEvent 监听所有事件
22
-func ListenAllEvent() {
25
+func ListenAllEvent(orgID, caseID string) {
23 26
 	mtx.Lock()
24 27
 	defer mtx.Unlock()
25 28
 
26
-	// // 所有需要执行的事件
27
-	// allEvts, err := getAllEvents()
28
-	// if err != nil {
29
-	// 	utils.LogError(err)
30
-	// }
31
-
32
-	// // 刷新中控中心
33
-	// utils.ResetEvtBus()
34
-
35
-	// for evt, acts := range allEvts {
36
-	// 	for _, actKey := range acts {
37
-	// 		act, ok := EvtActions[actKey]
38
-	// 		if ok {
39
-	// 			utils.ListenEvent(evt, act)
40
-	// 		}
41
-	// 	}
42
-	// }
29
+	evtEngID := utils.EngineIDBy(orgID, caseID)
30
+	evtEngine := utils.ResetEventEngineBus(evtEngID)
31
+
32
+	// 所有需要执行的事件
33
+	allEvts, err := getAllEvents(orgID, caseID)
34
+	if err != nil {
35
+		utils.LogError(err)
36
+	}
37
+
38
+	// 刷新中控中心
39
+	for evt, acts := range allEvts {
40
+		for _, actKey := range acts {
41
+			act, ok := EvtActions[actKey]
42
+			if ok {
43
+				evtEngine.ListenEvent(evt, act)
44
+			}
45
+		}
46
+	}
43 47
 }
44 48
 
45 49
 // getAllEvents 获取数据库配置
46
-func getAllEvents() (map[string][]string, error) {
47
-	// db := models.DBEngine
48
-
49
-	// var evts []model.SysActivity
50
-	// if err := db.Where("status=?", models.STATUS_NORMAL).Find(&evts); err != nil {
51
-	// 	return nil, err
52
-	// }
53
-
54
-	// TODO
55
-	return map[string][]string{
56
-		EvtRegiste: []string{
57
-			ActTest,
58
-			ActGiveCoupon,
59
-		},
60
-	}, nil
50
+func getAllEvents(orgID, caseID string) (map[string][]string, error) {
51
+	db := models.DBEngine
52
+
53
+	var evts []model.SysActivity
54
+	var acts []model.SysActivityAction
55
+
56
+	if err := db.Where("org_id=?", orgID).
57
+		And("case_id=?", caseID).
58
+		And("status=?", models.STATUS_NORMAL).
59
+		Find(&evts); err != nil {
60
+		utils.LogError("查询营销活动配置表失败: " + err.Error())
61
+		return nil, err
62
+	}
63
+
64
+	res := make(map[string][]string)
65
+	for _, evtSetting := range evts {
66
+		res[evtSetting.ActivityType] = make([]string, 0)
67
+		acts = make([]model.SysActivityAction, 0)
68
+
69
+		if err := db.Where("activity_id=?", evtSetting.ActivityId).Find(&acts); err != nil {
70
+			utils.LogError("查询营销活动配置明细失败: " + err.Error())
71
+			return nil, err
72
+		}
73
+
74
+		for _, act := range acts {
75
+			res[evtSetting.ActivityType] = append(res[evtSetting.ActivityType], act.ActiveType)
76
+		}
77
+	}
78
+
79
+	return res, nil
61 80
 }
62 81
 
63 82
 var tsAction = func(e tinyevent.Event) error {

+ 66
- 8
service/events/giveCoupon.go 查看文件

@@ -1,22 +1,80 @@
1 1
 package events
2 2
 
3 3
 import (
4
+	"errors"
5
+	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/service/coupon"
8
+	"spaceofcheng/services/utils"
9
+
4 10
 	"github.com/zjxpcyc/tinyevent"
5 11
 )
6 12
 
7 13
 // giveCoupon 赠送卡券
8 14
 // Event.Payload.customer  = model.TaCustomer
9
-// Event.Payload.caseId  = 案场ID
10 15
 var giveCoupon = func(e tinyevent.Event) error {
11
-	// db := models.DBEngine
16
+	hasDBError := false
17
+	ctx := NewContext()
18
+	defer DestroyContext(ctx, hasDBError)
19
+
20
+	if e.Payload == nil {
21
+		hasDBError = true
22
+		utils.LogError("注册送券失败, 没有用户信息")
23
+		return errors.New("注册送券失败, 没有用户信息")
24
+	}
25
+	dtRaw := e.Payload.(map[string]interface{})
26
+
27
+	cust := dtRaw["customer"].(model.TaCustomer)
28
+	caseID := cust.RecommendCase
29
+	orgID := cust.OrgId
30
+
31
+	query := `
32
+		SELECT
33
+			t.*
34
+		FROM
35
+			sys_activity_action t
36
+		JOIN sys_activity s ON t.activity_id = s.activity_id
37
+		WHERE
38
+			s.org_id = ?
39
+		AND s.case_id = ?
40
+		AND s.status = ?
41
+		AND t.active_type = ?
42
+	`
43
+
44
+	var gifts []model.SysActivityAction
45
+	if err := models.DBEngine.SQL(query, orgID, caseID, models.STATUS_NORMAL, e.Name).Find(&gifts); err != nil {
46
+		hasDBError = true
47
+		utils.LogError("检查营销活动失败: " + err.Error())
48
+		return errors.New("检查营销活动失败")
49
+	}
50
+
51
+	fromUser := model.SysUser{
52
+		UserId:   "SYSTEM",
53
+		UserName: "system",
54
+	}
55
+
56
+	cpServ := coupon.NewCouponServ(ctx)
12 57
 
13
-	// if e.Payload == nil {
14
-	// 	utils.LogError("注册送券失败, 没有用户信息")
15
-	// }
16
-	// dtRaw := e.Payload.(map[string]interface{})
58
+	for _, gift := range gifts {
59
+		switch gift.ResourceType {
60
+		case models.GIVE_GIFT_COUPON:
61
+			cpID := gift.ResourceDesc
62
+			cp, err := cpServ.GetCouponByID(cpID)
63
+			if err != nil {
64
+				utils.LogError("获取优惠券失败: " + err.Error())
65
+				hasDBError = true
66
+				return errors.New("校验优惠券失败")
67
+			}
17 68
 
18
-	// cust := dtRaw["customer"].(model.TaCustomer)
19
-	// caseID := dtRaw["caseId"].(string)
69
+			if err := cpServ.GiveCouponTo(&fromUser, &cust, cp); err != nil {
70
+				hasDBError = true
71
+				return err
72
+			}
73
+		case models.GIVE_GIFT_EXPERIENCECARD:
74
+		case models.GIVE_GIFT_GYM:
75
+		default:
76
+		}
77
+	}
20 78
 
21 79
 	return nil
22 80
 }

+ 25
- 0
service/events/utils.go 查看文件

@@ -0,0 +1,25 @@
1
+package events
2
+
3
+import (
4
+	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/utils"
6
+)
7
+
8
+// NewContext 初始化 ctx 实例
9
+func NewContext() *utils.Context {
10
+	ctx := utils.NewContext(models.DBEngine, nil)
11
+	ctx.Ready()
12
+
13
+	return ctx
14
+}
15
+
16
+// DestroyContext 注销 ctx
17
+func DestroyContext(ctx *utils.Context, hasError bool) {
18
+	if !hasError {
19
+		ctx.DB.Commit()
20
+	} else {
21
+		ctx.DB.Rollback()
22
+	}
23
+
24
+	ctx.Destroy()
25
+}

+ 9
- 1
service/goods/spec.go 查看文件

@@ -68,7 +68,15 @@ func (s *GoodsServ) SaveGoodsSpec(goodsSpec model.TdSpec) (*model.TdSpec, error)
68 68
 
69 69
 // DelGoodsSpec 删除商品类型
70 70
 func (s *GoodsServ) DelGoodsSpec(specid string) error {
71
-	err := s.dao.DelGoodsSpec(specid)
71
+	goods, err := s.dao.GetGoodsBySpec(specid)
72
+	if err != nil {
73
+		utils.LogError("删除商品规格失败: " + err.Error())
74
+		return errors.New("删除商品规格失败")
75
+	}
76
+	if len(goods) > 0 {
77
+		return errors.New("已关联商品。不允许删除")
78
+	}
79
+	err = s.dao.DelGoodsSpec(specid)
72 80
 	if err != nil {
73 81
 		utils.LogError("删除商品规格失败: " + err.Error())
74 82
 		return errors.New("删除商品规格失败")

+ 9
- 1
service/goods/type.go 查看文件

@@ -82,7 +82,15 @@ func (s *GoodsServ) SaveGoodsType(goodsType model.TdGoodsType) (*model.TdGoodsTy
82 82
 
83 83
 // DelGoodsType 删除商品类型
84 84
 func (s *GoodsServ) DelGoodsType(typeid string) error {
85
-	err := s.dao.DelGoodsType(typeid)
85
+	goods, err := s.dao.GetGoodsByType(typeid)
86
+	if err != nil {
87
+		utils.LogError("删除商品类型失败: " + err.Error())
88
+		return errors.New("删除商品类型失败")
89
+	}
90
+	if len(goods) > 0 {
91
+		return errors.New("已关联商品。不允许删除")
92
+	}
93
+	err = s.dao.DelGoodsType(typeid)
86 94
 	if err != nil {
87 95
 		utils.LogError("删除商品类型失败: " + err.Error())
88 96
 		return errors.New("删除商品类型失败")

+ 45
- 22
service/gymcard/gymcard.go 查看文件

@@ -112,9 +112,11 @@ func (s *GymcardServ) SaveGymcard(newGym gymcard.Gymcard) (*gymcard.Gymcard, err
112 112
 	if newGym.GymCardId == "" {
113 113
 		newGymCard = newGym.TaGymCard
114 114
 		cardGym, err = s.dao.AddGymcard(newGymCard)
115
-		err = s.dao.AddGymcardImg(newGym.GymCardId, newGym.CardImageUrl)
116
-		newGym.TaGymCard = cardGym
117
-		err = s.dao.AddGymcardShare(newGym.GymCardId, newGym.CardShareInfo, newGym.CardUseRule, newGym.CardUseInstruction)
115
+		err = s.dao.AddGymcardImg(newGymCard.GymCardId, newGym.CardImageUrl)
116
+		err = s.dao.AddGymcardShare(newGymCard.GymCardId, newGym.CardShareInfo, newGym.CardUseRule, newGym.CardUseInstruction)
117
+		if newGym.SentType == 1 {
118
+			err = s.dao.AddCardChannel(cardGym.GymCardId, newGym.ChannelId)
119
+		}
118 120
 	} else {
119 121
 		err = s.dao.EditGymcardImg(newGym.GymCardId, newGym.CardImageUrl)
120 122
 		err = s.dao.EditGymcardShare(newGym.GymCardId, newGym.CardShareInfo, newGym.CardUseRule, newGym.CardUseInstruction)
@@ -131,38 +133,27 @@ func (s *GymcardServ) SendGymCardToUser(gymcardId, sysuserId string) (*model.TaC
131 133
 	var customerGym *model.TaCustomerGym
132 134
 	customer := s.ctx.Get("customer").(model.TaCustomer)
133 135
 	var sysuser *model.SysUser
134
-	var sendRecord *model.TaCouponGiveRecord
135 136
 	gymCard, err := s.dao.GetGymcardById(gymcardId)
136 137
 	if err != nil {
137 138
 		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
138 139
 		return nil, errors.New("发送游泳健身卡给客户失败")
139 140
 	}
140
-	gymCard.SentCount = gymCard.SentCount + 1
141
-	customerGym, err = s.dao.SendGymcardToCustomer(&gymCard.TaGymCard, customer.CustomerId)
141
+	sysuser, err = s.cdao.GetUserByID(sysuserId)
142 142
 	if err != nil {
143 143
 		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
144 144
 		return nil, errors.New("发送游泳健身卡给客户失败")
145 145
 	}
146
-	sysuser, err = s.cdao.GetUserByID(sysuserId)
147
-	if err != nil {
148
-		utils.LogError("记录发健身卡记录失败" + err.Error())
149
-		return nil, errors.New("记录发健身卡记录失败")
150
-	}
151
-	sendRecord.FromId = sysuser.UserId
152
-	sendRecord.FromName = sysuser.RealName
153
-	sendRecord.GiftId = gymCard.GymCardId
154
-	sendRecord.GiftName = gymCard.GymCardName
155
-	sendRecord.ToId = customer.CustomerId
156
-	sendRecord.ToName = customer.CustomerName
157
-	err = s.dao.AddGiveRecord(sendRecord)
146
+	gymCard.SentCount = gymCard.SentCount + 1
147
+	customerGym, err = s.dao.SendGymcardToCustomer(&gymCard.TaGymCard, customer.CustomerId, sysuserId, sysuser.RealName)
158 148
 	if err != nil {
159
-		utils.LogError("记录发健身卡记录失败" + err.Error())
160
-		return nil, errors.New("记录发健身卡记录失败")
149
+		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
150
+		return nil, errors.New("发送游泳健身卡给客户失败")
161 151
 	}
152
+
162 153
 	err = s.dao.EditGymcard(&gymCard.TaGymCard)
163 154
 	if err != nil {
164
-		utils.LogError("记录发健身卡记录失败" + err.Error())
165
-		return nil, errors.New("记录发健身卡记录失败")
155
+		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
156
+		return nil, errors.New("发送游泳健身卡给客户失败")
166 157
 	}
167 158
 	return customerGym, nil
168 159
 }
@@ -186,6 +177,7 @@ func (s *GymcardServ) UpdateCustomerGym(customerGymId, caseid string) error {
186 177
 	}
187 178
 	if gymCard.GymTypeId == "once" {
188 179
 		customerGym.Status = models.STATUS_DEL
180
+		customerGym.CardStatus = models.CARD_COUPON_USED
189 181
 		gymCard.UsedCount = gymCard.UsedCount + 1
190 182
 	} else {
191 183
 		if customerGym.StartDate.IsZero() {
@@ -222,3 +214,34 @@ func (s *GymcardServ) UpdateCustomerGym(customerGymId, caseid string) error {
222 214
 	return err
223 215
 
224 216
 }
217
+func (s *GymcardServ) deleteGymCard(gymcardId string) error {
218
+	gymCard, err := s.dao.GetGymcardById(gymcardId)
219
+	if err != nil {
220
+		utils.LogError("删除健身卡失败" + err.Error())
221
+		return errors.New("删除健身卡失败")
222
+	}
223
+	err = s.dao.DeleteGymcard(gymcardId)
224
+	if err != nil {
225
+		utils.LogError("删除健身卡失败" + err.Error())
226
+		return errors.New("删除健身卡失败")
227
+	}
228
+	err = s.dao.DeleteCardImg(gymcardId)
229
+	if err != nil {
230
+		utils.LogError("删除健身卡失败" + err.Error())
231
+		return errors.New("删除健身卡失败")
232
+	}
233
+	err = s.dao.DeleteCardShare(gymcardId)
234
+	if err != nil {
235
+		utils.LogError("删除健身卡失败" + err.Error())
236
+		return errors.New("删除健身卡失败")
237
+	}
238
+	if gymCard.SentType == 1 {
239
+		err = s.dao.DeleteCardChannel(gymcardId)
240
+		if err != nil {
241
+			utils.LogError("删除健身卡失败" + err.Error())
242
+			return errors.New("删除健身卡失败")
243
+		}
244
+	}
245
+	return err
246
+
247
+}

+ 2
- 2
service/sys.go 查看文件

@@ -75,7 +75,7 @@ func (s *SysServ) SetCustomer(id string) error {
75 75
 func (s *SysServ) SaveNewCustomer(wxInfo map[string]interface{}, userMap *model.TaUserMapping) (*model.TaCustomer, error) {
76 76
 	// 微信相关字段
77 77
 	nickyName := wxInfo["nickname"].(string)
78
-	sex := wxInfo["sex"].(int)
78
+	sex := wxInfo["sex"].(float64)
79 79
 	headimgurl := wxInfo["headimgurl"].(string)
80 80
 
81 81
 	org := s.ctx.Get("org").(model.SysOrg)
@@ -83,7 +83,7 @@ func (s *SysServ) SaveNewCustomer(wxInfo map[string]interface{}, userMap *model.
83 83
 	cust := model.TaCustomer{
84 84
 		CustomerName: nickyName,
85 85
 		Name:         nickyName,
86
-		Sex:          sex,
86
+		Sex:          int(sex),
87 87
 		Headimgurl:   headimgurl,
88 88
 		OrgId:        org.OrgId,
89 89
 	}

+ 174
- 7
service/user.go 查看文件

@@ -3,6 +3,7 @@ package service
3 3
 import (
4 4
 	"errors"
5 5
 	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/card"
6 7
 	"spaceofcheng/services/models/cases"
7 8
 	"spaceofcheng/services/models/customer"
8 9
 	"spaceofcheng/services/models/model"
@@ -19,6 +20,7 @@ type UserServ struct {
19 20
 	dao         *system.UserDAO
20 21
 	casedao     *cases.CaseDAO
21 22
 	customerdao *customer.CustomerDAO
23
+	carddao     *card.CardDAO
22 24
 }
23 25
 
24 26
 // NewUserServ 初始化
@@ -28,6 +30,7 @@ func NewUserServ(ctx *utils.Context) *UserServ {
28 30
 		dao:         system.NewUserDAO(ctx),
29 31
 		casedao:     cases.NewCaseDAO(ctx),
30 32
 		customerdao: customer.NewCustomerDAO(ctx),
33
+		carddao:     card.NewCardDAO(ctx),
31 34
 	}
32 35
 }
33 36
 
@@ -64,7 +67,19 @@ func (s *UserServ) GetCurrentEnvVars() (map[string]interface{}, error) {
64 67
 	user := s.ctx.Get("user").(model.SysUser)
65 68
 	user.Pwd = ""
66 69
 	// 当前用户案场
67
-	cases := s.ctx.Get("cases").([]model.SysUserCase)
70
+	sessionCase := s.ctx.Get("cases").([]model.SysUserCase)
71
+	caseIDs := ""
72
+	for _, value := range sessionCase {
73
+		if caseIDs != "" {
74
+			caseIDs = caseIDs + ","
75
+		}
76
+		caseIDs = caseIDs + value.CaseId
77
+	}
78
+	cases, err := s.casedao.GetCaseByIDs(caseIDs)
79
+	if err != nil {
80
+		beego.Error(err)
81
+		return nil, err
82
+	}
68 83
 	// 当前用户角色
69 84
 	roles, err := s.dao.GetUserRole(user.UserId)
70 85
 	if err != nil {
@@ -79,10 +94,11 @@ func (s *UserServ) GetCurrentEnvVars() (map[string]interface{}, error) {
79 94
 	}
80 95
 
81 96
 	rtn := map[string]interface{}{
82
-		"user":  user,
83
-		"cases": cases,
84
-		"roles": roles,
85
-		"menus": menus,
97
+		"user":      user,
98
+		"cases":     cases,
99
+		"roles":     roles,
100
+		"menus":     menus,
101
+		"clienturl": beego.AppConfig.String("clienturl"),
86 102
 	}
87 103
 
88 104
 	return rtn, nil
@@ -150,6 +166,25 @@ func (s *UserServ) SaveUser(user system.SysUserForm) (*model.SysUser, error) {
150 166
 
151 167
 	var err error
152 168
 	var newUSer *model.SysUser
169
+
170
+	// 手机号码与用户名校验
171
+	var isok bool
172
+	isok, err = s.dao.CheckUserName(user.UserId, user.UserName, user.OrgId)
173
+	if err != nil {
174
+		beego.Error(err)
175
+		return nil, err
176
+	}
177
+	if !isok {
178
+		return nil, errors.New("用户名重复!")
179
+	}
180
+	isok, err = s.dao.CheckUserPhone(user.UserId, user.Phone, user.OrgId)
181
+	if err != nil {
182
+		beego.Error(err)
183
+		return nil, err
184
+	}
185
+	if !isok {
186
+		return nil, errors.New("手机号码重复!")
187
+	}
153 188
 	if user.UserId != "" {
154 189
 		err = s.dao.UpdateUser(userInfo)
155 190
 		if err != nil {
@@ -338,14 +373,14 @@ func (s *UserServ) SaveUserRole(userid, roleids string) error {
338 373
 }
339 374
 
340 375
 // GetUserCustomer 获取我的推荐客户
341
-func (s *UserServ) GetUserCustomer(userid string, page int, pageSize int) ([]model.TaCustomer, error) {
376
+func (s *UserServ) GetUserCustomer(userid, isrecommend string, page int, pageSize int) ([]model.TaCustomer, error) {
342 377
 	if pageSize == 0 {
343 378
 		pageSize = PAGENUM
344 379
 	}
345 380
 	if page == 0 {
346 381
 		page = 1
347 382
 	}
348
-	customers, err := s.dao.GetUserCustomer(userid, page, pageSize)
383
+	customers, err := s.dao.GetUserCustomer(userid, isrecommend, page, pageSize)
349 384
 	return customers, err
350 385
 }
351 386
 
@@ -377,3 +412,135 @@ func (s *UserServ) GetUserByTel(tel string) (*model.SysUser, error) {
377 412
 	user, err := s.dao.GetUserByPhone(tel)
378 413
 	return user, err
379 414
 }
415
+
416
+// GetForbidUsers 获取所有禁止人员信息
417
+func (s *UserServ) GetForbidUsers() ([]model.TaForbidUser, error) {
418
+	customer := s.ctx.Get("customer").(model.TaCustomer)
419
+	if customer.CustomerId == "" || customer.UserId == "" {
420
+		return nil, errors.New("当前用户没有权限查看用户信息")
421
+	}
422
+	caseinfo, err := s.dao.GetUserBelongCase(customer.UserId)
423
+	if err != nil {
424
+		return nil, err
425
+	}
426
+	// if err := utils.NewAuthEngine(s.ctx).CheckCase(caseid); err != nil {
427
+	// 	return nil, err
428
+	// }
429
+	users, err := s.dao.GetForbidUsers(caseinfo.CaseId)
430
+	return users, err
431
+}
432
+
433
+// SaveForbidUser 保存禁止人员信息
434
+func (s *UserServ) SaveForbidUser(userid string, forbidtype string) error {
435
+	user, err := s.dao.GetUserByID(userid)
436
+	if err != nil {
437
+		return err
438
+	}
439
+	if user.Status != models.STATUS_NORMAL {
440
+		return errors.New("设置的用户状态异常!不允许操作!")
441
+	}
442
+
443
+	usercase, err := s.dao.GetUserBelongCase(userid)
444
+	if err != nil {
445
+		return err
446
+	}
447
+	if usercase.CaseId == "" {
448
+		return errors.New("用户不存在所属案场!不允许操作!")
449
+	}
450
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(usercase.CaseId); err != nil {
451
+		return err
452
+	}
453
+	fibUsers, err := s.dao.GetForbidUserByUserID(userid)
454
+	if err != nil {
455
+		return err
456
+	}
457
+	if fibUsers != nil && len(fibUsers) > 0 {
458
+		for _, u := range fibUsers {
459
+			if u.ForbidType == forbidtype && u.Status == models.STATUS_NORMAL {
460
+				return errors.New("当前人员已经被禁止!不允许重复禁止")
461
+			}
462
+		}
463
+	}
464
+
465
+	var usertype = ""
466
+	if len(user.UserType) > 0 {
467
+		usertype = user.UserType[0].TypeId
468
+	}
469
+
470
+	var forbiduser = model.TaForbidUser{
471
+		UserId:     user.UserId,
472
+		UserType:   usertype,
473
+		ForbidType: forbidtype,
474
+		CaseId:     usercase.CaseId,
475
+	}
476
+
477
+	err = s.dao.SaveForbidUser(&forbiduser)
478
+	return err
479
+}
480
+
481
+// OpenForbidUser 开启禁止人员
482
+func (s *UserServ) OpenForbidUser(userid string, forbidtype string) error {
483
+	user, err := s.dao.GetUserByID(userid)
484
+	if err != nil {
485
+		return err
486
+	}
487
+	if user.Status != models.STATUS_NORMAL {
488
+		return errors.New("设置的用户状态异常!不允许操作!")
489
+	}
490
+
491
+	usercase, err := s.dao.GetUserBelongCase(userid)
492
+	if err != nil {
493
+		return err
494
+	}
495
+	if usercase.CaseId == "" {
496
+		return errors.New("用户不存在所属案场!不允许操作!")
497
+	}
498
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(usercase.CaseId); err != nil {
499
+		return err
500
+	}
501
+	fibUsers, err := s.dao.GetForbidUserByUserID(userid)
502
+	if err != nil {
503
+		return err
504
+	}
505
+	var ishas = false
506
+	var forbiduser = model.TaForbidUser{}
507
+	if fibUsers != nil && len(fibUsers) > 0 {
508
+		for _, u := range fibUsers {
509
+			if u.ForbidType == forbidtype && u.Status == models.STATUS_NORMAL {
510
+				ishas = true
511
+				forbiduser = u
512
+			}
513
+		}
514
+	}
515
+
516
+	if !ishas {
517
+		return errors.New("用户没有被关闭的功能!")
518
+	}
519
+	err = s.dao.OpenForbidUser(&forbiduser)
520
+	return err
521
+}
522
+
523
+// GetCaseUserByType 根据用户类型获取人员信息
524
+func (s *UserServ) GetCaseUserByType(usertype string) ([]system.UserWithCouponAndCard, error) {
525
+	customer := s.ctx.Get("customer").(model.TaCustomer)
526
+	if customer.CustomerId == "" || customer.UserId == "" {
527
+		return nil, errors.New("当前用户没有权限查看用户信息")
528
+	}
529
+	caseinfo, err := s.dao.GetUserBelongCase(customer.UserId)
530
+	if err != nil {
531
+		return nil, err
532
+	}
533
+
534
+	users, err := s.dao.GetCaseUserByType(caseinfo.CaseId, usertype)
535
+	if err != nil {
536
+		return nil, err
537
+	}
538
+	for inx, user := range users {
539
+		cards, err := s.carddao.GetCustomerCardByCardAndUser(caseinfo.CaseId, user.UserId)
540
+		if err != nil {
541
+			return nil, err
542
+		}
543
+		users[inx].CustomerCard = cards
544
+	}
545
+	return users, err
546
+}

+ 5
- 2
service/verify/verify.go 查看文件

@@ -77,13 +77,16 @@ func (s *VerifyServ) GetCustomerCourseDetailByTel(tel, caseids string, page, pag
77 77
 		utils.LogError("获取列表失败: " + err.Error())
78 78
 		return nil, errors.New("获取列表失败")
79 79
 	}
80
-	customerId := customerDetail[0].CustomerId
80
+	if len(customerDetail) == 0 {
81
+		return nil, errors.New("获取列表失败")
82
+	}
83
+	customerID := customerDetail[0].CustomerId
81 84
 	total, err := s.dao.GetCustomerCourseListByTelCount(tel, caseids)
82 85
 	if err != nil {
83 86
 		utils.LogError("获取列表失败: " + err.Error())
84 87
 		return nil, errors.New("获取列表失败")
85 88
 	}
86
-	customer, err := s.cdao.GetCustomerByID(customerId)
89
+	customer, err := s.cdao.GetCustomerByID(customerID)
87 90
 	if err != nil {
88 91
 		utils.LogError("获取列表失败: " + err.Error())
89 92
 		return nil, errors.New("获取列表失败")

+ 60
- 36
utils/event.go 查看文件

@@ -1,49 +1,73 @@
1 1
 package utils
2 2
 
3
-// type EventEngine struct {
4
-// 	ID     string
5
-// 	engine *tinyevent.DefaultBus
6
-// }
3
+import "github.com/zjxpcyc/tinyevent"
7 4
 
8
-// var evtBus map[string]*EventEngine
5
+// EventEngine Event Engine
6
+type EventEngine struct {
7
+	ID     string
8
+	engine *tinyevent.DefaultBus
9
+}
9 10
 
10
-// func NewEventEngineBus(id string) *EventEngine {
11
-// 	if evtBus == nil {
12
-// 		evtBus = make(map[string]*EventEngine)
13
-// 	}
11
+var evtBus map[string]*EventEngine
14 12
 
15
-// 	if id == "" {
16
-// 		return nil
17
-// 	}
13
+// EventEngineBus 初始化实例
14
+func EventEngineBus(id string) *EventEngine {
15
+	if evtBus == nil {
16
+		evtBus = make(map[string]*EventEngine)
17
+	}
18 18
 
19
-// 	evtEngine := &EventEngine{
20
-// 		ID:     id,
21
-// 		engine: new(tinyevent.DefaultBus),
22
-// 	}
19
+	if id == "" {
20
+		return nil
21
+	}
23 22
 
24
-// 	evtBus[id] = evtEngine
23
+	if evtBus[id] == nil {
24
+		evtEngine := &EventEngine{
25
+			ID:     id,
26
+			engine: new(tinyevent.DefaultBus),
27
+		}
25 28
 
26
-// 	return evtEngine
27
-// }
29
+		evtBus[id] = evtEngine
30
+	}
28 31
 
29
-// // EmitEvent 执行事件
30
-// func (t EventEngine) EmitEvent(evt string, payload interface{}) {
31
-// 	e := tinyevent.Event{
32
-// 		Name:    evt,
33
-// 		Payload: payload,
34
-// 	}
32
+	return evtBus[id]
33
+}
35 34
 
36
-// 	t.engine.Emit(e)
37
-// }
35
+// ResetEventEngineBus 重设事件管理引擎
36
+func ResetEventEngineBus(id string) *EventEngine {
37
+	if id == "" || evtBus[id] == nil {
38
+		return nil
39
+	}
38 40
 
39
-// // ListenEvent 注册监听
40
-// func (t EventEngine) ListenEvent(evt string, act tinyevent.Action) string {
41
-// 	return t.engine.On(evt, act)
42
-// }
41
+	evtEngine := &EventEngine{
42
+		ID:     id,
43
+		engine: new(tinyevent.DefaultBus),
44
+	}
43 45
 
44
-// // UnListenEvt 取消监听
45
-// func (t EventEngine) UnListenEvt(id string) {
46
-// 	t.engine.Off(id)
47
-// }
46
+	evtBus[id] = evtEngine
47
+	return evtEngine
48
+}
48 49
 
49
-func EmitEvent(evt string, payload interface{}) {}
50
+// EmitEvent 执行事件
51
+func (t EventEngine) EmitEvent(evt string, payload interface{}) {
52
+	e := tinyevent.Event{
53
+		Name:    evt,
54
+		Payload: payload,
55
+	}
56
+
57
+	t.engine.Emit(e)
58
+}
59
+
60
+// ListenEvent 注册监听
61
+func (t EventEngine) ListenEvent(evt string, act tinyevent.Action) string {
62
+	return t.engine.On(evt, act)
63
+}
64
+
65
+// UnListenEvt 取消监听
66
+func (t EventEngine) UnListenEvt(id string) {
67
+	t.engine.Off(id)
68
+}
69
+
70
+// EngineIDBy 获取 Engine Id
71
+func EngineIDBy(orgID, caseID string) string {
72
+	return orgID + caseID
73
+}