luckdraw.go 34KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116
  1. package luckdraw
  2. import (
  3. "errors"
  4. "spaceofcheng/services/models"
  5. "spaceofcheng/services/models/model"
  6. "spaceofcheng/services/utils"
  7. "strconv"
  8. "strings"
  9. "time"
  10. "github.com/astaxie/beego"
  11. "github.com/go-xorm/xorm"
  12. )
  13. // LuckDrawDao 当前数据库操作对象
  14. type LuckDrawDao struct {
  15. ctx *utils.Context
  16. db *xorm.Session
  17. }
  18. // NewDAO 初始化DAO
  19. func NewDAO(ctx *utils.Context) *LuckDrawDao {
  20. return &LuckDrawDao{
  21. ctx: ctx,
  22. db: ctx.DB,
  23. }
  24. }
  25. // LuckDraw 抽奖记录
  26. type LuckDraw struct {
  27. model.TaLuckdraw `xorm:"extends"`
  28. ActivityMainImg string
  29. ActivityTitle string
  30. ShareImg string
  31. ShareContent string
  32. Prizes []model.TaLuckdrawPrize
  33. Imgs []model.TaLuckdrawImg
  34. }
  35. type LuckInfo struct {
  36. model.TaLuckdrawRecord `xorm:"extends"`
  37. CustomerQrcode string
  38. }
  39. // GetLuckDrawTpl 获取抽奖模板
  40. func (m *LuckDrawDao) GetLuckDrawTpl(orgid string) ([]model.TaLuckdrawTpl, error) {
  41. var tpls []model.TaLuckdrawTpl
  42. err := m.db.Where("org_id=?", orgid).And("status=?", models.STATUS_NORMAL).Find(&tpls)
  43. return tpls, err
  44. }
  45. // GetLuckDrawList 获取抽奖列表
  46. func (m *LuckDrawDao) GetLuckDrawList(caseids, name, status string, page, pageSize int) ([]model.TaLuckdraw, error) {
  47. var luckdraws []model.TaLuckdraw
  48. dao := m.db.Where("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").And("status<>?", models.STATUS_DEL)
  49. if name != "" {
  50. dao.And("name like '%" + name + "%'")
  51. }
  52. if status != "" {
  53. query := `status=?`
  54. switch status {
  55. case strconv.Itoa(models.STATUS_NORMAL):
  56. query = query + " and end_date>now()"
  57. break
  58. case strconv.Itoa(models.STATUS_EXPIRE):
  59. query = "(" + query + " or end_date<=now())"
  60. }
  61. dao.And(query, status)
  62. }
  63. err := dao.Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&luckdraws)
  64. return luckdraws, err
  65. }
  66. // GetLuckDrawCount 获取抽奖列表count
  67. func (m *LuckDrawDao) GetLuckDrawCount(caseids, name, status string) (int, error) {
  68. var luckdraws []model.TaLuckdraw
  69. dao := m.db.Where("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").And("status<>?", models.STATUS_DEL)
  70. if name != "" {
  71. dao.And("name like '%" + name + "%'")
  72. }
  73. if status != "" {
  74. dao.And("status=?", status)
  75. }
  76. err := dao.Find(&luckdraws)
  77. return len(luckdraws), err
  78. }
  79. // RecordWithPhone 抽奖记录
  80. type RecordWithPhone struct {
  81. model.TaLuckdrawRecord `xorm:"extends"`
  82. CustomerName string
  83. Phone string
  84. LuckDrawStatus string
  85. Name string
  86. }
  87. // GetLuckDrawRecordCount 获取抽奖记录count
  88. func (m *LuckDrawDao) GetLuckDrawRecordCount(id, tel string) (int, error) {
  89. var records []RecordWithPhone
  90. sql := `select a.*,b.customer_name,b.phone,b.name from ta_luckdraw_record a inner join ta_customer b on a.user_id=b.customer_id where a.luckdraw_id=?`
  91. if tel != "" {
  92. sql = sql + ` and b.phone=` + tel
  93. }
  94. err := m.db.Sql(sql, id).Find(&records)
  95. return len(records), err
  96. }
  97. // GetLuckDrawRecord 获取抽奖记录信息
  98. func (m *LuckDrawDao) GetLuckDrawRecord(id, tel string, page, pageSize int) ([]RecordWithPhone, error) {
  99. var records []RecordWithPhone
  100. sql := `select a.*,b.customer_name,b.phone,b.name from ta_luckdraw_record a inner join ta_customer b on a.user_id=b.customer_id where a.luckdraw_id=?`
  101. if tel != "" {
  102. sql = sql + ` and b.phone=` + tel
  103. }
  104. sql = sql + ` ORDER BY a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
  105. err := m.db.Sql(sql, id).Find(&records)
  106. return records, err
  107. }
  108. // GetLuckDrawRecordExcel 获取抽奖记录信息
  109. func (m *LuckDrawDao) GetLuckDrawRecordExcel(id, tel string) ([]RecordWithPhone, error) {
  110. var records []RecordWithPhone
  111. sql := `select a.*,b.customer_name,b.phone,b.name from ta_luckdraw_record a inner join ta_customer b on a.user_id=b.customer_id where a.luckdraw_id=?`
  112. if tel != "" {
  113. sql = sql + ` and b.phone=` + tel
  114. }
  115. sql = sql + ` ORDER BY a.create_date desc `
  116. err := m.db.Sql(sql, id).Find(&records)
  117. return records, err
  118. }
  119. // GetLuckDrawShareCount 获取分享记录count
  120. func (m *LuckDrawDao) GetLuckDrawShareCount(id, tel string) (int, error) {
  121. var shares []model.TaShareLuckyRecord
  122. dao := m.db.Where("luckydraw_id=?", id)
  123. if tel != "" {
  124. dao.And("from_customer_tel=?", tel)
  125. }
  126. err := dao.Find(&shares)
  127. return len(shares), err
  128. }
  129. // GetLuckDrawShare 获取分享记录信息
  130. func (m *LuckDrawDao) GetLuckDrawShare(id, tel string, page, pageSize int) ([]model.TaShareLuckyRecord, error) {
  131. var shares []model.TaShareLuckyRecord
  132. dao := m.db.Where("luckydraw_id=?", id)
  133. if tel != "" {
  134. dao.And("from_customer_tel=?", tel)
  135. }
  136. err := dao.Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&shares)
  137. return shares, err
  138. }
  139. // PrizeWithDefaults 奖品关联内定
  140. type PrizeWithDefaults struct {
  141. model.TaLuckdrawPrize `xorm:"extends"`
  142. Defaults []model.TaPrizeDefault
  143. }
  144. // LuckDrawInfo 抽奖info
  145. type LuckDrawInfo struct {
  146. model.TaLuckdraw `xorm:"extends"`
  147. ActivityMainImg string
  148. ActivityTitle string
  149. ShareImg string
  150. ShareContent string
  151. Prizes []PrizeWithDefaults
  152. Imgs []model.TaLuckdrawImg
  153. }
  154. // GetLuckDrawInfoByID 获取抽奖信息
  155. func (m *LuckDrawDao) GetLuckDrawInfoByID(id string) (*LuckDrawInfo, error) {
  156. if id == "" {
  157. return nil, errors.New("不存在抽奖信息!")
  158. }
  159. var luckdraw LuckDrawInfo
  160. sql := `SELECT
  161. a.*,
  162. b.activity_main_img,
  163. b.activity_title,
  164. b.share_img,
  165. b.share_content
  166. FROM
  167. ta_luckdraw a
  168. LEFT JOIN ta_activity_share_info b ON a.id = b.activity_id
  169. AND b.activity_type = '` + models.ACTIVITY_LUCK + `'
  170. WHERE a.id = '` + id + `'`
  171. beego.Error(sql)
  172. _, err := m.db.Sql(sql).Get(&luckdraw)
  173. if err != nil {
  174. return nil, err
  175. }
  176. if luckdraw.Id == "" {
  177. return nil, nil
  178. }
  179. prizes, err := m.GetPrizesWithDefaults(id)
  180. if err != nil {
  181. utils.LogError("获取奖品信息失败:", err)
  182. return nil, errors.New("获取奖品信息失败")
  183. }
  184. luckdraw.Prizes = prizes
  185. imgs, err := m.GetLuckDrawImgs(id)
  186. if err != nil {
  187. utils.LogError("获取抽奖图片信息失败:", err)
  188. return nil, errors.New("获取抽奖图片信息失败")
  189. }
  190. luckdraw.Imgs = imgs
  191. beego.Error(luckdraw)
  192. // defaults, err := m.GetLuckDrawDefault(id)
  193. // if err != nil {
  194. // utils.LogError("获取奖品内置信息失败:", err)
  195. // return nil, errors.New("获取奖品信息失败")
  196. // }
  197. // luckdraw.Defaults = defaults
  198. return &luckdraw, err
  199. }
  200. // GetLuckDrawImgs 获取抽奖图片
  201. func (m *LuckDrawDao) GetLuckDrawImgs(luckdrawid string) ([]model.TaLuckdrawImg, error) {
  202. var imgs []model.TaLuckdrawImg
  203. err := m.db.Where("luckdraw_id=?", luckdrawid).Find(&imgs)
  204. return imgs, err
  205. }
  206. // GetLuckDrawDefault 获取奖品默认信息
  207. func (m *LuckDrawDao) GetLuckDrawDefault(luckdrawid string) ([]model.TaPrizeDefault, error) {
  208. var defaults []model.TaPrizeDefault
  209. err := m.db.Where("luckdraw_id=?", luckdrawid).Find(&defaults)
  210. return defaults, err
  211. }
  212. // InsertLuckdraw 新增抽奖信息
  213. func (m *LuckDrawDao) InsertLuckdraw(luckdraw model.TaLuckdraw) (*model.TaLuckdraw, error) {
  214. luckdraw.Id = utils.GetGUID()
  215. luckdraw.Status = models.STATUS_NORMAL
  216. luckdraw.CreateDate = time.Now()
  217. _, err := m.db.Insert(luckdraw)
  218. return &luckdraw, err
  219. }
  220. // DelLuckDrawDefault 删除抽奖默认信息
  221. func (m *LuckDrawDao) DelLuckDrawDefault(luckdrawid string) error {
  222. sql := `delete from ta_prize_default where luckdraw_id=?`
  223. _, err := m.db.Exec(sql, luckdrawid)
  224. return err
  225. }
  226. // DelLuckDrawImgs 删除抽奖图片信息
  227. func (m *LuckDrawDao) DelLuckDrawImgs(luckdrawid string) error {
  228. sql := `delete from ta_luckdraw_img where luckdraw_id=?`
  229. _, err := m.db.Exec(sql, luckdrawid)
  230. return err
  231. }
  232. // DelLuckDrawPrize 删除奖品信息
  233. func (m *LuckDrawDao) DelLuckDrawPrize(luckdrawid string) error {
  234. sql := `delete from ta_prize_detail where prize_id in (select id from ta_luckdraw_prize where luckdraw_id=?)`
  235. _, err := m.db.Exec(sql, luckdrawid)
  236. if err != nil {
  237. return err
  238. }
  239. sql = `delete from ta_luckdraw_prize where luckdraw_id=?`
  240. _, err = m.db.Exec(sql, luckdrawid)
  241. return err
  242. }
  243. // DelLuckDrawSet 删除抽奖设置信息
  244. func (m *LuckDrawDao) DelLuckDrawSet(luckdrawid string) error {
  245. sql := `delete from ta_luckdraw_customer where luckdraw_id=?`
  246. _, err := m.db.Exec(sql, luckdrawid)
  247. return err
  248. }
  249. // SaveLuckDrawImgs 保存抽奖图片
  250. func (m *LuckDrawDao) SaveLuckDrawImgs(imgs []model.TaLuckdrawImg, luckdrawid string) error {
  251. for inx, img := range imgs {
  252. if img.ImgId == "" {
  253. imgs[inx].ImgId = utils.GetGUID()
  254. org := m.ctx.Get("org").(model.SysOrg)
  255. imgs[inx].OrgId = org.OrgId
  256. imgs[inx].Status = models.STATUS_NORMAL
  257. imgs[inx].LuckdrawId = luckdrawid
  258. }
  259. }
  260. _, err := m.db.Insert(imgs)
  261. return err
  262. }
  263. // SaveLuckDrawDefault 保存内定信息
  264. func (m *LuckDrawDao) SaveLuckDrawDefault(defaults []model.TaPrizeDefault, prize model.TaLuckdrawPrize) error {
  265. for inx, d := range defaults {
  266. if d.DefaultId == "" {
  267. defaults[inx].DefaultId = utils.GetGUID()
  268. defaults[inx].Status = models.STATUS_NORMAL
  269. defaults[inx].CreateDate = time.Now()
  270. defaults[inx].LuckdrawId = prize.LuckdrawId
  271. defaults[inx].PrizeId = prize.Id
  272. }
  273. }
  274. _, err := m.db.Insert(defaults)
  275. return err
  276. }
  277. // SaveLuckDrawPrizes 保存奖品信息
  278. func (m *LuckDrawDao) SaveLuckDrawPrizes(prizes []PrizeWithDefaults, luckdraw *model.TaLuckdraw) error {
  279. var saveprizes []model.TaLuckdrawPrize
  280. for inx, prize := range prizes {
  281. if prize.Id == "" {
  282. prizes[inx].LuckdrawId = luckdraw.Id
  283. prizes[inx].Id = utils.GetGUID()
  284. }
  285. prizes[inx].Remainder = prize.Stock
  286. prizes[inx].Status = models.STATUS_NORMAL
  287. if prize.PrizeType == models.PRIZE_TYPE_COUPONCARD {
  288. valid, err := m.SavePrizeDetail(prizes[inx].TaLuckdrawPrize)
  289. if err != nil {
  290. return err
  291. }
  292. prizes[inx].ValidDays = valid.ValidDays
  293. prizes[inx].VerificationStart = valid.VerificationStart
  294. prizes[inx].VerificationEnd = valid.VerificationEnd
  295. }
  296. saveprizes = append(saveprizes, prizes[inx].TaLuckdrawPrize)
  297. // 保存内定信息
  298. if luckdraw.IsInternalDefault == models.BOOL_TRUE {
  299. if len(prize.Defaults) > prize.Stock {
  300. return errors.New("内置用户不能超过奖品数量!")
  301. }
  302. err := m.SaveLuckDrawDefault(prize.Defaults, prizes[inx].TaLuckdrawPrize)
  303. if err != nil {
  304. return err
  305. }
  306. }
  307. }
  308. _, err := m.db.Insert(saveprizes)
  309. if err != nil {
  310. return err
  311. }
  312. return err
  313. }
  314. // Verification 有效期
  315. type Verification struct {
  316. ValidDays int
  317. VerificationStart time.Time
  318. VerificationEnd time.Time
  319. }
  320. // SavePrizeDetail 保存奖品明细
  321. func (m *LuckDrawDao) SavePrizeDetail(prize model.TaLuckdrawPrize) (*Verification, error) {
  322. var verification = Verification{}
  323. if prize.CouponCardType == models.PRIZE_TYPE_COUPON {
  324. var coupon model.TaCoupon
  325. _, err := m.db.Where("coupon_id=?", prize.CouponCardId).Get(&coupon)
  326. if err != nil {
  327. return nil, err
  328. }
  329. if coupon.UsedCount > 0 {
  330. return nil, errors.New("卡券已被使用!不允许保存!")
  331. }
  332. verification.ValidDays = coupon.ValidDays
  333. verification.VerificationStart = coupon.StartDate
  334. verification.VerificationEnd = coupon.EndDate
  335. var details []model.TaPrizeDetail
  336. i := 0
  337. for i < coupon.TotalCount {
  338. unix := time.Now().UnixNano()
  339. random := utils.GetRand(5) + strconv.Itoa(int(unix))
  340. url := `/` + prize.CouponCardId + `/` + beego.AppConfig.String("defaultShareUserID") + `/` + prize.CouponCardType + `/` + random + `/receive`
  341. var d = model.TaPrizeDetail{
  342. Id: utils.GetGUID(),
  343. PrizeId: prize.Id,
  344. Url: url,
  345. Status: models.STATUS_READY,
  346. }
  347. details = append(details, d)
  348. i = i + 1
  349. }
  350. m.db.Insert(details)
  351. } else {
  352. var card model.TaCouponCard
  353. _, err := m.db.Where("card_id=?", prize.CouponCardId).Get(&card)
  354. if err != nil {
  355. return nil, err
  356. }
  357. if card.UsedCount > 0 {
  358. return nil, errors.New("卡券已被使用!不允许保存!")
  359. }
  360. verification.ValidDays = 0
  361. verification.VerificationStart = card.StartDate
  362. verification.VerificationEnd = card.EndDate
  363. var details []model.TaPrizeDetail
  364. i := 0
  365. for i < card.TotalCount {
  366. unix := time.Now().UnixNano()
  367. random := utils.GetRand(5) + strconv.Itoa(int(unix))
  368. url := `/` + prize.CouponCardId + `/` + beego.AppConfig.String("defaultShareUserID") + `/` + prize.CouponCardType + `/` + random + `/receive`
  369. var d = model.TaPrizeDetail{
  370. Id: utils.GetGUID(),
  371. PrizeId: prize.Id,
  372. Url: url,
  373. Status: models.STATUS_READY,
  374. }
  375. details = append(details, d)
  376. i = i + 1
  377. }
  378. m.db.Insert(details)
  379. }
  380. return &verification, nil
  381. }
  382. // UpdateLuckDraw 修改抽奖
  383. func (m *LuckDrawDao) UpdateLuckDraw(luckdraw model.TaLuckdraw, cols []string) error {
  384. _, err := m.db.Cols(cols...).Where("id=?", luckdraw.Id).Update(luckdraw)
  385. return err
  386. }
  387. // UpdatePrizeDesc 更新奖品描述
  388. func (m *LuckDrawDao) UpdatePrizeDesc(prizes []PrizeWithDefaults) error {
  389. for _, prize := range prizes {
  390. _, err := m.db.Cols([]string{
  391. "prize_desc",
  392. }...).Where("id=?", prize.Id).Update(prize.TaLuckdrawPrize)
  393. if err != nil {
  394. return err
  395. }
  396. }
  397. return nil
  398. }
  399. // GetLuckDraw 获取抽奖信息
  400. func (m *LuckDrawDao) GetLuckDraw(id string) (*LuckDraw, error) {
  401. if id == "" {
  402. return nil, errors.New("不存在抽奖信息!")
  403. }
  404. luckdraw, err := m.GetLuckDrawByID(id)
  405. if err != nil {
  406. utils.LogError("获取抽奖信息失败:", err)
  407. return nil, errors.New("获取抽奖信息失败")
  408. }
  409. prizes, err := m.GetPrizes(id)
  410. if err != nil {
  411. utils.LogError("获取奖品信息失败:", err)
  412. return nil, errors.New("获取奖品信息失败")
  413. }
  414. luckdraw.Prizes = prizes
  415. imgs, err := m.GetLuckDrawImgs(id)
  416. if err != nil {
  417. utils.LogError("获取抽奖图片信息失败:", err)
  418. return nil, errors.New("获取抽奖图片信息失败")
  419. }
  420. luckdraw.Imgs = imgs
  421. return luckdraw, nil
  422. }
  423. // AddCustomerLuckDraw 保存用户抽奖配置信息
  424. func (m *LuckDrawDao) AddCustomerLuckDraw(custLuckDraw model.TaLuckdrawCustomer) (*model.TaLuckdrawCustomer, error) {
  425. custLuckDraw.LuckdrawCustomerId = utils.GetGUID()
  426. custLuckDraw.CreateDate = time.Now()
  427. custLuckDraw.ShareNum = 0
  428. custLuckDraw.ShareSurplusNum = 0
  429. _, err := m.db.Insert(custLuckDraw)
  430. return &custLuckDraw, err
  431. }
  432. // LuckDraw 抽奖
  433. func (m *LuckDrawDao) LuckDraw(id string, user *model.TaCustomer) (*model.TaLuckdrawPrize, *model.TaPrizeDetail, *model.TaLuckdrawRecord, error) {
  434. luckdraw, err := m.GetLuckDrawByID(id)
  435. if err != nil {
  436. return nil, nil, nil, errors.New("获取抽奖信息失败!")
  437. }
  438. if luckdraw.Status == models.STATUS_READY {
  439. return nil, nil, nil, errors.New("活动已结束!")
  440. }
  441. if time.Now().Before(luckdraw.BeginDate) {
  442. return nil, nil, nil, errors.New("活动还未开始!")
  443. }
  444. if luckdraw.Status == models.STATUS_EXPIRE || time.Now().After(luckdraw.EndDate) {
  445. return nil, nil, nil, errors.New("活动已结束!")
  446. }
  447. if luckdraw.Status != models.STATUS_NORMAL {
  448. return nil, nil, nil, errors.New("当前抽奖活动状态异常!")
  449. }
  450. // 系统用户是否可以抽奖
  451. if luckdraw.IsSysLuckdraw == models.BOOL_FALSE {
  452. if user.Phone != "" {
  453. sysuser, err := m.GetUserByTel(user.Phone)
  454. if err != nil {
  455. return nil, nil, nil, errors.New("获取信息失败!")
  456. }
  457. if sysuser != nil && sysuser.UserId != "" {
  458. return nil, nil, nil, errors.New("内部人员不允许进行抽奖!")
  459. }
  460. }
  461. }
  462. // 判断当前用户是否为新用户
  463. cstluckdrawSet, err := m.GetCustomerLuckDraw(id, user.CustomerId)
  464. if err != nil {
  465. utils.LogError("获取用户抽奖配置信息失败:", err)
  466. return nil, nil, nil, errors.New("获取用户抽奖配置信息失败!")
  467. }
  468. if luckdraw.JoinType == models.JOINTYPE_NEWUSER {
  469. if cstluckdrawSet.IsNew == models.BOOL_FALSE {
  470. return nil, nil, nil, errors.New("您不是新用户,不允许抽奖!")
  471. }
  472. }
  473. // 抽奖次数判断
  474. if cstluckdrawSet.SurplusNum <= 0 {
  475. return nil, nil, nil, errors.New("您的抽奖次数已用完!")
  476. } else {
  477. // 抽奖次数库存修改
  478. err := m.UpdateCstLuckdrawSurplus(cstluckdrawSet)
  479. if err != nil {
  480. utils.LogError("更新抽奖次数库存失败:", err)
  481. return nil, nil, nil, errors.New("操作失败,请刷新后重试!")
  482. }
  483. }
  484. // 判断是否内置用户
  485. defaultPrize, err := m.GetPrizeDefaultByUser(id, user)
  486. if err != nil {
  487. utils.LogError("操作失败,请刷新后重试:", err)
  488. return nil, nil, nil, errors.New("操作失败,请刷新后重试!")
  489. }
  490. var prize = new(model.TaLuckdrawPrize)
  491. if defaultPrize.Id != "" {
  492. // 内置用户,直接中奖
  493. prize = &defaultPrize.TaLuckdrawPrize
  494. } else {
  495. prizes, err := m.GetPrizeStock(id)
  496. if err != nil {
  497. utils.LogError("获取奖项失败:", err)
  498. return nil, nil, nil, errors.New("获取奖项失败!")
  499. }
  500. if len(prizes) == 0 {
  501. // err = m.UpdateLuckDrawEndDate(luckdraw.Id)
  502. // if err != nil {
  503. // utils.LogError("操作失败,请刷新后重试:", err)
  504. // return nil, nil, nil, errors.New("操作失败,请刷新后重试!")
  505. // }
  506. return nil, nil, nil, errors.New("活动已结束!")
  507. }
  508. prize, err = m.GetWinning(prizes)
  509. if err != nil {
  510. utils.LogError("获取奖项失败:", err)
  511. return nil, nil, nil, err
  512. }
  513. }
  514. details, err := m.GetPrizeDetail(prize.Id)
  515. if err != nil {
  516. utils.LogError("获取奖项详情失败:", err)
  517. return nil, nil, nil, errors.New("获取奖项详情失败!")
  518. }
  519. // 保存中奖记录
  520. var record = &model.TaLuckdrawRecord{}
  521. record.Id = utils.GetGUID()
  522. record.OrgId = luckdraw.OrgId
  523. record.CaseId = luckdraw.CaseId
  524. record.PrizeId = prize.Id
  525. record.PrizeName = prize.PrizeName
  526. record.UserId = user.CustomerId
  527. record.UserName = user.CustomerName
  528. record.UserHeadImg = user.Headimgurl
  529. record.LuckdrawId = luckdraw.Id
  530. record.IsReality = prize.IsReality
  531. if prize.IsReality != models.BOOL_FALSE {
  532. if prize.ValidDays > 0 {
  533. record.VerificationStart = time.Now().Local()
  534. record.VerificationEnd = time.Now().Local().AddDate(0, 0, prize.ValidDays)
  535. } else {
  536. record.VerificationStart = prize.VerificationStart
  537. record.VerificationEnd = prize.VerificationEnd
  538. }
  539. } else {
  540. record.VerificationStart = time.Now().Local()
  541. record.VerificationEnd = time.Now().Local()
  542. }
  543. utils.LogInfo("生成中奖记录:", *record)
  544. record, err = m.SaveRecord(*record)
  545. if err != nil {
  546. utils.LogError("保存中奖纪录失败:", err)
  547. return nil, nil, nil, err
  548. }
  549. // 更新参与人数
  550. err = m.UpdateLuckDrawJoinedNum(id)
  551. if err != nil {
  552. utils.LogError("更新参与人数失败:", err)
  553. return nil, nil, nil, errors.New("操作失败,请刷新后重试!")
  554. }
  555. // 更新内置信息
  556. err = m.UpdatePrizeDefault(defaultPrize.DefaultId, record.Id)
  557. if err != nil {
  558. utils.LogError("更新内置信息失败:", err)
  559. return nil, nil, nil, err
  560. }
  561. var detail = model.TaPrizeDetail{}
  562. if len(details) > 0 {
  563. // 更新中奖纪录明细
  564. details[0].ReceiveId = record.Id
  565. err = m.UpdatePrizeDetail(details[0])
  566. if err != nil {
  567. utils.LogError("更新中奖纪录明细失败:", err)
  568. return nil, nil, nil, errors.New("操作失败!")
  569. }
  570. detail = details[0]
  571. // 奖项自动核销,走卡券核销流程
  572. err = m.PrizeWriteOff(record.Id, user.CustomerId)
  573. if err != nil {
  574. utils.LogError("卡券核销失败:", err)
  575. return nil, nil, nil, errors.New("操作失败!")
  576. }
  577. }
  578. // 更新库存
  579. if prize.IsReality == 1 {
  580. // prize.Remainder = prize.Remainder - 1
  581. err = m.UpdateStock(prize)
  582. if err != nil {
  583. utils.LogError("更新库存失败:", err)
  584. return nil, nil, nil, err
  585. }
  586. stockprizes, err := m.GetPrizeStockAll(id)
  587. if err != nil {
  588. utils.LogError("更新库存失败:", err)
  589. return nil, nil, nil, errors.New("操作失败,请刷新后重试!")
  590. }
  591. if len(stockprizes) == 0 {
  592. // 更新活动截止时间
  593. err = m.UpdateLuckDrawEndDate(luckdraw.Id)
  594. }
  595. } else {
  596. // 奖项自动核销,走卡券核销流程
  597. err = m.PrizeWriteOff(record.Id, user.CustomerId)
  598. if err != nil {
  599. utils.LogError("卡券核销失败:", err)
  600. return nil, nil, nil, errors.New("操作失败!")
  601. }
  602. }
  603. return prize, &detail, record, err
  604. }
  605. // UpdateCstLuckdrawSurplus 更新用户抽奖剩余次数
  606. func (m *LuckDrawDao) UpdateCstLuckdrawSurplus(cstLuckDraw *model.TaLuckdrawCustomer) error {
  607. sql := `update ta_luckdraw_customer set share_surplus_num = (case when surplus_num > share_surplus_num then share_surplus_num else share_surplus_num - 1 end),
  608. surplus_num = surplus_num - 1 where luckdraw_customer_id = ? and surplus_num>0`
  609. res, err := m.db.Exec(sql, cstLuckDraw.LuckdrawCustomerId)
  610. if err != nil {
  611. return err
  612. }
  613. len, _ := res.RowsAffected()
  614. if len < 1 {
  615. return errors.New("您没有剩余次数!")
  616. }
  617. return nil
  618. }
  619. // UpdateLuckDrawJoinedNum 更新抽奖参与人数
  620. func (m *LuckDrawDao) UpdateLuckDrawJoinedNum(id string) error {
  621. var records []model.TaLuckdrawRecord
  622. sql := `select DISTINCT user_id from ta_luckdraw_record where luckdraw_id=?`
  623. err := m.db.Sql(sql, id).Find(&records)
  624. if err != nil {
  625. return err
  626. }
  627. if len(records) > 0 {
  628. sql = `update ta_luckdraw set joined_num=? where id=?`
  629. _, err = m.db.Exec(sql, len(records), id)
  630. return err
  631. }
  632. return nil
  633. }
  634. // PrizeWithDefault 默认奖品
  635. type PrizeWithDefault struct {
  636. DefaultId string
  637. model.TaLuckdrawPrize `xorm:"extends"`
  638. }
  639. // GetPrizeDefaultByUser 获取默认用户
  640. func (m *LuckDrawDao) GetPrizeDefaultByUser(id string, customer *model.TaCustomer) (*PrizeWithDefault, error) {
  641. var prize = PrizeWithDefault{}
  642. sql := `select a.default_id,b.* from ta_prize_default a inner join ta_luckdraw_prize b on a.prize_id=b.id where a.luckdraw_id=? and a.tel=? and a.is_receive=?`
  643. _, err := m.db.Sql(sql, id, customer.Phone, models.BOOL_FALSE).Get(&prize)
  644. return &prize, err
  645. }
  646. // UpdatePrizeDefault 更新系统内置信息
  647. func (m *LuckDrawDao) UpdatePrizeDefault(id, recordid string) error {
  648. var prizeDefault = model.TaPrizeDefault{
  649. DefaultId: id,
  650. ReceiveDate: time.Now(),
  651. ReceiveId: recordid,
  652. IsReceive: models.BOOL_TRUE,
  653. }
  654. cols := []string{
  655. "receive_id",
  656. "receive_date",
  657. "is_receive",
  658. }
  659. _, err := m.db.Cols(cols...).Where("default_id=?", prizeDefault.DefaultId).Update(prizeDefault)
  660. return err
  661. }
  662. // GetCustomerLuckDraw 获取用户抽奖设置
  663. func (m *LuckDrawDao) GetCustomerLuckDraw(luckdrawid, customerid string) (*model.TaLuckdrawCustomer, error) {
  664. var customerluckdraw model.TaLuckdrawCustomer
  665. _, err := m.db.Where("luckdraw_id=?", luckdrawid).And("customer_id=?", customerid).Get(&customerluckdraw)
  666. if err != nil {
  667. return nil, err
  668. }
  669. return &customerluckdraw, nil
  670. }
  671. // PrizeWriteOff 奖品核销
  672. func (m *LuckDrawDao) PrizeWriteOff(recordid, userid string) error {
  673. record, err := m.GetRecordByID(recordid)
  674. if err != nil {
  675. return err
  676. }
  677. var writeoff = model.TaLuckdrawWriteoff{}
  678. writeoff.LuckdrawId = record.LuckdrawId
  679. writeoff.CaseId = record.CaseId
  680. writeoff.OrgId = record.OrgId
  681. writeoff.RecordId = record.Id
  682. writeoff.WriteoffUser = userid
  683. _, err = m.SaveWirteOff(writeoff)
  684. if err != nil {
  685. return err
  686. }
  687. err = m.UpdateRecord(record)
  688. return err
  689. }
  690. // GetWinning 获取中奖信息
  691. func (m *LuckDrawDao) GetWinning(prizes []model.TaLuckdrawPrize) (*model.TaLuckdrawPrize, error) {
  692. pList := make([]map[string]interface{}, 0)
  693. now := time.Now().Local()
  694. for _, prize := range prizes {
  695. // 有剩余的 并且 未过期的
  696. if (prize.Remainder > 0 && (now.Before(prize.VerificationEnd) || prize.ValidDays > 0)) || prize.IsReality == models.BOOL_FALSE {
  697. p := map[string]interface{}{
  698. "prize": prize,
  699. "prob": prize.Probability,
  700. }
  701. pList = append(pList, p)
  702. }
  703. }
  704. if len(pList) == 0 {
  705. return nil, errors.New("所有奖品已抽完")
  706. }
  707. thePrize := utils.LuckyDraw(pList).(model.TaLuckdrawPrize)
  708. return &thePrize, nil
  709. }
  710. // GetLuckDrawByID 获取抽奖信息
  711. func (m *LuckDrawDao) GetLuckDrawByID(id string) (*LuckDraw, error) {
  712. var luckdraws []LuckDraw
  713. sql := `SELECT
  714. a.*,
  715. b.activity_main_img,
  716. b.activity_title,
  717. b.share_img,
  718. b.share_content
  719. FROM
  720. ta_luckdraw a
  721. LEFT JOIN ta_activity_share_info b ON a.id = b.activity_id
  722. WHERE
  723. id = ?`
  724. err := m.db.SQL(sql, id).Find(&luckdraws)
  725. if err != nil {
  726. return nil, err
  727. }
  728. if len(luckdraws) > 0 {
  729. return &luckdraws[0], nil
  730. }
  731. return nil, nil
  732. }
  733. // GetCaseAddressByLuckDarw 获取案场地址
  734. func (m *LuckDrawDao) GetCaseAddressByLuckDarw(luckdraw string) (string, error) {
  735. sql := `
  736. SELECT
  737. s.case_address
  738. FROM
  739. ta_luckdraw t
  740. JOIN sys_case s ON t.org_id = s.org_id
  741. AND t.case_id = s.case_id
  742. AND t.id = ?
  743. `
  744. res, err := m.db.Query(sql, luckdraw)
  745. if err != nil {
  746. return "", err
  747. }
  748. if res == nil || len(res) == 0 {
  749. return "", nil
  750. }
  751. return string(res[0]["case_address"]), nil
  752. }
  753. // UpdateLuckDrawEndDate 更新活动结束时间
  754. func (m *LuckDrawDao) UpdateLuckDrawEndDate(id string) error {
  755. var luckdraw = model.TaLuckdraw{
  756. Id: id,
  757. EndDate: time.Now(),
  758. Status: models.STATUS_EXPIRE,
  759. }
  760. cols := []string{
  761. "end_date",
  762. "status",
  763. }
  764. _, err := m.db.Cols(cols...).Where("id=?", id).Update(luckdraw)
  765. return err
  766. }
  767. // GetPrizes 获取奖品信息
  768. func (m *LuckDrawDao) GetPrizes(luckdrawid string) ([]model.TaLuckdrawPrize, error) {
  769. var prizes []model.TaLuckdrawPrize
  770. err := m.db.Where("luckdraw_id=?", luckdrawid).And("status=?", models.STATUS_NORMAL).Find(&prizes)
  771. return prizes, err
  772. }
  773. // GetPrizesWithDefaults 获取奖品
  774. func (m *LuckDrawDao) GetPrizesWithDefaults(luckdrawid string) ([]PrizeWithDefaults, error) {
  775. var prizes []PrizeWithDefaults
  776. sql := `select * from ta_luckdraw_prize where luckdraw_id=? and status=?`
  777. err := m.db.Sql(sql, luckdrawid, models.STATUS_NORMAL).Find(&prizes)
  778. if err != nil {
  779. return nil, err
  780. }
  781. for inx, prize := range prizes {
  782. defaults, err := m.GetDefaultsByPrize(prize.Id)
  783. if err != nil {
  784. return nil, err
  785. }
  786. prizes[inx].Defaults = defaults
  787. }
  788. return prizes, err
  789. }
  790. // GetDefaultsByPrize 根据奖品获取内定信息
  791. func (m *LuckDrawDao) GetDefaultsByPrize(prizeid string) ([]model.TaPrizeDefault, error) {
  792. var defaults []model.TaPrizeDefault
  793. err := m.db.Where("prize_id=?", prizeid).Find(&defaults)
  794. return defaults, err
  795. }
  796. // UpdateStock 修改库存
  797. func (m *LuckDrawDao) UpdateStock(prize *model.TaLuckdrawPrize) error {
  798. sql := `update ta_luckdraw_prize set remainder = remainder - 1 where id=?`
  799. _, err := m.db.Exec(sql, prize.Id)
  800. // cols := []string{
  801. // "remainder",
  802. // }
  803. // _, err := m.db.Cols(cols...).Where("id=?", prize.Id).Update(prize)
  804. return err
  805. }
  806. // GetPrizeStock 判断奖项库存
  807. func (m *LuckDrawDao) GetPrizeStock(luckdrawid string) ([]model.TaLuckdrawPrize, error) {
  808. var prizes []model.TaLuckdrawPrize
  809. sql := `select a.remainder-(case when b.default_num is null then 0 else b.default_num end) as remainder,
  810. a.* from ta_luckdraw_prize a
  811. left join (select prize_id,count(1) as default_num from ta_prize_default where luckdraw_id=? and is_receive=0 group by prize_id) b
  812. 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)`
  813. err := m.db.Sql(sql, luckdrawid, luckdrawid, models.STATUS_NORMAL).Find(&prizes)
  814. // err := m.db.Where("luckdraw_id=?", luckdrawid).And("status=?", models.STATUS_NORMAL).And("(remainder>0 or is_reality=0)").Find(&prizes)
  815. return prizes, err
  816. }
  817. // GetPrizeStockAll 获取奖项
  818. func (m *LuckDrawDao) GetPrizeStockAll(luckdrawid string) ([]model.TaLuckdrawPrize, error) {
  819. var prizes []model.TaLuckdrawPrize
  820. err := m.db.Where("luckdraw_id=?", luckdrawid).And("status=?", models.STATUS_NORMAL).And("(remainder>0 or is_reality=0)").Find(&prizes)
  821. return prizes, err
  822. }
  823. // GetPrizeByID 根据id获取奖品信息
  824. func (m *LuckDrawDao) GetPrizeByID(id string) (model.TaLuckdrawPrize, error) {
  825. var prize = model.TaLuckdrawPrize{}
  826. _, err := m.db.Where("id=?", id).Get(&prize)
  827. return prize, err
  828. }
  829. // SaveRecord 保存抽奖记录
  830. func (m *LuckDrawDao) SaveRecord(record model.TaLuckdrawRecord) (*model.TaLuckdrawRecord, error) {
  831. record.CreateDate = time.Now()
  832. record.Status = models.STATUS_READY
  833. // record.Id = utils.GetGUID()
  834. _, err := m.db.Insert(&record)
  835. return &record, err
  836. }
  837. // GetUserByTel 根据电话获取用户信息
  838. func (m *LuckDrawDao) GetUserByTel(tel string) (*model.SysUser, error) {
  839. var user = model.SysUser{}
  840. _, err := m.db.Where("phone=?", tel).And("status>?", models.STATUS_DEL).Get(&user)
  841. return &user, err
  842. }
  843. // GetPrizeDetail 获取未领取的奖品详情
  844. func (m *LuckDrawDao) GetPrizeDetail(prizeid string) ([]model.TaPrizeDetail, error) {
  845. var details []model.TaPrizeDetail
  846. err := m.db.Where("prize_id=?", prizeid).And("status=?", models.STATUS_READY).Find(&details)
  847. return details, err
  848. }
  849. // UpdatePrizeDetail 更新库存明细为已领取
  850. func (m *LuckDrawDao) UpdatePrizeDetail(detail model.TaPrizeDetail) error {
  851. detail.Status = models.STATUS_NORMAL
  852. detail.ReceiveDate = time.Now()
  853. cols := []string{
  854. "status",
  855. "receive_id",
  856. "receive_date",
  857. }
  858. _, err := m.db.Cols(cols...).Where("id=?", detail.Id).Update(detail)
  859. return err
  860. }
  861. // UpdateRecord 核销更新抽奖记录表
  862. func (m *LuckDrawDao) UpdateRecord(record *LuckInfo) error {
  863. record.Status = models.STATUS_NORMAL
  864. record.WriteoffDate = time.Now()
  865. cols := []string{
  866. "status",
  867. "writeoff_date",
  868. }
  869. _, err := m.db.Cols(cols...).Where("id=?", record.Id).Update(record.TaLuckdrawRecord)
  870. return err
  871. }
  872. // SaveWirteOff 保存核销信息
  873. func (m *LuckDrawDao) SaveWirteOff(writeoff model.TaLuckdrawWriteoff) (*model.TaLuckdrawWriteoff, error) {
  874. writeoff.Status = models.STATUS_NORMAL
  875. writeoff.Id = utils.GetGUID()
  876. writeoff.WriteoffDate = time.Now()
  877. _, err := m.db.Insert(&writeoff)
  878. return &writeoff, err
  879. }
  880. // GetUserRecordByLuckDraw 获取用户的抽奖信息
  881. func (m *LuckDrawDao) GetUserRecordByLuckDraw(userid string, luckdrawid string) ([]model.TaLuckdrawRecord, error) {
  882. var records []model.TaLuckdrawRecord
  883. err := m.db.Where("user_id=?", userid).And("luckdraw_id=?", luckdrawid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&records)
  884. return records, err
  885. }
  886. // GetUserLuckDrawSet 获取用户抽奖设置
  887. func (m *LuckDrawDao) GetUserLuckDrawSet(customer model.TaCustomer, luckdrawid string) (*model.TaLuckdrawCustomer, error) {
  888. var cstluckdraw = model.TaLuckdrawCustomer{}
  889. _, err := m.db.Where("customer_id=?", customer.CustomerId).And("luckdraw_id=?", luckdrawid).Get(&cstluckdraw)
  890. if err != nil {
  891. return nil, err
  892. }
  893. if cstluckdraw.CustomerId != "" {
  894. return &cstluckdraw, nil
  895. }
  896. // 插入
  897. luckdraw, err := m.GetLuckDrawByID(luckdrawid)
  898. if err != nil {
  899. return nil, err
  900. }
  901. surplusNum := luckdraw.LuckdrawNum
  902. isnew := 0
  903. if customer.Phone == "" {
  904. isnew = 1
  905. }
  906. if luckdraw.JoinType == models.JOINTYPE_NEWUSER && isnew != 1 {
  907. surplusNum = 0
  908. }
  909. cstluckdraw.CustomerId = customer.CustomerId
  910. cstluckdraw.IsNew = isnew
  911. cstluckdraw.LuckdrawId = luckdrawid
  912. cstluckdraw.SurplusNum = surplusNum
  913. newinfo, err := m.AddCustomerLuckDraw(cstluckdraw)
  914. return newinfo, err
  915. }
  916. // GetUserLuckDrawByLuckDraw 获取用户的抽奖信息
  917. func (m *LuckDrawDao) GetUserLuckDrawByLuckDraw(userid string, luckdrawid string) (*model.TaLuckdrawRecord, error) {
  918. var records []model.TaLuckdrawRecord
  919. err := m.db.Where("user_id=?", userid).And("luckdraw_id=?", luckdrawid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&records)
  920. if err != nil {
  921. return nil, err
  922. }
  923. if len(records) > 0 {
  924. return &records[0], nil
  925. }
  926. return nil, nil
  927. }
  928. // GetDetailByRecord 获取detail
  929. func (m *LuckDrawDao) GetDetailByRecord(recordid string) (*model.TaPrizeDetail, error) {
  930. var details []model.TaPrizeDetail
  931. err := m.db.Where("receive_id=?", recordid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&details)
  932. if err != nil {
  933. return nil, err
  934. }
  935. if len(details) > 0 {
  936. return &details[0], nil
  937. }
  938. return nil, nil
  939. }
  940. // UserRecord 用户抽奖信息
  941. type UserRecord struct {
  942. model.TaLuckdrawRecord `xorm:"extends"`
  943. Url string
  944. }
  945. // GetUserLuckDraw 获取用户的抽奖信息
  946. func (m *LuckDrawDao) GetUserLuckDraw(userid string) ([]UserRecord, error) {
  947. var records []UserRecord
  948. sql := `select a.*,b.url from ta_luckdraw_record a left join ta_prize_detail b on a.id=b.receive_id where a.user_id=? and a.status>` + strconv.Itoa(models.STATUS_DEL) + ` order by a.create_date desc`
  949. err := m.db.Sql(sql, userid).Find(&records)
  950. return records, err
  951. }
  952. // GetRecordByLuckDraw 抽奖记录
  953. func (m *LuckDrawDao) GetRecordByLuckDraw(luckdrawid string) ([]model.TaLuckdrawRecord, error) {
  954. var records []model.TaLuckdrawRecord
  955. err := m.db.Where("luckdraw_id=?", luckdrawid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Desc("create_date").Find(&records)
  956. return records, err
  957. }
  958. // GetRecordByID 获取抽奖记录明细
  959. func (m *LuckDrawDao) GetRecordByID(id string) (*LuckInfo, error) {
  960. var record []LuckInfo
  961. sql := `SELECT
  962. a.*,
  963. b.customer_qrcode
  964. FROM
  965. ta_luckdraw_record a
  966. LEFT JOIN ta_customer_course_qrcode b ON a.id = b.customer_course_id
  967. where a.id = '` + id + `'`
  968. err := m.db.Sql(sql).Find(&record)
  969. if len(record) > 0 {
  970. return &record[0], err
  971. }
  972. return nil, err
  973. }
  974. // SaveLuckDrawShareData 保存用户分享信息
  975. func (m *LuckDrawDao) SaveLuckDrawShareData(dt *model.TaShareLuckyRecord) error {
  976. dt.CreateDate = time.Now().Local()
  977. dt.Status = models.STATUS_NORMAL
  978. dt.Id = utils.GetGUID()
  979. if _, err := m.db.Insert(dt); err != nil {
  980. return err
  981. }
  982. return nil
  983. }
  984. // GetLuckDrawShareData 获取用户分 享内容
  985. func (m *LuckDrawDao) GetLuckDrawShareData(from, to, luckID, caseID string) ([]model.TaShareLuckyRecord, error) {
  986. var dts []model.TaShareLuckyRecord
  987. if err := m.db.Where("from_customer_id=?", from).
  988. And("to_customer_id=?", to).
  989. And("luckydraw_id=?", luckID).
  990. And("case_id=?", caseID).
  991. And("status=?", models.STATUS_NORMAL).
  992. Find(&dts); err != nil {
  993. return nil, err
  994. }
  995. return dts, nil
  996. }
  997. // UpdateShareNum 分享增加抽奖次数
  998. func (m *LuckDrawDao) UpdateShareNum(luckdraw *LuckDraw, from string) error {
  999. num := strconv.Itoa(luckdraw.ShareAddNum)
  1000. sql := `update ta_luckdraw_customer set share_num=share_num+` + num + `,share_surplus_num = share_surplus_num +` + num + ` ,surplus_num = surplus_num+` + num + ` where luckdraw_id=? and customer_id=?`
  1001. _, err := m.db.Exec(sql, luckdraw.Id, from)
  1002. return err
  1003. }
  1004. // GetLuckDrawCustomerNum 获取抽奖人数
  1005. func (m *LuckDrawDao) GetLuckDrawCustomerNum(luckdrawid string) (int, error) {
  1006. var records []model.TaLuckdrawRecord
  1007. sql := `select DISTINCT user_id from ta_luckdraw_record where luckdraw_id=?`
  1008. err := m.db.Sql(sql, luckdrawid).Find(&records)
  1009. return len(records), err
  1010. }