1
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package mtwmapi
|
package mtwmapi
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -56,7 +57,8 @@ func (a *API) GetStoreBillList(param *Bill) (map[string]*SettleOrderList, []*Bil
|
|||||||
if settleID == 0 {
|
if settleID == 0 {
|
||||||
settleID = utils.Str2Int64(data.Data[i].SettleSettingId)
|
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]
|
//settle, ok := orderSettle[data.Data[i].WmOrderViewId]
|
||||||
//if !ok {
|
//if !ok {
|
||||||
// settle = &SettleOrderList{OrderId: data.Data[i].WmOrderViewId}
|
// settle = &SettleOrderList{OrderId: data.Data[i].WmOrderViewId}
|
||||||
@@ -148,6 +150,7 @@ type BillListData struct {
|
|||||||
UserPayShippingAmount int64 `json:"userPayShippingAmount"` // 用户支付配送费,为运费优惠前的金额,单位分。
|
UserPayShippingAmount int64 `json:"userPayShippingAmount"` // 用户支付配送费,为运费优惠前的金额,单位分。
|
||||||
UserOnlinePayAmount int64 `json:"userOnlinePayAmount"` // 用户在线支付金额,为用户实际支付的订单总金额,单位分。
|
UserOnlinePayAmount int64 `json:"userOnlinePayAmount"` // 用户在线支付金额,为用户实际支付的订单总金额,单位分。
|
||||||
UserOfflinePayAmount int64 `json:"userOfflinePayAmount"` // 用户线下支付金额,单位分。目前美团订单仅支持在线支付。
|
UserOfflinePayAmount int64 `json:"userOfflinePayAmount"` // 用户线下支付金额,单位分。目前美团订单仅支持在线支付。
|
||||||
|
PromotionServiceFee int64 `json:"promotionServiceFee"` // 推广服务费,单位分
|
||||||
Rate int64 `json:"rate"` // 平台服务费的费率,单位百分比(%)。是商家在美团平台建店时,与美团协议约定的每单抽佣比例。
|
Rate int64 `json:"rate"` // 平台服务费的费率,单位百分比(%)。是商家在美团平台建店时,与美团协议约定的每单抽佣比例。
|
||||||
Bottom int64 `json:"bottom"` // 保底金额,单位元。是商家在美团平台建店时,与美团协议约定的每单保底抽佣金额。
|
Bottom int64 `json:"bottom"` // 保底金额,单位元。是商家在美团平台建店时,与美团协议约定的每单保底抽佣金额。
|
||||||
RefundId int64 `json:"refund_id"` // 退款id,与订单退款消息接口中退款id的值相对应。 目前只有在结算类型(billChargeType)为:2,6,7,26,27时,该字段会有合法值;其他结算类型下,该字段值无意义。当billChargeType=2时,该字段的取值与订单ID相同。
|
RefundId int64 `json:"refund_id"` // 退款id,与订单退款消息接口中退款id的值相对应。 目前只有在结算类型(billChargeType)为:2,6,7,26,27时,该字段会有合法值;其他结算类型下,该字段值无意义。当billChargeType=2时,该字段的取值与订单ID相同。
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ import (
|
|||||||
func TestBillList(t *testing.T) {
|
func TestBillList(t *testing.T) {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
from := time.Date(now.Year(), now.Month(), now.Day()-5, 0, 0, 0, 0, time.Local)
|
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{
|
param := &Bill{
|
||||||
AppPoiCode: "4418003",
|
AppPoiCode: "14799080",
|
||||||
StartDate: from.Unix(),
|
StartDate: from.Unix(),
|
||||||
EndDate: to.Unix(),
|
EndDate: to.Unix(),
|
||||||
Offset: 0,
|
Offset: 0,
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
|
"sort"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@@ -24,9 +26,113 @@ func TestPoiGetIDs(t *testing.T) {
|
|||||||
// t.Log(result)
|
// 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) {
|
func Test1111(t *testing.T) {
|
||||||
storeIds := []int64{
|
storeIds := []int64{
|
||||||
12524795,
|
31984867,
|
||||||
}
|
}
|
||||||
|
|
||||||
for k, v := range storeIds {
|
for k, v := range storeIds {
|
||||||
@@ -252,7 +358,7 @@ func TestPoiSettleSettlementList(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestCommentScore(t *testing.T) {
|
func TestCommentScore(t *testing.T) {
|
||||||
result, err := api.CommentScore("11182878")
|
result, err := api.CommentScore("31984867")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,13 +14,28 @@ func TestShippingSave(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestShippingList(t *testing.T) {
|
func TestShippingList(t *testing.T) {
|
||||||
result, err := api.ShippingList("7996691")
|
result, err := api.ShippingList("32054188")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
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))
|
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) {
|
func TestShippingFetch(t *testing.T) {
|
||||||
result, err := api.ShippingFetch("7963096")
|
result, err := api.ShippingFetch("7963096")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -52,13 +52,13 @@ func TestSNSSendGoodsOrder(t *testing.T) {
|
|||||||
OutTradeNo string `json:"out_trade_no"`
|
OutTradeNo string `json:"out_trade_no"`
|
||||||
}{
|
}{
|
||||||
OrderNumberType: 2,
|
OrderNumberType: 2,
|
||||||
TransactionId: "4200003088202603279879861111",
|
TransactionId: "4200003049202603304158365187",
|
||||||
},
|
},
|
||||||
LogisticsType: 1,
|
LogisticsType: 1,
|
||||||
DeliveryMode: 1,
|
DeliveryMode: 1,
|
||||||
IsAllDelivered: false,
|
IsAllDelivered: false,
|
||||||
ShippingList: append([]ShippingList{}, ShippingList{
|
ShippingList: append([]ShippingList{}, ShippingList{
|
||||||
TrackingNo: "88512338325663",
|
TrackingNo: "88512585637609",
|
||||||
ExpressCompany: "YD",
|
ExpressCompany: "YD",
|
||||||
ItemDesc: "背心袋",
|
ItemDesc: "背心袋",
|
||||||
Contact: struct {
|
Contact: struct {
|
||||||
@@ -70,7 +70,7 @@ func TestSNSSendGoodsOrder(t *testing.T) {
|
|||||||
Payer: struct {
|
Payer: struct {
|
||||||
Openid string `json:"openid"`
|
Openid string `json:"openid"`
|
||||||
}{
|
}{
|
||||||
Openid: "ojWb10NolTtLz3w3YRxYq92NIO2U",
|
Openid: "ojWb10EZ__SL_Sx34Sgp8I90YMNo",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user