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

View File

@ -2416,21 +2416,78 @@ func HmPushWXPayNotice(c *gin.Context) {
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 {
logger.Error("err:", err)
RespJson(c, status.BadRequest, nil)
return
}
sub := model.DeliverTaskSub{
Uid: uint32(goodsOrder.Uid),
UserAddressId: uint32(goodsOrder.AddressId),
OrderType: 2,
OrderId: goodsOrder.OrderId,
StoreId: 13,
// 如果订单使用了优惠券,则更新为已使用
if goodsOrder.CouponCode != "" {
model.NewUserCouponQuerySet(model.DB).CodeEq(goodsOrder.CouponCode).GetUpdater().SetState(2).Update()
}
err = sub.Add()
if err != nil {
logger.Error("deliver task sub add err:", err)
if strings.Contains(goods.Name, "预售") { // 主机预售券,需要发放优惠券;默认为已收货
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.FundType = model.FundTypeBuyGoods
fundRecord.Remark = "商城购买"

View File

@ -142,16 +142,25 @@ func GetCombinedCouponCode(goods *model.Goods, attribute *model.GoodsAttribute)
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) {
req := 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"` // 购买数量
//PayType uint32 `json:"pay_type" binding:"required"` // 支付方式
AddressId uint32 `json:"address_id"` // 收货地址
DeliveryExtraInfo string `json:"delivery_extra_info"` // 收货备注
}{}
req := MallOrderCreateReq{}
if err := c.ShouldBindJSON(&req); err != nil {
logger.Error(err)
RespJson(c, status.BadRequest, nil)
@ -194,7 +203,6 @@ func MallOrderCreate(c *gin.Context) {
return
}
// 库存不足
//if goods.Stock < req.Quantity {
if attribute.Stock < req.Quantity {
logger.Error("err:", err)
RespJson(c, status.OrderStockOut, nil)
@ -212,13 +220,32 @@ func MallOrderCreate(c *gin.Context) {
}
}
//// 计算总金额
//amount := uint32(0)
//if req.PayType == model.PayTypeRm {
// amount = req.Quantity * goods.PriceRm
//} else if req.PayType == model.PayTypeVm {
// amount = req.Quantity * goods.PriceVm
//}
// 查找用户优惠券,判断是否可用
var userCoupon model.UserCoupon
var coupon model.Coupon
if req.CouponCode != "" {
err = model.NewUserCouponQuerySet(model.DB).CodeEq(req.CouponCode).One(&userCoupon)
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)
if err != nil {
log.Error().Msgf("combo err:%#v", err)
@ -232,26 +259,34 @@ func MallOrderCreate(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
// 计算总金额
totalVm := combo.PriceVm * req.Quantity
totalRm := (combo.PriceRm*req.Quantity*discount + 5) / model.Rmb
if combo.PriceVm > 0 && user.UserVm.Vm < totalVm {
log.Error().Msgf("vm not enough")
RespJson(c, status.UserVmNotEnough, nil)
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()
// 订单创建逻辑
order := model.GoodsOrder{
OrderId: model.CreateGoodsOrderId(),
SerialNo: model.CreateGoodsOrderSerialNo(),
Uid: uc.Uid,
GoodsId: req.GoodsId,
Rm: totalRm,
Vm: totalVm,
Quantity: req.Quantity,
//PayType: req.PayType,
OrderId: model.CreateGoodsOrderId(),
SerialNo: model.CreateGoodsOrderSerialNo(),
Uid: uc.Uid,
GoodsId: req.GoodsId,
Rm: totalRm - couponDiscount,
Vm: totalVm,
Quantity: req.Quantity,
PayStatus: model.PayStatusInit,
AddressId: req.AddressId,
DeliveryExtraInfo: req.DeliveryExtraInfo,
@ -261,35 +296,12 @@ func MallOrderCreate(c *gin.Context) {
GoodsAttributeComboId: req.GoodsAttributeComboId,
Discount: discount,
State: model.GoodsOrderStateUnPay,
CouponDiscount: userCoupon.Value,
CouponCode: userCoupon.Code,
CouponName: coupon.Name,
}
// 减少库存
// 确认下是在支付后减少,还是下单后
//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 {
// 如果商品人民币价格为0则是积分兑换
if combo.PriceRm == 0 {
order.PayTime = time.Now()
order.PayStatus = model.PayStatusOK
@ -423,26 +435,13 @@ func MallOrderCreate(c *gin.Context) {
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()
if err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
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()
if err != nil {
logger.Error(errors.New("WebPay err"))
@ -464,7 +463,7 @@ func MallOrderCreate(c *gin.Context) {
}
RespOK(c, ret)
//RespOK(c, order)
return
}

View File

@ -1981,6 +1981,142 @@ func (qs CouponQuerySet) All(ret *[]Coupon) 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
// nolint: dupl
func (qs CouponQuerySet) Count() (int, error) {
@ -2463,6 +2599,18 @@ func (qs CouponQuerySet) OrderAscByActivityType() CouponQuerySet {
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
// nolint: dupl
func (qs CouponQuerySet) OrderAscByCouponType() CouponQuerySet {
@ -2511,6 +2659,12 @@ func (qs CouponQuerySet) OrderAscByOutCount() CouponQuerySet {
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
// nolint: dupl
func (qs CouponQuerySet) OrderAscByUpdatedAt() CouponQuerySet {
@ -2553,6 +2707,18 @@ func (qs CouponQuerySet) OrderDescByActivityType() CouponQuerySet {
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
// nolint: dupl
func (qs CouponQuerySet) OrderDescByCouponType() CouponQuerySet {
@ -2601,6 +2767,12 @@ func (qs CouponQuerySet) OrderDescByOutCount() CouponQuerySet {
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
// nolint: dupl
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))
}
// 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
// nolint: dupl
func (qs CouponQuerySet) UpdatedAtEq(updatedAt time.Time) CouponQuerySet {
@ -2851,6 +3091,20 @@ func (u CouponUpdater) SetActivityType(activityType uint32) CouponUpdater {
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
// nolint: dupl
func (u CouponUpdater) SetCouponType(couponType string) CouponUpdater {
@ -2907,6 +3161,13 @@ func (u CouponUpdater) SetOutCount(outCount uint32) CouponUpdater {
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
// nolint: dupl
func (u CouponUpdater) SetUpdatedAt(updatedAt time.Time) CouponUpdater {
@ -2956,59 +3217,68 @@ func (f CouponDBSchemaField) String() string {
// CouponDBSchema stores db field names of Coupon
var CouponDBSchema = struct {
ID CouponDBSchemaField
CreatedAt CouponDBSchemaField
UpdatedAt CouponDBSchemaField
DeletedAt CouponDBSchemaField
Name CouponDBSchemaField
Describe CouponDBSchemaField
CouponType CouponDBSchemaField
ActivityType CouponDBSchemaField
ActivityId CouponDBSchemaField
Value CouponDBSchemaField
OutCount CouponDBSchemaField
UsedCount CouponDBSchemaField
ActiveStart CouponDBSchemaField
ActiveEnd CouponDBSchemaField
MemberLevel CouponDBSchemaField
ID CouponDBSchemaField
CreatedAt CouponDBSchemaField
UpdatedAt CouponDBSchemaField
DeletedAt CouponDBSchemaField
Name CouponDBSchemaField
Describe CouponDBSchemaField
Rule CouponDBSchemaField
CouponType CouponDBSchemaField
ActivityType CouponDBSchemaField
ActivityId CouponDBSchemaField
Value CouponDBSchemaField
OutCount CouponDBSchemaField
UsedCount CouponDBSchemaField
ActiveStart CouponDBSchemaField
ActiveEnd CouponDBSchemaField
MemberLevel CouponDBSchemaField
CategoryNumber CouponDBSchemaField
CommodityNumber CouponDBSchemaField
}{
ID: CouponDBSchemaField("id"),
CreatedAt: CouponDBSchemaField("created_at"),
UpdatedAt: CouponDBSchemaField("updated_at"),
DeletedAt: CouponDBSchemaField("deleted_at"),
Name: CouponDBSchemaField("name"),
Describe: CouponDBSchemaField("describe"),
CouponType: CouponDBSchemaField("coupon_type"),
ActivityType: CouponDBSchemaField("activity_type"),
ActivityId: CouponDBSchemaField("activity_id"),
Value: CouponDBSchemaField("value"),
OutCount: CouponDBSchemaField("out_count"),
UsedCount: CouponDBSchemaField("used_count"),
ActiveStart: CouponDBSchemaField("active_start"),
ActiveEnd: CouponDBSchemaField("active_end"),
MemberLevel: CouponDBSchemaField("member_level"),
ID: CouponDBSchemaField("id"),
CreatedAt: CouponDBSchemaField("created_at"),
UpdatedAt: CouponDBSchemaField("updated_at"),
DeletedAt: CouponDBSchemaField("deleted_at"),
Name: CouponDBSchemaField("name"),
Describe: CouponDBSchemaField("describe"),
Rule: CouponDBSchemaField("rule"),
CouponType: CouponDBSchemaField("coupon_type"),
ActivityType: CouponDBSchemaField("activity_type"),
ActivityId: CouponDBSchemaField("activity_id"),
Value: CouponDBSchemaField("value"),
OutCount: CouponDBSchemaField("out_count"),
UsedCount: CouponDBSchemaField("used_count"),
ActiveStart: CouponDBSchemaField("active_start"),
ActiveEnd: CouponDBSchemaField("active_end"),
MemberLevel: CouponDBSchemaField("member_level"),
CategoryNumber: CouponDBSchemaField("category_number"),
CommodityNumber: CouponDBSchemaField("commodity_number"),
}
// Update updates Coupon fields by primary key
// nolint: dupl
func (o *Coupon) Update(db *gorm.DB, fields ...CouponDBSchemaField) error {
dbNameToFieldName := map[string]interface{}{
"id": o.ID,
"created_at": o.CreatedAt,
"updated_at": o.UpdatedAt,
"deleted_at": o.DeletedAt,
"name": o.Name,
"describe": o.Describe,
"coupon_type": o.CouponType,
"activity_type": o.ActivityType,
"activity_id": o.ActivityId,
"value": o.Value,
"out_count": o.OutCount,
"used_count": o.UsedCount,
"active_start": o.ActiveStart,
"active_end": o.ActiveEnd,
"member_level": o.MemberLevel,
"id": o.ID,
"created_at": o.CreatedAt,
"updated_at": o.UpdatedAt,
"deleted_at": o.DeletedAt,
"name": o.Name,
"describe": o.Describe,
"rule": o.Rule,
"coupon_type": o.CouponType,
"activity_type": o.ActivityType,
"activity_id": o.ActivityId,
"value": o.Value,
"out_count": o.OutCount,
"used_count": o.UsedCount,
"active_start": o.ActiveStart,
"active_end": o.ActiveEnd,
"member_level": o.MemberLevel,
"category_number": o.CategoryNumber,
"commodity_number": o.CommodityNumber,
}
u := map[string]interface{}{}
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))
}
// 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
// nolint: dupl
func (qs UserCouponQuerySet) Count() (int, error) {
@ -3737,6 +4211,24 @@ func (qs UserCouponQuerySet) OrderAscByApproach() UserCouponQuerySet {
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
// nolint: dupl
func (qs UserCouponQuerySet) OrderAscByCouponId() UserCouponQuerySet {
@ -3845,6 +4337,24 @@ func (qs UserCouponQuerySet) OrderDescByApproach() UserCouponQuerySet {
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
// nolint: dupl
func (qs UserCouponQuerySet) OrderDescByCouponId() UserCouponQuerySet {
@ -4322,6 +4832,27 @@ func (u UserCouponUpdater) SetApproach(approach uint32) UserCouponUpdater {
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
// nolint: dupl
func (u UserCouponUpdater) SetCouponId(couponId uint32) UserCouponUpdater {
@ -4459,6 +4990,9 @@ var UserCouponDBSchema = struct {
Approach UserCouponDBSchemaField
PromotionalSales UserCouponDBSchemaField
RedeemCode UserCouponDBSchemaField
CategoryNumber UserCouponDBSchemaField
CommodityNumber UserCouponDBSchemaField
Code UserCouponDBSchemaField
}{
ID: UserCouponDBSchemaField("id"),
@ -4479,6 +5013,9 @@ var UserCouponDBSchema = struct {
Approach: UserCouponDBSchemaField("approach"),
PromotionalSales: UserCouponDBSchemaField("promotional_sales"),
RedeemCode: UserCouponDBSchemaField("redeem_code"),
CategoryNumber: UserCouponDBSchemaField("category_number"),
CommodityNumber: UserCouponDBSchemaField("commodity_number"),
Code: UserCouponDBSchemaField("code"),
}
// Update updates UserCoupon fields by primary key
@ -4503,6 +5040,9 @@ func (o *UserCoupon) Update(db *gorm.DB, fields ...UserCouponDBSchemaField) erro
"approach": o.Approach,
"promotional_sales": o.PromotionalSales,
"redeem_code": o.RedeemCode,
"category_number": o.CategoryNumber,
"commodity_number": o.CommodityNumber,
"code": o.Code,
}
u := map[string]interface{}{}
for _, f := range fields {

View File

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

View File

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