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(而不是空,0),1538103149不是特殊值,只是一个任意之前的时间,这样写可以处理 return utils.DefaultTimeValue } return utils.Timestamp2Time(timeStamp) } func TestOrderGetOrderDetail(t *testing.T) { result, err := api.OrderGetOrderDetail(3802032442031470827, 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(3302052631611300348, 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": "301923143817184437", "third_carrier_order_id": "3035904010050124404", "courier_name": "唐正", "courier_phone": "15902809732", "logistics_status": "20", "latitude": "30.760525", "longitude": "104.053413", "logistics_provider_code": "10002", }) } 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 } func TestGetOrderAddress(t *testing.T) { address, err := api.GetOrderAddress(4001960782283263314, 3) fmt.Println(address) fmt.Println(err) } func TestName(t *testing.T) { storeMap := []string{"1", "2", "3"} mapList := make(map[string][]string, 10) for i := 0; i < len(storeMap); i++ { mapList[storeMap[i]] = append(mapList[storeMap[i]], storeMap[i]) } fmt.Println(mapList) }