package jdshopapi import ( "bytes" "crypto/md5" "encoding/json" "fmt" "image" "image/gif" "image/jpeg" "image/png" "io/ioutil" "math" "net/http" "regexp" "strings" "testing" "git.rosy.net.cn/baseapi/platformapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" ) var ( skuNamePat = regexp.MustCompile(`([\((\[【][^\((\[【\))\]】]*[\))\]】])?(.*?)([((].*[))])?\s*约?([1-9][\d\.]*)(g|G|kg|kG|Kg|KG|l|L|ml|mL|Ml|ML|克)\s*([((].*[))])?\s*(?:\/|/|)\s*([^\s()()]{0,2})(\s.*)?$\s*([((].*[))])?$`) ) func TestFindShopCategories(t *testing.T) { result, err := api.FindShopCategories() if err != nil { t.Fatal(err) } t.Log(utils.Format4Output(result, false)) } func TestDeleteShopCategory(t *testing.T) { result, err := api.DeleteShopCategory(14439186) if err != nil { t.Fatal(err) } t.Log(utils.Format4Output(result, false)) } func TestUploadPicture(t *testing.T) { data, _, err := DownloadFileByURL("https://image.jxc4.com/noGoodsImg.jpg") // img, outMimeType, _ := Binary2Image(data, "") // result2, _ := Image2Binary(img, outMimeType) result, err := api.UploadPicture(data, 0, "noGoodsImg") if err != nil { t.Fatal(err) } t.Log(utils.Format4Output(result, false)) } func DownloadFileByURL(fileURL string) (bodyData []byte, fileMD5 string, err error) { response, err := http.Get(fileURL) if err == nil { defer response.Body.Close() if response.StatusCode == http.StatusOK { if bodyData, err = ioutil.ReadAll(response.Body); err == nil { fileMD5 = fmt.Sprintf("%X", md5.Sum(bodyData)) } } else { err = platformapi.ErrHTTPCodeIsNot200 } } return bodyData, fileMD5, err } func Binary2Image(binaryData []byte, mimeType string) (img image.Image, outMimeType string, err error) { if mimeType == "" { mimeType = http.DetectContentType(binaryData) } switch mimeType { case model.MimeTypeJpeg: img, err = jpeg.Decode(bytes.NewReader(binaryData)) case model.MimeTypePng: img, err = png.Decode(bytes.NewReader(binaryData)) case model.MimeTypeGif: img, err = gif.Decode(bytes.NewReader(binaryData)) } return img, mimeType, err } func Image2Binary(img image.Image, mimeType string) (binaryData []byte, err error) { buf := new(bytes.Buffer) switch mimeType { case model.MimeTypeJpeg: jpeg.Encode(buf, img, nil) case model.MimeTypePng: png.Encode(buf, img) case model.MimeTypeGif: gif.Encode(buf, img, nil) } binaryData = buf.Bytes() return binaryData, err } func TestGetFeightMb(t *testing.T) { err := api.GetFeightMb() if err != nil { t.Fatal(err) } // t.Log(utils.Format4Output(result, false)) } func TestAA(t *testing.T) { ware := &CreateSkuParamWare{ Title: "测试商品1", ShopCategorys: []int{11}, CategoryID: 13577, TransportID: TransportID, MobileDesc: "测试", Introduction: "测试", WareStatus: 8, OuterID: "1", Weight: 2300, Height: 100, Length: 100, Width: 100, JdPrice: 20, MarketPrice: 10, VenderID: 0, BrandID: JxBrandId, } result, _ := json.Marshal(ware) fmt.Println(string(result)) } func TestCreateSku(t *testing.T) { var images []*CreateSkuParamImages var skus []*CreateSkuParamSkus var attrs []*CreateSkuParamAttrs var attrs2 []*CreateSkuParamAttrs var attrs3 []*CreateSkuParamAttrs var features []*CreateSkuParamFeatures feature := &CreateSkuParamFeatures{ Key: "is7ToReturn", Value: "0", } features = append(features, feature) // desc = "aa" // desc := `

因生鲜比较脆弱,发货途中如果有磕碰损坏,请收到联系客服,闪电赔付。请核对好地址,发货后不可修改地址,因改地址导致损坏不能赔付,谢谢理解



` desc := `

因生鲜比较脆弱,发货途中如果有磕碰损坏,请收到联系客服,闪电赔付。请核对好地址,发货后不可修改地址,因改地址导致损坏不能赔付,谢谢理解



` ware := &CreateSkuParamWare{ Title: "测试商品1", // ShopCategorys: []int{11}, CategoryID: 13577, TransportID: TransportID, // MobileDesc: "测试", // Introduction: "测试", WareStatus: 8, OuterID: "1", Weight: 2300, Height: 100, Length: 100, Width: 100, JdPrice: 20, MarketPrice: 10, VenderID: 0, BrandID: JxBrandId, PromiseID: JdsPromiseID, } ware.Features = features ware.MobileDesc = "aa" ware.Introduction = desc image := &CreateSkuParamImages{ ColorID: "0000000000", ImgIndex: 1, ImgURL: "jfs/t1/124185/34/1067/20460/5eb90d1aE2a81b6e4/ab451433f5e963b0.jpg", } images = append(images, image) ware.Images = images sku := &CreateSkuParamSkus{ JdPrice: 10, StockNum: 1, Type: "com.jd.pop.ware.ic.api.domain.sku", Type2: "com.jd.pop.ware.ic.api.domain.Sku", OuterID: "1", } sku2 := &CreateSkuParamSkus{ JdPrice: 10, StockNum: 1, Type: "com.jd.pop.ware.ic.api.domain.sku", Type2: "com.jd.pop.ware.ic.api.domain.Sku", OuterID: "2", } attr1 := &CreateSkuParamAttrs{ AttrID: "109692", AttrValues: []string{"613613"}, } // attr2 := &CreateSkuParamAttrs{ // AttrID: "109897", // AttrValues: []string{"613771"}, // } attr3 := &CreateSkuParamAttrs{ AttrID: "160508", AttrValues: []string{"0.5"}, } attr4 := &CreateSkuParamAttrs{ AttrID: "160781", AttrValues: []string{"5"}, } attr5 := &CreateSkuParamAttrs{ AttrID: "1001027606", AttrValues: []string{"2440273517"}, } attr6 := &CreateSkuParamAttrs{ AttrID: "1001027606", AttrValues: []string{"2440272539"}, } attrs = append(attrs, attr1) // attrs = append(attrs, attr2) attrs = append(attrs, attr3) attrs = append(attrs, attr4) attrs2 = append(attrs2, attr5) attrs3 = append(attrs3, attr6) ware.MultiCateProps = attrs sku2.SaleAttrs = attrs3 sku.SaleAttrs = attrs2 skus = append(skus, sku) skus = append(skus, sku2) // ware.Skus = skus result, err := api.CreateWare(ware, skus) if err != nil { t.Fatal(err) } t.Log(utils.Format4Output(result, false)) } func TestFindVendorCategories(t *testing.T) { result, err := api.FindVendorCategories() if err != nil { t.Fatal(err) } t.Log(utils.Format4Output(result, false)) } func TestFindAttrs(t *testing.T) { result, err := api.FindAttrs(15245) if err != nil { t.Fatal(err) } t.Log(utils.Format4Output(result, false)) } func TestFindValuesByAttrId(t *testing.T) { result, no, err := api.FindValuesByAttrId(1001038262) if err != nil { t.Fatal(err) } t.Log(utils.Format4Output(result, false)) fmt.Println(no) } func TestSaveVenderAttrValue(t *testing.T) { _, err := api.SaveVenderAttrValue("100g", 1001027606, 13577, 2) if err != nil { t.Fatal(err) } // t.Log(utils.Format4Output(result, false)) } func TestDeleteWare(t *testing.T) { err := api.DeleteWare(14518369562) if err != nil { t.Fatal(err) } // t.Log(utils.Format4Output(result, false)) } func TestUpOrDown(t *testing.T) { err := api.UpOrDown(14518369562, 2) if err != nil { t.Fatal(err) } // t.Log(utils.Format4Output(result, false)) } func TestUpdateWare(t *testing.T) { err := api.UpdateWare(&UpdateWareParam{ WareID: 14545996691, Title: "进口凤梨", Features: []*CreateSkuParamFeatures{ &CreateSkuParamFeatures{ Key: "fdms", Value: "1", }, }, }) if err != nil { t.Fatal(err) } // t.Log(utils.Format4Output(result, false)) } func TestFindSkuStock(t *testing.T) { err := api.FindSkuStock(69353673334) if err != nil { t.Fatal(err) } // t.Log(utils.Format4Output(result, false)) } func TestQueryPicture(t *testing.T) { result, err := api.QueryPicture("[畅销]香蕉1") if err != nil { t.Fatal(err) } t.Log(utils.Format4Output(result, false)) } func TestImageUpdate(t *testing.T) { err := api.ImageUpdate(14535527473, 1, "jfs/t1/116844/10/7385/198098/5ec3853bEa53d0730/168e5654c6309c96.jpg") if err != nil { t.Fatal(err) } // t.Log(utils.Format4Output(result, false)) } func TestSearchWare4Valid(t *testing.T) { result, err := api.SearchWare4Valid("", 0, 0) if err != nil { t.Fatal(err) } t.Log(utils.Format4Output(result, false)) } func TestUpdateSkus(t *testing.T) { _, err := api.UpdateSkus(&UpdateSkusParam{ WareID: 14600091031, Skus: []*UpdateSkusParamSkus{ &UpdateSkusParamSkus{ WareID: 14600091031, SkuID: 70357447332, JdPrice: 7.5, StockNum: "9999", SaleAttrs: []*CreateSkuParamAttrs{ &CreateSkuParamAttrs{ AttrID: "1001027602", AttrValues: []string{"2441658643"}, }, }, Type: "com.jd.pop.ware.ic.api.domain.sku", Type2: "com.jd.pop.ware.ic.api.domain.Sku", }, }, }) if err != nil { t.Fatal(err) } } func TestDeleteSku(t *testing.T) { err := api.DeleteSku(69576828876) if err != nil { t.Fatal(err) } // t.Log(utils.Format4Output(result, false)) } func TestFindSkuById(t *testing.T) { result, err := api.FindSkuById(71538612626) if err != nil { t.Fatal(err) } t.Log(utils.Format4Output(result, false)) } func TestUpdateWareMarketPrice(t *testing.T) { err := api.UpdateWareMarketPrice(14539778638, 500) if err != nil { t.Fatal(err) } // t.Log(utils.Format4Output(result, false)) } func TestFindOpReason(t *testing.T) { result, err := api.FindOpReason(14519009105) if err != nil { t.Fatal(err) } t.Log(utils.Format4Output(result, false)) } func TestAAAA(t *testing.T) { var ( lng = 114.893295 lat = 25.85793 ) const ( maxRadius = 5000 maxStoreCount4User = 5 ) lng2, _ := ConvertDistanceToLogLat(lng, lat, float64(maxRadius), 90) _, lat2 := ConvertDistanceToLogLat(lng, lat, float64(maxRadius), 0) lng1 := lng - (lng2 - lng) lat1 := lat - (lat2 - lat) fmt.Println(lng1, lng2, lat1, lat2) } func ConvertDistanceToLogLat(lng, lat, distance, angle float64) (newLng, newLat float64) { oneDu := 111319.55 // 单位为米 newLng = lng + (distance*math.Sin(angle*math.Pi/180))/(oneDu*math.Cos(lat*math.Pi/180)) //将距离转换成经度的计算公式 newLat = lat + (distance*math.Cos(angle*math.Pi/180))/oneDu //将距离转换成纬度的计算公式 return newLng, newLat } func TestFindWareById(t *testing.T) { err := api.FindWareById(14546096098) if err != nil { t.Fatal(err) } // t.Log(utils.Format4Output(result, false)) } func TestTransparentImageAdd(t *testing.T) { str := "12300548611401" // suffix := str[12:len(str)] fmt.Println(str[:12]) } func TestUpdateWareSaleAttrvalueAlias(t *testing.T) { err := api.UpdateWareSaleAttrvalueAlias(&UpdateWareSaleAttrvalueAliasParam{ WareID: 14565234929, Props: []*CreateSkuParamAttrs2{ &CreateSkuParamAttrs2{ AttrID: "1000021981", AttrValues: []string{"2453826609"}, AttrValueAlias: []string{"500g 下午易缺货"}, Type: "com.jd.pop.ware.ic.api.domain.prop", Type2: "com.jd.pop.ware.ic.api.domain.Prop", }, }, }) if err != nil { t.Fatal(err) } // t.Log(utils.Format4Output(result, false)) } func TestSearchSkuList(t *testing.T) { var jdsIDs = []int64{ 70360362787, 70360943788, 70360811895, 70360582829, 70360415481, 70360967221, 70360686708, 70360712729, 70360775271, } for _, v := range jdsIDs { api.DeleteSku(v) } // result, err := api.SearchSkuList(14518857091) // if err != nil { // t.Fatal(err) // } // t.Log(utils.Format4Output(result, false)) } func TestAAAAAA(t *testing.T) { result, _, err := api.SearchSkuList(2, 20) if err != nil { t.Fatal(err) } t.Log(utils.Format4Output(result, false)) } func SplitSkuName(skuName string) (prefix, name, comment, specUnit, unit string, specQuality float32) { searchResult := skuNamePat.FindStringSubmatch(skuName) if searchResult != nil { if searchResult[3] != "" { comment = searchResult[3] } else if searchResult[6] != "" { comment = searchResult[6] } else if searchResult[8] != "" { comment = searchResult[8] } else if searchResult[9] != "" { comment = searchResult[9] } // comment = TrimDecorationChar(comment) // name = TrimDecorationChar(searchResult[2]) // if comment != "" { // // if utf8.RuneCountInString(comment) <= 5 { // // name += "-" + comment // // comment = "" // // } // } specUnit = strings.ToLower(strings.Replace(searchResult[5], "克", "g", -1)) if specUnit == "l" { specUnit = "L" } if searchResult[7] == "" { unit = "份" } else { unit = searchResult[7] } specQuality = float32(utils.Str2Float64(searchResult[4])) // prefix = TrimDecorationChar(searchResult[1]) } return prefix, name, comment, specUnit, unit, specQuality } func TestUpdateSkuJdPrice(t *testing.T) { err := api.UpdateSkuJdPrice(7038506664, 10) if err != nil { t.Fatal(err) } // t.Log(utils.Format4Output(result, false)) }