package wallet import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" "github.com/shopspring/decimal" "recook/internal/back" "recook/internal/dbc" "recook/internal/model/user" user2 "recook/internal/v2/model/recook/user" "recook/tools" "time" ) type withdrawParam struct { UserID uint `json:"userId"` Amount float64 `json:"amount"` } /* 提现 金额不低于10元 保证用户已实名认证 且绑定了银行卡信息 每个月最多提现三次 减去钱包金额 增加一条记录 增加一条提现记录 */ func UpdateWithdrawals(c *gin.Context) { var p withdrawParam if err := tools.ParseParams(&p, c); err != nil { back.Fail(c, err.Error()) return } if p.Amount < 10.0 { back.Fail(c, "最低提取额度十元") return } var realInfo user.RealInfo dbc.DB.First(&realInfo, "user_id = ?", p.UserID) if realInfo.ID == 0 { back.Suc(c, "银行卡未绑定", gin.H{ "binding": false, }) return } now := time.Now() month := time.Date(now.Year(), now.Month(), 0, 0, 0, 0, 0, time.Local) var count uint dbc.DB.Table((&user.WalletWithdrawalsList{}).TableName()). Where("user_id = ? AND created_at >= ?", p.UserID, month).Count(&count) if count == 3 { back.Fail(c, "每月最多可提现三次") return } tx := dbc.DB.Begin() { var wallet user.Wallet if err := tx.First(&wallet, "user_id = ?", p.UserID).Error; err != nil { back.Err(c, err.Error()) tx.Rollback() return } if wallet.Balance.LessThan(decimal.NewFromFloat(p.Amount)) { back.Fail(c, "钱包金额不足") tx.Rollback() return } if err := tx.Model(&wallet).Updates(map[string]interface{}{ //"balance": wallet.Balance.Add(decimal.NewFromFloat(p.Amount).Mul(decimal.NewFromInt(-1))), "balance": gorm.Expr("balance - ?", p.Amount), "total_withdraw": gorm.Expr("total_withdraw + ?", p.Amount), }).Error; err != nil { back.Err(c, err.Error()) tx.Rollback() return } //one := user.WalletBalanceList{ // UserID: wallet.UserID, // Amount: decimal.NewFromFloat(p.Amount), // Style: "提现", // Comment: "卡号:" + realInfo.BankNo, //} //if err := tx.Create(&one).Error; err != nil { // http.Err(c, err.Error()) // tx.Rollback() // return //} recookUserWalletBalanceListModel := &user2.RecookUserWalletBalanceListModel{ UserId: wallet.UserID, IncomeType: user2.RecookUserWalletBalanceListIncomeTypeWithdraw, // 提现 Amount: decimal.NewFromFloat(p.Amount), Title: "卡号:" + realInfo.BankNo, Comment: "提现", } recookUserWalletBalanceListModel.SetDb(tx) recookUserWalletBalanceListModel.Create(recookUserWalletBalanceListModel) if recookUserWalletBalanceListModel.Id == 0 { back.Err(c, "系统异常") tx.Rollback() return } withdrawalsList := user.WalletWithdrawalsList{ UserID: wallet.UserID, Amount: decimal.NewFromFloat(p.Amount), UserName: realInfo.IdCardName, BankNo: realInfo.BankNo, } if err := tx.Create(&withdrawalsList).Error; err != nil { tx.Rollback() back.Err(c, err.Error()) return } } tx.Commit() back.Suc(c, "提现成功!预计资金将在本月21至25日到账", gin.H{ "binding": true, }) }