123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package service
- import (
- "github.com/gin-gonic/gin"
- "gorm.io/gorm"
- "log"
- "sfis/db"
- "sfis/lock"
- "sfis/model"
- "sfis/utils"
- "time"
- )
- func MoneyRecharge(appid string, money int, remark string) error {
- //取出用户锁
- lock.MainLock.Lock()
- userLock := lock.UserLockMap[appid]
- lock.MainLock.Unlock()
- userLock.Lock()
- defer userLock.Unlock()
- //查用户当前余额
- userAccount := &model.UserAccount{}
- db.GetSFISDB().First(userAccount, &model.UserAccount{AppID: appid})
- // 更新时间
- nowStr := time.Now().Local().Format("2006-01-02 15:04:05")
- errs := db.GetSFISDB().Transaction(func(tx *gorm.DB) error {
- moneyBefore := userAccount.Money
- moneyAfter := userAccount.Money + money
- //充值
- err := tx.Exec("update user_account set money = ?,update_at = ? WHERE `app_id` = ?", moneyAfter, nowStr,appid).Error
- if err != nil {
- log.Printf("appID:[%s],money:[%d] execute cost user_account error:[%v]", appid, moneyAfter, err)
- tx.Rollback()
- return err
- }
- //生充值记录
- err = tx.Exec("insert into user_money_record (app_id,`before`,`after`,trade_money,remark,create_at) values (?,?,?,?,?,?)", appid, moneyBefore, moneyAfter, money, remark,nowStr).Error
- if err != nil {
- log.Printf("appID:[%s],trade_money:[%d] execute insert into user_money_record error:[%v]", appid, money, err)
- tx.Rollback()
- return err
- }
- return nil
- })
- return errs
- }
- func ProductRecharge(appid string, productId, rechargeNum int, startTime string, endTime string, tradeMoney int, context *gin.Context) error {
- //取出用户锁
- lock.MainLock.Lock()
- userLock := lock.UserLockMap[appid]
- lock.MainLock.Unlock()
- userLock.Lock()
- defer userLock.Unlock()
- //查用户当前剩余量
- userProduct := &model.UserProduct{}
- db.GetSFISDB().First(userProduct, &model.UserProduct{AppID: appid, ProductID: productId})
- product := &model.Product{}
- if products, ok := utils.ProductCaches.Map.Load(productId); ok {
- product = products.(*model.Product)
- }
- // 更新时间
- nowStr := time.Now().Local().Format("2006-01-02 15:04:05")
- errs := db.GetSFISDB().Transaction(func(tx *gorm.DB) error {
- before := userProduct.LeftNum
- after := userProduct.LeftNum + rechargeNum
- //充值
- var err error
- if endTime != "" && startTime != "" {
- 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
- if err != nil {
- log.Printf("appID:[%s],left_num:[%d],endtime:[%s],starttime:[%s] execute cost user_product error:[%v]", appid, after, endTime, startTime, err)
- tx.Rollback()
- return err
- }
- } else {
- err = tx.Exec("update user_product set left_num = ?,update_at = ? WHERE `app_id` = ? and product_id = ?", after, nowStr, appid, productId).Error
- if err != nil {
- log.Printf("appID:[%s],left_num:[%d] execute cost user_product error:[%v]", appid, after, err)
- tx.Rollback()
- return err
- }
- }
- //生购买记录
- 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
- if err != nil {
- 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)
- tx.Rollback()
- return err
- }
- return nil
- })
- return errs
- }
|