diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index de51079ff..d30e74910 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -22,8 +22,10 @@ import ( const ( DefActSkuStock = 200 // 缺省活动库存 - maxDiscount4SkuSecKill = 80 - minDiscount4SkuDirectDown = 0 + maxDiscount4SkuSecKill = 80 + maxDiscount4Sku = 98 + minDiscount4SkuDirectDown = 0 + minDiscount4SkuDirectDownMTWM = 30 ) type ActOrderRuleParam struct { @@ -179,7 +181,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac if actSkuMap.ActualActPrice <= 0 { actSkuMap.ActualActPrice = 1 } - if err2 = checkDiscountValidation(act.Type, float64(actSkuMap.ActualActPrice)*100/float64(actSkuMap.VendorPrice)); err2 != nil { + if err2 = checkDiscountValidation(vendorIDs, act.Type, float64(actSkuMap.ActualActPrice)*100/float64(actSkuMap.VendorPrice)); err2 != nil { v.ErrMsg = err2.Error() v.ActualActPrice = actSkuMap.ActualActPrice v.VendorPrice = actSkuMap.VendorPrice @@ -303,14 +305,16 @@ func AddActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, actSto return err } -func checkDiscountValidation(actType int, pricePercentage float64) (err error) { +func checkDiscountValidation(vendorIDs []int, actType int, pricePercentage float64) (err error) { pricePercentageMin := int(math.Floor(pricePercentage)) pricePercentageMax := int(math.Ceil(pricePercentage)) if actType == model.ActSkuDirectDown && (pricePercentageMin < minDiscount4SkuDirectDown || pricePercentageMax > 99) { if pricePercentageMin < minDiscount4SkuDirectDown { err = fmt.Errorf("%s活动折扣必须大于:%d", model.ActTypeName[actType], minDiscount4SkuDirectDown) - } else if pricePercentageMax > 99 { - err = fmt.Errorf("%s活动必须有折扣", model.ActTypeName[actType]) + } else if pricePercentageMax > maxDiscount4Sku { + err = fmt.Errorf("%s活动必须至少有%d折扣", model.ActTypeName[actType], maxDiscount4Sku) + } else if len(vendorIDs) > 0 && vendorIDs[0] == model.VendorIDMTWM && pricePercentageMin < minDiscount4SkuDirectDownMTWM { + err = fmt.Errorf("美团平台%s活动折扣必须大于:%d", model.ActTypeName[actType], minDiscount4SkuDirectDownMTWM) } } else if actType == model.ActSkuSecKill && pricePercentageMax > maxDiscount4SkuSecKill { err = fmt.Errorf("%s活动折扣必须小于:%d", model.ActTypeName[actType], maxDiscount4SkuSecKill) @@ -333,7 +337,7 @@ func checkActValidation(act *model.Act, vendorIDs []int) (err error) { if act.Type == model.ActSkuDirectDown || act.Type == model.ActSkuSecKill { if act.PricePercentage == 0 { errList.AddErr(fmt.Errorf("必须指定缺省活动折扣")) - } else if err = checkDiscountValidation(act.Type, float64(act.PricePercentage)); err != nil { + } else if err = checkDiscountValidation(vendorIDs, act.Type, float64(act.PricePercentage)); err != nil { errList.AddErr(err) } else if act.Type == model.ActSkuSecKill && vendorIDMap[model.VendorIDMTWM] == 1 { errList.AddErr(fmt.Errorf("%s平台不支持%s活动", model.VendorChineseNames[model.VendorIDMTWM], model.ActTypeName[model.ActSkuSecKill])) @@ -954,7 +958,7 @@ func ForceUpdateVendorPrice(ctx *jxcontext.Context, vendorID int, actType int, s if err = dao.GetEntity(db, storeSkuBind, model.FieldStoreID, model.FieldSkuID, model.FieldDeletedAt); err == nil { vendorPrice := int(v.VendorPrice) if vendorPrice != 0 { - if err2 := checkDiscountValidation(actType, float64(v.ActPrice)*100/float64(v.VendorPrice)); err2 != nil { + if err2 := checkDiscountValidation([]int{vendorID}, actType, float64(v.ActPrice)*100/float64(v.VendorPrice)); err2 != nil { v.ErrMsg = err2.Error() v.ActualActPrice = v.ActPrice wrongSkuList = append(wrongSkuList, v) @@ -962,7 +966,7 @@ func ForceUpdateVendorPrice(ctx *jxcontext.Context, vendorID int, actType int, s } } else { vendorPrice = dao.GetStoreSkuBindVendorPrice(storeSkuBind, vendorID) - if checkDiscountValidation(actType, float64(v.ActPrice)*100/float64(vendorPrice)) != nil { + if checkDiscountValidation([]int{vendorID}, actType, float64(v.ActPrice)*100/float64(vendorPrice)) != nil { if actType == model.ActSkuSecKill { vendorPrice = int(v.ActPrice)*100/maxDiscount4SkuSecKill + 10 } else if actType == model.ActSkuDirectDown {