修改商品库增加操作日志

This commit is contained in:
苏尹岚
2020-04-26 17:29:42 +08:00
parent de9cb0c3b3
commit 2d884794a1
4 changed files with 244 additions and 164 deletions

View File

@@ -884,3 +884,149 @@ func (d *SyncErrResultLock) AppendData(syncErrResult SyncErrResult) {
defer d.locker.Unlock()
d.syncErrResult = append(d.syncErrResult, syncErrResult)
}
func (v *VendorSync) SyncStoreSkusFromYb(ctx *jxcontext.Context, storeIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
var (
vendorID = model.VendorIDYB
db = dao.GetDB()
)
hint, err = v.LoopStoresMap(ctx, db, fmt.Sprintf("从银豹平台同步商品到京西:%v", storeIDs), isAsync, true, []int{vendorID}, storeIDs,
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)
if len(loopMapInfo.StoreMapList) > 1 {
loopStoreTask := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[loopMapInfo.VendorID]),
tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError).SetParallelCount(5), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeMap := batchItemList[0].(*model.StoreMap)
_, err = syncStoreSkusFromYb(ctx, storeMap.StoreID, vendorID, storeMap.VendorStoreID, isAsync, isContinueWhenError)
return nil, err
}, loopMapInfo.StoreMapList)
t.AddChild(loopStoreTask).Run()
_, err = loopStoreTask.GetResult(0)
} else {
_, err = syncStoreSkusFromYb(ctx, loopMapInfo.StoreMapList[0].StoreID, vendorID, loopMapInfo.StoreMapList[0].VendorStoreID, isAsync, isContinueWhenError)
}
return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID)
}, isContinueWhenError)
return hint, makeSyncError(err)
}
func syncStoreSkusFromYb(ctx *jxcontext.Context, storeID, vendorID int, vendorStoreID string, isAsync, isContinueWhenError bool) (hint string, err error) {
var (
db = dao.GetDB()
)
handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
store, _ := dao.GetStoreDetail(db, storeID, vendorID)
localSkuList, err := dao.GetStoreSkus2(db, vendorID, storeID, nil, false)
if err != nil {
return "", err
}
localSkuMap := make(map[string]*dao.StoreSkuSyncInfo)
for _, v := range localSkuList {
localSkuMap[v.VendorSkuID] = v
}
remoteSkuList, err := handler.GetStoreSkusFullInfo(ctx, nil, storeID, vendorStoreID, nil)
if err != nil {
return "", err
}
task := tasksch.NewParallelTask("银豹平台拉取标品", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
var (
pricePercentagePack []*model.PricePercentageItem
v = batchItemList[0].(*partner.SkuNameInfo)
)
//长度大于7就可能是标品非标品一般是7位前三位是yb_store_prefix后4位是yb_name_suffix
if len(v.YbBarCode) > 7 {
if localSkuMap[v.SkuList[0].VendorSkuID] == nil {
skuNames, err := dao.GetSkuNames(db, nil, []string{v.YbBarCode}, "", false)
if err != nil {
return retVal, err
}
//表示我们商品库中没有这个upc商品,如果有就直接关注上
if len(skuNames) == 0 {
//我们商品库中有这个商品但是upc没有填则尝试用upc去查一下
productInfos, err2 := GetJdUpcCodeByName(ctx, "", v.YbBarCode)
err = err2
//表示用upc也没有找到这个商品则再尝试用银豹上的名字去查
if len(productInfos) == 0 {
skuNames2, err := dao.GetSkuNames(db, nil, nil, v.Name, false)
if err != nil {
return retVal, err
}
if len(skuNames2) > 1 {
return retVal, fmt.Errorf("此商品名在京西库中查询出了大于1个商品[%v]", v.Name)
}
//表示查到了需要把upc更新上去没查到就要新建(//TODO新建不起没得规格这些)
if len(skuNames2) == 1 {
skuNames2[0].Upc = &v.YbBarCode
dao.UpdateEntity(db, skuNames2[0], "Upc")
buildStoreSkuBindInfosAndFocus(ctx, db, store, v, skuNames2[0].ID, pricePercentagePack)
}
if len(skuNames2) == 0 {
}
} else {
productInfo := productInfos[0]
skuNames2, err := dao.GetSkuNames(db, nil, nil, productInfo.Name, false)
if err != nil {
return retVal, err
}
if len(skuNames2) > 1 {
return retVal, fmt.Errorf("此商品名在京西库中查询出了大于1个商品[%v]", productInfo.Name)
}
//表示查到了需要把upc更新上去没查到就要新建
if len(skuNames2) == 1 && (productInfo.SpecQuality == skuNames2[0].SpecQuality && productInfo.SpecUnit == skuNames2[0].SpecUnit) {
skuNames2[0].Upc = &v.YbBarCode
dao.UpdateEntity(db, skuNames2[0], "Upc")
buildStoreSkuBindInfosAndFocus(ctx, db, store, v, skuNames2[0].ID, pricePercentagePack)
} else {
skuNameExt := &model.SkuNameExt{
SkuName: model.SkuName{
Name: productInfo.Name,
Upc: &productInfo.UpcCode,
Status: model.SkuStatusNormal,
CategoryID: model.NoCatCatgoryID,
IsGlobal: model.YES,
Unit: productInfo.Unit,
},
Skus: []*model.SkuWithVendor{
&model.SkuWithVendor{
Sku: &model.Sku{},
},
},
// Places: []int{510100}, //默认成都
}
if len(v.SkuList) > 0 {
skuNameExt.Price = int(v.SkuList[0].VendorPrice)
skuNameExt.Skus[0].SpecQuality = productInfo.SpecQuality
skuNameExt.Skus[0].SpecUnit = productInfo.SpecUnit
skuNameExt.Skus[0].Weight = int(utils.Str2Int64(utils.Float64ToStr(float64(productInfo.Weight))))
skuNameExt.Skus[0].Status = model.SkuStatusNormal
}
if len(productInfo.ImgList) > 0 {
skuNameExt.Img = productInfo.ImgList[0]
}
outSkuNameExt, err := AddSkuName(ctx, skuNameExt, ctx.GetUserName())
if err != nil {
return retVal, err
}
buildStoreSkuBindInfosAndFocus(ctx, db, store, v, outSkuNameExt.ID, pricePercentagePack)
}
}
} else {
buildStoreSkuBindInfosAndFocus(ctx, db, store, v, skuNames[0].ID, pricePercentagePack)
}
}
}
return retVal, err
}, remoteSkuList)
tasksch.HandleTask(task, nil, true).Run()
if isAsync {
hint = task.GetID()
} else {
_, err = task.GetResult(0)
hint = "1"
}
return hint, err
}