package ebai // type tStoreSkuFullInfo struct { // model.StoreSkuBind // NameID int `orm:"column(name_id)"` // SpecQuality float32 `json:"specQuality"` // SpecUnit string `orm:"size(8)" json:"specUnit"` // 质量或容量 // Weight int `json:"weight"` // 重量/质量,单位为克,当相应的SkuName的SpecUnit为g或kg时,必须等于SpecQuality // SkuStatus int // Prefix string `orm:"size(255)" json:"prefix"` // Name string `orm:"size(255);index" json:"name"` // Comment string `orm:"size(255)" json:"comment"` // IsGlobal int8 `orm:"default(1)" json:"isGlobal"` // 是否是全部(全国)可见,如果否的话,可见性由SkuPlace决定 // Unit string `orm:"size(8)" json:"unit"` // Img string `orm:"size(255)" json:"img"` // PlaceStr string // Upc string // DescImgEbai string // CatName string `orm:"size(255)"` // CatMapID int `orm:"column(cat_map_id)"` // CatID int `orm:"column(cat_id)"` // CatEbaiID int64 `orm:"column(cat_ebai_id)"` // ParentCatMapID int `orm:"column(parent_cat_map_id)"` // ParentCatID int `orm:"column(parent_cat_id)"` // ParentCatEbaiID int64 `orm:"column(parent_cat_ebai_id)"` // EbaiCat1ID int64 `orm:"column(ebai_cat1_id)"` // EbaiCat2ID int64 `orm:"column(ebai_cat2_id)"` // EbaiCat3ID int64 `orm:"column(ebai_cat3_id)"` // CatPricePercentage int // } // type tStoreCatInfo struct { // model.StoreSkuCategoryMap // CatID int `orm:"column(cat_id)"` // Name string // ParentID int `orm:"column(parent_id)"` // Level int // Type int // Seq int // ParentEbaiID int64 `orm:"column(parent_ebai_id)"` // Children map[string]*tStoreCatInfo `orm:"-"` // } // func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs []int) (storeSkuInfoList []*tStoreSkuFullInfo, err error) { // sql := ` // SELECT // t1.*, t2.spec_quality, t2.spec_unit, t2.weight, t2.status sku_status, // t3.id name_id, t3.prefix, t3.name, t2.comment, t3.is_global, t3.unit, IF(t3.img_ebai <> '', t3.img_ebai, t3.img) img, t3.upc, t3.desc_img_ebai, // t4.name cat_name, t4.ebai_price_percentage cat_price_percentage, // t4.id cat_id, // t5.id cat_map_id, t5.ebai_id cat_ebai_id, // t4p.id parent_cat_id, // t5p.id parent_cat_map_id, t5p.ebai_id parent_cat_ebai_id, // cat1.vendor_category_id ebai_cat3_id, cat2.vendor_category_id ebai_cat2_id, cat2.parent_id ebai_cat1_id // FROM store_sku_bind t1 // LEFT JOIN sku t2 ON t1.sku_id = t2.id AND t2.deleted_at = ? AND t2.status = ? // LEFT JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ? AND t3.status = ? // LEFT JOIN sku_category t4 ON t3.category_id = t4.id // LEFT JOIN sku_category t4p ON t4p.id = t4.parent_id // LEFT JOIN store_sku_category_map t5 ON t5.store_id = t1.store_id AND t5.category_id = t4.id AND t5.deleted_at = ? // LEFT JOIN store_sku_category_map t5p ON t5p.store_id = t1.store_id AND t5p.category_id = t4p.id AND t5p.deleted_at = ? // LEFT JOIN sku_vendor_category cat1 ON t4.ebai_category_id = cat1.vendor_category_id AND cat1.vendor_id = ? // LEFT JOIN sku_vendor_category cat2 ON cat1.parent_id = cat2.vendor_category_id AND cat1.vendor_id = ? // WHERE t1.store_id = ? AND (t1.ebai_sync_status <> 0 OR (t1.ebai_id <> 0 AND t3.id IS NULL)) // ` // sqlParams := []interface{}{ // utils.DefaultTimeValue, // model.SkuStatusNormal, // utils.DefaultTimeValue, // model.SkuStatusNormal, // utils.DefaultTimeValue, // utils.DefaultTimeValue, // model.VendorIDEBAI, // model.VendorIDEBAI, // storeID, // } // if len(skuIDs) > 0 { // sql += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" // sqlParams = append(sqlParams, skuIDs) // } // sql += " ORDER BY t1.price DESC" // err = dao.GetRows(db, &storeSkuInfoList, sql, sqlParams...) // return storeSkuInfoList, err // } // func (p *PurchaseHandler) createCatByStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, storeID int, storeSkuInfoList []*tStoreSkuFullInfo) (num int64, err error) { // catList2Add := make(map[int]int) // for _, storeSku := range storeSkuInfoList { // if storeSku.CatID != 0 && storeSku.EbaiSyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreSkuModifiedMask) != 0 && storeSku.Status == model.SkuStatusNormal { // if storeSku.ParentCatMapID == 0 && storeSku.ParentCatID != 0 { // catList2Add[storeSku.ParentCatID] = 1 // } // if storeSku.CatMapID == 0 { // catList2Add[storeSku.CatID] = 1 // } // } // } // num = int64(len(catList2Add)) // if num > 0 { // for k := range catList2Add { // if err = dao.AddStoreCategoryMap(db, storeID, k, model.VendorIDEBAI, "", model.SyncFlagNewMask, ctx.GetUserName()); err != nil { // return 0, err // } // } // if _, err = p.SyncStoreCategory(ctx, parentTask, storeID, false); err != nil { // return 0, err // } // } // return num, nil // } // func (p *PurchaseHandler) FullSyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) { // userName := ctx.GetUserName() // globals.SugarLogger.Debugf("ebai FullSyncStoreSkus storeID:%d, isContinueWhenError:%t, userName:%s", storeID, isContinueWhenError, userName) // db := dao.GetDB() // storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDEBAI) // if err != nil { // return "", err // } // rootTask := tasksch.NewSeqTask("FullSyncStoreSkus", ctx, // func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { // switch step { // case 0: // err = p.DeleteStoreAllSkus(ctx, rootTask, storeID, storeDetail.VendorStoreID, isContinueWhenError) // // 强制忽略删除SKU错误 // if isContinueWhenError { // err = nil // } // if err == nil { // _, err = dao.SetStoreSkuSyncStatus(db, model.VendorIDEBAI, []int{storeID}, nil, model.SyncFlagNewMask) // } // case 1: // if err = p.DeleteStoreAllCategories(ctx, rootTask, storeID, storeDetail.VendorStoreID, isContinueWhenError); err == nil { // _, err = dao.SetStoreCategorySyncStatus(db, model.VendorIDEBAI, []int{storeID}, nil, model.SyncFlagNewMask) // } // case 2: // err = p.SyncLocalStoreCategory(db, storeID, userName) // case 3: // _, err = p.SyncStoreCategory(ctx, rootTask, storeID, false) // case 4: // _, err = p.SyncStoreSkus(ctx, rootTask, storeID, nil, false, isContinueWhenError) // } // return nil, err // }, 5) // tasksch.AddChild(parentTask, rootTask).Run() // if !isAsync { // _, err = rootTask.GetResult(0) // } // return rootTask.ID, err // } // func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { // db := dao.GetDB() // storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDEBAI) // if err != nil { // return "", err // } // return p.syncStoreSkus(ctx, parentTask, storeDetail, skuIDs, isAsync, isContinueWhenError) // } // func (p *PurchaseHandler) syncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeDetail *dao.StoreDetail, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { // storeID := storeDetail.Store.ID // userName := ctx.GetUserName() // globals.SugarLogger.Debugf("ebai SyncStoreSkus storeID:%d, skuIDs:%v, isContinueWhenError:%t, userName:%s", storeID, skuIDs, isContinueWhenError, userName) // var storeSkuInfoList []*tStoreSkuFullInfo // var num int64 // strStoreID := utils.Int2Str(storeID) // rootTask := tasksch.NewSeqTask("SyncStoreSkus饿百1", ctx, // func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { // if step == 0 { // db := dao.GetDB() // if _, err = p.SyncStoreCategory(ctx, parentTask, storeID, false); err != nil { // return nil, err // } // for i := 0; i < 3; i++ { // if storeSkuInfoList, err = p.getDirtyStoreSkus(db, storeID, skuIDs); err != nil { // return nil, err // } // if num, err = p.createCatByStoreSkus(ctx, rootTask, db, storeID, storeSkuInfoList); err != nil { // return nil, err // } // if num == 0 { // break // } // if _, err = p.SyncStoreCategory(ctx, parentTask, storeID, false); err != nil { // return nil, err // } // } // if num != 0 { // globals.SugarLogger.Infof("SyncStoreSkus 不能创建商品所需的类别, storeID:%d, skuIDs:%v, isContinueWhenError:%t, userName:%s", storeID, skuIDs, isContinueWhenError, userName) // return nil, errors.New("不能创建商品所需的类别") // } // } else if step == 1 { // task := tasksch.NewParallelTask("SyncStoreSkus饿百2", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, // func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { // storeSku := batchItemList[0].(*tStoreSkuFullInfo) // pricePercentage := jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, storeSku.Price, int(storeDetail.PricePercentage)) // // globals.SugarLogger.Debugf("skuID:%d, price:%d, pricePercentage:%d", storeSku.SkuID, storeSku.Price, pricePercentage) // // globals.SugarLogger.Debugf(utils.Format4Output(storeDetail.PricePercentagePackObj, false)) // updateFields := []string{model.FieldEbaiSyncStatus} // syncStatus := int8(0) // if storeSku.NameID == 0 || storeSku.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 { // if storeSku.EbaiSyncStatus&model.SyncFlagNewMask == 0 && !jxutils.IsEmptyID(storeSku.EbaiID) { // if globals.EnableEbaiStoreWrite { // opResult, err2 := api.EbaiAPI.SkuDelete(ctx.GetTrackInfo(), strStoreID, []int64{storeSku.EbaiID}, nil) // if err = err2; err != nil { // if ebaiapi.IsErrSkuNotExist(err) || (opResult != nil && len(opResult.FailedList) == 1) { // err = nil // } // } // } // } // if err == nil { // if utils.IsTimeZero(storeSku.DeletedAt) { // storeSku.DeletedAt = time.Now() // updateFields = append(updateFields, model.FieldDeletedAt) // } // storeSku.EbaiID = 0 // updateFields = append(updateFields, model.FieldEbaiID) // } // } else { // if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 { // // globals.SugarLogger.Debug(utils.Format4Output(genSkuParamsFromStoreSkuInfo(storeSku), false)) // // todo 适当处理重复(即已经创建)的情况 // mergedStoreSkuStatus := jxutils.MergeSkuStatus(storeSku.SkuStatus, storeSku.Status) // if mergedStoreSkuStatus == model.SkuStatusNormal { // 待创建且不可售的,暂不新建 // if storeSku.Img != "" { // if globals.EnableEbaiStoreWrite { // if storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(ctx.GetTrackInfo(), strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(pricePercentage, storeSku)); err == nil { // utils.AfterFuncWithRecover(5*time.Second, func() { // api.EbaiAPI.SkuShopCategoryMap(strStoreID, storeSku.EbaiID, "", storeSku.CatEbaiID, ebaiapi.MaxSkuCatRank-storeSku.Price) // }) // } // } else { // storeSku.EbaiID = jxutils.GenFakeID() // } // if err == nil { // updateFields = append(updateFields, model.FieldEbaiID) // } else if ebaiapi.IsErrSkuExist(err) { // if storeSku.EbaiID = api.EbaiAPI.GetEbaiSkuIDFromCustomID(strStoreID, utils.Int2Str(storeSku.SkuID)); storeSku.EbaiID > 0 { // err = nil // updateFields = append(updateFields, model.FieldEbaiID) // if err2 := skuUpdate(ctx, strStoreID, pricePercentage, storeSku); err2 != nil { // syncStatus = model.SyncFlagStoreSkuModifiedMask // } // } // } // } else { // err = fmt.Errorf("SKUANME%d:%s没有图片,同步失败", storeSku.NameID, storeSku.Name) // } // } else { // updateFields = nil // } // } else if storeSku.EbaiSyncStatus&model.SyncFlagStoreSkuModifiedMask != 0 { // if jxutils.IsEmptyID(storeSku.EbaiID) { // err = fmt.Errorf("京西数据异常,修改一个没有创建的饿百商品:%d, store:%s", storeSku.SkuID, strStoreID) // } else { // if storeSku.Img != "" { // err = skuUpdate(ctx, strStoreID, pricePercentage, storeSku) // } else { // err = fmt.Errorf("SKUANME%d:%s没有图片,同步失败", storeSku.NameID, storeSku.Name) // } // } // } // } // if err == nil { // if len(updateFields) > 0 { // storeSku.EbaiSyncStatus = syncStatus // _, err = dao.UpdateEntity(nil, &storeSku.StoreSkuBind, updateFields...) // } // } else if isErrModifyPrice(err) { // // err = partner.NewErrorCode(err.Error(), partner.ErrCodeChangePriceFailed, model.VendorIDEBAI) // } // return nil, err // }, storeSkuInfoList) // tasksch.AddChild(rootTask, task).Run() // _, err = task.GetResult(0) // } // return nil, err // }, 2) // tasksch.AddChild(parentTask, rootTask).Run() // if !isAsync { // _, err = rootTask.GetResult(0) // } // return rootTask.ID, err // } // func skuUpdate(ctx *jxcontext.Context, strStoreID string, pricePercentage int, storeSku *tStoreSkuFullInfo) (err error) { // if globals.EnableEbaiStoreWrite { // if _, err = api.EbaiAPI.SkuUpdate(ctx.GetTrackInfo(), strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(pricePercentage, storeSku)); err != nil { // // 如果是改价错误,尝试把价格标志去掉再同步 // if isErrModifyPrice(err) { // storeSku.EbaiSyncStatus = storeSku.EbaiSyncStatus & ^model.SyncFlagPriceMask // if storeSku.EbaiSyncStatus != 0 { // if _, err2 := api.EbaiAPI.SkuUpdate(ctx.GetTrackInfo(), strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(pricePercentage, storeSku)); err2 != nil { // err = err2 // } // } // } // } // } // return err // } // func isErrModifyPrice(err error) bool { // if errExt, ok := err.(*utils.ErrorWithCode); ok && errExt.IntCode() == 1 { // for _, v := range []string{ // "无法修改价格", // "sku_参加营销活动", // } { // if strings.Index(errExt.ErrMsg(), v) >= 0 { // return true // } // } // } // return false // } // func (p *PurchaseHandler) RefreshStoresAllSkusID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool, storeIDs []int) (hint string, err error) { // return hint, err // } // /////////// // func genSkuParamsFromStoreSkuInfo(pricePercentage int, storeSku *tStoreSkuFullInfo) (params map[string]interface{}) { // price := jxutils.CaculateSkuVendorPrice(storeSku.Price, pricePercentage, storeSku.CatPricePercentage) // params = map[string]interface{}{ // "name": utils.LimitMixedStringLen(jxutils.ComposeSkuName(storeSku.Prefix, storeSku.Name, storeSku.Comment, storeSku.Unit, storeSku.SpecQuality, storeSku.SpecUnit, 0), ebaiapi.MaxSkuNameByteCount), // "left_num": model.MaxStoreSkuStockQty, // "category_id": storeSku.CatEbaiID, // "predict_cat": 0, // 不使用推荐类目 // "cat1_id": getEbaiCat(storeSku.EbaiCat1ID, 1), // "cat2_id": getEbaiCat(storeSku.EbaiCat2ID, 2), // "cat3_id": getEbaiCat(storeSku.EbaiCat3ID, 3), // "weight": storeSku.Weight, // "photos": []map[string]interface{}{ // map[string]interface{}{ // "is_master": true, // "url": storeSku.Img, // }, // }, // } // if storeSku.DescImgEbai != "" { // params["rtf"] = storeSku.DescImgEbai // } // if storeSku.EbaiSyncStatus&(model.SyncFlagPriceMask|model.SyncFlagNewMask) != 0 { // params["sale_price"] = price // } // if storeSku.EbaiSyncStatus&(model.SyncFlagSaleMask|model.SyncFlagNewMask) != 0 { // params["status"] = jxSkuStatus2Ebai(jxutils.MergeSkuStatus(storeSku.SkuStatus, storeSku.Status)) // } // // todo 饿百如果给的UPC是空要报错,但如果我要删除UPC怎么弄? // // if storeSku.Upc != "" { // // params["upc"] = storeSku.Upc // // } // return params // } // // 从饿百同步分类信息到本地 // // 些函数执行后: // // 远程有与本地有的条目会关联(并置标记,下次同步会刷新远程) // // 远程没有本地有的条目会标记新增 // // 远程有本地没有的条目不做处理 // func (p *PurchaseHandler) SyncLocalStoreCategory(db *dao.DaoDB, storeID int, userName string) (err error) { // globals.SugarLogger.Debugf("ebai SyncLocalStoreCategory storeID:%d, userName:%s", storeID, userName) // sql := ` // SELECT t2.*, t1.id cat_id, t1.name, t1.parent_id, t1.level, t1.type, t1.seq // FROM sku_category t1 // LEFT JOIN store_sku_category_map t2 ON t1.id = t2.category_id AND t2.store_id = ? AND (t2.deleted_at = ?) // WHERE t1.deleted_at = ? // ORDER BY t1.level // ` // var catList []*tStoreCatInfo // if err = dao.GetRows(db, &catList, sql, storeID, utils.DefaultTimeValue, utils.DefaultTimeValue); err == nil { // cat1Map := map[string]*tStoreCatInfo{} // for _, v := range catList { // v.Name = formatCatName(v.Name) // if v.Level == 1 { // cat1 := cat1Map[v.Name] // if cat1 == nil { // cat1Map[v.Name] = v // cat1Map[utils.Int2Str(v.CatID)] = v // v.Children = make(map[string]*tStoreCatInfo) // } // } else { // cat1 := cat1Map[utils.Int2Str(v.ParentID)] // if cat1 == nil { // panic(fmt.Sprintf("can not find category, id:%d", v.ParentID)) // } // cat1.Children[v.Name] = v // } // v.EbaiSyncStatus |= model.SyncFlagNewMask // } // result, err2 := api.EbaiAPI.ShopCategoryGet(utils.Int2Str(storeID)) // if err = err2; err == nil { // dao.Begin(db) // defer func() { // dao.Rollback(db) // }() // // globals.SugarLogger.Debug(utils.Format4Output(cat1Map, false)) // if err = p.processLocalCatByRemote(db, storeID, cat1Map, result, userName); err == nil { // err = p.updateLocalCatAsNew(db, cat1Map, userName) // } // if err == nil { // dao.Commit(db) // } // } // } // return err // } // // 从本地同步分类信息到饿百 // // 测试过程中出现过,父分类创建成功后马上创建子分类会报没有父分类错 // func (p *PurchaseHandler) SyncStoreCategory(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync bool) (hint string, err error) { // userName := ctx.GetUserName() // globals.SugarLogger.Debugf("ebai SyncStoreCategory storeID:%d, userName:%s", storeID, userName) // db := dao.GetDB() // rootTask := tasksch.NewSeqTask("ebai SyncStoreCategory", ctx, // func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { // level := step + 1 // sql := ` // SELECT t2.*, t1.name, t1.parent_id, t1.level, t1.type, t1.seq, t2p.ebai_id parent_ebai_id // FROM sku_category t1 // LEFT JOIN sku_category t1p ON t1.parent_id = t1p.id // JOIN store_sku_category_map t2 ON t1.id = t2.category_id AND t2.store_id = ? AND t2.ebai_sync_status <> 0 // LEFT JOIN store_sku_category_map t2p ON t1p.id = t2p.category_id AND t2p.store_id = ? AND t2p.deleted_at = ? // WHERE t1.level = ? AND t1.deleted_at = ? // ` // var catList []*tStoreCatInfo // sqlParams := []interface{}{ // storeID, // storeID, // utils.DefaultTimeValue, // level, // utils.DefaultTimeValue, // } // if err = dao.GetRows(db, &catList, sql, sqlParams...); err == nil { // if len(catList) > 0 { // strStoreID := utils.Int2Str(storeID) // task := tasksch.NewParallelTask("SyncStoreCategory", nil, ctx, // func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { // updateFields := []string{model.FieldEbaiSyncStatus} // catInfo := batchItemList[0].(*tStoreCatInfo) // // globals.SugarLogger.Debug(utils.Format4Output(catInfo, false)) // if catInfo.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除 // if catInfo.EbaiSyncStatus&model.SyncFlagNewMask == 0 && catInfo.EbaiID != 0 { // if globals.EnableEbaiStoreWrite { // if err = api.EbaiAPI.ShopCategoryDelete(strStoreID, catInfo.EbaiID); ebaiapi.IsErrCategoryNotExist(err) { // err = nil // } // } // } // } else if catInfo.EbaiSyncStatus&model.SyncFlagNewMask != 0 { // 新增 // if globals.EnableEbaiStoreWrite { // catName := formatCatName(catInfo.Name) // catInfo.EbaiID, err = api.EbaiAPI.ShopCategoryCreate(strStoreID, catInfo.ParentEbaiID, catName, jxCatSeq2Ebai(catInfo.Seq)) // if ebaiapi.IsErrCategoryExist(err) { // if catInfo.EbaiID = api.EbaiAPI.GetEbaiCatIDFromName(strStoreID, catName); catInfo.EbaiID > 0 { // err = nil // } // } // } else { // catInfo.EbaiID = jxutils.GenFakeID() // } // if err == nil { // updateFields = append(updateFields, model.FieldEbaiID) // } // } else if catInfo.EbaiSyncStatus&model.SyncFlagModifiedMask != 0 { // 修改 // if globals.EnableEbaiStoreWrite { // err = api.EbaiAPI.ShopCategoryUpdate(strStoreID, catInfo.EbaiID, formatCatName(catInfo.Name), jxCatSeq2Ebai(catInfo.Seq)) // } // } // if err == nil { // db2 := dao.GetDB() // catInfo.EbaiSyncStatus = 0 // _, err = dao.UpdateEntity(db2, &catInfo.StoreSkuCategoryMap, updateFields...) // } // return nil, err // }, catList) // rootTask.AddChild(task).Run() // _, err = task.GetResult(0) // } // } // return nil, err // }, 2) // tasksch.AddChild(parentTask, rootTask).Run() // if !isAsync { // _, err = rootTask.GetResult(0) // } // return rootTask.ID, err // } // func (p *PurchaseHandler) processLocalCatByRemote(db *dao.DaoDB, storeID int, localCatMap map[string]*tStoreCatInfo, remoteCatList []*ebaiapi.CategoryInfo, userName string) (err error) { // if localCatMap == nil || remoteCatList == nil { // return nil // } // for _, v := range remoteCatList { // jxCat := localCatMap[v.Name] // if jxCat == nil { // 远程有,本地没有,非法类别 // // globals.SugarLogger.Debug(v.Name) // // globals.SugarLogger.Debug(utils.Format4Output(localCatMap, false)) // } else { // if jxCat.EbaiID != v.CategoryID { // if jxCat.ID == 0 { // 远程有,本门店没有 // globals.SugarLogger.Debug(jxCat.CatID) // err = dao.AddStoreCategoryMap(db, storeID, jxCat.CatID, model.VendorIDEBAI, utils.Int64ToStr(v.CategoryID), model.SyncFlagModifiedMask, userName) // } else { // 远程有,本门店有,但ID信息不一致 // _, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, &jxCat.StoreSkuCategoryMap, map[string]interface{}{ // model.FieldEbaiID: v.CategoryID, // }, userName, nil, model.FieldEbaiSyncStatus, model.SyncFlagModifiedMask) // } // } else { // 两边都有,且信息一致 // } // jxCat.EbaiSyncStatus = 0 // if err = p.processLocalCatByRemote(db, storeID, jxCat.Children, v.Children, userName); err != nil { // return err // } // } // if err != nil { // return err // } // } // return nil // } // func (p *PurchaseHandler) updateLocalCatAsNew(db *dao.DaoDB, localCatMap map[string]*tStoreCatInfo, userName string) (err error) { // if localCatMap == nil { // return nil // } // for _, v := range localCatMap { // if v.EbaiSyncStatus&model.SyncFlagNewMask != 0 { // dao.WrapUpdateULEntity(&v.StoreSkuCategoryMap, userName) // if _, err = dao.UpdateEntity(db, &v.StoreSkuCategoryMap); err != nil { // return err // } // } // if err = p.updateLocalCatAsNew(db, v.Children, userName); err != nil { // return err // } // } // return nil // }