ソースを参照

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

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
 EnableDocs = true
6
 EnableDocs = true
7
 sessionon = true
7
 sessionon = true
8
 excelpath = ./
8
 excelpath = ./
9
+clienturl = http://dev.ycjcjy.com/c-v2
9
 
10
 
10
 
11
 
11
 [cros]
12
 [cros]

+ 174
- 0
controllers/card/card.go ファイルの表示

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 ファイルの表示

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
 // CustWXList 获取客户列表
25
 // CustWXList 获取客户列表
26
 func (c *CustomerController) CustWXList() {
26
 func (c *CustomerController) CustWXList() {
27
 	phone := c.GetString("phone")
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
 	page, _ := c.GetInt("page")
32
 	page, _ := c.GetInt("page")
29
 	pageSize, _ := c.GetInt("pagesize")
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
 	if err != nil {
36
 	if err != nil {
33
 		utils.LogError("获取客户列表失败: " + err.Error())
37
 		utils.LogError("获取客户列表失败: " + err.Error())
34
 		c.ResponseError(
38
 		c.ResponseError(

+ 6
- 6
controllers/gymcard/gymcard.go ファイルの表示

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

+ 55
- 2
controllers/user/user.go ファイルの表示

137
 
137
 
138
 // GetUserCustomer 我的推荐客户
138
 // GetUserCustomer 我的推荐客户
139
 func (c *UserController) GetUserCustomer() {
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
 	page, _ := c.GetInt("page")
144
 	page, _ := c.GetInt("page")
142
 	pageSize, _ := c.GetInt("pagesize")
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
 	if err != nil {
148
 	if err != nil {
145
 		c.ResponseError(err)
149
 		c.ResponseError(err)
146
 	}
150
 	}
244
 	}
248
 	}
245
 	c.ResponseJSON(user)
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 ファイルの表示

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 ファイルの表示

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 ファイルの表示

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 ファイルの表示

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 ファイルの表示

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
 
154
 
155
 	return users, nil
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
 	GIVE_GIFT_GYM            = "gym"
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
 const (
128
 const (
122
 	GYM_CARD_ONCE    = "once"
129
 	GYM_CARD_ONCE    = "once"
124
 	GYM_CARD_QUARTER = "quarter"
131
 	GYM_CARD_QUARTER = "quarter"
125
 	GYM_CARD_YEAR    = "year"
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
 	"spaceofcheng/services/models"
6
 	"spaceofcheng/services/models"
7
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/models/model"
8
 	"spaceofcheng/services/utils"
8
 	"spaceofcheng/services/utils"
9
+	"strconv"
9
 	"strings"
10
 	"strings"
10
 	"time"
11
 	"time"
11
 
12
 
45
 
46
 
46
 	query := `
47
 	query := `
47
 		SELECT
48
 		SELECT
48
-			t.*, s.coupon_type_name
49
+			*
49
 		FROM
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
 		WHERE
52
 		WHERE
53
-			t.coupon_id = ?
53
+			coupon_id = ?
54
 	`
54
 	`
55
 
55
 
56
 	if _, err := m.db.SQL(query, id).Get(cp); err != nil {
56
 	if _, err := m.db.SQL(query, id).Get(cp); err != nil {
96
 	filterString := ""
96
 	filterString := ""
97
 	if len(filters) > 0 {
97
 	if len(filters) > 0 {
98
 		filterString = strings.Join(filters, " and ")
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
 	total, err := utils.NewPageNaviEngine(m.ctx).GetPageList(&cps, fmt.Sprintf(sql, filterString), limit)
104
 	total, err := utils.NewPageNaviEngine(m.ctx).GetPageList(&cps, fmt.Sprintf(sql, filterString), limit)
104
 	if err != nil {
105
 	if err != nil {
120
 		cp.CreateUser = user.UserId
121
 		cp.CreateUser = user.UserId
121
 	}
122
 	}
122
 
123
 
124
+	org := m.ctx.Get("org").(model.SysOrg)
125
+	cp.OrgId = org.OrgId
126
+
123
 	cp.Status = models.STATUS_NORMAL
127
 	cp.Status = models.STATUS_NORMAL
124
 	cp.CreateDate = time.Now().Local()
128
 	cp.CreateDate = time.Now().Local()
125
 
129
 
215
 			)
219
 			)
216
 		)
220
 		)
217
 	`
221
 	`
218
-
219
 	if err := m.db.SQL(
222
 	if err := m.db.SQL(
220
 		query,
223
 		query,
221
 		couponID,
224
 		couponID,
222
-		models.STATUS_NORMAL,
223
 		custID,
225
 		custID,
226
+		models.STATUS_NORMAL,
224
 		startDate,
227
 		startDate,
225
 		endDate,
228
 		endDate,
226
 		startDate,
229
 		startDate,
248
 
251
 
249
 	return nil
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
 		}
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
 		return err
26
 		return err
26
 	}
27
 	}
27
 
28
 

+ 11
- 3
models/coupon/target.go ファイルの表示

1
 package coupon
1
 package coupon
2
 
2
 
3
 import (
3
 import (
4
+	"errors"
4
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
5
 )
6
 )
6
 
7
 
11
 	}
12
 	}
12
 
13
 
13
 	for i := range targets {
14
 	for i := range targets {
15
+		if targets[i].TargetId == "" {
16
+			return errors.New("关联内容不能为空")
17
+		}
18
+
19
+		// TODO
20
+		// 校验关联内容是否有效
21
+
14
 		targets[i].CouponId = couponID
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
 		return err
28
 		return err
20
 	}
29
 	}
21
-
22
 	if _, err := m.db.Insert(targets); err != nil {
30
 	if _, err := m.db.Insert(targets); err != nil {
23
 		return err
31
 		return err
24
 	}
32
 	}

+ 1
- 2
models/coupon/types.go ファイルの表示

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

+ 27
- 4
models/customer/customer.go ファイルの表示

27
 }
27
 }
28
 
28
 
29
 // CustWithWXList 客户列表
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
 	org := m.ctx.Get("org").(model.SysOrg)
31
 	org := m.ctx.Get("org").(model.SysOrg)
32
 
32
 
33
 	if phone == "" {
33
 	if phone == "" {
36
 		phone = "%" + phone + "%"
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
 	pageNum := 10
51
 	pageNum := 10
40
 	if m.ctx.Get("pageNum") != nil {
52
 	if m.ctx.Get("pageNum") != nil {
41
 		pageNum = m.ctx.Get("pageNum").(int)
53
 		pageNum = m.ctx.Get("pageNum").(int)
67
 			AND s.account_type = '` + models.ACCMAP_WECHAT + `'
79
 			AND s.account_type = '` + models.ACCMAP_WECHAT + `'
68
 		WHERE
80
 		WHERE
69
 			t.phone like ?
81
 			t.phone like ?
82
+			AND t.customer_name like ?
83
+			AND t.recommend_name like ?
70
 		AND t.status > ?
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
 			t.create_date DESC
96
 			t.create_date DESC
74
 	`
97
 	`
75
 
98
 
76
 	var cust []CustWithWX
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
 	if err != nil {
102
 	if err != nil {
80
 		return nil, 0, err
103
 		return nil, 0, err
81
 	}
104
 	}

+ 17
- 0
models/goods/goods.go ファイルの表示

250
 		"goods_name",
250
 		"goods_name",
251
 		"type_id",
251
 		"type_id",
252
 		"status",
252
 		"status",
253
+		"price",
254
+		"case_id",
253
 	}
255
 	}
254
 
256
 
255
 	// 商品图片
257
 	// 商品图片
320
 	err := m.db.Where("goods_id=?", goodsid).Find(&goodsimg)
322
 	err := m.db.Where("goods_id=?", goodsid).Find(&goodsimg)
321
 	return goodsimg, err
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
 	"spaceofcheng/services/utils"
6
 	"spaceofcheng/services/utils"
7
 	"strconv"
7
 	"strconv"
8
 	"strings"
8
 	"strings"
9
+	"time"
9
 )
10
 )
10
 
11
 
11
 // GetGoodsSpecCount 获取商品规格总数
12
 // GetGoodsSpecCount 获取商品规格总数
18
 // GetGoodsSpec 根据案场获取商品规格
19
 // GetGoodsSpec 根据案场获取商品规格
19
 func (m *GoodsDAO) GetGoodsSpec(caseids string, page int, pageSize int) ([]model.TdSpec, error) {
20
 func (m *GoodsDAO) GetGoodsSpec(caseids string, page int, pageSize int) ([]model.TdSpec, error) {
20
 	var goodsSpec []model.TdSpec
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
 	return goodsSpec, err
23
 	return goodsSpec, err
23
 }
24
 }
24
 
25
 
39
 func (m *GoodsDAO) AddGoodsSpec(goodsSpec *model.TdSpec) (*model.TdSpec, error) {
40
 func (m *GoodsDAO) AddGoodsSpec(goodsSpec *model.TdSpec) (*model.TdSpec, error) {
40
 	goodsSpec.SpecId = utils.GetGUID()
41
 	goodsSpec.SpecId = utils.GetGUID()
41
 	goodsSpec.Status = models.STATUS_NORMAL
42
 	goodsSpec.Status = models.STATUS_NORMAL
43
+	goodsSpec.CreateDate = time.Now()
42
 	_, err := m.db.Insert(goodsSpec)
44
 	_, err := m.db.Insert(goodsSpec)
43
 	return goodsSpec, err
45
 	return goodsSpec, err
44
 }
46
 }
47
 func (m *GoodsDAO) UpdateGoodsSpec(goodsSpec model.TdSpec) error {
49
 func (m *GoodsDAO) UpdateGoodsSpec(goodsSpec model.TdSpec) error {
48
 	var cols = []string{
50
 	var cols = []string{
49
 		"spec_name",
51
 		"spec_name",
52
+		"case_id",
50
 	}
53
 	}
51
 	_, err := m.db.Cols(cols...).Where("spec_id=?", goodsSpec.SpecId).Update(goodsSpec)
54
 	_, err := m.db.Cols(cols...).Where("spec_id=?", goodsSpec.SpecId).Update(goodsSpec)
52
 	return err
55
 	return err

+ 1
- 1
models/goods/type.go ファイルの表示

25
 // GetGoodsType 根据案场获取商品类型
25
 // GetGoodsType 根据案场获取商品类型
26
 func (m *GoodsDAO) GetGoodsType(caseids string, page int, pageSize int) ([]model.TdGoodsType, error) {
26
 func (m *GoodsDAO) GetGoodsType(caseids string, page int, pageSize int) ([]model.TdGoodsType, error) {
27
 	var goodstype []model.TdGoodsType
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
 	return goodstype, err
29
 	return goodstype, err
30
 }
30
 }
31
 
31
 

+ 45
- 7
models/gymcard/gymcard.go ファイルの表示

31
 	CardShareInfo       string
31
 	CardShareInfo       string
32
 	CardUseInstruction  string
32
 	CardUseInstruction  string
33
 	CardUseRule         string
33
 	CardUseRule         string
34
+	Price               string
34
 }
35
 }
35
 
36
 
36
 type Gymcard struct {
37
 type Gymcard struct {
39
 	CardShareInfo      string
40
 	CardShareInfo      string
40
 	CardUseInstruction string
41
 	CardUseInstruction string
41
 	CardUseRule        string
42
 	CardUseRule        string
43
+	ChannelId          string
42
 }
44
 }
43
 
45
 
44
 // GetGymcard 根据案场id获取游泳健身卡列表
46
 // GetGymcard 根据案场id获取游泳健身卡列表
54
 	ta_gym_card a
56
 	ta_gym_card a
55
 	INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
57
 	INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
56
 	INNER JOIN ta_card_share c ON a.gym_card_id = c.gym_card_id
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
 	where a.case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')
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
 	err := m.db.Sql(sql).Find(&gymcard)
64
 	err := m.db.Sql(sql).Find(&gymcard)
61
 	return gymcard, err
65
 	return gymcard, err
62
 }
66
 }
