From 2156c77dbf4971b1f6fde8b23d1443c03d2f9ec0 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 11 Dec 2019 17:42:56 +0800 Subject: [PATCH 01/10] =?UTF-8?q?UploadImg=E6=B7=BB=E5=8A=A0vendorOrgCode?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxutils/datares/datares.go | 3 ++- business/partner/partner.go | 3 +-- business/partner/purchase/ebai/ebai.go | 2 +- business/partner/purchase/elm/elm.go | 2 +- business/partner/purchase/jd/jd.go | 2 +- business/partner/purchase/jx/jx.go | 2 +- business/partner/purchase/mtwm/mtwm.go | 2 +- business/partner/purchase/weimob/wsc/wsc.go | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/business/jxutils/datares/datares.go b/business/jxutils/datares/datares.go index 3c5b1486e..0019accf8 100644 --- a/business/jxutils/datares/datares.go +++ b/business/jxutils/datares/datares.go @@ -178,7 +178,8 @@ func UploadImage2Vendors(ctx *jxcontext.Context, parentTask tasksch.ITask, dataR func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { vendorID := batchItemList[0].(int) if handler := partner.GetPurchasePlatformFromVendorID(vendorID); handler != nil { - imgHint, err2 := handler.UploadImg(ctx, dataRes.MainURL, imgData, imgName, int(dataRes.UseType)) + // TODO vendorOrgCode + imgHint, err2 := handler.UploadImg(ctx, "", dataRes.MainURL, imgData, imgName, int(dataRes.UseType)) if err = err2; err == nil { retVal = [][]interface{}{ []interface{}{ diff --git a/business/partner/partner.go b/business/partner/partner.go index 72d197ef9..f7983c454 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -148,8 +148,7 @@ type IPurchasePlatformHandler interface { RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) - // TODO 此函数也需要加vendorOrgCode - UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) + UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) } // db *dao.DaoDB, diff --git a/business/partner/purchase/ebai/ebai.go b/business/partner/purchase/ebai/ebai.go index ffc778422..3a222d025 100644 --- a/business/partner/purchase/ebai/ebai.go +++ b/business/partner/purchase/ebai/ebai.go @@ -52,7 +52,7 @@ func (p *PurchaseHandler) GetVendorID() int { return model.VendorIDEBAI } -func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { +func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { globals.SugarLogger.Debugf("ebai UploadImg imgURL:%s, imgName:%s, imgType:%d", imgURL, imgName, imgType) if globals.EnableEbaiStoreWrite { if imgType == model.ImgTypeMain { diff --git a/business/partner/purchase/elm/elm.go b/business/partner/purchase/elm/elm.go index f4deb0341..d2cbf40c6 100644 --- a/business/partner/purchase/elm/elm.go +++ b/business/partner/purchase/elm/elm.go @@ -92,7 +92,7 @@ func (c *PurchaseHandler) OnCallbackMsg(msg *elmapi.CallbackMsg) (retVal *elmapi return retVal } -func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { +func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { return imgHint, err } diff --git a/business/partner/purchase/jd/jd.go b/business/partner/purchase/jd/jd.go index de2912a7b..ff34f36f4 100644 --- a/business/partner/purchase/jd/jd.go +++ b/business/partner/purchase/jd/jd.go @@ -87,6 +87,6 @@ func JxStoreStatus2JdStatus(status int) (yn, closeStatus int) { } } -func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { +func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { return imgHint, err } diff --git a/business/partner/purchase/jx/jx.go b/business/partner/purchase/jx/jx.go index 42636c0dc..24dc7beeb 100644 --- a/business/partner/purchase/jx/jx.go +++ b/business/partner/purchase/jx/jx.go @@ -29,6 +29,6 @@ func (c *PurchaseHandler) GetVendorID() int { return model.VendorIDJX } -func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { +func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { return imgHint, err } diff --git a/business/partner/purchase/mtwm/mtwm.go b/business/partner/purchase/mtwm/mtwm.go index 54b9468cb..09bce7a52 100644 --- a/business/partner/purchase/mtwm/mtwm.go +++ b/business/partner/purchase/mtwm/mtwm.go @@ -168,7 +168,7 @@ func skuStatusJX2Mtwm(status int) int { return mtwmapi.SellStatusOffline } -func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { +func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { globals.SugarLogger.Debugf("mtwm UploadImg imgURL:%s, imgName:%s", imgURL, imgName) poiCode4UploadImg := p.getUploadImgPoiCode() if poiCode4UploadImg == "" { diff --git a/business/partner/purchase/weimob/wsc/wsc.go b/business/partner/purchase/weimob/wsc/wsc.go index dc85a07a2..457b53a5b 100644 --- a/business/partner/purchase/weimob/wsc/wsc.go +++ b/business/partner/purchase/weimob/wsc/wsc.go @@ -68,7 +68,7 @@ func vendorCategoryID2String(catID int64) string { return "" } -func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { +func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { if globals.EnableWscStoreWrite { imgHint, err = api.WeimobAPI.UploadImg(imgData, imgName) } From db85de745458cbd043f0222edef792f7facd2b4c Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 11 Dec 2019 22:30:32 +0800 Subject: [PATCH 02/10] +FullSyncVendorStuff --- business/jxstore/cms/sku.go | 30 ++-- business/jxstore/cms/sync.go | 6 +- business/jxstore/cms/sync2.go | 220 ++++++++++++++++++++++++-- business/partner/partner.go | 4 +- business/partner/purchase/jd/sku2.go | 14 +- business/partner/purchase/jx/sku.go | 4 +- controllers/cms_sync.go | 17 ++ routers/commentsRouter_controllers.go | 9 ++ 8 files changed, 263 insertions(+), 41 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index a7910e7a4..fb8f1d072 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -118,7 +118,7 @@ func AddCategory(ctx *jxcontext.Context, cat *model.SkuCategory, userName string dao.Rollback(db) return nil, err } - if err = OnCreateThing(ctx, db, int64(cat.ID), model.ThingTypeCategory); err != nil { + if err = OnCreateThing(ctx, db, nil, int64(cat.ID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return nil, err } @@ -156,7 +156,7 @@ func UpdateCategory(ctx *jxcontext.Context, categoryID int, payload map[string]i dao.Rollback(db) return 0, err } - if err = OnUpdateThing(ctx, db, int64(categoryID), model.ThingTypeCategory); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(categoryID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return 0, err } @@ -250,7 +250,7 @@ func ReorderCategories(ctx *jxcontext.Context, parentID int, categoryIDs []int, dao.Rollback(db) return err } - if err = OnUpdateThing(ctx, db, int64(catsMap[v].ID), model.ThingTypeCategory); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(catsMap[v].ID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return err } @@ -302,7 +302,7 @@ func DeleteCategory(ctx *jxcontext.Context, categoryID int, userName string) (nu dao.Rollback(db) return 0, err } - if err = OnDeleteThing(ctx, db, int64(categoryID), model.ThingTypeCategory); err != nil { + if err = OnDeleteThing(ctx, db, nil, int64(categoryID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return 0, err } @@ -685,7 +685,7 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s dao.Rollback(db) return nil, err } - if err = OnCreateThing(ctx, db, int64(skuNameExt.SkuName.ID), model.ThingTypeSkuName); err != nil { + if err = OnCreateThing(ctx, db, nil, int64(skuNameExt.SkuName.ID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return nil, err } @@ -699,7 +699,7 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s dao.Rollback(db) return nil, err } - if err = OnCreateThing(ctx, db, int64(sku.ID), model.ThingTypeSku); err != nil { + if err = OnCreateThing(ctx, db, nil, int64(sku.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return nil, err } @@ -798,7 +798,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf dao.Rollback(db) return 0, err } - if err = OnUpdateThing(ctx, db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return 0, err } @@ -835,7 +835,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf return 0, err } - if err = OnUpdateThing(ctx, db, int64(v.ID), model.ThingTypeSku); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -898,7 +898,7 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int if err = err2; err == nil { for _, v := range skuList { sku := &v.Sku - if err = OnDeleteThing(ctx, db, int64(v.ID), model.ThingTypeSku); err != nil { + if err = OnDeleteThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -912,7 +912,7 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int } } - if err = OnDeleteThing(ctx, db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnDeleteThing(ctx, db, nil, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return 0, err } @@ -961,7 +961,7 @@ func AddSku(ctx *jxcontext.Context, nameID int, sku *model.Sku, userName string) dao.Rollback(db) return nil, err } - if err = OnCreateThing(ctx, db, int64(sku.ID), model.ThingTypeSku); err != nil { + if err = OnCreateThing(ctx, db, nil, int64(sku.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return nil, err } @@ -1022,7 +1022,7 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{} } return 0, err } - if err = OnUpdateThing(ctx, db, int64(skuID), model.ThingTypeSku); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(skuID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -1087,7 +1087,7 @@ func DeleteSku(ctx *jxcontext.Context, skuID int, userName string) (num int64, e dao.Rollback(db) return 0, err } - if err = OnDeleteThing(ctx, db, int64(skuID), model.ThingTypeSku); err != nil { + if err = OnDeleteThing(ctx, db, nil, int64(skuID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -1167,7 +1167,7 @@ func AddSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName str dao.Rollback(db) return nil, err } - if err = OnUpdateThing(ctx, db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return nil, err } @@ -1197,7 +1197,7 @@ func DeleteSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName } return 0, err } - if err = OnUpdateThing(ctx, db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return 0, err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 3e4a711c3..02244463a 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -139,7 +139,7 @@ func (v *VendorSync) oldSyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, cate globals.SugarLogger.Debug("SyncCategory") hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步分类信息:%d", categoryID), isAsync, false, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { - vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo) + vendorInfo := batchItemList[0].(*MultiStoreVendorInfo) var cats []*model.SkuCategory cond := make(map[string]interface{}) if categoryID > 0 { @@ -173,7 +173,7 @@ func (v *VendorSync) SyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB func (v *VendorSync) oldSyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) { hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("分类重排序:%d", categoryID), isAsync, false, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { - vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo) + vendorInfo := batchItemList[0].(*MultiStoreVendorInfo) multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID) err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName) if err2 == nil { @@ -260,7 +260,7 @@ func (v *VendorSync) oldSyncSkus(ctx *jxcontext.Context, db *dao.DaoDB, nameIDs return v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步商品信息, nameIDs:%v, skuIDs:%v", nameIDs, skuIDs), isAsync, isManagedIt, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { var resultList []interface{} - vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo) + vendorInfo := batchItemList[0].(*MultiStoreVendorInfo) multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID) syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()]) dbField := dao.ConvertDBFieldPrefix(model.VendorNames[multiStoresHandler.GetVendorID()]) diff --git a/business/jxstore/cms/sync2.go b/business/jxstore/cms/sync2.go index 2cdb89960..0dcbcf384 100644 --- a/business/jxstore/cms/sync2.go +++ b/business/jxstore/cms/sync2.go @@ -12,10 +12,11 @@ import ( "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" + "git.rosy.net.cn/jx-callback/business/partner/putils" "git.rosy.net.cn/jx-callback/globals" ) -type tMultiStoreVendorInfo struct { +type MultiStoreVendorInfo struct { VendorID int OrgCode string } @@ -24,12 +25,12 @@ func CombineVendorIDAndOrgCode(vendorID int, orgCode string) string { return fmt.Sprintf("%d-%s", vendorID, orgCode) } -func getMultiStoreVendorInfoList() (list []*tMultiStoreVendorInfo) { +func getMultiStoreVendorInfoList() (list []*MultiStoreVendorInfo) { vendorIDs := partner.GetMultiStoreVendorIDs() for _, vendorID := range vendorIDs { orgCodeList := partner.CurAPIManager.GetAppOrgCodeList(vendorID) for _, v := range orgCodeList { - list = append(list, &tMultiStoreVendorInfo{ + list = append(list, &MultiStoreVendorInfo{ VendorID: vendorID, OrgCode: v, }) @@ -51,7 +52,7 @@ func SyncCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs if model.IsSyncStatusDelete(catVendorInfo.CatSyncStatus) { //删除 if !dao.IsVendorThingIDEmpty(catVendorInfo.VendorCatID) && model.IsSyncStatusNeedDelete(catVendorInfo.CatSyncStatus) { - err = multiStoresHandler.DeleteCategory2(ctx, catVendorInfo) + err = multiStoresHandler.DeleteCategory2(ctx, catVendorInfo.VendorOrgCode, catVendorInfo.VendorCatID) } } else if model.IsSyncStatusNew(catVendorInfo.CatSyncStatus) { // 新增 err = multiStoresHandler.CreateCategory2(ctx, catVendorInfo) @@ -94,7 +95,7 @@ func SyncSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs []int, if model.IsSyncStatusDelete(skuVendorInfo.SkuSyncStatus) { //删除 if !dao.IsVendorThingIDEmpty(skuVendorInfo.VendorSkuID) && model.IsSyncStatusNeedDelete(skuVendorInfo.SkuSyncStatus) { - err = multiStoresHandler.DeleteSku2(ctx, skuVendorInfo) + err = multiStoresHandler.DeleteSku2(ctx, skuVendorInfo.VendorOrgCode, storeSkuSyncInfo2Bare(skuVendorInfo)) } } else if model.IsSyncStatusNew(skuVendorInfo.SkuSyncStatus) { // 新增 err = multiStoresHandler.CreateSku2(ctx, skuVendorInfo) @@ -127,7 +128,7 @@ func SyncReorderCategories(ctx *jxcontext.Context, parentCatID int, isAsync bool db := dao.GetDB() hint, err = CurVendorSync.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("分类重排序:%d", parentCatID), isAsync, false, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo) + vendorInfo := batchItemList[0].(*MultiStoreVendorInfo) multiStoresHandler := CurVendorSync.GetMultiStoreHandler(vendorInfo.VendorID) if multiStoresHandler != nil { catList, err2 := dao.GetSkuCategoryWithVendor(db, []int{vendorInfo.VendorID}, []string{vendorInfo.OrgCode}, parentCatID, nil, false) @@ -152,12 +153,19 @@ func SyncReorderCategories(ctx *jxcontext.Context, parentCatID int, isAsync bool return hint, err } -func OnCreateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { +func getThingMap(db *dao.DaoDB, thingMap *model.ThingMap) (err error) { + return dao.GetEntity(db, thingMap, "ThingID", "ThingType", "VendorID", "VendorOrgCode", model.FieldDeletedAt) +} + +func OnCreateThing(ctx *jxcontext.Context, db *dao.DaoDB, vendorInfoList []*MultiStoreVendorInfo, thingID int64, thingType int8) (err error) { if thingType == model.ThingTypeSkuName { return nil } + if len(vendorInfoList) == 0 { + vendorInfoList = getMultiStoreVendorInfoList() + } errList := errlist.New() - for _, v := range getMultiStoreVendorInfoList() { + for _, v := range vendorInfoList { thingMap := &model.ThingMap{ ThingID: thingID, ThingType: thingType, @@ -176,12 +184,15 @@ func OnCreateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingTy return err } -func OnUpdateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { +func OnUpdateThing(ctx *jxcontext.Context, db *dao.DaoDB, vendorInfoList []*MultiStoreVendorInfo, thingID int64, thingType int8) (err error) { if thingType == model.ThingTypeSkuName { return nil } + if len(vendorInfoList) == 0 { + vendorInfoList = getMultiStoreVendorInfoList() + } errList := errlist.New() - for _, v := range getMultiStoreVendorInfoList() { + for _, v := range vendorInfoList { thingMap := &model.ThingMap{ ThingID: thingID, ThingType: thingType, @@ -189,14 +200,14 @@ func OnUpdateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingTy VendorOrgCode: v.OrgCode, } thingMap.DeletedAt = utils.DefaultTimeValue - if err2 := dao.GetEntity(db, thingMap, "ThingID", "ThingType", "VendorID", "VendorOrgCode", model.FieldDeletedAt); err2 == nil { + if err2 := getThingMap(db, thingMap); err2 == nil { thingMap.SyncStatus |= model.SyncFlagModifiedMask thingMap.LastOperator = ctx.GetUserName() _, err2 = dao.UpdateEntity(db, thingMap) errList.AddErr(err2) updateThingMapEntity(db, thingMap) - } else if !dao.IsNoRowsError(err2) { + } else { errList.AddErr(err2) } } @@ -206,12 +217,15 @@ func OnUpdateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingTy return err } -func OnDeleteThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { +func OnDeleteThing(ctx *jxcontext.Context, db *dao.DaoDB, vendorInfoList []*MultiStoreVendorInfo, thingID int64, thingType int8) (err error) { if thingType == model.ThingTypeSkuName { return nil } + if len(vendorInfoList) == 0 { + vendorInfoList = getMultiStoreVendorInfoList() + } errList := errlist.New() - for _, v := range getMultiStoreVendorInfoList() { + for _, v := range vendorInfoList { thingMap := &model.ThingMap{ ThingID: thingID, ThingType: thingType, @@ -219,7 +233,7 @@ func OnDeleteThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingTy VendorOrgCode: v.OrgCode, } thingMap.DeletedAt = utils.DefaultTimeValue - if err2 := dao.GetEntity(db, thingMap, "ThingID", "ThingType", "VendorID", "VendorOrgCode", model.FieldDeletedAt); err2 == nil { + if err2 := getThingMap(db, thingMap); err2 == nil { if model.IsSyncStatusNew(thingMap.SyncStatus) { thingMap.SyncStatus = 0 thingMap.DeletedAt = time.Now() @@ -318,3 +332,179 @@ func updateThingMapEntity(db *dao.DaoDB, thingMap *model.ThingMap) { dao.UpdateEntity(db, sku, "JdID", "JdSyncStatus") } } + +func amendAndPruneVendorStuff(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID int, vendorOrgCode string, isAsync, isContinueWhenError bool, opType int, isForceUpdate bool) (hint string, err error) { + handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) + if handler == nil { + return "", fmt.Errorf("平台:%s不支持此操作", model.VendorChineseNames[vendorID]) + } + db := dao.GetDB() + vendorInfo := []*MultiStoreVendorInfo{ + &MultiStoreVendorInfo{ + VendorID: vendorID, + OrgCode: vendorOrgCode, + }, + } + var sku2Delete []*partner.StoreSkuInfo + var cat2Delete []*partner.BareCategoryInfo + task := tasksch.NewParallelTask(fmt.Sprintf("平台:%s,账号:%s上的商品与商家分类", model.VendorChineseNames[vendorID], vendorOrgCode), + tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + step := batchItemList[0].(int) + switch step { + case 0: + localSkuList, err := dao.GetSkusWithVendor(db, []int{vendorID}, []string{vendorOrgCode}, nil, nil, false) + if err != nil { + return nil, err + } + localSkuMap := make(map[string]*dao.StoreSkuSyncInfo) + for _, v := range localSkuList { + if v.VendorSkuID != "" { + localSkuMap[v.VendorSkuID] = v + } + } + + remoteSkuList, err2 := handler.GetSkus(ctx, vendorOrgCode, 0, "") + if err = err2; err == nil { + remoteSkuMap := make(map[string]int) + for _, v := range remoteSkuList { + if vendorSkuID := v.SkuList[0].VendorSkuID; vendorSkuID != "" { + if localSkuMap[vendorSkuID] == nil { + sku2Delete = append(sku2Delete, &partner.StoreSkuInfo{ + SkuID: v.SkuList[0].SkuID, + VendorSkuID: vendorSkuID, + }) + } else { + remoteSkuMap[vendorSkuID] = 1 + } + } else if v.VendorNameID != "" { + sku2Delete = append(sku2Delete, &partner.StoreSkuInfo{ + SkuID: v.NameID, + VendorSkuID: v.VendorNameID, + }) + } + } + + if opType == AmendPruneOnlyAmend || opType == AmendPruneAll { + for _, v := range localSkuList { + if v.BindID != 0 { + if !model.IsSyncStatusDelete(v.SkuSyncStatus) { + if remoteSkuMap[v.VendorSkuID] == 0 { + if !model.IsSyncStatusNew(v.SkuSyncStatus) { + OnCreateThing(ctx, db, vendorInfo, int64(v.SkuID), model.ThingTypeSku) + } + } else if isForceUpdate { + OnUpdateThing(ctx, db, vendorInfo, int64(v.SkuID), model.ThingTypeSku) + } + } + } else { + OnCreateThing(ctx, db, vendorInfo, int64(v.SkuID), model.ThingTypeSku) + } + } + } + } + case 1: + if (opType == AmendPruneOnlyPrune || opType == AmendPruneAll) && len(sku2Delete) > 0 { + _, err = putils.FreeBatchStoreSkuInfo("删除商品", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { + if err = handler.DeleteSku2(ctx, vendorOrgCode, batchedStoreSkuList[0]); err == nil { + successCount = 1 + } + return nil, successCount, err + }, ctx, task, sku2Delete, 1, isContinueWhenError) + } + sku2Delete = nil + case 2: + localCatList, err := dao.GetSkuCategoryWithVendor(db, []int{vendorID}, []string{vendorOrgCode}, -1, nil, false) + if err != nil { + return nil, err + } + localCatMap := make(map[string]*dao.SkuStoreCatInfo) + for _, v := range localCatList { + localCatMap[v.VendorCatID] = v + localCatMap[v.Name] = v + localCatMap[utils.Int2Str(v.ID)] = v + } + + remoteCatList, err2 := handler.GetAllCategories(ctx, vendorOrgCode) + if err = err2; err == nil { + remoteCatMap := make(map[string]int) + cat2Delete = checkRemoteCatExist(remoteCatMap, localCatMap, remoteCatList) + + for _, v := range localCatList { + if v.MapID != 0 { + if !model.IsSyncStatusDelete(v.CatSyncStatus) { + if remoteCatMap[v.VendorCatID] == 0 { + if !model.IsSyncStatusNew(v.CatSyncStatus) { + OnCreateThing(ctx, db, vendorInfo, int64(v.ID), model.ThingTypeCategory) + } + } else if isForceUpdate && !model.IsSyncStatusUpdate(v.CatSyncStatus) { + OnUpdateThing(ctx, db, vendorInfo, int64(v.ID), model.ThingTypeCategory) + } + } + } else { + OnCreateThing(ctx, db, vendorInfo, int64(v.ID), model.ThingTypeCategory) + } + } + } + case 3: + if (opType == AmendPruneOnlyPrune || opType == AmendPruneAll) && len(cat2Delete) > 0 { + for i := 0; i < 2; i++ { + level := 2 - i + var levelCat2Delete []*partner.BareCategoryInfo + for _, v := range cat2Delete { + if v.Level == level { + levelCat2Delete = append(levelCat2Delete, v) + } + } + if len(levelCat2Delete) > 0 { + task4Delete := tasksch.NewParallelTask(fmt.Sprintf("删除商家分类,level:%d", level), tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + cat := batchItemList[0].(*partner.BareCategoryInfo) + err = handler.DeleteCategory2(ctx, vendorOrgCode, cat.VendorCatID) + return nil, err + }, levelCat2Delete) + tasksch.HandleTask(task4Delete, task, true).Run() + _, err = task4Delete.GetResult(0) + } + } + } + cat2Delete = nil + } + return nil, err + }, []int{0, 1, 2, 3}) + tasksch.HandleTask(task, parentTask, true).Run() + if !isAsync { + _, err = task.GetResult(0) + hint = "1" + } else { + hint = task.ID + } + return hint, err +} + +func FullSyncVendorStuff(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID int, vendorOrgCode string, isAsync, isContinueWhenError bool) (hint string, err error) { + multiStoreHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) + if multiStoreHandler == nil { + return "", fmt.Errorf("vendorID:%d不是多门店平台", vendorID) + } + task := tasksch.NewParallelTask("FullSyncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + step := batchItemList[0].(int) + switch step { + case 0: + _, err = amendAndPruneVendorStuff(ctx, task, vendorID, vendorOrgCode, false, isContinueWhenError, AmendPruneAll, false) + case 1: + _, err = SyncCategories(ctx, task, []int{vendorID}, []string{vendorOrgCode}, nil, false) + case 2: + _, err = SyncSkus(ctx, task, []int{vendorID}, []string{vendorOrgCode}, nil, nil, false) + } + return retVal, err + }, []int{0, 1, 2}) + tasksch.HandleTask(task, parentTask, true).Run() + if !isAsync { + _, err = task.GetResult(0) + } else { + hint = task.GetID() + } + return hint, err +} diff --git a/business/partner/partner.go b/business/partner/partner.go index f7983c454..f9146c15d 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -163,7 +163,7 @@ type IMultipleStoresHandler interface { CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) UpdateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) - DeleteCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) + DeleteCategory2(ctx *jxcontext.Context, vendorOrgCode, vendorCatID string) (err error) ReorderCategories2(ctx *jxcontext.Context, vendorOrgCode, vendorParentCatID string, vendorCatIDList []string) (err error) // sku @@ -174,7 +174,7 @@ type IMultipleStoresHandler interface { // ReadSku(ctx *jxcontext.Context, vendorOrgCode, vendorSkuID string) (skuNameExt *model.SkuNameExt, err error) CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) UpdateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) - DeleteSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) + DeleteSku2(ctx *jxcontext.Context, vendorOrgCode string, sku *StoreSkuInfo) (err error) // RefreshAllSkusID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) diff --git a/business/partner/purchase/jd/sku2.go b/business/partner/purchase/jd/sku2.go index bf82c3bfa..857cc5c33 100644 --- a/business/partner/purchase/jd/sku2.go +++ b/business/partner/purchase/jd/sku2.go @@ -70,6 +70,7 @@ func (p *PurchaseHandler) GetAllCategories(ctx *jxcontext.Context, vendorOrgCode } func (p *PurchaseHandler) CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) { + globals.SugarLogger.Debugf("CreateCategory2 cat:%s", utils.Format4Output(cat, true)) if globals.EnableJdStoreWrite { result, err2 := getAPI(cat.VendorOrgCode).AddShopCategory(utils.Str2Int64(cat.ParentVendorCatID), cat.Name, int(cat.Level), cat.Seq, ctx.GetUserName()) if err = err2; err == nil { @@ -84,15 +85,17 @@ func (p *PurchaseHandler) CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuSt } func (p *PurchaseHandler) UpdateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) { + globals.SugarLogger.Debugf("UpdateCategory2 cat:%s", utils.Format4Output(cat, true)) if globals.EnableJdStoreWrite { err = getAPI(cat.VendorOrgCode).UpdateShopCategory(utils.Str2Int64(cat.VendorCatID), cat.Name) } return err } -func (p *PurchaseHandler) DeleteCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) { +func (p *PurchaseHandler) DeleteCategory2(ctx *jxcontext.Context, vendorOrgCode, vendorCatID string) (err error) { + globals.SugarLogger.Debugf("DeleteCategory2 vendorOrgCode:%s, vendorCatID:%s", vendorOrgCode, vendorCatID) if globals.EnableJdStoreWrite { - err = getAPI(cat.VendorOrgCode).DelShopCategory(utils.Str2Int64(cat.VendorCatID)) + err = getAPI(vendorOrgCode).DelShopCategory(utils.Str2Int64(vendorCatID)) } return err } @@ -171,6 +174,7 @@ func skuInfo2Param(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (param *jd } func (p *PurchaseHandler) CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) { + globals.SugarLogger.Debugf("CreateSku2 sku:%s", utils.Format4Output(sku, true)) param := skuInfo2Param(ctx, sku) if globals.EnableJdStoreWrite { sku.VendorSkuID, err = getAPI(sku.VendorOrgCode).AddSku2(param) @@ -181,6 +185,7 @@ func (p *PurchaseHandler) CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSy } func (p *PurchaseHandler) UpdateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) { + globals.SugarLogger.Debugf("UpdateSku2 sku:%s", utils.Format4Output(sku, true)) param := skuInfo2Param(ctx, sku) if globals.EnableJdStoreWrite { _, err = getAPI(sku.VendorOrgCode).UpdateSku2(param) @@ -188,14 +193,15 @@ func (p *PurchaseHandler) UpdateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSy return err } -func (p *PurchaseHandler) DeleteSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) { +func (p *PurchaseHandler) DeleteSku2(ctx *jxcontext.Context, vendorOrgCode string, sku *partner.StoreSkuInfo) (err error) { + globals.SugarLogger.Debugf("DeleteSku2 vendorOrgCode:%s, sku:%s", vendorOrgCode, utils.Format4Output(sku, true)) param := &jdapi.OpSkuParam{ TraceID: ctx.GetTrackInfo(), OutSkuID: utils.Int2Str(sku.SkuID), FixedStatus: jdapi.SkuFixedStatusDeleted, } if globals.EnableJdStoreWrite { - _, err = getAPI(sku.VendorOrgCode).UpdateSku2(param) + _, err = getAPI(vendorOrgCode).UpdateSku2(param) } return err } diff --git a/business/partner/purchase/jx/sku.go b/business/partner/purchase/jx/sku.go index 416c61241..7673a1423 100644 --- a/business/partner/purchase/jx/sku.go +++ b/business/partner/purchase/jx/sku.go @@ -37,7 +37,7 @@ func (p *PurchaseHandler) UpdateCategory2(ctx *jxcontext.Context, cat *dao.SkuSt return err } -func (p *PurchaseHandler) DeleteCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) { +func (p *PurchaseHandler) DeleteCategory2(ctx *jxcontext.Context, vendorOrgCode, vendorCatID string) (err error) { return err } @@ -69,7 +69,7 @@ func (p *PurchaseHandler) UpdateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSy return err } -func (p *PurchaseHandler) DeleteSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) { +func (p *PurchaseHandler) DeleteSku2(ctx *jxcontext.Context, vendorOrgCode string, sku *partner.StoreSkuInfo) (err error) { return err } diff --git a/controllers/cms_sync.go b/controllers/cms_sync.go index a7f06c3bb..77f08bbb7 100644 --- a/controllers/cms_sync.go +++ b/controllers/cms_sync.go @@ -201,3 +201,20 @@ func (c *SyncController) AddCreateFlagForJxStoreSku() { return retVal, "", err }) } + +// @Title 初始化多门店平台商品库(及商家分类) +// @Description 初始化多门店平台商品库(及商家分类) +// @Param token header string true "认证token" +// @Param vendorID formData int true "平台ID(京东0 美团1 饿百3)" +// @Param vendorOrgCode formData string true "平台账号" +// @Param isAsync formData bool false "是否异步操作" +// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /FullSyncVendorStuff [post] +func (c *SyncController) FullSyncVendorStuff() { + c.callFullSyncVendorStuff(func(params *tSyncFullSyncVendorStuffParams) (retVal interface{}, errCode string, err error) { + retVal, err = cms.FullSyncVendorStuff(params.Ctx, nil, params.VendorID, params.VendorOrgCode, params.IsAsync, params.IsContinueWhenError) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index ceaa9b5f6..470fa157d 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1755,6 +1755,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"], + beego.ControllerComments{ + Method: "FullSyncVendorStuff", + Router: `/FullSyncVendorStuff`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"], beego.ControllerComments{ Method: "PruneMissingStoreSkus", From 29bc986e45a3e4bce2b38d30b79a01c559f75861 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 12 Dec 2019 09:18:44 +0800 Subject: [PATCH 03/10] =?UTF-8?q?jd2=E9=85=8D=E7=BD=AE=20SyncSkuNames=20Sy?= =?UTF-8?q?ncCategorys?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync.go | 17 +-------- business/model/dao/thing_map.go | 54 +++++++++++++++++++++++++++ business/partner/purchase/jd/store.go | 14 ++++--- conf/app.conf | 17 +++++++++ controllers/cms_sync.go | 52 +++++++++++++++++++++++--- globals/api/api.go | 12 +++++- globals/api/apimanager/apimanager.go | 2 +- globals/globals.go | 4 +- 8 files changed, 142 insertions(+), 30 deletions(-) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 02244463a..ce4d1d81f 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -666,22 +666,7 @@ func (v *VendorSync) SyncSkuNames(ctx *jxcontext.Context, nameIDs []int, isForce func (v *VendorSync) oldSyncSkuNames(ctx *jxcontext.Context, nameIDs []int, isForce, isAsync, isContinueWhenError bool) (hint string, err error) { db := dao.GetDB() if isForce { - sql := ` - UPDATE sku t1 - SET t1.jd_sync_status = t1.jd_sync_status | ? - WHERE t1.deleted_at = ? - ` - sqlParams := []interface{}{ - model.SyncFlagModifiedMask, - utils.DefaultTimeValue, - } - if len(nameIDs) > 0 { - sql += " AND t1.name_id IN(" + dao.GenQuestionMarks(len(nameIDs)) + ")" - sqlParams = append(sqlParams, nameIDs) - } - if _, err = dao.ExecuteSQL(db, sql, sqlParams...); err != nil { - return "", err - } + dao.SetSkuNameSyncStatus(db, nil, nil, nameIDs, model.SyncFlagModifiedMask) } return v.SyncSkus(ctx, db, nameIDs, nil, isAsync, isContinueWhenError, ctx.GetUserName()) } diff --git a/business/model/dao/thing_map.go b/business/model/dao/thing_map.go index 69fd5a336..59ce42b1c 100644 --- a/business/model/dao/thing_map.go +++ b/business/model/dao/thing_map.go @@ -4,6 +4,8 @@ import "git.rosy.net.cn/jx-callback/business/model" import "git.rosy.net.cn/baseapi/utils" +import "git.rosy.net.cn/jx-callback/globals" + func GetThingMapList(db *DaoDB, thingType int, vendorIDs, thingIDs []int) (cats []*model.ThingMap, err error) { sql := ` SELECT t1.* @@ -32,3 +34,55 @@ func GetThingMapMap(db *DaoDB, thingType int, vendorIDs, thingIDs []int) (thingM } return thingMapMap, err } + +func SetThingMapSyncStatus(db *DaoDB, vendorIDs []int, vendorOrgCodes []string, thingType int, thingIDs []int, syncStatus int8) (num int64, err error) { + sql := ` + UPDATE thing_map t1 + SET t1.sync_status |= ? + WHERE t1.deleted_at = ? AND t1.thing_type = ? + ` + sqlParams := []interface{}{ + syncStatus, + utils.DefaultTimeValue, + thingType, + } + if len(vendorIDs) > 0 { + sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" + sqlParams = append(sqlParams, vendorIDs) + } + if len(vendorOrgCodes) > 0 { + sql += " AND t1.vendor_org_code IN (" + GenQuestionMarks(len(vendorOrgCodes)) + ")" + sqlParams = append(sqlParams, vendorOrgCodes) + } + if len(thingIDs) > 0 { + sql += " AND t1.thing_id IN (" + GenQuestionMarks(len(thingIDs)) + ")" + sqlParams = append(sqlParams, thingIDs) + } + num, err = ExecuteSQL(db, sql, sqlParams...) + return num, err +} + +func SetSkuNameSyncStatus(db *DaoDB, vendorIDs []int, vendorOrgCodes []string, nameIDs []int, syncStatus int8) (num int64, err error) { + if globals.IsUseThingMap { + skuIDs, err2 := GetSkuIDByNames(db, nameIDs) + if err = err2; err == nil { + num, err = SetThingMapSyncStatus(db, vendorIDs, vendorOrgCodes, model.ThingTypeSku, skuIDs, syncStatus) + } + } else { + sql := ` + UPDATE sku t1 + SET t1.jd_sync_status = t1.jd_sync_status | ? + WHERE t1.deleted_at = ? + ` + sqlParams := []interface{}{ + syncStatus, + utils.DefaultTimeValue, + } + if len(nameIDs) > 0 { + sql += " AND t1.name_id IN(" + GenQuestionMarks(len(nameIDs)) + ")" + sqlParams = append(sqlParams, nameIDs) + } + num, err = ExecuteSQL(db, sql, sqlParams...) + } + return num, err +} diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index 8cafda7d6..fc88d91cd 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -365,9 +365,13 @@ func (c *PurchaseHandler) GetAllStoresVendorID(ctx *jxcontext.Context, vendorOrg return vendorStoreIDs, err } -func (c *PurchaseHandler) storeUploadImgByURL(inImgURL string) (imgURL string, err error) { +func (c *PurchaseHandler) storeUploadImgByURL(vendorOrgCode, inImgURL string) (imgURL string, err error) { if globals.EnableJdStoreWrite { - imgURL, err = api.JdPageAPI.StoreUploadImgByURL(inImgURL) + if vendorOrgCode == globals.JdOrgCode { + imgURL, err = api.JdPageAPI.StoreUploadImgByURL(inImgURL) + } else { + imgURL, err = getAPI(vendorOrgCode).StoreUploadImgByURL(inImgURL) + } } else { imgURL = utils.GetUUID() } @@ -395,7 +399,7 @@ func (c *PurchaseHandler) SyncQualify(ctx *jxcontext.Context, storeDetail *dao.S if err != nil { return err } - licenceURL, err := c.storeUploadImgByURL(storeDetail.Licence) + licenceURL, err := c.storeUploadImgByURL(storeDetail.VendorOrgCode, storeDetail.Licence) if err != nil { return err } @@ -417,7 +421,7 @@ func (c *PurchaseHandler) SyncQualify(ctx *jxcontext.Context, storeDetail *dao.S Scope: licenceDetail.Scope, }) - idFrondURL, err := c.storeUploadImgByURL(storeDetail.IDCardFront) + idFrondURL, err := c.storeUploadImgByURL(storeDetail.VendorOrgCode, storeDetail.IDCardFront) if err != nil { return addStoreInfo2Err(err, storeDetail.ID) } @@ -451,7 +455,7 @@ func (c *PurchaseHandler) SyncQualify(ctx *jxcontext.Context, storeDetail *dao.S qualifyList = append(qualifyList, addInfo) } if storeDetail.IDExpire == "" { - idBackURL, err := c.storeUploadImgByURL(storeDetail.IDCardBack) + idBackURL, err := c.storeUploadImgByURL(storeDetail.VendorOrgCode, storeDetail.IDCardBack) if err != nil { return addStoreInfo2Err(err, storeDetail.ID) } diff --git a/conf/app.conf b/conf/app.conf index 12237e789..87e5c2ef1 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -59,6 +59,8 @@ backstageHost = "http://www.jxc4.com" wxBackstageHost = "http://wx.jxc4.com" jdStorePageCookie = "OPJQMA7B3FTKCAUGO7FHCH5NMBGAWGGXYRNLEHYYZNGNPNIBCAM4IOEPG3NT3RIA44G5C3535Q5LGG4F4SR4AZVLGYKYTKFJJKEAOXENVBL5VXNILRP3GLNVVWA26XZ3VGSYOHA72RICMVZS3G53DTEH3LYUCSS54VI6WPOAGGDK532VYPEWWVCXUFRWENWDI4PEKM7SXBZ5BJO6DBLLERUA74YR2CVCGP4WUROCAHAMXKJ2VBGHTZYRL2DHR3BMXAHCTBAHYQLL24K5YI2PULRJL2UGAVD7VFRMEYTOXYHWCYVDXJ6HYFIPWIN3ULLXDDLN2ICON4GRK" +jd2StorePageCookie = "CK5GE5MR2UIOBOZC7BBZLLSI7MVDWPEQ4BRJTJQ2OP3ZFKYDDYTHXLZR3RDCQD6WXIWTDOSXTP3AQEC2D3ZS24VYF7PTTKKUKN7G4XBQS3QOBGUDNLQNEY7CLSNLWZCC7LNI6GZOWOOEN72AWG53MMCURHIQRBG7CGEGVIZQNRKV2NAWXHUA2REY6NP2B3GHPO6S4H35ST5KQXRJWL5LJSIWZHXGPYA3OGPRNAHBLVVNTQE6OL2RPMHQYNXCFMU5QQERDWPFLIWKB7W4GI7GHKLYDY" + ebaiStorePageCookieWMUSS = "B0AAFQCAAAGbhkuMCsvcyYBDkkyAxBGIBlgXAQYVwc7VwYZFkx2HDoPSmo5eV1femopWgJRawhgAALG04cg1RUmhUakBbJRdgPS0tNEhnQhNRewwuWwYYBDEFPCQSDXV5YWA6PAVRHUJ9SnVGMThYAjNjLw9pRxIbS04-XFo05AQgBl%7ERLA33vWcR73gEAKZ" ebaiStorePageCookieWMSTOKEN = "gAALgNAAAGfBI5YEBHSQdZY1InIS8CVQU9aBU1f3VLWVQqKHAAAc5LnRLZ1QLLx0S5IuzCSX8ZQ7oUwAAUr-GEm9JpRc9AQAAsLkLHHXzuhh2lZkbyrcAAAWBESKg3ZA" mtpsStoreToken = "M0p9VatZSeSHfrosD5IViAVl73IcA8mlcuHIV5sG6Zpv83a7JE0wY3t26aEhrrs_MR5gtLSFF1UIkt8HAjaXow" @@ -105,6 +107,11 @@ jdToken = "77e703b7-7997-441b-a12a-2e522efb117a" jdAppKey = "1dba76d40cac446ca500c0391a0b6c9d" jdSecret = "a88d031a1e7b462cb1579f12e97fe7f4" +jd2OrgCode = "349454" +jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7" +jd2AppKey = "7fb947624ff847ae94ff2f068cc99652" +jd2Secret = "1097abd7ef09427099b4922784af123a" + elmIsProd = false elmToken = "2d2b583447b04b6bba5a6f3faed3559b" elmAppKey = "RwT214gAsS" @@ -137,6 +144,11 @@ jdToken = "77e703b7-7997-441b-a12a-2e522efb117a" jdAppKey = "1dba76d40cac446ca500c0391a0b6c9d" jdSecret = "a88d031a1e7b462cb1579f12e97fe7f4" +jd2OrgCode = "" +jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7" +jd2AppKey = "7fb947624ff847ae94ff2f068cc99652" +jd2Secret = "1097abd7ef09427099b4922784af123a" + elmIsProd = true elmToken = "" elmAppKey = "KLRDcOZGrk" @@ -307,6 +319,11 @@ jdToken = "77e703b7-7997-441b-a12a-2e522efb117a" jdAppKey = "1dba76d40cac446ca500c0391a0b6c9d" jdSecret = "a88d031a1e7b462cb1579f12e97fe7f4" +jd2OrgCode = "349454" +jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7" +jd2AppKey = "7fb947624ff847ae94ff2f068cc99652" +jd2Secret = "1097abd7ef09427099b4922784af123a" + elmIsProd = true elmToken = "" elmAppKey = "KLRDcOZGrk" diff --git a/controllers/cms_sync.go b/controllers/cms_sync.go index 77f08bbb7..fd0dd2524 100644 --- a/controllers/cms_sync.go +++ b/controllers/cms_sync.go @@ -4,7 +4,9 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/globals" "github.com/astaxie/beego" ) @@ -142,21 +144,61 @@ func (c *SyncController) DeleteRemoteStoreSkus() { }) } -// @Title 同步SkuName(多门店平台) -// @Description 同步SkuName(多门店平台) +// @Title 同步商家分类(多门店平台) +// @Description 同步商家分类(多门店平台) // @Param token header string true "认证token" -// @Param nameIDs formData string false "name ID列表" +// @Param vendorID formData int false "平台ID(京东0 美团1 饿百3)" +// @Param vendorOrgCode formData string false "平台账号" // @Param isForce formData bool false "是否强制(设置修改标志)" // @Param isAsync formData bool false "是否异步" // @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult -// @router /SyncSkuNames [put] +// @router /SyncCategories [post] +func (c *SyncController) SyncCategories() { + c.callSyncCategories(func(params *tSyncSyncCategoriesParams) (retVal interface{}, errCode string, err error) { + var vendorIDs []int + if params.MapData["vendorID"] != nil { + vendorIDs = append(vendorIDs, params.VendorID) + } + vendorOrgCodes := jxutils.BatchString2Slice(params.VendorOrgCode) + if params.IsForce { + dao.SetThingMapSyncStatus(dao.GetDB(), vendorIDs, vendorOrgCodes, model.ThingTypeCategory, nil, model.SyncFlagModifiedMask) + } + retVal, err = cms.SyncCategories(params.Ctx, nil, vendorIDs, vendorOrgCodes, nil, params.IsAsync) + return retVal, "", err + }) +} + +// @Title 同步SkuName(多门店平台) +// @Description 同步SkuName(多门店平台) +// @Param token header string true "认证token" +// @Param nameIDs formData string false "name ID列表" +// @Param isForce formData bool false "是否强制(设置修改标志)" +// @Param vendorID formData int false "平台ID(京东0 美团1 饿百3)" +// @Param vendorOrgCode formData string false "平台账号" +// @Param isAsync formData bool false "是否异步" +// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /SyncSkuNames [put,post] func (c *SyncController) SyncSkuNames() { c.callSyncSkuNames(func(params *tSyncSyncSkuNamesParams) (retVal interface{}, errCode string, err error) { var nameIDs []int if err = jxutils.Strings2Objs(params.NameIDs, &nameIDs); err == nil { - retVal, err = cms.CurVendorSync.SyncSkuNames(params.Ctx, nameIDs, params.IsForce, params.IsAsync, params.IsContinueWhenError) + if globals.IsUseThingMap { + var vendorIDs []int + if params.MapData["vendorID"] != nil { + vendorIDs = append(vendorIDs, params.VendorID) + } + vendorOrgCodes := jxutils.BatchString2Slice(params.VendorOrgCode) + if params.IsForce { + dao.SetSkuNameSyncStatus(dao.GetDB(), vendorIDs, vendorOrgCodes, nameIDs, model.SyncFlagModifiedMask) + } + retVal, err = cms.SyncSkus(params.Ctx, nil, vendorIDs, vendorOrgCodes, nameIDs, nil, params.IsAsync) + } else { + retVal, err = cms.CurVendorSync.SyncSkuNames(params.Ctx, nameIDs, params.IsForce, params.IsAsync, params.IsContinueWhenError) + } } return retVal, "", err }) diff --git a/globals/api/api.go b/globals/api/api.go index 10a651d4f..9ab7e5b4c 100644 --- a/globals/api/api.go +++ b/globals/api/api.go @@ -32,8 +32,11 @@ import ( ) var ( - JdAPI *jdapi.API - JdPageAPI *jdapi.API + JdAPI *jdapi.API + JdPageAPI *jdapi.API + + Jd2API *jdapi.API + ElmAPI *elmapi.API EbaiAPI *ebaiapi.API MtwmAPI *mtwmapi.API @@ -79,6 +82,11 @@ func Init() { conf := platformapi.NewDefAPIConfig() conf.MaxSleepSecondWhenExceedLimit = 60 * 30 // 最大重试间隙30分钟 JdPageAPI = jdapi.NewPageOnly(cookieValue, conf) + + if globals.Jd2OrgCode != "" { + Jd2API = jdapi.New(beego.AppConfig.String("jd2Token"), beego.AppConfig.String("jd2AppKey"), beego.AppConfig.String("jd2Secret")) + Jd2API.SetJdCookie(beego.AppConfig.DefaultString("jd2StorePageCookie", "")) + } } else { JdAPI = nil } diff --git a/globals/api/apimanager/apimanager.go b/globals/api/apimanager/apimanager.go index 89a0b71ef..5091e46ac 100644 --- a/globals/api/apimanager/apimanager.go +++ b/globals/api/apimanager/apimanager.go @@ -43,7 +43,7 @@ func (a *APIManager) GetAPI(vendorID int, appOrgCode string) (pfAPI interface{}) func (a *APIManager) GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) { switch vendorID { case model.VendorIDJD: - appOrgCodeList = []string{globals.JdOrgCode} + appOrgCodeList = jxutils.BatchString2Slice(globals.JdOrgCode, globals.Jd2OrgCode) case model.VendorIDMTWM: appOrgCodeList = []string{api.MtwmAPI.GetAppID()} case model.VendorIDEBAI: diff --git a/globals/globals.go b/globals/globals.go index b0909ff04..17727ac4f 100644 --- a/globals/globals.go +++ b/globals/globals.go @@ -50,7 +50,8 @@ var ( WxpayNotifyURL string - JdOrgCode string + JdOrgCode string + Jd2OrgCode string IsUseThingMap bool ) @@ -101,6 +102,7 @@ func Init() { WxpayNotifyURL = beego.AppConfig.DefaultString("wxpayNotifyURL", "") JdOrgCode = beego.AppConfig.DefaultString("jdOrgCode", "") + Jd2OrgCode = beego.AppConfig.DefaultString("jd2OrgCode", "") IsUseThingMap = beego.AppConfig.DefaultBool("useThingMap", false) } From d8c77cfb6e36e40139284b7ed929f09ff79e57e1 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 12 Dec 2019 09:32:36 +0800 Subject: [PATCH 04/10] up --- routers/commentsRouter_controllers.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 470fa157d..2f9319078 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1782,11 +1782,20 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"], + beego.ControllerComments{ + Method: "SyncCategories", + Router: `/SyncCategories`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"], beego.ControllerComments{ Method: "SyncSkuNames", Router: `/SyncSkuNames`, - AllowHTTPMethods: []string{"put"}, + AllowHTTPMethods: []string{"put","post"}, MethodParams: param.Make(), Filters: nil, Params: nil}) From ccc0d3dfdab93fc35547face7f617e9b06f96d1a Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 12 Dec 2019 10:02:37 +0800 Subject: [PATCH 05/10] updateThingMapEntity --- business/jxstore/cms/sync2.go | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/business/jxstore/cms/sync2.go b/business/jxstore/cms/sync2.go index 0dcbcf384..32d91c970 100644 --- a/business/jxstore/cms/sync2.go +++ b/business/jxstore/cms/sync2.go @@ -316,20 +316,22 @@ func OnThingSync(ctx *jxcontext.Context, db *dao.DaoDB, thingMap *model.ThingMap } func updateThingMapEntity(db *dao.DaoDB, thingMap *model.ThingMap) { - if thingMap.ThingType == model.ThingTypeCategory { - cat := &model.SkuCategory{ - JdID: utils.Str2Int64WithDefault(thingMap.VendorThingID, 0), - JdSyncStatus: thingMap.SyncStatus, + if thingMap.VendorOrgCode == globals.JdOrgCode { + if thingMap.ThingType == model.ThingTypeCategory { + cat := &model.SkuCategory{ + JdID: utils.Str2Int64WithDefault(thingMap.VendorThingID, 0), + JdSyncStatus: thingMap.SyncStatus, + } + cat.ID = int(thingMap.ThingID) + dao.UpdateEntity(db, cat, "JdID", "JdSyncStatus") + } else if thingMap.ThingType == model.ThingTypeSku { + sku := &model.Sku{ + JdID: utils.Str2Int64WithDefault(thingMap.VendorThingID, 0), + JdSyncStatus: thingMap.SyncStatus, + } + sku.ID = int(thingMap.ThingID) + dao.UpdateEntity(db, sku, "JdID", "JdSyncStatus") } - cat.ID = int(thingMap.ThingID) - dao.UpdateEntity(db, cat, "JdID", "JdSyncStatus") - } else if thingMap.ThingType == model.ThingTypeSku { - sku := &model.Sku{ - JdID: utils.Str2Int64WithDefault(thingMap.VendorThingID, 0), - JdSyncStatus: thingMap.SyncStatus, - } - sku.ID = int(thingMap.ThingID) - dao.UpdateEntity(db, sku, "JdID", "JdSyncStatus") } } From 248a9299cea1611c981c3d2ad2c94a93ed01475b Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 12 Dec 2019 10:59:55 +0800 Subject: [PATCH 06/10] =?UTF-8?q?GetSkusWithVendor,GetSkuCategoryWithVendo?= =?UTF-8?q?r=20apimanager=E7=9A=84bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/sku.go | 62 ++++++++++++++-------------- business/partner/purchase/jd/sku2.go | 9 ++-- globals/api/apimanager/apimanager.go | 3 ++ 3 files changed, 39 insertions(+), 35 deletions(-) diff --git a/business/model/dao/sku.go b/business/model/dao/sku.go index a55b11581..3edd64d28 100644 --- a/business/model/dao/sku.go +++ b/business/model/dao/sku.go @@ -190,23 +190,10 @@ func GetSkuCategoryWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, t1pm.vendor_thing_id parent_vendor_cat_id, t1pm.sync_status parent_cat_sync_status FROM sku_category t1 - LEFT JOIN thing_map t1m ON t1m.thing_id = t1.id AND t1m.thing_type = ? AND t1m.deleted_at = ? - LEFT JOIN sku_category t1p ON t1p.id = t1.parent_id - LEFT JOIN thing_map t1pm ON t1pm.thing_id = t1p.id AND t1pm.thing_type = ? AND t1m.deleted_at = ? - AND t1pm.vendor_id = t1m.vendor_id AND t1pm.vendor_org_code = t1m.vendor_org_code - WHERE 1 = 1 - ` + LEFT JOIN thing_map t1m ON t1m.thing_id = t1.id AND t1m.thing_type = ? AND t1m.deleted_at = ?` sqlParams := []interface{}{ model.ThingTypeCategory, utils.DefaultTimeValue, - model.ThingTypeCategory, - utils.DefaultTimeValue, - } - if mustDirty { - sql += " AND t1m.sync_status <> 0" - } else { - sql += " AND t1.deleted_at = ?" - sqlParams = append(sqlParams, utils.DefaultTimeValue) } if len(vendorIDs) > 0 { sql += " AND t1m.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" @@ -216,6 +203,19 @@ func GetSkuCategoryWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, sql += " AND t1m.vendor_org_code IN (" + GenQuestionMarks(len(appOrgCodes)) + ")" sqlParams = append(sqlParams, appOrgCodes) } + sql += ` + LEFT JOIN sku_category t1p ON t1p.id = t1.parent_id + LEFT JOIN thing_map t1pm ON t1pm.thing_id = t1p.id AND t1pm.thing_type = ? AND t1m.deleted_at = ? + AND t1pm.vendor_id = t1m.vendor_id AND t1pm.vendor_org_code = t1m.vendor_org_code + WHERE 1 = 1 + ` + sqlParams = append(sqlParams, model.ThingTypeCategory, utils.DefaultTimeValue) + if mustDirty { + sql += " AND t1m.sync_status <> 0" + } else { + sql += " AND t1.deleted_at = ?" + sqlParams = append(sqlParams, utils.DefaultTimeValue) + } if len(catIDs) > 0 { sql += " AND t1.id IN (" + GenQuestionMarks(len(catIDs)) + ")" sqlParams = append(sqlParams, catIDs) @@ -261,7 +261,22 @@ func GetSkusWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, nameIDs t3m.vendor_thing_id vendor_cat_id FROM sku t1 - LEFT JOIN thing_map t1m ON t1m.thing_id = t1.id AND t1m.thing_type = ? AND t1m.deleted_at = ? + LEFT JOIN thing_map t1m ON t1m.thing_id = t1.id AND t1m.thing_type = ? AND t1m.deleted_at = ?` + sqlParams := []interface{}{ + model.MimeTypeGif, + model.MimeTypeGif, + model.ThingTypeSku, + utils.DefaultTimeValue, + } + if len(vendorIDs) > 0 { + sql += " AND t1m.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" + sqlParams = append(sqlParams, vendorIDs) + } + if len(appOrgCodes) > 0 { + sql += " AND t1m.vendor_org_code IN (" + GenQuestionMarks(len(appOrgCodes)) + ")" + sqlParams = append(sqlParams, appOrgCodes) + } + sql += ` JOIN sku_name t2 ON t2.id = t1.name_id LEFT JOIN sku_category t3 ON t3.id = t2.category_id LEFT JOIN thing_map t3m ON t3m.thing_id = t3.id AND t3m.thing_type = ? AND t3m.deleted_at = ? @@ -272,28 +287,13 @@ func GetSkusWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, nameIDs LEFT JOIN data_resource t12 ON t12.main_url = t2.img2 WHERE 1 = 1 ` - sqlParams := []interface{}{ - model.MimeTypeGif, - model.MimeTypeGif, - model.ThingTypeSku, - utils.DefaultTimeValue, - model.ThingTypeCategory, - utils.DefaultTimeValue, - } + sqlParams = append(sqlParams, model.ThingTypeCategory, utils.DefaultTimeValue) if mustDirty { sql += " AND t1m.sync_status <> 0" } else { sql += " AND t1.deleted_at = ?" sqlParams = append(sqlParams, utils.DefaultTimeValue) } - if len(vendorIDs) > 0 { - sql += " AND t1m.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")" - sqlParams = append(sqlParams, vendorIDs) - } - if len(appOrgCodes) > 0 { - sql += " AND t1m.vendor_org_code IN (" + GenQuestionMarks(len(appOrgCodes)) + ")" - sqlParams = append(sqlParams, appOrgCodes) - } if len(nameIDs) > 0 { sql += " AND t1.name_id IN (" + GenQuestionMarks(len(nameIDs)) + ")" sqlParams = append(sqlParams, nameIDs) diff --git a/business/partner/purchase/jd/sku2.go b/business/partner/purchase/jd/sku2.go index 857cc5c33..c3d58ada5 100644 --- a/business/partner/purchase/jd/sku2.go +++ b/business/partner/purchase/jd/sku2.go @@ -108,6 +108,7 @@ func (p *PurchaseHandler) ReorderCategories2(ctx *jxcontext.Context, vendorOrgCo } func (p *PurchaseHandler) getVendorCategories(level int, pid int64) (vendorCats []*model.SkuVendorCategory, err error) { + // 得到平台的分类,不需要指定分账号 cats, err := getAPI("").QueryChildCategoriesForOP(pid) if err != nil { return nil, err @@ -223,7 +224,7 @@ func (p *PurchaseHandler) GetSkus(ctx *jxcontext.Context, vendorOrgCode string, for k, v := range skuList { batchSkuNameList[k] = vendorSku2Jx(v) } - setSkuNameListPic(batchSkuNameList) + setSkuNameListPic(vendorOrgCode, batchSkuNameList) skuNameList = append(skuNameList, batchSkuNameList...) } if len(skuList) < param.PageSize { @@ -234,14 +235,14 @@ func (p *PurchaseHandler) GetSkus(ctx *jxcontext.Context, vendorOrgCode string, return skuNameList, err } -func setSkuNameListPic(skuNameList []*partner.SkuNameInfo) []*partner.SkuNameInfo { +func setSkuNameListPic(vendorOrgCode string, skuNameList []*partner.SkuNameInfo) []*partner.SkuNameInfo { jdSkuIDs := make([]int64, len(skuNameList)) for k, v := range skuNameList { jdSkuIDs[k] = utils.Str2Int64(v.SkuList[0].VendorSkuID) } imgMap := make(map[int64]*jdapi.ImgHandleQueryResult) - if imgList, err2 := getAPI("").QueryListBySkuIds(&jdapi.QueryListBySkuIdsParam{ + if imgList, err2 := getAPI(vendorOrgCode).QueryListBySkuIds(&jdapi.QueryListBySkuIdsParam{ SkuIDs: jdSkuIDs, }); err2 == nil { for _, v := range imgList { @@ -265,7 +266,7 @@ func setSkuNameListPic(skuNameList []*partner.SkuNameInfo) []*partner.SkuNameInf task := tasksch.NewParallelTask("jd setSkuNameListPic", nil, jxcontext.AdminCtx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { jdSkuID := batchItemList[0].(int64) - imgList, err := getAPI("").GetSkuPageImageInfo(jdSkuID) + imgList, err := getAPI(vendorOrgCode).GetSkuPageImageInfo(jdSkuID) if err == nil && len(imgList) > 0 { retVal = [][]string{ []string{utils.Int64ToStr(jdSkuID), imgList[0].Big}, diff --git a/globals/api/apimanager/apimanager.go b/globals/api/apimanager/apimanager.go index 5091e46ac..9f6c11e87 100644 --- a/globals/api/apimanager/apimanager.go +++ b/globals/api/apimanager/apimanager.go @@ -31,6 +31,9 @@ func (a *APIManager) GetAPI(vendorID int, appOrgCode string) (pfAPI interface{}) switch vendorID { case model.VendorIDJD: pfAPI = api.JdAPI + if appOrgCode != "" && appOrgCode == globals.Jd2OrgCode { + pfAPI = api.Jd2API + } case model.VendorIDMTWM: pfAPI = api.MtwmAPI case model.VendorIDEBAI: From 96dd367d6532feaa09dcd1448c937630bce5b99f Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 12 Dec 2019 11:15:52 +0800 Subject: [PATCH 07/10] =?UTF-8?q?GetStoresSkusNew=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E7=9A=84=E4=BA=AC=E4=B8=9C=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?vendorSkuID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 6e23b1fd0..f16aef1aa 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -181,6 +181,12 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool // model.SkuStatusNormal, utils.DefaultTimeValue, } + if globals.IsUseThingMap { + sql += ` + LEFT JOIN store_map sm ON sm.store_id = t3.id AND sm.vendor_id = ? AND sm.deleted_at = ? + LEFT JOIN thing_map t2m ON t2m.thing_type = ? AND t2m.thing_id = t2.id AND t2m.vendor_id = sm.vendor_id AND t2m.vendor_org_code = sm.vendor_org_code AND t2m.deleted_at = ?` + sqlParams = append(sqlParams, model.VendorIDJD, utils.DefaultTimeValue, model.ThingTypeSku, utils.DefaultTimeValue) + } if isAct { sql += ` JOIN ( @@ -429,11 +435,15 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bo LIMIT ? OFFSET ?` sqlParams = append(sqlParams, sqlParamsPage) } - sql = ` + jdVendorIDField := "t2.jd_id" + if globals.IsUseThingMap { + jdVendorIDField = "t2m.vendor_thing_id" + } + sql = fmt.Sprintf(` SELECT SQL_CALC_FOUND_ROWS t3.id store_id, t3.name store_name, t3.pay_percentage, t1.*, - t2.name_id, t2.id sku_id, t2.spec_quality sku_spec_quality, t2.spec_unit sku_spec_unit, t2.weight, t2.jd_id sku_jd_id, + t2.name_id, t2.id sku_id, t2.spec_quality sku_spec_quality, t2.spec_unit sku_spec_unit, t2.weight, %s sku_jd_id, t2.comment, t2.category_id sku_category_id, t2.status sku_status, t4.created_at bind_created_at, t4.updated_at bind_updated_at, t4.last_operator bind_last_operator, t4.deleted_at bind_deleted_at, t4.sub_store_id, t4.price bind_price, IF(t4.unit_price IS NOT NULL, t4.unit_price, t1.price) unit_price, t4.status store_sku_status, t4.auto_sale_at, @@ -441,7 +451,7 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bo t4.jd_sync_status, t4.ebai_sync_status, t4.mtwm_sync_status, t4.jd_price, t4.ebai_price, t4.mtwm_price, t4.jx_price, t4.status_sale_begin, t4.status_sale_end - ` + sql + `, jdVendorIDField) + sql var tmpList []*tGetStoresSkusInfo beginTime := time.Now() if err = dao.GetRows(db, &tmpList, sql, sqlParams...); err != nil { From a9f18ab056d312eb48441d6025a5d0e194e68d6d Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 12 Dec 2019 11:41:02 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E5=8E=BB=E9=99=A4JdStoreInfoCoordinateRe?= =?UTF-8?q?cover=E4=B8=AD=E5=AF=B9=E4=BA=8EJdAPI=E7=9A=84=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store.go | 5 +++-- business/partner/purchase/jd/jd.go | 4 ++++ controllers/cms_store.go | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index d5a76d538..38673b1a0 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -35,6 +35,7 @@ import ( "git.rosy.net.cn/jx-callback/business/model/legacymodel" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/business/partner/purchase/ebai" + "git.rosy.net.cn/jx-callback/business/partner/purchase/jd" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" ) @@ -2302,7 +2303,7 @@ func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDi return storeList, err } -func JdStoreInfoCoordinateRecover(ctx *jxcontext.Context, files []*multipart.FileHeader) (err error) { +func JdStoreInfoCoordinateRecover(ctx *jxcontext.Context, vendorOrgCode string, files []*multipart.FileHeader) (err error) { if len(files) == 0 { return errors.New("没有文件上传!") } @@ -2316,7 +2317,7 @@ func JdStoreInfoCoordinateRecover(ctx *jxcontext.Context, files []*multipart.Fil var validStoreList []*dao.StoreDetail for _, v := range storeList { if v.Status != model.StoreStatusDisabled && v.CreatedAt.Sub(utils.Str2Time("2019-10-01")) > 0 { - storeInfo, err := api.JdAPI.GetStoreInfoByStationNo2(v.VendorStoreID) + storeInfo, err := jd.GetAPI(vendorOrgCode).GetStoreInfoByStationNo2(v.VendorStoreID) if err == nil && storeInfo.CreateTime.GoTime().Sub(utils.Str2Time("2019-10-25")) > 0 { if storeDetail, err := dao.GetStoreDetail(db, v.StoreID, v.VendorID); err == nil { validStoreList = append(validStoreList, storeDetail) diff --git a/business/partner/purchase/jd/jd.go b/business/partner/purchase/jd/jd.go index ff34f36f4..33f85cc61 100644 --- a/business/partner/purchase/jd/jd.go +++ b/business/partner/purchase/jd/jd.go @@ -26,6 +26,10 @@ func getAPI(appOrgCode string) (apiObj *jdapi.API) { return partner.CurAPIManager.GetAPI(model.VendorIDJD, appOrgCode).(*jdapi.API) } +func GetAPI(appOrgCode string) (apiObj *jdapi.API) { + return getAPI(appOrgCode) +} + func appKey2OrgCode(appKey string) (vendorOrgCode string) { apiList := partner.CurAPIManager.GetAppOrgCodeList(model.VendorIDJD) for _, v := range apiList { diff --git a/controllers/cms_store.go b/controllers/cms_store.go index 01a583c86..5c693d215 100644 --- a/controllers/cms_store.go +++ b/controllers/cms_store.go @@ -553,6 +553,7 @@ func (c *StoreController) GetStoreListByLocation() { // @Title 老格恢复拓店进度 // @Description 老格恢复拓店进度 // @Param token header string true "认证token" +// @Param vendorOrgCode formData string false "厂商内组织代码" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /JdStoreInfoCoordinateRecover [post] @@ -560,7 +561,7 @@ func (c *StoreController) JdStoreInfoCoordinateRecover() { c.callJdStoreInfoCoordinateRecover(func(params *tStoreJdStoreInfoCoordinateRecoverParams) (retVal interface{}, errCode string, err error) { r := c.Ctx.Request files := r.MultipartForm.File["userfiles"] - err = cms.JdStoreInfoCoordinateRecover(params.Ctx, files) + err = cms.JdStoreInfoCoordinateRecover(params.Ctx, params.VendorOrgCode, files) return retVal, "", err }) } From b21d652149f23bd38888cd90544f502e9b5ee176 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 12 Dec 2019 12:02:15 +0800 Subject: [PATCH 09/10] +djsw.UpdateSku --- controllers/jd_callback.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/controllers/jd_callback.go b/controllers/jd_callback.go index d0b090070..73819c55f 100644 --- a/controllers/jd_callback.go +++ b/controllers/jd_callback.go @@ -204,3 +204,7 @@ func (c *DjswController) nullOperation() { c.Data["json"] = c.transferResponse("nullOperation", nil) c.ServeJSON() } + +func (c *DjswController) UpdateSku() { + c.nullOperation() +} From e94cd01982041e47330f08f8b2f9f2e971d0dcba Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 12 Dec 2019 12:49:35 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E4=BA=AC=E8=A5=BF=E8=8F=9C=E5=B8=82?= =?UTF-8?q?=E5=90=AF=E7=94=A8349454?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/app.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/app.conf b/conf/app.conf index 87e5c2ef1..166136d97 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -144,7 +144,7 @@ jdToken = "77e703b7-7997-441b-a12a-2e522efb117a" jdAppKey = "1dba76d40cac446ca500c0391a0b6c9d" jdSecret = "a88d031a1e7b462cb1579f12e97fe7f4" -jd2OrgCode = "" +jd2OrgCode = "349454" jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7" jd2AppKey = "7fb947624ff847ae94ff2f068cc99652" jd2Secret = "1097abd7ef09427099b4922784af123a"