diff --git a/platformapi/mtwmapi/bill_list.go b/platformapi/mtwmapi/bill_list.go index 9089b7e7..b8c13eba 100644 --- a/platformapi/mtwmapi/bill_list.go +++ b/platformapi/mtwmapi/bill_list.go @@ -1,6 +1,7 @@ package mtwmapi import ( + "fmt" "git.rosy.net.cn/baseapi/utils" ) @@ -56,7 +57,8 @@ func (a *API) GetStoreBillList(param *Bill) (map[string]*SettleOrderList, []*Bil if settleID == 0 { settleID = utils.Str2Int64(data.Data[i].SettleSettingId) } - + fmt.Println(fmt.Sprintf("------:%d", data.Data[i].PromotionServiceFee)) + fmt.Println(fmt.Sprintf("------2:%d", data.Data[i].BillChargeType)) //settle, ok := orderSettle[data.Data[i].WmOrderViewId] //if !ok { // settle = &SettleOrderList{OrderId: data.Data[i].WmOrderViewId} @@ -148,6 +150,7 @@ type BillListData struct { UserPayShippingAmount int64 `json:"userPayShippingAmount"` // 用户支付配送费,为运费优惠前的金额,单位分。 UserOnlinePayAmount int64 `json:"userOnlinePayAmount"` // 用户在线支付金额,为用户实际支付的订单总金额,单位分。 UserOfflinePayAmount int64 `json:"userOfflinePayAmount"` // 用户线下支付金额,单位分。目前美团订单仅支持在线支付。 + PromotionServiceFee int64 `json:"promotionServiceFee"` // 推广服务费,单位分 Rate int64 `json:"rate"` // 平台服务费的费率,单位百分比(%)。是商家在美团平台建店时,与美团协议约定的每单抽佣比例。 Bottom int64 `json:"bottom"` // 保底金额,单位元。是商家在美团平台建店时,与美团协议约定的每单保底抽佣金额。 RefundId int64 `json:"refund_id"` // 退款id,与订单退款消息接口中退款id的值相对应。 目前只有在结算类型(billChargeType)为:2,6,7,26,27时,该字段会有合法值;其他结算类型下,该字段值无意义。当billChargeType=2时,该字段的取值与订单ID相同。 diff --git a/platformapi/mtwmapi/bill_list_test.go b/platformapi/mtwmapi/bill_list_test.go index ab00432c..de89ad5b 100644 --- a/platformapi/mtwmapi/bill_list_test.go +++ b/platformapi/mtwmapi/bill_list_test.go @@ -10,9 +10,9 @@ import ( func TestBillList(t *testing.T) { now := time.Now() from := time.Date(now.Year(), now.Month(), now.Day()-5, 0, 0, 0, 0, time.Local) - to := time.Date(now.Year(), now.Month(), now.Day()-2, 23, 59, 59, 59, time.Local) + to := time.Date(now.Year(), now.Month(), now.Day()-1, 23, 59, 59, 59, time.Local) param := &Bill{ - AppPoiCode: "4418003", + AppPoiCode: "14799080", StartDate: from.Unix(), EndDate: to.Unix(), Offset: 0, diff --git a/platformapi/mtwmapi/poi_test.go b/platformapi/mtwmapi/poi_test.go index 3fc27d4a..fad75f40 100644 --- a/platformapi/mtwmapi/poi_test.go +++ b/platformapi/mtwmapi/poi_test.go @@ -4,6 +4,8 @@ import ( "encoding/json" "fmt" "git.rosy.net.cn/baseapi/utils" + "sort" + "strconv" "strings" "testing" "time" @@ -24,9 +26,113 @@ func TestPoiGetIDs(t *testing.T) { // t.Log(result) } +func TestTime(t *testing.T) { + storeTime := "07:00-19:30" + time2 := strings.Split(storeTime, ";") + aa := int(time.Now().Weekday()) + if aa == 0 { + aa = 7 + } + if len(time2) == 1 { + aa = 1 + } + intervals, err := parseIntervals(time2[aa-1]) + if err != nil { + fmt.Printf("解析错误: %v\n", err) + return + } + + merged := mergeIntervals(intervals) + + totalMinutes := 0 + for _, iv := range merged { + totalMinutes += iv.end - iv.start + } + + hours := totalMinutes / 60 + mins := totalMinutes % 60 + + fmt.Printf("✅ 总营业时长: %d 小时 %d 分钟(共 %d 分钟)\n", hours, mins, totalMinutes) +} + +// timeToMinutes 将 "HH:MM" 转为当天第几分钟(0 ~ 1439) +func timeToMinutes(t string) (int, error) { + parts := strings.Split(t, ":") + if len(parts) != 2 { + return 0, fmt.Errorf("invalid time format: %s", t) + } + h, err := strconv.Atoi(parts[0]) + if err != nil || h < 0 || h > 23 { + return 0, fmt.Errorf("invalid hour in %s", t) + } + m, err := strconv.Atoi(parts[1]) + if err != nil || m < 0 || m > 59 { + return 0, fmt.Errorf("invalid minute in %s", t) + } + return h*60 + m, nil +} + +// parseIntervals 解析 "00:00-01:00,01:05-23:59" → []interval +type interval struct { + start, end int // minutes since 00:00 +} + +func parseIntervals(s string) ([]interval, error) { + var intervals []interval + for _, seg := range strings.Split(s, ",") { + seg = strings.TrimSpace(seg) + if seg == "" { + continue + } + parts := strings.Split(seg, "-") + if len(parts) != 2 { + return nil, fmt.Errorf("invalid interval format: %s", seg) + } + startMins, err := timeToMinutes(strings.TrimSpace(parts[0])) + if err != nil { + return nil, err + } + endMins, err := timeToMinutes(strings.TrimSpace(parts[1])) + if err != nil { + return nil, err + } + if startMins > endMins { + return nil, fmt.Errorf("start after end in interval: %s", seg) + } + intervals = append(intervals, interval{start: startMins, end: endMins}) + } + return intervals, nil +} + +// mergeIntervals 合并重叠/相邻区间(如 [0,60], [65,1439] → 保留两个;若 [0,60], [60,120] → 可合并为 [0,120]) +func mergeIntervals(ints []interval) []interval { + if len(ints) == 0 { + return ints + } + // 排序 + sort.Slice(ints, func(i, j int) bool { + return ints[i].start < ints[j].start + }) + + merged := make([]interval, 0, len(ints)) + curr := ints[0] + for i := 1; i < len(ints); i++ { + if ints[i].start <= curr.end { // 重叠或紧邻(如 end=60, next.start=60 → 合并) + if ints[i].end > curr.end { + curr.end = ints[i].end + } + } else { + merged = append(merged, curr) + curr = ints[i] + } + } + merged = append(merged, curr) + return merged +} + func Test1111(t *testing.T) { storeIds := []int64{ - 12524795, + 31984867, } for k, v := range storeIds { @@ -252,7 +358,7 @@ func TestPoiSettleSettlementList(t *testing.T) { } func TestCommentScore(t *testing.T) { - result, err := api.CommentScore("11182878") + result, err := api.CommentScore("31984867") if err != nil { t.Fatal(err) } diff --git a/platformapi/mtwmapi/shipping_test.go b/platformapi/mtwmapi/shipping_test.go index 41d98b87..c32a3b05 100644 --- a/platformapi/mtwmapi/shipping_test.go +++ b/platformapi/mtwmapi/shipping_test.go @@ -14,13 +14,28 @@ func TestShippingSave(t *testing.T) { } func TestShippingList(t *testing.T) { - result, err := api.ShippingList("7996691") + result, err := api.ShippingList("32054188") if err != nil { t.Fatal(err) } + shippingList := make([]ShippingList, 0, 0) + for _, v := range result { + shippingList = append(shippingList, ShippingList{ + TimeRange: utils.Interface2String(v["time_range"]), + MinPrice: utils.MustInterface2Float64(v["min_price"]), + ShippingFee: utils.MustInterface2Float64(v["shipping_fee"]), + }) + } + t.Log(utils.Format4Output(shippingList, false)) t.Log(utils.Format4Output(result, false)) } +type ShippingList struct { + TimeRange string `json:"time_range"` // 配送生效时间范围 + MinPrice float64 `json:"min_price"` // 最小起送价 + ShippingFee float64 `json:"shipping_fee"` // 配送费 +} + func TestShippingFetch(t *testing.T) { result, err := api.ShippingFetch("7963096") if err != nil { diff --git a/platformapi/weixinapi/sns_test.go b/platformapi/weixinapi/sns_test.go index 7c17ee3d..2bc66139 100644 --- a/platformapi/weixinapi/sns_test.go +++ b/platformapi/weixinapi/sns_test.go @@ -52,13 +52,13 @@ func TestSNSSendGoodsOrder(t *testing.T) { OutTradeNo string `json:"out_trade_no"` }{ OrderNumberType: 2, - TransactionId: "4200003088202603279879861111", + TransactionId: "4200003049202603304158365187", }, LogisticsType: 1, DeliveryMode: 1, IsAllDelivered: false, ShippingList: append([]ShippingList{}, ShippingList{ - TrackingNo: "88512338325663", + TrackingNo: "88512585637609", ExpressCompany: "YD", ItemDesc: "背心袋", Contact: struct { @@ -70,7 +70,7 @@ func TestSNSSendGoodsOrder(t *testing.T) { Payer: struct { Openid string `json:"openid"` }{ - Openid: "ojWb10NolTtLz3w3YRxYq92NIO2U", + Openid: "ojWb10EZ__SL_Sx34Sgp8I90YMNo", }, }