Files
baseapi/platformapi/mtwmapi/order_test.go
邹宗楠 0356b0f92a 1
2025-08-04 11:39:13 +08:00

464 lines
16 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package mtwmapi
import (
"fmt"
"git.rosy.net.cn/baseapi/platformapi/jdapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/globals"
"math"
"strings"
"testing"
"time"
)
func TestOrderViewStatus(t *testing.T) {
result, err := api.OrderViewStatus(123)
if err != nil {
t.Fatal(err)
}
t.Log(result)
}
func TestTimne(t *testing.T) {
fmt.Println(utils.Interface2Int64WithDefault(1695292241, 0))
fmt.Println(getTimeFromTimestamp(utils.Interface2Int64WithDefault(1695292241, 0)))
}
func getTimeFromTimestamp(timeStamp int64) time.Time {
if timeStamp < 1538103149 { // 立即达订单给的是1而不是空01538103149不是特殊值只是一个任意之前的时间这样写可以处理
return utils.DefaultTimeValue
}
return utils.Timestamp2Time(timeStamp)
}
func TestOrderGetOrderDetail(t *testing.T) {
result, err := api.OrderGetOrderDetail(4001715692418465050, false)
if err != nil {
t.Fatal(err)
}
globals.SugarLogger.Debugf("%d", int(utils.MustInterface2Int64(result["day_seq"])))
globals.SugarLogger.Debugf("====%s", utils.Format4Output(result["poi_receive_detail_yuan"], false))
if len(result) == 0 {
t.Fatal("result should have value")
}
for k, v := range result {
fmt.Println(fmt.Sprintf("%s=%v", k, v))
}
//globals.SugarLogger.Debugf("%s", utils.Format4Output(result, false))
}
func TestJsuan(t *testing.T) {
fmt.Println(StandardPrice2Int2(-12.39))
}
func StandardPrice2Int2(value float64) int64 {
return int64(math.Round(value * 100))
}
func TestOrderGetPartRefundFoods(t *testing.T) {
result, err := api.OrderGetPartRefundFoods(93475541926981203)
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(result, false))
}
func TestOrderReceived(t *testing.T) {
err := api.OrderReceived(25236872740350976)
if err != nil {
t.Fatal(err)
}
}
func TestOrderConfirm(t *testing.T) {
err := api.OrderConfirm(2000844470023437537)
if utils.IsErrMatch(err, utils.Int2Str(ErrCodeOpFailed), []string{
"订单已经确认过了",
}) {
err = nil
} else {
globals.SugarLogger.Warnf("mtwm AcceptOrRefuseOrder orderID:%s failed with err:%v", "1", err)
}
if err != nil {
t.Fatal(err)
}
}
func TestOrderApplyPartRefund(t *testing.T) {
err := api.OrderApplyPartRefund(93495654059392270, "缺货", []*RefundSku{
&RefundSku{
AppFoodCode: "30831",
Count: 1,
},
})
if err != nil {
t.Fatal(err)
}
}
func TestOrderLogisticsStatus(t *testing.T) {
result, err := api.OrderLogisticsStatus(1100710754248464487)
if err != nil {
t.Fatal(err)
}
if result == nil {
t.Fatal("result should have value")
}
t.Log(utils.Format4Output(result, false))
}
func TestGetDeliveryPath(t *testing.T) {
data1, data2, err := api.GetDeliveryPath(1100718012566212160, "7290541")
fmt.Println(data1)
fmt.Println(data2)
fmt.Println(utils.Float64ToStr(float64(data1) / 1000000))
fmt.Println(utils.Float64ToStr(float64(data2) / 1000000))
fmt.Println(err)
}
func TestOrderLogisticsFee(t *testing.T) {
result, err := api.OrderLogisticsFee(1100709560902354698)
if err != nil {
t.Fatal(err)
}
if result == 0 {
t.Fatal("result should have value")
}
t.Log(utils.Format4Output(result, false))
}
func TestOrderBatchPullPhoneNumber(t *testing.T) {
result, err := api.OrderBatchPullPhoneNumber("5873_2705892", 0, MaxBatchPullPhoneNumberLimit)
t.Log(utils.Format4Output(result, false))
if err != nil {
t.Fatal(err)
}
}
func TestOrderGetRiderInfoPhoneNumber(t *testing.T) {
result, err := api.OrderGetRiderInfoPhoneNumber("8872485", 0, MaxBatchPullPhoneNumberLimit)
t.Log(utils.Format4Output(result, false))
if err != nil {
t.Fatal(err)
}
}
func TestGetOrderRefundDetail(t *testing.T) {
result, err := api.GetOrderRefundDetail(2801668233203841348, 0)
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(result, false))
}
func TestGetOrderRefundDetail2(t *testing.T) {
result, err := api.GetOrderRefundDetail(601112850243823799, 0)
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(result, false))
}
func TestGetOrderActDetaill(t *testing.T) {
result, err := api.GetOrderActDetail([]*GetOrderActDetailParam{
&GetOrderActDetailParam{
OrderID: 69760842061320598,
// ActParam: []*GetOrderActDetailParamAct{
// &GetOrderActDetailParamAct{
// Type: 1,
// },
// },
},
})
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(result, false))
}
func TestOrderRefundReject(t *testing.T) {
err := api.OrderRefundReject(27058923254735296, "测试")
// t.Log(utils.Format4Output(result, false))
if err != nil {
t.Fatal(err)
}
}
func TestOrderRefundAgree(t *testing.T) {
err := api.OrderRefundAgree(27058922456066076, "测试")
// t.Log(utils.Format4Output(result, false))
if err != nil {
t.Fatal(err)
}
}
func TestOrderCancel(t *testing.T) {
err := api.OrderCancel(27058922397679200, "取消", 1)
// t.Log(utils.Format4Output(result, false))
if err != nil {
t.Fatal(err)
}
}
func TestAa2(t *testing.T) {
time := time.Now().Unix()
fmt.Println(api.signParams(apiURL+"/oauth/authorize?", map[string]interface{}{
"timestamp": time,
"app_id": "5873",
"app_poi_code": "12422751",
"response_type": "token",
}), time)
}
func TestDeleving(t *testing.T) {
err := api.OrderLogisticsChange2Self(148815413321281654)
fmt.Println(strings.Contains(err.Error(), "1047"))
t.Fatal(err)
}
func TestOrderDelivering(t *testing.T) {
err := api.OrderDelivering(148815413321281654)
t.Fatal(err)
}
func TestApplyCompensation(t *testing.T) {
param := &ApplyCompensationRes{
OrderId: 3500902110034359123,
Reason: "申请退款",
ApplyStatus: 110,
Amount: 35.31,
//FoodData: nil,
}
err := api.ApplyCompensation(param)
if err != nil {
fmt.Println(err.Error())
}
}
func TestOrderStatusAndPsInfo(t *testing.T) {
api.OrderStatusAndPsInfo(map[string]interface{}{
"order_id": "2801206020864396574",
"third_carrier_order_id": "2801206020864396574",
"courier_name": "王勇",
"courier_phone": "18180822681",
"logistics_status": "40",
"latitude": "30.549650",
"longitude": "104.260709",
"logistics_provider_code": "10017",
})
}
func TestEcommerceGetOrderIdByPage(t *testing.T) {
orderIdList, err := api.EcommerceGetOrderIdByPage("23932637", time.Now().Add(-24*time.Hour), time.Now())
t.Log(orderIdList)
t.Log(err)
}
// TestUpdateSkuBoxFee 修改打包费
func TestUpdateSkuBoxFee(t *testing.T) {
toApi := New("5873", "41c479790a76f86326f89e8048964739", "", "token_qJalvtSnVB-hBeDvRLVN_w")
toApi.RetailBatchInitData(utils.GetUUID(), "12371130", []map[string]interface{}{
map[string]interface{}{
"app_food_code": "mtcode_1788146996860325928",
"category_name": "神价商品",
"unit": "罐",
"sequence": -361,
"tag_id": 200001294,
"upc": 6920226221352,
"description": "",
"price": 20,
"picture": `http://p0.meituan.net/retailsp/8e6cd87119cd6c36d2e1cdd1c5345ab266547.jpg,http://p0.meituan.net/retailsp/49856b31a8aa526d69931a160e7c18b841941.jpg,http://p1.meituan.net/retailsp/e590574f5a75e5fb1d576ded5d0418cf81638.jpg`,
"picture_contents": "",
"skus": []map[string]interface{}{
{
"isSellFlag": 1,
"price": "20.0",
"unit": "罐",
"available_times": map[string]string{"friday": "", "monday": "", "saturday": "", "sunday": "", "thursday": "", "tuesday": "", "wednesday": ""},
"sku_id": "mtcode_1788146996860325928",
"spec": "330ml*6罐",
"upc": "6920226221352",
"weight": "1980",
"limit_open_sync_stock_now": false,
"location_code": "",
"stock": 989,
},
},
"name": "【六罐装】可口可乐 碳酸饮料汽水饮料 330ml*6罐/件",
"min_order_count": 1,
"common_attr_value": `[{"attrId":1200000135,"attrName":"包装方式","valueList":[{"setValue":true,"setValueId":true,"value":"罐装","valueId":1300000333}]},{"attrId":1200000132,"attrName":"国产/进口","valueList":[{"setValue":true,"setValueId":true,"value":"国产","valueId":1300000003}]},{"attrId":1200000133,"attrName":"口味","valueList":[{"setValue":true,"setValueId":true,"value":"其他","valueId":1300000249}]},{"attrId":1200000204,"attrName":"是否含糖","valueList":[{"setValue":true,"setValueId":true,"value":"含糖","valueId":1300000468}]},{"attrId":1200000333,"attrName":"单件容量","valueList":[{"setValue":true,"setValueId":true,"value":"330ml","valueId":0}]},{"attrId":1200000210,"attrName":"商品类别","valueList":[{"setValue":true,"setValueId":true,"value":"可乐","valueId":1300000483}]},{"attrId":1200000094,"attrName":"产地","valueList":[{"setValue":true,"setValueId":true,"value":"中国","valueId":100000050}]},{"attrId":1200000088,"attrName":"品牌","valueList":[{"setValue":true,"setValueId":true,"value":"可口可乐Coca-Cola","valueId":1000557}]}]`,
"is_sold_out": 0,
},
})
}
func TestCopyMtToMT(t *testing.T) {
CopyMtToMT("1693690", "12371130", 20)
}
// CopyMtToMT 美团商品复制到美团
func CopyMtToMT(fromStoreId, toStoreId string, offSet int) (hint string, data []string, err error) {
var fromApi *API //= mtwm.GetAPI(fromStore.VendorOrgCode, fromStore.ID, fromStore.VendorStoreID)
var toApi *API // = mtwm.GetAPI(toStore.VendorOrgCode, toStore.ID, toStore.VendorStoreID)
var errList = make([]*AppFoodResult, 0, 0)
var errData = make([]string, 0, 0)
fromApi = New("5873", "41c479790a76f86326f89e8048964739", "", "token_vNCxaqyai16or9en_C5PSw")
toApi = New("5873", "41c479790a76f86326f89e8048964739", "", "token_qJalvtSnVB-hBeDvRLVN_w")
i := offSet
for {
// 同步商品
fromFoodList, err1 := fromApi.RetailListAll(fromStoreId, offSet)
if len(fromFoodList) == 0 || fromFoodList == nil {
return "", nil, err1
}
errDataList, err := BatchInitSkuMT2MT(fromFoodList, toApi, toStoreId, i)
if err != nil {
globals.SugarLogger.Debugf("BatchInitData : %v", err)
}
if len(errDataList) > 0 {
//globals.SugarLogger.Debugf("errListData %d:= %s", i, utils.Format4Output(errDataList, false))
errList = append(errList, errDataList...)
}
globals.SugarLogger.Debugf("==========页数[%d],数据长度[%d]", i, len(fromFoodList))
if len(fromFoodList) < 100 {
break
}
i++
}
for _, v := range errList {
errData = append(errData, fmt.Sprintf("food_id:%s,错误:%s", v.AppFoodCode, v.ErrorMsg))
}
globals.SugarLogger.Debugf("errList := %s", utils.Format4Output(errList, false))
return hint, errData, err
}
// BatchInitSkuMT2MT 批量创建商品
func BatchInitSkuMT2MT(fromSku []*AppFood, toApi *API, vendorStoreID string, offset int) ([]*AppFoodResult, error) {
errList := make([]*AppFoodResult, 0, 0)
foodDataList := make([]map[string]interface{}, len(fromSku))
apijd := jdapi.New("1e87595b-e850-4ba4-9ee0-53bcfe383a4f", "1dba76d40cac446ca500c0391a0b6c9d", "a88d031a1e7b462cb1579f12e97fe7f4")
apijd.SetCookieWithStr(`user_email=jd_jxcs1223; lsp-store1.jddj.com=OPJQMA7B3FTKCAUGO7FHCH5NMBGAWGGXYRNLEHYYZNGNPNIBCAM4IOEPG3NT3RIA44G5C3535Q5LGG4F4SR4AZVLGYKYTKFJJKEAOXENVBL5VXNILRP3GLNVVWA26XZ3VGSYOHA72RICMVZS3G53DTEH3KKPE2KWRJ56RVQ2FMRXLQLWO4QBQL7EIOBUFAULGOCVWY7RBKZGAICS43NT6J6SUQ6QKCZ5CPQJXLXRTXJ6TTQZ76WIPY3FIXEQWDFYBPQQMRRIIWHZJ24QAGVWTRELTJ4ANKYUYK6KOCYNU7MPQZRGZ7A3RCFZCSP5UJH6H2OTKVR4EGOCXYTZO2DXT6UDKHMIWF7PCFTVIYAVZV6TUYE43JONRCTQBY2PDBQYCB4ONJOEWAF6KFL3GJ3XH26R6E; __jda=1736810.11184102.1626140984.1626140984.1626140984.1; __jdb=1736810.1.11184102%7C1.1626140984; __jdv=1736810%7Cdirect%7C-%7Cnone%7C-; __jdc=1736810; UM_distinctid=17a9d8e412b8f-0db54dad15adbc-5b1e341a-1fa400-17a9d8e412c298; josl-privilege1.jddj.com=OPJQMA7B3FTKCAUGO7FHCH5NMBGAWGGXYRNLEHYYZNGNPNIBCAM4IOEPG3NT3RIA44G5C3535Q5LGG4F4SR4AZVLGYKYTKFJJKEAOXENVBL5VXNILRP3GLNVVWA26XZ3VGSYOHA72RICMVZS3G53DTEH3L5R67UBB3LZWSV7QY5A7WMTVESBQL7EIOBUFAULGOCVWY7RBKZGB4IDIBOFHLL26YJTJU5SFCC7CKHRTXJ6TTQZ76WIPY3FIXEQWDFYES24CC32SX326B3WVAC6EVB4YIAQWEDFKRBXVVYOYZRBTKYYJZ5HQBVLCTBLZJYLBWT5R6DGE3H4C4L7R23TYZA5JMSPJU7HE6MGAWXAMIJ7H54ZWWGP56KATLF26DHPBFC7H6AGN62RYAH3GOOTQMZPFOOK3A5M4RSJGLYDIG2YB3HH35HA; o2o-pms1.jddj.com=OPJQMA7B3FTKCAUGO7FHCH5NMBGAWGGXYRNLEHYYZNGNPNIBCAM4IOEPG3NT3RIA44G5C3535Q5LGG4F4SR4AZVLGYKYTKFJJKEAOXENVBL5VXNILRP3GLNVVWA26XZ3VGSYOHA72RICMVZS3G53DTEH3LPBK4CTTQUICQG4IXP7VTZQY3RRQL7EIOBUFAULGOCVWY7RBKZGA4IDAH46XCGKM54EGU3D4E25KTQMIOV7EVR4JGDPUMIPCVZVKBP5E4RJGGER5KFUQWJBFZJVCAXQUQ; o2o-stock1.jddj.com=OPJQMA7B3FTKCAUGO7FHCH5NMBGAWGGXYRNLEHYYZNGNPNIBCAM4IOEPG3NT3RIA44G5C3535Q5LGG4F4SR4AZVLGYKYTKFJJKEAOXENVBL5VXNILRP3GLNVVWA26XZ3VGSYOHA72RICMVZS3G53DTEH3LDRI5V7NVUHTVXQQYNAA4HGUZJBQL7EIOBUFAULGOCVWY7RBKZGBYT7E4RO4CXG23IJO2MNVRCTQIIMIOV7EVR4JGDPUMIPCVZVKBP5E4RJGGER5KFUQWJBFZJVCAXQUQ`)
for k, storeSku := range fromSku {
foodData := make(map[string]interface{})
if storeSku.AppFoodCode != "" {
foodData[KeyAppFoodCode] = storeSku.AppFoodCode
} else {
foodData[KeyAppFoodCode] = time.Now().UnixNano() + int64(k*3)
}
skus := make([]interface{}, 0)
upc := ""
for _, v := range storeSku.SkuList {
if v.Stock == "" {
v.Stock = "99999"
}
if v.SkuId == "" {
v.SkuId = storeSku.AppFoodCode
}
if v.SkuId == "" {
v.SkuId = utils.Int2Str(storeSku.Ctime + int(k*3))
}
// salesCycle, _ := json.Marshal(v.AvailableTimes)
mapSkuList := utils.Struct2MapByJson(v)
if v.BoxNum == "" {
delete(mapSkuList, "box_num")
}
if v.BoxPrice == "" {
delete(mapSkuList, "box_price")
}
if v.LadderBoxNum == "" {
delete(mapSkuList, "ladder_box_num")
}
if v.LadderBoxPrice == "" {
delete(mapSkuList, "ladder_box_price")
}
delete(mapSkuList, "min_order_count")
if v.Upc != "" {
upc = v.Upc
} else if api.QuerySkuIsNeedUpc(storeSku.TagID) {
upcList, _ := apijd.GetJdUpcCodeByName(storeSku.Name, "", 1, 20)
if len(upcList) != 0 {
upc = upcList[0].UpcCode
}
}
//mapSkuList["available_times"] = string(salesCycle)
mapSkuList["available_times"] = v.AvailableTimes
//if v.MinOrderCount != "" {
// mapSkuList["min_order_count"] = utils.Str2Int(v.MinOrderCount)
//}
if upc != "" {
mapSkuList["upc"] = upc
}
skus = append(skus, mapSkuList)
}
foodData["skus"] = skus
foodData["name"] = utils.LimitUTF8StringLen(storeSku.Name, MaxSkuNameCharCount)
foodData["description"] = storeSku.Description
foodData["price"] = storeSku.Price
foodData["min_order_count"] = storeSku.MinOrderCount
foodData["unit"] = storeSku.Unit
//todo 增加商品必填属性
//foodData["common_attr_value"] = storeSku.CommonAttrValue
if storeSku.CommonAttrValue != "" && storeSku.CommonAttrValue != "[]" {
foodData["common_attr_value"] = CommonAttrValueUpdate(storeSku.CommonAttrValue)
}
if storeSku.SecondaryCategoryCode != "" {
foodData["category_code"] = storeSku.SecondaryCategoryCode
} else {
foodData["category_name"] = storeSku.SecondaryCategoryName
}
if storeSku.SecondaryCategoryName == "" && storeSku.SecondaryCategoryCode == "" {
if storeSku.SecondaryCategoryCode != "" {
foodData["category_code"] = storeSku.CategoryCode
} else {
foodData["category_name"] = storeSku.CategoryName
}
}
foodData["is_sold_out"] = storeSku.IsSoldOut
foodData["picture"] = storeSku.Picture
foodData["picture_contents"] = storeSku.PictureContents
foodData["sequence"] = storeSku.Sequence
foodData["tag_id"] = storeSku.TagID
foodData["upc"] = storeSku.UpcCode
if foodData["upc"].(string) == "" {
foodData["upc"] = upc
}
if foodData["upc"].(string) == "" {
foodData["upc"] = "no_upc"
}
foodDataList[k] = foodData
}
count := len(foodDataList) / 10
if len(foodDataList)%10 != 0 {
count += 1
}
for i := 0; i < count; i++ {
if i == count-1 {
failedFoodList, _ := toApi.RetailBatchInitData("liulei1973", vendorStoreID, foodDataList[i*10:])
if len(failedFoodList) != 0 {
//globals.SugarLogger.Debugf("failedFoodList := %s", utils.Format4Output(failedFoodList, false))
errList = append(errList, failedFoodList...)
}
} else {
data := foodDataList[i*10 : (i+1)*10]
failedFoodList, _ := toApi.RetailBatchInitData("liulei1973", vendorStoreID, data)
if len(failedFoodList) != 0 {
//globals.SugarLogger.Debugf("failedFoodList := %s", utils.Format4Output(failedFoodList, false))
errList = append(errList, failedFoodList...)
}
}
}
return errList, nil
}