mh_server/model/user_vm.go

104 lines
2.5 KiB
Go
Raw Permalink Normal View History

2022-01-16 08:56:33 +00:00
package model
2022-03-14 06:57:34 +00:00
import (
"errors"
"fmt"
"github.com/codinl/go-logger"
)
const (
2022-05-28 06:18:27 +00:00
//VmEventExchangeGoods = "exchange_goods"
VmEventBuyGoods = "buy_goods" // 购买商品积分抵扣
VmEventOpenMember = "open_member" // 开通会员奖励
VmEventRenewMember = "renew_member" // 续费会员奖励
VmEventUpgradeMember = "upgrade_member" // 升级会员奖励
VmEventInvite1Member = "invite_1_member" // 邀请会员奖励
VmEventInvite2Member = "invite_2_member" // 邀请会员奖励
VmEventAttendance = "attendance" // 签到获取积分
VmEventErpOrderSale = "erp_order_sale" // 零售销售获得积分
VmEventErpOrderReject = "erp_order_reject" // 零售退货扣除积分
2022-03-14 06:57:34 +00:00
)
2022-01-16 08:56:33 +00:00
// 用户积分
// gen:qs
//
//go:generate goqueryset -in user_vm.go
2022-01-16 08:56:33 +00:00
type UserVm struct {
Model
Uid uint32 `json:"uid" gorm:"column:uid;unique_index"`
Vm uint32 `json:"vm"`
}
// 用户积分-变动记录
// gen:qs
type UserVmRecord struct {
Model
2022-03-07 06:14:05 +00:00
Uid uint32 `json:"uid" gorm:"column:uid;index"`
2022-01-16 08:56:33 +00:00
BeforeVm uint32 `json:"before_vm"` // 变动前
AfterVm uint32 `json:"after_vm"` // 变动后
2022-03-07 06:14:05 +00:00
Alter int `json:"alter"` // 数值
2022-01-16 08:56:33 +00:00
Event string `json:"event" gorm:"type:varchar(100)"` // 事件
Describe string `json:"describe" gorm:"type:text"` // 描述
2022-03-07 06:14:05 +00:00
2022-01-16 08:56:33 +00:00
}
2022-03-14 06:57:34 +00:00
func UserVmUpdate(uid uint32, amount int, event, describe string) error {
var userVm UserVm
err := NewUserVmQuerySet(DB).UidEq(uid).One(&userVm)
if err != nil && err != RecordNotFound {
logger.Error("err:", err)
return err
}
begin := DB.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
}