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

@ -538,6 +538,7 @@ func MemberRenewalUserCouponList(c *gin.Context) {
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,6 +2416,61 @@ func HmPushWXPayNotice(c *gin.Context) {
logger.Error("err:", err)
}
// 商品是否存在
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
}
// 如果订单使用了优惠券,则更新为已使用
if goodsOrder.CouponCode != "" {
model.NewUserCouponQuerySet(model.DB).CodeEq(goodsOrder.CouponCode).GetUpdater().SetState(2).Update()
}
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)
@ -2431,6 +2486,8 @@ func HmPushWXPayNotice(c *gin.Context) {
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
}
func MallOrderCreate(c *gin.Context) {
req := struct {
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"` // 购买数量
//PayType uint32 `json:"pay_type" 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 := 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,14 +259,23 @@ 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()
// 订单创建逻辑
@ -248,10 +284,9 @@ func MallOrderCreate(c *gin.Context) {
SerialNo: model.CreateGoodsOrderSerialNo(),
Uid: uc.Uid,
GoodsId: req.GoodsId,
Rm: totalRm,
Rm: totalRm - couponDiscount,
Vm: totalVm,
Quantity: req.Quantity,
//PayType: req.PayType,
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 {
@ -2962,6 +3223,7 @@ var CouponDBSchema = struct {
DeletedAt CouponDBSchemaField
Name CouponDBSchemaField
Describe CouponDBSchemaField
Rule CouponDBSchemaField
CouponType CouponDBSchemaField
ActivityType CouponDBSchemaField
ActivityId CouponDBSchemaField
@ -2971,6 +3233,8 @@ var CouponDBSchema = struct {
ActiveStart CouponDBSchemaField
ActiveEnd CouponDBSchemaField
MemberLevel CouponDBSchemaField
CategoryNumber CouponDBSchemaField
CommodityNumber CouponDBSchemaField
}{
ID: CouponDBSchemaField("id"),
@ -2979,6 +3243,7 @@ var CouponDBSchema = struct {
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"),
@ -2988,6 +3253,8 @@ var CouponDBSchema = struct {
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
@ -3000,6 +3267,7 @@ func (o *Coupon) Update(db *gorm.DB, fields ...CouponDBSchemaField) error {
"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,
@ -3009,6 +3277,8 @@ func (o *Coupon) Update(db *gorm.DB, fields ...CouponDBSchemaField) error {
"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

@ -320,12 +320,10 @@ type GoodsOrder struct {
OrderId uint32 `json:"order_id" gorm:"unique_index"` // 订单 id
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
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-失败
@ -342,16 +340,17 @@ type GoodsOrder struct {
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;"`
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:"-"`