From 4a15e4fc96da8a4fb752b72194edb62090991293 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 18 May 2020 18:13:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E5=95=86=E5=9F=8E=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=85=B3=E6=B3=A8=E5=8F=AF?= =?UTF-8?q?=E5=94=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store.go | 17 +++++- business/jxstore/cms/store_sku.go | 16 +++--- business/partner/purchase/jdshop/store.go | 29 +++++++++++ business/partner/purchase/jdshop/store_sku.go | 52 ++++++++++++------- controllers/cms_store_sku.go | 2 +- 5 files changed, 87 insertions(+), 29 deletions(-) diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 78393e4ab..ce553e4ed 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -1175,7 +1175,22 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend return nil, err } } else if vendorID == model.VendorIDJDShop { - storeMap.SyncStatus = model.SyncFlagNewMask //京东商城要去建店 + if storeMap.VendorStoreID == "" { + storeMap.SyncStatus = model.SyncFlagNewMask //京东商城要去建店 + } else { + if handler := CurVendorSync.GetStoreHandler(vendorID); handler != nil { + store, err2 := handler.ReadStore(ctx, vendorOrgCode, storeMap.VendorStoreID) + if err = err2; err == nil || storeMap.IsSync == 0 { + if store != nil { + storeMap.Status = store.Status + } + err = nil + storeMap.SyncStatus = model.SyncFlagModifiedMask | model.SyncFlagStoreName | model.SyncFlagStoreAddress + } + } else { + err = ErrCanNotFindVendor + } + } } storeMapList, err := dao.GetStoresMapList2(db, []int{vendorID}, []int{storeID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", true) if len(storeMapList) > 0 { diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 37941668b..01c27327f 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -853,7 +853,7 @@ func UpdateStoresSkus(ctx *jxcontext.Context, causeFlag int, storeIDs []int, sku return hint, err } -func UpdateStoresSkusByBind(ctx *jxcontext.Context, parentTask tasksch.ITask, skuBindInfos []*StoreSkuBindInfo, isAsync, isContinueWhenError bool) (hint string, err error) { +func UpdateStoresSkusByBind(ctx *jxcontext.Context, parentTask tasksch.ITask, skuBindInfos []*StoreSkuBindInfo, isAsync, isContinueWhenError, isFos bool) (hint string, err error) { // if len(skuBindInfos) > maxStoreNameBind { // return "", fmt.Errorf("门店商品信息大于%d", maxStoreNameBind) // } @@ -892,7 +892,7 @@ func UpdateStoresSkusByBind(ctx *jxcontext.Context, parentTask tasksch.ITask, sk isAsync = asyncStoreSkuOpFilter(ctx, isAsync) if num > 0 { skuIDs := jxutils.IntMap2List(skuIDMap) - hint, err = CurVendorSync.SyncStoresSkus(ctx, parentTask, 0, db, nil, storeIDs, skuIDs, false, isAsync, isContinueWhenError) + hint, err = CurVendorSync.SyncStoresSkus(ctx, parentTask, 0, db, nil, storeIDs, skuIDs, isFos, isAsync, isContinueWhenError) } if num == 0 || !isAsync || hint == "" { hint = utils.Int64ToStr(num) @@ -3111,7 +3111,7 @@ func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync, for _, v := range result1 { skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo)) } - UpdateStoresSkusByBind(ctx, task, skuBindInfos, true, true) + UpdateStoresSkusByBind(ctx, task, skuBindInfos, true, true, false) } return result, err } @@ -3206,7 +3206,7 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInf for _, v := range result1 { skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo)) } - hint, err = UpdateStoresSkusByBind(ctx, task, skuBindInfos, isAsync, isContinueWhenError) + hint, err = UpdateStoresSkusByBind(ctx, task, skuBindInfos, isAsync, isContinueWhenError, true) } return result, err } @@ -3302,7 +3302,7 @@ func AutoFocusStoreSkusForTopSkus(ctx *jxcontext.Context, isAsync, isContinueWhe for _, v := range result1 { skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo)) } - hint, err = UpdateStoresSkusByBind(ctx, nil, skuBindInfos, isAsync, isContinueWhenError) + hint, err = UpdateStoresSkusByBind(ctx, nil, skuBindInfos, isAsync, isContinueWhenError, false) } return result, err } @@ -3797,7 +3797,7 @@ func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus, } } case 1: - _, err = UpdateStoresSkusByBind(ctx, nil, param, isAsync, isContinueWhenError) + _, err = UpdateStoresSkusByBind(ctx, nil, param, isAsync, isContinueWhenError, false) } return result, err } @@ -3880,7 +3880,7 @@ func RefreshJxPriceByVendor2(ctx *jxcontext.Context, storeIDs []int, vendorID in } } case 1: - _, err = UpdateStoresSkusByBind(ctx, nil, param, isAsync, isContinueWhenError) + _, err = UpdateStoresSkusByBind(ctx, nil, param, isAsync, isContinueWhenError, false) } return result, err } @@ -4132,7 +4132,7 @@ func CreateSkusAndFocusFromWx(ctx *jxcontext.Context, productInfo *jdapi.Product IsSale: 1, } skuBindInfos = append(skuBindInfos, skuBindInfo) - _, err := UpdateStoresSkusByBind(ctx, nil, skuBindInfos, true, true) + _, err := UpdateStoresSkusByBind(ctx, nil, skuBindInfos, true, true, false) if err != nil { err = nil } diff --git a/business/partner/purchase/jdshop/store.go b/business/partner/purchase/jdshop/store.go index 76a223e0f..4027a6466 100644 --- a/business/partner/purchase/jdshop/store.go +++ b/business/partner/purchase/jdshop/store.go @@ -3,6 +3,7 @@ package jdshop import ( "encoding/base64" "encoding/json" + "strings" "git.rosy.net.cn/baseapi/platformapi/jdshopapi" "git.rosy.net.cn/baseapi/utils" @@ -15,6 +16,18 @@ import ( ) func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string) (storeDetail *dao.StoreDetail, err error) { + result, err := api.JdShopAPI.NewInfoList(utils.Str2Int64(vendorStoreID)) + storeDetail.VendorStoreID = vendorStoreID + storeDetail.Status = JdsStatus2jxStatus(result.StoreStatus) + result2, err := api.JdShopAPI.QueryEntityStore(utils.Str2Int64(vendorStoreID)) + storeDetail.ID = utils.Str2Int(result2.ExStoreID) + storeDetail.Name = result2.StoreName + storeDetail.Address = result2.Address + storeDetail.Tel1 = result2.Phone + storeDetail.DistrictCode = result2.AddrCode + zbs := strings.Split(result2.Coordinate, ",") + storeDetail.Lat = jxutils.StandardCoordinate2Int(utils.Str2Float64(zbs[0])) + storeDetail.Lng = jxutils.StandardCoordinate2Int(utils.Str2Float64(zbs[1])) return storeDetail, err } @@ -80,6 +93,11 @@ func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri } func (p *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) { + // store, err := dao.GetStoreDetail(db, storeID, model.VendorIDJDShop) + // if err != nil { + // return err + // } + // err = api.JdShopAPI.DeleteStoresByID(utils.Str2Int64(store.VendorStoreID)) return err } @@ -130,3 +148,14 @@ func jxStatus2JdsStatus(status int) (result int) { } return result } + +func JdsStatus2jxStatus(status int) (result int) { + if status == jdshopapi.JdsStoreStatusOnline { + result = model.StoreStatusOpened + } else if status == jdshopapi.JdsStoreStatusRest { + result = model.StoreStatusClosed + } else { + result = model.StoreStatusDisabled + } + return result +} diff --git a/business/partner/purchase/jdshop/store_sku.go b/business/partner/purchase/jdshop/store_sku.go index e5d0b3f6f..033f06c74 100644 --- a/business/partner/purchase/jdshop/store_sku.go +++ b/business/partner/purchase/jdshop/store_sku.go @@ -77,9 +77,10 @@ func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, v // valid := dao.StrictMakeMapByStructObject(payload, skuName, ctx.GetUserName()) name := filterSensitiveWord(v.Name) updateWareParam := &jdshopapi.UpdateWareParam{ - WareID: v.JdsWareID, - Title: name, - VenderID: jdshopapi.VenderID, + WareID: v.JdsWareID, + Title: name, + VenderID: jdshopapi.VenderID, + PromiseID: jdshopapi.JdsPromiseID, // Weight: v.Weight, } err = api.JdShopAPI.UpdateWare(updateWareParam) @@ -333,11 +334,12 @@ func buildCreateWareParam(storeSku *dao.StoreSkuSyncInfo) (createSkuParamWare *j Weight: 0.5, JdPrice: jxutils.IntPrice2Standard(storeSku.UnitPrice), // MarketPrice: jxutils.IntPrice2Standard(storeSku.UnitPrice), + PromiseID: jdshopapi.JdsPromiseID, } //上传京东图片 //规则,有两张就传两张,没有就重复传一张 - pic1, err := uploadImg(storeSku.Img, storeSku.Name, "1") + pic1, err := uploadImg(storeSku.Img, name, "1") img1 := &jdshopapi.CreateSkuParamImages{ ColorID: "0000000000", ImgIndex: 1, @@ -350,7 +352,7 @@ func buildCreateWareParam(storeSku *dao.StoreSkuSyncInfo) (createSkuParamWare *j if storeSku.Img2 == "" { img2.ImgURL = pic1 } else { - pic2, err2 := uploadImg(storeSku.Img, storeSku.Name, "2") + pic2, err2 := uploadImg(storeSku.Img, name, "2") err = err2 img2.ImgURL = pic2 } @@ -361,7 +363,7 @@ func buildCreateWareParam(storeSku *dao.StoreSkuSyncInfo) (createSkuParamWare *j //商品详情拼接 var desc string if storeSku.DescImg != "" { - pic3, err2 := uploadImg(storeSku.DescImg, storeSku.Name, "desc") + pic3, err2 := uploadImg(storeSku.DescImg, name, "desc") err = err2 desc = `



` } else { @@ -459,11 +461,11 @@ func buildCreateWareParam(storeSku *dao.StoreSkuSyncInfo) (createSkuParamWare *j } attrsPropSku = append(attrsPropSku, attrSku) sku := &jdshopapi.CreateSkuParamSkus{ - JdPrice: jxutils.IntPrice2Standard(v.VendorPrice), - StockNum: 9999, - Type: "com.jd.pop.ware.ic.api.domain.sku", - Type2: "com.jd.pop.ware.ic.api.domain.Sku", - OuterID: utils.Int2Str(v.SkuID), + JdPrice: jxutils.IntPrice2Standard(v.VendorPrice), + // StockNum: 9999, + Type: "com.jd.pop.ware.ic.api.domain.sku", + Type2: "com.jd.pop.ware.ic.api.domain.Sku", + OuterID: utils.Int2Str(v.SkuID), } sku.SaleAttrs = attrsPropSku createSkuParamSkus = append(createSkuParamSkus, sku) @@ -471,21 +473,33 @@ func buildCreateWareParam(storeSku *dao.StoreSkuSyncInfo) (createSkuParamWare *j if v.VendorPrice > vendorPrice { vendorPrice = v.VendorPrice } + if v.Status == model.SkuStatusNormal { + sku.StockNum = 9999 + } else { + sku.StockNum = 0 + } } createSkuParamWare.MarketPrice = jxutils.IntPrice2Standard(vendorPrice) return createSkuParamWare, createSkuParamSkus, err } +//京东商城上传图片,若平台上已经有了这个图就直接拿来用了 func uploadImg(img, name, index string) (imgURL string, err error) { - data, _, err := jxutils.DownloadFileByURL(img) - if err != nil { - return imgURL, err + result, err := api.JdShopAPI.QueryPicture(name + index) + if len(result) > 0 { + imgURL = result[0].PictureURL + } else { + data, _, err := jxutils.DownloadFileByURL(img) + if err != nil { + return imgURL, err + } + uploadResult, err := api.JdShopAPI.UploadPicture(data, 0, name+index) + if err != nil { + return imgURL, err + } + imgURL = uploadResult.PictureURL } - uploadResult, err := api.JdShopAPI.UploadPicture(data, 0, name+index) - if err != nil { - return imgURL, err - } - return uploadResult.PictureURL, err + return imgURL, err } func filterSensitiveWord(name string) (result string) { diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 0a03ae6a8..1adad8330 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -246,7 +246,7 @@ func (c *StoreSkuController) UpdateStoresSkusByBind() { if err = jxutils.Strings2Objs(params.Payload, &skuBindInfos); err != nil { return retVal, "", err } - retVal, err = cms.UpdateStoresSkusByBind(params.Ctx, nil, skuBindInfos, params.IsAsync, params.IsContinueWhenError) + retVal, err = cms.UpdateStoresSkusByBind(params.Ctx, nil, skuBindInfos, params.IsAsync, params.IsContinueWhenError, false) return retVal, "", err }) }