- 京东直降限时抢添加添加取消部分商品接口接口

- 京东重构单品促销接口
This commit is contained in:
gazebo
2019-05-22 12:11:33 +08:00
parent 41a2d7ed5d
commit 3fc08fb52c
2 changed files with 80 additions and 63 deletions

View File

@@ -30,11 +30,12 @@ const (
)
type PromotionSku struct {
SkuID int64 `json:"skuId,omitempty"`
OutSkuID string `json:"outSkuId,omitempty"`
StationNo int64 `json:"stationNo,omitempty"`
OutStationNo string `json:"outStationNo,omitempty"`
PromotionPrice int64 `json:"promotionPrice"`
SkuID int64 `json:"skuId,omitempty"`
OutSkuID string `json:"outSkuId,omitempty"`
StationNo int64 `json:"stationNo,omitempty"`
OutStationNo string `json:"outStationNo,omitempty"`
PromotionPrice int64 `json:"promotionPrice,omitempty"`
LimitSkuCount int `json:"limitSkuCount,omitempty"`
FailReason string `json:"failReason,omitempty"`
}
@@ -53,85 +54,90 @@ func getPromotionCmd(inCmd string, promotionType int) (outCmd string) {
// 单品直降添加主活动信息接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=178&apiid=ee8685c9be9b4aa5bdc41468c5ebc33b
func (a *API) CreatePromotionInfosSingle(name string, beginDate, endDate time.Time, outInfoId, advertising string) (infoId int64, err error) {
return a.createPromotionInfos(PromotionTypeDirectDown, name, beginDate, endDate, outInfoId, advertising)
return a.createPromotionInfos(PromotionTypeDirectDown, name, beginDate, endDate, outInfoId, advertising, "")
}
// 单品直降添加活动规则信息接口
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=178&apiid=900a9577cb304bbbb59abb7c2c33854d
func (a *API) CreatePromotionRulesSingle(infoId int64, outInfoId string, limitDevice, limitPin, limitCount, limitDaily int) (err error) {
return a.createPromotionRules(PromotionTypeDirectDown, infoId, outInfoId, limitDevice, limitPin, limitCount, limitDaily, "")
}
// 单品直降添加活动商品信息接口
// 最多200条
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=178&apiid=0ad0715e0aaa42489cbeac36398e916d
func (a *API) CreatePromotionSkuSingle(infoId int64, outInfoId string, skus []*PromotionSku) (skusResult []*PromotionSku, err error) {
return a.createPromotionSku(PromotionTypeDirectDown, infoId, outInfoId, skus)
return a.createPromotionSku(PromotionTypeDirectDown, infoId, outInfoId, skus, "")
}
// 单品直降活动提交保存接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=178&apiid=b84e14eb341e470db8ed9b60f78edb16
func (a *API) ConfirmPromotionSingle(infoId int64, outInfoId string) (err error) {
return a.confirmPromotion(PromotionTypeDirectDown, infoId, outInfoId)
return a.confirmPromotion(PromotionTypeDirectDown, infoId, outInfoId, "")
}
// 单品直降活动部分商品取消接口
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=178&apiid=cfd14470b3fe4625bd2405b20bf8cec4
func (a *API) CancelPromotionSkuSingle(infoId int64, outInfoId string, cancelSkus []*PromotionSku, traceId string) (err error) {
return a.cancelPromotionSku(PromotionTypeDirectDown, infoId, outInfoId, cancelSkus, traceId)
}
// 单品直降整个活动取消接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=178&apiid=3d02c2acad714bea86d20d498a1aa074
func (a *API) CancelPromotionSingle(infoId int64, outInfoId string) (err error) {
return a.cancelPromotion(PromotionTypeDirectDown, infoId, outInfoId)
return a.cancelPromotion(PromotionTypeDirectDown, infoId, outInfoId, "")
}
// 以下为限时抢
// 限时抢添加活动主信息接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=184&apiid=7d8b7ff86c9e457bb8a46963cb575769
func (a *API) CreatePromotionInfosLimitTime(name string, beginDate, endDate time.Time, outInfoId, advertising string) (infoId int64, err error) {
return a.createPromotionInfos(PromotionTypeLimitedTime, name, beginDate, endDate, outInfoId, advertising)
return a.createPromotionInfos(PromotionTypeLimitedTime, name, beginDate, endDate, outInfoId, advertising, "")
}
// 限时抢添加活动规则信息接口(直降也是调用此接口)
// 限时抢添加活动规则信息接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=184&apiid=e80674791d3542f0a87502753c0d0592
func (a *API) CreatePromotionRules(infoId int64, outInfoId string, limitDevice, limitPin, limitCount, limitDaily int) (err error) {
jdParams := map[string]interface{}{
"limitDevice": limitDevice,
"limitPin": limitPin,
"limitCount": limitCount,
"limitDaily": limitDaily,
"timeStamp": utils.GetCurTimeStr(),
}
if infoId != 0 {
jdParams[KeyInfoId] = infoId
} else {
jdParams[KeyOutInfoId] = outInfoId
}
_, err = a.AccessAPINoPage("limitTime/createPromotionRules", jdParams, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "", "0"))
return err
func (a *API) CreatePromotionRulesLimitTime(infoId int64, outInfoId string, limitDevice, limitPin, limitCount, limitDaily int) (err error) {
return a.createPromotionRules(PromotionTypeLimitedTime, infoId, outInfoId, limitDevice, limitPin, limitCount, limitDaily, "")
}
// 限时抢添加活动商品信息接口
// 最多200条
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=184&apiid=65fecef4883c40c6b23bbdb6123f5d80
func (a *API) CreatePromotionSkuLimitTime(infoId int64, outInfoId string, skus []*PromotionSku) (skusResult []*PromotionSku, err error) {
return a.createPromotionSku(PromotionTypeLimitedTime, infoId, outInfoId, skus)
return a.createPromotionSku(PromotionTypeLimitedTime, infoId, outInfoId, skus, "")
}
// 限时抢活动提交保存接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=184&apiid=3991063e2f0d435094e9fe44754f3490
func (a *API) ConfirmPromotionLimitTime(infoId int64, outInfoId string) (err error) {
return a.confirmPromotion(PromotionTypeLimitedTime, infoId, outInfoId)
return a.confirmPromotion(PromotionTypeLimitedTime, infoId, outInfoId, "")
}
// 限时抢活动取消部分商品接口
// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=184&apiid=01bd37df882749af91be4b040873ccc6
func (a *API) CancelPromotionSkuLimitTime(infoId int64, outInfoId string, cancelSkus []*PromotionSku, traceId string) (err error) {
return a.cancelPromotionSku(PromotionTypeLimitedTime, infoId, outInfoId, cancelSkus, traceId)
}
// 限时抢整个活动取消接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=184&apiid=97b6678d30624f73bc13cb68987e6a6d
func (a *API) CancelPromotionLimitTime(infoId int64, outInfoId string) (err error) {
return a.cancelPromotion(PromotionTypeLimitedTime, infoId, outInfoId)
return a.cancelPromotion(PromotionTypeLimitedTime, infoId, outInfoId, "")
}
func (a *API) createPromotionInfos(promotionType int, name string, beginDate, endDate time.Time, outInfoId, advertising string) (infoId int64, err error) {
func (a *API) createPromotionInfos(promotionType int, name string, beginDate, endDate time.Time, outInfoId, advertising, traceId string) (infoId int64, err error) {
if outInfoId == "" {
outInfoId = fmt.Sprintf("%X", md5.Sum([]byte(name)))
}
jdParams := map[string]interface{}{
"promotionName": name,
"beginDate": utils.Time2Str(beginDate),
"endDate": utils.Time2Str(endDate),
"advertising": advertising,
"promotionType": promotionType,
"timeStamp": utils.GetCurTimeStr(),
KeyOutInfoId: outInfoId,
}
jdParams := getCommonSkuPromotionParams(0, outInfoId, traceId)
jdParams["promotionName"] = name
jdParams["beginDate"] = utils.Time2Str(beginDate)
jdParams["endDate"] = utils.Time2Str(endDate)
jdParams["advertising"] = advertising
jdParams["promotionType"] = promotionType
jdParams["advertising"] = advertising
result, err := a.AccessAPINoPage(getPromotionCmd("createPromotionInfos", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "data", "0"))
if err == nil {
return utils.MustInterface2Int64(result), nil
@@ -139,17 +145,20 @@ func (a *API) createPromotionInfos(promotionType int, name string, beginDate, en
return 0, err
}
func (a *API) createPromotionRules(promotionType int, infoId int64, outInfoId string, limitDevice, limitPin, limitCount, limitDaily int, traceId string) (err error) {
jdParams := getCommonSkuPromotionParams(infoId, outInfoId, traceId)
jdParams["limitDevice"] = limitDevice
jdParams["limitPin"] = limitPin
jdParams["limitCount"] = limitCount
jdParams["limitDaily"] = limitDaily
_, err = a.AccessAPINoPage(getPromotionCmd("createPromotionRules", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "", "0"))
return err
}
// todo skusResult 返回值没有意义,为了兼容暂时保留
func (a *API) createPromotionSku(promotionType int, infoId int64, outInfoId string, skus []*PromotionSku) (skusResult []*PromotionSku, err error) {
jdParams := map[string]interface{}{
"skus": skus,
"timeStamp": utils.GetCurTimeStr(),
}
if infoId != 0 {
jdParams[KeyInfoId] = infoId
} else {
jdParams[KeyOutInfoId] = outInfoId
}
func (a *API) createPromotionSku(promotionType int, infoId int64, outInfoId string, skus []*PromotionSku, traceId string) (skusResult []*PromotionSku, err error) {
jdParams := getCommonSkuPromotionParams(infoId, outInfoId, traceId)
jdParams["skus"] = skus
// todo 当前是在出错时把data中的数据当成错误信息处理的
result, err := a.AccessAPINoPage(getPromotionCmd("createPromotionSku", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "data", "", "0"))
if err == nil && result != nil {
@@ -158,20 +167,26 @@ func (a *API) createPromotionSku(promotionType int, infoId int64, outInfoId stri
return skusResult, err
}
func (a *API) confirmPromotion(promotionType int, infoId int64, outInfoId string) (err error) {
jdParams := map[string]interface{}{
"timeStamp": utils.GetCurTimeStr(),
}
if infoId != 0 {
jdParams[KeyInfoId] = infoId
} else {
jdParams[KeyOutInfoId] = outInfoId
}
func (a *API) confirmPromotion(promotionType int, infoId int64, outInfoId, traceId string) (err error) {
jdParams := getCommonSkuPromotionParams(infoId, outInfoId, traceId)
_, err = a.AccessAPINoPage(getPromotionCmd("confirmPromotion", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "", "0"))
return err
}
func (a *API) cancelPromotion(promotionType int, infoId int64, outInfoId string) (err error) {
func (a *API) cancelPromotionSku(promotionType int, infoId int64, outInfoId string, cancelSkus []*PromotionSku, traceId string) (err error) {
jdParams := getCommonSkuPromotionParams(infoId, outInfoId, traceId)
jdParams["cancelSkus"] = cancelSkus
_, err = a.AccessAPINoPage(getPromotionCmd("cancelPromotionSku", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "", "0"))
return err
}
func (a *API) cancelPromotion(promotionType int, infoId int64, outInfoId, traceId string) (err error) {
jdParams := getCommonSkuPromotionParams(infoId, outInfoId, traceId)
_, err = a.AccessAPINoPage(getPromotionCmd("cancelPromotion", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "", "0"))
return err
}
func getCommonSkuPromotionParams(infoId int64, outInfoId, traceId string) map[string]interface{} {
jdParams := map[string]interface{}{
"timeStamp": utils.GetCurTimeStr(),
}
@@ -180,6 +195,8 @@ func (a *API) cancelPromotion(promotionType int, infoId int64, outInfoId string)
} else {
jdParams[KeyOutInfoId] = outInfoId
}
_, err = a.AccessAPINoPage(getPromotionCmd("cancelPromotion", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "", "0"))
return err
if traceId != "" {
jdParams["traceId"] = traceId
}
return jdParams
}

View File

@@ -11,7 +11,7 @@ func TestCreatePromotionSingle(t *testing.T) {
t.Fatal(err)
}
t.Log(infoId)
err = api.CreatePromotionRules(infoId, "", 1, 1, 1, 1)
err = api.CreatePromotionRulesSingle(infoId, "", 1, 1, 1, 1)
if err != nil {
t.Fatal(err)
}
@@ -39,7 +39,7 @@ func TestCreatePromotionLimitTime(t *testing.T) {
t.Fatal(err)
}
t.Log(infoId)
err = api.CreatePromotionRules(infoId, "", 1, 1, 5, 1)
err = api.CreatePromotionRulesLimitTime(infoId, "", 1, 1, 5, 1)
if err != nil {
t.Fatal(err)
}