userRecharge.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package service
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "gorm.io/gorm"
  6. "log"
  7. "sfis/db"
  8. "sfis/lock"
  9. "sfis/model"
  10. "sfis/utils"
  11. "time"
  12. )
  13. func MoneyRecharge(appid string, money int, context *gin.Context) error {
  14. //取出用户锁
  15. lock.MainLock.Lock()
  16. userLock := lock.UserLockMap[appid]
  17. lock.MainLock.Unlock()
  18. userLock.Lock()
  19. defer userLock.Unlock()
  20. //查用户当前余额
  21. userAccount := &model.UserAccount{}
  22. db.GetSFISDB().First(userAccount, &model.UserAccount{AppID: appid})
  23. errs := db.GetSFISDB().Transaction(func(tx *gorm.DB) error {
  24. moneyBefore := userAccount.Money
  25. moneyAfter := userAccount.Money + money
  26. //充值
  27. err := tx.Exec("update user_account set money = ? WHERE `app_id` = ?", moneyAfter, appid).Error
  28. if err != nil {
  29. log.Printf("appID:[%s],money:[%d] execute cost user_account error:[%v]", appid, moneyAfter, err)
  30. tx.Rollback()
  31. return err
  32. }
  33. //生充值记录
  34. err = tx.Exec("insert into user_money_record (app_id,`before`,`after`,trade_money) values (?,?,?,?)", appid, moneyBefore, moneyAfter, money).Error
  35. if err != nil {
  36. log.Printf("appID:[%s],trade_money:[%d] execute insert into user_money_record error:[%v]", appid, money, err)
  37. tx.Rollback()
  38. return err
  39. }
  40. return nil
  41. })
  42. return errs
  43. }
  44. func ProductRecharge(appid string, productId, rechargeNum int, startTime string, endTime string, tradeMoney int, context *gin.Context) error {
  45. //取出用户锁
  46. lock.MainLock.Lock()
  47. userLock := lock.UserLockMap[appid]
  48. lock.MainLock.Unlock()
  49. userLock.Lock()
  50. defer userLock.Unlock()
  51. //查用户当前剩余量
  52. fmt.Println(startTime, endTime)
  53. userProduct := &model.UserProduct{}
  54. db.GetSFISDB().First(userProduct, &model.UserProduct{AppID: appid, ProductID: productId})
  55. product := &model.Product{}
  56. if products, ok := utils.ProductCaches.Map.Load(productId); ok {
  57. product = products.(*model.Product)
  58. }
  59. // 更新时间
  60. nowStr := time.Now().Local().Format("2006-01-02 15:04:05")
  61. errs := db.GetSFISDB().Transaction(func(tx *gorm.DB) error {
  62. before := userProduct.LeftNum
  63. after := userProduct.LeftNum + rechargeNum
  64. //充值
  65. var err error
  66. if endTime != "" && startTime != "" {
  67. err = tx.Exec("update user_product set left_num = ?,start_at=?,end_at = ? ,update_at = ? WHERE `app_id` = ? and product_id = ?", after, startTime, endTime,nowStr, appid, productId).Error
  68. if err != nil {
  69. log.Printf("appID:[%s],left_num:[%d],endtime:[%s],starttime:[%s] execute cost user_product error:[%v]", appid, after, endTime, startTime, err)
  70. tx.Rollback()
  71. return err
  72. }
  73. } else {
  74. err = tx.Exec("update user_product set left_num = ?,update_at = ? WHERE `app_id` = ? and product_id = ?", after,nowStr, appid, productId).Error
  75. if err != nil {
  76. log.Printf("appID:[%s],left_num:[%d] execute cost user_product error:[%v]", appid, after, err)
  77. tx.Rollback()
  78. return err
  79. }
  80. }
  81. //生购买记录
  82. err = tx.Exec("insert into user_buy_record (app_id,product_id,user_product_id,`before`,`after`,trade_money,buy_type,history_unit_price,create_at) values (?,?,?,?,?,?,?,?,?)", appid, productId, userProduct.ID, before, after, tradeMoney, 1, product.UnitPrice,nowStr).Error
  83. if err != nil {
  84. log.Printf("appID:[%s],product_id:[%d],user_product_id:[%d],after:[%d],trade_money:[%d] execute insert into user_buy_record error:[%v]", appid, productId, userProduct.ID, after, tradeMoney, err)
  85. tx.Rollback()
  86. return err
  87. }
  88. return nil
  89. })
  90. return errs
  91. }