mh_goadmin_server/app/admin/models/user_vm.go
chenlin fb11fdd79c 修复缺陷:
(1)优化库存调拨权限,有调出调入门店任何一方权限均可查看详情;
(2)查询商品串码或条码接口入参调整,新增库存状态和门店id;
(3)零售明细中退货订单相关金额和数量调整为负数;
(4)小程序商城退货流程优化,积分更新添加事务;
(5)系统用户列表支持单个门店用户查询,过滤掉门店权限过期的用户;
(6)新增/编辑采购订单校验修改,根据V1.4.1需求放开部分必填项校验;
2024-06-20 14:32:03 +08:00

131 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,
}
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
}