This commit is contained in:
邹宗楠
2024-05-24 09:49:14 +08:00
parent 6afc1582fa
commit ad5f763b56
16 changed files with 1547 additions and 81 deletions

View File

@@ -438,7 +438,7 @@ func (a *API) RetailDiscountList(poiCode string, actType int) (actList []*GetSto
if len(tmpActList) < limit {
break
}
offset++
offset = (offset + 1) * limit
} else {
return nil, err
}
@@ -581,11 +581,12 @@ func (a *API) InStoreCouponDelete(poiCode string, actIDList []string) (err error
// 查询商家券(店内发券)活动
// http://developer.waimai.meituan.com/home/docDetail/314
// 页码从1开始
func (a *API) InStoreCouponList(poiCode string, pageNum, pageSize int) (couponActList []*CouponActInfo, err error) {
func (a *API) InStoreCouponList(poiCode string, actType, pageNum, pageSize int) (couponActList []*CouponActInfo, err error) {
result, err := a.AccessAPI("act/instore/coupon/list", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"page_num": pageNum,
"page_size": pageSize,
"type": actType,
})
if err == nil {
err = utils.Map2StructByJson(result, &couponActList, false)

View File

@@ -0,0 +1,446 @@
package mtwmapi
import (
"encoding/json"
"git.rosy.net.cn/baseapi/utils"
)
//#region 买赠活动 (未测试,暂无门店有次活动)
// BatchQueryBuyGiftsAll 批量查询门店买赠活动
func (a *API) BatchQueryBuyGiftsAll(appPoiCode string) ([]*BatchQueryBuyGiftsAll, error) {
params := map[string]interface{}{
KeyAppPoiCode: appPoiCode,
"offset": 0,
"limit": 200,
}
i := 0
buyGifts := make([]*BatchQueryBuyGiftsAll, 0, 0)
for {
params["offset"] = i
result, err := a.AccessAPI2("act/buygifts/list", true, params, "data", "")
if err != nil {
return nil, err
}
buyGift := make([]*BatchQueryBuyGiftsAll, 0, 0)
resultStr, err := json.Marshal(result)
if err != nil {
return nil, err
}
if err = json.Unmarshal([]byte(resultStr), &buyGift); err != nil {
return nil, err
}
buyGifts = append(buyGifts, buyGift...)
if len(buyGift) < 200 {
break
}
i++
}
return buyGifts, nil
}
// BatchCreateBuyGifts 批量创建满赠活动,最大每组200数据
func (a *API) BatchCreateBuyGifts(appPoiCode string, param []*BatchCreateBuyGiftsParam) (interface{}, error) {
params := map[string]interface{}{
KeyAppPoiCode: appPoiCode,
"act_data": string(utils.MustMarshal(param)),
}
result, err := a.AccessAPI2("act/buygifts/batchsave", false, params, resultKeySuccessMsg, "")
return result, err
}
//#endregion
//#region 满减(商品满减/门店满减)活动
// BatchGetDiscountList 批量获取门店满减活动列表 actType = 0 ,暂时不支持actType = 1 的返回,因为返回值里面没有商品详情
func (a *API) BatchGetDiscountList(appPoiCode string, actType int) ([]*GetDiscountList, error) {
result, err := a.AccessAPI2("act/full/discount/list", false, map[string]interface{}{KeyAppPoiCode: appPoiCode, "act_type": actType}, "success_list", "")
if err != nil {
return nil, err
}
discountList := make([]*GetDiscountList, 0, 0)
byteData, err := json.Marshal(result)
if err != nil {
return nil, err
}
if err = json.Unmarshal(byteData, &discountList); err != nil {
return nil, err
}
return discountList, nil
}
// BatchCreateDiscountList 批量创建满减活动
// 下面接口暂时不支持actType = 1 的活动创建因为上面接口查询返回时没有返回商品ID的详细信息,没返回actDetails 的信息所以无法创建
func (a *API) BatchCreateDiscountList(param *CreateDiscountList) (*CreateDiscountResult, error) {
result, err := a.AccessAPI2("act/full/discount/batchsave", false, utils.Struct2Map(param, "", false), "", "")
if err != nil {
return nil, err
}
createDiscountResult := &CreateDiscountResult{}
byteData, err := json.Marshal(result)
if err != nil {
return nil, err
}
if err = json.Unmarshal(byteData, &createDiscountResult); err != nil {
return nil, err
}
return createDiscountResult, nil
}
//#endregion
//#region 运费满减活动,只能获取阶梯运费活动,不能获取立减活动,且两个活动互斥,同一时间段只生效一个活动
// BatchGetShippingFee 查询运费满减活动配置
func (a *API) BatchGetShippingFee(appPoiCode string) (*ShippingFeeResult, error) {
result, err := a.AccessAPI2("act/full/discount/shippingfee/list", true, map[string]interface{}{KeyAppPoiCode: appPoiCode}, "", "")
if err != nil {
return nil, err
}
shippingFee := &ShippingFeeResult{}
byteData, err := json.Marshal(result)
if err != nil {
return nil, err
}
if err = json.Unmarshal(byteData, &shippingFee); err != nil {
return nil, err
}
return shippingFee, nil
}
// BatchCreateShippingFee 创建运费满减活动
func (a *API) BatchCreateShippingFee(AppPoiCode string, param []*ShippingFeeBatchCreateActData) (*ShippingResultData, error) {
byteData, err := json.Marshal(param)
if err != nil {
return nil, err
}
paramMap := map[string]interface{}{
AppPoiCode: AppPoiCode,
"act_data": string(byteData),
}
result, err := a.AccessAPI2("act/full/discount/shippingfee/batchsave", false, paramMap, "", "")
if err != nil {
return nil, err
}
shippingFeeCreate := &ShippingResultData{}
byteResult, err := json.Marshal(result)
if err != nil {
return nil, err
}
if err = json.Unmarshal(byteResult, &shippingFeeCreate); err != nil {
return nil, err
}
return shippingFeeCreate, nil
}
//#endregion
//#region 获取门店折扣爆品活动
// QueryProductsAll 获取门店折扣爆品活动列表
func (a *API) QueryProductsAll(poiCode string, actType int) (actList []*GetStoreRetailDiscountActData, err error) {
return a.RetailDiscountList(poiCode, actType)
}
// CreateProductsAct 创建门店折扣爆品活动
func (a *API) CreateProductsAct(poiCode string, actType int, actData []*RetailDiscountActData) (actResult []*RetailDiscountActResult, failedList []*AppFoodResult, err error) {
return a.RetailDiscountBatchSave2(poiCode, actType, actData)
}
//##endregion
//#region 查询商家券(店内发券)活动
// QueryStoreCoupon 查询商家券店内发券
func (a *API) QueryStoreCoupon(poiCode string) (couponActList []*CouponActInfo, err error) {
couponActList = make([]*CouponActInfo, 0, 0)
pageNum := 1
pageSize := 20
actType := 1
for {
actList, err := a.InStoreCouponList(poiCode, actType, pageNum, pageSize)
if err != nil {
return nil, err
}
if len(actList) != 0 {
couponActList = append(couponActList, actList...)
}
if len(actList) < pageSize && actType == 1 {
pageNum = 1
actType = 2
} else if len(actList) < pageSize && actType == 2 {
break
} else {
pageNum += 1
}
}
// 暂时只查询单店商家券
return couponActList, nil
}
// CreateStoreCouponBatch 批量新增单店店内商家券
func (a *API) CreateStoreCouponBatch(poiCode string, limitTime *LimitTime, couponInfoList []*CouponInfo) (couponResultList []*CouponResult, err error) {
return a.InStoreCouponBatchSave(poiCode, limitTime, couponInfoList)
}
//#endregion
//#region X件优惠活动
// QueryBundlesAct 本接口用于商家查询门店内X元M件、X件Y折活动的基本信息。 actType0-X元M件2-X件Y折不填默认为0待上线
func (a *API) QueryBundlesAct(poiCode string, actType int) ([]*BundlesSuccessListDetail, error) {
result, err := a.AccessAPI2("act/item/bundles/list", true, map[string]interface{}{KeyAppPoiCode: poiCode, "type": actType}, "success_list", "")
if err != nil {
return nil, err
}
bundlesList := make([]*BundlesSuccessListDetail, 0, 0)
byteData, err := json.Marshal(result)
if err != nil {
return nil, err
}
if err = json.Unmarshal(byteData, &bundlesList); err != nil {
return nil, err
}
return bundlesList, nil
}
func (a *API) QueryBundlesSku(appPoiCode string, actId string) ([]*BundlesSkuSuccessListDetail, error) {
result, err := a.AccessAPI2("act/item/bundles/foods/list", true, map[string]interface{}{KeyAppPoiCode: appPoiCode, "act_id": actId}, "success_list", "")
if err != nil {
return nil, err
}
resultByte, err := json.Marshal(result)
if err != nil {
return nil, err
}
resultData := make([]*BundlesSkuSuccessListDetail, 0, 0)
if err = json.Unmarshal(resultByte, &resultData); err != nil {
return nil, err
}
return resultData, nil
}
// CreateBundlesAct 创建X件优惠活动
func (a *API) CreateBundlesAct(poiCode string, param *CreateBundlesActParam) ([]*BundlesSuccessListDetail, error) {
paramByte, err := json.Marshal(param)
if err != nil {
return nil, err
}
result, err := a.AccessAPI2("act/item/bundles/save", true, map[string]interface{}{KeyAppPoiCode: poiCode, "act_data": string(paramByte)}, "success_list", "")
if err != nil {
return nil, err
}
bundlesList := make([]*BundlesSuccessListDetail, 0, 0)
byteData, err := json.Marshal(result)
if err != nil {
return nil, err
}
if err = json.Unmarshal(byteData, &bundlesList); err != nil {
return nil, err
}
return bundlesList, nil
}
//#endregion
//#region 加价购 [暂时不对接,获取不到商品的换购价格和库存]
// QueryStoreRepurchase 查询门店所有加价购活动信息
func (a *API) QueryStoreRepurchase(poiCode string) ([]*RepurchaseResult, error) {
result, err := a.AccessAPI2("act/markup/repurchase/list", true, map[string]interface{}{KeyAppPoiCode: poiCode}, "success_list", "")
if err != nil {
return nil, err
}
repurchaseList := make([]*RepurchaseResult, 0, 0)
byteData, err := json.Marshal(result)
if err != nil {
return nil, err
}
if err = json.Unmarshal(byteData, &repurchaseList); err != nil {
return nil, err
}
return repurchaseList, nil
}
// QueryStoreSkuAct 查询门店商品层次的活动
func (a *API) QueryStoreSkuAct() {
// act/markup/repurchase/main/food/list
}
// CreateStoreRepurchase 创建加价活动
func (a *API) CreateStoreRepurchase(poiCode string, param *RepurchaseCreate) ([]*RepurchaseCreateResult, error) {
result, err := a.AccessAPI2("act/markup/repurchase/batchsave", false, map[string]interface{}{KeyAppPoiCode: poiCode, "act_data": param}, "success_list", "")
if err != nil {
return nil, err
}
byteResult, err := json.Marshal(result)
if err != nil {
return nil, err
}
data := make([]*RepurchaseCreateResult, 0, 0)
if err := json.Unmarshal(byteResult, &data); err != nil {
return nil, err
}
return data, nil
}
//#endregion
//#region 商品券活动
// CreateCouponAct 创建门店商品券活动
func (a *API) CreateCouponAct(param *CreateCouponAct) ([]*CreateStoreCouponActResult, error) {
byteParam, err := json.Marshal(param)
if err != nil {
return nil, err
}
result, err := a.AccessAPI2("act/goods/coupon/save", false, map[string]interface{}{"goods_coupon_data": string(byteParam)}, "success_list", "")
if err != nil {
return nil, err
}
resultData, err := json.Marshal(result)
if err != nil {
return nil, err
}
successList := make([]*CreateStoreCouponActResult, 0, 0)
if err := utils.UnmarshalUseNumber(resultData, &successList); err != nil {
return nil, err
}
return successList, nil
}
// GetStoreCouponAct 获取门店商品券活动
func (a *API) GetStoreCouponAct(param *GetStoreCouponActParam) ([]*GetStoreCouponActSuccessList, error) {
paramMap := utils.Struct2Map(param, "", false)
result, err := a.AccessAPI2("act/goods/coupon/list", true, paramMap, "success_list", "")
if err != nil {
return nil, err
}
data := make([]*GetStoreCouponActSuccessList, 0, 0)
for _, v := range result.([]interface{}) {
coupon := &GetStoreCouponActSuccessList{}
storeCouponAct, _ := json.Marshal(v)
if err = json.Unmarshal(storeCouponAct, coupon); err != nil {
return nil, err
}
//if len(coupon.ActPriceCouponInfo) != 0 || coupon.ActPriceCouponInfo != nil {
// actPriceCouponInfoObj := make([]GetStoreCouponActSuccessListActPriceCouponInfo, 0, 0)
// for _, apci := range coupon.ActPriceCouponInfo {
// apciObj := GetStoreCouponActSuccessListActPriceCouponInfo{}
// if err = json.Unmarshal([]byte(apci), apciObj); err != nil {
// return nil, err
// }
// actPriceCouponInfoObj = append(actPriceCouponInfoObj, apciObj)
// }
// coupon.ActPriceCouponInfoObj = actPriceCouponInfoObj
//}
//if len(coupon.DiscountCouponInfo) != 0 || coupon.DiscountCouponInfo != nil {
// discountCouponInfo := make([]GetStoreCouponActSuccessListDiscountCouponInfo, 0, 0)
// for _, dci := range coupon.DiscountCouponInfo {
// dciObj := GetStoreCouponActSuccessListDiscountCouponInfo{}
// if err = json.Unmarshal([]byte(dci), dciObj); err != nil {
// return nil, err
// }
// discountCouponInfo = append(discountCouponInfo, dciObj)
// }
// coupon.DiscountCouponInfoObj = discountCouponInfo
//}
data = append(data, coupon)
}
return data, nil
}
// GetCouponActSkuList 批量查询商品券活动中的商品
func (a *API) GetCouponActSkuList(poiCode, actIds string) ([]*CouponActSkuListSuccessList, error) {
result, err := a.AccessAPI2("act/goods/coupon/goodslist", true, map[string]interface{}{"app_poi_code": poiCode, "act_ids": actIds}, "success_list", "")
if err != nil {
return nil, err
}
successList := make([]*CouponActSkuListSuccessList, 0, 0)
resultByte, err := json.Marshal(result)
if err != nil {
return nil, err
}
if err = json.Unmarshal(resultByte, &successList); err != nil {
return nil, err
}
return successList, nil
}
//#endregion
//#region 第N件优惠活动
// GetStoreNDiscount 获取门店第N件优惠活动
func (a *API) GetStoreNDiscount(poiCode string) ([]*GetStoreXDiscountSuccessList, error) {
result, err := a.AccessAPI2("act/nth/discount/info", true, map[string]interface{}{KeyAppPoiCode: poiCode}, "success_list", "")
if err != nil {
return nil, err
}
data := make([]*GetStoreXDiscountSuccessList, 0, 0)
if err := json.Unmarshal([]byte(result.(string)), &data); err != nil {
return nil, err
}
return data, nil
}
// CreateStoreNDiscount 创建门店地N件优惠活动
func (a *API) CreateStoreNDiscount(poiCode string, param *CreateStoreXDiscountParam) ([]*CreateStoreXDiscountResult, error) {
paramStr, err := json.Marshal(param)
if err != nil {
return nil, err
}
result, err := a.AccessAPI2("act/nth/discount/save", true, map[string]interface{}{KeyAppPoiCode: poiCode, "act_data": string(paramStr)}, "success_list", "")
if err != nil {
return nil, err
}
return result.([]*CreateStoreXDiscountResult), nil
}
//#endregion

View File

@@ -0,0 +1,482 @@
package mtwmapi
//#region 买赠活动
// BatchCreateBuyGiftsParam 活动创建参数
type BatchCreateBuyGiftsParam struct {
AppSpuCode string `json:"app_spu_code"` // APP方商品id
StartTime int64 `json:"start_time"` // 活动开始时间传10位秒级的时间戳
EndTime int64 `json:"end_time"` // 活动结束时间传10位秒级的时间戳
GiftsType int `json:"gifts_type"` // 赠品类型。取值范围0-非本商品非在售商品1-本商品2-非本商品在售商品
GiftsName string `json:"gifts_name,omitempty"` // 为赠品名称
GiftsAppSpuCode string `json:"gifts_app_spu_code,omitempty"` // 非本商品在售商品id当gifts_type=2时上传。
BuyNum int `json:"buy_num"` // 达到送赠品条件的商品购买数量须上传大于0的正整数
GiftsNum int `json:"gifts_num"` // 达到购买数量时赠送的赠品数量。须上传大于0的为正整数。例如buy_num=2gifts_num=3则代表买2件商品赠送3件赠品。
GiftsCharge float64 `json:"gifts_charge"` // 单个赠品的成本单位是元。此字段信息须大于0最多支持两位小数。注意赠品成本为商家成本不涉及美团成本。
GiftsDayLimit int `json:"gifts_day_limit"` // 当日活动赠品库存字段类型int。须上传大于0的正整数或-1如传-1则表示不限制活动赠品库存。
}
// BatchQueryBuyGiftsAll 活动创建参数
type BatchQueryBuyGiftsAll struct {
ItemId int `json:"item_id"` // 活动id
AppSpuCode string `json:"app_spu_code"` // 活动商品为APP方商品id即商家中台系统里商品的编码spu_code值
AppPoiCode string `json:"app_poi_code"` //
GiftsType int `json:"gifts_type"` // 赠品类型参考值0-非本商品非在售商品1-本商品2-非本商品在售商品。
GiftsName string `json:"gifts_name"` // 赠品名称
GiftsAppSpuCode string `json:"gifts_app_spu_code"` // 赠品的app_spu_code信息非活动本商品的店内在售商品。
StartTime int64 `json:"start_time"` // 开始时间
EndTime int64 `json:"end_time"` // 结束时间
BuyNum int `json:"buy_num"` // 达到送赠品条件的商品购买数量
GiftsNum int `json:"gifts_num"` //
BuyGiftsNum int `json:"buy_gifts_num"` //
GiftsCharge float64 `json:"gifts_charge"` //
GiftsDayLimit int `json:"gifts_day_limit"` // 当日活动赠品库存为大于0的正整数或-1如为-1则表示不限制活动赠品库存。
Status int `json:"status"` // 活动当前的状态参考值2-待生效1-生效0-过期
ItemName string `json:"item_name"` // 活动名称
BuyGiftsModel string `json:"buy_gifts_model"` // 补贴模式,目前仅有“商家进货补贴模式(走结算流程)”模式。
Charge string `json:"charge"` // 成本相关,单位是元。参数包括: giftsCharge赠品成本 giftsPoiCharge商家承担成本 giftsMtCharge美团承担成本。
}
type GiftsChargeObj struct {
GiftsPoiCharge string `json:"giftsPoiCharge"` // 商家成本
GiftsMtCharge int `json:"giftsMtCharge"` // 美团成本
GiftsCharge string `json:"giftsCharge"` // 赠品成本
}
//#endregion
//#region 满减活动
// GetDiscountList 获取满减活动列表
type GetDiscountList struct {
ActDetails []struct {
ActId interface{} `json:"act_id"`
ActPrice float64 `json:"act_price"`
AppFoodCode interface{} `json:"app_food_code"`
AppPoiCode interface{} `json:"app_poi_code"`
AppSpuCode interface{} `json:"app_spu_code"`
DayLimit interface{} `json:"day_limit"`
EndTime interface{} `json:"end_time"`
Name interface{} `json:"name"`
OrderLimit interface{} `json:"order_limit"`
OriginPrice float64 `json:"origin_price"`
Period interface{} `json:"period"`
StartTime interface{} `json:"start_time"`
Status interface{} `json:"status"`
Stock interface{} `json:"stock"`
UserType interface{} `json:"user_type"`
WeeksTime interface{} `json:"weeks_time"`
} `json:"act_details"` // 满减活动详情
ActInfo struct { // 活动信息json格式字符串。
ActIds string `json:"act_ids"`
ActName string `json:"act_name"`
ActType interface{} `json:"act_type"`
AutoDelay interface{} `json:"auto_delay"`
EndTime int64 `json:"end_time"`
StartTime int64 `json:"start_time"`
ExtraInfo struct {
Offset interface{} `json:"offset"`
TotalCount interface{} `json:"total_count"`
Limit interface{} `json:"limit"`
PageNum interface{} `json:"page_num"`
TaskId interface{} `json:"task_id"`
BatchActId int64 `json:"batch_act_id"` // 批次维度活动ID
SkuExtraInfo []struct {
AppSpuCode interface{} `json:"app_spu_code"` // 同入参app_spu_code或app_food_code仅在指定商品满减时返回
SkuId interface{} `json:"sku_id"` // 同入参sku_id
SkuActId interface{} `json:"sku_act_id"` // 商品维度的活动ID
} `json:"sku_extra_info"` // sku维度活动额外信息仅在指定商品满减时返回
PageSize interface{} `json:"page_size"`
} `json:"extraInfo"`
Period interface{} `json:"period"`
Quantity int `json:"quantity"` // 参加指定商品满减活动的商品数,仅适用于指定商品满减活动类型。
Status int `json:"status"` // 活动状态。(1)指定商品满减活动状态2-待生效1-生效0-过期。(2)全店满减活动状态0-待生效1-生效2-过期。
WeeksTime interface{} `json:"weeks_time"`
} `json:"act_info"`
ActRemark string `json:"act_remark"`
AppPoiCode string `json:"app_poi_code"`
}
// CreateDiscountList 创建满减活动(门店/商品)
type CreateDiscountList struct {
AppPoiCode string `json:"app_poi_code"` // APP方门店id
ActInfo string `json:"act_info"` // 活动信息 CreateDisCountActInfo
ActDetails string `json:"act_details"` // 活动详情信息json格式数组。活动满减不能超过5层阶梯。[CreateDiscountActDetails]
AppFoods string `json:"app_foods"` // 活动商品信息为json格式数组此字段仅用于创建指定商品满减活动时上传 [CreateDiscountAppFoods]
}
type CreateDisCountActInfo struct {
ActName string `json:"act_name"` // 活动名字
StartTime int64 `json:"start_time"` // 开始时间
EndTime int64 `json:"end_time"` // 结束时间
ActType int `json:"act_type"` // 活动类型取值范围0-全店满减1-指定商品满减。如此字段不传则默认act_type=1表示指定商品满减类型act_type=0时不可以传app_foods字段。
WeeksTime string `json:"weeks_time"` // 生效活动周期, 1、仅当act_type传0全店满减支持传本参数 2、取值范围及意义1,2,3,4,5,6,7分别表示周一至周日多个星期之间用英文逗号分隔 3、非必传创建时如不传则默认周期为"1,2,3,4,5,6,7"。 4、上传的周期相互不能重复
Period string `json:"period"` // 生效时间段, 1、仅当act_type传0全店满减支持传本参数 2、精确到分钟24小时制格式为HH:MM-HH:MM最多支持上传3个时段多个时段之间用英文逗号分隔 3、每个时段的开始时间必须小于结束时间。传的多个时段不允许有重叠。 4、上传多个时段时必须按时间先后顺序进行上传。每个时段最短为30分钟。 5、非必传创建时如不传则默认时段为"00:00:-23:59"。
AutoDelay int `json:"auto_delay"` // 每次活动到期后自动延期30天传1表示开启。 1、仅当act_type传0全店满减支持传本参数。 2、仅支持传1表示开启每当活动到期时自动延期30天。 3、非必传创建活动时如不传则为关闭状态不自动延期。
}
type CreateDiscountActDetails struct {
OriginPrice int `json:"origin_price"` // 表示满的金额
ActPrice int `json:"act_price"` // 表示减的金额
}
type CreateDiscountAppFoods struct {
AppSpuCode string `json:"app_spu_code"` // PP方商品id即商家中台系统里商品的编码
DayLimit int `json:"day_limit"` // 当日活动商品库存仅支持上传大于0的整数或-1如传-1时则表示不限制商品活动库存。
}
// CreateDiscountResult 创建满减活动返回值结构
type CreateDiscountResult struct {
Data string `json:"data"` // ok
SuccessMsg string `json:"success_msg"` // 活动ID
ExtraInfo []DiscountData `json:"extra_info"` //
ResultCode int `json:"result_code"` // 1-全部操作成功查询到的数据在data字段中2-部分成功成功的数据存储在data字段中失败的数据存在error_list字段中3-全部操作失败失败的数据存在error_list字段中4-请求失败一般为签名或限流问题关注error字段中的具体描述即可
SuccessMap []DiscountData `json:"success_map"` // 成功的集合信息
}
type DiscountData struct {
TaskId string `json:"task_id"` // 当商家使用异步排队方式请求接口时返回商家可使用任务id查询任务进度
TaskDetailLink string `json:"task_detail_link"` // 创建异步排队任务成功,返回任务详情链接,通过浏览器打开链接查看任务处理结果
BatchActId string `json:"batch_act_id"` // 批次维度活动ID
SkuExtraInfo []struct {
SkuActId int64 // 商品维度的活动ID
AppSpuCode string // 同入参app_spu_code
SkuId string // 同入参sku_id
} `json:"sku_extra_info"` // sku维度活动额外信息仅在创建成功时返回仅在指定商品满减时返回
}
//#endregion
//#region 运费满减活动
// ShippingFeeResult 满减运费活动配置
type ShippingFeeResult struct {
ResultCode int `json:"result_code"` // 返回状态码
SuccessList []ShippingFeeDetail `json:"success_list"` // 成功上数据列表
Data []ShippingFeeDetail `json:"data"` // 好像是所有的数据列表
}
// ShippingFeeDetail 运费活动返回详情值
type ShippingFeeDetail struct {
AppPoiCode string `json:"app_poi_code"` // 门店code
ActId int `json:"act_id"` // 活动ID
StartTime int `json:"start_time"` // 开始时间
EndTime int `json:"end_time"` // 结束时间
WeeksTime string `json:"weeks_time"` // 活动周期(周一-周末)
Period string `json:"period"` // 生效时间段,多个时段以英文逗号分隔;如创建活动时此字段未填写,则默认时段为"00:00:-23:59"。
ActDetail []struct {
LimitPrice float64 `json:"limit_price"` // 满减门槛
DiscountPrice float64 `json:"discount_price"` // 减配送费
PoiCharge float64 `json:"poi_charge"` // 门店承担费用
MtCharge float64 `json:"mt_charge"` // 美团承担费用
} `json:"act_detail"` // 活动详情
MaxPrice float64 `json:"max_price"` // 免配送费门槛
ActStatus string `json:"actStatus"` // 活动状态NOT_START=待生效IN_PROGRESS=已生效EXPIRED=已过期APPROVE=待审批FREEZE=冻结中。
}
// ShippingFeeBatchCreate 批量创建阶梯满减活动
type ShippingFeeBatchCreate struct {
AppPoiCode string `json:"app_poi_code"` // 门店code
ActData string `json:"act_data"` // 门店满减运费活动信息json格式数组。(1)同一门店同一时间仅允许参加一个活动。(2)同一门店的生效中+待生效活动最多支持20组。
}
// ShippingFeeBatchCreateActData 活动详情
type ShippingFeeBatchCreateActData struct {
StartTime int `json:"start_time"` // 开始时间
EndTime int `json:"end_time"` // 结束时间
WeeksTime string `json:"weeks_time"` // 活动周期(周一-周末)
Period string `json:"period"` // 生效时间段,多个时段以英文逗号分隔;如创建活动时此字段未填写,则默认时段为"00:00:-23:59"。
MaxPrice float64 `json:"max_price"` // 免配送费门槛
ActDetail []ShippingFeeBatchCreateActDataActDetail `json:"act_detail"` // 活动详情
}
type ShippingFeeBatchCreateActDataActDetail struct {
LimitPrice float64 `json:"limit_price"` // 满减门槛
DiscountPrice float64 `json:"discount_price"` // 减配送费
}
// ShippingResultData 运费满减活动创建返回值
type ShippingResultData struct {
ResultCode int `json:"result_code"` // 返回状态码
SuccessList []ShippingFeeDetail `json:"success_list"` // 成功上数据列表
SuccessMsg []ShippingFeeDetail `json:"success_msg"` // 好像是所有的数据列表
Data string `json:"data"`
Msg string `json:"msg"`
}
//#endregion
//#region 创建X元M件活动
// CreateBundlesActParam 创建X件优惠活动
type CreateBundlesActParam struct {
ActId int64 `json:"act_id"` // 更新时填写,活动ID
// 创建时填写
ActName string `json:"act_name"` // 活动名称
StartTime int `json:"start_time"` // 开始时间
EndTime int `json:"end_time"` // 结束时间
ActPrice float64 `json:"act_price"` // 活动价格
ActNum int `json:"act_num"` // 活动数量(表示“X元M件”中的M)
AppFoods []struct {
AppSpuCode string `json:"app_spu_code"` // 传APP方商品id
DayLimit int `json:"day_limit"` // 商品当日活动库存须传大于0的整数或-1如传-1则表示不限制商品活动库存。
} `json:"app_foods"` // 参加活动的商品信息
}
// BundlesSuccessListDetail 创建X件优惠活动返回值
type BundlesSuccessListDetail struct {
ActId int64 `json:"act_id"` // 活动id
BatchActId int64 `json:"batch_act_id"` // 批次维度活动ID
ActDetails []struct {
Discount float64 `json:"discount"` // 活动折扣表示“X件Y折”中的Y折
ActNum int `json:"act_num"` // 活动数量表示“X件Y折”中的X件
} `json:"act_details"` // 活动优惠信息最多返回3个阶梯只有X件Y折返回该信息
ExtraInfo struct {
BatchActId int64 `json:"batch_act_id"` // 批次维度活动ID
SkuExtraInfo []struct {
SkuActId int64 `json:"sku_act_id"` // 商品维度的活动ID该ID是对act_id的补全
AppSpuCode string `json:"app_spu_code"` // 活动商品传APP方商品id即商家中台系统里商品的编码spu_code值
SkuId string `json:"sku_id"` // 商品规格id本接口暂未支持多规格商品创建活动均返回null
}
} `json:"extraInfo"` // 活动额外信息包括批次和商品维度活动idX件Y折不返回该信息
ActName string `json:"act_name"` // 活动名称
StartTime int `json:"start_time"` // 开始时间
EndTime int `json:"end_time"` // 结束时间
ActRemark string `json:"act_remark"` //活动文案
}
// BundlesSkuSuccessListDetail 查询X件商品优惠活动商品信息返回值
type BundlesSkuSuccessListDetail struct {
AppSpuCode string `json:"app_spu_code"` // 活动商品传APP方商品id即商家中台系统里商品的编码spu_code值
SkuId string `json:"sku_id"` // 商品规格id本接口暂未支持多规格商品创建活动均返回null
DayLimit int `json:"day_limit"` // 商品当日活动库存须为大于0的整数或-1如传-1则表示不限制。
}
//#endregion
//#region 加价购活动
// RepurchaseCreate 创建门店加价购活动
type RepurchaseCreate struct {
// 修改时填写
ActId int64 `json:"act_id"` // 活动ID
// 创建时填写
ActName string `json:"act_name"` // 活动名称
StartTime int `json:"start_time"` // 开始时间
EndTime int `json:"end_time"` // 结束时间
ActPrice float64 `json:"act_price"` // 换购门槛,表示可参加本次换购活动的订单金额门店(不包含运费)
ActRemark string `json:"actRemark"` // 加价换购活动描述
AppFoods []RepurchaseCreateAppFoods `json:"app_foods"` // 参加换购的活动商品数据
}
type RepurchaseCreateAppFoods struct {
AppSpuCode string `json:"app_spu_code"` // 活动商品传APP方商品id
ActPrice float64 `json:"act_price"` // 活动价(单价),表示换购一件此商品需额外支付的价格,单位元;活动价不能大于商品原价
DayLimit int `json:"day_limit"` // 商品当日活动库存须为大于0的整数或-1如传-1则表示不限制。
}
type RepurchaseCreateResult struct {
SkuActId string `json:"sku_act_id"` // 商品维度的活动ID该ID是对act_id的补全
AppSpuCode string `json:"app_spu_code"` // 同入参app_spu_code
SkuId string `json:"sku_id"` // 商品规格id本接口暂未支持多规格商品创建活动均返回null
}
// RepurchaseResult 获取门店加价购活动返回值
type RepurchaseResult struct {
ActId int64 `json:"act_id"` // 活动ID
ActName string `json:"act_name"` // 活动名称
StartTime int `json:"start_time"` // 开始时间
EndTime int `json:"end_time"` // 结束时间
ActPrice float64 `json:"act_price"` // 换购门槛,表示可参加本次换购活动的订单金额门店(不包含运费)
ActRemark string `json:"actRemark"` // 加价换购活动描述
OrderLimitTotal int `json:"order_limit_total"` // 每单可换购的商品总数为大于0的整数或-1如为-1则表示不限制。
ExtraInfo struct {
BatchActId int64 `json:"batch_act_id"` // 批次维度活动ID
SkuExtraInfo []struct {
SkuActId int64 `json:"sku_act_id"` // 商品维度的活动ID
AppSpuCode string `json:"app_spu_code"` // 活动商品传APP方商品id
SkuId interface{} `json:"sku_id"` // 商品规格id本接口暂未支持多规格商品创建活动均返回nu
} `json:"sku_extra_info"` // sku维度活动额外信息
} `json:"extraInfo"` // 活动额外信息包括批次和商品维度活动id
}
//#endregion
//#region 商品券活动
// CreateCouponAct 创建门店优惠券活动
type CreateCouponAct struct {
AppPoiCodes string `json:"app_poi_codes"` // 可使用券的门店id列表多个用英文逗号分隔
CouponName string `json:"coupon_name"` // 券名称不能超过12个字符仅支持汉字、数字和字母。
IsSinglePoi int `json:"is_single_poi"` // 券使用范围是否限制单门店取值范围0-门店通用券1-单门店券。(1)门店通用券如app_poi_codes字段传的门店ABC则A门店领ABC门店通用。(2)单门店券A门店领仅A门店用。
AppSpuCodes string `json:"app_spu_codes"` // 参加活动的商品传APP方商品id即商家中台系统里商品的编码spu_code值。(1)如不同门店内同一商品的app_spu_code不同则视为不同商品多个商品id用英文逗号分隔。(2)当创建按折扣的商品券活动且discount=0时本参数仅支持传一个参加活动的商品
SpuData []CreateCouponActSpuData `json:"spu_data"` // 创建商品券活动支持按照sku维度创建传入spu_data字段。若同时传入spu_data和app_spu_code字段默认以spu_data数据为准进行创建商品券
TakeCouponStartTime int64 `json:"take_coupon_start_time"` // 领券开始时间传10位秒级的时间戳。
TakeCouponEndTime int64 `json:"take_coupon_end_time"` // 领券结束时间传10位秒级的时间戳。
UseCouponStartTime int64 `json:"use_coupon_start_time"` // 用券开始时间传10位秒级的时间戳。
CouponLimitCount int64 `json:"coupon_limit_count"` // 活动期间每个用户领券的最大数量限制范围1~99999999的整数。
Type int `json:"type"` // 商品券类型取值范围1-按活动价格2-按折扣。
ActPriceCouponInfo []GetStoreCouponActSuccessListActPriceCouponInfo `json:"act_price_coupon_info"` // 按活动价格的商品券信息json格式数组。按活动价格的商品券活动最多支持设置三层优惠。
DiscountCouponInfo []GetStoreCouponActSuccessListDiscountCouponInfo `json:"discount_coupon_info"` // 按折扣的商品券信息json格式数组。(1)当discount大于0时折扣商品券活动的优惠信息不能超过三层。(2)当discount等于0时为商品兑换券活动仅支持设置一层。
}
// CreateCouponActSpuData SpuData参数
type CreateCouponActSpuData struct {
AppSpuCode string `json:"app_spu_code"` // APP方商品id
SkuId string `json:"sku_id"` // 是sku唯一标识码字段信息限定长度不能超过40个字符。不允许上传emoji等表情符。
Upc string `json:"upc"` // upc
}
//// CreateActPriceCouponInfo ActPriceCouponInfo 参数
//type CreateActPriceCouponInfo struct {
// FullPrice int `json:"full_price"` // 券使用门槛金额范围是1~999的正整数单位元。
// ReducePrice int `json:"reduce_price"` // 券金额范围是1~999的正整数单位元表示达到使用门槛后可以减的金额
// Stock int `json:"stock"` // 券库存范围1-99999的正整数。(1)当选择单门店券时(is_single_poi=1),该库存指的是每门店的券库存。(2) 当选择门店通用券时(is_single_poi=0),该库存指的是所有门店共享的券库存
// UseType int `json:"user_type"` // 可领券的用户取值范围0-新客&老客1-门店联合新客(原新客,全部可用门店为新客)2-老客; 7-门店新客(当前门店为新客)。如不传此字段则默认为0。
//}
//
//// CreateDiscountCouponInfo DiscountCouponInfo 参数
//type CreateDiscountCouponInfo struct {
// FullPrice int `json:"full_price"` // 券使用门槛金额范围是1~999的正整数单位元。
// Discount float64 `json:"discount"` // 折扣系数需大于0且小于10最多一位小数或传0表示兑换券。当discount=0时则此活动为无门槛商品兑换券活动此时app_spu_codes字段上传的商品数不能大于1个且该商品不可再参加其他优惠活动。
// MaxReducePrice int64 `json:"max_reduce_price"`
// Stock int `json:"stock"` // 券库存范围1-99999的正整数。(1)当选择单门店券时(is_single_poi=1),该库存指的是每门店的券库存。(2) 当选择门店通用券时(is_single_poi=0),该库存指的是所有门店共享的券库存
// UseType int `json:"user_type"` // 可领券的用户取值范围0-新客&老客1-门店联合新客(原新客,全部可用门店为新客)2-老客; 7-门店新客(当前门店为新客)。如不传此字段则默认为0。
//}
// CreateStoreCouponActResult 获取门店优惠券活动
type CreateStoreCouponActResult struct {
AppPoiCodes []string `json:"app_poi_codes"` // 门店ID列表
AppSpuCodes []string `json:"app_spu_codes"` // 成功商品列表
UpcList []string `json:"upc_list"` // 成功商品upc列表
ActId int64 `json:"act_id"` // 活动ID
}
// GetStoreCouponActParam 获取门店商品券活动
type GetStoreCouponActParam struct {
AppPoiCode string `json:"app_poi_code"` // 门店ID
ActStatus int `json:"act_status"` // 活动当前状态,取值范围:-1-全部0-未生效1-已生效2-已结束。
StartTime int64 `json:"start_time"` // 开始时间
EndTime int64 `json:"end_time"` // 结束时间
PageNum int `json:"page_num"` // 页码
PageSize int `json:"page_size"` // 页数
}
// GetStoreCouponActSuccessList 获取门店优惠券返回列表
type GetStoreCouponActSuccessList struct {
ActId int64 `json:"actId"` // 活动id
AppPoiCodes string `json:"app_poi_codes"` // 可使用券的门店列表
CouponName string `json:"coupon_name"` // 券名称
IsSinglePoi int `json:"is_single_poi"` // 券使用范围是否限制单门店参考值0-门店通用券1-单门店券。(1)门店通用券如app_poi_codes字段传的门店ABC则A门店领ABC门店通用。(2)单门店券A门店领仅A门店用。
TakeCouponStartTime int64 `json:"take_coupon_start_time"` // 领券开始时间
TakeCouponEndTime int64 `json:"take_coupon_end_time"` // 领券结束时间
UseCouponStartTime int64 `json:"use_coupon_start_time"` // 用券开始时间
CouponLimitCount int64 `json:"coupon_limit_count"` // 活动期间每个用户领券的最大数量限制范围1~99999999的整数
Type int64 `json:"type"` // 商品券类型参考值1-按活动价格2-按折扣。
//ActPriceCouponInfo []interface{} `json:"act_price_coupon_info"` // 按活动价格的商品券信息json格式数组。按活动价格的商品券活动最多支持设置三层优惠
ActPriceCouponInfo []GetStoreCouponActSuccessListActPriceCouponInfo `json:"-"`
//DiscountCouponInfo []interface{} `json:"discount_coupon_info"` // 按折扣的商品券信息json格式数组。(1)当discount大于0时为折扣商品券活动优惠信息最多三层。(2)当discount等于0时为商品兑换券活动优惠信息仅一层
DiscountCouponInfo []GetStoreCouponActSuccessListDiscountCouponInfo `json:"-"`
}
// GetStoreCouponActSuccessListActPriceCouponInfo ActPriceCouponInfo数据
type GetStoreCouponActSuccessListActPriceCouponInfo struct {
FullPrice int `json:"full_price"` // 券使用门槛金额范围是1~999的正整数单位元。
ReducePrice int `json:"reduce_price"` // 券金额范围是1~999的正整数单位元表示达到使用门槛后可以减的金额。
Stock int `json:"stock"` // 券库存范围1-99999的正整数。(1)当选择单门店券时(is_single_poi=1),该库存指的是每门店的券库存。(2) 当选择门店通用券时(is_single_poi=0),该库存指的是所有门店共享的券库存。
UserType int `json:"user_type"` // 可领券的用户取值范围null或0-新客&老客1-门店联合新客(原新客,全部可用门店为新客)2-老客; 7-门店新客(当前门店为新客)。
}
// GetStoreCouponActSuccessListDiscountCouponInfo DiscountCouponInfo
type GetStoreCouponActSuccessListDiscountCouponInfo struct {
FullPrice int `json:"full_price"` // 券使用门槛金额范围是1~999的正整数单位元。
Discount float64 `json:"discount"` // 折扣系数范围0-10之间最多一位小数或为0表示无门槛商品兑换券活
MaxReducePrice int `json:"max_reduce_price"` // 券最高可减金额,单位元。(1)当discount大于0时为折扣商品券活动优惠信息最多三层。(2)当discount等于0时为商品兑换券活动不支持设置最高可减金额max_reduce_price默认为0。
Stock int `json:"stock"` // 券库存范围1-99999的正整数。(1)当选择单门店券时(is_single_poi=1),该库存指的是每门店的券库存。(2) 当选择门店通用券时(is_single_poi=0),该库存指的是所有门店共享的券库存。
UserType int `json:"user_type"` // 可领券的用户取值范围null或0-新客&老客1-门店联合新客(原新客,全部可用门店为新客)2-老客; 7-门店新客(当前门店为新客)。
}
// CouponActSkuListSuccessList 获取商品券活动商品列表
type CouponActSkuListSuccessList struct {
ActId int `json:"actId"` // 活动ID
AppPoiCodes string `json:"app_poi_codes"` // 门店ID
CouponName string `json:"coupon_name"` // 活动名称
IsSinglePoi int `json:"is_single_poi"` // 券使用范围是否限制单门店参考值0-门店通用券1-单门店券。(1)门店通用券如app_poi_codes字段传的门店ABC则A门店领ABC门店通用。(2)单门店券A门店领仅A门店用。
AppSpuCodes string `json:"app_spu_codes"` // 商品ID
TakeCouponStartTime int64 `json:"take_coupon_start_time"` // 领券开始时间
TakeCouponEndTime int64 `json:"take_coupon_end_time"` // 领券结束时间
UseCouponStartTime int64 `json:"use_coupon_start_time"` // 使用开始时间
CouponLimitCount int64 `json:"coupon_limit_count"` // 用户领券最大数
Type int `json:"type"` // 商品券类型参考值1-按活动价格2-按折扣。
ActPriceCouponInfo []GetStoreCouponActSuccessListActPriceCouponInfo `json:"act_price_coupon_info"` // 按活动价格的商品券信息json格式数组。按活动价格的商品券活动最多支持设置三层优惠。
DiscountCouponInfo []GetStoreCouponActSuccessListDiscountCouponInfo `json:"discount_coupon_info"` // 按折扣的商品券信息json格式数组。(1)当discount大于0时为折扣商品券活动优惠信息最多三层。(2)当discount等于0时为商品兑换券活动优惠信息仅一层。
ActStatus int `json:"act_status"`
AppFoodCodes string `json:"app_food_codes"`
CouponRetailType int `json:"coupon_retail_type"`
IsShare int `json:"is_share"`
SpuData []struct {
AppSpuCode string `json:"app_spu_code"`
SkuId string `json:"sku_id"`
Upc string `json:"upc"`
} `json:"spu_data"`
UseCouponEndTime int `json:"use_coupon_end_time"`
ValidityDays int `json:"validity_days"`
}
//#endregion
//#region 第X件优惠活动
// GetStoreXDiscountSuccessList 第X件优惠返回值
type GetStoreXDiscountSuccessList struct {
ActId int64 `json:"act_id"`
BatchActId string `json:"batch_act_id"` // 批次维度活动ID
StartTime int64 `json:"start_time"` // 开始时间
EndTime int64 `json:"end_time"` // 结束时间
ActName string `json:"act_name"` // 活动名字
ActSettingType int `json:"act_setting_type"` // 1字段描述活动子类型选择。 2取值范围0-第N件X折1-第N件X元。 3活动信息的字段规则根据此字段而变化
ActDetails []GetStoreXDiscountSuccessListActDetails `json:"act_details"` // 1字段描述活动具体信息。 2至少有一阶最多三阶。
ExtraInfo GetStoreXDiscountSuccessListExtraInfo `json:"extra_info"`
}
// GetStoreXDiscountSuccessListActDetails ActDetails
type GetStoreXDiscountSuccessListActDetails struct {
Price string `json:"price"` // 1字段描述活动商品售价 2取值范围0≤X最多支持两位小数。 3此范围当“活动子类型”为1时有效
Discount string `json:"discount"` // 1字段描述活动商品折扣系数。 2取值范围0≤X≤9.99,最多支持两位小数。 3此范围当“活动子类型”为0时有效
Index int `json:"index"` // 1字段描述活动商品件数。 2取值范围N1≤N≤5
}
// GetStoreXDiscountSuccessListExtraInfo ExtraInfo
type GetStoreXDiscountSuccessListExtraInfo struct {
BatchActId int64 `json:"batch_act_id"` // 批次维度活动ID
SkuExtraInfo []struct {
SkuActId int64 `json:"sku_act_id"` // 商品维度的活动ID该ID是对act_id的补全
AppSpuCode string `json:"app_spu_code"` // 同入参app_spu_code
SkuId string `json:"sku_id"` // 商品规格id本接口暂未支持多规格商品创建活动均返回null
} `json:"sku_extra_info"` // sku维度活动额外信息
}
// CreateStoreXDiscountParam 创建地X件优惠活动
type CreateStoreXDiscountParam struct {
ActId int64 `json:"act_id"`
ActName string `json:"act_name"` // 活动名字
StartTime int64 `json:"start_time"` // 开始时间
EndTime int64 `json:"end_time"` // 结束时间
ActSettingType int `json:"act_setting_type"` // 1字段描述活动子类型选择。 2取值范围0-第N件X折1-第N件X元。 3活动信息的字段规则根据此字段而变化
ActDetails []GetStoreXDiscountSuccessListActDetails `json:"act_details"` // 1字段描述活动具体信息。 2至少有一阶最多三阶。
ActProducts []struct {
AppSpuCode string `json:"app_spu_code"` // 原app_food_code字段 1字段描述活动商品编码。 2选择第N件X元时所选商品原价必须大于活动价X。 3仅支持单规格商品参加活动 4商品原价乘活动件数必须大于活动价。 5如填写了活动id输入未在活动中存在的app_spu_code默认为在该活动中新增参加活动的商品。 6如填写了活动id输入已在活动中存在的app_spu_code则认为更新此活动中该商品库存信息。
DayLimit int `json:"day_limit"` // 1字段描述活动商品当日库存。 2格式正整数不大于999999999。 3如当日库存为无限则传-1。
} `json:"act_products"`
}
// CreateStoreXDiscountResult 创建X件优惠返回值
type CreateStoreXDiscountResult struct {
SkuActId int64 `json:"sku_act_id"` // 商品维度的活动ID该ID是对act_id的补全
AppSpuCode string `json:"app_spu_code"` // 同入参app_spu_code
SkuId string `json:"sku_id"` // 商品规格id本接口暂未支持多规格商品创建活动均返回null
}
//#endregion

View File

@@ -0,0 +1,420 @@
package mtwmapi
import (
"encoding/json"
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/globals"
"testing"
"time"
)
var fromStoreId = "7111680"
var toStoreId = "8694010"
func TestBatchQueryBuyGiftsAll(t *testing.T) {
var errData = make([]error, 0, 0)
buyGiftList, err := api.BatchQueryBuyGiftsAll(fromStoreId)
if err != nil {
errData = append(errData, fmt.Errorf("买赠活动异常:%v", errData))
return
}
if len(buyGiftList) == 0 {
errData = append(errData, fmt.Errorf("门店暂无买赠活动"))
return
}
param := make([]*BatchCreateBuyGiftsParam, 0, 0)
for _, v := range buyGiftList {
buyGift := &BatchCreateBuyGiftsParam{
AppSpuCode: v.AppSpuCode,
StartTime: v.StartTime,
EndTime: v.EndTime,
GiftsType: v.GiftsType,
GiftsName: v.GiftsName,
GiftsAppSpuCode: v.GiftsAppSpuCode,
BuyNum: v.BuyNum,
GiftsNum: v.GiftsNum,
GiftsCharge: v.GiftsCharge,
GiftsDayLimit: v.GiftsDayLimit,
}
// 赠品成本
giftsCharge := &GiftsChargeObj{}
if err := json.Unmarshal([]byte(v.Charge), giftsCharge); err != nil {
return
}
buyGift.GiftsCharge = utils.Str2Float64(fmt.Sprintf("%.2f", utils.Str2Float64(giftsCharge.GiftsCharge)))
param = append(param, buyGift)
}
result, err := api.BatchCreateBuyGifts(toStoreId, param)
globals.SugarLogger.Debugf("result := %s", utils.Format4Output(result, false))
globals.SugarLogger.Debugf("result := %v", err)
}
// 获取门店满减
func TestBatchGetDiscountList(t *testing.T) {
// 全店满减活动
data, err := api.BatchGetDiscountList(fromStoreId, 0)
globals.SugarLogger.Debugf("data:= %s", utils.Format4Output(data, false))
globals.SugarLogger.Debugf("err:= %v", err)
for k, v := range data {
param := &CreateDiscountList{
AppPoiCode: toStoreId,
ActInfo: "",
ActDetails: "",
AppFoods: "",
}
actInfo := &CreateDisCountActInfo{
StartTime: v.ActInfo.StartTime,
EndTime: v.ActInfo.EndTime,
ActType: 0, // 0 不传app_food
AutoDelay: 1,
}
if v.ActInfo.ActName != "" {
actInfo.ActName = v.ActInfo.ActName
} else {
actInfo.ActName = "全店满减" + utils.Int2Str(k)
}
actInfoByte, err := json.Marshal(actInfo)
if err != nil {
return
}
param.ActInfo = string(actInfoByte)
actDetails := make([]CreateDiscountActDetails, 0, 0)
for _, ads := range v.ActDetails {
actDetails = append(actDetails, CreateDiscountActDetails{
OriginPrice: utils.Float64TwoInt(ads.OriginPrice),
ActPrice: utils.Float64TwoInt(ads.ActPrice),
})
}
actDetailsByte, err := json.Marshal(actDetails)
if err != nil {
return
}
param.ActDetails = string(actDetailsByte)
api.BatchCreateDiscountList(param)
}
}
// 运费满减
func TestGetShippingFee(t *testing.T) {
data, err := api.BatchGetShippingFee(fromStoreId)
if err != nil {
return
}
if data.SuccessList != nil && len(data.SuccessList) != 0 {
param := make([]*ShippingFeeBatchCreateActData, 0, 0)
for _, v := range data.SuccessList {
shippingFee := &ShippingFeeBatchCreateActData{
StartTime: v.StartTime,
EndTime: v.EndTime,
WeeksTime: v.WeeksTime,
Period: v.Period,
MaxPrice: v.MaxPrice,
}
actDetail := make([]ShippingFeeBatchCreateActDataActDetail, 0, 0)
for _, ad := range v.ActDetail {
actDetail = append(actDetail, ShippingFeeBatchCreateActDataActDetail{
LimitPrice: ad.LimitPrice,
DiscountPrice: ad.DiscountPrice,
})
}
shippingFee.ActDetail = actDetail
param = append(param, shippingFee)
}
resultData, err := api.BatchCreateShippingFee(toStoreId, param)
if err != nil {
return
}
if resultData.Data != "ok" {
return //resultData.Msg
}
return // nil
}
return // 满减运费活动获取失败
globals.SugarLogger.Debugf("==result := %s", utils.Format4Output(data, false))
globals.SugarLogger.Debugf("==err := %v", err)
}
// 创建折扣爆品活动
func TestProductsAct(t *testing.T) {
secKillALL, err := api.QueryProductsAll(fromStoreId, RetailActTypeSecKill)
if err != nil {
return
}
killAct := make([]*RetailDiscountActData, 0, 0)
for _, v := range secKillALL {
kill := &RetailDiscountActData{
AppFoodCode: v.AppFoodCode,
UserType: v.UserType,
StartTime: v.StartTime,
EndTime: v.EndTime,
OrderLimit: v.OrderLimit,
DayLimit: v.DayLimit,
Period: v.Period,
WeeksTime: v.WeeksTime,
SettingType: v.SettingType,
ActPrice: v.ActPrice,
DiscountCoefficient: v.DiscountCoefficient,
Sequence: v.Sequence,
ItemID: v.ItemID,
OriginalPrice: v.OriginalPrice,
Stock: v.Stock,
Status: v.Status,
Name: v.Name,
}
killAct = append(killAct, kill)
}
//todo 折扣活动查询出来一万多条,暂时工单处理
directDownALL, err := api.QueryProductsAll(fromStoreId, RetailActTypeDirectDown)
for _, v := range directDownALL {
kill := &RetailDiscountActData{
AppFoodCode: v.AppFoodCode,
UserType: v.UserType,
StartTime: v.StartTime,
EndTime: v.EndTime,
OrderLimit: v.OrderLimit,
DayLimit: v.DayLimit,
Period: v.Period,
WeeksTime: v.WeeksTime,
SettingType: v.SettingType,
ActPrice: v.ActPrice,
DiscountCoefficient: v.DiscountCoefficient,
Sequence: v.Sequence,
ItemID: v.ItemID,
OriginalPrice: v.OriginalPrice,
Stock: v.Stock,
Status: v.Status,
Name: v.Name,
}
killAct = append(killAct, kill)
}
if len(killAct) != 0 {
_, _, err := api.CreateProductsAct(toStoreId, RetailActTypeSecKill, killAct)
if err != nil {
return
}
return
}
}
func TestQueryStoreCoupon(t *testing.T) {
couponList, err := api.QueryStoreCoupon(fromStoreId)
if err != nil {
return
}
if len(couponList) != 0 {
for _, v := range couponList {
couponInfoList := make([]*CouponInfo, 0, 0)
for _, ad := range v.ActData {
couponInfoList = append(couponInfoList, &CouponInfo{
LimitPrice: ad.LimitPrice,
CouponPrice: ad.CouponPrice,
UserType: ad.UserType,
ValidityDays: ad.ValidityDays,
Stock: ad.Stock,
})
}
limitTime := &LimitTime{
StartTime: v.StartTime,
EndTime: v.EndTime,
}
if _, err := api.CreateStoreCouponBatch(toStoreId, limitTime, couponInfoList); err != nil {
return
}
}
}
globals.SugarLogger.Debugf("======err := %v", err)
globals.SugarLogger.Debugf("======couponList := %s", utils.Format4Output(couponList, false))
}
// todo 创建X件Y折,X件减Y元活动查询不出来,商家端也不展示
func TestQueryBundlesAct(t *testing.T) {
result := make([]*BundlesSuccessListDetail, 0, 0)
// X件M元
bundlesXM, _ := api.QueryBundlesAct(fromStoreId, 0)
if bundlesXM != nil {
result = append(result, bundlesXM...)
}
// X件Y折
bundlesXY, _ := api.QueryBundlesAct(fromStoreId, 2)
if bundlesXY != nil {
result = append(result, bundlesXY...)
}
globals.SugarLogger.Debugf("=bundlesXM := %s", utils.Format4Output(bundlesXM, false))
globals.SugarLogger.Debugf("=bundlesXY := %s", utils.Format4Output(bundlesXY, false))
for _, v := range result {
actSku, err := api.QueryBundlesSku(fromStoreId, utils.Int64ToStr(v.ActId))
globals.SugarLogger.Debugf("=actSku := %s", utils.Format4Output(actSku, false))
globals.SugarLogger.Debugf("=actSkuerr := %v", err)
}
// for _, as := range actSku {
// param := &CreateBundlesActParam{
// ActName: v.ActName,
// StartTime: v.StartTime,
// EndTime: v.EndTime,
// ActPrice: v.a,
// ActNum: v.a,
// AppFoods: nil,
// }
// api.CreateBundlesAct(toStoreId)
// }
//
//}
//for _, v := range result {
// param := &CreateBundlesActParam{
// ActId: 0, // 更新时填写
// ActName: v.ActName,
// StartTime: v.StartTime,
// EndTime: v.EndTime,
// ActPrice: 0,
// ActNum: 0,
// AppFoods: nil,
// }
// for _, ads := range v.ActDetails {
// param.ActPrice = ads.ActNum
// }
// api.CreateBundlesAct()
//}
}
// 加价购
func TestQueryStoreRepurchase(t *testing.T) {
repurchase, err := api.QueryStoreRepurchase(fromStoreId)
//for _, v := range repurchase {
// param := &RepurchaseCreate{
// ActName: v.ActName,
// StartTime: v.StartTime,
// EndTime: v.EndTime,
// ActPrice: v.ActPrice,
// ActRemark: v.ActRemark,
// AppFoods: nil,
// }
// appFoods := make([]RepurchaseCreateAppFoods, 0, 0)
// for _, sei := range v.ExtraInfo.SkuExtraInfo {
// appFood := RepurchaseCreateAppFoods{
// AppSpuCode: sei.AppSpuCode,
// ActPrice: v.ActPrice,
// DayLimit: sei.,
// }
// }
// api.CreateStoreRepurchase(toStoreId,param)
//}
globals.SugarLogger.Debugf("=repurchase := %s", utils.Format4Output(repurchase, false))
globals.SugarLogger.Debugf("=bundlesXY := %v", err)
}
// 商品券
func TestCreateCouponAct(t *testing.T) {
couponInfoAll := make([]*GetStoreCouponActSuccessList, 0, 0)
pageNumber := 1
pageSize := 100
for {
param := &GetStoreCouponActParam{
AppPoiCode: fromStoreId,
ActStatus: 1,
StartTime: time.Now().AddDate(-1, 0, 0).Unix(),
EndTime: time.Now().AddDate(1, 0, 0).Unix(),
PageNum: pageNumber,
PageSize: pageSize,
}
couponList, err := api.GetStoreCouponAct(param)
globals.SugarLogger.Debugf("=couponList := %s", utils.Format4Output(couponList, false))
globals.SugarLogger.Debugf("=err := %v", err)
if err != nil {
return
}
couponInfoAll = append(couponInfoAll, couponList...)
if len(couponList) < pageSize {
break
}
pageNumber++
}
for _, v := range couponInfoAll {
couponSkuList, err := api.GetCouponActSkuList(fromStoreId, utils.Int64ToStr(v.ActId))
if err != nil {
return
}
for _, csl := range couponSkuList {
param := &CreateCouponAct{
AppPoiCodes: csl.AppPoiCodes,
CouponName: csl.CouponName,
IsSinglePoi: csl.IsSinglePoi,
AppSpuCodes: csl.AppSpuCodes,
TakeCouponStartTime: csl.TakeCouponStartTime,
TakeCouponEndTime: csl.TakeCouponEndTime,
UseCouponStartTime: csl.UseCouponStartTime,
CouponLimitCount: csl.CouponLimitCount,
Type: csl.Type,
}
if csl.SpuData != nil && len(csl.SpuData) != 0 {
for _, sd := range csl.SpuData {
param.SpuData = append(param.SpuData, CreateCouponActSpuData{
AppSpuCode: sd.AppSpuCode,
SkuId: sd.SkuId,
Upc: sd.Upc,
})
}
}
if csl.ActPriceCouponInfo != nil && len(csl.ActPriceCouponInfo) != 0 {
//actPriceCouponInfoStr := make([]string, 0, 0)
//for _, apci := range csl.ActPriceCouponInfo {
// actPriceCouponInfo, _ := json.Marshal(apci)
// actPriceCouponInfoStr = append(actPriceCouponInfoStr, string(actPriceCouponInfo))
//}
param.ActPriceCouponInfo = csl.ActPriceCouponInfo
}
if csl.DiscountCouponInfo != nil && len(csl.DiscountCouponInfo) != 0 {
//discountCouponInfoStr := make([]string, 0, 0)
//for _, dci := range csl.DiscountCouponInfo {
// discountCouponInfo, _ := json.Marshal(dci)
// discountCouponInfoStr = append(discountCouponInfoStr, string(discountCouponInfo))
//}
param.DiscountCouponInfo = csl.DiscountCouponInfo
}
createCouponResult, err := api.CreateCouponAct(param)
if err != nil {
return
}
globals.SugarLogger.Debugf("=%v", createCouponResult)
}
}
}
func TestGetStoreNDiscount(t *testing.T) {
//discountResult, err := api.GetStoreNDiscount(fromStoreId)
//if err != nil {
// return
//}
//for _, v := range discountResult {
// api.CreateStoreNDiscount()
//}
//globals.SugarLogger.Debugf("dicountResult=%v", discountResult)
//globals.SugarLogger.Debugf("err =%v", err)
}

View File

@@ -132,14 +132,6 @@ func TestNew(t *testing.T) {
}
}
func TestInStoreCouponList(t *testing.T) {
result, err := api.InStoreCouponList(testPoiCode, 1, 100)
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(result, false))
}
func TestParseErr4RetailDiscountDelete(t *testing.T) {
errStr := `
{"error_list":[{"act_id":1053302130,"error_msg":"活动ID不存在"},{"act_id":1053302127,"error_msg":"活动ID不存在"},{"act_id":1053302128,"error_msg":"活动ID不存在"},{"act_id":1053302129,"error_msg":"活动ID不存在"},{"act_id":1053302135,"error_msg":"活动ID不存在"},{"act_id":1053302132,"error_msg":"活动ID不存在"},{"act_id":1053302123,"error_msg":"活动ID不存在"},{"act_id":1053302125,"error_msg":"活动ID不存在"},{"act_id":1053302124,"error_msg":"活动ID不存在"},{"act_id":1053302133,"error_msg":"活动ID不存在"},{"act_id":1053302126,"error_msg":"活动ID不存在"},{"act_id":1053302134,"error_msg":"活动ID不存在"},{"act_id":1053302131,"error_msg":"活动ID不存在"}]}

View File

@@ -20,13 +20,13 @@ func init() {
baseapi.Init(sugarLogger)
// 菜市
//api = New("589", "a81eb3df418d83d6a1a4b7c572156d2f", "", "")
api = New("589", "a81eb3df418d83d6a1a4b7c572156d2f", "", "")
// 果园
//api = New("4123", "df2c88338b85f830cebce2a9eab56628", "", "")
//商超
api = New("5873", "41c479790a76f86326f89e8048964739", "", "token_rzfK3TvMXrIDIlIT3s5CSg") //token_n4TwqCntWWuvQwAawzxC0w
//api = New("5873", "41c479790a76f86326f89e8048964739", "", "token_hVoW4uxX65tW2pJ-WxxEVw") //token_n4TwqCntWWuvQwAawzxC0w
cookieStr := `
acctId=57396785; token=0bWbK5VbK50E2BmIhIH2zHB-am_y7mB37yXHm6RLZWx4*; wmPoiId=-1;
`

View File

@@ -29,7 +29,7 @@ func getTimeFromTimestamp(timeStamp int64) time.Time {
}
func TestOrderGetOrderDetail(t *testing.T) {
result, err := api.OrderGetOrderDetail(5900920842826988338, false)
result, err := api.OrderGetOrderDetail(2301030621026530024, false)
if err != nil {
t.Fatal(err)
}

View File

@@ -229,8 +229,9 @@ func TestBatchSetPrice(t *testing.T) {
err := api.BatchSetRestockingPrice(utils.GetUUID(), "12422751", param)
fmt.Println(err)
}
func TestRetailDelete(t *testing.T) {
poiCode := "20978764"
poiCode := "7954977"
i := 0
count := 0
@@ -243,11 +244,11 @@ func TestRetailDelete(t *testing.T) {
}
count += len(fromFoodList)
//for k, v := range fromFoodList {
// if err := api.RetailDelete(utils.Int2Str(k), poiCode, v.AppFoodCode); err != nil {
// fmt.Println(err)
// }
//}
for k, v := range fromFoodList {
if err := api.RetailDelete(utils.Int2Str(k), poiCode, v.AppFoodCode); err != nil {
fmt.Println(err)
}
}
//stockList := make([]*BareStoreFoodInfo, 0, 100)
//for _, fl := range fromFoodList {
// stockList = append(stockList, &BareStoreFoodInfo{