瀏覽代碼

1022AMUpdateByWangf

wangfei 6 年之前
父節點
當前提交
c6f9e61540

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

@@ -12,6 +12,9 @@ qrcodePrefix = bodycheck_
12 12
 followText = 您正在使用悦琦设备进行体检~
13 13
 resultURL = http://spaceofcheng.ycjcjy.com/wechat/bodyCheck.html
14 14
 
15
+clientShareURL = http://spaceofcheng.ycjcjy.com/wechat/user.html
16
+defaultShareUserID = 1
17
+
15 18
 [cros]
16 19
 allowMode = dev
17 20
 allowCredentials = true

+ 102
- 0
controllers/luckdraw/luckdraw.go 查看文件

@@ -4,7 +4,9 @@ import (
4 4
 	"errors"
5 5
 	"net/http"
6 6
 	"spaceofcheng/services/controllers"
7
+	"spaceofcheng/services/models"
7 8
 	"spaceofcheng/services/models/customer"
9
+	luckdrawModel "spaceofcheng/services/models/luckdraw"
8 10
 	"spaceofcheng/services/models/model"
9 11
 	"spaceofcheng/services/service/luckdraw"
10 12
 	"spaceofcheng/services/utils"
@@ -25,6 +27,92 @@ func (c *LuckDrawController) Constructor() {
25 27
 	c.custDAO = customer.NewCustomerDAO(c.Context)
26 28
 }
27 29
 
30
+// GetLuckDrawTpl 获取抽奖模板
31
+func (c *LuckDrawController) GetLuckDrawTpl() {
32
+	tpls, err := c.serv.GetLuckDrawTpl()
33
+	if err != nil {
34
+		c.ResponseError(err)
35
+	}
36
+	c.ResponseJSON(tpls)
37
+}
38
+
39
+// GetLuckDrawList 获取抽奖列表
40
+func (c *LuckDrawController) GetLuckDrawList() {
41
+	caseids := c.GetString("caseid")
42
+	if caseids == "" {
43
+		cases := c.Context.Get("cases").([]model.SysUserCase)
44
+		caseids = c.GetCaseIDs(cases)
45
+	}
46
+	page, _ := c.GetInt("page")
47
+	pageSize, _ := c.GetInt("pagesize")
48
+	name := c.GetString("name")
49
+	status := c.GetString("status")
50
+	list, err := c.serv.GetLuckDrawList(caseids, name, status, page, pageSize)
51
+	if err != nil {
52
+		c.ResponseError(err)
53
+	}
54
+	c.ResponseJSON(list)
55
+}
56
+
57
+// GetLuckDrawRecordList 获取抽奖记录列表
58
+func (c *LuckDrawController) GetLuckDrawRecordList() {
59
+	luckdrawid := c.GetString(":luckdrawid")
60
+	page, _ := c.GetInt("page")
61
+	pageSize, _ := c.GetInt("pagesize")
62
+	tel := c.GetString("tel")
63
+	list, err := c.serv.GetLuckDrawRecordList(luckdrawid, tel, page, pageSize)
64
+	if err != nil {
65
+		c.ResponseError(err)
66
+	}
67
+	c.ResponseJSON(list)
68
+}
69
+
70
+// GetLuckDrawShareList 获取抽奖分享记录列表
71
+func (c *LuckDrawController) GetLuckDrawShareList() {
72
+	luckdrawid := c.GetString(":luckdrawid")
73
+	page, _ := c.GetInt("page")
74
+	pageSize, _ := c.GetInt("pagesize")
75
+	tel := c.GetString("tel")
76
+	list, err := c.serv.GetLuckDrawShareList(luckdrawid, tel, page, pageSize)
77
+	if err != nil {
78
+		c.ResponseError(err)
79
+	}
80
+	c.ResponseJSON(list)
81
+}
82
+
83
+// GetLuckDrawByID 根据id获取抽奖信息
84
+func (c *LuckDrawController) GetLuckDrawByID() {
85
+	id := c.GetString(":luckdrawid")
86
+	luckdraw, err := c.serv.GetLuckDrawInfoByID(id)
87
+	if err != nil {
88
+		c.ResponseError(err)
89
+	}
90
+	c.ResponseJSON(luckdraw)
91
+}
92
+
93
+// SaveLuckDraw 保存抽奖信息
94
+func (c *LuckDrawController) SaveLuckDraw() {
95
+	info := luckdrawModel.LuckDrawInfo{}
96
+	if err := c.ParseForm(&info); err != nil {
97
+		c.ResponseError(err)
98
+	}
99
+	newinfo, err := c.serv.SaveLuckDraw(&info)
100
+	if err != nil {
101
+		c.ResponseError(err)
102
+	}
103
+	c.ResponseJSON(newinfo)
104
+}
105
+
106
+// DelLuckDraw 删除抽奖信息
107
+func (c *LuckDrawController) DelLuckDraw() {
108
+	luckdrawid := c.GetString(":luckdrawid")
109
+	err := c.serv.DelLuckDraw(luckdrawid)
110
+	if err != nil {
111
+		c.ResponseError(err)
112
+	}
113
+	c.ResponseJSON("操作成功!")
114
+}
115
+
28 116
 // GetUserByCode 根据code获取用户信息
29 117
 func (c *LuckDrawController) GetUserByCode() {
30 118
 	userRaw := c.Context.Get("customer")
@@ -249,5 +337,19 @@ func (c *LuckDrawController) SaveShareRecord() {
249 337
 		)
250 338
 	}
251 339
 
340
+	fromIsNew := c.GetString("isnew")
341
+
342
+	// 分享可以增加抽奖次数
343
+	if luckdraw.ShareType == models.SHARETYPE_NEWUSER && fromIsNew == "true" {
344
+		if err := c.serv.UpdateShareNum(luckdraw, fromID); err != nil {
345
+			utils.LogError("更新抽奖次数失败: " + err.Error())
346
+			c.ResponseData(
347
+				errIgnore,
348
+				"保存分享记录失败",
349
+				http.StatusBadRequest,
350
+			)
351
+		}
352
+	}
353
+
252 354
 	c.ResponseJSON("ok")
253 355
 }

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

