- only handle dirty sku in SyncSku
This commit is contained in:
@@ -246,41 +246,50 @@ func (v *VendorSync) SyncSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuI
|
|||||||
cond[model.FieldID] = skuID
|
cond[model.FieldID] = skuID
|
||||||
}
|
}
|
||||||
err := dao.GetEntitiesByKV(db, &skuList, cond, true)
|
err := dao.GetEntitiesByKV(db, &skuList, cond, true)
|
||||||
if err == nil && len(skuList) > 0 {
|
if err == nil {
|
||||||
sort.Sort(jxutils.SkuList(skuList))
|
var dirtySkuList []*model.Sku
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(skuList, false))
|
for _, v := range skuList {
|
||||||
// todo 这里SetParallelCount(1)的原因是京东SPU特殊类型必须要序列化同步才能正常处理, db可能会有多线程问题
|
syncStatus := jxutils.GetObjFieldByName(v, syncStatusFieldName).(int8)
|
||||||
task := tasksch.NewParallelTask("SyncSku loop sku", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
if syncStatus != 0 {
|
||||||
sku := batchItemList[0].(*model.Sku)
|
dirtySkuList = append(dirtySkuList, v)
|
||||||
syncStatus := jxutils.GetObjFieldByName(sku, syncStatusFieldName).(int8)
|
|
||||||
if (skuID == -1 || skuID == sku.ID) && (syncStatus != 0) {
|
|
||||||
updateFields := []string{syncStatusFieldName}
|
|
||||||
if syncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
|
||||||
err = multiStoresHandler.DeleteSku(db, sku, userName)
|
|
||||||
} else if syncStatus&model.SyncFlagNewMask != 0 { // 新增
|
|
||||||
if err = multiStoresHandler.CreateSku(db, sku, userName); err == nil {
|
|
||||||
var tmpStruct struct {
|
|
||||||
MaxIndex int
|
|
||||||
}
|
|
||||||
// todo hard code 得到京东spu中sku的顺序(以方便以后修改销售属性)
|
|
||||||
if dao.GetRow(db, &tmpStruct, "SELECT MAX(sku_index) max_index FROM sku WHERE name_id = ? AND jd_id > 0 AND jd_id < 4024012631406 ", sku.NameID) == nil {
|
|
||||||
sku.SkuIndex = tmpStruct.MaxIndex + 1
|
|
||||||
updateFields = append(updateFields, "SkuIndex")
|
|
||||||
}
|
|
||||||
updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[multiStoresHandler.GetVendorID()]))
|
|
||||||
}
|
|
||||||
} else if syncStatus&model.SyncFlagModifiedMask != 0 { // 修改
|
|
||||||
err = multiStoresHandler.UpdateSku(db, sku, userName)
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
jxutils.SetObjFieldByName(sku, syncStatusFieldName, int8(0))
|
|
||||||
dao.UpdateEntity(db, sku, updateFields...)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return nil, err
|
}
|
||||||
}, skuList)
|
if len(dirtySkuList) > 0 {
|
||||||
t.AddChild(task).Run()
|
sort.Sort(jxutils.SkuList(dirtySkuList))
|
||||||
_, err = task.GetResult(0)
|
// globals.SugarLogger.Debug(utils.Format4Output(dirtySkuList, false))
|
||||||
|
// todo 这里SetParallelCount(1)的原因是京东SPU特殊类型必须要序列化同步才能正常处理, db可能会有多线程问题
|
||||||
|
task := tasksch.NewParallelTask("SyncSku loop sku", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
|
sku := batchItemList[0].(*model.Sku)
|
||||||
|
syncStatus := jxutils.GetObjFieldByName(sku, syncStatusFieldName).(int8)
|
||||||
|
if (skuID == -1 || skuID == sku.ID) && (syncStatus != 0) {
|
||||||
|
updateFields := []string{syncStatusFieldName}
|
||||||
|
if syncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
||||||
|
err = multiStoresHandler.DeleteSku(db, sku, userName)
|
||||||
|
} else if syncStatus&model.SyncFlagNewMask != 0 { // 新增
|
||||||
|
if err = multiStoresHandler.CreateSku(db, sku, userName); err == nil {
|
||||||
|
var tmpStruct struct {
|
||||||
|
MaxIndex int
|
||||||
|
}
|
||||||
|
// todo hard code 得到京东spu中sku的顺序(以方便以后修改销售属性)
|
||||||
|
if dao.GetRow(db, &tmpStruct, "SELECT MAX(sku_index) max_index FROM sku WHERE name_id = ? AND jd_id > 0 AND jd_id < 4024012631406 ", sku.NameID) == nil {
|
||||||
|
sku.SkuIndex = tmpStruct.MaxIndex + 1
|
||||||
|
updateFields = append(updateFields, "SkuIndex")
|
||||||
|
}
|
||||||
|
updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[multiStoresHandler.GetVendorID()]))
|
||||||
|
}
|
||||||
|
} else if syncStatus&model.SyncFlagModifiedMask != 0 { // 修改
|
||||||
|
err = multiStoresHandler.UpdateSku(db, sku, userName)
|
||||||
|
}
|
||||||
|
if err == nil {
|
||||||
|
jxutils.SetObjFieldByName(sku, syncStatusFieldName, int8(0))
|
||||||
|
dao.UpdateEntity(db, sku, updateFields...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}, dirtySkuList)
|
||||||
|
t.AddChild(task).Run()
|
||||||
|
_, err = task.GetResult(0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user