103 lines
2.2 KiB
Go
103 lines
2.2 KiB
Go
|
package models
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"fmt"
|
||
|
orm "go-admin/common/global"
|
||
|
"go-admin/logger"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
VmEventBuyGoods = "buy_goods"
|
||
|
VmEventOpenMember = "open_member"
|
||
|
VmEventInvite1Member = "invite_1_member"
|
||
|
VmEventInvite2Member = "invite_2_member"
|
||
|
VmEventUserShareCard = "user_share_card"
|
||
|
VmEventAttendance = "attendance"
|
||
|
)
|
||
|
|
||
|
// 用户积分
|
||
|
//go:generate goqueryset -in user_vm.go
|
||
|
// gen:qs
|
||
|
type UserVm struct {
|
||
|
Model
|
||
|
|
||
|
Uid uint32 `json:"uid" gorm:"column:uid;unique_index"`
|
||
|
Vm uint32 `json:"vm"`
|
||
|
|
||
|
//UserVm uint32 `json:"user_vm"`
|
||
|
}
|
||
|
|
||
|
// 用户积分-变动记录
|
||
|
// gen:qs
|
||
|
type UserVmRecord struct {
|
||
|
Model
|
||
|
|
||
|
Uid uint32 `json:"uid" gorm:"column:uid;unique_index"`
|
||
|
BeforeVm uint32 `json:"before_vm"` // 变动前
|
||
|
AfterVm uint32 `json:"after_vm"` // 变动后
|
||
|
Alter int `json:"alter"` // 数值
|
||
|
Event string `json:"event" gorm:"type:varchar(100)"` // 事件
|
||
|
Describe string `json:"describe" gorm:"type:text"` // 描述
|
||
|
}
|
||
|
|
||
|
func UserVmUpdate(uid uint32, amount int, event, describe string) error {
|
||
|
var userVm UserVm
|
||
|
err := orm.Eloquent.Table("user_vm").
|
||
|
Where("uid=?", uid).Find(&userVm).Error
|
||
|
if err != nil {
|
||
|
logger.Error("share card retrieve cards err:", err)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
begin := orm.Eloquent.Begin()
|
||
|
if err == RecordNotFound {
|
||
|
if amount < 0 {
|
||
|
begin.Rollback()
|
||
|
logger.Error("amount lt 0")
|
||
|
return errors.New("amount lt 0")
|
||
|
}
|
||
|
userVm = UserVm{
|
||
|
Uid: uid,
|
||
|
Vm: uint32(amount),
|
||
|
}
|
||
|
err = begin.Create(&userVm).Error
|
||
|
if err != nil {
|
||
|
begin.Rollback()
|
||
|
logger.Error("err:", err)
|
||
|
return err
|
||
|
}
|
||
|
} else {
|
||
|
sql := fmt.Sprintf("UPDATE user_vm SET vm = vm+? WHERE uid=?;")
|
||
|
err = begin.Exec(sql, amount, uid).Error
|
||
|
if err != nil {
|
||
|
begin.Rollback()
|
||
|
logger.Error("err:", err)
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
vmRecord := &UserVmRecord{
|
||
|
Uid: uid,
|
||
|
BeforeVm: uint32(userVm.Vm),
|
||
|
AfterVm: uint32(int(userVm.Vm) + amount),
|
||
|
Alter: amount,
|
||
|
Event: event,
|
||
|
Describe: describe,
|
||
|
}
|
||
|
err = begin.Create(vmRecord).Error
|
||
|
if err != nil {
|
||
|
begin.Rollback()
|
||
|
logger.Error("err:", err)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
err = begin.Commit().Error
|
||
|
if err != nil {
|
||
|
begin.Rollback()
|
||
|
logger.Error("err:", err)
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|