@@ -177,3 +177,30 @@ const (
177 177
 const (
178 178
 	ADMIN_ID = "1"
179 179
 )
180
+
181
+// 奖品类型
182
+const (
183
+	PRIZE_TYPE_COUPONCARD = "couponcard"
184
+	PRIZE_TYPE_THIRD      = "third"
185
+
186
+	PRIZE_TYPE_COUPON = "coupon"
187
+	PRIZE_TYPE_CARD   = "card"
188
+)
189
+
190
+// 参与类型设置
191
+const (
192
+	JOINTYPE_NEWUSER = "newuser"
193
+	JOINTYPE_NO      = "no"
194
+)
195
+
196
+// 抽奖分享设置
197
+const (
198
+	SHARETYPE_NEWUSER = "newuser"
199
+	SHARETYE_NO       = "no"
200
+)
201
+
202
+// 抽奖次数类型
203
+const (
204
+	NUMTYPE_REPART    = "repeat"
205
+	NUMTYPE_NOTREPART = "no_repeat"
206
+)

+ 439
- 57
models/luckdraw/luckdraw.go 查看文件

@@ -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
+}

+ 23
- 12
models/model/ta_luckdraw.go 查看文件

@@ -5,16 +5,27 @@ import (
5 5
 )
6 6
 
7 7
 type TaLuckdraw struct {
8
-	Id           string    `xorm:"not null pk VARCHAR(64)"`
9
-	Name         string    `xorm:"VARCHAR(50)"`
10
-	ThemeId      string    `xorm:"VARCHAR(64)"`
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       string    `xorm:"VARCHAR(64)"`
16
-	CreateDate   time.Time `xorm:"DATETIME"`
17
-	CreateUser   string    `xorm:"VARCHAR(64)"`
18
-	Remark       string    `xorm:"TEXT"`
19
-	Status       int       `xorm:"SMALLINT(6)"`
8
+	Id                string    `xorm:"not null pk VARCHAR(64)"`
9
+	Name              string    `xorm:"VARCHAR(50)"`
10
+	ThemeId           string    `xorm:"VARCHAR(64)"`
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            string    `xorm:"VARCHAR(64)"`
16
+	CreateDate        time.Time `xorm:"DATETIME"`
17
+	CreateUser        string    `xorm:"VARCHAR(64)"`
18
+	Remark            string    `xorm:"TEXT"`
19
+	Status            int       `xorm:"SMALLINT(6)"`
20
+	TplId             string    `xorm:"VARCHAR(64)"`
21
+	JoinedNum         int       `xorm:"default 0 INT(11)"`
22
+	JoinNum           int       `xorm:"default 0 INT(11)"`
23
+	JoinType          string    `xorm:"VARCHAR(20)"`
24
+	NumType           string    `xorm:"VARCHAR(20)"`
25
+	NumInterval       string    `xorm:"VARCHAR(20)"`
26
+	LuckdrawNum       int       `xorm:"default 0 INT(11)"`
27
+	ShareType         string    `xorm:"VARCHAR(20)"`
28
+	ShareAddNum       int       `xorm:"SMALLINT(6)"`
29
+	IsSysLuckdraw     int       `xorm:"TINYINT(1)"`
30
+	IsInternalDefault int       `xorm:"TINYINT(1)"`
20 31
 }

