diff --git a/controller/activity.go b/controller/activity.go index 15ba369..b88ddc0 100644 --- a/controller/activity.go +++ b/controller/activity.go @@ -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) diff --git a/controller/game_card.go b/controller/game_card.go index a0b3c72..c563dc4 100644 --- a/controller/game_card.go +++ b/controller/game_card.go @@ -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 = "商城购买" diff --git a/controller/mall.go b/controller/mall.go index bb40a29..a99ee64 100644 --- a/controller/mall.go +++ b/controller/mall.go @@ -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 } diff --git a/model/autogenerated_coupon.go b/model/autogenerated_coupon.go index 6f421a5..d124ad2 100644 --- a/model/autogenerated_coupon.go +++ b/model/autogenerated_coupon.go @@ -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 { diff --git a/model/coupon.go b/model/coupon.go index abe5435..8b00df2 100644 --- a/model/coupon.go +++ b/model/coupon.go @@ -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 diff --git a/model/mall.go b/model/mall.go index 5f74822..9991f10 100644 --- a/model/mall.go +++ b/model/mall.go @@ -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:"-"`