diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index a1ca25b47..40b8fd2b9 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -23,7 +23,7 @@ const ( DefActSkuStock = 200 // 缺省活动库存 maxDiscount4SkuSecKill = 80 - maxDiscount4Sku = 98 + maxDiscount4Sku = 99 minDiscount4SkuDirectDown = 0 minDiscount4SkuDirectDownMTWM = 30 ) @@ -64,11 +64,71 @@ type tPreCreateActInfo struct { ActStoreSku []*tPreCreateActStoreSku `json:"actStoreSku"` } +type tActRuleInfo struct { + MinDiscount int + MaxDiscount int +} + type ActManager struct { } var ( FixedActManager *ActManager + + actRuleMap = map[int]map[int]*tActRuleInfo{ + model.VendorIDJD: map[int]*tActRuleInfo{ + model.ActSkuFake: &tActRuleInfo{ + MinDiscount: 0, + MaxDiscount: 500, + }, + model.ActSkuDirectDown: &tActRuleInfo{ + MinDiscount: 0, + MaxDiscount: 99, + }, + model.ActSkuSecKill: &tActRuleInfo{ + MinDiscount: 0, + MaxDiscount: 80, + }, + }, + model.VendorIDMTWM: map[int]*tActRuleInfo{ + model.ActSkuFake: &tActRuleInfo{ + MinDiscount: 0, + MaxDiscount: 500, + }, + model.ActSkuDirectDown: &tActRuleInfo{ + MinDiscount: 30, + MaxDiscount: 99, + }, + model.ActSkuSecKill: &tActRuleInfo{ + MinDiscount: 0, + MaxDiscount: 30, + }, + }, + model.VendorIDEBAI: map[int]*tActRuleInfo{ + model.ActSkuFake: &tActRuleInfo{ + MinDiscount: 0, + MaxDiscount: 500, + }, + model.ActSkuDirectDown: &tActRuleInfo{ + MinDiscount: 0, + MaxDiscount: 99, + }, + }, + model.VendorIDJX: map[int]*tActRuleInfo{ + model.ActSkuFake: &tActRuleInfo{ + MinDiscount: 0, + MaxDiscount: 500, + }, + model.ActSkuDirectDown: &tActRuleInfo{ + MinDiscount: 0, + MaxDiscount: 99, + }, + model.ActSkuSecKill: &tActRuleInfo{ + MinDiscount: 0, + MaxDiscount: 80, + }, + }, + } ) func init() { @@ -309,25 +369,54 @@ func AddActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, actSto return err } +// 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 > 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 { +// if len(vendorIDs) > 0 && vendorIDs[0] == model.VendorIDMTWM && pricePercentageMax > minDiscount4SkuDirectDownMTWM { +// err = fmt.Errorf("美团平台%s活动折扣必须小于:%d", model.ActTypeName[actType], minDiscount4SkuDirectDownMTWM) +// } else if pricePercentageMax > maxDiscount4SkuSecKill { +// err = fmt.Errorf("%s活动折扣必须小于:%d", model.ActTypeName[actType], maxDiscount4SkuSecKill) +// } +// } +// return err +// } + +func getActRule(vendorID, actType int) (actRule *tActRuleInfo, err error) { + if actRuleMap[vendorID] != nil { + actRule = actRuleMap[vendorID][actType] + } + if actRule == nil { + err = fmt.Errorf("%s不支持%s活动", model.VendorChineseNames[vendorID], model.ActTypeName[actType]) + } + return actRule, err +} + 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 > 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 { - if len(vendorIDs) > 0 && vendorIDs[0] == model.VendorIDMTWM && pricePercentageMax > minDiscount4SkuDirectDownMTWM { - err = fmt.Errorf("美团平台%s活动折扣必须小于:%d", model.ActTypeName[actType], minDiscount4SkuDirectDownMTWM) - } else if pricePercentageMax > maxDiscount4SkuSecKill { - err = fmt.Errorf("%s活动折扣必须小于:%d", model.ActTypeName[actType], maxDiscount4SkuSecKill) + errList := errlist.New() + for _, vendorID := range vendorIDs { + actRule, err2 := getActRule(vendorID, actType) + if err2 == nil { + if pricePercentageMin < actRule.MinDiscount { + errList.AddErr(fmt.Errorf("%s%s活动折扣必须大于:%d", model.VendorChineseNames[vendorID], model.ActTypeName[actType], actRule.MinDiscount)) + } else if pricePercentageMax > actRule.MaxDiscount { + errList.AddErr(fmt.Errorf("%s%s活动折扣必须小于:%d", model.VendorChineseNames[vendorID], model.ActTypeName[actType], actRule.MaxDiscount)) + } + } else { + errList.AddErr(err2) } } - return err + return errList.GetErrListAsOne() } func checkActValidation(act *model.Act, vendorIDs []int) (err error) {