480 lines
13 KiB
Go
480 lines
13 KiB
Go
package jdshopapi
|
||
|
||
import (
|
||
"bytes"
|
||
"crypto/md5"
|
||
"encoding/base64"
|
||
"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, _, _ := DownloadFileByURL("http://image.jxc4.com/image/5de25b52598d7327b17399d6ddba0197.jpg")
|
||
// img, outMimeType, _ := Binary2Image(data, "")
|
||
// result2, _ := Image2Binary(img, outMimeType)
|
||
fmt.Println(base64.StdEncoding.EncodeToString(data))
|
||
//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 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 := `<p>因生鲜比较脆弱,发货途中如果有磕碰损坏,请收到联系客服,闪电赔付。请核对好地址,发货后不可修改地址,因改地址导致损坏不能赔付,谢谢理解</p><p><img style="width:auto;height:auto;max-width:100%;" src="//img10.360buyimg.com/imgzone/jfs/t1/111969/32/6692/171733/5ebbb9daE5bedb5b2/38350dca19e2b9d2.jpg"><br></p><p><br></p>`
|
||
// desc := `<p>因生鲜比较脆弱,发货途中如果有磕碰损坏,请收到联系客服,闪电赔付。请核对好地址,发货后不可修改地址,因改地址导致损坏不能赔付,谢谢理解</p><p><img style="width:auto;height:auto;max-width:100%;" src="//img10.360buyimg.com/imgzone/jfs/t1/126814/22/1326/472568/5ebb888dEa2cfb5f6/c0c81db660994246.jpg"><br></p><p><br></p>`
|
||
ware := &CreateSkuParamWare{
|
||
Title: "测试商品1",
|
||
BrandID: 44259,
|
||
ShopCategorys: []int{15602360},
|
||
CategoryID: 12247,
|
||
// TransportID: TransportID,
|
||
// MobileDesc: "测试",
|
||
// Introduction: "测试",
|
||
// WareStatus: 1,
|
||
// OuterID: "1",
|
||
Weight: 230,
|
||
Height: 100,
|
||
Length: 100,
|
||
Width: 100,
|
||
// JdPrice: 20,
|
||
MarketPrice: 2300,
|
||
VenderID: 10569615,
|
||
// PromiseID: JdsPromiseID,
|
||
}
|
||
// ware.Features = features
|
||
ware.MobileDesc = "aa"
|
||
ware.Introduction = "<p>aa</p>"
|
||
image := &CreateSkuParamImages{
|
||
ColorID: "0000000000",
|
||
ImgIndex: 1,
|
||
ImgURL: "jfs/t1/142006/30/15024/504060/5fb636d4Ef12079f7/2adad323cbcf7c52.jpg",
|
||
// Type: "com.jd.pop.ware.ic.api.domain.image",
|
||
// Type2: "com.jd.pop.ware.ic.api.domain.Image",
|
||
}
|
||
images = append(images, image)
|
||
ware.Images = images
|
||
sku := &CreateSkuParamSkus{
|
||
JdPrice: 100,
|
||
StockNum: 100,
|
||
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: "140190",
|
||
//AttrValues: []string{"730802"},
|
||
//}
|
||
// attr5 := &CreateSkuParamAttrs{
|
||
// AttrID: "1000022043",
|
||
// AttrValues: []string{"2515313135"},
|
||
// }
|
||
// 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(12247)
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
t.Log(utils.Format4Output(result, false))
|
||
}
|
||
|
||
func TestFindValuesByAttrId(t *testing.T) {
|
||
result, no, err := api.FindValuesByAttrId(1000022043)
|
||
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(10021536917364)
|
||
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("帝王蟹约2.25-2.5kg/只", 1, 100)
|
||
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(10024685331653)
|
||
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) {
|
||
result, err := api.FindWareById(10020536637379)
|
||
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) {
|
||
result, _, err := api.SearchSkuList2([]int{10020537029118})
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
t.Log(utils.Format4Output(result, false))
|
||
}
|
||
|
||
func TestAAAAAA(t *testing.T) {
|
||
result, _, err := api.SearchSkuList(1, 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))
|
||
}
|