mh_goadmin_server/app/admin/models/user_vm.go
chenlin 59766f70b3 优化需求:
(1)调拨中(调入门店)改成调拨中(调出门店);
缺陷修复:
(1)店员邀请统计字段未赋值情况修复;
(2)零售退货订单反审核校验库存情况;
(3)供应商列表接口修改,增加翻页逻辑;
新增接口:
(1)新增通过名称模糊查询商品库存详情接口;
2024-07-01 09:44:35 +08:00

132 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package models
import (
"errors"
"fmt"
orm "go-admin/common/global"
"go-admin/logger"
"gorm.io/gorm"
)
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" // 零售退货扣除积分
)
// 用户积分
// gen:qs
//
//go:generate goqueryset -in user_vm.go
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:"-"`
}
func UserVmUpdate(gdb *gorm.DB, orderId, 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:", logger.Field("err", err))
return err
}
// 变动前的积分
nBeforeVm := userVm.Vm
flag := false
begin := gdb
if gdb == nil {
flag = true
begin = orm.Eloquent.Begin()
}
if userVm.Uid == 0 { // 没有积分记录
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:", logger.Field("err", err))
return err
}
} else {
// 如果用户积分不够抵扣则扣到0为止
if int(userVm.Vm)+amount <= 0 {
sql := fmt.Sprintf("UPDATE user_vm SET vm = ? WHERE uid=?")
err = begin.Exec(sql, 0, uid).Error
} 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:", logger.Field("err", err))
return err
}
}
vmRecord := &UserVmRecord{
Uid: uid,
BeforeVm: uint32(nBeforeVm),
AfterVm: 0, // 默认值为 0
Alter: amount,
Event: event,
Describe: describe,
ErpOrderId: orderId,
}
if newValue := int(userVm.Vm) + amount; newValue > 0 {
vmRecord.AfterVm = uint32(newValue)
}
err = begin.Create(vmRecord).Error
if err != nil {
begin.Rollback()
logger.Error("err:", logger.Field("err", err))
return err
}
if flag {
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("err:", logger.Field("err", err))
return err
}
}
return nil
}