! 门店商品同步标志分为price, sale和基础信息modify`

This commit is contained in:
gazebo
2019-04-30 11:12:45 +08:00
parent 2226df4e0a
commit 55a9a12727
7 changed files with 62 additions and 50 deletions

View File

@@ -650,7 +650,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, storeIDs []int, skuBind
updateFieldMap[model.FieldUpdatedAt] = 1 updateFieldMap[model.FieldUpdatedAt] = 1
updateFieldMap[model.FieldLastOperator] = 1 updateFieldMap[model.FieldLastOperator] = 1
setStoreSkuBindStatus(skuBind, model.SyncFlagModifiedMask) // setStoreSkuBindStatus(skuBind, model.SyncFlagModifiedMask)
dao.WrapUpdateULEntity(skuBind, userName) dao.WrapUpdateULEntity(skuBind, userName)
if num, err = dao.UpdateEntity(db, skuBind /*, utils.Map2KeySlice(updateFieldMap)...*/); err != nil { if num, err = dao.UpdateEntity(db, skuBind /*, utils.Map2KeySlice(updateFieldMap)...*/); err != nil {
dao.Rollback(db) dao.Rollback(db)
@@ -823,11 +823,11 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode
now, now,
pricePercentage, pricePercentage,
pricePercentage, pricePercentage,
model.SyncFlagModifiedMask | model.SyncFlagPriceMask, model.SyncFlagPriceMask,
model.SyncFlagModifiedMask | model.SyncFlagPriceMask, model.SyncFlagPriceMask,
model.SyncFlagModifiedMask | model.SyncFlagPriceMask, model.SyncFlagPriceMask,
model.SyncFlagModifiedMask | model.SyncFlagPriceMask, model.SyncFlagPriceMask,
model.SyncFlagModifiedMask | model.SyncFlagPriceMask, model.SyncFlagPriceMask,
toStoreID, toStoreID,
utils.DefaultTimeValue, utils.DefaultTimeValue,
} }
@@ -927,11 +927,11 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode
pricePercentage, pricePercentage,
pricePercentage, pricePercentage,
pricePercentage, pricePercentage,
model.SyncFlagModifiedMask | model.SyncFlagPriceMask | model.SyncFlagSaleMask, model.SyncFlagStoreSkuOnlyMask,
model.SyncFlagModifiedMask | model.SyncFlagPriceMask | model.SyncFlagSaleMask, model.SyncFlagStoreSkuOnlyMask,
model.SyncFlagModifiedMask | model.SyncFlagPriceMask | model.SyncFlagSaleMask, model.SyncFlagStoreSkuOnlyMask,
model.SyncFlagModifiedMask | model.SyncFlagPriceMask | model.SyncFlagSaleMask, model.SyncFlagStoreSkuOnlyMask,
model.SyncFlagModifiedMask | model.SyncFlagPriceMask | model.SyncFlagSaleMask, model.SyncFlagStoreSkuOnlyMask,
toStoreID, toStoreID,
utils.DefaultTimeValue, utils.DefaultTimeValue,
} }

View File

@@ -777,7 +777,7 @@ func TransformJdSpu2Sku(ctx *jxcontext.Context, skuNameIDs []int, count int, isA
rootTask.AddChild(subTask).Run() rootTask.AddChild(subTask).Run()
if _, err = subTask.GetResult(0); err == nil { if _, err = subTask.GetResult(0); err == nil {
if len(skuIDs) > 0 { if len(skuIDs) > 0 {
if _, err = dao.SetStoreSkuSyncStatus(db, model.VendorIDJD, -1, skuIDs, model.SyncFlagModifiedMask|model.SyncFlagPriceMask|model.SyncFlagSaleMask); err == nil { if _, err = dao.SetStoreSkuSyncStatus(db, model.VendorIDJD, -1, skuIDs, model.SyncFlagStoreSkuModifiedMask); err == nil {
// time.Sleep(20 * time.Second) // time.Sleep(20 * time.Second)
// _, err = cms.CurVendorSync.SyncStoresSkus(ctx, db, []int{model.VendorIDJD}, nil, skuIDs, false, isContinueWhenError) // _, err = cms.CurVendorSync.SyncStoresSkus(ctx, db, []int{model.VendorIDJD}, nil, skuIDs, false, isContinueWhenError)
} }

View File

@@ -67,12 +67,15 @@ const (
SyncFlagModifiedMask = 1 SyncFlagModifiedMask = 1
SyncFlagNewMask = 2 SyncFlagNewMask = 2
SyncFlagDeletedMask = 4 SyncFlagDeletedMask = 4
SyncFlagChangedMask = SyncFlagModifiedMask | SyncFlagNewMask | SyncFlagDeletedMask
SyncFlagSaleMask = 8 SyncFlagSaleMask = 8
SyncFlagPriceMask = 16 SyncFlagPriceMask = 16
SyncFlagSpecMask = 32 SyncFlagSpecMask = 32
SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask
SyncFlagStoreSkuModifiedMask = SyncFlagStoreSkuOnlyMask | SyncFlagModifiedMask
SyncFlagChangedMask = SyncFlagSpecMask | SyncFlagNewMask | SyncFlagDeletedMask | SyncFlagStoreSkuModifiedMask
SyncFlagStoreName = 8 SyncFlagStoreName = 8
SyncFlagStoreAddress = 16 SyncFlagStoreAddress = 16
) )

View File

@@ -123,7 +123,7 @@ func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs [
func (p *PurchaseHandler) createCatByStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, storeID int, storeSkuInfoList []*tStoreSkuFullInfo) (num int64, err error) { 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) catList2Add := make(map[int]int)
for _, storeSku := range storeSkuInfoList { for _, storeSku := range storeSkuInfoList {
if storeSku.SkuID != 0 && storeSku.EbaiSyncStatus&(model.SyncFlagNewMask|model.SyncFlagModifiedMask) != 0 { if storeSku.SkuID != 0 && storeSku.EbaiSyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreSkuModifiedMask) != 0 {
if storeSku.ParentCatEbaiID == 0 && storeSku.ParentCatID != 0 { if storeSku.ParentCatEbaiID == 0 && storeSku.ParentCatID != 0 {
catList2Add[storeSku.ParentCatID] = 1 catList2Add[storeSku.ParentCatID] = 1
} }
@@ -263,7 +263,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
updateFields = append(updateFields, model.FieldEbaiID) updateFields = append(updateFields, model.FieldEbaiID)
_, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku)) _, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku))
} }
} else if storeSku.EbaiSyncStatus&model.SyncFlagModifiedMask != 0 { } else if storeSku.EbaiSyncStatus&model.SyncFlagStoreSkuModifiedMask != 0 {
if jxutils.IsFakeID(storeSku.EbaiID) { if jxutils.IsFakeID(storeSku.EbaiID) {
err = fmt.Errorf("京西数据异常,修改一个没有创建的饿百商品:%d, store:%s", storeSku.SkuID, strStoreID) err = fmt.Errorf("京西数据异常,修改一个没有创建的饿百商品:%d, store:%s", storeSku.SkuID, strStoreID)
} else { } else {

View File

@@ -163,7 +163,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
func (p *PurchaseHandler) FullSyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) { func (p *PurchaseHandler) FullSyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) {
globals.SugarLogger.Debugf("jd FullSyncStoreSkus, storeID:%d", storeID) globals.SugarLogger.Debugf("jd FullSyncStoreSkus, storeID:%d", storeID)
db := dao.GetDB() db := dao.GetDB()
_, err = dao.SetStoreSkuSyncStatus(db, model.VendorIDJD, storeID, nil, model.SyncFlagModifiedMask|model.SyncFlagPriceMask|model.SyncFlagSaleMask) _, err = dao.SetStoreSkuSyncStatus(db, model.VendorIDJD, storeID, nil, model.SyncFlagStoreSkuOnlyMask)
if err != nil { if err != nil {
return "", err return "", err
} }

View File

@@ -41,7 +41,7 @@ func (p *PurchaseHandler) SyncStoreCategory(ctx *jxcontext.Context, parentTask t
globals.SugarLogger.Debugf("RetailCatDelete vendorStoreID:%s, MtwmID:%s", vendorStoreID, catInfo.MtwmID) globals.SugarLogger.Debugf("RetailCatDelete vendorStoreID:%s, MtwmID:%s", vendorStoreID, catInfo.MtwmID)
err = api.MtwmAPI.RetailCatDelete(vendorStoreID, catInfo.MtwmID) err = api.MtwmAPI.RetailCatDelete(vendorStoreID, catInfo.MtwmID)
} }
} else if catInfo.MtwmSyncStatus&(model.SyncFlagNewMask|model.SyncFlagModifiedMask) != 0 { // 新增 } else if catInfo.MtwmSyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreSkuModifiedMask) != 0 { // 新增
catName := catInfo.CatName catName := catInfo.CatName
subCatName := "" subCatName := ""
originName := "" originName := ""
@@ -259,10 +259,17 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
if skuItem.SkuSyncStatus&model.SyncFlagNewMask == 0 && skuItem.VendorSkuID != "" { if skuItem.SkuSyncStatus&model.SyncFlagNewMask == 0 && skuItem.VendorSkuID != "" {
err = api.MtwmAPI.RetailDelete(vendorStoreID, skuItem.VendorSkuID) err = api.MtwmAPI.RetailDelete(vendorStoreID, skuItem.VendorSkuID)
} }
} else if skuItem.SkuSyncStatus&(model.SyncFlagModifiedMask|model.SyncFlagNewMask) != 0 { } else if skuItem.SkuSyncStatus&(model.SyncFlagStoreSkuModifiedMask|model.SyncFlagNewMask) != 0 {
foodData := make(map[string]interface{}) foodData := make(map[string]interface{})
foodDataList[0] = foodData foodDataList[0] = foodData
foodData[mtwmapi.KeyAppFoodCode] = utils.Int2Str(skuItem.ID) foodData[mtwmapi.KeyAppFoodCode] = utils.Int2Str(skuItem.ID)
skus := []map[string]interface{}{
map[string]interface{}{
"sku_id": foodData[mtwmapi.KeyAppFoodCode],
},
}
foodData["skus"] = skus
if skuItem.SkuSyncStatus&(model.SyncFlagModifiedMask|model.SyncFlagNewMask|model.SyncFlagPriceMask) != 0 {
foodData["name"] = jxutils.ComposeSkuName(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 30) foodData["name"] = jxutils.ComposeSkuName(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 30)
foodData["description"] = skuItem.Comment foodData["description"] = skuItem.Comment
foodData["price"] = jxutils.IntPrice2Standard(int64(jxutils.CaculateSkuVendorPrice(int(skuItem.Price), int(storeDetail.PricePercentage)))) foodData["price"] = jxutils.IntPrice2Standard(int64(jxutils.CaculateSkuVendorPrice(int(skuItem.Price), int(storeDetail.PricePercentage))))
@@ -279,25 +286,27 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
} else { } else {
// foodData["tag_id"] = utils.Int64ToStr(defVendorCatID) // foodData["tag_id"] = utils.Int64ToStr(defVendorCatID)
} }
skus := []map[string]interface{}{ skus[0]["spec"] = jxutils.ComposeSkuSpec(skuItem.SpecQuality, skuItem.SpecUnit)
map[string]interface{}{ skus[0]["price"] = foodData["price"]
"sku_id": foodData[mtwmapi.KeyAppFoodCode], skus[0]["stock"] = "*"
"spec": jxutils.ComposeSkuSpec(skuItem.SpecQuality, skuItem.SpecUnit), skus[0]["upc"] = skuItem.Upc
"price": foodData["price"],
"stock": "*",
"upc": skuItem.Upc,
},
}
if foodData["tag_id"] != nil { if foodData["tag_id"] != nil {
skus[0]["weight"] = skuItem.Weight // weight字段仅限服饰鞋帽、美妆、日用品、母婴、生鲜果蔬、生活超市下的便利店/超市门店品类的商家使用 skus[0]["weight"] = skuItem.Weight // weight字段仅限服饰鞋帽、美妆、日用品、母婴、生鲜果蔬、生活超市下的便利店/超市门店品类的商家使用
} }
foodData["skus"] = skus
if globals.EnableMtwmStoreWrite { if globals.EnableMtwmStoreWrite {
if err = api.MtwmAPI.RetailBatchInitData(vendorStoreID, foodDataList); err == nil { if err = api.MtwmAPI.RetailBatchInitData(vendorStoreID, foodDataList); err == nil {
storeSkuBind.MtwmID = int64(skuItem.ID) storeSkuBind.MtwmID = int64(skuItem.ID)
updateFields = append(updateFields, model.FieldMtwmID) updateFields = append(updateFields, model.FieldMtwmID)
} }
} }
} else {
if skuItem.SkuSyncStatus&(model.SyncFlagSaleMask) != 0 {
sellStatus := skuStatusJX2Mtwm(jxutils.MergeSkuStatus(skuItem.Status, skuItem.StoreSkuStatus))
if globals.EnableMtwmStoreWrite {
err = api.MtwmAPI.RetailSkuSellStatus(vendorStoreID, foodDataList, sellStatus)
}
}
}
} }
if err == nil { if err == nil {
_, err = dao.UpdateEntity(db, storeSkuBind, updateFields...) _, err = dao.UpdateEntity(db, storeSkuBind, updateFields...)

View File

@@ -52,7 +52,7 @@ func (p *PurchaseHandler) SyncStoreCategory(ctx *jxcontext.Context, parentTask t
if catInfo.WscID, err = api.WeimobAPI.AddClassify(catInfo.CatName, utils.Str2Int64WithDefault(catInfo.ParentVendorCatID, 0), catImg); err == nil { if catInfo.WscID, err = api.WeimobAPI.AddClassify(catInfo.CatName, utils.Str2Int64WithDefault(catInfo.ParentVendorCatID, 0), catImg); err == nil {
updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[model.VendorIDWSC])) updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[model.VendorIDWSC]))
} }
} else if catInfo.WscSyncStatus&(model.SyncFlagModifiedMask|model.SyncFlagModifiedMask) != 0 { // 修改 } else if catInfo.WscSyncStatus&(model.SyncFlagModifiedMask) != 0 { // 修改
err = api.WeimobAPI.UpdateClassify(catInfo.WscID, catInfo.CatName, "") err = api.WeimobAPI.UpdateClassify(catInfo.WscID, catInfo.CatName, "")
} }
} }
@@ -189,7 +189,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
err = nil // 强制忽略 err = nil // 强制忽略
} }
} }
} else if skuItem.SkuSyncStatus&(model.SyncFlagModifiedMask|model.SyncFlagNewMask) != 0 { } else if skuItem.SkuSyncStatus&(model.SyncFlagStoreSkuModifiedMask|model.SyncFlagNewMask) != 0 {
outerGoodsCode := utils.Int2Str(skuItem.NameID) outerGoodsCode := utils.Int2Str(skuItem.NameID)
title := jxutils.ComposeSkuName(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 30) title := jxutils.ComposeSkuName(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 30)
isPutAway := jxutils.MergeSkuStatus(skuItem.Status, skuItem.StoreSkuStatus) == model.SkuStatusNormal isPutAway := jxutils.MergeSkuStatus(skuItem.Status, skuItem.StoreSkuStatus) == model.SkuStatusNormal