Files
baseapi/platformapi/mtwmapi/act.go
2019-04-02 22:34:35 +08:00

206 lines
6.6 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 mtwmapi
import (
"strings"
"git.rosy.net.cn/baseapi/utils"
)
const (
ActTypeStoreMoneyOff = 0
ActTypeSkuMoneyOff = 1
)
const (
// 指定商品满减活动状态
SkuMoneyOffStatusNew = 2 // 待生效
SkuMoneyOffStatusValid = 1 // 生效
SkuMoneyOffStatusExpired = 0 // 过期
// 全店满减活动状态
StoreMoneyOffStatusNew = 0 // 待生效
StoreMoneyOffStatusValid = 1 // 生效
StoreMoneyOffStatusExpired = 2 // 过期
)
type ActInfo struct {
ActIDs string `json:"act_ids"`
ActName string `json:"act_name"`
StartTime int64 `json:"start_time"` // 活动开始时间,单s位秒
EndTime int64 `json:"end_time"` // 活动结束时间,单位秒
ActType int `json:"act_type"`
Status int `json:"-"`
}
type ActDetail struct {
OriginalPrice float32 `json:"origin_price"` // 满
ActPrice float32 `json:"act_price"` // 减
}
type ActSkuInfo struct {
AppFoodCode string `json:"app_food_code"`
DayLimit int `json:"day_limit"`
Name string `json:"-"` // 设置操作时无用
}
type ActWholeInfo struct {
ActInfo *ActInfo `json:"act_info"`
ActRemark string `json:"act_remark"`
AppPoiCode string `json:"app_poi_code"`
ActDetails []*ActDetail `json:"act_details"`
}
type ActFoodsInfo struct {
ActInfo *ActInfo `json:"act_info"`
ActRemark string `json:"act_remark"`
AppPoiCode string `json:"app_poi_code"`
AppFoods []*ActSkuInfo `json:"app_foods"`
}
type ActData struct {
ItemID int64 `json:"item_id"` // 活动ID为什么这里又是int64
DayLimit int `json:"day_limit"` // 当日活动库存,只能为正整数或-1-1表示无限库存
}
func (a *API) FullDiscountBatchSave(poiCode string, actInfo *ActInfo, actList []*ActDetail, actSkuList []*ActSkuInfo) (err error) {
params := map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_info": string(utils.MustMarshal(actInfo)),
"act_details": string(utils.MustMarshal(actList)),
}
if actInfo.ActType == ActTypeSkuMoneyOff {
params["app_foods"] = string(utils.MustMarshal(actSkuList))
}
_, err = a.AccessAPI("act/full/discount/batchsave", false, params)
return err
}
func (a *API) FullDiscountList(poiCode string, actType int) (actInfoList []*ActWholeInfo, err error) {
result, err := a.AccessAPI("act/full/discount/list", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_type": actType,
})
if err == nil && result != nil {
for _, v := range result.([]interface{}) {
actMap := v.(map[string]interface{})
actWholeInfo := &ActWholeInfo{
ActInfo: interface2ActInfo(actMap["act_info"]),
ActRemark: utils.Interface2String(actMap["act_remark"]),
AppPoiCode: utils.Interface2String(actMap["app_poi_code"]),
}
actInfoList = append(actInfoList, actWholeInfo)
for _, v := range actMap["act_details"].([]interface{}) {
vMap := v.(map[string]interface{})
actWholeInfo.ActDetails = append(actWholeInfo.ActDetails, &ActDetail{
OriginalPrice: float32(utils.MustInterface2Float64(vMap["origin_price"])),
ActPrice: float32(utils.MustInterface2Float64(vMap["act_price"])),
})
}
}
return actInfoList, nil
}
return nil, err
}
func interface2ActInfo(actInfo interface{}) *ActInfo {
actInfoMap := actInfo.(map[string]interface{})
return &ActInfo{
ActIDs: utils.Interface2String(actInfoMap["act_ids"]),
StartTime: utils.MustInterface2Int64(actInfoMap["start_time"]),
EndTime: utils.MustInterface2Int64(actInfoMap["end_time"]),
Status: int(utils.MustInterface2Int64(actInfoMap["status"])),
}
}
func (a *API) FullDiscountDelete(poiCode string, actIDList []string, actType int) (err error) {
_, err = a.AccessAPI("act/full/discount/delete", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_ids": strings.Join(actIDList, ","),
"act_type": actType,
})
return err
}
func (a *API) FullDiscountFoodsBatchSave(poiCode, actID string, appFoodList []*ActSkuInfo) (err error) {
_, err = a.AccessAPI("act/full/discount/foods/batchsave", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_id": actID,
"app_foods": string(utils.MustMarshal(appFoodList)),
})
return err
}
func (a *API) FullDiscountFoodsList(poiCode, actID string) (actFoodsInfo *ActFoodsInfo, err error) {
pageSize := 200
for {
var result interface{}
offset := 0
result, err = a.AccessAPI("act/full/discount/foods/list", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_id": actID,
"limit": pageSize,
"offset": offset,
})
if err == nil && result != nil {
resultMap := result.(map[string]interface{})
if actFoodsInfo == nil {
actFoodsInfo = &ActFoodsInfo{
ActInfo: interface2ActInfo(resultMap["act_info"]),
ActRemark: utils.Interface2String(resultMap["act_remark"]),
AppPoiCode: utils.Interface2String(resultMap["app_poi_code"]),
}
}
actFoodsInfo.AppFoods = append(actFoodsInfo.AppFoods, interface2SkuInfoList(resultMap["app_foods"])...)
offset++
break
} else {
break
}
}
return nil, err
}
func interface2SkuInfoList(value interface{}) (actSkuList []*ActSkuInfo) {
for _, v := range value.([]interface{}) {
vMap := v.(map[string]interface{})
actSkuList = append(actSkuList, &ActSkuInfo{
AppFoodCode: utils.Interface2String(vMap["app_food_code"]),
DayLimit: int(utils.Interface2Int64WithDefault(vMap["day_limit"], 0)),
Name: utils.Interface2String(vMap["name"]),
})
}
return actSkuList
}
// 批量删除活动商品至指定商品满减活动
// appFoodCodeList 删除商品数量上限为100如果删除门店多个活动商品用英文逗号隔开
func (a *API) FullDiscountFoodsDelete(poiCode, actID string, appFoodCodeList []string) (err error) {
_, err = a.AccessAPI("act/full/discount/foods/delete", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_id": actID,
"app_food_codes": strings.Join(appFoodCodeList, ","),
})
return err
}
// 批量修改指定商品满减活动中商品的当日活动库存
func (a *API) FullDiscountFoodsDayLimit(poiCode, actID string, appFoodList []*ActSkuInfo) (err error) {
_, err = a.AccessAPI("act/full/discount/foods/daylimit", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_id": actID,
"app_foods": string(utils.MustMarshal(appFoodList)),
})
return err
}
// 批量修改零售折扣商品当日活动库存
func (a *API) RetailDiscountBatchStock(poiCode, actDataList []*ActData) (err error) {
_, err = a.AccessAPI("act/retail/discount/batchstock", false, map[string]interface{}{
KeyAppPoiCode: poiCode,
"act_data": string(utils.MustMarshal(actDataList)),
})
return err
}