diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 4ed18abd6..a10d73cef 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -604,6 +604,7 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s } skuNameExt.SkuName.Status = model.SkuStatusNormal if skuNameExt.IsSpu == 1 { + return nil, fmt.Errorf("不允许创建多规格商品") skuNameExt.SkuName.JdSyncStatus = model.SyncFlagNewMask } if skuNameExt.Unit == model.SpecialUnit { @@ -1044,7 +1045,7 @@ func refreshStoreSkuPrice(ctx *jxcontext.Context, db *dao.DaoDB, skuID int) (err storeSku.ID = v.BindID if _, err = dao.UpdateEntityLogically(db, storeSku, map[string]interface{}{ "Price": v.Price, - dao.GetSyncStatusStructField(model.VendorNames[vendorID]): v.StoreSkuSyncStatus | model.SyncFlagPriceMask, + dao.GetSyncStatusStructField(model.VendorNames[vendorID]): v.SkuSyncStatus | model.SyncFlagPriceMask, }, ctx.GetUserName(), nil); err != nil { return err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 5ecadfab7..4fc22b4e6 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -38,11 +38,6 @@ type SingleStoreHandlerWrapper struct { partner.ISingleStoreHandler } -type tMultiStoreVendorInfo struct { - VendorID int - OrgCode string -} - var ( CurVendorSync VendorSync ) @@ -101,20 +96,6 @@ func (v *VendorSync) GetSingleStoreHandler(vendorID int) partner.ISingleStoreHan return nil } -func getMultiStoreVendorInfoList() (list []*tMultiStoreVendorInfo) { - vendorIDs := partner.GetMultiStoreVendorIDs() - for _, vendorID := range vendorIDs { - orgCodeList := partner.CurAPIManager.GetAppOrgCodeList(vendorID) - for _, v := range orgCodeList { - list = append(list, &tMultiStoreVendorInfo{ - VendorID: vendorID, - OrgCode: v, - }) - } - } - return list -} - func (v *VendorSync) syncCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID int, db *dao.DaoDB, cats []*model.SkuCategory, userName string) (err error) { multiStoresHandler := v.GetMultiStoreHandler(vendorID) syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[vendorID]) @@ -430,11 +411,11 @@ func (v *VendorSync) proxySyncStoreSku(ctx *jxcontext.Context, parentTask tasksc return SyncStoreSkuNew(ctx, parentTask, storeMap.VendorID, storeMap.StoreID, storeMap.VendorStoreID, nil, skuIDs, excludeSkuIDs, isAsync, isContinueWhenError) } -func (v *VendorSync) proxyFullSyncStoreSku(ctx *jxcontext.Context, parentTask tasksch.ITask, storeMap *model.StoreMap, isAsync, isContinueWhenError bool) (hint string, err error) { - return FullSyncStoreSkuNew(ctx, parentTask, storeMap.VendorID, storeMap.StoreID, storeMap.VendorStoreID, isAsync, isContinueWhenError) +func (v *VendorSync) proxyFullSyncStoreSku(ctx *jxcontext.Context, parentTask tasksch.ITask, storeMap *model.StoreMap, excludeSkuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { + return FullSyncStoreSkuNew(ctx, parentTask, storeMap.VendorID, storeMap.StoreID, storeMap.VendorStoreID, excludeSkuIDs, isAsync, isContinueWhenError) } -func (v *VendorSync) FullSyncStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs []int, storeIDs []int, syncDisabled, isAsync, isContinueWhenError bool) (hint string, err error) { +func (v *VendorSync) FullSyncStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs []int, storeIDs []int, syncDisabled bool, excludeSkuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { globals.SugarLogger.Debug("FullSyncStoresSkus") hint, err = v.LoopStoresMap(ctx, db, fmt.Sprintf("初始化门店商品信息:%v", storeIDs), isAsync, true, vendorIDs, storeIDs, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { @@ -449,7 +430,7 @@ func (v *VendorSync) FullSyncStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, v func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { storeMap := batchItemList[0].(*model.StoreMap) if syncDisabled || storeMap.Status > model.StoreStatusDisabled { - if _, err = v.proxyFullSyncStoreSku(ctx, task, storeMap, false, isContinueWhenError); err != nil { + if _, err = v.proxyFullSyncStoreSku(ctx, task, storeMap, excludeSkuIDs, false, isContinueWhenError); err != nil { globals.SugarLogger.Debugf("FullSyncStoresSkus failed2 store:%d failed with error:%v", storeMap.StoreID, err) } } @@ -715,59 +696,3 @@ func GetTimeMixByInt(begin1, end1, begin2, end2 int16) (beginAt, endAt int16) { } return beginAt, endAt } - -func OnCreateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { - for _, v := range getMultiStoreVendorInfoList() { - thingMap := &model.ThingMap{ - ThingID: thingID, - ThingType: thingType, - VendorID: v.VendorID, - VendorOrgCode: v.OrgCode, - SyncStatus: model.SyncFlagNewMask, - } - dao.WrapAddIDCULDEntity(thingMap, ctx.GetUserName()) - err = dao.CreateEntity(db, thingMap) - } - return nil -} - -func OnUpdateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { - for _, v := range getMultiStoreVendorInfoList() { - thingMap := &model.ThingMap{ - ThingID: thingID, - ThingType: thingType, - VendorID: v.VendorID, - VendorOrgCode: v.OrgCode, - } - thingMap.DeletedAt = utils.DefaultTimeValue - if err = dao.GetEntity(db, thingMap, "ThingID", "ThingType", "VendorID", "VendorOrgCode", model.FieldDeletedAt); err == nil { - thingMap.SyncStatus |= model.SyncFlagModifiedMask - thingMap.LastOperator = ctx.GetUserName() - _, err = dao.UpdateEntity(db, thingMap) - } - } - return nil -} - -func OnDeleteThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { - for _, v := range getMultiStoreVendorInfoList() { - thingMap := &model.ThingMap{ - ThingID: thingID, - ThingType: thingType, - VendorID: v.VendorID, - VendorOrgCode: v.OrgCode, - } - thingMap.DeletedAt = utils.DefaultTimeValue - if err = dao.GetEntity(db, thingMap, "ThingID", "ThingType", "VendorID", "VendorOrgCode", model.FieldDeletedAt); err == nil { - if model.IsSyncStatusNew(thingMap.SyncStatus) { - thingMap.SyncStatus = 0 - } else { - thingMap.SyncStatus |= model.SyncFlagDeletedMask - } - _, err = dao.DeleteEntityLogically(db, thingMap, map[string]interface{}{ - model.FieldSyncStatus: thingMap.SyncStatus, - }, ctx.GetUserName(), nil) - } - } - return nil -} diff --git a/business/jxstore/cms/sync2.go b/business/jxstore/cms/sync2.go index 6c9e9db9a..b28060a88 100644 --- a/business/jxstore/cms/sync2.go +++ b/business/jxstore/cms/sync2.go @@ -1,30 +1,206 @@ package cms import ( + "fmt" + "time" + + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/business/partner" + "git.rosy.net.cn/jx-callback/globals" ) +type tMultiStoreVendorInfo struct { + VendorID int + OrgCode string +} + +func CombineVendorIDAndOrgCode(vendorID int, orgCode string) string { + return fmt.Sprintf("%d-%s", vendorID, orgCode) +} + +func getMultiStoreVendorInfoList() (list []*tMultiStoreVendorInfo) { + vendorIDs := partner.GetMultiStoreVendorIDs() + for _, vendorID := range vendorIDs { + orgCodeList := partner.CurAPIManager.GetAppOrgCodeList(vendorID) + for _, v := range orgCodeList { + list = append(list, &tMultiStoreVendorInfo{ + VendorID: vendorID, + OrgCode: v, + }) + } + } + return list +} + func SyncCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs []int, appOrgCodes []string, catIDs []int, isAsync bool) (hint string, err error) { - // if len(vendorIDs) == 0 { - // vendorIDs = partner.GetMultiStoreVendorIDs() - // } - // vendorOrgCodeList := apimanager.CurAPIManager.GetVendorOrgCodeList(vendorIDs, appOrgCodes) - // task := tasksch.NewParallelTask("同步商家分类", nil, ctx, - // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - // vendorOrgCodePair := batchItemList[0].(*apimanager.VendorOrgCodePair) - // if handler := partner.GetPurchasePlatformFromVendorID(vendorOrgCodePair.VendorID); handler != nil { - // } - // return retVal, err - // }, vendorOrgCodeList) - // tasksch.HandleTask(task, parentTask, len(catIDs) > 0).Run() - // if isAsync { - // hint = task.GetID() - // } else { - // resultList, err2 := task.GetResult(0) - // if err = err2; err == nil { - // hint = utils.Int2Str(len(resultList)) - // } - // } + globals.SugarLogger.Debugf("SyncCategories catIDs:%v", catIDs) + db := dao.GetDB() + catList, err := dao.GetSkuCategoryWithVendor(db, nil, nil, -1, catIDs, true) + if err == nil { + // todo 按vendorID orgCode合并操作 + task := tasksch.NewParallelTask(fmt.Sprintf("同步分类:%v", catIDs), nil, ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + catVendorInfo := batchItemList[0].(*dao.SkuCategoryWithVendor) + if multiStoresHandler, ok := partner.GetPurchasePlatformFromVendorID(catVendorInfo.VendorID).(partner.IMultipleStoresHandler); ok { + if model.IsSyncStatusDelete(catVendorInfo.SyncStatus) { //删除 + if !dao.IsVendorThingIDEmpty(catVendorInfo.VendorCatID) && + model.IsSyncStatusNeedDelete(catVendorInfo.SyncStatus) { + err = multiStoresHandler.DeleteCategory2(ctx, catVendorInfo) + } + } else if model.IsSyncStatusNew(catVendorInfo.SyncStatus) { // 新增 + err = multiStoresHandler.CreateCategory2(ctx, catVendorInfo) + } else if model.IsSyncStatusUpdate(catVendorInfo.SyncStatus) { // 修改 + err = multiStoresHandler.UpdateCategory2(ctx, catVendorInfo) + } + } else { + err = fmt.Errorf("平台:%d不合法", catVendorInfo.VendorID) + } + if err = OnThingSync(ctx, dao.GetDB(), SkuCategoryVendor2ThingMap(catVendorInfo), err); err == nil { + retVal = []int{catVendorInfo.ID} + } + return retVal, err + }, catList) + tasksch.HandleTask(task, parentTask, len(catIDs) > 0).Run() + if isAsync { + hint = task.GetID() + } else { + resultList, err2 := task.GetResult(0) + if err = err2; err == nil { + hint = utils.Int2Str(len(resultList)) + } + } + } return hint, err } + +func SyncReorderCategories(ctx *jxcontext.Context, parentCatID int, isAsync bool) (hint string, err error) { + globals.SugarLogger.Debugf("SyncReorderCategories parentCatID:%d", parentCatID) + 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) + multiStoresHandler := CurVendorSync.GetMultiStoreHandler(vendorInfo.VendorID) + if multiStoresHandler != nil { + catList, err2 := dao.GetSkuCategoryWithVendor(db, []int{vendorInfo.VendorID}, []string{vendorInfo.OrgCode}, parentCatID, nil, false) + if err = err2; err == nil { + var vendorCatIDList []string + for _, v := range catList { + if v.VendorCatID != "" { + vendorCatIDList = append(vendorCatIDList, v.VendorCatID) + } + } + if len(vendorCatIDList) > 0 { + if err = multiStoresHandler.ReorderCategories2(ctx, vendorInfo.OrgCode, catList[0].VendorParentCatID, vendorCatIDList); err == nil { + retVal = []int{len(vendorCatIDList)} + } + } + } + } else { + err = fmt.Errorf("非法平台:%d", vendorInfo.VendorID) + } + return retVal, err + }) + return hint, err +} + +func OnCreateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { + for _, v := range getMultiStoreVendorInfoList() { + thingMap := &model.ThingMap{ + ThingID: thingID, + ThingType: thingType, + VendorID: v.VendorID, + VendorOrgCode: v.OrgCode, + SyncStatus: model.SyncFlagNewMask, + } + dao.WrapAddIDCULDEntity(thingMap, ctx.GetUserName()) + err = dao.CreateEntity(db, thingMap) + } + return nil +} + +func OnUpdateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { + for _, v := range getMultiStoreVendorInfoList() { + thingMap := &model.ThingMap{ + ThingID: thingID, + ThingType: thingType, + VendorID: v.VendorID, + VendorOrgCode: v.OrgCode, + } + thingMap.DeletedAt = utils.DefaultTimeValue + if err = dao.GetEntity(db, thingMap, "ThingID", "ThingType", "VendorID", "VendorOrgCode", model.FieldDeletedAt); err == nil { + thingMap.SyncStatus |= model.SyncFlagModifiedMask + thingMap.LastOperator = ctx.GetUserName() + _, err = dao.UpdateEntity(db, thingMap) + } + } + return nil +} + +func OnDeleteThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { + for _, v := range getMultiStoreVendorInfoList() { + thingMap := &model.ThingMap{ + ThingID: thingID, + ThingType: thingType, + VendorID: v.VendorID, + VendorOrgCode: v.OrgCode, + } + thingMap.DeletedAt = utils.DefaultTimeValue + if err = dao.GetEntity(db, thingMap, "ThingID", "ThingType", "VendorID", "VendorOrgCode", model.FieldDeletedAt); err == nil { + if model.IsSyncStatusNew(thingMap.SyncStatus) { + thingMap.SyncStatus = 0 + thingMap.DeletedAt = time.Now() + } else { + thingMap.SyncStatus |= model.SyncFlagDeletedMask + } + thingMap.LastOperator = ctx.GetUserName() + _, err = dao.UpdateEntity(db, thingMap) + } + } + return nil +} + +func SkuCategoryVendor2ThingMap(cat *dao.SkuCategoryWithVendor) (thingMap *model.ThingMap) { + thingMap = &model.ThingMap{ + ThingID: int64(cat.ID), + ThingType: model.ThingTypeCategory, + VendorID: cat.VendorID, + VendorOrgCode: cat.VendorOrgCode, + + SyncStatus: cat.SyncStatus, + VendorThingID: cat.VendorCatID, + } + thingMap.ID = cat.MapID // 一定要赋值 + return thingMap +} + +func OnThingSync(ctx *jxcontext.Context, db *dao.DaoDB, thingMap *model.ThingMap, syncErr error) (err error) { + if syncErr != nil { + err = syncErr + thingMap.Remark = utils.LimitUTF8StringLen(err.Error(), 255) + dao.UpdateEntity(db, thingMap, "Remark") + } else { + updateFields := []string{ + model.FieldSyncStatus, + model.FieldUpdatedAt, + model.FieldLastOperator, + "Remark", + } + if model.IsSyncStatusDelete(thingMap.SyncStatus) { //删除 + thingMap.DeletedAt = time.Now() + thingMap.VendorThingID = "" + updateFields = append(updateFields, "VendorThingID", model.FieldDeletedAt) + } else if model.IsSyncStatusNew(thingMap.SyncStatus) { // 新增 + updateFields = append(updateFields, "VendorThingID") + } + thingMap.SyncStatus = 0 + thingMap.LastOperator = ctx.GetUserName() + thingMap.UpdatedAt = time.Now() + thingMap.Remark = "" + _, err = dao.UpdateEntity(db, thingMap, updateFields...) + } + return err +} diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index ccadf591a..24c621b16 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -80,14 +80,14 @@ func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo catInfo := batchItemList[0].(*dao.SkuStoreCatInfo) storeCatMap := &model.StoreSkuCategoryMap{} storeCatMap.ID = catInfo.MapID - if model.IsSyncStatusDelete(catInfo.StoreCatSyncStatus) { // 删除 - if model.IsSyncStatusDelete(catInfo.StoreCatSyncStatus) && !dao.IsVendorThingIDEmpty(catInfo.VendorCatID) { + if model.IsSyncStatusDelete(catInfo.CatSyncStatus) { // 删除 + if model.IsSyncStatusDelete(catInfo.CatSyncStatus) && !dao.IsVendorThingIDEmpty(catInfo.VendorCatID) { err = handler.DeleteStoreCategory(ctx, storeID, vendorStoreID, catInfo.VendorCatID, level) if err != nil && handler.IsErrCategoryNotExist(err) { err = nil } } - } else if model.IsSyncStatusNew(catInfo.StoreCatSyncStatus) { // 新增 + } else if model.IsSyncStatusNew(catInfo.CatSyncStatus) { // 新增 err = handler.CreateStoreCategory(ctx, storeID, vendorStoreID, catInfo) if err != nil && handler.IsErrCategoryExist(err) { if cat, err2 := handler.GetStoreCategory(ctx, storeID, vendorStoreID, catInfo.Name); err2 == nil { @@ -102,7 +102,7 @@ func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo updateFields = append(updateFields, model.FieldLastOperator) } } - } else if model.IsSyncStatusUpdate(catInfo.StoreCatSyncStatus) { // 修改 + } else if model.IsSyncStatusUpdate(catInfo.CatSyncStatus) { // 修改 if err = handler.UpdateStoreCategory(ctx, storeID, vendorStoreID, catInfo); err == nil { updateFields = append(updateFields, idFieldName) } @@ -163,7 +163,7 @@ func SyncStoreSkuNew2(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID return hint, err } -func FullSyncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, storeID int, vendorStoreID string, isAsync, isContinueWhenError bool) (hint string, err error) { +func FullSyncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, storeID int, vendorStoreID string, excludeSkuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { singleStoreHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler) task := tasksch.NewParallelTask("FullSyncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { @@ -178,9 +178,9 @@ func FullSyncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo } case 1: if singleStoreHandler != nil { - _, err = SyncStoreSkuNew(ctx, task, vendorID, storeID, vendorStoreID, nil, nil, nil, false, isContinueWhenError) + _, err = SyncStoreSkuNew(ctx, task, vendorID, storeID, vendorStoreID, nil, nil, excludeSkuIDs, false, isContinueWhenError) } else { - err = syncStoreSkuNew(ctx, task, true, vendorID, storeID, nil, nil, nil, false, isContinueWhenError) + err = syncStoreSkuNew(ctx, task, true, vendorID, storeID, nil, nil, excludeSkuIDs, false, isContinueWhenError) } } return retVal, err @@ -195,7 +195,7 @@ func FullSyncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo } func isStoreSkuSyncNeedDelete(storeSku *dao.StoreSkuSyncInfo) bool { - return model.IsSyncStatusDelete(storeSku.StoreSkuSyncStatus) || storeSku.BindDeletedAt != utils.DefaultTimeValue || storeSku.BindID == 0 || storeSku.NameID == 0 + return model.IsSyncStatusDelete(storeSku.SkuSyncStatus) || storeSku.BindDeletedAt != utils.DefaultTimeValue || storeSku.BindID == 0 || storeSku.NameID == 0 } func storeSkuSyncInfo2Bare(inSku *dao.StoreSkuSyncInfo) (outSku *partner.StoreSkuInfo) { @@ -237,10 +237,10 @@ func sku2Update(vendorID int, sku *dao.StoreSkuSyncInfo, syncStatus int8) (item kvs := map[string]interface{}{} if syncStatus&(model.SyncFlagDeletedMask|model.SyncFlagNewMask|model.SyncFlagModifiedMask) != 0 { if model.IsSyncStatusNew(syncStatus) { - sku.StoreSkuSyncStatus = 0 + sku.SkuSyncStatus = 0 kvs[dao.GetVendorThingIDStructField(model.VendorNames[vendorID])] = utils.Str2Int64WithDefault(sku.VendorSkuID, 0) } else if model.IsSyncStatusDelete(syncStatus) { - sku.StoreSkuSyncStatus = 0 + sku.SkuSyncStatus = 0 if utils.IsTimeZero(sku.BindDeletedAt) && (sku.ID == 0 || sku.NameID == 0) { kvs[model.FieldDeletedAt] = time.Now() } @@ -248,18 +248,18 @@ func sku2Update(vendorID int, sku *dao.StoreSkuSyncInfo, syncStatus int8) (item kvs[dao.GetVendorThingIDStructField(model.VendorNames[vendorID])] = 0 } } else { - sku.StoreSkuSyncStatus = sku.StoreSkuSyncStatus & model.SyncFlagPriceMask + sku.SkuSyncStatus = sku.SkuSyncStatus & model.SyncFlagPriceMask } } else if syncStatus&model.SyncFlagStockMask != 0 { if isStoreSkuSyncNeedDelete(sku) { - sku.StoreSkuSyncStatus = 0 + sku.SkuSyncStatus = 0 } else { - sku.StoreSkuSyncStatus = sku.StoreSkuSyncStatus & (model.SyncFlagPriceMask | model.SyncFlagSaleMask) + sku.SkuSyncStatus = sku.SkuSyncStatus & (model.SyncFlagPriceMask | model.SyncFlagSaleMask) } } else { - sku.StoreSkuSyncStatus = sku.StoreSkuSyncStatus & ^syncStatus + sku.SkuSyncStatus = sku.SkuSyncStatus & ^syncStatus } - kvs[dao.GetSyncStatusStructField(model.VendorNames[vendorID])] = sku.StoreSkuSyncStatus + kvs[dao.GetSyncStatusStructField(model.VendorNames[vendorID])] = sku.SkuSyncStatus if sku.VendorPrice > 0 { kvs[dao.GetVendorPriceStructField(model.VendorNames[vendorID])] = sku.VendorPrice } @@ -352,10 +352,10 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo } else { updateItems = append(updateItems, sku2Update(vendorID, sku, model.SyncFlagDeletedMask)) } - } else if model.IsSyncStatusNew(sku.StoreSkuSyncStatus) { + } else if model.IsSyncStatusNew(sku.SkuSyncStatus) { calVendorPrice4StoreSku(sku, storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage)) if singleStoreHandler == nil { - sku.StoreSkuSyncStatus |= model.SyncFlagSaleMask | model.SyncFlagPriceMask + sku.SkuSyncStatus |= model.SyncFlagSaleMask | model.SyncFlagPriceMask bareSku = storeSkuSyncInfo2Bare(sku) stockList = append(stockList, bareSku) priceList = append(priceList, bareSku) @@ -367,7 +367,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo } else { if sku.MergedStatus == model.SkuStatusNormal { if dao.IsVendorThingIDEmpty(sku.VendorCatID) { - globals.SugarLogger.Warnf("syncStoreSkuNew 创建门店:%d商品:%d,但没有平台分类ID", sku.StoreID, sku.SkuID) + globals.SugarLogger.Warnf("syncStoreSkuNew 创建门店:%d商品:%d,但没有平台分类ID", storeID, sku.SkuID) } else { createList = append(createList, sku) } @@ -384,26 +384,26 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo } else { isAdded2Update := false // 修改商品信息时不改价(以免活动引起的失败),而用单独的改价来改 - if (model.IsSyncStatusUpdate(sku.StoreSkuSyncStatus) || (model.IsSyncStatusSeq(sku.StoreSkuSyncStatus) && reorderHandler == nil)) && singleStoreHandler != nil { + if (model.IsSyncStatusUpdate(sku.SkuSyncStatus) || (model.IsSyncStatusSeq(sku.SkuSyncStatus) && reorderHandler == nil)) && singleStoreHandler != nil { if dao.IsVendorThingIDEmpty(sku.VendorCatID) { - globals.SugarLogger.Warnf("syncStoreSkuNew 修改门店:%d商品:%d,但没有平台分类ID", sku.StoreID, sku.SkuID) + globals.SugarLogger.Warnf("syncStoreSkuNew 修改门店:%d商品:%d,但没有平台分类ID", storeID, sku.SkuID) } else { isAdded2Update = true updateList = append(updateList, calVendorPrice4StoreSku(sku, storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage))) } } - if model.IsSyncStatusPrice(sku.StoreSkuSyncStatus) { + if model.IsSyncStatusPrice(sku.SkuSyncStatus) { bareSku = storeSkuSyncInfo2Bare(calVendorPrice4StoreSku(sku, storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage))) priceList = append(priceList, bareSku) } if !isAdded2Update { - if model.IsSyncStatusUpdate(sku.StoreSkuSyncStatus) && singleStoreHandler == nil { // 正常就不应该进到这里 + if model.IsSyncStatusUpdate(sku.SkuSyncStatus) && singleStoreHandler == nil { // 正常就不应该进到这里 if bareSku == nil { bareSku = storeSkuSyncInfo2Bare(sku) } updateItems = append(updateItems, sku2Update(vendorID, sku, model.SyncFlagStockMask)) } - if model.IsSyncStatusSale(sku.StoreSkuSyncStatus) { + if model.IsSyncStatusSale(sku.SkuSyncStatus) { if bareSku == nil { bareSku = storeSkuSyncInfo2Bare(sku) } @@ -419,7 +419,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo } } } - isNeedReorder = model.IsSyncStatusSeq(sku.StoreSkuSyncStatus) + isNeedReorder = model.IsSyncStatusSeq(sku.SkuSyncStatus) } } if isNeedReorder && reorderHandler != nil && sku.VendorCatID != "" { @@ -660,10 +660,10 @@ func amendAndPruneStoreStuff(ctx *jxcontext.Context, parentTask tasksch.ITask, v if opType == AmendPruneOnlyAmend || opType == AmendPruneAll { for _, v := range localSkuList { - if !model.IsSyncStatusDelete(v.StoreSkuSyncStatus) && v.BindID != 0 { + if !model.IsSyncStatusDelete(v.SkuSyncStatus) && v.BindID != 0 { syncStatus := int8(0) if remoteSkuMap[v.VendorSkuID] == 0 { - if !model.IsSyncStatusNew(v.StoreSkuSyncStatus) { + if !model.IsSyncStatusNew(v.SkuSyncStatus) { syncStatus = model.SyncFlagNewMask } } else if isForceUpdate { @@ -674,7 +674,7 @@ func amendAndPruneStoreStuff(ctx *jxcontext.Context, parentTask tasksch.ITask, v skuBind.ID = v.BindID skuBind.LastOperator = ctx.GetUserName() skuBind.UpdatedAt = time.Now() - dao.SetStoreSkuBindSyncStatus(skuBind, vendorID, syncStatus|v.StoreSkuSyncStatus) + dao.SetStoreSkuBindSyncStatus(skuBind, vendorID, syncStatus|v.SkuSyncStatus) dao.UpdateEntity(db, skuBind, dao.GetSyncStatusStructField(model.VendorNames[vendorID]), model.FieldLastOperator, model.FieldUpdatedAt) } } @@ -710,13 +710,13 @@ func amendAndPruneStoreStuff(ctx *jxcontext.Context, parentTask tasksch.ITask, v cat2Delete = checkRemoteCatExist(remoteCatMap, localCatMap, remoteCatList) for _, v := range localCatList { - if !model.IsSyncStatusDelete(v.StoreCatSyncStatus) && v.MapID != 0 { + if !model.IsSyncStatusDelete(v.CatSyncStatus) && v.MapID != 0 { syncStatus := int8(0) if remoteCatMap[v.VendorCatID] == 0 { - if !model.IsSyncStatusNew(v.StoreCatSyncStatus) { + if !model.IsSyncStatusNew(v.CatSyncStatus) { syncStatus = model.SyncFlagNewMask } - } else if isForceUpdate && !model.IsSyncStatusUpdate(v.StoreCatSyncStatus) { + } else if isForceUpdate && !model.IsSyncStatusUpdate(v.CatSyncStatus) { syncStatus = model.SyncFlagModifiedMask } if syncStatus != 0 { @@ -724,7 +724,7 @@ func amendAndPruneStoreStuff(ctx *jxcontext.Context, parentTask tasksch.ITask, v catBind.ID = v.MapID catBind.LastOperator = ctx.GetUserName() catBind.UpdatedAt = time.Now() - dao.SetStoreCatMapSyncStatus(catBind, vendorID, syncStatus|v.StoreCatSyncStatus) + dao.SetStoreCatMapSyncStatus(catBind, vendorID, syncStatus|v.CatSyncStatus) dao.UpdateEntity(db, catBind, dao.GetSyncStatusStructField(model.VendorNames[vendorID]), model.FieldLastOperator, model.FieldUpdatedAt) } } diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index 6b430e38f..b32fdb397 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -144,12 +144,12 @@ func doDailyWork() { globals.SugarLogger.Debug("doDailyWork") cms.SyncStoresCourierInfo(jxcontext.AdminCtx, nil, false, true) netprinter.RebindAllPrinters(jxcontext.AdminCtx, false, true) - // cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDJD}, nil, false, true, true) syncFlag := model.SyncFlagPriceMask if (time.Now().Unix()/24*3600)%10 == 0 { syncFlag |= model.SyncFlagSaleMask } - cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDJD}, nil, false, nil, []int{27379}, syncFlag, true, true) + // cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDJD}, nil, false, nil, []int{27379}, syncFlag, true, true) + cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDJD}, nil, false, []int{27379}, true, true) SaveImportantTaskID(TaskNameSyncStoreSku, SpecialTaskID) taskID, _ := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDEBAI, model.VendorIDMTWM}, nil, false, nil, nil, syncFlag, true, true) diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index 34ce3f737..d13670c09 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -631,7 +631,7 @@ func TransformJdSpu2Sku(ctx *jxcontext.Context, skuNameIDs []int, count int, isA return "", fmt.Errorf("待转换的skuName为空") } batchSize := 40 - rootTask := tasksch.NewSeqTask("TransformJdSpu2Sku", ctx, + rootTask := tasksch.NewSeqTask2("TransformJdSpu2Sku", ctx, isContinueWhenError, func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { var ( locker sync.Mutex diff --git a/business/model/dao/sku.go b/business/model/dao/sku.go index d48c657e2..c95200fe5 100644 --- a/business/model/dao/sku.go +++ b/business/model/dao/sku.go @@ -14,8 +14,11 @@ type SkuCategoryWithVendor struct { VendorID int `orm:"column(vendor_id)" json:"vendorID"` VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 + MapID int `orm:"column(map_id)" json:"mapID"` VendorCatID string `orm:"size(32);column(vendor_cat_id)" json:"vendorCatID"` SyncStatus int8 `orm:"default(2)"` + + VendorParentCatID string `orm:"size(32);column(vendor_parent_cat_id)" json:"vendorParentCatID"` } func GetSellCities(db *DaoDB, nameID int, vendorID int) (cities []*model.Place, err error) { @@ -154,5 +157,55 @@ func SetSkuSyncStatus(db *DaoDB, vendorID int, skuIDs []int, syncStatus int) (nu return ExecuteSQL(db, sql, sqlParams...) } -// func GetSkuCategoryWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, catIDs []int) (num int64, err error) { -// } +func GetSkuCategoryWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, parentCatID int, catIDs []int, mustDirty bool) (catList []*SkuCategoryWithVendor, err error) { + sql := ` + SELECT t1.*, + t1m.vendor_id, t1m.vendor_org_code, + t1m.id map_id, + t1m.sync_status, + t1m.vendor_thing_id vendor_cat_id, + t1pm.vendor_thing_id vendor_parent_cat_id + /* + t1.jd_sync_status sync_status, + t1.jd_id vendor_cat_id, + t1p.jd_id vendor_parent_cat_id + */ + 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 + ` + 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)) + ")" + sqlParams = append(sqlParams, vendorIDs) + } + if len(appOrgCodes) > 0 { + sql += " AND t1m.vendor_org_code IN (" + GenQuestionMarks(len(appOrgCodes)) + ")" + sqlParams = append(sqlParams, appOrgCodes) + } + if len(catIDs) > 0 { + sql += " AND t1.id IN (" + GenQuestionMarks(len(catIDs)) + ")" + sqlParams = append(sqlParams, catIDs) + } + if parentCatID >= 0 { + sql += " AND t1.parent_id = ?" + sqlParams = append(sqlParams, parentCatID) + } + sql += " ORDER BY t1.seq" + err = GetRows(db, &catList, sql, sqlParams...) + return catList, err +} diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index a45b5927b..5426955a4 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -26,9 +26,9 @@ var ( type SkuStoreCatInfo struct { model.SkuCategory - MapID int `orm:"column(map_id)"` // 这个主要用于判断是否有store_sku_category_map - VendorCatID string `orm:"column(vendor_cat_id)"` - StoreCatSyncStatus int8 + MapID int `orm:"column(map_id)"` // 这个主要用于判断是否有store_sku_category_map + VendorCatID string `orm:"column(vendor_cat_id)"` + CatSyncStatus int8 ParentCatName string ParentMapID int `orm:"column(parent_map_id)"` // 这个主要用于判断是否有父store_sku_category_map @@ -46,10 +46,10 @@ type StoreSkuSyncInfo struct { UnitPrice int64 // 平台相关的store sku信息 - StoreSkuStatus int - StoreSkuSyncStatus int8 - VendorSkuID string `orm:"column(vendor_sku_id)"` - BindDeletedAt time.Time `orm:"type(datetime)" json:"bindDeletedAt"` + StoreSkuStatus int + SkuSyncStatus int8 + VendorSkuID string `orm:"column(vendor_sku_id)"` + BindDeletedAt time.Time `orm:"type(datetime)" json:"bindDeletedAt"` model.Sku @@ -74,12 +74,12 @@ type StoreSkuSyncInfo struct { // VendorVendorCatID3 int64 `orm:"column(vendor_vendor_cat_id3)"` // 平台商品分类再上一级 // sku的商家分类信息 - SkuStoreCatSyncStatus int8 - SkuVendorCatID string `orm:"column(sku_vendor_cat_id)"` + SkuCatSyncStatus int8 + SkuVendorCatID string `orm:"column(sku_vendor_cat_id)"` // sku_name的商家分类信息 - StoreCatSyncStatus int8 - VendorCatID string `orm:"column(vendor_cat_id)"` + CatSyncStatus int8 + VendorCatID string `orm:"column(vendor_cat_id)"` VendorPrice int64 MergedStatus int @@ -117,7 +117,7 @@ type StoreSkuNameInfo struct { func GetSkusCategories(db *DaoDB, vendorID, storeID int, skuIDs []int, level int) (cats []*SkuStoreCatInfo, err error) { sql := ` SELECT DISTINCT t4.*, - t5.id map_id, t5.%s_id vendor_cat_id, t5.%s_sync_status store_cat_sync_status, + t5.id map_id, t5.%s_id vendor_cat_id, t5.%s_sync_status cat_sync_status, t4p.name parent_cat_name, t5p.id parent_map_id, t5p.%s_id parent_vendor_cat_id, t5p.%s_sync_status parent_cat_sync_status FROM store_sku_bind t1 @@ -172,7 +172,7 @@ func GetStoreCategories(db *DaoDB, vendorID, storeID int, level int, mustDirty b fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID]) sql := ` SELECT t4.*, - t5.id map_id, t5.%s_id vendor_cat_id, t5.%s_sync_status store_cat_sync_status, + t5.id map_id, t5.%s_id vendor_cat_id, t5.%s_sync_status cat_sync_status, t4p.name parent_cat_name, t5p.id parent_map_id, t5p.%s_id parent_vendor_cat_id, t5p.%s_sync_status parent_cat_sync_status FROM store_sku_category_map t5 @@ -219,7 +219,7 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID]) sql := ` SELECT t1.id bind_id, t1.sku_id, t1.price, t1.unit_price, t1.status store_sku_status, - %s.%s_id vendor_sku_id, t1.%s_sync_status store_sku_sync_status, t1.%s_price vendor_price, + %s.%s_id vendor_sku_id, t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end, t2.*, t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, @@ -236,8 +236,8 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo } if isSingleStorePF { sql += `, - t5.%s_sync_status store_cat_sync_status, t5.%s_id vendor_cat_id, - t5sku.%s_sync_status sku_store_cat_sync_status, t5sku.%s_id sku_vendor_cat_id` + t5.%s_sync_status cat_sync_status, t5.%s_id vendor_cat_id, + t5sku.%s_sync_status sku_cat_sync_status, t5sku.%s_id sku_vendor_cat_id` fmtParams = append(fmtParams, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix) } else { sql += `, @@ -311,15 +311,15 @@ func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInf sql := ` SELECT t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status, t2.%s_id vendor_sku_id, - t1.%s_sync_status store_sku_sync_status, t1.store_id, t1.deleted_at bind_deleted_at, + t1.%s_sync_status sku_sync_status, t1.store_id, t1.deleted_at bind_deleted_at, t2.*, t2.id sku_id, t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, IF(t11.%s <> '', t11.%s, t3.img) img, IF(t12.%s <> '', t12.%s, t3.img2) img2, t13.%s desc_img, t4.%s_category_id vendor_vendor_cat_id, - t4.%s_sync_status store_cat_sync_status, t4.%s_id vendor_cat_id, - t5sku.%s_sync_status sku_store_cat_sync_status, t5sku.%s_id sku_vendor_cat_id + t4.%s_sync_status cat_sync_status, t4.%s_id vendor_cat_id, + t5sku.%s_sync_status sku_cat_sync_status, t5sku.%s_id sku_vendor_cat_id FROM sku t2 LEFT JOIN store_sku_bind t1 ON t1.sku_id = t2.id AND t1.store_id = ? AND t1.deleted_at = ? JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ? AND t3.status = ? diff --git a/business/model/sync_map.go b/business/model/sync_map.go index 05c10cfc5..2e5dc0d3c 100644 --- a/business/model/sync_map.go +++ b/business/model/sync_map.go @@ -16,6 +16,8 @@ type ThingMap struct { VendorThingID string `orm:"size(32);column(vendor_thing_id);index" json:"vendorThingID"` SyncStatus int8 `orm:"default(2)"` + + Remark string `orm:"size(255)" json:"remark"` } func (*ThingMap) TableUnique() [][]string { diff --git a/business/partner/partner.go b/business/partner/partner.go index 8af7d7564..b2fc5b81e 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -161,6 +161,11 @@ type IMultipleStoresHandler interface { DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error ReorderCategories(db *dao.DaoDB, parentCatID int, userName string) (err error) + CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuCategoryWithVendor) (err error) + UpdateCategory2(ctx *jxcontext.Context, cat *dao.SkuCategoryWithVendor) (err error) + DeleteCategory2(ctx *jxcontext.Context, cat *dao.SkuCategoryWithVendor) (err error) + ReorderCategories2(ctx *jxcontext.Context, vendorOrgCode, vendorParentCatID string, vendorCatIDList []string) (err error) + // sku CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) ReadSku(vendorSkuID string) (skuNameExt *model.SkuNameExt, err error) diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index 3fcb76e21..d599b91f3 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -256,10 +256,10 @@ func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo, isCreate bool if storeSku.DescImg != "" { params["rtf"] = storeSku.DescImg } - if isCreate /*storeSku.StoreSkuSyncStatus&(model.SyncFlagPriceMask| model.SyncFlagNewMask) != 0 */ { + if isCreate /*storeSku.SkuSyncStatus&(model.SyncFlagPriceMask| model.SyncFlagNewMask) != 0 */ { params["sale_price"] = storeSku.VendorPrice } - if storeSku.StoreSkuSyncStatus&(model.SyncFlagSaleMask|model.SyncFlagNewMask) != 0 { + if storeSku.SkuSyncStatus&(model.SyncFlagSaleMask|model.SyncFlagNewMask) != 0 { params["status"] = jxSkuStatus2Ebai(storeSku.MergedStatus) } // todo 饿百如果给的UPC是空要报错,但如果我要删除UPC怎么弄? diff --git a/business/partner/purchase/jd/order.go b/business/partner/purchase/jd/order.go index f923c12ba..9cf177335 100644 --- a/business/partner/purchase/jd/order.go +++ b/business/partner/purchase/jd/order.go @@ -303,7 +303,7 @@ func (c *PurchaseHandler) getStatusFromVendorStatus(vendorStatus string) int { func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) { globals.SugarLogger.Debugf("jd AcceptOrRefuseOrder orderID:%s, isAcceptIt:%t", order.VendorOrderID, isAcceptIt) - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { err = getAPI("").OrderAcceptOperate(order.VendorOrderID, isAcceptIt, userName) if isAcceptIt && err == nil { c.postFakeMsg(order.VendorOrderID, jdapi.StatusIDWaitOutStore) diff --git a/business/partner/purchase/jd/sku.go b/business/partner/purchase/jd/sku.go index 6b78f8b5a..158b089fd 100644 --- a/business/partner/purchase/jd/sku.go +++ b/business/partner/purchase/jd/sku.go @@ -57,7 +57,7 @@ func (p *PurchaseHandler) CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, return err } } - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { result, err2 := getAPI("").AddShopCategory(jdPid, cat.Name, int(cat.Level), cat.Seq, userName) if err = err2; err == nil { if jdID := utils.Str2Int64WithDefault(result, 0); jdID != 0 { @@ -109,14 +109,14 @@ func (p *PurchaseHandler) GetAllCategories(ctx *jxcontext.Context, vendorOrgCode } func (p *PurchaseHandler) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error { - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { return getAPI("").UpdateShopCategory(cat.JdID, cat.Name) } return nil } func (p *PurchaseHandler) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error { - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { return getAPI("").DelShopCategory(cat.JdID) } return nil @@ -142,13 +142,48 @@ func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, user for k, v := range cats { jdCatIDs[k] = v.JdID } - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { err = getAPI("").ChangeShopCategoryOrder(parentJDID, jdCatIDs) } } return err } +func (p *PurchaseHandler) CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuCategoryWithVendor) (err error) { + if globals.EnableJdStoreWrite { + result, err2 := getAPI(cat.VendorOrgCode).AddShopCategory(utils.Str2Int64(cat.VendorParentCatID), cat.Name, int(cat.Level), cat.Seq, ctx.GetUserName()) + if err = err2; err == nil { + if jdID := utils.Str2Int64WithDefault(result, 0); jdID != 0 { + cat.VendorCatID = utils.Int64ToStr(jdID) + } + } + } else { + cat.VendorCatID = utils.Int64ToStr(jxutils.GenFakeID()) + } + return err +} + +func (p *PurchaseHandler) UpdateCategory2(ctx *jxcontext.Context, cat *dao.SkuCategoryWithVendor) (err error) { + 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.SkuCategoryWithVendor) (err error) { + if globals.EnableJdStoreWrite { + err = getAPI(cat.VendorOrgCode).DelShopCategory(utils.Str2Int64(cat.VendorCatID)) + } + return err +} + +func (p *PurchaseHandler) ReorderCategories2(ctx *jxcontext.Context, vendorOrgCode, vendorParentCatID string, vendorCatIDList []string) (err error) { + if globals.EnableJdStoreWrite { + err = getAPI(vendorOrgCode).ChangeShopCategoryOrder(utils.Str2Int64(vendorParentCatID), utils.StringSlice2Int64(vendorCatIDList)) + } + return err +} + func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error)) (err error) { var skuInfoExt tSkuInfoExt err = dao.GetRow(nil, &skuInfoExt, ` @@ -215,7 +250,7 @@ func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuE func (p *PurchaseHandler) CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) { return p.cuSku(db, sku, func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) { if skuExt.IsSpu == 0 { - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { vendorSkuID, err = getAPI("").AddSku(utils.Int2Str(sku.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, skuName, price, jxutils.IntWeight2Float(sku.Weight), jxutils.BatchString2Slice(skuExt.Img, skuExt.Img2), jxStatus2jdStatus(sku.Status), true, addParams) if err != nil { if jdSkuID := jdapi.GetJdSkuIDFromError(err); jdSkuID > 0 { @@ -311,7 +346,7 @@ func (p *PurchaseHandler) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName stri params[jdapi.KeyImages] = jxutils.BatchString2Slice(skuExt.Img, skuExt.Img2) params[jdapi.KeyFixedStatus] = jxStatus2jdStatus(sku.Status) if skuExt.IsSpu == 0 { - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { vendorSkuID, err = getAPI("").UpdateSku(utils.Int2Str(sku.ID), params) } } else { @@ -335,7 +370,7 @@ func (p *PurchaseHandler) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName stri err = dao.GetRow(db, &skuExt, sql, sku.ID) if err == nil { if skuExt.IsSpu == 0 { - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { _, err = getAPI("").UpdateSku(utils.Int2Str(sku.ID), params) } } else { @@ -380,7 +415,7 @@ func (p *PurchaseHandler) RefreshAllSkusID(ctx *jxcontext.Context, parentTask ta } } globals.SugarLogger.Debug(utils.Format4Output(skuPairs, false)) - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { _, err = getAPI("").BatchUpdateOutSkuId(skuPairs) } return nil, err @@ -420,7 +455,7 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt globals.SugarLogger.Debugf("syncSkuNameAsSpu1 sku.id=%d, bareSkuName:%s, skuName:%s, skuNameJdID:%d", sku.ID, skuExt.Name, skuName, skuNameJdID) spuAddParams, skuAddParams := splitAddParams(addParams) if !jxutils.IsEmptyID(skuNameJdID) && sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除SKU - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { err = getAPI("").UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusDeleted)) } } @@ -440,14 +475,14 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt } if count.Ct <= 1 && sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 1就是最后删的那个 updateFields = append(updateFields, model.FieldJdSyncStatus) - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { if err = getAPI("").UpdateSpu(utils.Int2Str(skuExt.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusOffline)); err == nil { err = getAPI("").UpdateSpu(utils.Int2Str(skuExt.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusDeleted)) } } } } else if skuExt.JdSyncStatus&model.SyncFlagNewMask != 0 && jxutils.IsEmptyID(skuNameJdID) { - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { spuName := jxutils.ComposeSpuName(skuExt.Prefix, skuExt.Name, 0) skus := []map[string]interface{}{ map[string]interface{}{ @@ -462,7 +497,7 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt } skus[0] = utils.MergeMaps(skus[0], skuAddParams) updateFields = append(updateFields, model.FieldJdSyncStatus) - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { vendorSpuID, skuPairs, err2 := getAPI("").AddSpu(utils.Int2Str(skuExt.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, spuName, []string{skuExt.Img}, jxStatus2jdStatus(skuExt.Status), spuAddParams, skus) if err = err2; err == nil { skuExt.JdID = vendorSpuID @@ -483,7 +518,7 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt jdapi.KeyFixedStatus: jxStatus2jdStatus(skuExt.Status), }, spuAddParams) updateFields = append(updateFields, model.FieldJdSyncStatus) - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { err = getAPI("").UpdateSpu(utils.Int2Str(skuExt.ID), params) } } @@ -497,7 +532,7 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt } if err == nil && !jxutils.IsEmptyID(skuNameJdID) { if sku.JdSyncStatus&model.SyncFlagNewMask != 0 { // 非首次新增SKU - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { vendorSkuID2, err2 := getAPI("").AppendSku(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), skuName, price, jxutils.IntWeight2Float(sku.Weight), []string{skuExt.Img}, jxStatus2jdStatus(sku.Status), true, composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit), skuAddParams) if err = err2; err == nil { vendorSkuID = utils.Int64ToStr(vendorSkuID2) @@ -510,7 +545,7 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt params[jdapi.KeyFixedStatus] = jxStatus2jdStatus(sku.Status) params[jdapi.KeyWeight] = jxutils.IntWeight2Float(sku.Weight) params[jdapi.KeySkuPrice] = price - if globals.EnableStoreWrite { + if globals.EnableJdStoreWrite { err = getAPI("").UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), utils.MergeMaps(params, skuAddParams)) if sku.JdSyncStatus&model.SyncFlagSpecMask != 0 { skuIndex := sku.SkuIndex diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 266e9c0da..ca54a1110 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -153,7 +153,7 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress) if err = err2; err == nil { order.Status = model.OrderStatusCreated - partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order)) + callNewOrder(order) } } return outJxOrder, err @@ -232,8 +232,9 @@ func OnPayFinished(orderPay *model.OrderPay) (err error) { db := dao.GetDB() dao.UpdateEntity(db, orderPay) order.Status = model.OrderStatusNew + order.VendorStatus = utils.Int2Str(model.OrderStatusNew) order.StatusTime = *orderPay.PayFinishedAt - err = partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order)) + err = callNewOrder(order) } return err } @@ -314,7 +315,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 } deliveryAddress = addressList[0] if distance := jxutils.Point2StoreDistance(deliveryAddress.Lng, deliveryAddress.Lat, storeDetail.Lng, storeDetail.Lat, storeDetail.DeliveryRangeType, storeDetail.DeliveryRange); distance == 0 { - return nil, nil, fmt.Errorf("送货地址:%s不在门店%s的配送范围", deliveryAddress.DetailAddress, storeDetail.Name) + return nil, nil, fmt.Errorf("当前送货地址不在门店%s的配送范围", storeDetail.Name) } // 营业状态及时间检查 @@ -339,94 +340,91 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 return nil, nil, fmt.Errorf("门店:%s不在营业时间范围", storeDetail.Name) } - skus := formalizeSkus(jxOrder.Skus) - if len(skus) == 0 { - return nil, nil, fmt.Errorf("商品列表为空") - } - var skuIDs []int - for _, v := range skus { - skuIDs = append(skuIDs, v.SkuID) - } - - // storeSkuList, err := dao.GetStoresSkusInfo(db, []int{jxOrder.StoreID}, skuIDs) - // if err != nil { - // return nil, nil, err - // } - // storeSkuMap := make(map[int]*model.StoreSkuBind) - // for _, v := range storeSkuList { - // storeSkuMap[v.SkuID] = v - // } - storeSkuInfo, err := cms.GetStoreSkus(ctx, jxOrder.StoreID, skuIDs, true, "", true, false, map[string]interface{}{ - "actVendorID": model.VendorIDJX, - }, 0, model.UnlimitedPageSize) - if err != nil { - return nil, nil, err - } - storeSkuMap := make(map[int]*cms.StoreSkuExt) - for _, v1 := range storeSkuInfo.SkuNames { - for _, v2 := range v1.Skus { - storeSkuMap[v2.SkuID] = v2 - } - } - - skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil) - if err != nil { - return nil, nil, err - } - skuMap := make(map[int]*model.SkuAndName) - for _, v := range skuList { - skuMap[v.ID] = v - } - outJxOrder2 := *jxOrder outJxOrder2.Skus = nil outJxOrder2.OrderPrice = 0 outJxOrder2.Weight = 0 outJxOrder = &outJxOrder2 outJxOrder.StoreName = storeDetail.Name - for _, v := range skus { - if storeSkuBind := storeSkuMap[v.SkuID]; storeSkuBind != nil { - if sku := skuMap[v.SkuID]; sku != nil { - jxSku := &JxSkuInfo{ - SkuID: v.SkuID, - Price: int64(storeSkuBind.JxPrice), - Count: v.Count, - SalePrice: int64(storeSkuBind.JxPrice), // todo 考虑活动价 - Weight: sku.Weight, - Name: jxutils.ComposeSkuName(sku.Prefix, sku.Name, sku.Comment, sku.Unit, sku.SpecQuality, sku.SpecUnit, 0), - } - if storeSkuBind.ActPrice != 0 && storeSkuBind.ActPrice < storeSkuBind.JxPrice { - jxSku.SalePrice = int64(storeSkuBind.ActPrice) - jxSku.Count = 1 - outJxOrder.Skus = append(outJxOrder.Skus, jxSku) - outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice - outJxOrder.Weight += jxSku.Count * jxSku.Weight - if v.Count-1 > 0 { - jxSku2 := *jxSku - jxSku2.SalePrice = jxSku.Price - jxSku2.Count = v.Count - 1 + skus := formalizeSkus(jxOrder.Skus) + // 允许空商品列表(一般用于测试配送地址,门店信息是否合适) + if len(skus) > 0 { + var skuIDs []int + for _, v := range skus { + skuIDs = append(skuIDs, v.SkuID) + } + storeSkuInfo, err := cms.GetStoreSkus(ctx, jxOrder.StoreID, skuIDs, true, "", true, false, map[string]interface{}{ + "actVendorID": model.VendorIDJX, + }, 0, model.UnlimitedPageSize) + if err != nil { + return nil, nil, err + } + storeSkuMap := make(map[int]*cms.StoreSkuExt) + for _, v1 := range storeSkuInfo.SkuNames { + for _, v2 := range v1.Skus { + storeSkuMap[v2.SkuID] = v2 + } + } - jxSku = &jxSku2 - } else { - jxSku = nil + skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil) + if err != nil { + return nil, nil, err + } + skuMap := make(map[int]*model.SkuAndName) + for _, v := range skuList { + skuMap[v.ID] = v + } + + for _, v := range skus { + if storeSkuBind := storeSkuMap[v.SkuID]; storeSkuBind != nil { + if sku := skuMap[v.SkuID]; sku != nil { + jxSku := &JxSkuInfo{ + SkuID: v.SkuID, + Price: int64(storeSkuBind.JxPrice), + Count: v.Count, + SalePrice: int64(storeSkuBind.JxPrice), // todo 考虑活动价 + Weight: sku.Weight, + Name: jxutils.ComposeSkuName(sku.Prefix, sku.Name, sku.Comment, sku.Unit, sku.SpecQuality, sku.SpecUnit, 0), + } + if storeSkuBind.ActPrice != 0 && storeSkuBind.ActPrice < storeSkuBind.JxPrice { + jxSku.SalePrice = int64(storeSkuBind.ActPrice) + jxSku.Count = 1 + + outJxOrder.Skus = append(outJxOrder.Skus, jxSku) + outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice + outJxOrder.Weight += jxSku.Count * jxSku.Weight + if v.Count-1 > 0 { + jxSku2 := *jxSku + jxSku2.SalePrice = jxSku.Price + jxSku2.Count = v.Count - 1 + + jxSku = &jxSku2 + } else { + jxSku = nil + } + } + if jxSku != nil { + outJxOrder.Skus = append(outJxOrder.Skus, jxSku) + outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice + outJxOrder.Weight += jxSku.Count * jxSku.Weight } - } - if jxSku != nil { - outJxOrder.Skus = append(outJxOrder.Skus, jxSku) - outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice - outJxOrder.Weight += jxSku.Count * jxSku.Weight } } } - } - sort.Sort(JxSkuInfoList(outJxOrder.Skus)) - if outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "", - jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat), - model.CoordinateTypeMars, outJxOrder.Weight, checkTime); err == nil { + sort.Sort(JxSkuInfoList(outJxOrder.Skus)) + outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "", + jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat), + model.CoordinateTypeMars, outJxOrder.Weight, checkTime) + } else { outJxOrder.FreightPrice = 0 + } + if err == nil { outJxOrder.TotalPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice outJxOrder.ActualPayPrice = outJxOrder.TotalPrice + } else { + outJxOrder = nil + deliveryAddress = nil } return outJxOrder, deliveryAddress, err } @@ -537,6 +535,14 @@ func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) return err } +// todo 消息用异步可能导致丢失,单同步又有重入相关的问题 +func callNewOrder(order *model.GoodsOrder) (err error) { + jxutils.CallMsgHandlerAsync(func() { + err = partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order)) + }, jxutils.ComposeUniversalOrderID(order.VendorOrderID, model.VendorIDJX)) + return err +} + func changeOrderStatus(vendorOrderID string, status int, remark string) (err error) { orderStatus := &model.OrderStatus{ VendorOrderID: vendorOrderID, @@ -549,7 +555,10 @@ func changeOrderStatus(vendorOrderID string, status int, remark string) (err err StatusTime: time.Now(), Remark: remark, } - return partner.CurOrderManager.OnOrderStatusChanged(orderStatus) + jxutils.CallMsgHandlerAsync(func() { + err = partner.CurOrderManager.OnOrderStatusChanged(orderStatus) + }, jxutils.ComposeUniversalOrderID(vendorOrderID, model.VendorIDJX)) + return err } func GetOrderPay(ctx *jxcontext.Context, vendorOrderID string) (payList []*model.OrderPay, err error) { diff --git a/business/partner/purchase/jx/sku.go b/business/partner/purchase/jx/sku.go index 00a6ad887..30951dc7e 100644 --- a/business/partner/purchase/jx/sku.go +++ b/business/partner/purchase/jx/sku.go @@ -30,6 +30,22 @@ func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, user return err } +func (p *PurchaseHandler) CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuCategoryWithVendor) (err error) { + return err +} + +func (p *PurchaseHandler) UpdateCategory2(ctx *jxcontext.Context, cat *dao.SkuCategoryWithVendor) (err error) { + return err +} + +func (p *PurchaseHandler) DeleteCategory2(ctx *jxcontext.Context, cat *dao.SkuCategoryWithVendor) (err error) { + return err +} + +func (p *PurchaseHandler) ReorderCategories2(ctx *jxcontext.Context, vendorOrgCode, vendorParentCatID string, vendorCatIDList []string) (err error) { + return err +} + func (p *PurchaseHandler) CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) { return err } diff --git a/business/partner/purchase/mtwm/store_sku2.go b/business/partner/purchase/mtwm/store_sku2.go index d7254bd9e..b3fd7871d 100644 --- a/business/partner/purchase/mtwm/store_sku2.go +++ b/business/partner/purchase/mtwm/store_sku2.go @@ -112,7 +112,7 @@ func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID in subCatName := "" subCatCode := 0 - if storeCat.StoreCatSyncStatus&model.SyncFlagNewMask == 0 { + if storeCat.CatSyncStatus&model.SyncFlagNewMask == 0 { // 修改一级分类 originName = storeCat.VendorCatID } @@ -123,7 +123,7 @@ func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID in catCode = storeCat.ParentID subCatName = storeCat.Name subCatCode = storeCat.ID - if storeCat.StoreCatSyncStatus&model.SyncFlagNewMask == 0 { + if storeCat.CatSyncStatus&model.SyncFlagNewMask == 0 { // 修改二级分类 originName = storeCat.VendorCatID catName = storeCat.Name @@ -150,9 +150,9 @@ func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID in Sequence: storeCat.Seq, } err = api.MtwmAPI.RetailCatUpdate(vendorStoreID, catName, param4Update) - if storeCat.StoreCatSyncStatus&model.SyncFlagNewMask == 0 && // 修改分类名,但分类不存在 + if storeCat.CatSyncStatus&model.SyncFlagNewMask == 0 && // 修改分类名,但分类不存在 p.IsErrCategoryNotExist(err) && originName != "" { - storeCat.StoreCatSyncStatus |= model.SyncFlagNewMask + storeCat.CatSyncStatus |= model.SyncFlagNewMask err = p.CreateStoreCategory(ctx, storeID, vendorStoreID, storeCat) } } @@ -235,7 +235,7 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo, isCreate bool) (successList []*dao.StoreSkuSyncInfo, err error) { foodDataList := make([]map[string]interface{}, len(storeSkuList)) for i, storeSku := range storeSkuList { - isNeedUpdatePrice := isCreate //storeSku.StoreSkuSyncStatus&( model.SyncFlagPriceMask| model.SyncFlagNewMask) != 0 + isNeedUpdatePrice := isCreate //storeSku.SkuSyncStatus&( model.SyncFlagPriceMask| model.SyncFlagNewMask) != 0 foodData := make(map[string]interface{}) foodDataList[i] = foodData foodData[mtwmapi.KeyAppFoodCode] = utils.Int2Str(storeSku.SkuID) diff --git a/controllers/cms_sync.go b/controllers/cms_sync.go index 687264cb2..c64fa2390 100644 --- a/controllers/cms_sync.go +++ b/controllers/cms_sync.go @@ -115,7 +115,7 @@ func (c *SyncController) FullSyncStoresSkus() { if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.VendorIDs, &vendorIDs); err != nil { return retVal, "", err } - retVal, err = cms.CurVendorSync.FullSyncStoresSkus(params.Ctx, db, vendorIDs, storeIDs, true, params.IsAsync, params.IsContinueWhenError) + retVal, err = cms.CurVendorSync.FullSyncStoresSkus(params.Ctx, db, vendorIDs, storeIDs, true, nil, params.IsAsync, params.IsContinueWhenError) return retVal, "", err }) }