integralService.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  1. package service
  2. import (
  3. "app.yhyue.com/moapp/jyPoints/entity"
  4. "app.yhyue.com/moapp/jyPoints/rpc/integral"
  5. "fmt"
  6. "log"
  7. "math/rand"
  8. "time"
  9. )
  10. type IntegralService struct{}
  11. // 新增积分流水
  12. func (service *IntegralService) IntegralAddService(data entity.FlowJSON) (int64, string, string) {
  13. serialNumber := "0000"
  14. orm := entity.Engine.NewSession()
  15. defer orm.Close()
  16. err := orm.Begin()
  17. flow := entity.Flow{}
  18. flow.UserId = data.UserId
  19. flow.SourceId = data.SourceId
  20. //flow.SourceType = data.SourceType
  21. flow.PointType = data.PointType
  22. flow.SourceType = fmt.Sprint(data.PointType)
  23. flow.Point = data.Point
  24. if data.EndDate != "" {
  25. data.EndDate = data.EndDate[0:10]
  26. }
  27. flow.EndDate = data.EndDate
  28. flow.CreateTime = time.Now().Format("2006-01-02 15:04:05")
  29. flow.AppId = data.AppId
  30. flow.Sort = entity.AddCode
  31. flow.Abstract = data.Abstract
  32. var numb = int64(0)
  33. if data.OperationType {
  34. flow.OperationType = 1
  35. }
  36. //流水号
  37. serialNumber = time.Now().Format("20060102150405000") + fmt.Sprint(rand.Intn(100))
  38. flow.SerialNumber = serialNumber
  39. numb, err = orm.Table("integral_flow").Insert(flow)
  40. if err != nil && numb == 0 {
  41. log.Print("新增流水失败:", err)
  42. orm.Rollback()
  43. return entity.ErrorCode, "新增流水失败", serialNumber
  44. }
  45. //结存修改
  46. solde := entity.Solde{}
  47. solde.AppId = data.AppId
  48. solde.UserId = data.UserId
  49. if data.OperationType {
  50. //永久积分
  51. //先查看是否有EndDate的积分
  52. soldelist := []entity.Solde{}
  53. err = orm.Table("integral_solde").Where("appId=? and userId=? and endDate='' and perManEntPoints != 0 AND timePoints = 0 ", data.AppId, data.UserId).Find(&soldelist)
  54. if len(soldelist) > 0 {
  55. soldelist[0].PerManEntPoints += data.Point
  56. numb, err = orm.Table("integral_solde").ID(soldelist[0].Id).Cols("perManEntPoints").Update(soldelist[0])
  57. if err != nil || numb == 0 {
  58. log.Print("修改时效积分失败:", err)
  59. orm.Rollback()
  60. return entity.ErrorCode, "修改时效积分失败", serialNumber
  61. }
  62. } else {
  63. solde.PerManEntPoints = data.Point
  64. numb, err = orm.Table("integral_solde").Insert(&solde)
  65. if err != nil || numb == 0 {
  66. log.Print("新增永久积分失败")
  67. orm.Rollback()
  68. return entity.ErrorCode, "新增永久积分失败", serialNumber
  69. }
  70. }
  71. } else {
  72. flow.OperationType = 0
  73. solde.EndDate = data.EndDate
  74. //先查看是否有EndDate的积分
  75. soldelist := []entity.Solde{}
  76. err = orm.Table("integral_solde").Where("appId=? and userId=? and endDate=? and( ( perManEntPoints = 0 AND timePoints != 0) or (perManEntPoints = 0 AND timePoints = 0 )) ", data.AppId, data.UserId, data.EndDate).Find(&soldelist)
  77. if len(soldelist) > 0 {
  78. soldelist[0].TimePoints += data.Point
  79. numb, err = orm.Table("integral_solde").ID(soldelist[0].Id).Cols("timePoints").Update(soldelist[0])
  80. if err != nil || numb == 0 {
  81. log.Print("修改时效积分失败:", err)
  82. orm.Rollback()
  83. return entity.ErrorCode, "修改时效积分失败", serialNumber
  84. }
  85. } else {
  86. solde.TimePoints = data.Point
  87. numb, err = orm.Table("integral_solde").Insert(&solde)
  88. if err != nil && numb == 0 {
  89. log.Print("新增时效积分失败:", err)
  90. orm.Rollback()
  91. return entity.ErrorCode, "新增时效积分失败", serialNumber
  92. }
  93. }
  94. }
  95. //余额修改
  96. balanceList := []*entity.Balance{}
  97. //查看是否存在本人的余额
  98. err = orm.Table("integral_balance").Where("appId=? and userId=? ", data.AppId, data.UserId).Find(&balanceList)
  99. if len(balanceList) == 0 {
  100. balance := entity.Balance{}
  101. balance.UserId = data.UserId
  102. balance.AppId = data.AppId
  103. balance.CountPoints = data.Point
  104. numb, err = orm.Table("integral_balance").Insert(&balance)
  105. if err != nil || numb == 0 {
  106. log.Print("新增余额失败:", err)
  107. orm.Rollback()
  108. return entity.ErrorCode, "新增余额失败", serialNumber
  109. }
  110. } else {
  111. //修改余额
  112. balanceList[0].CountPoints = balanceList[0].CountPoints + data.Point
  113. numb, err = orm.Table("integral_balance").ID(balanceList[0].Id).Cols("countPoints").Update(balanceList[0])
  114. if err != nil || numb == 0 {
  115. log.Print("余额新增失败:", err)
  116. orm.Rollback()
  117. return entity.ErrorCode, "余额新增失败", serialNumber
  118. }
  119. }
  120. err = orm.Commit()
  121. if err != nil {
  122. log.Print("积分新增失败:", err)
  123. return entity.ErrorCode, "积分新增失败", serialNumber
  124. }
  125. return entity.SuccessCode, "余额新增成功", serialNumber
  126. }
  127. // 积分消耗
  128. func (service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (int64, string, string) {
  129. serialNumber := "0000"
  130. serialNumber = time.Now().Format("20060102150405000") + fmt.Sprint(rand.Intn(100))
  131. orm := entity.Engine.NewSession()
  132. defer orm.Close()
  133. var err = orm.Begin()
  134. var af = int64(0)
  135. balance := entity.Balance{}
  136. //查询积分余额是否充足
  137. b, err := orm.Table("integral_balance").Select("countPoints,id").
  138. Where("userId = ? AND appId = ?", data.UserId, data.AppId).
  139. Get(&balance)
  140. if err != nil {
  141. log.Printf("积分余额查询出错,userId:[%s],err:[%v]", data.UserId, err)
  142. return entity.ErrorCode, "积分余额查询出错", serialNumber
  143. }
  144. if !b {
  145. log.Printf("没有查询到[%s]的积分记录,err:[%v]", data.UserId, err)
  146. return entity.ErrorCode, "没有查询到积分记录", serialNumber
  147. }
  148. if balance.CountPoints < data.Point {
  149. return entity.ErrorCode, "积分余额不足", serialNumber
  150. }
  151. //结存消耗
  152. soldelist := []entity.Solde{}
  153. err = orm.Table("integral_solde").
  154. Where("appId=? and userId=? and (endDate = '' OR endDate IS NULL OR endDate >= ?) and (( perManEntPoints != 0 AND timePoints = 0 ) OR ( perManEntPoints = 0 AND timePoints != 0 ))", data.AppId, data.UserId, time.Now().Format("2006-01-02")).
  155. Asc("perManEntPoints").
  156. Asc("endDate").
  157. Find(&soldelist)
  158. if len(soldelist) == 0 {
  159. return entity.ErrorCode, "没有结存可以消耗", serialNumber
  160. }
  161. var point = data.Point
  162. for _, solde := range soldelist {
  163. if point == 0 {
  164. break
  165. }
  166. if solde.TimePoints == 0 {
  167. //消耗永久积分
  168. if solde.PerManEntPoints >= point {
  169. //够消耗
  170. solde.PerManEntPoints = solde.PerManEntPoints - point
  171. point = 0
  172. af, err = orm.Table("integral_solde").
  173. ID(solde.Id).
  174. Cols("perManEntPoints").
  175. Update(solde)
  176. if err != nil || af == 0 {
  177. log.Print("消耗永久积分失败:", err)
  178. orm.Rollback()
  179. return entity.ErrorCode, "消耗永久积分失败", serialNumber
  180. }
  181. }
  182. } else {
  183. //消耗时效积分
  184. if solde.TimePoints > point {
  185. solde.TimePoints = solde.TimePoints - point
  186. //够消耗
  187. point = 0
  188. af, err = orm.Table("integral_solde").
  189. ID(solde.Id).
  190. Cols("timePoints").
  191. Update(solde)
  192. if err != nil || af == 0 {
  193. log.Print("消耗时效积分失败:", err)
  194. orm.Rollback()
  195. return entity.ErrorCode, "消耗时效积分失败", serialNumber
  196. }
  197. break
  198. }
  199. //不够消耗
  200. point = point - solde.TimePoints
  201. solde.TimePoints = 0
  202. af, err = orm.Table("integral_solde").
  203. ID(solde.Id).
  204. Cols("timePoints").
  205. Update(solde)
  206. if err != nil || af == 0 {
  207. log.Print("消耗时效积分失败:", err)
  208. orm.Rollback()
  209. return entity.ErrorCode, "消耗时效积分失败", serialNumber
  210. }
  211. }
  212. }
  213. //余额消耗
  214. balance.CountPoints = balance.CountPoints - data.Point
  215. af, err = orm.Table("integral_balance").
  216. ID(balance.Id).
  217. Cols("countPoints").
  218. Update(balance)
  219. if err != nil || af == 0 {
  220. log.Print("余额扣除失败:", err)
  221. orm.Rollback()
  222. return entity.ErrorCode, "余额扣除失败", serialNumber
  223. }
  224. //消耗积分流水记录
  225. flow := entity.Flow{}
  226. flow.UserId = data.UserId
  227. flow.SourceType = fmt.Sprint(data.PointType)
  228. flow.PointType = data.PointType
  229. flow.SourceId = data.SourceId
  230. flow.Abstract = data.Abstract
  231. //flow.SourceType = data.SourceType
  232. flow.Point = data.Point
  233. flow.CreateTime = time.Now().Format("2006-01-02 15:04:05")
  234. flow.EndDate = data.EndDate
  235. flow.AppId = data.AppId
  236. flow.Sort = entity.ReduceCode
  237. flow.SerialNumber = serialNumber
  238. af, err = orm.Table("integral_flow").Insert(&flow)
  239. if err != nil || af == 0 {
  240. log.Print("积分记录失败")
  241. orm.Rollback()
  242. return entity.ErrorCode, "积分记录失败", serialNumber
  243. }
  244. err = orm.Commit()
  245. if err != nil {
  246. return entity.ErrorCode, "积分消耗失败", serialNumber
  247. }
  248. return entity.SuccessCode, "积分消耗成功", serialNumber
  249. }
  250. // 到期积分查询
  251. func (service *IntegralService) IntegralExpireCheckService(data entity.ExpireJSON) (int64, int64) {
  252. orm := entity.Engine
  253. var solde entity.Solde
  254. var err error
  255. af, err := orm.Table("integral_solde").
  256. Select("SUM( timePoints ) AS timePoints").
  257. Where("userId = ? AND appId = ? AND date_format(endDate, '%Y-%m' )<= date_format(now(),'%Y-%m') ", data.UserId, data.AppId).
  258. Get(&solde)
  259. if !af || err != nil {
  260. log.Println(err)
  261. return entity.ErrorCode, 0
  262. }
  263. return entity.SuccessCode, solde.TimePoints
  264. }
  265. /*//结存新增
  266. func (service *IntegralService) IntegralSoldeService(model entity.SoldeUpdate) (bool, string) {
  267. solde := entity.Solde{}
  268. solde.AppId = model.AppId
  269. solde.UserId = model.UserId
  270. solde.EndDate = model.EndDate
  271. var err error
  272. var numb = int64(0)
  273. //新增积分
  274. if model.PointsType {
  275. //永久积分
  276. solde.PerManEntPoints = model.Points
  277. numb, err = entity.Engine.Table("integral_solde").Insert(&solde)
  278. if err != nil && numb == 0 {
  279. log.Print("新增永久积分失败")
  280. return false, "新增永久积分失败"
  281. }
  282. return true, "新增永久积分成功"
  283. }
  284. //时效积分
  285. //先查看是否有EndDate的积分
  286. soldelist := []entity.Solde{}
  287. err = entity.Engine.Table("integral_solde").Where("appId=? and userId=? and endDate=? ", model.AppId, model.UserId, model.EndDate).Find(&soldelist)
  288. if len(soldelist) > 0 {
  289. soldelist[0].TimePoints += model.Points
  290. numb, err = entity.Engine.Table("integral_solde").ID(soldelist[0].Id).Cols("timePoints").Update(soldelist[0])
  291. if err != nil && numb == 0 {
  292. log.Print("修改时效积分失败")
  293. return false, "修改时效积分失败"
  294. }
  295. return true, "修改时效积分成功"
  296. } else {
  297. solde.TimePoints = model.Points
  298. numb, err = entity.Engine.Table("integral_solde").Insert(&solde)
  299. if err != nil && numb == 0 {
  300. log.Print("新增时效积分失败")
  301. return false, "新增时效积分失败"
  302. }
  303. return true, "新增时效积分成功"
  304. }
  305. }
  306. //结存扣除
  307. func (service *IntegralService) IntegralSoldeReduceService(model entity.SoldeUpdate) (bool, string) {
  308. var err error
  309. var numb = int64(0)
  310. soldelist := []entity.Solde{}
  311. 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)
  312. if len(soldelist) > 0 {
  313. var point = model.Points
  314. for _, solde := range soldelist {
  315. if point == 0 {
  316. return true, "积分消耗成功"
  317. }
  318. if solde.TimePoints == 0 {
  319. //消耗永久积分
  320. if solde.PerManEntPoints >= point {
  321. //够消耗
  322. point = 0
  323. solde.PerManEntPoints = solde.PerManEntPoints - point
  324. numb, err = entity.Engine.Table("integral_solde").ID(solde.Id).Cols("perManEntPoints").Update(solde)
  325. if err != nil && numb == 0 {
  326. log.Print("消耗永久积分失败")
  327. return false, "消耗永久积分失败"
  328. }
  329. }
  330. }
  331. //消耗时效积分
  332. if solde.TimePoints > point {
  333. //够消耗
  334. point = 0
  335. solde.TimePoints = solde.TimePoints - point
  336. numb, err = entity.Engine.Table("integral_solde").ID(solde.Id).Cols("timePoints").Update(solde)
  337. if err != nil && numb == 0 {
  338. log.Print("消耗时效积分失败")
  339. return false, "消耗时效积分失败"
  340. }
  341. return true, "消耗时效积分成功"
  342. }
  343. //不够消耗
  344. point = point - solde.TimePoints
  345. solde.TimePoints = 0
  346. numb, err = entity.Engine.Table("integral_solde").ID(solde.Id).Cols("timePoints").Update(solde)
  347. if err != nil && numb == 0 {
  348. log.Print("消耗时效积分失败")
  349. return false, "消耗时效积分失败"
  350. }
  351. }
  352. }
  353. return false, "没有积分可以扣除"
  354. }
  355. //调整余额
  356. func (service *IntegralService) IntegralBalanceService(model entity.BalanceUpdate) (bool, string) {
  357. var err error
  358. var numb = int64(0)
  359. fmt.Println(numb)
  360. balanceList := []*entity.Balance{}
  361. //查看是否存在本人的余额
  362. err = entity.Engine.Table("integral_balance").Where("appId=? and userId=? ", model.AppId, model.UserId).Find(&balanceList)
  363. if model.Change {
  364. //新增
  365. if len(balanceList) == 0 {
  366. balance := entity.Balance{}
  367. balance.UserId = model.UserId
  368. balance.AppId = model.AppId
  369. balance.CountPoints = model.CountPoints
  370. numb, err = entity.Engine.Table("integral_balance").Insert(&balance)
  371. if err != nil && numb == 0 {
  372. log.Print("新增余额失败")
  373. return false, "新增余额失败"
  374. }
  375. }
  376. //修改余额
  377. balanceList[0].CountPoints = balanceList[0].CountPoints + model.CountPoints
  378. }
  379. //消耗
  380. if len(balanceList) == 0 {
  381. log.Println("没有积分可以扣除")
  382. return false, "没有积分可以扣除"
  383. }
  384. if balanceList[0].CountPoints < model.CountPoints {
  385. log.Println("积分余额不足")
  386. return false, "积分余额不足"
  387. }
  388. balanceList[0].CountPoints = balanceList[0].CountPoints - model.CountPoints
  389. numb, err = entity.Engine.Table("integral_balance").ID(balanceList[0].Id).Cols("countPoints").Update(balanceList[0])
  390. if err != nil && numb == 0 {
  391. log.Print("余额扣除失败")
  392. return false, "余额扣除失败"
  393. }
  394. return true, "余额扣除失败"
  395. }
  396. */
  397. //积分守护
  398. func (service *IntegralService) IntegralGuardService(endDate string) bool {
  399. orm := entity.Engine.NewSession()
  400. defer orm.Close()
  401. err := orm.Begin()
  402. soldelist := []entity.Solde{}
  403. err = orm.Table("integral_solde").
  404. Where("timePoints != 0 AND endDate < ? ", endDate).
  405. Desc("endDate").Find(&soldelist)
  406. if err != nil {
  407. log.Println("积分结存查询失败")
  408. }
  409. for _, solde := range soldelist {
  410. //查询积分余额是否充足
  411. balance := entity.Balance{}
  412. b, err := orm.Table("integral_balance").Select("countPoints,id").
  413. Where("userId = ? AND appId = ?", solde.UserId, solde.AppId).
  414. Get(&balance)
  415. if !b || err != nil {
  416. log.Printf("积分余额查询出错,userId:[%s],err:[%v]", solde.UserId, err)
  417. return false
  418. }
  419. if balance.CountPoints < solde.TimePoints {
  420. return false
  421. }
  422. //积分余额-时效过期积分=当前总积分余额
  423. balance.CountPoints = balance.CountPoints - solde.TimePoints
  424. orm.Table("integral_balance")
  425. numb, err := orm.Table("integral_balance").
  426. ID(balance.Id).
  427. Cols("countPoints").
  428. Update(balance)
  429. if err != nil && numb == 0 {
  430. log.Print("余额扣除失败")
  431. orm.Rollback()
  432. return false
  433. }
  434. //积分过期流水记录
  435. flow := entity.Flow{}
  436. flow.UserId = solde.UserId
  437. flow.PointType = 2004
  438. flow.SourceId = ""
  439. flow.SourceType = "2004"
  440. flow.Point = solde.TimePoints
  441. flow.CreateTime = time.Now().Format("2006-01-02 15:04:05")
  442. flow.EndDate = solde.EndDate
  443. flow.AppId = solde.AppId
  444. flow.Sort = entity.ReduceCode
  445. af, err := orm.Table("integral_flow").Insert(&flow)
  446. if err != nil && af == 0 {
  447. log.Print("积分记录失败")
  448. orm.Rollback()
  449. return false
  450. }
  451. //清空过期积分的时效积分
  452. soldeUpdate := &entity.Solde{}
  453. soldeUpdate.TimePoints = 0
  454. af, err = orm.Table("integral_solde").
  455. Cols("timePoints").
  456. ID(solde.Id).
  457. Update(soldeUpdate)
  458. if af == 0 && err != nil {
  459. log.Println("过期时效积分清空失败", solde.Id)
  460. orm.Rollback()
  461. return false
  462. }
  463. }
  464. err = orm.Commit()
  465. if err != nil {
  466. return false
  467. }
  468. return true
  469. }
  470. // 积分余额查询
  471. func (service *IntegralService) IntegralBalanceCheckService(userId, appId string) (bool, int64, int64) {
  472. orm := entity.Engine
  473. //积分总余额
  474. balance := entity.Balance{}
  475. _, err := orm.Table("integral_balance").
  476. Where("userId = ? AND appId = ?", userId, appId).
  477. Get(&balance)
  478. if err != nil {
  479. log.Println("积分查询出错")
  480. return false, 0, 0
  481. }
  482. //积分30天内到期余额
  483. var solde entity.Solde
  484. _, err = orm.Table("integral_solde").
  485. Select("SUM( timePoints ) AS timePoints").
  486. Where("userId = ? AND appId = ? AND endDate > DATE_SUB( NOW(), INTERVAL +1 DAY ) AND DATE_SUB( NOW(), INTERVAL -31 DAY ) > endDate", userId, appId).
  487. Get(&solde)
  488. if err != nil {
  489. log.Println(err)
  490. return false, 0, 0
  491. }
  492. return true, balance.CountPoints, solde.TimePoints
  493. }
  494. // 按月查询积分使用情况
  495. func (service *IntegralService) IntegralDetailedCheck(data entity.FlowJSON) ([]*integral.Point, int64) {
  496. orm := entity.Engine.NewSession()
  497. //查询时间范围内的
  498. //查询新增消耗的积分和消耗积分 searchType 0全部 1新增 -1消耗
  499. searchCode := "1=1"
  500. if data.SearchType == 1 {
  501. searchCode = " flow.Sort=1"
  502. } else if data.SearchType == -1 {
  503. searchCode = " flow.Sort=-1"
  504. }
  505. var flowList []*entity.FlowReq
  506. numb, err := orm.Table("integral_flow").Alias("flow").
  507. Select("flow.*,pt.name").
  508. Join("left", "point_type pt", "flow.pointType=pt.code").
  509. Where("flow.userId = ? AND flow.appId = ?", data.UserId, data.AppId).
  510. And(searchCode).
  511. Desc("flow.createTime").
  512. Limit(int(data.PageSize), (int(data.Page-1))*int(data.PageSize)).
  513. FindAndCount(&flowList)
  514. var flowReq []*integral.Point
  515. for _, value := range flowList {
  516. point := integral.Point{}
  517. point.EndDate = value.EndDate
  518. point.Sort = value.Sort
  519. point.Point = value.Point
  520. createTimeStr := value.CreateTime.Format("2006-01-02")
  521. point.CreateTime = createTimeStr
  522. point.PointType = value.PointType
  523. point.SourceId = value.SourceId
  524. point.SourceType = value.SourceType
  525. point.Name = value.Name
  526. point.Abstract = value.Abstract
  527. point.SerialNumber = value.SerialNumber
  528. flowReq = append(flowReq, &point)
  529. }
  530. fmt.Println(flowList)
  531. if err != nil {
  532. log.Println(err)
  533. return nil, int64(0)
  534. }
  535. return flowReq, numb
  536. }
  537. // 账号合并
  538. func (service *IntegralService) UserMerge(mergeUser, mergedUser, appId string) (bool, string) {
  539. orm := entity.Engine.NewSession()
  540. defer orm.Close()
  541. err := orm.Begin()
  542. //先查询一下被合并账号有效的结存信息
  543. nowStr := time.Now().Format("2006-01-02")
  544. soldeList := []entity.Solde{}
  545. err = orm.Table("integral_solde").
  546. Where("userId = ? AND appId = ? and (endDate>=? or endDate ='') ", mergedUser, appId, nowStr).
  547. Find(&soldeList)
  548. if err != nil {
  549. orm.Rollback()
  550. log.Println("查询被合并者结存信息出错", err)
  551. return false, "查询被合并者结存信息出错"
  552. }
  553. timeBalanceNumb := int64(0)
  554. perManEntBalanceNumb := int64(0)
  555. for _, value := range soldeList {
  556. if value.PerManEntPoints == 0 {
  557. //此数据可能是时效积分数据
  558. if value.TimePoints == 0 {
  559. continue
  560. }
  561. solde := entity.Solde{}
  562. _, err = orm.Table("integral_solde").
  563. Where("userId = ? AND appId = ? and endDate=?", mergeUser, appId, value.EndDate).
  564. Get(&solde)
  565. if err != nil {
  566. orm.Rollback()
  567. log.Println("查询合并者结存信息出错,err")
  568. return false, "查询合并者结存信息出错"
  569. }
  570. if solde.Id == 0 {
  571. numb := int64(0)
  572. //新增一条记录
  573. solde := entity.Solde{}
  574. solde.AppId = value.AppId
  575. solde.UserId = mergeUser
  576. solde.PerManEntPoints = 0
  577. solde.TimePoints = value.TimePoints
  578. solde.EndDate = value.EndDate
  579. numb, err = orm.Table("integral_solde").Insert(&solde)
  580. if err != nil && numb == 0 {
  581. log.Print("新增时效积分失败:", err)
  582. orm.Rollback()
  583. return false, "新增时效积分失败"
  584. }
  585. }
  586. orm.Exec("UPDATE integral_solde SET timePoints = timePoints+? WHERE id= ?", value.TimePoints, solde.Id)
  587. timeBalanceNumb += value.TimePoints
  588. }
  589. //此数据是永久积分数据
  590. solde := entity.Solde{}
  591. _, err = orm.Table("integral_solde").
  592. Where("userId = ? AND appId = ? and endDate =''", mergeUser, appId).
  593. Get(&solde)
  594. if err != nil {
  595. orm.Rollback()
  596. log.Println("查询合并者永久结存信息出错", err)
  597. return false, "查询合并者永久结存信息出错"
  598. }
  599. if solde.Id == 0 {
  600. //没有永久数据
  601. numb := int64(0)
  602. //新增一条记录
  603. solde := entity.Solde{}
  604. solde.AppId = value.AppId
  605. solde.UserId = mergeUser
  606. solde.PerManEntPoints = value.PerManEntPoints
  607. solde.TimePoints = 0
  608. solde.EndDate = value.EndDate
  609. numb, err = orm.Table("integral_solde").Insert(&solde)
  610. if err != nil && numb == 0 {
  611. log.Print("新增时效积分失败:", err)
  612. orm.Rollback()
  613. return false, "新增时效积分失败"
  614. }
  615. }
  616. orm.Exec("UPDATE integral_solde SET perManEntPoints = perManEntPoints+? WHERE id= ?", value.PerManEntPoints, solde.Id)
  617. perManEntBalanceNumb += value.PerManEntPoints
  618. }
  619. balance := entity.Balance{}
  620. fool := true
  621. fool, err = orm.Table("integral_balance").Select("*").
  622. Where("userId = ? AND appId = ?", mergeUser, appId).
  623. Get(&balance)
  624. fmt.Println(fool)
  625. if err != nil {
  626. orm.Rollback()
  627. log.Println("积分余额查询出错,err")
  628. return false, "积分余额查询失败"
  629. }
  630. numb := int64(0)
  631. if timeBalanceNumb > 0 {
  632. flow := entity.Flow{}
  633. flow.UserId = mergeUser
  634. flow.SourceType = "账号合并"
  635. flow.PointType = 1006
  636. flow.SourceId = ""
  637. flow.Abstract = ""
  638. flow.CreateTime = time.Now().Format("2006-01-02 15:04:05")
  639. flow.EndDate = ""
  640. flow.AppId = appId
  641. flow.Sort = entity.AddCode
  642. flow.SerialNumber = time.Now().Format("20060102150405000") + fmt.Sprint(rand.Intn(100))
  643. flow.Point = timeBalanceNumb
  644. flow.OperationType = 0
  645. numb, err = orm.Table("integral_flow").Insert(&flow)
  646. if err != nil && numb == 0 {
  647. log.Print("新增时效流水失败:", err)
  648. orm.Rollback()
  649. return false, "新增时效流水失败"
  650. }
  651. }
  652. if perManEntBalanceNumb > 0 {
  653. flow := entity.Flow{}
  654. flow.UserId = mergeUser
  655. flow.SourceType = "账号合并"
  656. flow.PointType = 1006
  657. flow.SourceId = ""
  658. flow.Abstract = ""
  659. flow.CreateTime = time.Now().Format("2006-01-02 15:04:05")
  660. flow.EndDate = ""
  661. flow.AppId = appId
  662. flow.Sort = entity.AddCode
  663. flow.SerialNumber = time.Now().Format("20060102150405000") + fmt.Sprint(rand.Intn(100))
  664. flow.Point = perManEntBalanceNumb
  665. flow.OperationType = 1
  666. numb, err = orm.Table("integral_flow").Insert(&flow)
  667. if err != nil && numb == 0 {
  668. log.Print("新增永久流水失败:", err)
  669. orm.Rollback()
  670. return false, "新增永久流水失败"
  671. }
  672. }
  673. if balance.Id == 0 {
  674. balance := entity.Balance{}
  675. balance.UserId = mergeUser
  676. balance.AppId = appId
  677. balance.CountPoints = timeBalanceNumb + perManEntBalanceNumb
  678. numb, err = orm.Table("integral_balance").Insert(&balance)
  679. if err != nil || numb == 0 {
  680. log.Print("新增余额失败:", err)
  681. orm.Rollback()
  682. return false, "新增余额失败"
  683. }
  684. } else {
  685. //修改余额
  686. orm.Exec("UPDATE integral_balance SET countPoints = countPoints+? WHERE id = ?", timeBalanceNumb+perManEntBalanceNumb, balance.Id)
  687. }
  688. orm.Commit()
  689. return true, "合并成功"
  690. }