- category sync almost ok.
- refactor tasksch (isContinueWhenError)
This commit is contained in:
@@ -47,6 +47,16 @@ func AddCategory(cat *model.SkuCategory, userName string) (outCat *model.SkuCate
|
||||
dao.WrapAddIDCULDEntity(cat, userName)
|
||||
cat.JdSyncStatus = model.SyncFlagNewMask
|
||||
cat.JdID = genTmpID()
|
||||
db := dao.GetDB()
|
||||
if cat.Seq <= 0 {
|
||||
var maxSeq struct {
|
||||
MaxSeq int
|
||||
}
|
||||
if err = dao.GetRow(db, &maxSeq, "SELECT MAX(seq) max_seq FROM sku_category t1 WHERE level = ?", cat.Level); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cat.Seq = maxSeq.MaxSeq + 1
|
||||
}
|
||||
if err = dao.CreateEntity(nil, cat); err == nil {
|
||||
outCat = cat
|
||||
err = CurVendorSync.SyncCategory(nil, cat.ID, false, userName)
|
||||
@@ -89,13 +99,12 @@ func ReorderCategories(parentID int, categoryIDs []int, userName string) (err er
|
||||
catsMap[cat.ID] = cat
|
||||
}
|
||||
for k, v := range categoryIDs {
|
||||
catsMap[v].Seq = (k + 1) * 5
|
||||
// catsMap[v].JdSyncStatus = model.SyncFlagModifiedMask
|
||||
catsMap[v].Seq = k
|
||||
catsMap[v].JdSyncStatus = model.SyncFlagModifiedMask
|
||||
if _, err = dao.UpdateEntity(db, catsMap[v], "Seq"); err != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
// todo 这里应该也需要先置标记
|
||||
if err == nil {
|
||||
err = CurVendorSync.SyncReorderCategories(db, parentID, false, userName)
|
||||
}
|
||||
|
||||
@@ -47,23 +47,28 @@ func (v *VendorSync) SyncCategory(db *dao.DaoDB, categoryID int, isForce bool, u
|
||||
}
|
||||
err := dao.GetEntitiesByKV(db, &cats, cond, true)
|
||||
if err == nil {
|
||||
tasksch.RunTask("", func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
cat := batchItemList[0].(*model.SkuCategory)
|
||||
updateFields := []string{model.FieldJdSyncStatus}
|
||||
if (cat.JdSyncStatus & model.SyncFlagDeletedMask) != 0 { //删除
|
||||
err = multiStoresHandler.DeleteCategory(db, cat, userName)
|
||||
} else if (cat.JdSyncStatus&model.SyncFlagNewMask) != 0 || isForce { // 新增
|
||||
err = multiStoresHandler.CreateCategory(db, cat, userName)
|
||||
updateFields = append(updateFields, model.FieldJdID)
|
||||
} else if (cat.JdSyncStatus & model.SyncFlagModifiedMask) != 0 { // 修改
|
||||
err = multiStoresHandler.UpdateCategory(db, cat, userName)
|
||||
}
|
||||
if err == nil {
|
||||
cat.JdSyncStatus = 0
|
||||
_, err = dao.UpdateEntity(db, cat, model.FieldJdSyncStatus)
|
||||
task := tasksch.RunTask("", false, nil, len(cats), 1, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
for _, v := range batchItemList {
|
||||
cat := v.(*model.SkuCategory)
|
||||
updateFields := []string{multiStoresHandler.GetFieldSyncStatusName()}
|
||||
if (cat.JdSyncStatus & model.SyncFlagDeletedMask) != 0 { //删除
|
||||
err = multiStoresHandler.DeleteCategory(db, cat, userName)
|
||||
} else if (cat.JdSyncStatus&model.SyncFlagNewMask) != 0 || isForce { // 新增
|
||||
err = multiStoresHandler.CreateCategory(db, cat, userName)
|
||||
updateFields = append(updateFields, multiStoresHandler.GetFieldIDName())
|
||||
} else if (cat.JdSyncStatus & model.SyncFlagModifiedMask) != 0 { // 修改
|
||||
err = multiStoresHandler.UpdateCategory(db, cat, userName)
|
||||
}
|
||||
if err == nil {
|
||||
cat.JdSyncStatus = 0
|
||||
_, err = dao.UpdateEntity(db, cat, updateFields...)
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
return nil, err
|
||||
}, nil, len(cats), 1, "", cats)
|
||||
}, cats)
|
||||
_, err = task.GetResult(0)
|
||||
}
|
||||
return nil, err
|
||||
})
|
||||
@@ -71,11 +76,17 @@ func (v *VendorSync) SyncCategory(db *dao.DaoDB, categoryID int, isForce bool, u
|
||||
}
|
||||
|
||||
func (v *VendorSync) SyncReorderCategories(db *dao.DaoDB, categoryID int, isForce bool, userName string) (err error) {
|
||||
// todo
|
||||
if handler := GetPurchaseHandler(model.VendorIDJD); handler != nil {
|
||||
err = handler.(partner.IMultipleStoresHandler).ReorderCategories(db, categoryID, userName)
|
||||
}
|
||||
return nil
|
||||
err = v.LoopMultiStoresVendors(db, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
multiStoresHandler := batchItemList[0].(partner.IMultipleStoresHandler)
|
||||
err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName)
|
||||
if err2 == nil {
|
||||
cat := &model.SkuCategory{}
|
||||
_, err2 = dao.UpdateEntityByKV(db, cat, utils.Params2Map(multiStoresHandler.GetFieldSyncStatusName(), 0), utils.Params2Map(model.FieldParentID, categoryID))
|
||||
return nil, err2
|
||||
}
|
||||
return nil, err2
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID, storeID int, isForce bool, userName string) (err error) {
|
||||
@@ -109,26 +120,30 @@ func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, isForce bool, use
|
||||
}
|
||||
err := dao.GetEntitiesByKV(db, &skuList, cond, true)
|
||||
if err == nil {
|
||||
globals.SugarLogger.Debug(utils.Format4Output(skuList, false))
|
||||
task := tasksch.RunTask("SyncSku", func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
sku := batchItemList[0].(*model.Sku)
|
||||
if (skuID == -1 || skuID == sku.ID) && (isForce || sku.JdSyncStatus != 0) {
|
||||
updateFields := []string{model.FieldJdSyncStatus}
|
||||
if sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
||||
err = multiStoresHandler.DeleteSku(db, sku, userName)
|
||||
} else if sku.JdSyncStatus&model.SyncFlagNewMask != 0 { // 新增
|
||||
err = multiStoresHandler.CreateSku(db, sku, userName)
|
||||
updateFields = append(updateFields, model.FieldJdID)
|
||||
} else if sku.JdSyncStatus&model.SyncFlagModifiedMask != 0 { // 修改
|
||||
err = multiStoresHandler.UpdateSku(db, sku, userName)
|
||||
}
|
||||
if err == nil {
|
||||
sku.JdSyncStatus = 0
|
||||
dao.UpdateEntity(db, sku, updateFields...)
|
||||
// globals.SugarLogger.Debug(utils.Format4Output(skuList, false))
|
||||
task := tasksch.RunTask("SyncSku", false, nil, len(skuList), 1, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
for _, v := range batchItemList {
|
||||
sku := v.(*model.Sku)
|
||||
if (skuID == -1 || skuID == sku.ID) && (isForce || sku.JdSyncStatus != 0) {
|
||||
updateFields := []string{multiStoresHandler.GetFieldSyncStatusName()}
|
||||
if sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
||||
err = multiStoresHandler.DeleteSku(db, sku, userName)
|
||||
} else if sku.JdSyncStatus&model.SyncFlagNewMask != 0 { // 新增
|
||||
err = multiStoresHandler.CreateSku(db, sku, userName)
|
||||
updateFields = append(updateFields, multiStoresHandler.GetFieldIDName())
|
||||
} else if sku.JdSyncStatus&model.SyncFlagModifiedMask != 0 { // 修改
|
||||
err = multiStoresHandler.UpdateSku(db, sku, userName)
|
||||
}
|
||||
if err == nil {
|
||||
sku.JdSyncStatus = 0
|
||||
dao.UpdateEntity(db, sku, updateFields...)
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil, err
|
||||
}, nil, len(skuList), 1, "", skuList)
|
||||
}, skuList)
|
||||
_, err = task.GetResult(0)
|
||||
}
|
||||
return nil, err
|
||||
@@ -152,14 +167,14 @@ func (v *VendorSync) SyncStoreSku(db *dao.DaoDB, storeID int, skuIDs []int, isFo
|
||||
func (v *VendorSync) LoopStoreMap(db *dao.DaoDB, storeID int, handler tasksch.WorkFunc) (err error) {
|
||||
storeMaps, err := GetStoreVendorMaps(db, storeID, -1)
|
||||
if err == nil {
|
||||
task := tasksch.RunTask("", handler, nil, len(storeMaps), 1, "", storeMaps)
|
||||
task := tasksch.RunTask("LoopStoreMap", false, nil, len(storeMaps), 1, "", handler, storeMaps)
|
||||
_, err = task.GetResult(0)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (v *VendorSync) LoopMultiStoresVendors(db *dao.DaoDB, handler tasksch.WorkFunc) (err error) {
|
||||
task := tasksch.RunTask("LoopMultiStoresVendors", handler, nil, len(MultiStoresVendorHandlers), 1, "", MultiStoresVendorHandlers)
|
||||
task := tasksch.RunTask("LoopMultiStoresVendors", false, nil, len(MultiStoresVendorHandlers), 1, "", handler, MultiStoresVendorHandlers)
|
||||
_, err = task.GetResult(0)
|
||||
return err
|
||||
}
|
||||
@@ -177,7 +192,39 @@ func (v *VendorSync) LoopSingleStoreVendors(db *dao.DaoDB, taskName, userName st
|
||||
if parellelCount > 20 {
|
||||
parellelCount = 20
|
||||
}
|
||||
tasksch.RunManagedTask(taskName, handler, nil, parellelCount, 1, userName, storeMaps)
|
||||
task := tasksch.RunManagedTask(taskName, false, nil, parellelCount, 1, userName, handler, storeMaps)
|
||||
_, err = task.GetResult(0)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (v *VendorSync) RefreshSkuIDs(nameID, skuID int, isForce bool, userName string) (err error) {
|
||||
sql := `
|
||||
SELECT t1.id
|
||||
FROM sku t1
|
||||
JOIN sku_name t2 ON t1.name_id = t2.id
|
||||
WHERE 1 = 1
|
||||
`
|
||||
sqlParams := []interface{}{}
|
||||
if nameID != -1 {
|
||||
sql += " AND t1.name_id = ?"
|
||||
sqlParams = append(sqlParams, nameID)
|
||||
}
|
||||
if skuID != -1 {
|
||||
sql += " AND t1.id = ?"
|
||||
sqlParams = append(sqlParams, skuID)
|
||||
}
|
||||
|
||||
var ids []int
|
||||
db := dao.GetDB()
|
||||
if err = dao.GetRows(db, &ids, sql, sqlParams); err == nil {
|
||||
// globals.SugarLogger.Debug(utils.Format4Output(ids, false))
|
||||
err = v.LoopMultiStoresVendors(db, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
multiStoresHandler := batchItemList[0].(partner.IMultipleStoresHandler)
|
||||
err := multiStoresHandler.SyncSkusIDMap(db, ids, userName)
|
||||
globals.SugarLogger.Debug(err)
|
||||
return nil, err
|
||||
})
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user