(1)优化库存调拨权限,有调出调入门店任何一方权限均可查看详情; (2)查询商品串码或条码接口入参调整,新增库存状态和门店id; (3)零售明细中退货订单相关金额和数量调整为负数; (4)小程序商城退货流程优化,积分更新添加事务; (5)系统用户列表支持单个门店用户查询,过滤掉门店权限过期的用户; (6)新增/编辑采购订单校验修改,根据V1.4.1需求放开部分必填项校验;
131 lines
3.3 KiB
Go
131 lines
3.3 KiB
Go
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
|
||
}
|