Files
baseapi/platformapi/mtwmapi/order_test.go
邹宗楠 6aaf10c5a6 1
2026-07-10 13:57:59 +08:00

496 lines
18 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(2602201502045507987, false)
if err != nil {
t.Fatal(err)
}
if utils.MustInterface2Int64(result["force_require_picture"]) == 1 {
forceRequirePicture := utils.MustInterface2Int64(result["force_require_picture"]) // 是否强制返图 0不强制返图1强制返图
auditStatus := utils.MustInterface2Int64(result["audit_status"]) // 需要强制返图时有意义,返图状态 1编辑中、2待审核、3系统审核通过、4下单人审核通过、5下单人审核驳回 非强制返图或强制返图返图前值为0
fmt.Println(forceRequirePicture)
fmt.Println(auditStatus)
dispatchCondition := utils.Interface2String(result["dispatch_condition"]) // 发货条件明细该字段当前只在强制返图场景下返回以及使用。enable_dispatch=true则可发货dispatch_condition_detail为不可发货的所有条件明细如需关注不可发货原因则要查看
orderRealMediaDetail := utils.Interface2String(result["orderRealMediaDetail"]) // 实拍规则要求及实拍后的图片与ocr识别信息没返回(null),则三方用老的传图方式上传
fmt.Println(dispatchCondition)
fmt.Println(orderRealMediaDetail)
}
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))
}
type dispatchConditionList struct {
enable_dispatch bool `json:"enable_dispatch"` // 是否可发配true-可发配false-不可发配
dispatch_condition_detail []struct {
enable_dispatch bool `json:"enable_dispatch"` // 是否可发配true-可发配false-不可发配
condition_type int `json:"condition_type"` // 发货条件类型1-返图标准化强制实拍返图
} `json:"dispatch_condition_detail"` // 发货条件明细,记录了哪些限制条件满足,哪些未满足
}
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 TestUploadMediaToOrder(t *testing.T) {
api.UploadMediaToOrder("2202182431134417666", []string{"https://img.meituan.net/retailsp/12b8489847a14dbf128527aa2c7dfbd448308.jpg"})
}
func Test111(t *testing.T) {
fmt.Println(len("2001405450564559986"))
}