- 使用mapstructure进行map到struct的映射,简化API编写

This commit is contained in:
gazebo
2019-04-07 23:22:47 +08:00
parent 2ae96494a7
commit 5afcabae4c
4 changed files with 79 additions and 292 deletions

View File

@@ -28,32 +28,32 @@ type ActivityRule struct {
}
type ActivityInfo struct {
ActivityID int64 `json:"-"`
ActivityID int64 `json:"activityID,omitempty"`
ActivityName string `json:"activity_name"`
ActivityType int `json:"activity_type"`
StartTime int64 `json:"start_time"` // 活动开始时间,时间戳,需大于当前时间。
EndTime int64 `json:"end_time"`
OpenTime string `json:"open_time"` // "22:47"
CloseTime string `json:"close_time"`
WeekDay string `json:"weekday"` // 活动开始时间段内每周具体星期几支持默认活动生效时间段内全周支持。0,1,2,3,4,5,6代表周日到周六。
ActivityPlatform int `json:"activity_platform"`
IsConflictActivity int `json:"is_conflict_activity"`
DayLimit int `json:"day_limit"` // 每日限购X单1-1000整数。
OrderLimit int `json:"order_limit"` // 每单限购商品数量。直降用到满减没用到。1-1000整数。
ActivityDesc string `json:"activity_desc"`
ShowCategory string `json:"show_category"`
PromotionSkuDesc string `json:"promotion_sku_desc"` // 店铺页活动商品的分类名称不超过8个字。
Rule []*ActivityRule `json:"rule"`
OpenTime string `json:"open_time,omitempty"` // "22:47"
CloseTime string `json:"close_time,omitempty"`
WeekDay string `json:"weekday,omitempty"` // 活动开始时间段内每周具体星期几支持默认活动生效时间段内全周支持。0,1,2,3,4,5,6代表周日到周六。
ActivityPlatform int `json:"activity_platform,omitempty"`
IsConflictActivity int `json:"is_conflict_activity,omitempty"`
DayLimit int `json:"day_limit,omitempty"` // 每日限购X单1-1000整数。
OrderLimit int `json:"order_limit,omitempty"` // 每单限购商品数量。直降用到满减没用到。1-1000整数。
ActivityDesc string `json:"activity_desc,omitempty"`
ShowCategory string `json:"show_category,omitempty"`
PromotionSkuDesc string `json:"promotion_sku_desc,omitempty"` // 店铺页活动商品的分类名称不超过8个字。
Rule []*ActivityRule `json:"rule,omitempty"`
BaiduShopID int64 `json:"-"`
ShowStatus int `json:"-"`
BaiduShopID int64 `json:"baiduShopID,omitempty"`
ShowStatus int `json:"showStatus,omitempty"`
}
type ActivitySkuInfo struct {
SkuID string `json:"sku_id"`
Stock int `json:"stock"`
PromotionPrice float32 `json:"special_price"` // 直降用
PromotionPrice float32 `json:"special_price"` // 直降用,复用
StoreUserLimit int `json:"store_user_limit"` // 直降用
}
@@ -78,18 +78,8 @@ type ActivitySkuListInfo struct {
SkuList []*ActivitySkuInfoEx `json:"sku_list"`
}
var (
ignoreActivityInfo = ActivityInfo{}
)
func (a *API) ActivityCreate(shopID string, baiduShopID, supplierID int64, activity *ActivityInfo) (activityID int64, err error) {
params := utils.Struct2MapWithIgnore(activity, map[string]interface{}{
"open_time": ignoreActivityInfo.OpenTime,
"close_time": ignoreActivityInfo.CloseTime,
"is_conflict_activity": ignoreActivityInfo.IsConflictActivity,
"order_limit": ignoreActivityInfo.OrderLimit,
"rule": ignoreActivityInfo.Rule,
})
params := utils.Struct2FlatMap(activity)
result, err := a.AccessAPI("activity.create", utils.MergeMaps(params, a.genShopIDParams(shopID, baiduShopID, supplierID)))
if err == nil {
return utils.Str2Int64(utils.Interface2String(result.Data.(map[string]interface{})["activity_id"])), nil
@@ -98,18 +88,7 @@ func (a *API) ActivityCreate(shopID string, baiduShopID, supplierID int64, activ
}
func (a *API) ActivityUpdate(activityID int64, shopID string, baiduShopID, supplierID int64, activity *ActivityInfo) (newActivityID int64, err error) {
params := utils.Struct2MapWithIgnore(activity, map[string]interface{}{
"open_time": ignoreActivityInfo.OpenTime,
"close_time": ignoreActivityInfo.CloseTime,
"weekday": ignoreActivityInfo.WeekDay,
"day_limit": ignoreActivityInfo.DayLimit,
"order_limit": ignoreActivityInfo.OrderLimit,
"activity_desc": ignoreActivityInfo.ActivityDesc,
"show_category": ignoreActivityInfo.ShowCategory,
"promotion_sku_desc": ignoreActivityInfo.PromotionSkuDesc,
"is_conflict_activity": ignoreActivityInfo.IsConflictActivity,
"rule": ignoreActivityInfo.Rule,
})
params := utils.Struct2FlatMap(activity)
params[KeyActivityID] = activityID
result, err := a.AccessAPI("activity.update", utils.MergeMaps(params, a.genShopIDParams(shopID, baiduShopID, supplierID)))
if err == nil {
@@ -130,39 +109,10 @@ func (a *API) ActivityGet(activityID int64, shopID string, baiduShopID, supplier
params[KeyActivityID] = activityID
result, err := a.AccessAPI("activity.get", params)
if err == nil {
dataMap := result.Data.(map[string]interface{})
activityInfo = &ActivityInfo{
ActivityID: utils.Str2Int64(utils.Interface2String(dataMap["activity_id"])),
ActivityName: utils.Interface2String(dataMap["activity_name"]),
ActivityType: int(utils.Str2Int64(utils.Interface2String(dataMap["activity_type"]))),
StartTime: utils.Str2Int64(utils.Interface2String(dataMap["start_time"])),
EndTime: utils.Str2Int64(utils.Interface2String(dataMap["end_time"])),
OpenTime: utils.Interface2String(dataMap["open_time"]),
CloseTime: utils.Interface2String(dataMap["close_time"]),
WeekDay: utils.Interface2String(dataMap["weekday"]),
ActivityPlatform: int(utils.Str2Int64(utils.Interface2String(dataMap["activity_platform"]))),
IsConflictActivity: int(utils.Str2Int64(utils.Interface2String(dataMap["is_conflict_activity"]))),
DayLimit: int(utils.Str2Int64(utils.Interface2String(dataMap["day_limit"]))),
OrderLimit: int(utils.Str2Int64(utils.Interface2String(dataMap["order_limit"]))),
ActivityDesc: utils.Interface2String(dataMap["activity_desc"]),
ShowCategory: utils.Interface2String(dataMap["show_category"]),
PromotionSkuDesc: utils.Interface2String(dataMap["promotion_sku_desc"]),
BaiduShopID: utils.Str2Int64(utils.Interface2String(dataMap["baidu_shop_id"])),
ShowStatus: int(utils.Str2Int64(utils.Interface2String(dataMap["show_status"]))),
}
if rule, ok := dataMap["rule"].([]interface{}); ok {
for _, v := range rule {
vMap := v.(map[string]interface{})
activityInfo.Rule = append(activityInfo.Rule, &ActivityRule{
Accords: int(utils.MustInterface2Int64(vMap["accords"])),
Sale: int(utils.MustInterface2Int64(vMap["sale"])),
})
}
}
return activityInfo, nil
activityInfo = &ActivityInfo{}
err = utils.Map2StructByJson(result.Data, activityInfo, true)
}
return nil, err
return activityInfo, err
}
func (a *API) ActivitySkuAddBatch(activityID int64, shopID string, baiduShopID int64, activityType int, skuList []*ActivitySkuInfo, isSkuIDCustom bool) (successIDs []string, err error) {
@@ -229,6 +179,15 @@ func (a *API) ActivitySkuList(activityID int64, shopID string, baiduShopID, supp
params["page"] = page
result, err = a.AccessAPI("activity.sku.list", params)
if err == nil {
// tmpActivityInfo := &ActivitySkuListInfo{}
// if err = utils.Map2StructByJson(result.Data, tmpActivityInfo, true); err != nil {
// return nil, err
// }
// if activityInfo == nil {
// activityInfo = tmpActivityInfo
// } else {
// activityInfo.SkuList = append(activityInfo.SkuList, tmpActivityInfo.SkuList...)
// }
resultMap := result.Data.(map[string]interface{})
if activityInfo == nil {
activityInfo = &ActivitySkuListInfo{