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))
}