212 lines
17 KiB
Go
212 lines
17 KiB
Go
package mtwmapi
|
||
|
||
import (
|
||
"fmt"
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
)
|
||
|
||
const (
|
||
BillChargeTypeOrder = 1 // 外卖订单
|
||
BillChargeTypeWayBillFee = 3 // 配送费
|
||
BillChargeTypeTimingFee = 10 // 定时宝,保险费
|
||
)
|
||
|
||
//#region 获取门店订单的结算信息 bill/list
|
||
|
||
type Bill struct {
|
||
AppPoiCode string `json:"app_poi_code"` // APP方门店id,传商家中台系统里门店的编码。如商家在操作绑定门店至开放平台应用中时,未绑定三方门店id信息,则默认APP方门店id与美团门店id相同。
|
||
StartDate int64 `json:"start_date"` // 秒级时间戳
|
||
EndDate int64 `json:"end_date"` // 秒级时间戳
|
||
Offset int64 `json:"offset"`
|
||
Limit int64 `json:"limit"`
|
||
AccessToken string `json:"access_token"`
|
||
}
|
||
|
||
// GetStoreBillList 获取门店的订单账单
|
||
/*
|
||
1.金额类字段单位使用“分”
|
||
2.当日10点前不能查询昨日账单。
|
||
3.开始日期和结束日期相隔不能超过7天。
|
||
4.仅支持查询90天内的账单。
|
||
5.如订单在状态完成之前取消了,则该订单不会记账,本接口不会查询到该订单的账单信息。
|
||
6.商家如需对接,请按如下流程申请开通接口权限:请商家发送邮件至 MT.lingshou.open@meituan.com邮件标题:【appid+appname】开通日账单接口权限申请 邮件内容:需包括但不限于以下几点:
|
||
1)需开通账单接口调用权限的应用appid、appname;
|
||
2)开通的目的或背景;
|
||
3)想要实现的效果;
|
||
4)预计开发周期和上线时间;
|
||
5)商家公司授权开通日账单接口的证明。(点击下载授权证明模板,授权证明以附件形式提供。)*/
|
||
func (a *API) GetStoreBillList(param *Bill) (map[string]*SettleOrderList, []*BillListData, int64, error) {
|
||
// 门店订单结算信息(配送费和定时保险费)
|
||
//orderSettle := make(map[string]*SettleOrderList, 0)
|
||
// 门店订单的结算id
|
||
var settleID int64 = 0
|
||
// 罚款类目
|
||
fineList := make([]*BillListData, 0, 0)
|
||
for {
|
||
result, err := a.AccessAPI3("bill/list", true, utils.Struct2Map(param, "", false))
|
||
if err != nil {
|
||
return nil, nil, 0, err
|
||
}
|
||
|
||
var data *StoreBillListRes
|
||
if err := utils.Map2StructByJson(result, &data, false); err != nil {
|
||
return nil, nil, 0, err
|
||
}
|
||
|
||
for i := 0; i < len(data.Data); i++ {
|
||
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}
|
||
//}
|
||
switch data.Data[i].BillChargeType {
|
||
//case BillChargeTypeOrder: // 平台结算
|
||
// settle.PlatformSettlement = data.Data[i].SettleAmount
|
||
//case BillChargeTypeWayBillFee: // 运费
|
||
// settle.DeliveryFee = data.Data[i].SettleAmount
|
||
//case BillChargeTypeTimingFee: // 定时宝
|
||
// settle.TimingFee = data.Data[i].SettleAmount
|
||
case 110, 117, 137, 168, 172, 173:
|
||
//"110": "违约金",
|
||
//"117": "聚合配送商罚款",
|
||
//"137": "风控扣款",
|
||
//"168": "系统服务费",
|
||
//"172": "订单取消跑腿罚款",
|
||
//"173": "订单取消跑腿罚款退款",
|
||
//"21": "推广账户充值",
|
||
fineList = append(fineList, &data.Data[i])
|
||
default:
|
||
continue
|
||
}
|
||
//orderSettle[data.Data[i].WmOrderViewId] = settle
|
||
}
|
||
|
||
if int64(data.ExtraInfo.TotalCount) >= (param.Offset * param.Limit) {
|
||
param.Offset += param.Limit
|
||
} else {
|
||
break
|
||
}
|
||
}
|
||
|
||
return nil, fineList, settleID, nil
|
||
}
|
||
|
||
// StoreBillListReq 门店结算查询条件
|
||
type StoreBillListReq struct {
|
||
AppPoiCode string `json:"app_poi_code"` // APP方门店id
|
||
StartDate int64 `json:"start_date"` // 开始时间
|
||
EndDate int64 `json:"end_date"` // 结束时间
|
||
Offset int64 `json:"offset"` // 偏移量
|
||
Limit int64 `json:"limit"` // 最大返回条数 (200)
|
||
}
|
||
|
||
// StoreBillListRes 门店结算返回值
|
||
type StoreBillListRes struct {
|
||
ExtraInfo ExtraInfoData `json:"extra_info"`
|
||
Data []BillListData `json:"data"`
|
||
}
|
||
|
||
type ExtraInfoData struct {
|
||
TotalCount int `json:"total_count"` // 当前查询时间条件下返回的账单数据总条数
|
||
SettleSum string `json:"settle_sum"` // 当前查询时间条件下返回的账单数据总结算金额(settleMilli汇总),单位分
|
||
}
|
||
|
||
type BillListData struct {
|
||
Id string `json:"id"` // 账单的唯一标识id
|
||
WmPoiName string `json:"wmPoiName"` // 门店名称
|
||
BillChargeType int `json:"billChargeType"` // 结算类型
|
||
ChargeFeeDesc string `json:"chargeFeeDesc"` // 结算类型描述
|
||
UserPayType int `json:"userPayType"` // 用户支付方式
|
||
WmPoiOrderPushDayseq string `json:"wmPoiOrderPushDayseq"` // 订单流水号
|
||
WmOrderViewId string `json:"wmOrderViewId"` // 订单展示ID
|
||
OrderTime string `json:"orderTime"` // 下单时间
|
||
FinishTime string `json:"finishTime"` // 完成时间
|
||
RefundTime string `json:"refundTime"` // 退款时间
|
||
OrderState int `json:"orderState"` // 订单当前状态
|
||
ShippingType int `json:"shippingType"` // 订单配送方式,以订单完成时刻的配送方式为准。参考值:10-商家自配;20-美团快送;30-美团跑腿;40-美团专送;50-代理商配送;60-到店取餐;70-聚合配送;80-企客光速达;90-企客快速达;100-企客及时达;120-企客全城送。
|
||
ShippingStatus int `json:"shippingStatus"` // 配送状态,参考值:0-未知;1-已推单;10-已抢单;15-已取餐;20-派送中;40-已送达;100-已取消。如为自配送订单,则配送状态默认为0。
|
||
AccountState int `json:"accountState"` // 结算状态,参考值:0-已入账;1-未入账。
|
||
DaliyBillDate string `json:"daliyBillDate"` // 账单日期
|
||
SettleBillDesc string `json:"settleBillDesc"` // 归账日期,返回结算周期。商家在美团平台上建店时,与美团协议约定的门店结算周期(自外卖信息首次发布之日起算)。如订单未入账(accountState=1),此字段返回null。
|
||
SettleAmount int64 `json:"settleAmount"` // 商家应收款,单位分。
|
||
TotalFoodAmount int64 `json:"totalFoodAmount"` // 商品总价(不含商品包装盒费),单位分。公式:商品总价=商品原价+赠品原价
|
||
BoxAmount int64 `json:"boxAmount"` // 商品包装盒费总价,单位分。
|
||
ActivityPoiAmount int64 `json:"activityPoiAmount"` // 商家活动总支出金额(含赠品成本),单位分。
|
||
ActivityMeituanAmount int64 `json:"activityMeituanAmount"` // 美团活动补贴总金额,单位分。
|
||
ActivityAgentAmount int64 `json:"activityAgentAmount"` // 代理商活动承担金额,单位分。
|
||
PlatformChargeFee int64 `json:"platformChargeFee"` // 平台服务费,单位分。
|
||
PerformanceServiceFee int64 `json:"performanceServiceFee"` // 订单履约服务费金额,单位分。如订单无履约服务费,则返回0。(订单履约服务费金额=基础价格+距离收费+重量收费+节假日收费+品类收费+时段收费)
|
||
BaseShippingAmount int64 `json:"baseShippingAmount"` // 履约服务费-基础价格,单位分
|
||
Distance int64 `json:"distance"` // 履约服务费-导航距离,获取的导航距离,单位米
|
||
DistanceFee int64 `json:"distanceFee"` // 履约服务费-距离收费,距离加价费用,单位分
|
||
WeightChargeFee int64 `json:"weightChargeFee"` // 履约服务费-重量收费,重量加价费用,单位分
|
||
HolidayChargeFee int64 `json:"holidayChargeFee"` // 履约服务费-节假日收费,单位分
|
||
CategoryChargeFee int64 `json:"categoryChargeFee"` // 履约服务费-品类收费,单位分
|
||
SlaFee int64 `json:"slaFee"` // 履约服务费-时段收费,时段加价费用,单位分
|
||
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相同。
|
||
Discount int64 `json:"discount"` // 分成折扣,目前默认返回100。
|
||
SettleMilli int64 `json:"settleMilli"` // 结算金额,单位毫。
|
||
SettleSettingId string `json:"settleSettingId"` // 结算id,表示账期等信息的结算设置id。同一门店的结算设置不变的情况下,结算id不变。
|
||
WmDonationAmount int64 `json:"wmDonationAmount"` // 青山计划-公益捐赠金额,单位分。
|
||
WmDoggyBagAmount int64 `json:"wmDoggyBagAmount"` // 商超-打包袋金额,单位分。注意,打包袋费用规则为: (1)订单打包袋如由美团提供给商家,费用结算美团平台,则打包袋字段wmDoggyBagAmount为0; (2)订单打包袋如由商家自己提供,费用结算给商家,则打包袋字段wmDoggyBagAmount为商家设置金额。
|
||
DealTip int64 `json:"dealTip"` // 配送小费,单位分。
|
||
ProductPreferences float64 `json:"productPreferences"` // 商家活动支出分摊到商品上的优惠总金额,单位分。
|
||
NotProductPreferences float64 `json:"notProductPreferences"` // 商家活动支出的未分摊到商品上的总金额,单位分。
|
||
WmAppOrderSkuBenefitDetailList []WmAppOrderSkuBenefitDetailList `json:"wmAppOrderSkuBenefitDetailList"` // 商家承担成本的商品优惠分摊明细,json格式数组。
|
||
WmAppOrderSkuShippingDetailList []MedicalInsuranceFee `json:"wmAppOrderSkuShippingDetailList"` // 商家承担配送费活动分摊明细。
|
||
ChargeFeeType int64 `json:"chargeFeeType"` // 用来标识退款是部分退还是退差价,billChargeType为26时,该值为1代表 退差价,0为部分退。billChargeType为其他值得情况,忽略该字段
|
||
MedicalInsuranceFee string `json:"medicalInsuranceFee"` // 医保报销费用字段(单位分),只有医保报销的商家这个字段有值
|
||
}
|
||
|
||
type WmAppOrderSkuBenefitDetailList struct {
|
||
AppSpuCode string `json:"app_spu_code"` // (原app_food_code字段)APP方商品的id,即商家中台系统里商品的编码:(1) 同一门店内商品id不允许重复;(2)字段信息限定长度不超过128个字符。
|
||
Name string `json:"name"` // 商品名称。
|
||
SkuId string `json:"sku_id"` // 商品sku的规格编码,SKU码/货号。
|
||
Count int `json:"count"` // 商品数量 注:当字段count=0时,此账单记录为商家发起的按重量退差价,但结算类型仍为“26-闪购品类订单部分退款”(billChargeType=26)。
|
||
TotalOriginPrice float64 `json:"totalOriginPrice"` // 商品原价总价(含商品包装盒费),单位分。
|
||
TotalActivityPrice float64 `json:"totalActivityPrice"` //商品优惠总金额,包括商家承担金额和美团承担金额,单位分。
|
||
TotalReducePrice float64 `json:"totalReducePrice"` // 商品优惠总金额,包括商家承担金额和美团承担金额,单位分。
|
||
WmAppOrderActDetails []wmAppOrderActDetails // 商品参与活动详情,json格式数组。
|
||
|
||
}
|
||
|
||
type wmAppOrderActDetails struct {
|
||
ActId int64 `json:"act_id"` // 商品参与活动的活动id
|
||
MTType int `json:"type"` // 参与活动的活动类型,参考值:1-首单立减;2-满减优惠;4-套餐惠赠优惠;9-美团红包;11-提前下单减优惠;17-折扣商品;18-美团专送再减;20-第二份半价优惠;22-门店新客立减;27-指定商品满减;40-加价购;43-X元M件;46-超值换购;66-会员折扣商品;101-商家代金券优惠;117-商品优惠券;118-商品折扣券;900-首单红包优惠。
|
||
PoiCharge float64 `json:"poiCharge"` // 本活动id及活动类型下商家承担的金额,单位分。
|
||
}
|
||
|
||
type MedicalInsuranceFee struct {
|
||
Name string `json:"name"` // 商品名称。
|
||
SkuId string `json:"sku_id"` // 商品sku的规格编码,SKU码/货号。
|
||
Count int `json:"count"` // 商品数量 注:当字段count=0时,此账单记录为商家发起的按重量退差价,但结算类型仍为“26-闪购品类订单部分退款”(billChargeType=26)。
|
||
TotalOriginPrice float64 `json:"totalOriginPrice"` // 商品原价总价(含商品包装盒费),单位分。
|
||
TotalPoiCharge float64 `json:"totalPoiCharge"` // 配送费优惠商家承担总金额,单位分。
|
||
WmAppOrderShippingActDetailList []wmAppOrderShippingActDetailList `json:"wmAppOrderShippingActDetailList"` // sku商品参与的配送费活动详情。
|
||
}
|
||
|
||
type wmAppOrderShippingActDetailList struct {
|
||
MTType int `json:"type"` // 参与配送费活动的活动类型,参考值:9-美团红包,21-会员免配送费,25-立减配送费,30-满减配送费,36-新人减配送费,54-新客专享减配送费,59-新客专享减配送费,300-商家会员减配送费,302-预订单减配送费,304-减免运费券,101-商家代金券优惠,305-津贴优惠。
|
||
PoiCharge float64 `json:"poiCharge"` // 商家承担金额,单位分。
|
||
}
|
||
|
||
// SettleOrderList 返回值
|
||
type SettleOrderList struct {
|
||
OrderId string `json:"order_id"` // 订单id
|
||
TimingFee int64 `json:"timing_fee"` // 准时保险费
|
||
DeliveryFee int64 `json:"delivery_fee"` // 配送费
|
||
PlatformSettlement int64 `json:"platform_settlement"` // 平台结算金额
|
||
}
|
||
|
||
//#endregion
|