This commit is contained in:
苏尹岚
2021-01-20 10:32:53 +08:00
parent b87c390946
commit d27aa2c7ef
2 changed files with 44 additions and 2 deletions

View File

@@ -42,6 +42,9 @@ const (
CouponStatusOverdue = -1 //已过期
CouponStatusNormal = 0 //正常
CouponStatusDeleted = -4 //被删了
CouponTypeDiscount = 1 //优惠券类型,总额满减
CouponTypeDelivery = 2 //运费优惠
)
const (
@@ -143,6 +146,7 @@ type GoodsOrder struct {
EarningType int `json:"earningType"` //订单结算方式2为扣点1为报价
OrderType int `json:"orderType"` //订单类型0为普通订单1为物料订单2为进货订单
OrderPayPercentage int `json:"orderPayPercentage"`
CouponIDs string `orm:"column(coupon_ids)" json:"couponIDs"` //优惠券IDs京西商城
// 以下只是用于传递数据
OriginalData string `orm:"-" json:"-"`

View File

@@ -611,7 +611,6 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
if distance := jxutils.Point2StoreDistance(deliveryAddress.Lng, deliveryAddress.Lat, storeDetail.Lng, storeDetail.Lat, storeDetail.DeliveryRangeType, storeDetail.DeliveryRange); distance == 0 {
return nil, nil, fmt.Errorf("当前送货地址不在门店%s的配送范围", storeDetail.Name)
}
//结算类型
if storeDetail.PayPercentage < 50 {
jxOrder.EarningType = model.EarningTypePoints
@@ -922,7 +921,6 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
if err == nil {
if jxOrder.OrderType == model.OrderTypeNormal {
outJxOrder.TotalPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice
// 判断用户是否是会员
var (
tuserID string
dicountCards []*model.DiscountCard
@@ -932,6 +930,46 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
} else {
tuserID = userID
}
// 1.先扣除优惠券
if len(couponIDs) > 0 {
if userCoupons, err := dao.GetUserCoupons(db, couponIDs, []string{tuserID}, nil, model.CouponStatusNormal); err == nil {
if len(userCoupons) != len(couponIDs) {
return nil, nil, fmt.Errorf("选择的优惠券状态不正常,请刷新后重试!")
}
for _, v := range userCoupons {
coupon := &model.Coupons{}
coupon.ID = int64(v.CouponID)
if err = dao.GetEntity(db, coupon); err == nil && coupon.Name != "" {
checkPrice := func(price int64) (rPrice int64, err error) {
priceInt := int(price)
if priceInt < coupon.UpperLimit {
return 0, fmt.Errorf("抱歉,该订单价格未达到此优惠券[%v]满减额度!", coupon.Name)
}
if priceInt <= coupon.Cut {
rPrice = 0
} else {
rPrice = int64(priceInt - coupon.Cut)
}
return rPrice, err
}
switch coupon.CouponType {
case model.CouponTypeDiscount:
outJxOrder.OrderPrice, err = checkPrice(outJxOrder.OrderPrice)
case model.CouponTypeDelivery:
outJxOrder.FreightPrice, err = checkPrice(outJxOrder.FreightPrice)
default:
return nil, nil, fmt.Errorf("暂不支持的优惠券类型![%v]", coupon.CouponType)
}
if err != nil {
return nil, nil, err
}
}
}
} else {
return nil, nil, err
}
}
// 2.判断用户是否是会员
userMembers, _ := dao.GetUserMember(db, tuserID, "", model.MemberTypeDiscountCard, model.YES)
if len(userMembers) > 0 {
if configList, err := dao.QueryConfigs(db, "会员折扣卡", model.ConfigTypeDiscountCard, ""); err == nil {