去除老的sku与category相关多门店平台接口
This commit is contained in:
@@ -12,7 +12,6 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/refutil"
|
||||
)
|
||||
|
||||
type LoopStoreMapInfo struct {
|
||||
@@ -47,36 +46,36 @@ var (
|
||||
ErrEntityNotExist = errors.New("找不到相应实体")
|
||||
)
|
||||
|
||||
func (p *MultiStoreHandlerWrapper) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
|
||||
if jxutils.IsEmptyID(cat.JdID) {
|
||||
return nil
|
||||
}
|
||||
return p.IMultipleStoresHandler.DeleteCategory(db, cat, userName)
|
||||
}
|
||||
// func (p *MultiStoreHandlerWrapper) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
|
||||
// if jxutils.IsEmptyID(cat.JdID) {
|
||||
// return nil
|
||||
// }
|
||||
// return p.IMultipleStoresHandler.DeleteCategory(db, cat, userName)
|
||||
// }
|
||||
|
||||
func (p *MultiStoreHandlerWrapper) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
|
||||
if jxutils.IsEmptyID(cat.JdID) {
|
||||
globals.SugarLogger.Warnf("UpdateCategory fakeid cat:%s should not get here", utils.Format4Output(cat, true))
|
||||
return nil
|
||||
}
|
||||
return p.IMultipleStoresHandler.UpdateCategory(db, cat, userName)
|
||||
}
|
||||
// func (p *MultiStoreHandlerWrapper) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
|
||||
// if jxutils.IsEmptyID(cat.JdID) {
|
||||
// globals.SugarLogger.Warnf("UpdateCategory fakeid cat:%s should not get here", utils.Format4Output(cat, true))
|
||||
// return nil
|
||||
// }
|
||||
// return p.IMultipleStoresHandler.UpdateCategory(db, cat, userName)
|
||||
// }
|
||||
|
||||
func (p *MultiStoreHandlerWrapper) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
||||
globals.SugarLogger.Debugf("wrapper DeleteSku, sku:%s", utils.Format4Output(sku, false))
|
||||
if jxutils.IsEmptyID(sku.JdID) {
|
||||
return nil
|
||||
}
|
||||
return p.IMultipleStoresHandler.DeleteSku(db, sku, userName)
|
||||
}
|
||||
// func (p *MultiStoreHandlerWrapper) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
||||
// globals.SugarLogger.Debugf("wrapper DeleteSku, sku:%s", utils.Format4Output(sku, false))
|
||||
// if jxutils.IsEmptyID(sku.JdID) {
|
||||
// return nil
|
||||
// }
|
||||
// return p.IMultipleStoresHandler.DeleteSku(db, sku, userName)
|
||||
// }
|
||||
|
||||
func (p *MultiStoreHandlerWrapper) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
||||
if jxutils.IsEmptyID(sku.JdID) {
|
||||
globals.SugarLogger.Warnf("UpdateSku fakeid sku:%s should not get here", utils.Format4Output(sku, true))
|
||||
return nil
|
||||
}
|
||||
return p.IMultipleStoresHandler.UpdateSku(db, sku, userName)
|
||||
}
|
||||
// func (p *MultiStoreHandlerWrapper) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
||||
// if jxutils.IsEmptyID(sku.JdID) {
|
||||
// globals.SugarLogger.Warnf("UpdateSku fakeid sku:%s should not get here", utils.Format4Output(sku, true))
|
||||
// return nil
|
||||
// }
|
||||
// return p.IMultipleStoresHandler.UpdateSku(db, sku, userName)
|
||||
// }
|
||||
|
||||
func (v *VendorSync) GetStoreHandler(vendorID int) partner.IPurchasePlatformHandler {
|
||||
return partner.GetPurchasePlatformFromVendorID(vendorID)
|
||||
@@ -96,95 +95,95 @@ func (v *VendorSync) GetSingleStoreHandler(vendorID int) partner.ISingleStoreHan
|
||||
return nil
|
||||
}
|
||||
|
||||
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])
|
||||
task := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[vendorID]), nil, ctx,
|
||||
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
cat := batchItemList[0].(*model.SkuCategory)
|
||||
updateFields := []string{syncStatusFieldName}
|
||||
syncStatus := refutil.GetObjFieldByName(cat, syncStatusFieldName).(int8)
|
||||
if (syncStatus & model.SyncFlagDeletedMask) != 0 { //删除
|
||||
if (syncStatus & model.SyncFlagNewMask) == 0 {
|
||||
err = multiStoresHandler.DeleteCategory(db, cat, userName)
|
||||
}
|
||||
} else if (syncStatus & model.SyncFlagNewMask) != 0 { // 新增
|
||||
err = multiStoresHandler.CreateCategory(db, cat, userName)
|
||||
updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[multiStoresHandler.GetVendorID()]))
|
||||
} else if (syncStatus & model.SyncFlagModifiedMask) != 0 { // 修改
|
||||
err = multiStoresHandler.UpdateCategory(db, cat, userName)
|
||||
if intErr, ok := err.(*utils.ErrorWithCode); ok && intErr.IntCode() == -3 {
|
||||
err = nil
|
||||
}
|
||||
}
|
||||
if err == nil {
|
||||
refutil.SetObjFieldByName(cat, syncStatusFieldName, int8(0))
|
||||
_, err = dao.UpdateEntity(db, cat, updateFields...)
|
||||
}
|
||||
return nil, err
|
||||
}, cats)
|
||||
tasksch.HandleTask(task, parentTask, false).Run()
|
||||
_, err = task.GetResult(0)
|
||||
return err
|
||||
}
|
||||
// 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])
|
||||
// task := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[vendorID]), nil, ctx,
|
||||
// func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
// cat := batchItemList[0].(*model.SkuCategory)
|
||||
// updateFields := []string{syncStatusFieldName}
|
||||
// syncStatus := refutil.GetObjFieldByName(cat, syncStatusFieldName).(int8)
|
||||
// if (syncStatus & model.SyncFlagDeletedMask) != 0 { //删除
|
||||
// if (syncStatus & model.SyncFlagNewMask) == 0 {
|
||||
// err = multiStoresHandler.DeleteCategory(db, cat, userName)
|
||||
// }
|
||||
// } else if (syncStatus & model.SyncFlagNewMask) != 0 { // 新增
|
||||
// err = multiStoresHandler.CreateCategory(db, cat, userName)
|
||||
// updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[multiStoresHandler.GetVendorID()]))
|
||||
// } else if (syncStatus & model.SyncFlagModifiedMask) != 0 { // 修改
|
||||
// err = multiStoresHandler.UpdateCategory(db, cat, userName)
|
||||
// if intErr, ok := err.(*utils.ErrorWithCode); ok && intErr.IntCode() == -3 {
|
||||
// err = nil
|
||||
// }
|
||||
// }
|
||||
// if err == nil {
|
||||
// refutil.SetObjFieldByName(cat, syncStatusFieldName, int8(0))
|
||||
// _, err = dao.UpdateEntity(db, cat, updateFields...)
|
||||
// }
|
||||
// return nil, err
|
||||
// }, cats)
|
||||
// tasksch.HandleTask(task, parentTask, false).Run()
|
||||
// _, err = task.GetResult(0)
|
||||
// return err
|
||||
// }
|
||||
|
||||
func (v *VendorSync) SyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
|
||||
if !globals.IsUseThingMap {
|
||||
return v.oldSyncCategory(ctx, db, categoryID, isAsync, userName)
|
||||
}
|
||||
// if !globals.IsUseThingMap {
|
||||
// return v.oldSyncCategory(ctx, db, categoryID, isAsync, userName)
|
||||
// }
|
||||
return SyncCategories(ctx, nil, nil, nil, []int{categoryID}, isAsync)
|
||||
}
|
||||
|
||||
func (v *VendorSync) oldSyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
|
||||
globals.SugarLogger.Debug("SyncCategory")
|
||||
hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步分类信息:%d", categoryID), isAsync, false,
|
||||
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
vendorInfo := batchItemList[0].(*MultiStoreVendorInfo)
|
||||
var cats []*model.SkuCategory
|
||||
cond := make(map[string]interface{})
|
||||
if categoryID > 0 {
|
||||
cond[model.FieldID] = categoryID
|
||||
} else {
|
||||
cond[model.FieldLevel] = 1
|
||||
}
|
||||
err := dao.GetEntitiesByKV(db, &cats, cond, true)
|
||||
if err == nil {
|
||||
err = v.syncCategories(ctx, t, vendorInfo.VendorID, db, cats, userName)
|
||||
}
|
||||
if err != nil || categoryID > 0 {
|
||||
return nil, err
|
||||
}
|
||||
cond[model.FieldLevel] = 2
|
||||
err = dao.GetEntitiesByKV(db, &cats, cond, true)
|
||||
if err == nil {
|
||||
err = v.syncCategories(ctx, t, vendorInfo.VendorID, db, cats, userName)
|
||||
}
|
||||
return nil, err
|
||||
})
|
||||
return "", err
|
||||
}
|
||||
// func (v *VendorSync) oldSyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
|
||||
// globals.SugarLogger.Debug("SyncCategory")
|
||||
// hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步分类信息:%d", categoryID), isAsync, false,
|
||||
// func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
// vendorInfo := batchItemList[0].(*MultiStoreVendorInfo)
|
||||
// var cats []*model.SkuCategory
|
||||
// cond := make(map[string]interface{})
|
||||
// if categoryID > 0 {
|
||||
// cond[model.FieldID] = categoryID
|
||||
// } else {
|
||||
// cond[model.FieldLevel] = 1
|
||||
// }
|
||||
// err := dao.GetEntitiesByKV(db, &cats, cond, true)
|
||||
// if err == nil {
|
||||
// err = v.syncCategories(ctx, t, vendorInfo.VendorID, db, cats, userName)
|
||||
// }
|
||||
// if err != nil || categoryID > 0 {
|
||||
// return nil, err
|
||||
// }
|
||||
// cond[model.FieldLevel] = 2
|
||||
// err = dao.GetEntitiesByKV(db, &cats, cond, true)
|
||||
// if err == nil {
|
||||
// err = v.syncCategories(ctx, t, vendorInfo.VendorID, db, cats, userName)
|
||||
// }
|
||||
// return nil, err
|
||||
// })
|
||||
// return "", err
|
||||
// }
|
||||
|
||||
func (v *VendorSync) SyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
|
||||
if !globals.IsUseThingMap {
|
||||
return v.oldSyncReorderCategories(ctx, db, categoryID, isAsync, userName)
|
||||
}
|
||||
// if !globals.IsUseThingMap {
|
||||
// return v.oldSyncReorderCategories(ctx, db, categoryID, isAsync, userName)
|
||||
// }
|
||||
return SyncReorderCategories(ctx, -1, isAsync)
|
||||
}
|
||||
|
||||
func (v *VendorSync) oldSyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
|
||||
hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("分类重排序:%d", categoryID), isAsync, false, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
vendorInfo := batchItemList[0].(*MultiStoreVendorInfo)
|
||||
multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID)
|
||||
err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName)
|
||||
if err2 == nil {
|
||||
cat := &model.SkuCategory{}
|
||||
_, err2 = dao.UpdateEntityByKV(db, cat, utils.Params2Map(dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()]), 0), utils.Params2Map(model.FieldParentID, categoryID))
|
||||
return nil, err2
|
||||
}
|
||||
return nil, err2
|
||||
})
|
||||
return "", err
|
||||
}
|
||||
// func (v *VendorSync) oldSyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
|
||||
// hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("分类重排序:%d", categoryID), isAsync, false, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
// vendorInfo := batchItemList[0].(*MultiStoreVendorInfo)
|
||||
// multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID)
|
||||
// err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName)
|
||||
// if err2 == nil {
|
||||
// cat := &model.SkuCategory{}
|
||||
// _, err2 = dao.UpdateEntityByKV(db, cat, utils.Params2Map(dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()]), 0), utils.Params2Map(model.FieldParentID, categoryID))
|
||||
// return nil, err2
|
||||
// }
|
||||
// return nil, err2
|
||||
// })
|
||||
// return "", err
|
||||
// }
|
||||
|
||||
func (v *VendorSync) SyncStore(ctx *jxcontext.Context, db *dao.DaoDB, vendorID, storeID int, isAsync bool, userName string) (hint string, err error) {
|
||||
globals.SugarLogger.Debugf("SyncStore, storeID:%d", storeID)
|
||||
@@ -248,109 +247,109 @@ func (v *VendorSync) SyncSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuI
|
||||
}
|
||||
|
||||
func (v *VendorSync) SyncSkus(ctx *jxcontext.Context, db *dao.DaoDB, nameIDs []int, skuIDs []int, isAsync, isContinueWhenError bool, userName string) (hint string, err error) {
|
||||
if !globals.IsUseThingMap {
|
||||
return v.oldSyncSkus(ctx, db, nameIDs, skuIDs, isAsync, isContinueWhenError, userName)
|
||||
}
|
||||
// if !globals.IsUseThingMap {
|
||||
// return v.oldSyncSkus(ctx, db, nameIDs, skuIDs, isAsync, isContinueWhenError, userName)
|
||||
// }
|
||||
return SyncSkus(ctx, nil, nil, nil, nameIDs, skuIDs, isAsync)
|
||||
}
|
||||
|
||||
func (v *VendorSync) oldSyncSkus(ctx *jxcontext.Context, db *dao.DaoDB, nameIDs []int, skuIDs []int, isAsync, isContinueWhenError bool, userName string) (hint string, err error) {
|
||||
globals.SugarLogger.Debugf("SyncSku trackInfo:%s, nameIDs:%v, skuIDs:%v, userName:%s", ctx.GetTrackInfo(), nameIDs, skuIDs, userName)
|
||||
isManagedIt := !(len(nameIDs) > 0 && len(nameIDs) <= 2 || len(skuIDs) > 0 && len(skuIDs) < 8)
|
||||
return v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步商品信息, nameIDs:%v, skuIDs:%v", nameIDs, skuIDs), isAsync, isManagedIt,
|
||||
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
var resultList []interface{}
|
||||
vendorInfo := batchItemList[0].(*MultiStoreVendorInfo)
|
||||
multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID)
|
||||
syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()])
|
||||
dbField := dao.ConvertDBFieldPrefix(model.VendorNames[multiStoresHandler.GetVendorID()])
|
||||
skuMap := make(map[int]bool)
|
||||
sql := fmt.Sprintf(`
|
||||
SELECT DISTINCT t2.*
|
||||
FROM sku t1
|
||||
JOIN sku_name t2 ON t2.id = t1.name_id
|
||||
WHERE t1.%s_sync_status <> 0
|
||||
`, dbField)
|
||||
sqlParams := []interface{}{}
|
||||
if len(nameIDs) > 0 {
|
||||
sql += " AND t1.name_id IN (" + dao.GenQuestionMarks(len(nameIDs)) + ")"
|
||||
sqlParams = append(sqlParams, nameIDs)
|
||||
}
|
||||
if len(skuIDs) > 0 {
|
||||
sql += " AND t1.id IN(" + dao.GenQuestionMarks(len(skuIDs)) + ")"
|
||||
sqlParams = append(sqlParams, skuIDs)
|
||||
// func (v *VendorSync) oldSyncSkus(ctx *jxcontext.Context, db *dao.DaoDB, nameIDs []int, skuIDs []int, isAsync, isContinueWhenError bool, userName string) (hint string, err error) {
|
||||
// globals.SugarLogger.Debugf("SyncSku trackInfo:%s, nameIDs:%v, skuIDs:%v, userName:%s", ctx.GetTrackInfo(), nameIDs, skuIDs, userName)
|
||||
// isManagedIt := !(len(nameIDs) > 0 && len(nameIDs) <= 2 || len(skuIDs) > 0 && len(skuIDs) < 8)
|
||||
// return v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步商品信息, nameIDs:%v, skuIDs:%v", nameIDs, skuIDs), isAsync, isManagedIt,
|
||||
// func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
// var resultList []interface{}
|
||||
// vendorInfo := batchItemList[0].(*MultiStoreVendorInfo)
|
||||
// multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID)
|
||||
// syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()])
|
||||
// dbField := dao.ConvertDBFieldPrefix(model.VendorNames[multiStoresHandler.GetVendorID()])
|
||||
// skuMap := make(map[int]bool)
|
||||
// sql := fmt.Sprintf(`
|
||||
// SELECT DISTINCT t2.*
|
||||
// FROM sku t1
|
||||
// JOIN sku_name t2 ON t2.id = t1.name_id
|
||||
// WHERE t1.%s_sync_status <> 0
|
||||
// `, dbField)
|
||||
// sqlParams := []interface{}{}
|
||||
// if len(nameIDs) > 0 {
|
||||
// sql += " AND t1.name_id IN (" + dao.GenQuestionMarks(len(nameIDs)) + ")"
|
||||
// sqlParams = append(sqlParams, nameIDs)
|
||||
// }
|
||||
// if len(skuIDs) > 0 {
|
||||
// sql += " AND t1.id IN(" + dao.GenQuestionMarks(len(skuIDs)) + ")"
|
||||
// sqlParams = append(sqlParams, skuIDs)
|
||||
|
||||
}
|
||||
for _, v := range skuIDs {
|
||||
skuMap[v] = true
|
||||
}
|
||||
sql += " ORDER BY t2.id"
|
||||
// }
|
||||
// for _, v := range skuIDs {
|
||||
// skuMap[v] = true
|
||||
// }
|
||||
// sql += " ORDER BY t2.id"
|
||||
|
||||
var skuNameList []*model.SkuName
|
||||
err := dao.GetRows(db, &skuNameList, sql, sqlParams...)
|
||||
if err == nil && len(skuNameList) > 0 {
|
||||
// todo 同一skuName下的sku顺序处理的原因是京东SPU特殊类型必须要序列化同步才能正常处理, db可能会有多线程问题
|
||||
task := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[vendorInfo.VendorID]), tasksch.NewParallelConfig().SetParallelCount(10).SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
var resultList []interface{}
|
||||
skuName := batchItemList[0].(*model.SkuName)
|
||||
var skuList []*model.Sku
|
||||
if err = dao.GetRows(db, &skuList, fmt.Sprintf(`
|
||||
SELECT *
|
||||
FROM sku
|
||||
WHERE name_id = ? AND %s_sync_status <> 0
|
||||
ORDER BY IF(spec_unit IN('kg', 'L'), 1000, 1) * spec_quality
|
||||
`, dbField), skuName.ID); err == nil && len(skuList) > 0 {
|
||||
for _, sku := range skuList {
|
||||
syncStatus := refutil.GetObjFieldByName(sku, syncStatusFieldName).(int8)
|
||||
globals.SugarLogger.Debugf("SyncSku trackInfo2:%s, skuID:%d, syncStatus:%d", ctx.GetTrackInfo(), sku.ID, syncStatus)
|
||||
if (len(skuIDs) == 0 || skuMap[sku.ID]) && (syncStatus != 0) {
|
||||
updateFields := []string{syncStatusFieldName}
|
||||
if syncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
||||
if syncStatus&model.SyncFlagNewMask == 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 {
|
||||
refutil.SetObjFieldByName(sku, syncStatusFieldName, int8(0))
|
||||
if _, err = dao.UpdateEntity(db, sku, updateFields...); err != nil {
|
||||
break
|
||||
} else {
|
||||
resultList = append(resultList, 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if err == nil {
|
||||
refutil.SetObjFieldByName(skuName, syncStatusFieldName, int8(0))
|
||||
_, err = dao.UpdateEntity(db, skuName, syncStatusFieldName)
|
||||
}
|
||||
return resultList, err
|
||||
}, skuNameList)
|
||||
t.AddChild(task).Run()
|
||||
result, err2 := task.GetResult(0)
|
||||
if err = err2; err == nil {
|
||||
resultList = append(resultList, result...)
|
||||
}
|
||||
}
|
||||
return resultList, err
|
||||
})
|
||||
}
|
||||
// var skuNameList []*model.SkuName
|
||||
// err := dao.GetRows(db, &skuNameList, sql, sqlParams...)
|
||||
// if err == nil && len(skuNameList) > 0 {
|
||||
// // todo 同一skuName下的sku顺序处理的原因是京东SPU特殊类型必须要序列化同步才能正常处理, db可能会有多线程问题
|
||||
// task := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[vendorInfo.VendorID]), tasksch.NewParallelConfig().SetParallelCount(10).SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||
// func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
// var resultList []interface{}
|
||||
// skuName := batchItemList[0].(*model.SkuName)
|
||||
// var skuList []*model.Sku
|
||||
// if err = dao.GetRows(db, &skuList, fmt.Sprintf(`
|
||||
// SELECT *
|
||||
// FROM sku
|
||||
// WHERE name_id = ? AND %s_sync_status <> 0
|
||||
// ORDER BY IF(spec_unit IN('kg', 'L'), 1000, 1) * spec_quality
|
||||
// `, dbField), skuName.ID); err == nil && len(skuList) > 0 {
|
||||
// for _, sku := range skuList {
|
||||
// syncStatus := refutil.GetObjFieldByName(sku, syncStatusFieldName).(int8)
|
||||
// globals.SugarLogger.Debugf("SyncSku trackInfo2:%s, skuID:%d, syncStatus:%d", ctx.GetTrackInfo(), sku.ID, syncStatus)
|
||||
// if (len(skuIDs) == 0 || skuMap[sku.ID]) && (syncStatus != 0) {
|
||||
// updateFields := []string{syncStatusFieldName}
|
||||
// if syncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
||||
// if syncStatus&model.SyncFlagNewMask == 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 {
|
||||
// refutil.SetObjFieldByName(sku, syncStatusFieldName, int8(0))
|
||||
// if _, err = dao.UpdateEntity(db, sku, updateFields...); err != nil {
|
||||
// break
|
||||
// } else {
|
||||
// resultList = append(resultList, 1)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// if err == nil {
|
||||
// refutil.SetObjFieldByName(skuName, syncStatusFieldName, int8(0))
|
||||
// _, err = dao.UpdateEntity(db, skuName, syncStatusFieldName)
|
||||
// }
|
||||
// return resultList, err
|
||||
// }, skuNameList)
|
||||
// t.AddChild(task).Run()
|
||||
// result, err2 := task.GetResult(0)
|
||||
// if err = err2; err == nil {
|
||||
// resultList = append(resultList, result...)
|
||||
// }
|
||||
// }
|
||||
// return resultList, err
|
||||
// })
|
||||
// }
|
||||
|
||||
func (v *VendorSync) SyncStoresCategory(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs []int, storeIDs []int, isForce, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||
globals.SugarLogger.Debug("SyncStoresCategory")
|
||||
|
||||
Reference in New Issue
Block a user