diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 7858319e0..9178cc301 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -3983,11 +3983,7 @@ func BackUpStoreSkuBind(ctx *jxcontext.Context, isAsync, isContinueWhenError boo storeSkuBindHis := &model.StoreSkuBindHistory{ SnapshotAt: snapshotAt.AddDate(0, 0, -2), } - storeSkuBindHis2 := &model.StoreSkuBindHistory{ - SnapshotAt: snapshotAt, - } dao.DeleteEntity(db, storeSkuBindHis, "SnapshotAt") - dao.DeleteEntity(db, storeSkuBindHis2, "SnapshotAt") storeList, err := dao.GetStoreList(db, nil, nil, nil, nil, "") task := tasksch.NewParallelTask("BackUpStoreSkuBind", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index d5efa4c0a..1ea71de5e 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -955,14 +955,14 @@ func (v *VendorSync) SyncStoreSkusFromYb(ctx *jxcontext.Context, storeIDs []int, func syncStoreSkusFromYb(ctx *jxcontext.Context, storeID, vendorID int, vendorStoreID string, isAsync, isContinueWhenError bool) (hint string, err error) { var ( - db = dao.GetDB() - localSkuMap = make(map[string]*dao.StoreSkuSyncInfo) - vendorSkuMap = make(map[string]*partner.SkuNameInfo) - skuBindInfosDel []*StoreSkuBindInfo - skuBindInfosUpt []*StoreSkuBindInfo - addList []*partner.SkuNameInfo - updateList []*partner.SkuNameInfo - deleteList []*dao.StoreSkuSyncInfo + db = dao.GetDB() + localSkuMap = make(map[string]*dao.StoreSkuSyncInfo) + vendorSkuMap = make(map[string]*partner.SkuNameInfo) + // skuBindInfosDel []*StoreSkuBindInfo + // skuBindInfosUpt []*StoreSkuBindInfo + addList []*partner.SkuNameInfo + updateList []*partner.SkuNameInfo + deleteList []*dao.StoreSkuSyncInfo ) handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler) @@ -992,101 +992,102 @@ func syncStoreSkusFromYb(ctx *jxcontext.Context, storeID, vendorID int, vendorSt deleteList = append(deleteList, v) } } - // fmt.Println("remoteSkuList", len(remoteSkuList)) - // fmt.Println("addList", len(addList)) - // fmt.Println("updateList", len(updateList)) - taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { - store, _ := dao.GetStoreDetail(db, storeID, vendorID) - switch step { - case 0: - if len(addList) > 0 { - taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - var ( - v = batchItemList[0].(*partner.SkuNameInfo) - upc = v.YbBarCode - ) - err = AddSkuNameByUpc(ctx, upc, store, v) - if err != nil { - task.AddFailedList(putils.GetErrMsg2FailedSingleList(nil, err, storeID, model.VendorChineseNames[vendorID], "根据upc创建京西商品")) - } - return retVal, err - } - taskParallel := tasksch.NewParallelTask("创建商品", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, addList) - tasksch.HandleTask(taskParallel, task, true).Run() - _, err = taskParallel.GetResult(0) - } - case 1: - if len(deleteList) > 0 { - taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - var ( - v = batchItemList[0].(*dao.StoreSkuSyncInfo) - ) - skuBindInfo := &StoreSkuBindInfo{ - NameID: v.NameID, - IsFocus: -1, - } - retVal = []*StoreSkuBindInfo{skuBindInfo} - return retVal, err - } - taskParallel := tasksch.NewParallelTask("删除商品", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, deleteList) - tasksch.HandleTask(taskParallel, task, true).Run() - resultDel, _ := taskParallel.GetResult(0) - for _, v := range resultDel { - skuBindInfosDel = append(skuBindInfosDel, v.(*StoreSkuBindInfo)) - } - _, err = updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosDel, false, false) - } - case 2: - if len(updateList) > 0 { - taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - var ( - v = batchItemList[0].(*partner.SkuNameInfo) - skuBindInfo = &StoreSkuBindInfo{} - storeSkus []*dao.StoreSkuExt - pricePercentagePack []*model.PricePercentageItem - ) - sql := ` - SELECT a.*, c.id name_id - FROM store_sku_bind a - JOIN sku b ON a.sku_id = b.id - JOIN sku_name c ON c.id = b.name_id - WHERE a.store_id = ? AND a.yb_id = ? AND a.deleted_at = ? - ` - sqlParams := []interface{}{storeID, v.SkuList[0].VendorSkuID, utils.DefaultTimeValue} - err = dao.GetRows(db, &storeSkus, sql, sqlParams) - if len(storeSkus) > 0 { - if storeSkus[0].YbPrice != int(v.SkuList[0].VendorPrice) { - err = jxutils.Strings2Objs(store.PricePercentagePackStr, &pricePercentagePack) - skuBindInfo.UnitPrice = jxutils.CaculateJxPriceByPricePack(pricePercentagePack, 0, int(v.SkuList[0].VendorPrice)) - } - } else { - return retVal, fmt.Errorf("未查询到门店商品,yb_id [%v]", v.SkuList[0].VendorSkuID) - } - if v.SkuList[0].Stock < 1 { - skuBindInfo.IsSale = model.StoreSkuBindStatusDontSale - } else { - skuBindInfo.IsSale = model.StoreSkuBindStatusNormal - } - skuBindInfo.NameID = storeSkus[0].NameID - retVal = []*StoreSkuBindInfo{skuBindInfo} - return retVal, err - } - taskParallel := tasksch.NewParallelTask("更新商品价格和库存", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, updateList) - tasksch.HandleTask(taskParallel, task, true).Run() - resultUpt, _ := taskParallel.GetResult(0) - for _, v := range resultUpt { - skuBindInfosUpt = append(skuBindInfosUpt, v.(*StoreSkuBindInfo)) - } - _, err = updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosUpt, false, false) - } - case 3: - _, err = CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{0, 1, 3}, nil, false, nil, nil, 0, true, true) - } - return result, err - } - taskSeq := tasksch.NewSeqTask2("同步银豹商品到京西", ctx, true, taskSeqFunc, 3) - tasksch.HandleTask(taskSeq, nil, true).Run() - hint = taskSeq.GetID() + fmt.Println("remoteSkuList", len(remoteSkuList)) + fmt.Println("addList", len(addList)) + fmt.Println("updateList", utils.Format4Output(updateList, false)) + fmt.Println("deleteList", utils.Format4Output(deleteList, false)) + // taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + // store, _ := dao.GetStoreDetail(db, storeID, vendorID) + // switch step { + // case 0: + // if len(addList) > 0 { + // taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + // var ( + // v = batchItemList[0].(*partner.SkuNameInfo) + // upc = v.YbBarCode + // ) + // err = AddSkuNameByUpc(ctx, upc, store, v) + // if err != nil { + // task.AddFailedList(putils.GetErrMsg2FailedSingleList(nil, err, storeID, model.VendorChineseNames[vendorID], "根据upc创建京西商品")) + // } + // return retVal, err + // } + // taskParallel := tasksch.NewParallelTask("创建商品", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, addList) + // tasksch.HandleTask(taskParallel, task, true).Run() + // _, err = taskParallel.GetResult(0) + // } + // case 1: + // if len(deleteList) > 0 { + // taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + // var ( + // v = batchItemList[0].(*dao.StoreSkuSyncInfo) + // ) + // skuBindInfo := &StoreSkuBindInfo{ + // NameID: v.NameID, + // IsFocus: -1, + // } + // retVal = []*StoreSkuBindInfo{skuBindInfo} + // return retVal, err + // } + // taskParallel := tasksch.NewParallelTask("删除商品", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, deleteList) + // tasksch.HandleTask(taskParallel, task, true).Run() + // resultDel, _ := taskParallel.GetResult(0) + // for _, v := range resultDel { + // skuBindInfosDel = append(skuBindInfosDel, v.(*StoreSkuBindInfo)) + // } + // _, err = updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosDel, false, false) + // } + // case 2: + // if len(updateList) > 0 { + // taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + // var ( + // v = batchItemList[0].(*partner.SkuNameInfo) + // skuBindInfo = &StoreSkuBindInfo{} + // storeSkus []*dao.StoreSkuExt + // pricePercentagePack []*model.PricePercentageItem + // ) + // sql := ` + // SELECT a.*, c.id name_id + // FROM store_sku_bind a + // JOIN sku b ON a.sku_id = b.id + // JOIN sku_name c ON c.id = b.name_id + // WHERE a.store_id = ? AND a.yb_id = ? AND a.deleted_at = ? + // ` + // sqlParams := []interface{}{storeID, v.SkuList[0].VendorSkuID, utils.DefaultTimeValue} + // err = dao.GetRows(db, &storeSkus, sql, sqlParams) + // if len(storeSkus) > 0 { + // if storeSkus[0].YbPrice != int(v.SkuList[0].VendorPrice) { + // err = jxutils.Strings2Objs(store.PricePercentagePackStr, &pricePercentagePack) + // skuBindInfo.UnitPrice = jxutils.CaculateJxPriceByPricePack(pricePercentagePack, 0, int(v.SkuList[0].VendorPrice)) + // } + // } else { + // return retVal, fmt.Errorf("未查询到门店商品,yb_id [%v]", v.SkuList[0].VendorSkuID) + // } + // if v.SkuList[0].Stock < 1 { + // skuBindInfo.IsSale = model.StoreSkuBindStatusDontSale + // } else { + // skuBindInfo.IsSale = model.StoreSkuBindStatusNormal + // } + // skuBindInfo.NameID = storeSkus[0].NameID + // retVal = []*StoreSkuBindInfo{skuBindInfo} + // return retVal, err + // } + // taskParallel := tasksch.NewParallelTask("更新商品价格和库存", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, updateList) + // tasksch.HandleTask(taskParallel, task, true).Run() + // resultUpt, _ := taskParallel.GetResult(0) + // for _, v := range resultUpt { + // skuBindInfosUpt = append(skuBindInfosUpt, v.(*StoreSkuBindInfo)) + // } + // _, err = updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosUpt, false, false) + // } + // case 3: + // _, err = CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{0, 1, 3}, nil, false, nil, nil, 0, true, true) + // } + // return result, err + // } + // taskSeq := tasksch.NewSeqTask2("同步银豹商品到京西", ctx, true, taskSeqFunc, 3) + // tasksch.HandleTask(taskSeq, nil, true).Run() + // hint = taskSeq.GetID() return hint, err } @@ -1118,9 +1119,13 @@ func syncJdsStoreStock(ctx *jxcontext.Context, db *dao.DaoDB, storeSkus []*model stock = 9999 } storeSku2, _ := dao.GetStoresSkusInfo(db, []int{storeMap.StoreID}, []int{storeSku.SkuID}) - if storeSku.JdsID != 0 && len(storeSku2) > 0 { - if storeSku.Status != storeSku2[0].Status && storeMap.VendorStoreID != "" { - err = api.JdShopAPI.UpdateSkuSiteStock(storeSku.JdsID, stock, utils.Str2Int(storeMap.VendorStoreID)) + if storeSku.JdsID != 0 { + if len(storeSku2) > 0 { + if storeSku.Status != storeSku2[0].Status && storeMap.VendorStoreID != "" { + err = api.JdShopAPI.UpdateSkuSiteStock(storeSku.JdsID, stock, utils.Str2Int(storeMap.VendorStoreID)) + } + } else { + err = api.JdShopAPI.UpdateSkuSiteStock(storeSku.JdsID, 0, utils.Str2Int(storeMap.VendorStoreID)) } } } diff --git a/business/model/const.go b/business/model/const.go index 87a459c01..26b6ae09d 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -152,11 +152,12 @@ var ( } ZXCityCodeMap = map[int]string{ - 310100: "上海市", - 110100: "北京市", - 120100: "天津市", - 440300: "深圳市", - 500100: "重庆市", + 310100: "上海市", + 110100: "北京市", + 120100: "天津市", + 440300: "深圳市", + 500100: "重庆市", + 9441900: "东莞", } PrinterVendorInfo = map[int][]string{ diff --git a/business/partner/purchase/jdshop/store.go b/business/partner/purchase/jdshop/store.go index 1945f2062..da7fd3231 100644 --- a/business/partner/purchase/jdshop/store.go +++ b/business/partner/purchase/jdshop/store.go @@ -105,7 +105,7 @@ func (p *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName stri if createEntityStoreParam.AddCode == 0 { createEntityStoreParam.AddCode = store.JdCode } - //证明这个店可能隶属直辖市 + //证明这个店可能隶属直辖市或者东莞 if model.ZXCityCodeMap[store.CityCode] != "" { result, _ := api.AutonaviAPI.GetCoordinateAreaInfo(jxutils.IntCoordinate2Standard(store.Lng), jxutils.IntCoordinate2Standard(store.Lat)) if result["regeocode"] != nil { diff --git a/business/partner/purchase/yb/store_sku.go b/business/partner/purchase/yb/store_sku.go index 12add114e..f7857ef4e 100644 --- a/business/partner/purchase/yb/store_sku.go +++ b/business/partner/purchase/yb/store_sku.go @@ -38,15 +38,17 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v result, err = api.YinBaoAPI.AddProductInfo(buildProductInfoParam(storeSku)) } if err != nil { - // if strings.Contains(err.Error(), addErr1) { - // queryProductByBarcodeResult, err := api.YinBaoAPI.QueryProductByBarcodes([]string{storeSku.YbBarCode}) - // if err != nil && len(queryProductByBarcodeResult) > 0 { - // if queryProductByBarcodeResult[0].Enable == model.SkuStatusDeleted { - // api.YinBaoAPI.SaveProduct(userId, keyword, saveProductParam) - // } - // } - // } - failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDYB], "创建商品") + if strings.Contains(err.Error(), addErr1) { + queryProductByBarcodeResult, err := api.YinBaoAPI.QueryProductByBarcodes([]string{storeSku.YbBarCode}) + if err != nil && len(queryProductByBarcodeResult) > 0 { + if queryProductByBarcodeResult[0].Enable == model.SkuStatusDeleted { + api.YinBaoAPI.BatchUpdateProductEnable(vendorStoreID, utils.Int64ToStr(queryProductByBarcodeResult[0].UID), model.SkuStatusNormal) + storeSku.VendorSkuID = utils.Int64ToStr(queryProductByBarcodeResult[0].UID) + } + } + } else { + failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDYB], "创建商品") + } } else { storeSku.VendorSkuID = utils.Int64ToStr(result.UID) err = uploadYbImage(vendorStoreID, storeSku.YbBarCode, storeSku.Img)