- 改Struct2MapWithIgnore为递归

This commit is contained in:
gazebo
2019-04-04 22:34:32 +08:00
parent c3e3c32d44
commit 9e18764213
3 changed files with 71 additions and 18 deletions

View File

@@ -29,7 +29,7 @@ type OrderDiscountRuleRequest struct {
DiscountAmount int `json:"discountAmount"`
UpperLimitCount int `json:"upperLimitCount"`
LowerLimitCount int `json:"lowerLimitCount"`
DiscountRate int `json:"discountRate"`
DiscountRate float32 `json:"discountRate"`
AddPrice int `json:"addPrice"` // 分
GiftList []*OrderDiscountGift `json:"giftList"`
LadderLimit int `json:"ladderLimit"`
@@ -85,17 +85,28 @@ type ActivityOpQueryInfoResponse struct {
var (
ignoreOrderDiscountActivity = OrderDiscountActivity{}
ignoreOrderDiscountRuleRequest = OrderDiscountRuleRequest{}
)
func (a *API) OrderDiscountSubmitActivity(actInfo *OrderDiscountActivity) (activityID int64, err error) {
result, err := a.AccessAPINoPage("orderdiscount/submitActivity", utils.Struct2MapWithIgnore(actInfo, map[string]interface{}{
ignoreOrderDiscountSubmitActivityMap = map[string]interface{}{
"outStationNos": ignoreOrderDiscountActivity.OutStationNos,
"stationNos": ignoreOrderDiscountActivity.StationNos,
"outSkuIds": ignoreOrderDiscountActivity.OutSkuIds,
"skuIds": ignoreOrderDiscountActivity.SkuIds,
"limitUserTotalNumber": ignoreOrderDiscountActivity.LimitUserTotalNumber,
"ruleRequestList": ignoreOrderDiscountActivity.RuleRequestList,
}), nil, nil, nil)
"lowerLimitAmount": ignoreOrderDiscountRuleRequest.LowerLimitAmount,
"discountAmount": ignoreOrderDiscountRuleRequest.DiscountAmount,
"upperLimitCount": ignoreOrderDiscountRuleRequest.UpperLimitCount,
"lowerLimitCount": ignoreOrderDiscountRuleRequest.LowerLimitCount,
"discountRate": ignoreOrderDiscountRuleRequest.DiscountRate,
"addPrice": ignoreOrderDiscountRuleRequest.AddPrice,
"giftList": ignoreOrderDiscountRuleRequest.GiftList,
"ladderLimit": ignoreOrderDiscountRuleRequest.LadderLimit,
}
)
func (a *API) OrderDiscountSubmitActivity(actInfo *OrderDiscountActivity) (activityID int64, err error) {
result, err := a.AccessAPINoPage("orderdiscount/submitActivity", utils.Struct2MapWithIgnore(actInfo, ignoreOrderDiscountSubmitActivityMap), nil, nil, nil)
if err == nil {
return utils.MustInterface2Int64((result.(map[string]interface{}))["activityId"]), nil
}
@@ -105,10 +116,8 @@ func (a *API) OrderDiscountSubmitActivity(actInfo *OrderDiscountActivity) (activ
func (a *API) OrderDiscountQuerySubmitActivityResult(activityID int64) (response *ActivityOpQueryResultResponse, err error) {
result, err := a.AccessAPINoPage("orderdiscount/querySubmitActivityResult", map[string]interface{}{
"activityId": activityID,
"sourceFrom": 3,
"operator": "",
"traceId": "",
"version": "",
"operator": "jxc4",
"traceId": utils.GetUUID(),
}, nil, nil, nil)
if err == nil {
resultMap := result.(map[string]interface{})

View File

@@ -2,10 +2,32 @@ package jdapi
import (
"testing"
"time"
"git.rosy.net.cn/baseapi/utils"
)
func TestOrderDiscountSubmitActivity(t *testing.T) {
actID, err := api.OrderDiscountSubmitActivity(&OrderDiscountActivity{})
actInfo := &OrderDiscountActivity{
OutActivityID: utils.GetUUID(),
PromName: "测试0404",
PromType: OrderDiscountActivityTypeManJian,
BeginTime: utils.Time2Str(time.Now().Add(1 * time.Hour)),
EndTime: utils.Time2Str(time.Now().Add(48 * time.Hour)),
ParticipationMode: ParticipationModeAllSku,
Display: "hello",
OutStationNos: []string{"25"},
OutSkuIds: []string{"5199"},
LimitUserTotalNumber: 1,
RuleRequestList: []*OrderDiscountRuleRequest{
&OrderDiscountRuleRequest{
LowerLimitAmount: 100,
DiscountAmount: 1000,
DiscountRate: 0.5,
},
},
}
actID, err := api.OrderDiscountSubmitActivity(actInfo)
if err != nil {
t.Fatal(err)
}

View File

@@ -454,8 +454,6 @@ func FlatMap(in map[string]interface{}) map[string]interface{} {
vMap = FlatMap(vMap)
maps = append(maps, vMap)
keys = append(keys, k)
} else {
fmt.Printf("%s is %s\n", k, reflect.TypeOf(v).String())
}
}
if len(maps) > 0 {
@@ -473,14 +471,38 @@ func Struct2FlatMap(obj interface{}) map[string]interface{} {
return FlatMap(m)
}
func Struct2MapWithIgnore(obj interface{}, ignoreValues map[string]interface{}) map[string]interface{} {
mapData := Struct2FlatMap(obj)
for k, v := range ignoreValues {
// todo 性能考虑?
if fmt.Sprint(mapData[k]) == fmt.Sprint(v) {
delete(mapData, k)
func removeIgnoreFields(data interface{}, ignoreValues map[string]interface{}) {
dataType := reflect.TypeOf(data).Kind()
if dataType == reflect.Map {
inMap := data.(map[string]interface{})
for k, v := range inMap {
// fmt.Printf("k:%s v:%v, ignoreValues[k]:%v\n", k, v, ignoreValues[k])
if fmt.Sprint(ignoreValues[k]) == fmt.Sprint(v) {
delete(inMap, k)
} else {
fieldType := reflect.TypeOf(v).Kind()
if fieldType == reflect.Map || fieldType == reflect.Slice {
removeIgnoreFields(v, ignoreValues)
}
}
}
} else if dataType == reflect.Slice {
dataList := Interface2Slice(data)
for _, v := range dataList {
removeIgnoreFields(v, ignoreValues)
}
}
// mapData := data.(map[string]interface{})
// for k, v := range ignoreValues {
// if fmt.Sprint(mapData[k]) == fmt.Sprint(v) {
// delete(mapData, k)
// }
// }
}
func Struct2MapWithIgnore(obj interface{}, ignoreValues map[string]interface{}) map[string]interface{} {
mapData := Struct2FlatMap(obj)
removeIgnoreFields(mapData, ignoreValues)
return mapData
}