116
 	return gymcard, err
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
 // AddGymcardImg 新增游泳健身卡图片
136
 // AddGymcardImg 新增游泳健身卡图片
120
 func (m *GymcardDAO) AddGymcardImg(gymcardId, imgUrl string) error {
137
 func (m *GymcardDAO) AddGymcardImg(gymcardId, imgUrl string) error {
121
 	var cardImg model.TaCardImage
138
 	var cardImg model.TaCardImage
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
 // DeleteCardImg 删除健身卡分享信息
201
 // DeleteCardImg 删除健身卡分享信息
172
 func (m *GymcardDAO) DeleteCardShare(gymcardId string) error {
202
 func (m *GymcardDAO) DeleteCardShare(gymcardId string) error {
173
 	var cardShare = model.TaCardShare{
203
 	var cardShare = model.TaCardShare{
221
 }
251
 }
222
 
252
 
223
 // SendGymcardToCustomer 新增用户健身卡
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
 	var customerGym model.TaCustomerGym
255
 	var customerGym model.TaCustomerGym
226
 	customerGym.CustomerGymId = utils.GetGUID()
256
 	customerGym.CustomerGymId = utils.GetGUID()
227
 	customerGym.CaseId = gymcard.CaseId
257
 	customerGym.CaseId = gymcard.CaseId
234
 	customerGym.ReceiveDate = time.Now()
264
 	customerGym.ReceiveDate = time.Now()
235
 	customerGym.StartDate = gymcard.StartDate
265
 	customerGym.StartDate = gymcard.StartDate
236
 	customerGym.Status = models.STATUS_NORMAL
266
 	customerGym.Status = models.STATUS_NORMAL
267
+	customerGym.SalesId = salesId
268
+	customerGym.SalesName = salesName
237
 	_, err := m.db.Insert(customerGym)
269
 	_, err := m.db.Insert(customerGym)
238
 	return &customerGym, err
270
 	return &customerGym, err
239
 }
271
 }
269
 	b.card_image_url,
301
 	b.card_image_url,
270
 	c.card_share_info,
302
 	c.card_share_info,
271
 	c.card_use_instruction,
303
 	c.card_use_instruction,
272
-	c.card_use_rule
304
+	c.card_use_rule,
305
+	d.price
273
 FROM
306
 FROM
274
 	ta_customer_gym a
307
 	ta_customer_gym a
275
 INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
308
 INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
276
 INNER JOIN ta_card_share C oN a.gym_card_id = c.gym_card_id
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
 WHERE
311
 WHERE
278
 	a.customer_id = '` + customerId + `' and a.status >` + strconv.Itoa(models.STATUS_DEL)
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
 	err := m.db.Sql(sql).Find(&customerGym)
314
 	err := m.db.Sql(sql).Find(&customerGym)
281
 	return customerGym, err
315
 	return customerGym, err
282
 }
316
 }
289
 	b.card_image_url,
323
 	b.card_image_url,
290
 	c.card_share_info,
324
 	c.card_share_info,
291
 	c.card_use_instruction,
325
 	c.card_use_instruction,
292
-	c.card_use_rule
326
+	c.card_use_rule,
327
+	d.price
293
 FROM
328
 FROM
294
 	ta_customer_gym a
329
 	ta_customer_gym a
295
 INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
330
 INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
296
 INNER JOIN ta_card_share C oN a.gym_card_id = c.gym_card_id
331
 INNER JOIN ta_card_share C oN a.gym_card_id = c.gym_card_id
297
 INNER JOIN ta_customer d ON a.customer_id = d.customer_id
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
 Where d.phone = '` + phone + `' and a.status >` + strconv.Itoa(models.STATUS_DEL)
334
 Where d.phone = '` + phone + `' and a.status >` + strconv.Itoa(models.STATUS_DEL)
299
 	err := m.db.Sql(sql).Find(&customerGym)
335
 	err := m.db.Sql(sql).Find(&customerGym)
300
 	return customerGym, err
336
 	return customerGym, err
328
 	b.card_image_url,
364
 	b.card_image_url,
329
 	c.card_share_info,
365
 	c.card_share_info,
330
 	c.card_use_instruction,
366
 	c.card_use_instruction,
331
-	c.card_use_rule
367
+	c.card_use_rule,
368
+	d.price
332
 FROM
369
 FROM
333
 	ta_customer_gym a
370
 	ta_customer_gym a
334
 INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
371
 INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
335
 INNER JOIN ta_card_share C oN a.gym_card_id = c.gym_card_id
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
 WHERE
374
 WHERE
337
 	a.customer_gym_id = '` + customerCardId + `' and a.status >` + strconv.Itoa(models.STATUS_DEL)
375
 	a.customer_gym_id = '` + customerCardId + `' and a.status >` + strconv.Itoa(models.STATUS_DEL)
338
 	err := m.db.Sql(sql).Find(&customerGym)
376
 	err := m.db.Sql(sql).Find(&customerGym)

+ 6
- 3
models/model/sys_case_record.go ファイルの表示

1
 package model
1
 package model
2
 
2
 
3
-import "time"
3
+import (
4
+	"time"
5
+)
4
 
6
 
5
 type SysCaseRecord struct {
7
 type SysCaseRecord struct {
6
 	RecordId   string    `xorm:"not null pk VARCHAR(64)"`
8
 	RecordId   string    `xorm:"not null pk VARCHAR(64)"`
7
 	CaseId     string    `xorm:"not null VARCHAR(64)"`
9
 	CaseId     string    `xorm:"not null VARCHAR(64)"`
8
-	Month      string    `xorm:"VARCHAR(20)"`
10
+	Month      string    `xorm:"VARCHAR(100)"`
9
 	Num        int       `xorm:"INT(11)"`
11
 	Num        int       `xorm:"INT(11)"`
10
-	IsOver     int       `xorm:"SMALLINT(6)"`
11
 	Status     int       `xorm:"SMALLINT(6)"`
12
 	Status     int       `xorm:"SMALLINT(6)"`
12
 	CreateDate time.Time `xorm:"DATETIME"`
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
 package model
1
 package model
2
 
2
 
3
 type SysWechatConf struct {
3
 type SysWechatConf struct {
4
-	ConfId string `xorm:"VARCHAR(64)"`
4
+	ConfId string `xorm:"not null pk VARCHAR(64)"`
5
 	OrgId  string `xorm:"VARCHAR(64)"`
5
 	OrgId  string `xorm:"VARCHAR(64)"`
6
 	Type   string `xorm:"comment('wechat 微信公众号 mini 小程序') VARCHAR(20)"`
6
 	Type   string `xorm:"comment('wechat 微信公众号 mini 小程序') VARCHAR(20)"`
7
 	Appid  string `xorm:"VARCHAR(50)"`
7
 	Appid  string `xorm:"VARCHAR(50)"`

+ 15
- 0
models/model/ta_body_check.go ファイルの表示

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 ファイルの表示

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 ファイルの表示

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
 )
5
 )
6
 
6
 
7
 type TaCheckinRecord struct {
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
 )
5
 )
6
 
6
 
7
 type TaCoupon struct {
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
 )
5
 )
6
 
6
 
7
 type TaCouponCard struct {
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
 type TaCouponCardTarget struct {
3
 type TaCouponCardTarget struct {
4
 	TargetId   string `xorm:"not null pk VARCHAR(64)"`
4
 	TargetId   string `xorm:"not null pk VARCHAR(64)"`
5
 	CardId     string `xorm:"VARCHAR(64)"`
5
 	CardId     string `xorm:"VARCHAR(64)"`
6
-	DetailId   string `xorm:"VARCHAR(64)"`
7
 	TargetName string `xorm:"VARCHAR(255)"`
6
 	TargetName string `xorm:"VARCHAR(255)"`
8
-	CardState  string `xorm:"VARCHAR(64)"`
9
 }
7
 }

+ 3
- 1
models/model/ta_coupon_give_record.go ファイルの表示

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

+ 1
- 0
models/model/ta_coupon_target.go ファイルの表示

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

+ 1
- 1
models/model/ta_course_orders_coupon.go ファイルの表示

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

+ 1
- 1
models/model/ta_customer_account.go ファイルの表示

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

+ 2
- 0
models/model/ta_customer_card.go ファイルの表示

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

+ 2
- 0
models/model/ta_customer_coupon.go ファイルの表示

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

+ 1
- 1
models/model/ta_customer_course.go ファイルの表示

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

+ 3
- 0
models/model/ta_customer_gym.go ファイルの表示

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

+ 9
- 0
models/model/ta_experience_card_image.go ファイルの表示

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 ファイルの表示

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
-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
 	EndDate    time.Time `xorm:"DATETIME"`
13
 	EndDate    time.Time `xorm:"DATETIME"`
14
 	Status     int       `xorm:"SMALLINT(6)"`
14
 	Status     int       `xorm:"SMALLINT(6)"`
15
 	CreateDate time.Time `xorm:"DATETIME"`
15
 	CreateDate time.Time `xorm:"DATETIME"`
16
+	CaseId     string    `xorm:"VARCHAR(64)"`
16
 }
17
 }

+ 2
- 2
models/model/ta_goods_orders.go ファイルの表示

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

+ 20
- 0
models/model/ta_luckdraw.go ファイルの表示

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 ファイルの表示

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 ファイルの表示

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 ファイルの表示

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 ファイルの表示

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 ファイルの表示

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 ファイルの表示

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 ファイルの表示

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 ファイルの表示

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 ファイルの表示

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 ファイルの表示

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

+ 8
- 0
models/model/td_luckdraw_theme.go ファイルの表示

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
 package model
1
 package model
2
 
2
 
3
+import (
4
+	"time"
5
+)
6
+
3
 type TdSpec struct {
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 ファイルの表示

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
 	return err
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
 // DelUserBelongCase 删除用户的所属案场
260
 // DelUserBelongCase 删除用户的所属案场
254
 func (m *UserDAO) DelUserBelongCase(userid string) error {
261
 func (m *UserDAO) DelUserBelongCase(userid string) error {
255
 	sql := "delete from sys_user_case where is_belong=1 and user_id='" + userid + "'"
262
 	sql := "delete from sys_user_case where is_belong=1 and user_id='" + userid + "'"
333
 }
340
 }
334
 
341
 
335
 // GetUserCustomer 获取我的推荐客户
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
 	var customers []model.TaCustomer
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
 	return customers, err
356
 	return customers, err
340
 }
357
 }
341
 
358
 
411
 	return userTypes, nil
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
-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
-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 ファイルの表示

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
 	"spaceofcheng/services/models/customer"
7
 	"spaceofcheng/services/models/customer"
8
 	"spaceofcheng/services/models/model"
8
 	"spaceofcheng/services/models/model"
9
 	"spaceofcheng/services/utils"
9
 	"spaceofcheng/services/utils"
10
+	"strings"
10
 	"time"
11
 	"time"
11
 
12
 
13
+	"github.com/astaxie/beego"
14
+
12
 	"github.com/yl10/kit/guid"
15
 	"github.com/yl10/kit/guid"
13
 )
16
 )
14
 
17
 
30
 
33
 
31
 // GetCouponList 获取优惠券列表
34
 // GetCouponList 获取优惠券列表
32
 func (s *CouponServ) GetCouponList(caseID string, pagenavi ...int) ([]model.TaCoupon, int64, error) {
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
 	res, total, err := s.dao.GetCouponList(filters, limit)
64
 	res, total, err := s.dao.GetCouponList(filters, limit)
47
 	if err != nil {
65
 	if err != nil {
48
 		utils.LogError("查询优惠券列表失败: " + err.Error())
66
 		utils.LogError("查询优惠券列表失败: " + err.Error())
86
 	// 保存分享
104
 	// 保存分享
87
 	share := cp.Share
105
 	share := cp.Share
88
 	share.CouponId = cp.CouponId
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
 		utils.LogError("保存优惠券分享失败: " + err.Error())
109
 		utils.LogError("保存优惠券分享失败: " + err.Error())
92
 		return errors.New("保存优惠券分享失败")
110
 		return errors.New("保存优惠券分享失败")
93
 	}
111
 	}
120
 
138
 
121
 	// 更新主信息
139
 	// 更新主信息
122
 	cpMain := cp.TaCoupon
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
 		utils.LogError("更新优惠券失败: " + err.Error())
153
 		utils.LogError("更新优惠券失败: " + err.Error())
125
 		return errors.New("更新优惠券失败")
154
 		return errors.New("更新优惠券失败")
126
 	}
155
 	}
140
 		return errors.New("更新优惠券分享失败")
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
 	return nil
184
 	return nil
145
 }
185
 }
146
 
186
 
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
 		return errors.New("优惠券已失效或者不存在")
209
 		return errors.New("优惠券已失效或者不存在")
170
 	}
210
 	}
171
 
211
 
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
 	for _, uid := range uids {
219
 	for _, uid := range uids {
191
 		// 获取客户信息
220
 		// 获取客户信息
192
 		cust, err := s.custDao.GetCustomerByID(uid)
221
 		cust, err := s.custDao.GetCustomerByID(uid)
195
 			return errors.New("校验客户信息失败")
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
 		utils.LogError("保存客户优惠券失败: " + err.Error())
308
 		utils.LogError("保存客户优惠券失败: " + err.Error())
241
 		return errors.New("保存客户优惠券失败")
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
 		utils.LogError("保存优惠券赠送记录失败: " + err.Error())
313
 		utils.LogError("保存优惠券赠送记录失败: " + err.Error())
246
 		return errors.New("保存优惠券赠送记录失败")
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
 	return nil
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
 }
29
 }
30
 
30
 
31
 // GetCustWithWXList 获取客户列表
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
 // GetCustWithWXByID 获取客户列表
36
 // GetCustWithWXByID 获取客户列表
141
 	}
141
 	}
142
 
142
 
143
 	// triggerRegiteEvent 触发注册事件
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
 	// if cust.CustomerId == userMap.UserId {
147
 	// if cust.CustomerId == userMap.UserId {
147
 	// 	return cust, nil
148
 	// 	return cust, nil
246
 	}
247
 	}
247
 
248
 
248
 	// triggerRegiteEvent 触发注册事件
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
 	userMap.UserId = cust.CustomerId
254
 	userMap.UserId = cust.CustomerId

+ 52
- 33
service/events/events.go ファイルの表示

2
 
2
 
3
 import (
3
 import (
4
 	"fmt"
4
 	"fmt"
5
+	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/utils"
5
 	"sync"
8
 	"sync"
6
 
9
 
7
 	"github.com/zjxpcyc/tinyevent"
10
 	"github.com/zjxpcyc/tinyevent"
19
 }
22
 }
20
 
23
 
21
 // ListenAllEvent 监听所有事件
24
 // ListenAllEvent 监听所有事件
22
-func ListenAllEvent() {
25
+func ListenAllEvent(orgID, caseID string) {
23
 	mtx.Lock()
26
 	mtx.Lock()
24
 	defer mtx.Unlock()
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
 // getAllEvents 获取数据库配置
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
 var tsAction = func(e tinyevent.Event) error {
82
 var tsAction = func(e tinyevent.Event) error {

+ 66
- 8
service/events/giveCoupon.go ファイルの表示

1
 package events
1
 package events
2
 
2
 
3
 import (
3
 import (
4
+	"errors"
5
+	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/service/coupon"
8
+	"spaceofcheng/services/utils"
9
+
4
 	"github.com/zjxpcyc/tinyevent"
10
 	"github.com/zjxpcyc/tinyevent"
5
 )
11
 )
6
 
12
 
7
 // giveCoupon 赠送卡券
13
 // giveCoupon 赠送卡券
8
 // Event.Payload.customer  = model.TaCustomer
14
 // Event.Payload.customer  = model.TaCustomer
9
-// Event.Payload.caseId  = 案场ID
10
 var giveCoupon = func(e tinyevent.Event) error {
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
 	return nil
79
 	return nil
22
 }
80
 }

+ 25
- 0
service/events/utils.go ファイルの表示

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
 
68
 
69
 // DelGoodsSpec 删除商品类型
69
 // DelGoodsSpec 删除商品类型
70
 func (s *GoodsServ) DelGoodsSpec(specid string) error {
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
 	if err != nil {
80
 	if err != nil {
73
 		utils.LogError("删除商品规格失败: " + err.Error())
81
 		utils.LogError("删除商品规格失败: " + err.Error())
74
 		return errors.New("删除商品规格失败")
82
 		return errors.New("删除商品规格失败")

+ 9
- 1
service/goods/type.go ファイルの表示

82
 
82
 
83
 // DelGoodsType 删除商品类型
83
 // DelGoodsType 删除商品类型
84
 func (s *GoodsServ) DelGoodsType(typeid string) error {
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
 	if err != nil {
94
 	if err != nil {
87
 		utils.LogError("删除商品类型失败: " + err.Error())
95
 		utils.LogError("删除商品类型失败: " + err.Error())
88
 		return errors.New("删除商品类型失败")
96
 		return errors.New("删除商品类型失败")

+ 45
- 22
service/gymcard/gymcard.go ファイルの表示

112
 	if newGym.GymCardId == "" {
112
 	if newGym.GymCardId == "" {
113
 		newGymCard = newGym.TaGymCard
113
 		newGymCard = newGym.TaGymCard
114
 		cardGym, err = s.dao.AddGymcard(newGymCard)
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
 	} else {
120
 	} else {
119
 		err = s.dao.EditGymcardImg(newGym.GymCardId, newGym.CardImageUrl)
121
 		err = s.dao.EditGymcardImg(newGym.GymCardId, newGym.CardImageUrl)
120
 		err = s.dao.EditGymcardShare(newGym.GymCardId, newGym.CardShareInfo, newGym.CardUseRule, newGym.CardUseInstruction)
122
 		err = s.dao.EditGymcardShare(newGym.GymCardId, newGym.CardShareInfo, newGym.CardUseRule, newGym.CardUseInstruction)
131
 	var customerGym *model.TaCustomerGym
133
 	var customerGym *model.TaCustomerGym
132
 	customer := s.ctx.Get("customer").(model.TaCustomer)
134
 	customer := s.ctx.Get("customer").(model.TaCustomer)
133
 	var sysuser *model.SysUser
135
 	var sysuser *model.SysUser
134
-	var sendRecord *model.TaCouponGiveRecord
135
 	gymCard, err := s.dao.GetGymcardById(gymcardId)
136
 	gymCard, err := s.dao.GetGymcardById(gymcardId)
136
 	if err != nil {
137
 	if err != nil {
137
 		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
138
 		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
138
 		return nil, errors.New("发送游泳健身卡给客户失败")
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
 	if err != nil {
142
 	if err != nil {
143
 		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
143
 		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
144
 		return nil, errors.New("发送游泳健身卡给客户失败")
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
 	if err != nil {
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
 	err = s.dao.EditGymcard(&gymCard.TaGymCard)
153
 	err = s.dao.EditGymcard(&gymCard.TaGymCard)
163
 	if err != nil {
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
 	return customerGym, nil
158
 	return customerGym, nil
168
 }
159
 }
186
 	}
177
 	}
187
 	if gymCard.GymTypeId == "once" {
178
 	if gymCard.GymTypeId == "once" {
188
 		customerGym.Status = models.STATUS_DEL
179
 		customerGym.Status = models.STATUS_DEL
180
+		customerGym.CardStatus = models.CARD_COUPON_USED
189
 		gymCard.UsedCount = gymCard.UsedCount + 1
181
 		gymCard.UsedCount = gymCard.UsedCount + 1
190
 	} else {
182
 	} else {
191
 		if customerGym.StartDate.IsZero() {
183
 		if customerGym.StartDate.IsZero() {
222
 	return err
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
 func (s *SysServ) SaveNewCustomer(wxInfo map[string]interface{}, userMap *model.TaUserMapping) (*model.TaCustomer, error) {
75
 func (s *SysServ) SaveNewCustomer(wxInfo map[string]interface{}, userMap *model.TaUserMapping) (*model.TaCustomer, error) {
76
 	// 微信相关字段
76
 	// 微信相关字段
77
 	nickyName := wxInfo["nickname"].(string)
77
 	nickyName := wxInfo["nickname"].(string)
78
-	sex := wxInfo["sex"].(int)
78
+	sex := wxInfo["sex"].(float64)
79
 	headimgurl := wxInfo["headimgurl"].(string)
79
 	headimgurl := wxInfo["headimgurl"].(string)
80
 
80
 
81
 	org := s.ctx.Get("org").(model.SysOrg)
81
 	org := s.ctx.Get("org").(model.SysOrg)
83
 	cust := model.TaCustomer{
83
 	cust := model.TaCustomer{
84
 		CustomerName: nickyName,
84
 		CustomerName: nickyName,
85
 		Name:         nickyName,
85
 		Name:         nickyName,
86
-		Sex:          sex,
86
+		Sex:          int(sex),
87
 		Headimgurl:   headimgurl,
87
 		Headimgurl:   headimgurl,
88
 		OrgId:        org.OrgId,
88
 		OrgId:        org.OrgId,
89
 	}
89
 	}

+ 174
- 7
service/user.go ファイルの表示

3
 import (
3
 import (
4
 	"errors"
4
 	"errors"
5
 	"spaceofcheng/services/models"
5
 	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/card"
6
 	"spaceofcheng/services/models/cases"
7
 	"spaceofcheng/services/models/cases"
7
 	"spaceofcheng/services/models/customer"
8
 	"spaceofcheng/services/models/customer"
8
 	"spaceofcheng/services/models/model"
9
 	"spaceofcheng/services/models/model"
19
 	dao         *system.UserDAO
20
 	dao         *system.UserDAO
20
 	casedao     *cases.CaseDAO
21
 	casedao     *cases.CaseDAO
21
 	customerdao *customer.CustomerDAO
22
 	customerdao *customer.CustomerDAO
23
+	carddao     *card.CardDAO
22
 }
24
 }
23
 
25
 
24
 // NewUserServ 初始化
26
 // NewUserServ 初始化
28
 		dao:         system.NewUserDAO(ctx),
30
 		dao:         system.NewUserDAO(ctx),
29
 		casedao:     cases.NewCaseDAO(ctx),
31
 		casedao:     cases.NewCaseDAO(ctx),
30
 		customerdao: customer.NewCustomerDAO(ctx),
32
 		customerdao: customer.NewCustomerDAO(ctx),
33
+		carddao:     card.NewCardDAO(ctx),
31
 	}
34
 	}
32
 }
35
 }
33
 
36
 
64
 	user := s.ctx.Get("user").(model.SysUser)
67
 	user := s.ctx.Get("user").(model.SysUser)
65
 	user.Pwd = ""
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
 	roles, err := s.dao.GetUserRole(user.UserId)
84
 	roles, err := s.dao.GetUserRole(user.UserId)
70
 	if err != nil {
85
 	if err != nil {
79
 	}
94
 	}
80
 
95
 
81
 	rtn := map[string]interface{}{
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
 	return rtn, nil
104
 	return rtn, nil
150
 
166
 
151
 	var err error
167
 	var err error
152
 	var newUSer *model.SysUser
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
 	if user.UserId != "" {
188
 	if user.UserId != "" {
154
 		err = s.dao.UpdateUser(userInfo)
189
 		err = s.dao.UpdateUser(userInfo)
155
 		if err != nil {
190
 		if err != nil {
338
 }
373
 }
339
 
374
 
340
 // GetUserCustomer 获取我的推荐客户
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
 	if pageSize == 0 {
377
 	if pageSize == 0 {
343
 		pageSize = PAGENUM
378
 		pageSize = PAGENUM
344
 	}
379
 	}
345
 	if page == 0 {
380
 	if page == 0 {
346
 		page = 1
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
 	return customers, err
384
 	return customers, err
350
 }
385
 }
351
 
386
 
377
 	user, err := s.dao.GetUserByPhone(tel)
412
 	user, err := s.dao.GetUserByPhone(tel)
378
 	return user, err
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
 		utils.LogError("获取列表失败: " + err.Error())
77
 		utils.LogError("获取列表失败: " + err.Error())
78
 		return nil, errors.New("获取列表失败")
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
 	total, err := s.dao.GetCustomerCourseListByTelCount(tel, caseids)
84
 	total, err := s.dao.GetCustomerCourseListByTelCount(tel, caseids)
82
 	if err != nil {
85
 	if err != nil {
83
 		utils.LogError("获取列表失败: " + err.Error())
86
 		utils.LogError("获取列表失败: " + err.Error())
84
 		return nil, errors.New("获取列表失败")
87
 		return nil, errors.New("获取列表失败")
85
 	}
88
 	}
86
-	customer, err := s.cdao.GetCustomerByID(customerId)
89
+	customer, err := s.cdao.GetCustomerByID(customerID)
87
 	if err != nil {
90
 	if err != nil {
88
 		utils.LogError("获取列表失败: " + err.Error())
91
 		utils.LogError("获取列表失败: " + err.Error())
89
 		return nil, errors.New("获取列表失败")
92
 		return nil, errors.New("获取列表失败")

+ 60
- 36
utils/event.go ファイルの表示

1
 package utils
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
+}