integralService.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. package service
  2. import (
  3. "fmt"
  4. "log"
  5. "points_service/entity"
  6. "time"
  7. )
  8. type IntegralService struct{}
  9. //消耗积分流水
  10. func(service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (int,string) {
  11. orm := entity.Engine
  12. flow := entity.Flow{}
  13. flow.UserId = data.UserId
  14. flow.PointType = data.PointType
  15. flow.BusinessTypeId = data.BusinessTypeId
  16. flow.BusinessType = data.BusinessType
  17. flow.Point = data.Point
  18. flow.CreateTime = time.Now().Format("2006-01-02 15:04:05")
  19. flow.EndDate = data.EndDate
  20. flow.AppId = data.AppId
  21. //判断是否为消耗积分:false
  22. if !data.Sort {
  23. //查询积分余额是否充足
  24. balance := entity.Balance{}
  25. balance.UserId = data.UserId
  26. balance.AppId = data.AppId
  27. b,err := orm.Table("integral_balance").Select("countPoints").
  28. Where("userId = ? AND appId = ?",data.UserId,data.AppId).
  29. Get(&balance)
  30. if !b || err != nil {
  31. log.Printf("积分余额查询出错,userId:[%s],err:[%v]", data.UserId, err)
  32. return entity.ErrorCode,"积分余额不足"
  33. }
  34. if balance.CountPoints <data.Point {
  35. return entity.ErrorCode,"积分余额不足"
  36. }
  37. }
  38. af, err := orm.Table("integral_flow").Insert(&flow)
  39. if err != nil {
  40. log.Print("积分记录失败-积分增减类型:",data.Sort)
  41. return entity.ErrorCode,"积分记录失败"
  42. }
  43. if af >0 {
  44. log.Println("积分记录成功-积分增减类型:",data.Sort)
  45. return entity.SuccessCode,"积分记录成功"
  46. }
  47. return entity.SuccessCode,"积分记录成功"
  48. }
  49. //到期积分查询
  50. func(service *IntegralService) IntegralExpireCheckService(data entity.ExpireJSON) []entity.Flow {
  51. orm := entity.Engine
  52. var flow []entity.Flow
  53. var err error
  54. point := ""
  55. if data.PointType != 0 {
  56. point = "AND pointType = " + fmt.Sprint(data.PointType) + ""
  57. }
  58. err = orm.Table("integral_flow").
  59. Select("id,pointType,SUM(point) AS point").
  60. Where("userId = ? AND appId = ? AND endDate < ? "+point+"", data.UserId, data.AppId, data.EndDate).
  61. GroupBy("pointType").
  62. Find(&flow)
  63. if err != nil {
  64. log.Println(err)
  65. return nil
  66. }
  67. return flow
  68. }
  69. //结存新增
  70. func (service *IntegralService) IntegralSoldeService(model entity.SoldeUpdate) (bool,string){
  71. solde := entity.Solde{}
  72. solde.AppId = model.AppId
  73. solde.UserId = model.UserId
  74. solde.EndDate = model.EndDate
  75. var err error
  76. var numb = int64(0)
  77. //新增积分
  78. if (model.PointsType) {
  79. //永久积分
  80. solde.PerManEntPoints = model.Points
  81. numb, err = entity.Engine.Table("integral_solde").Insert(&solde)
  82. if err != nil && numb == 0 {
  83. log.Print("新增永久积分失败")
  84. return false,"新增永久积分失败"
  85. }
  86. return true,"新增永久积分成功"
  87. }
  88. //失效积分
  89. //先查看是否有EndDate的积分
  90. soldelist := []entity.Solde{}
  91. err = entity.Engine.Table("integral_solde").Where("appId=? and userId=? and endDate=? ", model.AppId, model.UserId, model.EndDate).Find(&soldelist)
  92. if len(soldelist) > 0 {
  93. soldelist[0].TimePoints += model.Points
  94. numb, err = entity.Engine.Table("integral_solde").ID(soldelist[0].Id).Cols("timePoints").Update(&soldelist[0])
  95. if err != nil && numb == 0 {
  96. log.Print("修改时效积分失败")
  97. return false,"修改时效积分失败"
  98. }
  99. return true,"修改时效积分成功"
  100. } else {
  101. solde.TimePoints = model.Points
  102. numb, err = entity.Engine.Table("integral_solde").Insert(&solde)
  103. if err != nil && numb == 0 {
  104. log.Print("新增时效积分失败")
  105. return false,"新增时效积分失败"
  106. }
  107. return true,"新增时效积分成功"
  108. }
  109. }
  110. //结存扣除
  111. func (service *IntegralService) IntegralSoldeReduceService(model entity.SoldeUpdate)(bool,string) {
  112. var err error
  113. var numb = int64(0)
  114. soldelist := []entity.Solde{}
  115. err = entity.Engine.Table("integral_solde").Where("appId=? and userId=? and endDate> ? ( perManEntPoints != 0 AND timePoints = 0 ) OR ( perManEntPoints = 0 AND timePoints != 0 )", model.AppId, model.UserId,time.Now().Format("2006/01/02/")).Desc("endDate,timePoints").Find(&soldelist)
  116. if len(soldelist) > 0 {
  117. var point = model.Points
  118. for _, solde := range soldelist {
  119. if point == 0 {
  120. return true,"积分消耗成功"
  121. }
  122. if (solde.TimePoints == 0) {
  123. //消耗永久积分
  124. if (solde.PerManEntPoints >= point) {
  125. //够消耗
  126. point = 0
  127. solde.PerManEntPoints = solde.PerManEntPoints - point
  128. numb, err = entity.Engine.Table("integral_solde").ID(solde.Id).Cols("perManEntPoints").Update(&solde)
  129. if err != nil && numb == 0 {
  130. log.Print("消耗永久积分失败")
  131. return false,"消耗永久积分失败"
  132. }
  133. }
  134. }
  135. //消耗时效积分
  136. if (solde.TimePoints > point) {
  137. //够消耗
  138. point = 0
  139. solde.TimePoints = solde.TimePoints - point
  140. numb, err = entity.Engine.Table("integral_solde").ID(solde.Id).Cols("timePoints").Update(&solde)
  141. if err != nil && numb == 0 {
  142. log.Print("消耗时效积分失败")
  143. return false,"消耗时效积分失败"
  144. }
  145. return true,"消耗时效积分成功"
  146. }
  147. //不够消耗
  148. point = point - solde.TimePoints
  149. solde.TimePoints = 0
  150. numb, err = entity.Engine.Table("integral_solde").ID(solde.Id).Cols("timePoints").Update(&solde)
  151. if err != nil && numb == 0 {
  152. log.Print("消耗时效积分失败")
  153. return false,"消耗时效积分失败"
  154. }
  155. }
  156. }
  157. return false,"没有积分可以扣除"
  158. }
  159. //调整余额
  160. func (service *IntegralService) IntegralBalanceService(model entity.BalanceUpdate) (bool,string) {
  161. var err error
  162. var numb = int64(0)
  163. fmt.Println(numb)
  164. balanceList := []*entity.Balance{}
  165. //查看是否存在本人的余额
  166. err = entity.Engine.Table("integral_balance").Where("appId=? and userId=? ", model.AppId, model.UserId).Find(&balanceList)
  167. if model.Change {
  168. //新增
  169. if len(balanceList) == 0 {
  170. balance := entity.Balance{}
  171. balance.UserId = model.UserId
  172. balance.AppId = model.AppId
  173. balance.CountPoints = model.CountPoints
  174. numb, err = entity.Engine.Table("integral_balance").Insert(&balance)
  175. if err != nil && numb == 0 {
  176. log.Print("新增余额失败")
  177. return false,"新增余额失败"
  178. }
  179. }
  180. //修改余额
  181. balanceList[0].CountPoints = balanceList[0].CountPoints + model.CountPoints
  182. }
  183. //消耗
  184. if len(balanceList) == 0 {
  185. log.Println("没有积分可以扣除")
  186. return false,"没有积分可以扣除"
  187. }
  188. if (balanceList[0].CountPoints < model.CountPoints) {
  189. log.Println("积分余额不足")
  190. return false,"积分余额不足"
  191. }
  192. balanceList[0].CountPoints = balanceList[0].CountPoints - model.CountPoints
  193. numb, err = entity.Engine.Table("integral_balance").ID(balanceList[0].Id).Cols("countPoints").Update(&balanceList[0])
  194. if err != nil && numb == 0 {
  195. log.Print("余额扣除失败")
  196. return false,"余额扣除失败"
  197. }
  198. return true,"余额扣除失败"
  199. }
  200. //积分守护
  201. func(service *IntegralService) IntegralGuardService(data entity.ExpireJSON) []entity.Flow {
  202. orm := entity.Engine
  203. var flow []entity.Flow
  204. var err error
  205. point := ""
  206. if data.PointType != 0 {
  207. point = "AND pointType = "+fmt.Sprint(data.PointType)+""
  208. }
  209. err = orm.Table("integral_flow").
  210. Select("id,pointType,SUM(point) AS point").
  211. Where("userId = ? AND appId = ? AND endDate < ? "+point+"", data.UserId,data.AppId,data.EndDate).
  212. GroupBy("pointType").
  213. Find(&flow)
  214. if err != nil {
  215. log.Println(err)
  216. return nil
  217. }
  218. return flow
  219. }