ActivityService.go 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. package service
  2. import (
  3. "app.yhyue.com/moapp/jyMarketing/entity"
  4. "app.yhyue.com/moapp/jyMarketing/rpc/activity"
  5. "fmt"
  6. _ "github.com/garyburd/redigo/redis"
  7. "log"
  8. "time"
  9. )
  10. type ActivityService struct{}
  11. //奖券获取
  12. func (service *ActivityService) LotteryReceive(data *activity.LotteryOperation) (int64, string) {
  13. orm := entity.Engine.NewSession()
  14. defer orm.Close()
  15. err := orm.Begin()
  16. bool := true
  17. if len(data.LotteryIdArr) == 0 {
  18. return entity.ErrorCode, "没有卷可以领取"
  19. }
  20. for _, lotteryId := range data.LotteryIdArr {
  21. log.Println(fmt.Sprint(lotteryId) + "Id奖券领取")
  22. //每种劵处理
  23. //1、先查询奖券信息
  24. prizeData := entity.PrizeJson{}
  25. bool, err = orm.Table("lottery").
  26. Alias("l").Select("l.name,l.full,l.reduce, l.prizeId,p.beginDate,p.endDate,p.isLimitNumber,p.limitNumber,p.validityDates,p.validityTimeType").
  27. Join("left", "prize p", "l.prizeId=p.id").
  28. Where("l.id=?", lotteryId).Get(&prizeData)
  29. if err != nil {
  30. log.Panicln("查询奖品信息:", err)
  31. orm.Rollback()
  32. return entity.ErrorCode, "奖品信息查询失败"
  33. }
  34. if !bool {
  35. log.Panicln("查询奖品信息:", err)
  36. orm.Rollback()
  37. return entity.ErrorCode, "奖品信息查询失败"
  38. }
  39. //2、先判断奖券是否可以重复领取,在判断之前是否领取过
  40. if prizeData.IsLimitNumber == 1 {
  41. //查询之前是否领取过
  42. userLotteryList := []entity.UserPrize{}
  43. err = orm.Table("user_prize").
  44. Where("userId=? and appId=? and lotteryId=?", data.UserId, data.AppId, lotteryId).Find(&userLotteryList)
  45. if err != nil {
  46. log.Panicln("查询奖品信息:", err)
  47. orm.Rollback()
  48. return entity.ErrorCode, "查询领取次数失败"
  49. }
  50. if len(userLotteryList) >= prizeData.LimitNumber {
  51. orm.Rollback()
  52. return entity.ErrorCode, "你领取奖券数量已达上限"
  53. }
  54. }
  55. //3、在判断奖券是否够用
  56. //4、领取奖券
  57. userLettry := entity.UserPrize{}
  58. userLettry.AppId = data.AppId
  59. userLettry.UserId = data.UserId
  60. userLettry.PrizeType = 0
  61. userLettry.CreateTime = time.Now()
  62. userLettry.LotteryId = lotteryId
  63. userLettry.PrizeId = prizeData.PrizeId
  64. userLettry.ValidityDates = prizeData.ValidityDates
  65. userLettry.Name = prizeData.Name
  66. userLettry.Full = int64(prizeData.Full)
  67. userLettry.Reduce = int64(prizeData.Reduce)
  68. //0、有起止时间1、当天起几天可用2、次日起几天可用
  69. switch prizeData.ValidityTimeType {
  70. case 0:
  71. userLettry.EndDate = prizeData.EndDate
  72. userLettry.BeginDate = prizeData.BeginDate
  73. case 1:
  74. nowStr := time.Now().Format("2006-01-02")
  75. userLettry.BeginDate = nowStr
  76. userLettry.EndDate = service.ObtainAppointTimeString(nowStr, prizeData.ValidityDates)
  77. case 2:
  78. nowStr := time.Now().Format("2006-01-02")
  79. nextDayStr := service.ObtainAppointTimeString(nowStr, 1)
  80. userLettry.BeginDate = nextDayStr
  81. userLettry.EndDate = service.ObtainAppointTimeString(nextDayStr, prizeData.ValidityDates)
  82. }
  83. numb, err := orm.Table("user_prize").Insert(&userLettry)
  84. if err != nil || numb == int64(0) {
  85. log.Panicln("领取奖券失败:", err)
  86. orm.Rollback()
  87. return entity.ErrorCode, "领取奖券失败"
  88. }
  89. //5、修改奖券余额数量
  90. lottery := entity.Lottery{}
  91. lottery.Id = lotteryId
  92. _, err = orm.Exec("UPDATE lottery SET `stockNumber` = stockNumber-1, `receiveNumber` = receiveNumber+1 WHERE `id` = ?", lotteryId)
  93. if err != nil {
  94. log.Panicln("修改奖券库存失败:", err)
  95. orm.Rollback()
  96. return entity.ErrorCode, "修改奖券库存失败"
  97. }
  98. }
  99. orm.Commit()
  100. return entity.SuccessCode, "奖券领取成功"
  101. }
  102. //奖券使用
  103. func (service *ActivityService) ActivityUse(data *activity.LotteryOperation) (int64, string) {
  104. orm := entity.Engine.NewSession()
  105. defer orm.Close()
  106. err := orm.Begin()
  107. nowStr := time.Now().Format("2006-01-02")
  108. for _, lotteryId := range data.LotteryIdArr {
  109. //1、先查看是否有这张奖券
  110. userLotteryList := []*entity.UserPrize{}
  111. err = orm.Table("user_prize").
  112. Where("userId=? and appId=? and endDate>=? and prizeType=0 and lotteryId=? ", data.UserId, data.AppId, nowStr, lotteryId).
  113. Asc("createTime").Find(&userLotteryList)
  114. if err != nil {
  115. log.Println("查询奖券库存失败:", err)
  116. orm.Rollback()
  117. return entity.ErrorCode, "查询奖券库存失败"
  118. }
  119. if (len(userLotteryList) == 0) {
  120. log.Println(data.UserId, "用户没有ID为", lotteryId, "的奖券")
  121. orm.Rollback()
  122. return entity.ErrorCode, "该用户没有此此奖券"
  123. }
  124. //2、奖券状态改为已使用
  125. userLotteryList[0].UseDate = time.Now()
  126. userLotteryList[0].PrizeType = 1
  127. numb, err := orm.Table("user_prize").ID(userLotteryList[0].Id).Cols("prizeType", "useDate").Update(userLotteryList[0])
  128. if err != nil || numb == 0 {
  129. log.Println("修改用户奖券失败:", err)
  130. orm.Rollback()
  131. return entity.ErrorCode, "修改用户奖券失败"
  132. }
  133. //3、修改卷的使用量
  134. lottery := entity.Lottery{}
  135. lottery.Id = lotteryId
  136. _, err = orm.Exec("UPDATE lottery SET `useNumber` = useNumber+1 WHERE `id` = ?", lotteryId)
  137. if err != nil || numb==0 {
  138. log.Println("修改奖券使用数量失败:", err)
  139. orm.Rollback()
  140. return entity.ErrorCode, "修改奖券使用数量失败"
  141. }
  142. }
  143. orm.Commit()
  144. return entity.SuccessCode, "使用奖券成功"
  145. }
  146. //活动下的奖券
  147. func (service *ActivityService) ActivityLottery(in *activity.Request) (int64, string,[]entity.LotteryJson) {
  148. orm := entity.Engine.NewSession()
  149. defer orm.Close()
  150. err := orm.Begin()
  151. //1、先查找活动下的奖品Id
  152. lotteryJsonList := []entity.LotteryJson{}
  153. err = orm.Table("activity").Alias("a").
  154. Select(" p.limitNumber,UseProductList,( select count(up.id) FROM user_prize up where up.lotteryId = l.id AND up.userId ='"+in.UserId+"' ) AS count,p.isLimitNumber,p.validityTimeType,p.validityDates,p.instructions,p.remark,l.id as lotteryId ,l.name ").
  155. Join("left", "prize p", " a.prizeId = p.Id").
  156. Join("left", "lottery l", " l.prizeId = p.id ").
  157. Where("a.id = ? and a.appId=? ",in.ActivityId,in.AppId).Find(&lotteryJsonList)
  158. if err != nil {
  159. log.Println("用户单位下的奖券查询失败:", err)
  160. orm.Rollback()
  161. return entity.ErrorCode, "用户单位下的奖券查询失败", lotteryJsonList
  162. }
  163. orm.Commit()
  164. return entity.SuccessCode, "活动下的奖券", lotteryJsonList
  165. }
  166. //用户下的奖券
  167. func (service *ActivityService) UserLottery(data *activity.Request, model int) (int64, string, []entity.UserPrizeJson, int64) {
  168. orm := entity.Engine.NewSession()
  169. defer orm.Close()
  170. err := orm.Begin()
  171. userLettryList := []entity.UserPrizeJson{}
  172. nowStr := time.Now().Format("2006-01-02")
  173. count := int64(0)
  174. if model == 1 {
  175. err = orm.Table("user_prize").Alias("up").Select("up.*,a.useProductList").
  176. Join("left", "activity a ", "a.prizeId=up.prizeId").Where("up.userId=? and up.appId=? and up.endDate>=?", data.UserId, data.AppId, nowStr).And("up.prizeType=0").Desc("up.createTime").Find(&userLettryList)
  177. } else {
  178. /* count,err = orm.Table("user_prize").Alias("up").Select("up.*,a.useProductList").
  179. Join("left", "activity a ", "a.prizeId=up.prizeId").Where("up.userId=? and up.appId=? and up.endDate>=?", data.UserId, data.AppId, nowStr).Limit(int(data.PageSize), (int(data.Page - 1))*int(data.PageSize)).FindAndCount(&userLettryList)
  180. */
  181. }
  182. if err != nil {
  183. log.Println("用户单位下的奖券查询失败:", err)
  184. orm.Rollback()
  185. return entity.ErrorCode, "用户单位下的奖券查询失败", userLettryList, count
  186. }
  187. orm.Commit()
  188. return entity.SuccessCode, "", userLettryList, count
  189. }
  190. //计算几天之后的时间
  191. func (service *ActivityService) ObtainAppointTimeString(now string, beApartDay int) string {
  192. local, _ := time.LoadLocation("Local")
  193. t, _ := time.ParseInLocation("2006-01-02", now, local)
  194. stopTime := t.AddDate(0, 0, beApartDay)
  195. stopTimeStr := stopTime.Format("2006-01-02")
  196. return stopTimeStr
  197. }
  198. //查询过期的奖券改为已过期
  199. func (service *ActivityService) UpdateLottery( endDate string) (int64, string) {
  200. orm := entity.Engine.NewSession()
  201. defer orm.Close()
  202. err := orm.Begin()
  203. //1、先查找过期的奖券
  204. userPrizeList := []entity.UserPrize{}
  205. err = orm.Table("user_prize").
  206. Where("endDate<? and prizeType=0 ",endDate).Find(&userPrizeList)
  207. if err != nil {
  208. log.Println("查询过期奖券失败:", err)
  209. orm.Rollback()
  210. return entity.ErrorCode, "查询过期奖券失败"
  211. }
  212. for _, value := range userPrizeList {
  213. value.PrizeType=2
  214. numb, err := orm.Table("user_prize").ID(value.Id).Cols("prizeType").Update(value)
  215. if err != nil || numb==0 {
  216. log.Println("修改奖券使用数量失败:", err)
  217. orm.Rollback()
  218. return entity.ErrorCode, "修改奖券使用数量失败"
  219. }
  220. }
  221. orm.Commit()
  222. return entity.SuccessCode, "过期奖券处理成功"
  223. }