From 5f901f8531d95c4939be84b654fced2537a571e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 13 May 2020 09:43:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E5=95=86=E5=9F=8E=E5=BB=BA?= =?UTF-8?q?=E5=95=86=E5=93=81=E5=BC=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store.go | 4 +- business/jxstore/cms/sync.go | 57 ++++++--- business/jxstore/cms/sync_store_sku.go | 37 +++++- business/model/dao/store_sku.go | 5 +- business/partner/partner.go | 2 + business/partner/purchase/ebai/store.go | 8 ++ business/partner/purchase/jd/store.go | 8 ++ business/partner/purchase/jdshop/store.go | 19 +++ business/partner/purchase/jdshop/store_sku.go | 121 ++++++++++++++++-- business/partner/purchase/mtwm/store.go | 8 ++ business/partner/purchase/yb/store.go | 8 ++ 11 files changed, 243 insertions(+), 34 deletions(-) diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 465b8cc95..59bd8cadd 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -1146,7 +1146,7 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend storeMap.Status = model.StoreStatusOpened storeMap.DeliveryType = model.StoreDeliveryTypeByStore storeMap.SyncStatus = 0 - if vendorID != model.VendorIDJX && vendorID != model.VendorIDYB { + if vendorID != model.VendorIDJX && vendorID != model.VendorIDYB && vendorID != model.VendorIDJDShop { if storeMap.VendorOrgCode == "" { return nil, fmt.Errorf("必须指定平台分账号信息") } @@ -1170,6 +1170,8 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend if err != nil { return nil, err } + } else if vendorID == model.VendorIDJDShop { + storeMap.SyncStatus = model.SyncFlagNewMask //京东商城要去建店 } if err == nil { dao.WrapAddIDCULDEntity(storeMap, userName) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index b9b36a168..7e62cacd9 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -229,7 +229,7 @@ func (v *VendorSync) SyncStore2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs var failedList []*partner.StoreSkuInfoWithErr handler := v.GetStoreHandler(loopMapInfo.VendorID) if handler != nil { - if len(loopMapInfo.StoreMapList) > 1 { + if len(loopMapInfo.StoreMapList) > 0 { loopStoreTask := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[loopMapInfo.VendorID]), tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { var resultList []interface{} @@ -238,29 +238,52 @@ func (v *VendorSync) SyncStore2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs if len(loopMapInfo.StoreMapList) > 1 { db2 = dao.GetDB() } - if err = handler.UpdateStore(db2, storeMap.StoreID, userName); err == nil { - storeMap.SyncStatus = 0 - _, err = dao.UpdateEntity(db2, storeMap, model.FieldSyncStatus) - resultList = append(resultList, 1) + if model.IsSyncStatusNew(storeMap.SyncStatus) { + if err = handler.CreateStore2(db2, storeMap.StoreID, userName); err == nil { + resultList = append(resultList, 1) + } else { + failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "创建门店") + } + } else if model.IsSyncStatusDelete(storeMap.SyncStatus) { + if err = handler.DeleteStore(db2, storeMap.StoreID, userName); err == nil { + resultList = append(resultList, 1) + } else { + failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "删除门店") + } } else { - failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "同步门店") + if err = handler.UpdateStore(db2, storeMap.StoreID, userName); err == nil { + resultList = append(resultList, 1) + } else { + failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "更新门店") + } + } + if err == nil { + storeMap.SyncStatus = 0 + _, err = dao.UpdateEntity(db, storeMap, model.FieldSyncStatus) } return resultList, err }, loopMapInfo.StoreMapList) t.AddChild(loopStoreTask).Run() resultList, err = loopStoreTask.GetResult(0) - } else { - storeMap := loopMapInfo.StoreMapList[0] - if err = handler.UpdateStore(db, storeMap.StoreID, userName); err == nil { - storeMap.SyncStatus = 0 - _, err = dao.UpdateEntity(db, storeMap, model.FieldSyncStatus) - } else { - failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "同步门店") - } - if err == nil { - resultList = []interface{}{1} - } } + // else { + // storeMap := loopMapInfo.StoreMapList[0] + // if model.IsSyncStatusNew(storeMap.SyncStatus) { + + // } else if model.IsSyncStatusDelete(storeMap.SyncStatus) { + + // } else { + // if err = handler.UpdateStore(db, storeMap.StoreID, userName); err == nil { + // storeMap.SyncStatus = 0 + // _, err = dao.UpdateEntity(db, storeMap, model.FieldSyncStatus) + // } else { + // failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "更新门店") + // } + // } + // if err == nil { + // resultList = []interface{}{1} + // } + // } err = partner.AddVendorInfo2Err(err, loopMapInfo.VendorID) } if len(failedList) > 0 { diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index acfdde07a..5a8959a47 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -398,9 +398,9 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag formalizeStoreSkuList(skus) //京东商城的商品名规则不同 //name,空格,comment,约xxg - if vendorID == model.VendorIDJDShop { - formalizeStoreSkuListForJds(skus) - } + // if vendorID == model.VendorIDJDShop { + // formalizeStoreSkuListForJds(skus) + // } singleStoreHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler) storeSkuHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformStoreSkuHandler) @@ -576,6 +576,14 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag api.YinBaoAPI.SetCookie(".POSPALAUTH30220", yinbaoCookie) } } + //如果平台是京东商城,则按商品skuname创建 + if vendorID == model.VendorIDJDShop { + if len(createList) > 0 { + rList := changeList2Jds(createList) + createList = createList[:] + createList = rList + } + } task := tasksch.NewParallelTask("syncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError2), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { step := batchItemList[0].(int) @@ -1346,3 +1354,26 @@ func changeList2Yb(list1 []*dao.StoreSkuSyncInfo, list2 []*partner.StoreSkuInfo) } return rList1, rList2 } + +func changeList2Jds(list []*dao.StoreSkuSyncInfo) (rList []*dao.StoreSkuSyncInfo) { + var ( + skuNameMap = make(map[int][]*dao.StoreSkuSyncInfo) + ) + for _, v := range list { + skuNameMap[v.NameID] = append(skuNameMap[v.NameID], v) + } + for k, v := range skuNameMap { + storeSku := &dao.StoreSkuSyncInfo{ + StoreSkuSyncInfoJds: v, + } + storeSku.NameID = k + storeSku.Name = v[0].Name + storeSku.VendorCatID = v[0].VendorCatID + storeSku.VendorVendorCatID = v[0].VendorVendorCatID + storeSku.UnitPrice = v[0].UnitPrice + storeSku.Img = v[0].Img + storeSku.Img2 = v[0].Img2 + rList = append(rList, storeSku) + } + return rList +} diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 3a7e1b637..3b938c9d1 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -43,8 +43,9 @@ type SkuStoreCatInfo struct { } type StoreSkuSyncInfo struct { - VendorID int `orm:"column(vendor_id)" json:"vendorID"` - VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 + StoreSkuSyncInfoJds []*StoreSkuSyncInfo + VendorID int `orm:"column(vendor_id)" json:"vendorID"` + VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 // 平台无关的store sku信息 BindID int `orm:"column(bind_id)"` // 换名的原因是与Sku.ID同名区别 diff --git a/business/partner/partner.go b/business/partner/partner.go index 97928dc65..d55b58383 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -147,6 +147,8 @@ type IPurchasePlatformHandler interface { // Store ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string) (store *dao.StoreDetail, err error) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) + CreateStore2(db *dao.DaoDB, storeID int, userName string) (err error) + DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) GetStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string) (storeStatus int, err error) UpdateStoreCustomID(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string, storeID int64) (err error) diff --git a/business/partner/purchase/ebai/store.go b/business/partner/purchase/ebai/store.go index 8361b7182..00418af6b 100644 --- a/business/partner/purchase/ebai/store.go +++ b/business/partner/purchase/ebai/store.go @@ -534,3 +534,11 @@ func (c *PurchaseHandler) GetShopIDsByPage() (vendorStoreIDs []string, err error } return vendorStoreIDs, err } + +func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string) (err error) { + return err +} + +func (p *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) { + return err +} diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index a4fffb315..0da3a7740 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -498,3 +498,11 @@ func (c *PurchaseHandler) UpdateStoreCustomID(ctx *jxcontext.Context, vendorOrgC } return err } + +func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string) (err error) { + return err +} + +func (p *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) { + return err +} diff --git a/business/partner/purchase/jdshop/store.go b/business/partner/purchase/jdshop/store.go index de87f3149..e3a1e368c 100644 --- a/business/partner/purchase/jdshop/store.go +++ b/business/partner/purchase/jdshop/store.go @@ -1,9 +1,12 @@ package jdshop import ( + "git.rosy.net.cn/baseapi/platformapi/jdshopapi" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" + "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/globals/api" ) func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string) (storeDetail *dao.StoreDetail, err error) { @@ -15,6 +18,22 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin return err } +func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string) (err error) { + store, err := dao.GetStoreDetail(db, storeID, model.VendorIDJDShop) + if err != nil { + return err + } + createEntityStoreParam := &jdshopapi.CreateEntityStoreParam{ + Name: store.Name, + } + err = api.JdShopAPI.CreateEntityStore(createEntityStoreParam) + return err +} + +func (p *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) { + return err +} + func (p *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) { return hint, err } diff --git a/business/partner/purchase/jdshop/store_sku.go b/business/partner/purchase/jdshop/store_sku.go index 64fef555a..e259ff5c3 100644 --- a/business/partner/purchase/jdshop/store_sku.go +++ b/business/partner/purchase/jdshop/store_sku.go @@ -2,6 +2,7 @@ package jdshop import ( "regexp" + "time" "git.rosy.net.cn/baseapi/platformapi/jdshopapi" @@ -279,28 +280,126 @@ func buildCreateWareParam(storeSku *dao.StoreSkuSyncInfo) (createSkuParamWare *j MobileDesc: " ", Introduction: " ", WareStatus: 8, //上架待审核 - OuterID: utils.Int2Str(storeSku.SkuID), + OuterID: utils.Int2Str(storeSku.NameID), VenderID: 0, Is7ToReturn: 0, //不支持7天退货 Length: 100, Width: 100, Height: 100, - Weight: storeSku.Weight, - JdPrice: int(storeSku.VendorPrice), - MarketPrice: int(storeSku.Price), + Weight: 500, + JdPrice: int(storeSku.UnitPrice), + MarketPrice: int(storeSku.UnitPrice), } + + //上传京东图片 start + //规则,有两张就传两张,没有就重复传一张 data, _, err := jxutils.DownloadFileByURL(storeSku.Img) if err != nil { return createSkuParamWare, createSkuParamSkus, err } - api.JdShopAPI.UploadPicture(data, 0, storeSku.Name) - for i := 1; i < 3; i++ { - img := &jdshopapi.CreateSkuParamImages{ - ColorID: "0000000000", - ImgIndex: i, - ImgURL: "", + uploadResult, err := api.JdShopAPI.UploadPicture(data, 0, utils.Int64ToStr(time.Now().Unix())+storeSku.Name) + if err != nil { + return createSkuParamWare, createSkuParamSkus, err + } + img1 := &jdshopapi.CreateSkuParamImages{ + ColorID: "0000000000", + ImgIndex: 1, + ImgURL: uploadResult.PictureURL, + } + img2 := &jdshopapi.CreateSkuParamImages{ + ColorID: "0000000000", + ImgIndex: 2, + } + if storeSku.Img2 == "" { + img2.ImgURL = uploadResult.PictureURL + } else { + data2, _, err := jxutils.DownloadFileByURL(storeSku.Img2) + if err != nil { + return createSkuParamWare, createSkuParamSkus, err } - images = append(images, img) + uploadResult2, err := api.JdShopAPI.UploadPicture(data2, 0, utils.Int64ToStr(time.Now().Unix())+storeSku.Name) + if err != nil { + return createSkuParamWare, createSkuParamSkus, err + } + img2.ImgURL = uploadResult2.PictureURL + } + images = append(images, img1) + images = append(images, img2) + createSkuParamWare.Images = images + //end + + //设置商品属性值 + var ( + attrIDs = make(map[string]int) //贮存方式,净含量,保质期IDs + zctjValueID int64 //贮存条件冷藏0-4的id + attrsProp []*jdshopapi.CreateSkuParamAttrs + ) + attrs, err := api.JdShopAPI.FindAttrs(int(storeSku.VendorVendorCatID)) + for _, v := range attrs { + if v.Name == "保质期" { + attrIDs[v.Name] = v.ID + } else if v.Name == "贮存条件" { + attrIDs[v.Name] = v.ID + } else if v.Name == "净含量" { + attrIDs[v.Name] = v.ID + } else if v.Name == "规格" { + attrIDs[v.Name] = v.ID + } + } + values, _, err := api.JdShopAPI.FindValuesByAttrId(attrIDs["贮存条件"]) + for _, v := range values { + if v.Name == "冷藏 0-4℃" { + zctjValueID = v.ID + } + } + attrZctj := &jdshopapi.CreateSkuParamAttrs{ + AttrID: utils.Int2Str(attrIDs["贮存条件"]), + AttrValues: []string{utils.Int64ToStr(zctjValueID)}, + } + attrJhl := &jdshopapi.CreateSkuParamAttrs{ + AttrID: utils.Int2Str(attrIDs["净含量"]), + AttrValues: []string{"0.5"}, + } + attrBzq := &jdshopapi.CreateSkuParamAttrs{ + AttrID: utils.Int2Str(attrIDs["保质期"]), + AttrValues: []string{"5"}, + } + attrsProp = append(attrsProp, attrZctj) + attrsProp = append(attrsProp, attrJhl) + attrsProp = append(attrsProp, attrBzq) + createSkuParamWare.MultiCateProps = attrsProp + + //组合sku + var ( + ggValueID int64 //规格的属性id + attrsPropSku []*jdshopapi.CreateSkuParamAttrs + ) + valuesSku, maxNo, err := api.JdShopAPI.FindValuesByAttrId(attrIDs["规格"]) + for _, v := range storeSku.StoreSkuSyncInfoJds { + specQuality := utils.Int2Str(storeSku.Weight) + storeSku.SpecUnit + for _, v := range valuesSku { + if v.Name == specQuality { + ggValueID = v.ID + } + } + if ggValueID == 0 { //说明没有建这个规格,要建上 + catID, _ := api.JdShopAPI.SaveVenderAttrValue(specQuality, attrIDs["规格"], int(storeSku.VendorVendorCatID), maxNo+1) + ggValueID = catID + } + attrSku := &jdshopapi.CreateSkuParamAttrs{ + AttrID: utils.Int2Str(attrIDs["规格"]), + AttrValues: []string{utils.Int64ToStr(ggValueID)}, + } + attrsPropSku = append(attrsPropSku, attrSku) + sku := &jdshopapi.CreateSkuParamSkus{ + JdPrice: int(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) } return createSkuParamWare, createSkuParamSkus, err } diff --git a/business/partner/purchase/mtwm/store.go b/business/partner/purchase/mtwm/store.go index 3e5a7409b..a913e180d 100644 --- a/business/partner/purchase/mtwm/store.go +++ b/business/partner/purchase/mtwm/store.go @@ -96,6 +96,14 @@ func (p *PurchaseHandler) CreateStore(db *dao.DaoDB, storeID int, userName strin return p.UpdateStore(db, storeID, userName) } +func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string) (err error) { + return err +} + +func (p *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) { + return err +} + func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) { var name string if db == nil { diff --git a/business/partner/purchase/yb/store.go b/business/partner/purchase/yb/store.go index fea030fb1..f66938e20 100644 --- a/business/partner/purchase/yb/store.go +++ b/business/partner/purchase/yb/store.go @@ -15,6 +15,14 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin return err } +func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string) (err error) { + return err +} + +func (p *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) { + return err +} + func (p *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) { return hint, err }