package app import ( "git.echol.cn/loser/lckt/global" "git.echol.cn/loser/lckt/model/app" "git.echol.cn/loser/lckt/model/app/request" "git.echol.cn/loser/lckt/model/user" "go.uber.org/zap" "gorm.io/gorm" "time" ) // WithService 提现服务 type WithService struct{} func (s WithService) Create(p app.With) (err error) { err = global.GVA_DB.Create(&p).Error if err != nil { global.GVA_LOG.Error("创建提现请求失败", zap.Error(err)) return } // 扣除用户余额 err = global.GVA_DB.Model(&user.User{}).Where("id = ?", p.UserID).Update("balance", gorm.Expr("balance - ?", p.Amount)).Error if err != nil { global.GVA_LOG.Error("扣除用户余额失败", zap.Error(err)) return } return } func (s WithService) GetList(p request.GetWithList) (list []app.With, total int64, err error) { limit := p.PageSize offset := p.PageSize * (p.Page - 1) db := global.GVA_DB.Model(&app.With{}) if p.UserId != 0 { db = db.Where("user_id = ?", p.UserId) } if p.UserName != "" { db = db.Joins("JOIN app_user ON app_user.id = app_with.user_id").Where("app_user.user_name LIKE ?", "%"+p.UserName+"%") } if p.Status != 0 { db = db.Where("status = ?", p.Status) } if p.StartTime != "" { db = db.Where("created_at >= ?", p.StartTime) } if p.EndTime != "" { db = db.Where("created_at <= ?", p.EndTime) } err = db.Count(&total).Error if err != nil { global.GVA_LOG.Error("获取提现列表总数失败", zap.Error(err)) return } err = db.Limit(limit).Offset(offset).Order("created_at DESC").Find(&list).Error if err != nil { global.GVA_LOG.Error("获取提现列表失败", zap.Error(err)) return } return } func (s WithService) UpdateStatus(p app.With) (err error) { var userInfo user.User err = global.GVA_DB.Model(&user.User{}).Where("id = ?", p.UserID).First(&userInfo).Error if err != nil { global.GVA_LOG.Error("查询用户信息失败", zap.Error(err)) return } if p.Status == 2 { // 通过申请 var with app.With err = global.GVA_DB.Model(&app.With{}).Where("id = ?", p.ID).First(&with).Error if err != nil { global.GVA_LOG.Error("查询提现请求失败", zap.Error(err)) return } if with.Status != 1 { global.GVA_LOG.Error("提现请求状态错误,无法通过", zap.Error(err)) return } with.Status = 2 with.ArriveTime = time.Now().Format("2006-01-02 15:04:05") with.RealAmount = p.RealAmount err = global.GVA_DB.Save(&with).Error if err != nil { global.GVA_LOG.Error("更新提现请求状态失败", zap.Error(err)) return } // 增加余额变更记录 var record app.BalanceLog record.UserID = with.UserID record.ChangeType = 2 // 提现 record.ChangeValue = with.Amount record.Balance = userInfo.Balance err = global.GVA_DB.Create(&record).Error if err != nil { global.GVA_LOG.Error("创建余额变更记录失败", zap.Error(err)) return } return } if p.Status == 3 { // 拒绝申请,退还金额 var with app.With err = global.GVA_DB.Model(&app.With{}).Where("id = ?", p.ID).First(&with).Error if err != nil { global.GVA_LOG.Error("查询提现请求失败", zap.Error(err)) return } if with.Status != 1 { global.GVA_LOG.Error("提现请求状态错误,无法拒绝", zap.Error(err)) return } with.Status = 3 with.Remark = p.Remark // 退还金额 err = global.GVA_DB.Model(&user.User{}).Where("id = ?", with.UserID).Update("balance", gorm.Expr("balance + ?", with.Amount)).Error if err != nil { global.GVA_LOG.Error("退还用户余额失败", zap.Error(err)) return } err = global.GVA_DB.Save(&with).Error if err != nil { global.GVA_LOG.Error("更新提现请求状态失败", zap.Error(err)) return } } if p.Status == 4 { // 用户取消申请,退还金额 var with app.With err = global.GVA_DB.Model(&app.With{}).Where("id = ?", p.ID).First(&with).Error if err != nil { global.GVA_LOG.Error("查询提现请求失败", zap.Error(err)) return } if with.Status != 1 { global.GVA_LOG.Error("提现请求状态错误,无法取消", zap.Error(err)) return } with.Status = 4 // 退还金额 err = global.GVA_DB.Model(&user.User{}).Where("id = ?", with.UserID).Update("balance", gorm.Expr("balance + ?", with.Amount)).Error if err != nil { global.GVA_LOG.Error("退还用户余额失败", zap.Error(err)) return } err = global.GVA_DB.Save(&with).Error if err != nil { global.GVA_LOG.Error("更新提现请求状态失败", zap.Error(err)) return } } return }