models/model/td_luckdraw_img.go → models/model/ta_luckdraw_img.go 查看文件

@@ -1,6 +1,6 @@
1 1
 package model
2 2
 
3
-type TdLuckdrawImg struct {
3
+type TaLuckdrawImg struct {
4 4
 	ImgId      string `xorm:"not null VARCHAR(64)"`
5 5
 	LuckdrawId string `xorm:"VARCHAR(64)"`
6 6
 	ImgUrl     string `xorm:"TEXT"`

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

@@ -18,4 +18,7 @@ type TaLuckdrawPrize struct {
18 18
 	IsReality         int       `xorm:"SMALLINT(6)"`
19 19
 	VerificationStart time.Time `xorm:"DATETIME"`
20 20
 	VerificationEnd   time.Time `xorm:"DATETIME"`
21
+	PrizeType         string    `xorm:"VARCHAR(20)"`
22
+	CouponCardType    string    `xorm:"VARCHAR(20)"`
23
+	CouponCardId      string    `xorm:"VARCHAR(64)"`
21 24
 }

+ 15
- 12
models/model/ta_luckdraw_record.go 查看文件

@@ -5,16 +5,19 @@ import (
5 5
 )
6 6
 
7 7
 type TaLuckdrawRecord struct {
8
-	Id           string    `xorm:"not null pk VARCHAR(64)"`
9
-	LuckdrawId   string    `xorm:"VARCHAR(64)"`
10
-	PrizeId      string    `xorm:"VARCHAR(64)"`
11
-	PrizeName    string    `xorm:"VARCHAR(50)"`
12
-	UserId       string    `xorm:"VARCHAR(64)"`
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       string    `xorm:"VARCHAR(64)"`
8
+	Id             string    `xorm:"not null pk VARCHAR(64)"`
9
+	LuckdrawId     string    `xorm:"VARCHAR(64)"`
10
+	PrizeId        string    `xorm:"VARCHAR(64)"`
11
+	PrizeName      string    `xorm:"VARCHAR(50)"`
12
+	UserId         string    `xorm:"VARCHAR(64)"`
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         string    `xorm:"VARCHAR(64)"`
20
+	PrizeType      string    `xorm:"VARCHAR(20)"`
21
+	CouponCardType string    `xorm:"VARCHAR(20)"`
22
+	CouponCardId   string    `xorm:"VARCHAR(64)"`
20 23
 }

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

@@ -16,4 +16,6 @@ type TaVipCardChild struct {
16 16
 	Amount           string    `xorm:"DECIMAL(8,2)"`
17 17
 	SalesId          string    `xorm:"VARCHAR(64)"`
18 18
 	SalesName        string    `xorm:"VARCHAR(50)"`
19
+	BeginDate        time.Time `xorm:"DATETIME"`
20
+	EndDate          time.Time `xorm:"DATETIME"`
19 21
 }

+ 11
- 0
routers/common.go 查看文件

@@ -11,6 +11,7 @@ import (
11 11
 	"spaceofcheng/services/controllers/customer"
12 12
 	"spaceofcheng/services/controllers/goods"
13 13
 	"spaceofcheng/services/controllers/gymcard"
14
+	"spaceofcheng/services/controllers/luckdraw"
14 15
 	"spaceofcheng/services/controllers/luckdrawlist"
15 16
 	"spaceofcheng/services/controllers/marketing"
16 17
 	"spaceofcheng/services/controllers/message"
@@ -197,6 +198,16 @@ func getCommonRoutes() beego.LinkNamespace {
197 198
 		beego.NSRouter("luckdrawlist/verify/:luckdrawId", &luckdrawlist.LuckdrawlistController{}, "get:GetVerifyList"),
198 199
 		beego.NSRouter("luckdrawlist/verify/:luckdrawId", &luckdrawlist.LuckdrawlistController{}, "put:VerifyLuckdraw"),
199 200
 
201
+		beego.NSRouter("luckdrawtpl", &luckdraw.LuckDrawController{}, "get:GetLuckDrawTpl"),
202
+		beego.NSRouter("luckdraw", &luckdraw.LuckDrawController{}, "get:GetLuckDrawList"),
203
+		beego.NSRouter("luckdraw/:luckdrawid", &luckdraw.LuckDrawController{}, "get:GetLuckDrawByID"),
204
+		beego.NSRouter("luckdraw", &luckdraw.LuckDrawController{}, "post:SaveLuckDraw"),
205
+		beego.NSRouter("luckdraw/:luckdrawid", &luckdraw.LuckDrawController{}, "put:SaveLuckDraw"),
206
+		beego.NSRouter("luckdraw/:luckdrawid", &luckdraw.LuckDrawController{}, "delete:DelLuckDraw"),
207
+
208
+		beego.NSRouter("luckdraw/records/:luckdrawid", &luckdraw.LuckDrawController{}, "delete:GetLuckDrawRecordList"),
209
+		beego.NSRouter("luckdraw/share/:luckdrawid", &luckdraw.LuckDrawController{}, "delete:GetLuckDrawShareList"),
210
+
200 211
 		// bodychecklist 体检列表
201 212
 		beego.NSRouter("bodychecklist", &bodychecklist.BodychecklistController{}, "get:GetBodyCheckList"),
202 213
 		// role 角色

+ 279
- 0
service/luckdraw/luckdraw.go 查看文件

@@ -6,6 +6,7 @@ import (
6 6
 	"spaceofcheng/services/models/course"
7 7
 	"spaceofcheng/services/models/luckdraw"
8 8
 	"spaceofcheng/services/models/model"
9
+	"spaceofcheng/services/service"
9 10
 	"spaceofcheng/services/utils"
10 11
 	"time"
11 12
 )
@@ -26,6 +27,277 @@ func NewLuckdrawServ(ctx *utils.Context) *LuckdrawServ {
26 27
 	}
27 28
 }
28 29
 
30
+// GetLuckDrawTpl 获取抽奖模板
31
+func (s *LuckdrawServ) GetLuckDrawTpl() ([]model.TaLuckdrawTpl, error) {
32
+	org := s.ctx.Get("org").(model.SysOrg)
33
+	tpls, err := s.dao.GetLuckDrawTpl(org.OrgId)
34
+	return tpls, err
35
+}
36
+
37
+// GetLuckDrawList 获取抽奖列表
38
+func (s *LuckdrawServ) GetLuckDrawList(caseids, name, status string, page, pageSize int) (map[string]interface{}, error) {
39
+	if pageSize == 0 {
40
+		pageSize = service.PAGENUM
41
+	}
42
+	if page == 0 {
43
+		page = 1
44
+	}
45
+	list, err := s.dao.GetLuckDrawList(caseids, name, status, page, pageSize)
46
+	if err != nil {
47
+		utils.LogError("获取抽奖信息失败: " + err.Error())
48
+		return nil, errors.New("获取抽奖信息失败")
49
+	}
50
+	total, err := s.dao.GetLuckDrawCount(caseids, name, status)
51
+	if err != nil {
52
+		utils.LogError("获取抽奖信息失败: " + err.Error())
53
+		return nil, errors.New("获取抽奖信息失败")
54
+	}
55
+
56
+	return map[string]interface{}{
57
+		"list":     list,
58
+		"pagesize": pageSize,
59
+		"pagenum":  total,
60
+		"page":     page,
61
+	}, nil
62
+}
63
+
64
+// GetLuckDrawRecordList 获取抽奖记录列表
65
+func (s *LuckdrawServ) GetLuckDrawRecordList(luckdrawid, tel string, page, pageSize int) (map[string]interface{}, error) {
66
+	if pageSize == 0 {
67
+		pageSize = service.PAGENUM
68
+	}
69
+	if page == 0 {
70
+		page = 1
71
+	}
72
+	list, err := s.dao.GetLuckDrawRecord(luckdrawid, tel, page, pageSize)
73
+	if err != nil {
74
+		utils.LogError("获取抽奖记录信息失败: " + err.Error())
75
+		return nil, errors.New("获取抽奖记录信息失败")
76
+	}
77
+	total, err := s.dao.GetLuckDrawRecordCount(luckdrawid, tel)
78
+	if err != nil {
79
+		utils.LogError("获取抽奖记录信息失败: " + err.Error())
80
+		return nil, errors.New("获取抽奖记录信息失败")
81
+	}
82
+
83
+	return map[string]interface{}{
84
+		"list":     list,
85
+		"pagesize": pageSize,
86
+		"pagenum":  total,
87
+		"page":     page,
88
+	}, nil
89
+}
90
+
91
+// GetLuckDrawShareList 获取抽奖分享记录列表
92
+func (s *LuckdrawServ) GetLuckDrawShareList(luckdrawid, tel string, page, pageSize int) (map[string]interface{}, error) {
93
+	if pageSize == 0 {
94
+		pageSize = service.PAGENUM
95
+	}
96
+	if page == 0 {
97
+		page = 1
98
+	}
99
+	list, err := s.dao.GetLuckDrawShare(luckdrawid, tel, page, pageSize)
100
+	if err != nil {
101
+		utils.LogError("获取抽奖分享记录信息失败: " + err.Error())
102
+		return nil, errors.New("获取抽奖分享记录信息失败")
103
+	}
104
+	total, err := s.dao.GetLuckDrawShareCount(luckdrawid, tel)
105
+	if err != nil {
106
+		utils.LogError("获取抽奖分享记录信息失败: " + err.Error())
107
+		return nil, errors.New("获取抽奖分享记录信息失败")
108
+	}
109
+
110
+	return map[string]interface{}{
111
+		"list":     list,
112
+		"pagesize": pageSize,
113
+		"pagenum":  total,
114
+		"page":     page,
115
+	}, nil
116
+}
117
+
118
+// GetLuckDrawInfoByID 获取单个抽奖记录
119
+func (s *LuckdrawServ) GetLuckDrawInfoByID(luckdrawid string) (*luckdraw.LuckDrawInfo, error) {
120
+	info, err := s.dao.GetLuckDrawInfoByID(luckdrawid)
121
+	if err != nil {
122
+		utils.LogError("获取抽奖信息失败: " + err.Error())
123
+		return nil, errors.New("获取抽奖信息失败")
124
+	}
125
+	return info, nil
126
+}
127
+
128
+// SaveLuckDraw 保存抽奖信息
129
+func (s *LuckdrawServ) SaveLuckDraw(luckdraw *luckdraw.LuckDrawInfo) (*model.TaLuckdraw, error) {
130
+	if luckdraw.CaseId == "" {
131
+		return nil, utils.LogError("请选择所属案场!")
132
+	}
133
+	if luckdraw.Name == "" {
134
+		return nil, utils.LogError("请输入活动标题!")
135
+	}
136
+	if luckdraw.BeginDate.IsZero() || luckdraw.EndDate.IsZero() {
137
+		return nil, utils.LogError("请选择活动时间!")
138
+	}
139
+	if luckdraw.TplId == "" {
140
+		return nil, utils.LogError("请选择活动模板!")
141
+	}
142
+	if luckdraw.LuckdrawRule == "" {
143
+		return nil, utils.LogError("请填写规则说明!")
144
+	}
145
+	var newInfo *model.TaLuckdraw
146
+	var err error
147
+	if luckdraw.Id == "" {
148
+		org := s.ctx.Get("org").(model.SysOrg)
149
+		luckdraw.OrgId = org.OrgId
150
+		user := s.ctx.Get("user").(model.SysUser)
151
+		luckdraw.CreateUser = user.UserId
152
+		newInfo, err = s.dao.InsertLuckdraw(luckdraw.TaLuckdraw)
153
+		if err != nil {
154
+			utils.LogError("保存抽奖信息失败: " + err.Error())
155
+			return nil, errors.New("保存抽奖信息失败")
156
+		}
157
+	} else {
158
+		if luckdraw.JoinedNum > 0 {
159
+			var cols = []string{
160
+				"name",
161
+				"luckdraw_rule",
162
+				"remark",
163
+			}
164
+			err = s.dao.UpdateLuckDraw(luckdraw.TaLuckdraw, cols)
165
+			if err != nil {
166
+				utils.LogError("更新抽奖信息失败: " + err.Error())
167
+				return nil, errors.New("更新抽奖信息失败")
168
+			}
169
+			return &luckdraw.TaLuckdraw, nil
170
+		}
171
+		var cols = []string{
172
+			"name",
173
+			"tpl_id",
174
+			"luckdraw_rule",
175
+			"begin_date",
176
+			"end_date",
177
+			"case_id",
178
+			"remark",
179
+			"join_num",
180
+			"join_type",
181
+			"num_type",
182
+			"num_interval",
183
+			"luckdraw_num",
184
+			"share_type",
185
+			"share_add_num",
186
+			"is_sys_luckdraw",
187
+			"is_internal_default"}
188
+		err = s.dao.UpdateLuckDraw(luckdraw.TaLuckdraw, cols)
189
+		if err != nil {
190
+			utils.LogError("更新抽奖信息失败: " + err.Error())
191
+			return nil, errors.New("更新抽奖信息失败")
192
+		}
193
+		newInfo = &luckdraw.TaLuckdraw
194
+		// 删除奖品内定信息
195
+		err = s.dao.DelLuckDrawDefault(luckdraw.Id)
196
+		if err != nil {
197
+			utils.LogError("删除抽奖内定信息失败: " + err.Error())
198
+			return nil, errors.New("更新抽奖信息失败")
199
+		}
200
+		// 删除抽奖图片信息
201
+		err = s.dao.DelLuckDrawImgs(luckdraw.Id)
202
+		if err != nil {
203
+			utils.LogError("删除抽奖图片信息失败: " + err.Error())
204
+			return nil, errors.New("更新抽奖信息失败")
205
+		}
206
+		// 删除奖品信息
207
+		err = s.dao.DelLuckDrawPrize(luckdraw.Id)
208
+		if err != nil {
209
+			utils.LogError("删除奖品信息失败: " + err.Error())
210
+			return nil, errors.New("更新奖品信息失败")
211
+		}
212
+	}
213
+
214
+	// 保存抽奖图片信息
215
+	err = s.dao.SaveLuckDrawImgs(luckdraw.Imgs, newInfo.Id)
216
+	if err != nil {
217
+		utils.LogError("保存抽奖图片信息失败: " + err.Error())
218
+		return nil, errors.New("保存抽奖图片信息失败")
219
+	}
220
+	// 保存内定信息
221
+	if luckdraw.IsInternalDefault == models.BOOL_TRUE {
222
+		err = s.dao.SaveLuckDrawDefault(luckdraw.Defaults, newInfo.Id)
223
+		if err != nil {
224
+			utils.LogError("保存奖品内定信息失败: " + err.Error())
225
+			return nil, errors.New("保存奖品内定信息失败")
226
+		}
227
+	}
228
+	// 保存奖品信息
229
+	err = s.dao.SaveLuckDrawPrizes(luckdraw.Prizes, newInfo.Id)
230
+	if err != nil {
231
+		utils.LogError("保存奖品信息失败: " + err.Error())
232
+		return nil, errors.New("保存奖品信息失败")
233
+	}
234
+	return newInfo, nil
235
+}
236
+
237
+// OpenLuckDraw 启动游戏
238
+func (s *LuckdrawServ) OpenLuckDraw(id string) error {
239
+	ld, err := s.dao.GetLuckDrawByID(id)
240
+	if err != nil {
241
+		utils.LogError("获取游戏信息失败: " + err.Error())
242
+		return errors.New("获取游戏信息失败")
243
+	}
244
+	if ld.Status != models.STATUS_READY {
245
+		return errors.New("游戏状态异常,请刷新后重试!")
246
+	}
247
+	var luckdraw = model.TaLuckdraw{
248
+		Id:     id,
249
+		Status: models.STATUS_NORMAL,
250
+	}
251
+	err = s.dao.UpdateLuckDraw(luckdraw, []string{
252
+		"status",
253
+	})
254
+	return err
255
+}
256
+
257
+// StopLuckDraw 暂停游戏
258
+func (s *LuckdrawServ) StopLuckDraw(id string) error {
259
+	// 判断
260
+	ld, err := s.dao.GetLuckDrawByID(id)
261
+	if err != nil {
262
+		utils.LogError("获取游戏信息失败: " + err.Error())
263
+		return errors.New("获取游戏信息失败")
264
+	}
265
+	if ld.Status != models.STATUS_NORMAL {
266
+		return errors.New("游戏状态异常,请刷新后重试!")
267
+	}
268
+
269
+	var luckdraw = model.TaLuckdraw{
270
+		Id:     id,
271
+		Status: models.STATUS_READY,
272
+	}
273
+	err = s.dao.UpdateLuckDraw(luckdraw, []string{
274
+		"status",
275
+	})
276
+	return err
277
+}
278
+
279
+// DelLuckDraw 删除游戏
280
+func (s *LuckdrawServ) DelLuckDraw(id string) error {
281
+	// 判断
282
+	ld, err := s.dao.GetLuckDrawByID(id)
283
+	if err != nil {
284
+		utils.LogError("获取游戏信息失败: " + err.Error())
285
+		return errors.New("获取游戏信息失败")
286
+	}
287
+	if ld.Status != models.STATUS_NORMAL {
288
+		return errors.New("游戏状态异常,请刷新后重试!")
289
+	}
290
+	var luckdraw = model.TaLuckdraw{
291
+		Id:     id,
292
+		Status: models.STATUS_DEL,
293
+	}
294
+	err = s.dao.UpdateLuckDraw(luckdraw, []string{
295
+		"status",
296
+	})
297
+	return err
298
+}
299
+
300
+// GetLuckDraw 获取抽奖信息
29 301
 func (s *LuckdrawServ) GetLuckDraw(id string) (*luckdraw.LuckDraw, error) {
30 302
 	luck, err := s.dao.GetLuckDraw(id)
31 303
 	if err != nil {
@@ -34,6 +306,7 @@ func (s *LuckdrawServ) GetLuckDraw(id string) (*luckdraw.LuckDraw, error) {
34 306
 	return luck, nil
35 307
 }
36 308
 
309
+// LuckDraw 抽奖
37 310
 func (s *LuckdrawServ) LuckDraw(id string, user *model.TaCustomer) (*model.TaLuckdrawPrize, *model.TaPrizeDetail, error) {
38 311
 	prize, prizeDetail, recored, err := s.dao.LuckDraw(id, user)
39 312
 	if err != nil {
@@ -267,3 +540,9 @@ func (s *LuckdrawServ) GetLuckDrawShareData(luckID, from, to, caseID string) ([]
267 540
 	}
268 541
 	return share, nil
269 542
 }
543
+
544
+// UpdateShareNum 更新抽奖次数
545
+func (s *LuckdrawServ) UpdateShareNum(luckdraw *luckdraw.LuckDraw, fromid string) error {
546
+	err := s.dao.UpdateShareNum(luckdraw, fromid)
547
+	return err
548
+}

+ 13
- 0
utils/rand.go 查看文件

@@ -3,6 +3,8 @@ package utils
3 3
 import (
4 4
 	"math/rand"
5 5
 	"reflect"
6
+	"strconv"
7
+	"strings"
6 8
 	"time"
7 9
 )
8 10
 
@@ -30,6 +32,17 @@ func Shuffle(arr interface{}) interface{} {
30 32
 	return res.Interface()
31 33
 }
32 34
 
35
+// GetRand 获取随机数
36
+func GetRand(len int) string {
37
+	newSeed()
38
+	var r []string
39
+	for i := 0; i < len; i++ {
40
+		m := rnd.Intn(9)
41
+		r = append(r, strconv.Itoa(m))
42
+	}
43
+	return strings.Join(r, "")
44
+}
45
+
33 46
 // LuckyDraw 抽奖
34 47
 func LuckyDraw(pList []map[string]interface{}) interface{} {
35 48
 	// 奖池

+ 15
- 0
utils/rand_test.go 查看文件

@@ -0,0 +1,15 @@
1
+package utils_test
2
+
3
+import (
4
+	"spaceofcheng/services/utils"
5
+	"testing"
6
+)
7
+
8
+func TestGetRand(t *testing.T) {
9
+	res1 := utils.GetRand(6)
10
+	res2 := utils.GetRand(6)
11
+
12
+	if res1 == res2 {
13
+		t.Fatalf("TestGetRand error, %s, %s", res1, res2)
14
+	}
15
+}