|
@@ -9,6 +9,7 @@ import (
|
9
|
9
|
"strings"
|
10
|
10
|
"time"
|
11
|
11
|
|
|
12
|
+ "github.com/astaxie/beego"
|
12
|
13
|
"github.com/go-xorm/xorm"
|
13
|
14
|
)
|
14
|
15
|
|
|
@@ -30,16 +31,25 @@ func NewDAO(ctx *utils.Context) *LuckDrawDao {
|
30
|
31
|
type LuckDraw struct {
|
31
|
32
|
model.TaLuckdraw `xorm:"extends"`
|
32
|
33
|
Prizes []model.TaLuckdrawPrize
|
|
34
|
+ Imgs []model.TaLuckdrawImg
|
33
|
35
|
}
|
|
36
|
+
|
34
|
37
|
type LuckInfo struct {
|
35
|
38
|
model.TaLuckdrawRecord `xorm:"extends"`
|
36
|
39
|
CustomerQrcode string
|
37
|
40
|
}
|
38
|
41
|
|
|
42
|
+// GetLuckDrawTpl 获取抽奖模板
|
|
43
|
+func (m *LuckDrawDao) GetLuckDrawTpl(orgid string) ([]model.TaLuckdrawTpl, error) {
|
|
44
|
+ var tpls []model.TaLuckdrawTpl
|
|
45
|
+ err := m.db.Where("org_id=?", orgid).And("status=?", models.STATUS_NORMAL).Find(&tpls)
|
|
46
|
+ return tpls, err
|
|
47
|
+}
|
|
48
|
+
|
39
|
49
|
// GetLuckDrawList 获取抽奖列表
|
40
|
50
|
func (m *LuckDrawDao) GetLuckDrawList(caseids, name, status string, page, pageSize int) ([]model.TaLuckdraw, error) {
|
41
|
51
|
var luckdraws []model.TaLuckdraw
|
42
|
|
- dao := m.db.Where("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
|
|
52
|
+ dao := m.db.Where("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").And("status<>?", models.STATUS_DEL)
|
43
|
53
|
if name != "" {
|
44
|
54
|
dao.And("name like '%" + name + "%'")
|
45
|
55
|
}
|
|
@@ -53,7 +63,7 @@ func (m *LuckDrawDao) GetLuckDrawList(caseids, name, status string, page, pageSi
|
53
|
63
|
// GetLuckDrawCount 获取抽奖列表count
|
54
|
64
|
func (m *LuckDrawDao) GetLuckDrawCount(caseids, name, status string) (int, error) {
|
55
|
65
|
var luckdraws []model.TaLuckdraw
|
56
|
|
- dao := m.db.Where("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
|
|
66
|
+ dao := m.db.Where("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").And("status<>?", models.STATUS_DEL)
|
57
|
67
|
if name != "" {
|
58
|
68
|
dao.And("name like '%" + name + "%'")
|
59
|
69
|
}
|
|
@@ -64,6 +74,237 @@ func (m *LuckDrawDao) GetLuckDrawCount(caseids, name, status string) (int, error
|
64
|
74
|
return len(luckdraws), err
|
65
|
75
|
}
|
66
|
76
|
|
|
77
|
+// RecordWithPhone 抽奖记录
|
|
78
|
+type RecordWithPhone struct {
|
|
79
|
+ model.TaLuckdrawRecord `xorm:"extends"`
|
|
80
|
+ CustomerName string
|
|
81
|
+ Phone string
|
|
82
|
+}
|
|
83
|
+
|
|
84
|
+// GetLuckDrawRecordCount 获取抽奖记录count
|
|
85
|
+func (m *LuckDrawDao) GetLuckDrawRecordCount(id, tel string) (int, error) {
|
|
86
|
+ var records []RecordWithPhone
|
|
87
|
+ sql := `select a.*,b.customer_name,b.phone from ta_luckdraw_record a inner join ta_customer b on a.user_id=b.customer_id where a.luckdraw_id=?`
|
|
88
|
+ if tel != "" {
|
|
89
|
+ sql = sql + ` and b.phone=` + tel
|
|
90
|
+ }
|
|
91
|
+
|
|
92
|
+ err := m.db.Sql(sql).Find(&records)
|
|
93
|
+ return len(records), err
|
|
94
|
+}
|
|
95
|
+
|
|
96
|
+// GetLuckDrawRecord 获取抽奖记录信息
|
|
97
|
+func (m *LuckDrawDao) GetLuckDrawRecord(id, tel string, page, pageSize int) ([]RecordWithPhone, error) {
|
|
98
|
+ var records []RecordWithPhone
|
|
99
|
+ sql := `select a.*,b.customer_name,b.phone from ta_luckdraw_record a inner join ta_customer b on a.user_id=b.customer_id where a.luckdraw_id=?`
|
|
100
|
+ if tel != "" {
|
|
101
|
+ sql = sql + ` and b.phone=` + tel
|
|
102
|
+ }
|
|
103
|
+ sql = sql + ` ORDER BY a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
|
|
104
|
+
|
|
105
|
+ err := m.db.Sql(sql).Find(&records)
|
|
106
|
+ return records, err
|
|
107
|
+}
|
|
108
|
+
|
|
109
|
+// GetLuckDrawShareCount 获取分享记录count
|
|
110
|
+func (m *LuckDrawDao) GetLuckDrawShareCount(id, tel string) (int, error) {
|
|
111
|
+ var shares []model.TaShareLuckyRecord
|
|
112
|
+ dao := m.db.Where("luckydraw_id=?", id)
|
|
113
|
+ if tel != "" {
|
|
114
|
+ dao.And("from_customer_tel=?", tel)
|
|
115
|
+ }
|
|
116
|
+
|
|
117
|
+ err := dao.Find(&shares)
|
|
118
|
+ return len(shares), err
|
|
119
|
+}
|
|
120
|
+
|
|
121
|
+// GetLuckDrawShare 获取分享记录信息
|
|
122
|
+func (m *LuckDrawDao) GetLuckDrawShare(id, tel string, page, pageSize int) ([]model.TaShareLuckyRecord, error) {
|
|
123
|
+ var shares []model.TaShareLuckyRecord
|
|
124
|
+ dao := m.db.Where("luckydraw_id=?", id)
|
|
125
|
+ if tel != "" {
|
|
126
|
+ dao.And("from_customer_tel=?", tel)
|
|
127
|
+ }
|
|
128
|
+
|
|
129
|
+ err := dao.Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&shares)
|
|
130
|
+ return shares, err
|
|
131
|
+}
|
|
132
|
+
|
|
133
|
+// LuckDrawInfo 抽奖info
|
|
134
|
+type LuckDrawInfo struct {
|
|
135
|
+ model.TaLuckdraw `xorm:"extends"`
|
|
136
|
+ Prizes []model.TaLuckdrawPrize
|
|
137
|
+ Imgs []model.TaLuckdrawImg
|
|
138
|
+ Defaults []model.TaPrizeDefault
|
|
139
|
+}
|
|
140
|
+
|
|
141
|
+// GetLuckDrawInfoByID 获取抽奖信息
|
|
142
|
+func (m *LuckDrawDao) GetLuckDrawInfoByID(id string) (*LuckDrawInfo, error) {
|
|
143
|
+ if id == "" {
|
|
144
|
+ return nil, errors.New("不存在抽奖信息!")
|
|
145
|
+ }
|
|
146
|
+ var luckdraw LuckDrawInfo
|
|
147
|
+ sql := `select * from ta_luckdraw where id= ?`
|
|
148
|
+ _, err := m.db.SQL(sql, id).Get(&luckdraw)
|
|
149
|
+ if err != nil {
|
|
150
|
+ return nil, err
|
|
151
|
+ }
|
|
152
|
+ if luckdraw.Id == "" {
|
|
153
|
+ return nil, nil
|
|
154
|
+ }
|
|
155
|
+ prizes, err := m.GetPrizes(id)
|
|
156
|
+ if err != nil {
|
|
157
|
+ utils.LogError("获取奖品信息失败:", err)
|
|
158
|
+ return nil, errors.New("获取奖品信息失败")
|
|
159
|
+ }
|
|
160
|
+ luckdraw.Prizes = prizes
|
|
161
|
+ imgs, err := m.GetLuckDrawImgs(id)
|
|
162
|
+ if err != nil {
|
|
163
|
+ utils.LogError("获取抽奖图片信息失败:", err)
|
|
164
|
+ return nil, errors.New("获取抽奖图片信息失败")
|
|
165
|
+ }
|
|
166
|
+ luckdraw.Imgs = imgs
|
|
167
|
+ defaults, err := m.GetLuckDrawDefault(id)
|
|
168
|
+ if err != nil {
|
|
169
|
+ utils.LogError("获取奖品内置信息失败:", err)
|
|
170
|
+ return nil, errors.New("获取奖品信息失败")
|
|
171
|
+ }
|
|
172
|
+ luckdraw.Defaults = defaults
|
|
173
|
+ return &luckdraw, err
|
|
174
|
+}
|
|
175
|
+
|
|
176
|
+// GetLuckDrawImgs 获取抽奖图片
|
|
177
|
+func (m *LuckDrawDao) GetLuckDrawImgs(luckdrawid string) ([]model.TaLuckdrawImg, error) {
|
|
178
|
+ var imgs []model.TaLuckdrawImg
|
|
179
|
+ err := m.db.Where("luckdraw_id=?", luckdrawid).Find(&imgs)
|
|
180
|
+ return imgs, err
|
|
181
|
+}
|
|
182
|
+
|
|
183
|
+// GetLuckDrawDefault 获取奖品默认信息
|
|
184
|
+func (m *LuckDrawDao) GetLuckDrawDefault(luckdrawid string) ([]model.TaPrizeDefault, error) {
|
|
185
|
+ var defaults []model.TaPrizeDefault
|
|
186
|
+ err := m.db.Where("luckdraw_id=?", luckdrawid).Find(&defaults)
|
|
187
|
+ return defaults, err
|
|
188
|
+}
|
|
189
|
+
|
|
190
|
+// InsertLuckdraw 新增抽奖信息
|
|
191
|
+func (m *LuckDrawDao) InsertLuckdraw(luckdraw model.TaLuckdraw) (*model.TaLuckdraw, error) {
|
|
192
|
+ luckdraw.Id = utils.GetGUID()
|
|
193
|
+ luckdraw.Status = models.STATUS_NORMAL
|
|
194
|
+ luckdraw.CreateDate = time.Now()
|
|
195
|
+
|
|
196
|
+ _, err := m.db.Insert(luckdraw)
|
|
197
|
+ return &luckdraw, err
|
|
198
|
+}
|
|
199
|
+
|
|
200
|
+// DelLuckDrawDefault 删除抽奖默认信息
|
|
201
|
+func (m *LuckDrawDao) DelLuckDrawDefault(luckdrawid string) error {
|
|
202
|
+ sql := `delete from ta_prize_default where luckdraw_id=?`
|
|
203
|
+ _, err := m.db.Exec(sql, luckdrawid)
|
|
204
|
+ return err
|
|
205
|
+}
|
|
206
|
+
|
|
207
|
+// DelLuckDrawImgs 删除抽奖图片信息
|
|
208
|
+func (m *LuckDrawDao) DelLuckDrawImgs(luckdrawid string) error {
|
|
209
|
+ sql := `delete from ta_luckdraw_img where luckdraw_id=?`
|
|
210
|
+ _, err := m.db.Exec(sql, luckdrawid)
|
|
211
|
+ return err
|
|
212
|
+}
|
|
213
|
+
|
|
214
|
+// DelLuckDrawPrize 删除奖品信息
|
|
215
|
+func (m *LuckDrawDao) DelLuckDrawPrize(luckdrawid string) error {
|
|
216
|
+ sql := `delete from ta_prize_detail where prize_id in (select id from ta_luckdraw_prize where luckdraw_id=?)`
|
|
217
|
+ _, err := m.db.Exec(sql, luckdrawid)
|
|
218
|
+ if err != nil {
|
|
219
|
+ return err
|
|
220
|
+ }
|
|
221
|
+ sql = `delete from ta_luckdraw_prize where luckdraw_id=?`
|
|
222
|
+ _, err = m.db.Exec(sql, luckdrawid)
|
|
223
|
+ return err
|
|
224
|
+}
|
|
225
|
+
|
|
226
|
+// SaveLuckDrawImgs 保存抽奖图片
|
|
227
|
+func (m *LuckDrawDao) SaveLuckDrawImgs(imgs []model.TaLuckdrawImg, luckdrawid string) error {
|
|
228
|
+ for inx, img := range imgs {
|
|
229
|
+ if img.ImgId == "" {
|
|
230
|
+ imgs[inx].ImgId = utils.GetGUID()
|
|
231
|
+ org := m.ctx.Get("org").(model.SysOrg)
|
|
232
|
+ imgs[inx].OrgId = org.OrgId
|
|
233
|
+ imgs[inx].Status = models.STATUS_NORMAL
|
|
234
|
+ imgs[inx].LuckdrawId = luckdrawid
|
|
235
|
+ }
|
|
236
|
+ }
|
|
237
|
+ _, err := m.db.Insert(imgs)
|
|
238
|
+ return err
|
|
239
|
+}
|
|
240
|
+
|
|
241
|
+// SaveLuckDrawDefault 保存内定信息
|
|
242
|
+func (m *LuckDrawDao) SaveLuckDrawDefault(defaults []model.TaPrizeDefault, luckdrawid string) error {
|
|
243
|
+ for inx, d := range defaults {
|
|
244
|
+ if d.DefaultId == "" {
|
|
245
|
+ defaults[inx].DefaultId = utils.GetGUID()
|
|
246
|
+ defaults[inx].Status = models.STATUS_NORMAL
|
|
247
|
+ defaults[inx].CreateDate = time.Now()
|
|
248
|
+ defaults[inx].LuckdrawId = luckdrawid
|
|
249
|
+ }
|
|
250
|
+ }
|
|
251
|
+ _, err := m.db.Insert(defaults)
|
|
252
|
+ return err
|
|
253
|
+}
|
|
254
|
+
|
|
255
|
+// SaveLuckDrawPrizes 保存奖品信息
|
|
256
|
+func (m *LuckDrawDao) SaveLuckDrawPrizes(prizes []model.TaLuckdrawPrize, luckdrawid string) error {
|
|
257
|
+ for inx, prize := range prizes {
|
|
258
|
+ if prize.Id == "" {
|
|
259
|
+ prizes[inx].LuckdrawId = luckdrawid
|
|
260
|
+ prizes[inx].Id = utils.GetGUID()
|
|
261
|
+ prizes[inx].Status = models.STATUS_NORMAL
|
|
262
|
+ }
|
|
263
|
+ if prize.PrizeType == models.PRIZE_TYPE_COUPONCARD {
|
|
264
|
+ m.SavePrizeDetail(prize)
|
|
265
|
+ }
|
|
266
|
+ }
|
|
267
|
+ _, err := m.db.Insert(prizes)
|
|
268
|
+ return err
|
|
269
|
+}
|
|
270
|
+
|
|
271
|
+// SavePrizeDetail 保存奖品明细
|
|
272
|
+func (m *LuckDrawDao) SavePrizeDetail(prize model.TaLuckdrawPrize) error {
|
|
273
|
+ if prize.CouponCardType == models.PRIZE_TYPE_COUPON {
|
|
274
|
+ var coupon model.TaCoupon
|
|
275
|
+ _, err := m.db.Where("coupon_id=?", prize.CouponCardId).Get(&coupon)
|
|
276
|
+ if err != nil {
|
|
277
|
+ return err
|
|
278
|
+ }
|
|
279
|
+ if coupon.UsedCount > 0 {
|
|
280
|
+ return errors.New("卡券已被使用!不允许保存!")
|
|
281
|
+ }
|
|
282
|
+ var details []model.TaPrizeDetail
|
|
283
|
+ i := 0
|
|
284
|
+ for i < coupon.TotalCount {
|
|
285
|
+ unix := time.Now().UnixNano()
|
|
286
|
+ random := utils.GetRand(5) + strconv.Itoa(int(unix))
|
|
287
|
+ url := `/` + prize.CouponCardId + `/` + beego.AppConfig.String("defaultShareUserID") + `/` + prize.CouponCardType + `/` + random + `/receive`
|
|
288
|
+ var d = model.TaPrizeDetail{
|
|
289
|
+ Id: utils.GetGUID(),
|
|
290
|
+ PrizeId: prize.Id,
|
|
291
|
+ Url: beego.AppConfig.String("clientShareURL") + url,
|
|
292
|
+ Status: models.STATUS_NORMAL,
|
|
293
|
+ }
|
|
294
|
+ details = append(details, d)
|
|
295
|
+ }
|
|
296
|
+ m.db.Insert(details)
|
|
297
|
+ }
|
|
298
|
+
|
|
299
|
+ return nil
|
|
300
|
+}
|
|
301
|
+
|
|
302
|
+// UpdateLuckDraw 修改抽奖
|
|
303
|
+func (m *LuckDrawDao) UpdateLuckDraw(luckdraw model.TaLuckdraw, cols []string) error {
|
|
304
|
+ _, err := m.db.Cols(cols...).Where("id=?", luckdraw.Id).Update(luckdraw)
|
|
305
|
+ return err
|
|
306
|
+}
|
|
307
|
+
|
67
|
308
|
// GetLuckDraw 获取抽奖信息
|
68
|
309
|
func (m *LuckDrawDao) GetLuckDraw(id string) (*LuckDraw, error) {
|
69
|
310
|
if id == "" {
|
|
@@ -80,69 +321,139 @@ func (m *LuckDrawDao) GetLuckDraw(id string) (*LuckDraw, error) {
|
80
|
321
|
return nil, errors.New("获取奖品信息失败")
|
81
|
322
|
}
|
82
|
323
|
luckdraw.Prizes = prizes
|
|
324
|
+ imgs, err := m.GetLuckDrawImgs(id)
|
|
325
|
+ if err != nil {
|
|
326
|
+ utils.LogError("获取抽奖图片信息失败:", err)
|
|
327
|
+ return nil, errors.New("获取抽奖图片信息失败")
|
|
328
|
+ }
|
|
329
|
+ luckdraw.Imgs = imgs
|
83
|
330
|
return luckdraw, nil
|
84
|
331
|
}
|
85
|
332
|
|
|
333
|
+// AddCustomerLuckDraw 保存用户抽奖配置信息
|
|
334
|
+func (m *LuckDrawDao) AddCustomerLuckDraw(custLuckDraw *model.TaLuckdrawCustomer) (*model.TaLuckdrawCustomer, error) {
|
|
335
|
+ custLuckDraw.LuckdrawCustomerId = utils.GetGUID()
|
|
336
|
+ custLuckDraw.CreateDate = time.Now()
|
|
337
|
+ custLuckDraw.ShareNum = 0
|
|
338
|
+ custLuckDraw.SurplusNum = 0
|
|
339
|
+ _, err := m.db.Insert(custLuckDraw)
|
|
340
|
+ return custLuckDraw, err
|
|
341
|
+}
|
|
342
|
+
|
86
|
343
|
// LuckDraw 抽奖
|
87
|
344
|
func (m *LuckDrawDao) LuckDraw(id string, user *model.TaCustomer) (*model.TaLuckdrawPrize, *model.TaPrizeDetail, *model.TaLuckdrawRecord, error) {
|
88
|
345
|
luckdraw, err := m.GetLuckDrawByID(id)
|
89
|
346
|
if err != nil {
|
90
|
347
|
return nil, nil, nil, errors.New("获取抽奖信息失败!")
|
91
|
348
|
}
|
|
349
|
+ if luckdraw.Status == models.STATUS_READY || time.Now().Before(luckdraw.BeginDate) {
|
|
350
|
+ return nil, nil, nil, errors.New("活动还未开始!")
|
|
351
|
+ }
|
|
352
|
+ if luckdraw.Status == models.STATUS_EXPIRE || time.Now().After(luckdraw.EndDate) {
|
|
353
|
+ return nil, nil, nil, errors.New("活动已结束!")
|
|
354
|
+ }
|
92
|
355
|
if luckdraw.Status != models.STATUS_NORMAL {
|
93
|
356
|
return nil, nil, nil, errors.New("当前抽奖活动状态异常!")
|
94
|
357
|
}
|
95
|
|
- if time.Now().Before(luckdraw.BeginDate) {
|
96
|
|
- return nil, nil, nil, errors.New("活动还未开始!")
|
|
358
|
+ // 系统用户是否可以抽奖
|
|
359
|
+ if luckdraw.IsSysLuckdraw == models.BOOL_FALSE {
|
|
360
|
+ if user.Phone != "" {
|
|
361
|
+ sysuser, err := m.GetUserByTel(user.Phone)
|
|
362
|
+ if err != nil {
|
|
363
|
+ return nil, nil, nil, errors.New("获取信息失败!")
|
|
364
|
+ }
|
|
365
|
+ if sysuser != nil {
|
|
366
|
+ return nil, nil, nil, errors.New("内部人员不允许进行抽奖!")
|
|
367
|
+ }
|
|
368
|
+ }
|
97
|
369
|
}
|
98
|
|
- if time.Now().After(luckdraw.EndDate) {
|
99
|
|
- return nil, nil, nil, errors.New("活动已结束!")
|
|
370
|
+
|
|
371
|
+ // 判断当前用户是否为新用户
|
|
372
|
+ cstluckdrawSet, err := m.GetCustomerLuckDraw(id, user.CustomerId)
|
|
373
|
+ if err != nil {
|
|
374
|
+ utils.LogError("获取用户抽奖配置信息失败:", err)
|
|
375
|
+ return nil, nil, nil, errors.New("获取用户抽奖配置信息失败!")
|
100
|
376
|
}
|
101
|
|
- // if user.Phone != "" {
|
102
|
|
- // sysuser, err := m.GetUserByTel(user.Phone)
|
|
377
|
+
|
|
378
|
+ if luckdraw.JoinType == models.JOINTYPE_NEWUSER {
|
|
379
|
+ if cstluckdrawSet.IsNew == models.BOOL_FALSE {
|
|
380
|
+ return nil, nil, nil, errors.New("您不是新用户,不允许抽奖!")
|
|
381
|
+ }
|
|
382
|
+ }
|
|
383
|
+
|
|
384
|
+ // 抽奖次数判断
|
|
385
|
+ if cstluckdrawSet.SurplusNum <= 0 {
|
|
386
|
+ return nil, nil, nil, errors.New("您的抽奖次数已用完!")
|
|
387
|
+ }
|
|
388
|
+ // userluckdraws, err := m.GetUserRecordByLuckDraw(user.CustomerId, id)
|
103
|
389
|
// if err != nil {
|
104
|
|
- // return nil, nil, errors.New("获取信息失败!")
|
|
390
|
+ // utils.LogError("获取用户抽奖信息失败:", err)
|
|
391
|
+ // return nil, nil, nil, errors.New("获取用户抽奖信息失败!")
|
105
|
392
|
// }
|
106
|
|
- // if sysuser != nil {
|
107
|
|
- // return nil, nil, errors.New("内部人员不允许进行抽奖!")
|
|
393
|
+
|
|
394
|
+ // if len(userluckdraws) >= luckdraw.LuckdrawNum {
|
|
395
|
+ // return nil, nil, nil, errors.New("您的抽奖次数已用完!")
|
|
396
|
+ // }
|
|
397
|
+
|
|
398
|
+ // 判断人数是否已超过限制
|
|
399
|
+ // if luckdraw.JoinNum > 0 {
|
|
400
|
+ // usernum, err := m.GetLuckDrawCustomerNum(luckdraw.Id)
|
|
401
|
+ // if err != nil {
|
|
402
|
+ // utils.LogError("获取抽奖人员信息失败:", err)
|
|
403
|
+ // return nil, nil, nil, errors.New("获取抽奖人员信息失败!")
|
|
404
|
+ // }
|
|
405
|
+ // if luckdraw.JoinNum <= usernum {
|
|
406
|
+ // err = m.UpdateLuckDrawEndDate(luckdraw.Id)
|
|
407
|
+ // if err != nil {
|
|
408
|
+ // utils.LogError("操作失败,请刷新后重试:", err)
|
|
409
|
+ // return nil, nil, nil, errors.New("操作失败,请刷新后重试!")
|
|
410
|
+ // }
|
|
411
|
+ // return nil, nil, nil, errors.New("活动已结束!")
|
108
|
412
|
// }
|
109
|
413
|
// }
|
110
|
|
- userluckdraws, err := m.GetUserRecordByLuckDraw(user.CustomerId, id)
|
111
|
|
- if err != nil {
|
112
|
|
- utils.LogError("获取用户抽奖信息失败:", err)
|
113
|
|
- return nil, nil, nil, errors.New("获取用户抽奖信息失败!")
|
114
|
|
- }
|
115
|
|
- if len(userluckdraws) > 0 {
|
116
|
|
- return nil, nil, nil, errors.New("您已参与过此次抽奖,不允许重复抽奖!")
|
117
|
|
- }
|
118
|
|
- prizes, err := m.GetPrizeStock(id)
|
|
414
|
+
|
|
415
|
+ // 判断是否内置用户
|
|
416
|
+ defaultPrize, err := m.GetPrizeDefaultByUser(id, user)
|
119
|
417
|
if err != nil {
|
120
|
|
- utils.LogError("获取奖项失败:", err)
|
121
|
|
- return nil, nil, nil, errors.New("获取奖项失败!")
|
|
418
|
+ utils.LogError("操作失败,请刷新后重试:", err)
|
|
419
|
+ return nil, nil, nil, errors.New("操作失败,请刷新后重试!")
|
122
|
420
|
}
|
123
|
|
- if len(prizes) == 0 {
|
124
|
|
- err = m.UpdateLuckDrawEndDate(luckdraw.Id)
|
|
421
|
+
|
|
422
|
+ var prize = new(model.TaLuckdrawPrize)
|
|
423
|
+ if defaultPrize.Id != "" {
|
|
424
|
+ // 内置用户,直接中奖
|
|
425
|
+ prize = &defaultPrize.TaLuckdrawPrize
|
|
426
|
+ } else {
|
|
427
|
+ prizes, err := m.GetPrizeStock(id)
|
125
|
428
|
if err != nil {
|
126
|
|
- utils.LogError("操作失败,请刷新后重试:", err)
|
127
|
|
- return nil, nil, nil, errors.New("操作失败,请刷新后重试!")
|
|
429
|
+ utils.LogError("获取奖项失败:", err)
|
|
430
|
+ return nil, nil, nil, errors.New("获取奖项失败!")
|
|
431
|
+ }
|
|
432
|
+ if len(prizes) == 0 {
|
|
433
|
+ err = m.UpdateLuckDrawEndDate(luckdraw.Id)
|
|
434
|
+ if err != nil {
|
|
435
|
+ utils.LogError("操作失败,请刷新后重试:", err)
|
|
436
|
+ return nil, nil, nil, errors.New("操作失败,请刷新后重试!")
|
|
437
|
+ }
|
|
438
|
+ return nil, nil, nil, errors.New("活动已结束!")
|
|
439
|
+ }
|
|
440
|
+
|
|
441
|
+ prize, err = m.GetWinning(prizes)
|
|
442
|
+ if err != nil {
|
|
443
|
+ utils.LogError("获取奖项失败:", err)
|
|
444
|
+ return nil, nil, nil, errors.New("获取奖项失败!")
|
128
|
445
|
}
|
129
|
|
- return nil, nil, nil, errors.New("活动已结束!")
|
130
|
446
|
}
|
131
|
|
- prize, err := m.GetWinning(prizes)
|
|
447
|
+
|
|
448
|
+ details, err := m.GetPrizeDetail(prize.Id)
|
132
|
449
|
if err != nil {
|
133
|
|
- utils.LogError("获取奖项失败:", err)
|
134
|
|
- return nil, nil, nil, errors.New("获取奖项失败!")
|
|
450
|
+ utils.LogError("获取奖项详情失败:", err)
|
|
451
|
+ return nil, nil, nil, errors.New("获取奖项详情失败!")
|
135
|
452
|
}
|
136
|
453
|
|
137
|
|
- // details, err := m.GetPrizeDetail(prize.Id)
|
138
|
|
- // if err != nil {
|
139
|
|
- // utils.LogError("获取奖项详情失败:", err)
|
140
|
|
- // return nil, nil, errors.New("获取奖项详情失败!")
|
141
|
|
- // }
|
142
|
|
-
|
143
|
454
|
// 保存中奖记录
|
144
|
455
|
var record = &model.TaLuckdrawRecord{}
|
145
|
|
- // record.Id = utils.GetGUID()
|
|
456
|
+ record.Id = utils.GetGUID()
|
146
|
457
|
record.OrgId = luckdraw.OrgId
|
147
|
458
|
record.CaseId = luckdraw.CaseId
|
148
|
459
|
record.PrizeId = prize.Id
|
|
@@ -159,23 +470,30 @@ func (m *LuckDrawDao) LuckDraw(id string, user *model.TaCustomer) (*model.TaLuck
|
159
|
470
|
utils.LogError("保存中奖纪录失败:", err)
|
160
|
471
|
return nil, nil, nil, err
|
161
|
472
|
}
|
162
|
|
- // var detail = model.TaPrizeDetail{}
|
163
|
|
- // if len(details) > 0 {
|
164
|
|
- // // 更新中奖纪录明细
|
165
|
|
- // details[0].ReceiveId = newrecord.Id
|
166
|
|
- // err = m.UpdatePrizeDetail(details[0])
|
167
|
|
- // if err != nil {
|
168
|
|
- // utils.LogError("更新中奖纪录明细失败:", err)
|
169
|
|
- // return nil, nil, errors.New("操作失败!")
|
170
|
|
- // }
|
171
|
|
- // detail = details[0]
|
172
|
|
- // // 奖项自动核销,走卡券核销流程
|
173
|
|
- // err = m.PrizeWriteOff(newrecord.Id, user.CustomerId)
|
174
|
|
- // if err != nil {
|
175
|
|
- // utils.LogError("卡券核销失败:", err)
|
176
|
|
- // return nil, nil, errors.New("操作失败!")
|
177
|
|
- // }
|
178
|
|
- // }
|
|
473
|
+ // 更新内置信息
|
|
474
|
+ err = m.UpdatePrizeDefault(defaultPrize.DefaultId, record.Id)
|
|
475
|
+ if err != nil {
|
|
476
|
+ utils.LogError("更新内置信息失败:", err)
|
|
477
|
+ return nil, nil, nil, err
|
|
478
|
+ }
|
|
479
|
+
|
|
480
|
+ var detail = model.TaPrizeDetail{}
|
|
481
|
+ if len(details) > 0 {
|
|
482
|
+ // 更新中奖纪录明细
|
|
483
|
+ details[0].ReceiveId = record.Id
|
|
484
|
+ err = m.UpdatePrizeDetail(details[0])
|
|
485
|
+ if err != nil {
|
|
486
|
+ utils.LogError("更新中奖纪录明细失败:", err)
|
|
487
|
+ return nil, nil, nil, errors.New("操作失败!")
|
|
488
|
+ }
|
|
489
|
+ detail = details[0]
|
|
490
|
+ // 奖项自动核销,走卡券核销流程
|
|
491
|
+ err = m.PrizeWriteOff(record.Id, user.CustomerId)
|
|
492
|
+ if err != nil {
|
|
493
|
+ utils.LogError("卡券核销失败:", err)
|
|
494
|
+ return nil, nil, nil, errors.New("操作失败!")
|
|
495
|
+ }
|
|
496
|
+ }
|
179
|
497
|
// 更新库存
|
180
|
498
|
if prize.IsReality == 1 {
|
181
|
499
|
prize.Remainder = prize.Remainder - 1
|
|
@@ -195,7 +513,48 @@ func (m *LuckDrawDao) LuckDraw(id string, user *model.TaCustomer) (*model.TaLuck
|
195
|
513
|
}
|
196
|
514
|
}
|
197
|
515
|
|
198
|
|
- return prize, nil, record, err
|
|
516
|
+ return prize, &detail, record, err
|
|
517
|
+}
|
|
518
|
+
|
|
519
|
+// PrizeWithDefault 默认奖品
|
|
520
|
+type PrizeWithDefault struct {
|
|
521
|
+ DefaultId string
|
|
522
|
+ model.TaLuckdrawPrize `xorm:"extends"`
|
|
523
|
+}
|
|
524
|
+
|
|
525
|
+// GetPrizeDefaultByUser 获取默认用户
|
|
526
|
+func (m *LuckDrawDao) GetPrizeDefaultByUser(id string, customer *model.TaCustomer) (*PrizeWithDefault, error) {
|
|
527
|
+ var prize = PrizeWithDefault{}
|
|
528
|
+ sql := `select a.default_id,b.* from ta_prize_default a inner join ta_prize_default b on a.prize_id=b.id where a.luckdraw_id=? and a.tel=? and is_receive=?`
|
|
529
|
+ _, err := m.db.Sql(sql, id, customer.Phone, models.BOOL_FALSE).Get(prize)
|
|
530
|
+ return &prize, err
|
|
531
|
+}
|
|
532
|
+
|
|
533
|
+// UpdatePrizeDefault 更新系统内置信息
|
|
534
|
+func (m *LuckDrawDao) UpdatePrizeDefault(id, recordid string) error {
|
|
535
|
+ var prizeDefault = model.TaPrizeDefault{
|
|
536
|
+ DefaultId: id,
|
|
537
|
+ ReceiveDate: time.Now(),
|
|
538
|
+ ReceiveId: recordid,
|
|
539
|
+ IsReceive: models.BOOL_TRUE,
|
|
540
|
+ }
|
|
541
|
+ cols := []string{
|
|
542
|
+ "receive_id",
|
|
543
|
+ "receive_date",
|
|
544
|
+ "is_receive",
|
|
545
|
+ }
|
|
546
|
+ _, err := m.db.Cols(cols...).Where("id=?", prizeDefault.DefaultId).Update(prizeDefault)
|
|
547
|
+ return err
|
|
548
|
+}
|
|
549
|
+
|
|
550
|
+// GetCustomerLuckDraw 获取用户抽奖设置
|
|
551
|
+func (m *LuckDrawDao) GetCustomerLuckDraw(luckdrawid, customerid string) (*model.TaLuckdrawCustomer, error) {
|
|
552
|
+ var customerluckdraw model.TaLuckdrawCustomer
|
|
553
|
+ _, err := m.db.Where("luckdraw_id=?", luckdrawid).And("customer_id=?", customerid).Get(&customerluckdraw)
|
|
554
|
+ if err != nil {
|
|
555
|
+ return nil, err
|
|
556
|
+ }
|
|
557
|
+ return &customerluckdraw, nil
|
199
|
558
|
}
|
200
|
559
|
|
201
|
560
|
// PrizeWriteOff 奖品核销
|
|
@@ -287,9 +646,11 @@ func (m *LuckDrawDao) UpdateLuckDrawEndDate(id string) error {
|
287
|
646
|
var luckdraw = model.TaLuckdraw{
|
288
|
647
|
Id: id,
|
289
|
648
|
EndDate: time.Now(),
|
|
649
|
+ Status: models.STATUS_EXPIRE,
|
290
|
650
|
}
|
291
|
651
|
cols := []string{
|
292
|
652
|
"end_date",
|
|
653
|
+ "status",
|
293
|
654
|
}
|
294
|
655
|
_, err := m.db.Cols(cols...).Where("id=?", id).Update(luckdraw)
|
295
|
656
|
return err
|
|
@@ -314,7 +675,12 @@ func (m *LuckDrawDao) UpdateStock(prize *model.TaLuckdrawPrize) error {
|
314
|
675
|
// GetPrizeStock 判断奖项库存
|
315
|
676
|
func (m *LuckDrawDao) GetPrizeStock(luckdrawid string) ([]model.TaLuckdrawPrize, error) {
|
316
|
677
|
var prizes []model.TaLuckdrawPrize
|
317
|
|
- err := m.db.Where("luckdraw_id=?", luckdrawid).And("status=?", models.STATUS_NORMAL).And("(remainder>0 or is_reality=0)").Find(&prizes)
|
|
678
|
+ sql := `select a.remainder-(case when b.default_num is null then 0 else b.default_num end) as remainder,
|
|
679
|
+ a.* from ta_luckdraw_prize a
|
|
680
|
+ left join (select prize_id,count(1) as default_num from ta_prize_default where luckdraw_id) b
|
|
681
|
+ on a.id=b.prize_id where a.luckdraw_id=? and a.status=? and (a.remainder-(case when b.default_num is null then 0 else b.default_num end)>0 or is_reality=0)`
|
|
682
|
+ err := m.db.Sql(sql).Find(&prizes)
|
|
683
|
+ // err := m.db.Where("luckdraw_id=?", luckdrawid).And("status=?", models.STATUS_NORMAL).And("(remainder>0 or is_reality=0)").Find(&prizes)
|
318
|
684
|
return prizes, err
|
319
|
685
|
}
|
320
|
686
|
|
|
@@ -329,7 +695,7 @@ func (m *LuckDrawDao) GetPrizeByID(id string) (model.TaLuckdrawPrize, error) {
|
329
|
695
|
func (m *LuckDrawDao) SaveRecord(record model.TaLuckdrawRecord) (*model.TaLuckdrawRecord, error) {
|
330
|
696
|
record.CreateDate = time.Now()
|
331
|
697
|
record.Status = models.STATUS_READY
|
332
|
|
- record.Id = utils.GetGUID()
|
|
698
|
+ // record.Id = utils.GetGUID()
|
333
|
699
|
_, err := m.db.Insert(&record)
|
334
|
700
|
return &record, err
|
335
|
701
|
}
|
|
@@ -482,3 +848,19 @@ func (m *LuckDrawDao) GetLuckDrawShareData(from, to, luckID, caseID string) ([]m
|
482
|
848
|
|
483
|
849
|
return dts, nil
|
484
|
850
|
}
|
|
851
|
+
|
|
852
|
+// UpdateShareNum 分享增加抽奖次数
|
|
853
|
+func (m *LuckDrawDao) UpdateShareNum(luckdraw *LuckDraw, from string) error {
|
|
854
|
+ num := strconv.Itoa(luckdraw.ShareAddNum)
|
|
855
|
+ sql := `update ta_luckdraw_customer set share_num=share_num+` + num + `,surplus_num = surplus_num+` + num + ` where luckdraw_id=? and customer_id=?`
|
|
856
|
+ _, err := m.db.Exec(sql, luckdraw.Id, from)
|
|
857
|
+ return err
|
|
858
|
+}
|
|
859
|
+
|
|
860
|
+// GetLuckDrawCustomerNum 获取抽奖人数
|
|
861
|
+func (m *LuckDrawDao) GetLuckDrawCustomerNum(luckdrawid string) (int, error) {
|
|
862
|
+ var records []model.TaLuckdrawRecord
|
|
863
|
+ sql := `select DISTINCT user_id from ta_luckdraw_record where luckdraw_id=?`
|
|
864
|
+ err := m.db.Sql(sql, luckdrawid).Find(&records)
|
|
865
|
+ return len(records), err
|
|
866
|
+}
|