1.配合前端调整零售预售功能,相关数据需注意:

主机预售券 activity_id为10;
优惠券名称需要包含"预售"两个字;
2、新建商城订单时增加入参:CouponCode;
3、GoodsOrder表新增字段:coupon_code、coupon_name、coupon_discount;
This commit is contained in:
chenlin 2025-01-09 15:57:20 +08:00
parent 5535e0492e
commit 1597ccf96b
6 changed files with 761 additions and 162 deletions

View File

@ -535,9 +535,10 @@ func PostagePackageInfo(c *gin.Context) {
func MemberRenewalUserCouponList(c *gin.Context) { func MemberRenewalUserCouponList(c *gin.Context) {
req := struct { req := struct {
PageIdx int `json:"page_idx"` PageIdx int `json:"page_idx"`
PageSize int `json:"page_size"` PageSize int `json:"page_size"`
State uint32 `json:"state"` // 1-未使用 2-已使用 3-已过期 State uint32 `json:"state"` // 1-未使用 2-已使用 3-已过期
ActivityId uint32 `json:"activity_id"` // 10-预售券
}{} }{}
if err := c.ShouldBindJSON(&req); err != nil { if err := c.ShouldBindJSON(&req); err != nil {
logger.Error(err) logger.Error(err)
@ -569,6 +570,9 @@ func MemberRenewalUserCouponList(c *gin.Context) {
if req.State != 0 { if req.State != 0 {
qs = qs.StateEq(req.State) qs = qs.StateEq(req.State)
} }
if req.ActivityId != 0 {
qs = qs.ActivityIdEq(req.ActivityId)
}
count, err := qs.Count() count, err := qs.Count()
if err != nil { if err != nil {
logger.Error("count err:", err) logger.Error("count err:", err)

View File

@ -2416,21 +2416,78 @@ func HmPushWXPayNotice(c *gin.Context) {
logger.Error("err:", err) logger.Error("err:", err)
} }
err = model.UserVmUpdate(goodsOrder.Uid, int(goodsOrder.Vm)*-1, model.VmEventBuyGoods, "购买商品积分抵扣") // 商品是否存在
var goods model.Goods
err = model.NewGoodsQuerySet(model.DB).GoodsIdEq(goodsOrder.GoodsId).One(&goods)
if err != nil { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
RespJson(c, status.BadRequest, nil)
return
} }
sub := model.DeliverTaskSub{
Uid: uint32(goodsOrder.Uid), // 如果订单使用了优惠券,则更新为已使用
UserAddressId: uint32(goodsOrder.AddressId), if goodsOrder.CouponCode != "" {
OrderType: 2, model.NewUserCouponQuerySet(model.DB).CodeEq(goodsOrder.CouponCode).GetUpdater().SetState(2).Update()
OrderId: goodsOrder.OrderId,
StoreId: 13,
} }
err = sub.Add()
if err != nil { if strings.Contains(goods.Name, "预售") { // 主机预售券,需要发放优惠券;默认为已收货
logger.Error("deliver task sub add err:", err) model.NewGoodsOrderQuerySet(model.DB).IDEq(goodsOrder.ID).GetUpdater().
SetState(model.GoodsOrderStateReceived).Update()
var couponInfo model.Coupon
err = model.NewCouponQuerySet(model.DB).ActivityIdEq(model.NewMachineActivityId).One(&couponInfo)
if err != nil {
logger.Error("coupons err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
couponCode, err := utils.GenerateRandomNumber19()
if err != nil {
logger.Error("GenerateRandomNumber19err:", err)
}
userCoupon := &model.UserCoupon{
Uid: goodsOrder.Uid,
CouponId: couponInfo.ID,
CouponType: couponInfo.CouponType,
ActivityType: couponInfo.ActivityType,
ActivityId: couponInfo.ActivityId,
Value: uint32(fundRecord.Amount),
State: 1,
ActiveStart: time.Now(),
ActiveEnd: time.Now().AddDate(0, 0, 180),
UseTime: time.Time{},
MemberLevel: couponInfo.MemberLevel,
Approach: 0,
PromotionalSales: 0,
RedeemCode: "",
CategoryNumber: couponInfo.CategoryNumber,
CommodityNumber: couponInfo.CommodityNumber,
Code: couponCode,
}
err = model.DB.Create(userCoupon).Error
if err != nil {
logger.Error("user coupon err:", err)
}
} else {
err = model.UserVmUpdate(goodsOrder.Uid, int(goodsOrder.Vm)*-1, model.VmEventBuyGoods, "购买商品积分抵扣")
if err != nil {
logger.Error("err:", err)
}
sub := model.DeliverTaskSub{
Uid: uint32(goodsOrder.Uid),
UserAddressId: uint32(goodsOrder.AddressId),
OrderType: 2,
OrderId: goodsOrder.OrderId,
StoreId: 13,
}
err = sub.Add()
if err != nil {
logger.Error("deliver task sub add err:", err)
}
} }
fundRecord.Uid = uint32(goodsOrder.Uid) fundRecord.Uid = uint32(goodsOrder.Uid)
fundRecord.FundType = model.FundTypeBuyGoods fundRecord.FundType = model.FundTypeBuyGoods
fundRecord.Remark = "商城购买" fundRecord.Remark = "商城购买"

View File

@ -142,16 +142,25 @@ func GetCombinedCouponCode(goods *model.Goods, attribute *model.GoodsAttribute)
return uint32(result), nil return uint32(result), nil
} }
type MallOrderCreateReq struct {
GoodsId uint32 `json:"goods_id" binding:"required"` // 商品id
GoodsAttributeId uint32 `json:"goods_attribute_id" binding:"required"` // 规格id
GoodsAttributeComboId uint32 `json:"goods_attribute_combo_id" binding:"required"` // 套餐id
Quantity uint32 `json:"quantity" binding:"required"` // 购买数量
AddressId uint32 `json:"address_id"` // 收货地址
DeliveryExtraInfo string `json:"delivery_extra_info"` // 收货备注
CouponCode string `json:"coupon_code"` // 优惠券券码
}
// MallOrderCreate 新建商城订单
// @Summary 新建商城订单
// @Tags 商城, V1.4.5
// @Produce json
// @Accept json
// @Success 200 {object} model.HomeCategoryListResp
// @Router /api/v1/mall/order/create [post]
func MallOrderCreate(c *gin.Context) { func MallOrderCreate(c *gin.Context) {
req := struct { req := MallOrderCreateReq{}
GoodsId uint32 `json:"goods_id" binding:"required"` // 商品id
GoodsAttributeId uint32 `json:"goods_attribute_id" binding:"required"` // 规格id
GoodsAttributeComboId uint32 `json:"goods_attribute_combo_id" binding:"required"` // 套餐id
Quantity uint32 `json:"quantity" binding:"required"` // 购买数量
//PayType uint32 `json:"pay_type" binding:"required"` // 支付方式
AddressId uint32 `json:"address_id"` // 收货地址
DeliveryExtraInfo string `json:"delivery_extra_info"` // 收货备注
}{}
if err := c.ShouldBindJSON(&req); err != nil { if err := c.ShouldBindJSON(&req); err != nil {
logger.Error(err) logger.Error(err)
RespJson(c, status.BadRequest, nil) RespJson(c, status.BadRequest, nil)
@ -194,7 +203,6 @@ func MallOrderCreate(c *gin.Context) {
return return
} }
// 库存不足 // 库存不足
//if goods.Stock < req.Quantity {
if attribute.Stock < req.Quantity { if attribute.Stock < req.Quantity {
logger.Error("err:", err) logger.Error("err:", err)
RespJson(c, status.OrderStockOut, nil) RespJson(c, status.OrderStockOut, nil)
@ -212,13 +220,32 @@ func MallOrderCreate(c *gin.Context) {
} }
} }
//// 计算总金额 // 查找用户优惠券,判断是否可用
//amount := uint32(0) var userCoupon model.UserCoupon
//if req.PayType == model.PayTypeRm { var coupon model.Coupon
// amount = req.Quantity * goods.PriceRm if req.CouponCode != "" {
//} else if req.PayType == model.PayTypeVm { err = model.NewUserCouponQuerySet(model.DB).CodeEq(req.CouponCode).One(&userCoupon)
// amount = req.Quantity * goods.PriceVm if err != nil {
//} log.Error().Msgf("query userCoupon err:%#v, code is:", err, req.CouponCode)
} else {
switch userCoupon.State {
case 2: // 已使用
log.Error().Msgf("优惠券已使用, code is:", req.CouponCode)
RespJson(c, status.InternalServerError, nil)
case 3: // 已过期
log.Error().Msgf("优惠券已过期, code is:", req.CouponCode)
RespJson(c, status.InternalServerError, nil)
}
if userCoupon.ActivityId != model.NewMachineActivityId {
log.Error().Msgf("优惠券类型与商品不匹配, code is:", req.CouponCode)
RespJson(c, status.InternalServerError, nil)
}
}
model.NewCouponQuerySet(model.DB).ActivityIdEq(userCoupon.ActivityId).One(&coupon)
}
// 读取折扣(是否有会员折扣)
discount, err := goods.GetUserDiscount(user) discount, err := goods.GetUserDiscount(user)
if err != nil { if err != nil {
log.Error().Msgf("combo err:%#v", err) log.Error().Msgf("combo err:%#v", err)
@ -232,26 +259,34 @@ func MallOrderCreate(c *gin.Context) {
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
return return
} }
// 计算总金额
totalVm := combo.PriceVm * req.Quantity totalVm := combo.PriceVm * req.Quantity
totalRm := (combo.PriceRm*req.Quantity*discount + 5) / model.Rmb
if combo.PriceVm > 0 && user.UserVm.Vm < totalVm { if combo.PriceVm > 0 && user.UserVm.Vm < totalVm {
log.Error().Msgf("vm not enough") log.Error().Msgf("vm not enough")
RespJson(c, status.UserVmNotEnough, nil) RespJson(c, status.UserVmNotEnough, nil)
return return
} }
totalRm := (combo.PriceRm*req.Quantity*discount + 5) / model.Rmb
couponDiscount := userCoupon.Value
if totalRm <= couponDiscount {
log.Error().Msgf("coupon value[%d] is err, code is:", couponDiscount, req.CouponCode)
RespJson(c, status.InternalServerError, nil)
return
}
// 开启事务 // 开启事务
tx := model.TransactionBegin() tx := model.TransactionBegin()
// 订单创建逻辑 // 订单创建逻辑
order := model.GoodsOrder{ order := model.GoodsOrder{
OrderId: model.CreateGoodsOrderId(), OrderId: model.CreateGoodsOrderId(),
SerialNo: model.CreateGoodsOrderSerialNo(), SerialNo: model.CreateGoodsOrderSerialNo(),
Uid: uc.Uid, Uid: uc.Uid,
GoodsId: req.GoodsId, GoodsId: req.GoodsId,
Rm: totalRm, Rm: totalRm - couponDiscount,
Vm: totalVm, Vm: totalVm,
Quantity: req.Quantity, Quantity: req.Quantity,
//PayType: req.PayType,
PayStatus: model.PayStatusInit, PayStatus: model.PayStatusInit,
AddressId: req.AddressId, AddressId: req.AddressId,
DeliveryExtraInfo: req.DeliveryExtraInfo, DeliveryExtraInfo: req.DeliveryExtraInfo,
@ -261,35 +296,12 @@ func MallOrderCreate(c *gin.Context) {
GoodsAttributeComboId: req.GoodsAttributeComboId, GoodsAttributeComboId: req.GoodsAttributeComboId,
Discount: discount, Discount: discount,
State: model.GoodsOrderStateUnPay, State: model.GoodsOrderStateUnPay,
CouponDiscount: userCoupon.Value,
CouponCode: userCoupon.Code,
CouponName: coupon.Name,
} }
// 减少库存 // 如果商品人民币价格为0则是积分兑换
// 确认下是在支付后减少,还是下单后
//if req.PayType == model.PayTypeVm {
//var userVm model.UserVm
//err = model.NewUserVmQuerySet(model.DB).UidEq(uc.Uid).One(&userVm)
//if err != nil {
// tx.Rollback()
// logger.Error("err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
//if userVm.Vm < amount {
// tx.Rollback()
// logger.Error("err:", err)
// RespJson(c, status.UserVmNotEnough, nil)
// return
//}
//err := model.OrderDeductionUserVm(uc.Uid, int(userVm.Vm), int(amount)*-1, tx)
//if err != nil {
// tx.Rollback()
// logger.Error("err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
//}
//if goods.DeliveryFee == 0 {
if combo.PriceRm == 0 { if combo.PriceRm == 0 {
order.PayTime = time.Now() order.PayTime = time.Now()
order.PayStatus = model.PayStatusOK order.PayStatus = model.PayStatusOK
@ -423,26 +435,13 @@ func MallOrderCreate(c *gin.Context) {
return return
} }
//var user model.User
//err = model.NewUserQuerySet(model.DB).UidEq(uint32(order.Uid)).One(&user)
//if err != nil {
// logger.Error("Order err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
configInfo, err := model.PayConfigInfo() configInfo, err := model.PayConfigInfo()
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
return return
} }
//webPay, err := wxpay.WebPay(order.SerialNo, order.Rm, user.WxOpenID, "N",
// wxpay.WxPayBuyGoods, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: order.SerialNo, OrderId: order.OrderId, OrderType: 6, Attach: wxpay.WxPayBuyGoods}.Insert() err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: order.SerialNo, OrderId: order.OrderId, OrderType: 6, Attach: wxpay.WxPayBuyGoods}.Insert()
if err != nil { if err != nil {
logger.Error(errors.New("WebPay err")) logger.Error(errors.New("WebPay err"))
@ -464,7 +463,7 @@ func MallOrderCreate(c *gin.Context) {
} }
RespOK(c, ret) RespOK(c, ret)
//RespOK(c, order)
return return
} }

View File

@ -1981,6 +1981,142 @@ func (qs CouponQuerySet) All(ret *[]Coupon) error {
return qs.db.Find(ret).Error return qs.db.Find(ret).Error
} }
// CategoryNumberEq is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CategoryNumberEq(categoryNumber string) CouponQuerySet {
return qs.w(qs.db.Where("category_number = ?", categoryNumber))
}
// CategoryNumberGt is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CategoryNumberGt(categoryNumber string) CouponQuerySet {
return qs.w(qs.db.Where("category_number > ?", categoryNumber))
}
// CategoryNumberGte is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CategoryNumberGte(categoryNumber string) CouponQuerySet {
return qs.w(qs.db.Where("category_number >= ?", categoryNumber))
}
// CategoryNumberIn is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CategoryNumberIn(categoryNumber ...string) CouponQuerySet {
if len(categoryNumber) == 0 {
qs.db.AddError(errors.New("must at least pass one categoryNumber in CategoryNumberIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("category_number IN (?)", categoryNumber))
}
// CategoryNumberLike is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CategoryNumberLike(categoryNumber string) CouponQuerySet {
return qs.w(qs.db.Where("category_number LIKE ?", categoryNumber))
}
// CategoryNumberLt is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CategoryNumberLt(categoryNumber string) CouponQuerySet {
return qs.w(qs.db.Where("category_number < ?", categoryNumber))
}
// CategoryNumberLte is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CategoryNumberLte(categoryNumber string) CouponQuerySet {
return qs.w(qs.db.Where("category_number <= ?", categoryNumber))
}
// CategoryNumberNe is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CategoryNumberNe(categoryNumber string) CouponQuerySet {
return qs.w(qs.db.Where("category_number != ?", categoryNumber))
}
// CategoryNumberNotIn is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CategoryNumberNotIn(categoryNumber ...string) CouponQuerySet {
if len(categoryNumber) == 0 {
qs.db.AddError(errors.New("must at least pass one categoryNumber in CategoryNumberNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("category_number NOT IN (?)", categoryNumber))
}
// CategoryNumberNotlike is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CategoryNumberNotlike(categoryNumber string) CouponQuerySet {
return qs.w(qs.db.Where("category_number NOT LIKE ?", categoryNumber))
}
// CommodityNumberEq is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CommodityNumberEq(commodityNumber string) CouponQuerySet {
return qs.w(qs.db.Where("commodity_number = ?", commodityNumber))
}
// CommodityNumberGt is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CommodityNumberGt(commodityNumber string) CouponQuerySet {
return qs.w(qs.db.Where("commodity_number > ?", commodityNumber))
}
// CommodityNumberGte is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CommodityNumberGte(commodityNumber string) CouponQuerySet {
return qs.w(qs.db.Where("commodity_number >= ?", commodityNumber))
}
// CommodityNumberIn is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CommodityNumberIn(commodityNumber ...string) CouponQuerySet {
if len(commodityNumber) == 0 {
qs.db.AddError(errors.New("must at least pass one commodityNumber in CommodityNumberIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("commodity_number IN (?)", commodityNumber))
}
// CommodityNumberLike is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CommodityNumberLike(commodityNumber string) CouponQuerySet {
return qs.w(qs.db.Where("commodity_number LIKE ?", commodityNumber))
}
// CommodityNumberLt is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CommodityNumberLt(commodityNumber string) CouponQuerySet {
return qs.w(qs.db.Where("commodity_number < ?", commodityNumber))
}
// CommodityNumberLte is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CommodityNumberLte(commodityNumber string) CouponQuerySet {
return qs.w(qs.db.Where("commodity_number <= ?", commodityNumber))
}
// CommodityNumberNe is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CommodityNumberNe(commodityNumber string) CouponQuerySet {
return qs.w(qs.db.Where("commodity_number != ?", commodityNumber))
}
// CommodityNumberNotIn is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CommodityNumberNotIn(commodityNumber ...string) CouponQuerySet {
if len(commodityNumber) == 0 {
qs.db.AddError(errors.New("must at least pass one commodityNumber in CommodityNumberNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("commodity_number NOT IN (?)", commodityNumber))
}
// CommodityNumberNotlike is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) CommodityNumberNotlike(commodityNumber string) CouponQuerySet {
return qs.w(qs.db.Where("commodity_number NOT LIKE ?", commodityNumber))
}
// Count is an autogenerated method // Count is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs CouponQuerySet) Count() (int, error) { func (qs CouponQuerySet) Count() (int, error) {
@ -2463,6 +2599,18 @@ func (qs CouponQuerySet) OrderAscByActivityType() CouponQuerySet {
return qs.w(qs.db.Order("activity_type ASC")) return qs.w(qs.db.Order("activity_type ASC"))
} }
// OrderAscByCategoryNumber is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) OrderAscByCategoryNumber() CouponQuerySet {
return qs.w(qs.db.Order("category_number ASC"))
}
// OrderAscByCommodityNumber is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) OrderAscByCommodityNumber() CouponQuerySet {
return qs.w(qs.db.Order("commodity_number ASC"))
}
// OrderAscByCouponType is an autogenerated method // OrderAscByCouponType is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs CouponQuerySet) OrderAscByCouponType() CouponQuerySet { func (qs CouponQuerySet) OrderAscByCouponType() CouponQuerySet {
@ -2511,6 +2659,12 @@ func (qs CouponQuerySet) OrderAscByOutCount() CouponQuerySet {
return qs.w(qs.db.Order("out_count ASC")) return qs.w(qs.db.Order("out_count ASC"))
} }
// OrderAscByRule is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) OrderAscByRule() CouponQuerySet {
return qs.w(qs.db.Order("rule ASC"))
}
// OrderAscByUpdatedAt is an autogenerated method // OrderAscByUpdatedAt is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs CouponQuerySet) OrderAscByUpdatedAt() CouponQuerySet { func (qs CouponQuerySet) OrderAscByUpdatedAt() CouponQuerySet {
@ -2553,6 +2707,18 @@ func (qs CouponQuerySet) OrderDescByActivityType() CouponQuerySet {
return qs.w(qs.db.Order("activity_type DESC")) return qs.w(qs.db.Order("activity_type DESC"))
} }
// OrderDescByCategoryNumber is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) OrderDescByCategoryNumber() CouponQuerySet {
return qs.w(qs.db.Order("category_number DESC"))
}
// OrderDescByCommodityNumber is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) OrderDescByCommodityNumber() CouponQuerySet {
return qs.w(qs.db.Order("commodity_number DESC"))
}
// OrderDescByCouponType is an autogenerated method // OrderDescByCouponType is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs CouponQuerySet) OrderDescByCouponType() CouponQuerySet { func (qs CouponQuerySet) OrderDescByCouponType() CouponQuerySet {
@ -2601,6 +2767,12 @@ func (qs CouponQuerySet) OrderDescByOutCount() CouponQuerySet {
return qs.w(qs.db.Order("out_count DESC")) return qs.w(qs.db.Order("out_count DESC"))
} }
// OrderDescByRule is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) OrderDescByRule() CouponQuerySet {
return qs.w(qs.db.Order("rule DESC"))
}
// OrderDescByUpdatedAt is an autogenerated method // OrderDescByUpdatedAt is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs CouponQuerySet) OrderDescByUpdatedAt() CouponQuerySet { func (qs CouponQuerySet) OrderDescByUpdatedAt() CouponQuerySet {
@ -2675,6 +2847,74 @@ func (qs CouponQuerySet) OutCountNotIn(outCount ...uint32) CouponQuerySet {
return qs.w(qs.db.Where("out_count NOT IN (?)", outCount)) return qs.w(qs.db.Where("out_count NOT IN (?)", outCount))
} }
// RuleEq is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) RuleEq(rule string) CouponQuerySet {
return qs.w(qs.db.Where("rule = ?", rule))
}
// RuleGt is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) RuleGt(rule string) CouponQuerySet {
return qs.w(qs.db.Where("rule > ?", rule))
}
// RuleGte is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) RuleGte(rule string) CouponQuerySet {
return qs.w(qs.db.Where("rule >= ?", rule))
}
// RuleIn is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) RuleIn(rule ...string) CouponQuerySet {
if len(rule) == 0 {
qs.db.AddError(errors.New("must at least pass one rule in RuleIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("rule IN (?)", rule))
}
// RuleLike is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) RuleLike(rule string) CouponQuerySet {
return qs.w(qs.db.Where("rule LIKE ?", rule))
}
// RuleLt is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) RuleLt(rule string) CouponQuerySet {
return qs.w(qs.db.Where("rule < ?", rule))
}
// RuleLte is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) RuleLte(rule string) CouponQuerySet {
return qs.w(qs.db.Where("rule <= ?", rule))
}
// RuleNe is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) RuleNe(rule string) CouponQuerySet {
return qs.w(qs.db.Where("rule != ?", rule))
}
// RuleNotIn is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) RuleNotIn(rule ...string) CouponQuerySet {
if len(rule) == 0 {
qs.db.AddError(errors.New("must at least pass one rule in RuleNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("rule NOT IN (?)", rule))
}
// RuleNotlike is an autogenerated method
// nolint: dupl
func (qs CouponQuerySet) RuleNotlike(rule string) CouponQuerySet {
return qs.w(qs.db.Where("rule NOT LIKE ?", rule))
}
// UpdatedAtEq is an autogenerated method // UpdatedAtEq is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs CouponQuerySet) UpdatedAtEq(updatedAt time.Time) CouponQuerySet { func (qs CouponQuerySet) UpdatedAtEq(updatedAt time.Time) CouponQuerySet {
@ -2851,6 +3091,20 @@ func (u CouponUpdater) SetActivityType(activityType uint32) CouponUpdater {
return u return u
} }
// SetCategoryNumber is an autogenerated method
// nolint: dupl
func (u CouponUpdater) SetCategoryNumber(categoryNumber string) CouponUpdater {
u.fields[string(CouponDBSchema.CategoryNumber)] = categoryNumber
return u
}
// SetCommodityNumber is an autogenerated method
// nolint: dupl
func (u CouponUpdater) SetCommodityNumber(commodityNumber string) CouponUpdater {
u.fields[string(CouponDBSchema.CommodityNumber)] = commodityNumber
return u
}
// SetCouponType is an autogenerated method // SetCouponType is an autogenerated method
// nolint: dupl // nolint: dupl
func (u CouponUpdater) SetCouponType(couponType string) CouponUpdater { func (u CouponUpdater) SetCouponType(couponType string) CouponUpdater {
@ -2907,6 +3161,13 @@ func (u CouponUpdater) SetOutCount(outCount uint32) CouponUpdater {
return u return u
} }
// SetRule is an autogenerated method
// nolint: dupl
func (u CouponUpdater) SetRule(rule string) CouponUpdater {
u.fields[string(CouponDBSchema.Rule)] = rule
return u
}
// SetUpdatedAt is an autogenerated method // SetUpdatedAt is an autogenerated method
// nolint: dupl // nolint: dupl
func (u CouponUpdater) SetUpdatedAt(updatedAt time.Time) CouponUpdater { func (u CouponUpdater) SetUpdatedAt(updatedAt time.Time) CouponUpdater {
@ -2956,59 +3217,68 @@ func (f CouponDBSchemaField) String() string {
// CouponDBSchema stores db field names of Coupon // CouponDBSchema stores db field names of Coupon
var CouponDBSchema = struct { var CouponDBSchema = struct {
ID CouponDBSchemaField ID CouponDBSchemaField
CreatedAt CouponDBSchemaField CreatedAt CouponDBSchemaField
UpdatedAt CouponDBSchemaField UpdatedAt CouponDBSchemaField
DeletedAt CouponDBSchemaField DeletedAt CouponDBSchemaField
Name CouponDBSchemaField Name CouponDBSchemaField
Describe CouponDBSchemaField Describe CouponDBSchemaField
CouponType CouponDBSchemaField Rule CouponDBSchemaField
ActivityType CouponDBSchemaField CouponType CouponDBSchemaField
ActivityId CouponDBSchemaField ActivityType CouponDBSchemaField
Value CouponDBSchemaField ActivityId CouponDBSchemaField
OutCount CouponDBSchemaField Value CouponDBSchemaField
UsedCount CouponDBSchemaField OutCount CouponDBSchemaField
ActiveStart CouponDBSchemaField UsedCount CouponDBSchemaField
ActiveEnd CouponDBSchemaField ActiveStart CouponDBSchemaField
MemberLevel CouponDBSchemaField ActiveEnd CouponDBSchemaField
MemberLevel CouponDBSchemaField
CategoryNumber CouponDBSchemaField
CommodityNumber CouponDBSchemaField
}{ }{
ID: CouponDBSchemaField("id"), ID: CouponDBSchemaField("id"),
CreatedAt: CouponDBSchemaField("created_at"), CreatedAt: CouponDBSchemaField("created_at"),
UpdatedAt: CouponDBSchemaField("updated_at"), UpdatedAt: CouponDBSchemaField("updated_at"),
DeletedAt: CouponDBSchemaField("deleted_at"), DeletedAt: CouponDBSchemaField("deleted_at"),
Name: CouponDBSchemaField("name"), Name: CouponDBSchemaField("name"),
Describe: CouponDBSchemaField("describe"), Describe: CouponDBSchemaField("describe"),
CouponType: CouponDBSchemaField("coupon_type"), Rule: CouponDBSchemaField("rule"),
ActivityType: CouponDBSchemaField("activity_type"), CouponType: CouponDBSchemaField("coupon_type"),
ActivityId: CouponDBSchemaField("activity_id"), ActivityType: CouponDBSchemaField("activity_type"),
Value: CouponDBSchemaField("value"), ActivityId: CouponDBSchemaField("activity_id"),
OutCount: CouponDBSchemaField("out_count"), Value: CouponDBSchemaField("value"),
UsedCount: CouponDBSchemaField("used_count"), OutCount: CouponDBSchemaField("out_count"),
ActiveStart: CouponDBSchemaField("active_start"), UsedCount: CouponDBSchemaField("used_count"),
ActiveEnd: CouponDBSchemaField("active_end"), ActiveStart: CouponDBSchemaField("active_start"),
MemberLevel: CouponDBSchemaField("member_level"), ActiveEnd: CouponDBSchemaField("active_end"),
MemberLevel: CouponDBSchemaField("member_level"),
CategoryNumber: CouponDBSchemaField("category_number"),
CommodityNumber: CouponDBSchemaField("commodity_number"),
} }
// Update updates Coupon fields by primary key // Update updates Coupon fields by primary key
// nolint: dupl // nolint: dupl
func (o *Coupon) Update(db *gorm.DB, fields ...CouponDBSchemaField) error { func (o *Coupon) Update(db *gorm.DB, fields ...CouponDBSchemaField) error {
dbNameToFieldName := map[string]interface{}{ dbNameToFieldName := map[string]interface{}{
"id": o.ID, "id": o.ID,
"created_at": o.CreatedAt, "created_at": o.CreatedAt,
"updated_at": o.UpdatedAt, "updated_at": o.UpdatedAt,
"deleted_at": o.DeletedAt, "deleted_at": o.DeletedAt,
"name": o.Name, "name": o.Name,
"describe": o.Describe, "describe": o.Describe,
"coupon_type": o.CouponType, "rule": o.Rule,
"activity_type": o.ActivityType, "coupon_type": o.CouponType,
"activity_id": o.ActivityId, "activity_type": o.ActivityType,
"value": o.Value, "activity_id": o.ActivityId,
"out_count": o.OutCount, "value": o.Value,
"used_count": o.UsedCount, "out_count": o.OutCount,
"active_start": o.ActiveStart, "used_count": o.UsedCount,
"active_end": o.ActiveEnd, "active_start": o.ActiveStart,
"member_level": o.MemberLevel, "active_end": o.ActiveEnd,
"member_level": o.MemberLevel,
"category_number": o.CategoryNumber,
"commodity_number": o.CommodityNumber,
} }
u := map[string]interface{}{} u := map[string]interface{}{}
for _, f := range fields { for _, f := range fields {
@ -3329,6 +3599,210 @@ func (qs UserCouponQuerySet) ApproachNotIn(approach ...uint32) UserCouponQuerySe
return qs.w(qs.db.Where("approach NOT IN (?)", approach)) return qs.w(qs.db.Where("approach NOT IN (?)", approach))
} }
// CategoryNumberEq is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CategoryNumberEq(categoryNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("category_number = ?", categoryNumber))
}
// CategoryNumberGt is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CategoryNumberGt(categoryNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("category_number > ?", categoryNumber))
}
// CategoryNumberGte is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CategoryNumberGte(categoryNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("category_number >= ?", categoryNumber))
}
// CategoryNumberIn is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CategoryNumberIn(categoryNumber ...string) UserCouponQuerySet {
if len(categoryNumber) == 0 {
qs.db.AddError(errors.New("must at least pass one categoryNumber in CategoryNumberIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("category_number IN (?)", categoryNumber))
}
// CategoryNumberLike is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CategoryNumberLike(categoryNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("category_number LIKE ?", categoryNumber))
}
// CategoryNumberLt is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CategoryNumberLt(categoryNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("category_number < ?", categoryNumber))
}
// CategoryNumberLte is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CategoryNumberLte(categoryNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("category_number <= ?", categoryNumber))
}
// CategoryNumberNe is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CategoryNumberNe(categoryNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("category_number != ?", categoryNumber))
}
// CategoryNumberNotIn is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CategoryNumberNotIn(categoryNumber ...string) UserCouponQuerySet {
if len(categoryNumber) == 0 {
qs.db.AddError(errors.New("must at least pass one categoryNumber in CategoryNumberNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("category_number NOT IN (?)", categoryNumber))
}
// CategoryNumberNotlike is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CategoryNumberNotlike(categoryNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("category_number NOT LIKE ?", categoryNumber))
}
// CodeEq is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CodeEq(code string) UserCouponQuerySet {
return qs.w(qs.db.Where("code = ?", code))
}
// CodeGt is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CodeGt(code string) UserCouponQuerySet {
return qs.w(qs.db.Where("code > ?", code))
}
// CodeGte is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CodeGte(code string) UserCouponQuerySet {
return qs.w(qs.db.Where("code >= ?", code))
}
// CodeIn is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CodeIn(code ...string) UserCouponQuerySet {
if len(code) == 0 {
qs.db.AddError(errors.New("must at least pass one code in CodeIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("code IN (?)", code))
}
// CodeLike is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CodeLike(code string) UserCouponQuerySet {
return qs.w(qs.db.Where("code LIKE ?", code))
}
// CodeLt is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CodeLt(code string) UserCouponQuerySet {
return qs.w(qs.db.Where("code < ?", code))
}
// CodeLte is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CodeLte(code string) UserCouponQuerySet {
return qs.w(qs.db.Where("code <= ?", code))
}
// CodeNe is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CodeNe(code string) UserCouponQuerySet {
return qs.w(qs.db.Where("code != ?", code))
}
// CodeNotIn is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CodeNotIn(code ...string) UserCouponQuerySet {
if len(code) == 0 {
qs.db.AddError(errors.New("must at least pass one code in CodeNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("code NOT IN (?)", code))
}
// CodeNotlike is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CodeNotlike(code string) UserCouponQuerySet {
return qs.w(qs.db.Where("code NOT LIKE ?", code))
}
// CommodityNumberEq is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CommodityNumberEq(commodityNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("commodity_number = ?", commodityNumber))
}
// CommodityNumberGt is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CommodityNumberGt(commodityNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("commodity_number > ?", commodityNumber))
}
// CommodityNumberGte is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CommodityNumberGte(commodityNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("commodity_number >= ?", commodityNumber))
}
// CommodityNumberIn is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CommodityNumberIn(commodityNumber ...string) UserCouponQuerySet {
if len(commodityNumber) == 0 {
qs.db.AddError(errors.New("must at least pass one commodityNumber in CommodityNumberIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("commodity_number IN (?)", commodityNumber))
}
// CommodityNumberLike is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CommodityNumberLike(commodityNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("commodity_number LIKE ?", commodityNumber))
}
// CommodityNumberLt is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CommodityNumberLt(commodityNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("commodity_number < ?", commodityNumber))
}
// CommodityNumberLte is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CommodityNumberLte(commodityNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("commodity_number <= ?", commodityNumber))
}
// CommodityNumberNe is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CommodityNumberNe(commodityNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("commodity_number != ?", commodityNumber))
}
// CommodityNumberNotIn is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CommodityNumberNotIn(commodityNumber ...string) UserCouponQuerySet {
if len(commodityNumber) == 0 {
qs.db.AddError(errors.New("must at least pass one commodityNumber in CommodityNumberNotIn"))
return qs.w(qs.db)
}
return qs.w(qs.db.Where("commodity_number NOT IN (?)", commodityNumber))
}
// CommodityNumberNotlike is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) CommodityNumberNotlike(commodityNumber string) UserCouponQuerySet {
return qs.w(qs.db.Where("commodity_number NOT LIKE ?", commodityNumber))
}
// Count is an autogenerated method // Count is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs UserCouponQuerySet) Count() (int, error) { func (qs UserCouponQuerySet) Count() (int, error) {
@ -3737,6 +4211,24 @@ func (qs UserCouponQuerySet) OrderAscByApproach() UserCouponQuerySet {
return qs.w(qs.db.Order("approach ASC")) return qs.w(qs.db.Order("approach ASC"))
} }
// OrderAscByCategoryNumber is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) OrderAscByCategoryNumber() UserCouponQuerySet {
return qs.w(qs.db.Order("category_number ASC"))
}
// OrderAscByCode is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) OrderAscByCode() UserCouponQuerySet {
return qs.w(qs.db.Order("code ASC"))
}
// OrderAscByCommodityNumber is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) OrderAscByCommodityNumber() UserCouponQuerySet {
return qs.w(qs.db.Order("commodity_number ASC"))
}
// OrderAscByCouponId is an autogenerated method // OrderAscByCouponId is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs UserCouponQuerySet) OrderAscByCouponId() UserCouponQuerySet { func (qs UserCouponQuerySet) OrderAscByCouponId() UserCouponQuerySet {
@ -3845,6 +4337,24 @@ func (qs UserCouponQuerySet) OrderDescByApproach() UserCouponQuerySet {
return qs.w(qs.db.Order("approach DESC")) return qs.w(qs.db.Order("approach DESC"))
} }
// OrderDescByCategoryNumber is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) OrderDescByCategoryNumber() UserCouponQuerySet {
return qs.w(qs.db.Order("category_number DESC"))
}
// OrderDescByCode is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) OrderDescByCode() UserCouponQuerySet {
return qs.w(qs.db.Order("code DESC"))
}
// OrderDescByCommodityNumber is an autogenerated method
// nolint: dupl
func (qs UserCouponQuerySet) OrderDescByCommodityNumber() UserCouponQuerySet {
return qs.w(qs.db.Order("commodity_number DESC"))
}
// OrderDescByCouponId is an autogenerated method // OrderDescByCouponId is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs UserCouponQuerySet) OrderDescByCouponId() UserCouponQuerySet { func (qs UserCouponQuerySet) OrderDescByCouponId() UserCouponQuerySet {
@ -4322,6 +4832,27 @@ func (u UserCouponUpdater) SetApproach(approach uint32) UserCouponUpdater {
return u return u
} }
// SetCategoryNumber is an autogenerated method
// nolint: dupl
func (u UserCouponUpdater) SetCategoryNumber(categoryNumber string) UserCouponUpdater {
u.fields[string(UserCouponDBSchema.CategoryNumber)] = categoryNumber
return u
}
// SetCode is an autogenerated method
// nolint: dupl
func (u UserCouponUpdater) SetCode(code string) UserCouponUpdater {
u.fields[string(UserCouponDBSchema.Code)] = code
return u
}
// SetCommodityNumber is an autogenerated method
// nolint: dupl
func (u UserCouponUpdater) SetCommodityNumber(commodityNumber string) UserCouponUpdater {
u.fields[string(UserCouponDBSchema.CommodityNumber)] = commodityNumber
return u
}
// SetCouponId is an autogenerated method // SetCouponId is an autogenerated method
// nolint: dupl // nolint: dupl
func (u UserCouponUpdater) SetCouponId(couponId uint32) UserCouponUpdater { func (u UserCouponUpdater) SetCouponId(couponId uint32) UserCouponUpdater {
@ -4459,6 +4990,9 @@ var UserCouponDBSchema = struct {
Approach UserCouponDBSchemaField Approach UserCouponDBSchemaField
PromotionalSales UserCouponDBSchemaField PromotionalSales UserCouponDBSchemaField
RedeemCode UserCouponDBSchemaField RedeemCode UserCouponDBSchemaField
CategoryNumber UserCouponDBSchemaField
CommodityNumber UserCouponDBSchemaField
Code UserCouponDBSchemaField
}{ }{
ID: UserCouponDBSchemaField("id"), ID: UserCouponDBSchemaField("id"),
@ -4479,6 +5013,9 @@ var UserCouponDBSchema = struct {
Approach: UserCouponDBSchemaField("approach"), Approach: UserCouponDBSchemaField("approach"),
PromotionalSales: UserCouponDBSchemaField("promotional_sales"), PromotionalSales: UserCouponDBSchemaField("promotional_sales"),
RedeemCode: UserCouponDBSchemaField("redeem_code"), RedeemCode: UserCouponDBSchemaField("redeem_code"),
CategoryNumber: UserCouponDBSchemaField("category_number"),
CommodityNumber: UserCouponDBSchemaField("commodity_number"),
Code: UserCouponDBSchemaField("code"),
} }
// Update updates UserCoupon fields by primary key // Update updates UserCoupon fields by primary key
@ -4503,6 +5040,9 @@ func (o *UserCoupon) Update(db *gorm.DB, fields ...UserCouponDBSchemaField) erro
"approach": o.Approach, "approach": o.Approach,
"promotional_sales": o.PromotionalSales, "promotional_sales": o.PromotionalSales,
"redeem_code": o.RedeemCode, "redeem_code": o.RedeemCode,
"category_number": o.CategoryNumber,
"commodity_number": o.CommodityNumber,
"code": o.Code,
} }
u := map[string]interface{}{} u := map[string]interface{}{}
for _, f := range fields { for _, f := range fields {

View File

@ -9,7 +9,7 @@ const (
CommonSaleActivityId = 5 // 零售销售(普通会员) CommonSaleActivityId = 5 // 零售销售(普通会员)
PrivilegeMemberActivityId = 6 // 零售销售(尊享会员 PrivilegeMemberActivityId = 6 // 零售销售(尊享会员
VmActivityId = 9 // 积分兑换优惠券 VmActivityId = 9 // 积分兑换优惠券
NewMachineActivityId = 10 // 主机预订券
) )
// gen:qs // gen:qs
@ -37,8 +37,8 @@ type Coupon struct {
IsDraw bool `json:"is_draw" gorm:"-"` // IsDraw bool `json:"is_draw" gorm:"-"` //
} }
// gen:qs
// 用户优惠券 // 用户优惠券
// gen:qs
type UserCoupon struct { type UserCoupon struct {
Model Model

View File

@ -318,40 +318,39 @@ const (
type GoodsOrder struct { type GoodsOrder struct {
Model Model
OrderId uint32 `json:"order_id" gorm:"unique_index"` // 订单 id OrderId uint32 `json:"order_id" gorm:"unique_index"` // 订单 id
SerialNo string `json:"serial_no" gorm:"unique_index"` // 序列号 SerialNo string `json:"serial_no" gorm:"unique_index"` // 序列号
Uid uint32 `json:"uid" gorm:"index"` //
Uid uint32 `json:"uid" gorm:"index"` GoodsId uint32 `json:"goods_id" gorm:"index"` // 商品id
GoodsId uint32 `json:"goods_id" gorm:"index"` // 商品id Amount uint32 `json:"amount"` // 订单金额
Amount uint32 `json:"amount"` // 订单金额 Quantity uint32 `json:"quantity"` // 购买商品的数量
Quantity uint32 `json:"quantity"` // 购买商品的数量 PayType uint32 `json:"pay_type"` // 支付方式 1-rm 2-vm
PayTime time.Time `json:"pay_time"` // 支付时间
PayType uint32 `json:"pay_type"` // 支付方式 1-rm 2-vm PayStatus uint32 `json:"pay_status"` // 支付状态 1-待支付 2-已支付 3-失败
PayTime time.Time `json:"pay_time"` // 支付时间 State string `json:"state"` //
PayStatus uint32 `json:"pay_status"` // 支付状态 1-待支付 2-已支付 3-失败 AddressId uint32 `json:"address_id"` // 收货地址
State string `json:"state"` // DeliveryExtraInfo string `json:"delivery_extra_info"` // 物流备注
AddressId uint32 `json:"address_id"` // 收货地址 DeliveryFee uint32 `json:"delivery_fee"` // 物流费用
DeliveryExtraInfo string `json:"delivery_extra_info"` // 物流备注 DeliveryTrackingNo string `json:"delivery_tracking_no"` // 物流单号
DeliveryFee uint32 `json:"delivery_fee"` // 物流费用 DeliveryCompany string `json:"delivery_company"` // 物流公司
DeliveryTrackingNo string `json:"delivery_tracking_no"` // 物流单号 DeliveryCompanyNo string `json:"delivery_company_no"` // 物流公司编号
DeliveryCompany string `json:"delivery_company"` // 物流公司 DeliveryStatus uint32 `json:"delivery_status"` // 物流状态 1-待发货 2-已发货 3-已收货
DeliveryCompanyNo string `json:"delivery_company_no"` // 物流公司编号 Rm uint32 `json:"rm"` //
DeliveryStatus uint32 `json:"delivery_status"` // 物流状态 1-待发货 2-已发货 3-已收货 Vm uint32 `json:"vm"` // 积分
Rm uint32 `json:"rm"` // Discount uint32 `json:"discount"` // 折扣
Vm uint32 `json:"vm"` // 积分 GoodsAttributeId uint32 `json:"goods_attribute_id"` //
Discount uint32 `json:"discount"` // 折扣 GoodsAttributeComboId uint32 `json:"goods_attribute_combo_id"` //
GoodsAttributeId uint32 `json:"goods_attribute_id"` // DeliverStoreId uint32 `json:"deliver_store_id"` // 发货门店
GoodsAttributeComboId uint32 `json:"goods_attribute_combo_id"` // DeliverTime time.Time `json:"deliver_time"` // 发货时间
RefundExpressCompany string `json:"refund_express_company"` // 退货物流公司
DeliverStoreId uint32 `json:"deliver_store_id"` // 发货门店 RefundExpressCompanyNo string `json:"refund_express_company_no"` // 退货物流公司编号
DeliverTime time.Time `json:"deliver_time"` // 发货时间 RefundExpressNo string `json:"refund_express_no"` // 退货物流单号
RefundExpressCompany string `json:"refund_express_company"` // 退货物流公司 RefundReason string `json:"refund_reason" gorm:"type:text;"` //
RefundExpressCompanyNo string `json:"refund_express_company_no"` // 退货物流公司编号 ReceivedTime time.Time `json:"received_time"` // 签收时间
RefundExpressNo string `json:"refund_express_no"` // 退货物流单号 VersionId uint64 `json:"version_id"` // 乐观锁
RefundReason string `json:"refund_reason" gorm:"type:text;"` CouponCode string `json:"coupon_code"` // 优惠券券码
ReceivedTime time.Time `json:"received_time"` // 签收时间 CouponName string `json:"coupon_name"` // 优惠券名称
CouponDiscount uint32 `json:"coupon_discount"` // 优惠券抵扣
VersionId uint64 `json:"version_id"` // 乐观锁
Goods *Goods `json:"goods" gorm:"-"` Goods *Goods `json:"goods" gorm:"-"`
UserAddress *UserAddress `json:"user_address" gorm:"-"` UserAddress *UserAddress `json:"user_address" gorm:"-"`