mh_goadmin_server/app/admin/models/user_vm.go

131 lines
3.3 KiB
Go
Raw Normal View History

2023-09-16 02:56:39 +00:00
package models
import (
"errors"
"fmt"
orm "go-admin/common/global"
"go-admin/logger"
"gorm.io/gorm"
2023-09-16 02:56:39 +00:00
)
const (
VmEventBuyGoods = "buy_goods" // 购买商品积分抵扣
VmEventOpenMember = "open_member" // 开通会员奖励
VmEventInvite1Member = "invite_1_member" // 邀请会员奖励
VmEventInvite2Member = "invite_2_member" // 邀请会员奖励
VmEventUserShareCard = "user_share_card" // 用户共享卡收益
VmEventAttendance = "attendance" // 连续签到获取积分
VmEventErpOrderSale = "erp_order_sale" // 零售销售获得积分
VmEventErpOrderReject = "erp_order_reject" // 零售退货扣除积分
2023-09-16 02:56:39 +00:00
)
// 用户积分
// gen:qs
2023-10-14 08:19:04 +00:00
//
//go:generate goqueryset -in user_vm.go
2023-09-16 02:56:39 +00:00
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"` // 用户ID
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"` // 描述
ErpOrderId uint32 `json:"erp_order_id" gorm:"index"` // 零售订单id
User *UserInfo `json:"user,omitempty" gorm:"-"`
2023-09-16 02:56:39 +00:00
}
func UserVmUpdate(gdb *gorm.DB, orderId, uid uint32, amount int, event, describe string) error {
2023-09-16 02:56:39 +00:00
var userVm UserVm
err := orm.Eloquent.Table("user_vm").
Where("uid=?", uid).Find(&userVm).Error
if err != nil {
2023-10-14 08:19:04 +00:00
logger.Error("share card retrieve cards err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
2024-03-27 10:01:38 +00:00
// 变动前的积分
nBeforeVm := userVm.Vm
//flag := false
begin := gdb
if gdb == nil {
//flag = true
begin = orm.Eloquent.Begin()
}
2024-03-27 10:01:38 +00:00
if userVm.Uid == 0 { // 没有积分记录
2023-09-16 02:56:39 +00:00
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()
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
} else {
// 如果用户积分不够抵扣则扣到0为止
2024-03-27 10:01:38 +00:00
if int(userVm.Vm)+amount <= 0 {
sql := fmt.Sprintf("UPDATE user_vm SET vm = ? WHERE uid=?")
err = begin.Exec(sql, 0, uid).Error
} else {
2024-03-27 10:01:38 +00:00
sql := fmt.Sprintf("UPDATE user_vm SET vm = vm+? WHERE uid=?")
err = begin.Exec(sql, amount, uid).Error
}
2023-09-16 02:56:39 +00:00
if err != nil {
begin.Rollback()
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
}
vmRecord := &UserVmRecord{
Uid: uid,
2024-03-27 10:01:38 +00:00
BeforeVm: uint32(nBeforeVm),
AfterVm: 0, // 默认值为 0
2023-09-16 02:56:39 +00:00
Alter: amount,
Event: event,
Describe: describe,
}
if newValue := int(userVm.Vm) + amount; newValue > 0 {
vmRecord.AfterVm = uint32(newValue)
}
2023-09-16 02:56:39 +00:00
err = begin.Create(vmRecord).Error
if err != nil {
begin.Rollback()
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
//if flag {
// err = begin.Commit().Error
// if err != nil {
// begin.Rollback()
// logger.Error("err:", logger.Field("err", err))
// return err
// }
//}
2023-09-16 02:56:39 +00:00
return nil
}