Files
baseapi/platformapi/jdapi/promotion_sku.go

186 lines
7.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package jdapi
import (
"crypto/md5"
"fmt"
"time"
"git.rosy.net.cn/baseapi/utils"
)
const (
KeyStationNo = "stationNo"
KeyOutStationNo = "outStationNo"
KeyPromotionPrice = "promotionPrice"
KeyLimitSkuCount = "limitSkuCount"
KeyInfoId = "infoId"
KeyOutInfoId = "outInfoId"
)
const (
MaxPromotionSkuCount = 200
)
const (
PromotionStateNotConfirm = 1
PromotionStateConfirmed = 5
PromotionStateCanceled = 6
PromotionStateEnded = 9
)
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"`
LimitSkuCount int `json:"limitSkuCount,omitempty"`
FailReason string `json:"failReason,omitempty"`
}
func getPromotionCmd(inCmd string, promotionType int) (outCmd string) {
if promotionType == PromotionTypeDirectDown {
outCmd = "singlePromote/" + inCmd
} else if promotionType == PromotionTypeLimitedTime {
outCmd = "limitTime/" + inCmd
} else {
panic("unknow promotionType!")
}
return outCmd
}
// 单品直降添加主活动信息接口
// 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)
}
// 单品直降添加活动商品信息接口
// 最多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)
}
// 单品直降活动提交保存接口
// 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)
}
// 单品直降整个活动取消接口
// 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)
}
// 限时抢添加活动主信息接口
// 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)
}
// 限时抢添加活动规则信息接口(直降也是调用此接口)
// 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
}
// 限时抢添加活动商品信息接口
// 最多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)
}
// 限时抢活动提交保存接口
// 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)
}
// 限时抢整个活动取消接口
// 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)
}
func (a *API) createPromotionInfos(promotionType int, name string, beginDate, endDate time.Time, outInfoId, advertising 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,
}
result, err := a.AccessAPINoPage(getPromotionCmd("createPromotionInfos", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "data", "0"))
if err == nil {
return utils.MustInterface2Int64(result), nil
}
return 0, 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
}
// todo 当前是在出错时把data中的数据当成错误信息处理的
result, err := a.AccessAPINoPage(getPromotionCmd("createPromotionSku", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "data", "", "0"))
if err == nil && result != nil {
err = utils.Map2StructByJson(result, &skusResult, false)
}
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
}
_, 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) {
jdParams := map[string]interface{}{
"timeStamp": utils.GetCurTimeStr(),
}
if infoId != 0 {
jdParams[KeyInfoId] = infoId
} else {
jdParams[KeyOutInfoId] = outInfoId
}
_, err = a.AccessAPINoPage(getPromotionCmd("cancelPromotion", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "", "0"))
return err
}