jdsku冲突解决
This commit is contained in:
@@ -890,16 +890,15 @@ func RefreshPageActs(ctx *jxcontext.Context, vendorIDs []int, createdFrom time.T
|
|||||||
return hint, err
|
return hint, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeleteSkusFromAct(ctx *jxcontext.Context, vendorID int, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func DeleteSkusFromAct(ctx *jxcontext.Context, vendorID int, actTypes, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
actMap := make(map[int]*model.Act)
|
actMap := make(map[int]*model.Act)
|
||||||
for _, skuID := range skuIDs {
|
for _, skuID := range skuIDs {
|
||||||
pagedInfo, err2 := dao.QueryActs(db, 0, 0, -1, -1, "", vendorID, []int{model.ActStatusCreated}, []int{model.ActSkuDirectDown, model.ActSkuSecKill}, nil, 0, skuID, 0,
|
pagedInfo, err2 := dao.QueryActs(db, 0, 0, -1, -1, "", vendorID, []int{model.ActStatusCreated}, actTypes, nil, 0, skuID, 0,
|
||||||
utils.DefaultTimeValue, utils.DefaultTimeValue, time.Now().Add(-24*30*3*time.Hour), utils.DefaultTimeValue)
|
utils.DefaultTimeValue, utils.DefaultTimeValue, time.Now().Add(-24*30*3*time.Hour), utils.DefaultTimeValue)
|
||||||
if err = err2; err != nil {
|
if err = err2; err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(pagedInfo, false))
|
|
||||||
for _, v := range pagedInfo.Data {
|
for _, v := range pagedInfo.Data {
|
||||||
actMap[v.Act.ID] = &v.Act
|
actMap[v.Act.ID] = &v.Act
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"git.rosy.net.cn/jx-callback/globals/refutil"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type LoopStoreMapInfo struct {
|
type LoopStoreMapInfo struct {
|
||||||
@@ -47,36 +46,36 @@ var (
|
|||||||
ErrEntityNotExist = errors.New("找不到相应实体")
|
ErrEntityNotExist = errors.New("找不到相应实体")
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p *MultiStoreHandlerWrapper) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
|
// func (p *MultiStoreHandlerWrapper) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
|
||||||
if jxutils.IsEmptyID(cat.JdID) {
|
// if jxutils.IsEmptyID(cat.JdID) {
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
return p.IMultipleStoresHandler.DeleteCategory(db, cat, userName)
|
// return p.IMultipleStoresHandler.DeleteCategory(db, cat, userName)
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (p *MultiStoreHandlerWrapper) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
|
// func (p *MultiStoreHandlerWrapper) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
|
||||||
if jxutils.IsEmptyID(cat.JdID) {
|
// if jxutils.IsEmptyID(cat.JdID) {
|
||||||
globals.SugarLogger.Warnf("UpdateCategory fakeid cat:%s should not get here", utils.Format4Output(cat, true))
|
// globals.SugarLogger.Warnf("UpdateCategory fakeid cat:%s should not get here", utils.Format4Output(cat, true))
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
return p.IMultipleStoresHandler.UpdateCategory(db, cat, userName)
|
// return p.IMultipleStoresHandler.UpdateCategory(db, cat, userName)
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (p *MultiStoreHandlerWrapper) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
// 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))
|
// globals.SugarLogger.Debugf("wrapper DeleteSku, sku:%s", utils.Format4Output(sku, false))
|
||||||
if jxutils.IsEmptyID(sku.JdID) {
|
// if jxutils.IsEmptyID(sku.JdID) {
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
return p.IMultipleStoresHandler.DeleteSku(db, sku, userName)
|
// return p.IMultipleStoresHandler.DeleteSku(db, sku, userName)
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (p *MultiStoreHandlerWrapper) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
// func (p *MultiStoreHandlerWrapper) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
||||||
if jxutils.IsEmptyID(sku.JdID) {
|
// if jxutils.IsEmptyID(sku.JdID) {
|
||||||
globals.SugarLogger.Warnf("UpdateSku fakeid sku:%s should not get here", utils.Format4Output(sku, true))
|
// globals.SugarLogger.Warnf("UpdateSku fakeid sku:%s should not get here", utils.Format4Output(sku, true))
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
return p.IMultipleStoresHandler.UpdateSku(db, sku, userName)
|
// return p.IMultipleStoresHandler.UpdateSku(db, sku, userName)
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (v *VendorSync) GetStoreHandler(vendorID int) partner.IPurchasePlatformHandler {
|
func (v *VendorSync) GetStoreHandler(vendorID int) partner.IPurchasePlatformHandler {
|
||||||
return partner.GetPurchasePlatformFromVendorID(vendorID)
|
return partner.GetPurchasePlatformFromVendorID(vendorID)
|
||||||
@@ -96,95 +95,95 @@ func (v *VendorSync) GetSingleStoreHandler(vendorID int) partner.ISingleStoreHan
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *VendorSync) syncCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID int, db *dao.DaoDB, cats []*model.SkuCategory, userName string) (err error) {
|
// 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)
|
// multiStoresHandler := v.GetMultiStoreHandler(vendorID)
|
||||||
syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[vendorID])
|
// syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[vendorID])
|
||||||
task := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[vendorID]), nil, ctx,
|
// task := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[vendorID]), nil, ctx,
|
||||||
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
// func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
cat := batchItemList[0].(*model.SkuCategory)
|
// cat := batchItemList[0].(*model.SkuCategory)
|
||||||
updateFields := []string{syncStatusFieldName}
|
// updateFields := []string{syncStatusFieldName}
|
||||||
syncStatus := refutil.GetObjFieldByName(cat, syncStatusFieldName).(int8)
|
// syncStatus := refutil.GetObjFieldByName(cat, syncStatusFieldName).(int8)
|
||||||
if (syncStatus & model.SyncFlagDeletedMask) != 0 { //删除
|
// if (syncStatus & model.SyncFlagDeletedMask) != 0 { //删除
|
||||||
if (syncStatus & model.SyncFlagNewMask) == 0 {
|
// if (syncStatus & model.SyncFlagNewMask) == 0 {
|
||||||
err = multiStoresHandler.DeleteCategory(db, cat, userName)
|
// err = multiStoresHandler.DeleteCategory(db, cat, userName)
|
||||||
}
|
// }
|
||||||
} else if (syncStatus & model.SyncFlagNewMask) != 0 { // 新增
|
// } else if (syncStatus & model.SyncFlagNewMask) != 0 { // 新增
|
||||||
err = multiStoresHandler.CreateCategory(db, cat, userName)
|
// err = multiStoresHandler.CreateCategory(db, cat, userName)
|
||||||
updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[multiStoresHandler.GetVendorID()]))
|
// updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[multiStoresHandler.GetVendorID()]))
|
||||||
} else if (syncStatus & model.SyncFlagModifiedMask) != 0 { // 修改
|
// } else if (syncStatus & model.SyncFlagModifiedMask) != 0 { // 修改
|
||||||
err = multiStoresHandler.UpdateCategory(db, cat, userName)
|
// err = multiStoresHandler.UpdateCategory(db, cat, userName)
|
||||||
if intErr, ok := err.(*utils.ErrorWithCode); ok && intErr.IntCode() == -3 {
|
// if intErr, ok := err.(*utils.ErrorWithCode); ok && intErr.IntCode() == -3 {
|
||||||
err = nil
|
// err = nil
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if err == nil {
|
// if err == nil {
|
||||||
refutil.SetObjFieldByName(cat, syncStatusFieldName, int8(0))
|
// refutil.SetObjFieldByName(cat, syncStatusFieldName, int8(0))
|
||||||
_, err = dao.UpdateEntity(db, cat, updateFields...)
|
// _, err = dao.UpdateEntity(db, cat, updateFields...)
|
||||||
}
|
// }
|
||||||
return nil, err
|
// return nil, err
|
||||||
}, cats)
|
// }, cats)
|
||||||
tasksch.HandleTask(task, parentTask, false).Run()
|
// tasksch.HandleTask(task, parentTask, false).Run()
|
||||||
_, err = task.GetResult(0)
|
// _, err = task.GetResult(0)
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (v *VendorSync) SyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
|
func (v *VendorSync) SyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
|
||||||
if !globals.IsUseThingMap {
|
// if !globals.IsUseThingMap {
|
||||||
return v.oldSyncCategory(ctx, db, categoryID, isAsync, userName)
|
// return v.oldSyncCategory(ctx, db, categoryID, isAsync, userName)
|
||||||
}
|
// }
|
||||||
return SyncCategories(ctx, nil, nil, nil, []int{categoryID}, isAsync)
|
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) {
|
// func (v *VendorSync) oldSyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
|
||||||
globals.SugarLogger.Debug("SyncCategory")
|
// globals.SugarLogger.Debug("SyncCategory")
|
||||||
hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步分类信息:%d", categoryID), isAsync, false,
|
// hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步分类信息:%d", categoryID), isAsync, false,
|
||||||
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
// func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
vendorInfo := batchItemList[0].(*MultiStoreVendorInfo)
|
// vendorInfo := batchItemList[0].(*MultiStoreVendorInfo)
|
||||||
var cats []*model.SkuCategory
|
// var cats []*model.SkuCategory
|
||||||
cond := make(map[string]interface{})
|
// cond := make(map[string]interface{})
|
||||||
if categoryID > 0 {
|
// if categoryID > 0 {
|
||||||
cond[model.FieldID] = categoryID
|
// cond[model.FieldID] = categoryID
|
||||||
} else {
|
// } else {
|
||||||
cond[model.FieldLevel] = 1
|
// cond[model.FieldLevel] = 1
|
||||||
}
|
// }
|
||||||
err := dao.GetEntitiesByKV(db, &cats, cond, true)
|
// err := dao.GetEntitiesByKV(db, &cats, cond, true)
|
||||||
if err == nil {
|
// if err == nil {
|
||||||
err = v.syncCategories(ctx, t, vendorInfo.VendorID, db, cats, userName)
|
// err = v.syncCategories(ctx, t, vendorInfo.VendorID, db, cats, userName)
|
||||||
}
|
// }
|
||||||
if err != nil || categoryID > 0 {
|
// if err != nil || categoryID > 0 {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
cond[model.FieldLevel] = 2
|
// cond[model.FieldLevel] = 2
|
||||||
err = dao.GetEntitiesByKV(db, &cats, cond, true)
|
// err = dao.GetEntitiesByKV(db, &cats, cond, true)
|
||||||
if err == nil {
|
// if err == nil {
|
||||||
err = v.syncCategories(ctx, t, vendorInfo.VendorID, db, cats, userName)
|
// err = v.syncCategories(ctx, t, vendorInfo.VendorID, db, cats, userName)
|
||||||
}
|
// }
|
||||||
return nil, err
|
// return nil, err
|
||||||
})
|
// })
|
||||||
return "", err
|
// return "", err
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (v *VendorSync) SyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
|
func (v *VendorSync) SyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
|
||||||
if !globals.IsUseThingMap {
|
// if !globals.IsUseThingMap {
|
||||||
return v.oldSyncReorderCategories(ctx, db, categoryID, isAsync, userName)
|
// return v.oldSyncReorderCategories(ctx, db, categoryID, isAsync, userName)
|
||||||
}
|
// }
|
||||||
return SyncReorderCategories(ctx, -1, isAsync)
|
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) {
|
// 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) {
|
// 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)
|
// vendorInfo := batchItemList[0].(*MultiStoreVendorInfo)
|
||||||
multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID)
|
// multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID)
|
||||||
err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName)
|
// err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName)
|
||||||
if err2 == nil {
|
// if err2 == nil {
|
||||||
cat := &model.SkuCategory{}
|
// cat := &model.SkuCategory{}
|
||||||
_, err2 = dao.UpdateEntityByKV(db, cat, utils.Params2Map(dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()]), 0), utils.Params2Map(model.FieldParentID, categoryID))
|
// _, 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 nil, err2
|
// return nil, err2
|
||||||
})
|
// })
|
||||||
return "", err
|
// return "", err
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (v *VendorSync) SyncStore(ctx *jxcontext.Context, db *dao.DaoDB, vendorID, storeID int, isAsync bool, userName string) (hint string, err error) {
|
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)
|
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) {
|
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 {
|
// if !globals.IsUseThingMap {
|
||||||
return v.oldSyncSkus(ctx, db, nameIDs, skuIDs, isAsync, isContinueWhenError, userName)
|
// return v.oldSyncSkus(ctx, db, nameIDs, skuIDs, isAsync, isContinueWhenError, userName)
|
||||||
}
|
// }
|
||||||
return SyncSkus(ctx, nil, nil, nil, nameIDs, skuIDs, isAsync)
|
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) {
|
// 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)
|
// 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)
|
// 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,
|
// 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) {
|
// func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
var resultList []interface{}
|
// var resultList []interface{}
|
||||||
vendorInfo := batchItemList[0].(*MultiStoreVendorInfo)
|
// vendorInfo := batchItemList[0].(*MultiStoreVendorInfo)
|
||||||
multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID)
|
// multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID)
|
||||||
syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()])
|
// syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()])
|
||||||
dbField := dao.ConvertDBFieldPrefix(model.VendorNames[multiStoresHandler.GetVendorID()])
|
// dbField := dao.ConvertDBFieldPrefix(model.VendorNames[multiStoresHandler.GetVendorID()])
|
||||||
skuMap := make(map[int]bool)
|
// skuMap := make(map[int]bool)
|
||||||
sql := fmt.Sprintf(`
|
// sql := fmt.Sprintf(`
|
||||||
SELECT DISTINCT t2.*
|
// SELECT DISTINCT t2.*
|
||||||
FROM sku t1
|
// FROM sku t1
|
||||||
JOIN sku_name t2 ON t2.id = t1.name_id
|
// JOIN sku_name t2 ON t2.id = t1.name_id
|
||||||
WHERE t1.%s_sync_status <> 0
|
// WHERE t1.%s_sync_status <> 0
|
||||||
`, dbField)
|
// `, dbField)
|
||||||
sqlParams := []interface{}{}
|
// sqlParams := []interface{}{}
|
||||||
if len(nameIDs) > 0 {
|
// if len(nameIDs) > 0 {
|
||||||
sql += " AND t1.name_id IN (" + dao.GenQuestionMarks(len(nameIDs)) + ")"
|
// sql += " AND t1.name_id IN (" + dao.GenQuestionMarks(len(nameIDs)) + ")"
|
||||||
sqlParams = append(sqlParams, nameIDs)
|
// sqlParams = append(sqlParams, nameIDs)
|
||||||
}
|
// }
|
||||||
if len(skuIDs) > 0 {
|
// if len(skuIDs) > 0 {
|
||||||
sql += " AND t1.id IN(" + dao.GenQuestionMarks(len(skuIDs)) + ")"
|
// sql += " AND t1.id IN(" + dao.GenQuestionMarks(len(skuIDs)) + ")"
|
||||||
sqlParams = append(sqlParams, skuIDs)
|
// sqlParams = append(sqlParams, skuIDs)
|
||||||
|
|
||||||
}
|
// }
|
||||||
for _, v := range skuIDs {
|
// for _, v := range skuIDs {
|
||||||
skuMap[v] = true
|
// skuMap[v] = true
|
||||||
}
|
// }
|
||||||
sql += " ORDER BY t2.id"
|
// sql += " ORDER BY t2.id"
|
||||||
|
|
||||||
var skuNameList []*model.SkuName
|
// var skuNameList []*model.SkuName
|
||||||
err := dao.GetRows(db, &skuNameList, sql, sqlParams...)
|
// err := dao.GetRows(db, &skuNameList, sql, sqlParams...)
|
||||||
if err == nil && len(skuNameList) > 0 {
|
// if err == nil && len(skuNameList) > 0 {
|
||||||
// todo 同一skuName下的sku顺序处理的原因是京东SPU特殊类型必须要序列化同步才能正常处理, db可能会有多线程问题
|
// // todo 同一skuName下的sku顺序处理的原因是京东SPU特殊类型必须要序列化同步才能正常处理, db可能会有多线程问题
|
||||||
task := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[vendorInfo.VendorID]), tasksch.NewParallelConfig().SetParallelCount(10).SetIsContinueWhenError(isContinueWhenError), ctx,
|
// 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) {
|
// func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
var resultList []interface{}
|
// var resultList []interface{}
|
||||||
skuName := batchItemList[0].(*model.SkuName)
|
// skuName := batchItemList[0].(*model.SkuName)
|
||||||
var skuList []*model.Sku
|
// var skuList []*model.Sku
|
||||||
if err = dao.GetRows(db, &skuList, fmt.Sprintf(`
|
// if err = dao.GetRows(db, &skuList, fmt.Sprintf(`
|
||||||
SELECT *
|
// SELECT *
|
||||||
FROM sku
|
// FROM sku
|
||||||
WHERE name_id = ? AND %s_sync_status <> 0
|
// WHERE name_id = ? AND %s_sync_status <> 0
|
||||||
ORDER BY IF(spec_unit IN('kg', 'L'), 1000, 1) * spec_quality
|
// ORDER BY IF(spec_unit IN('kg', 'L'), 1000, 1) * spec_quality
|
||||||
`, dbField), skuName.ID); err == nil && len(skuList) > 0 {
|
// `, dbField), skuName.ID); err == nil && len(skuList) > 0 {
|
||||||
for _, sku := range skuList {
|
// for _, sku := range skuList {
|
||||||
syncStatus := refutil.GetObjFieldByName(sku, syncStatusFieldName).(int8)
|
// syncStatus := refutil.GetObjFieldByName(sku, syncStatusFieldName).(int8)
|
||||||
globals.SugarLogger.Debugf("SyncSku trackInfo2:%s, skuID:%d, syncStatus:%d", ctx.GetTrackInfo(), sku.ID, syncStatus)
|
// globals.SugarLogger.Debugf("SyncSku trackInfo2:%s, skuID:%d, syncStatus:%d", ctx.GetTrackInfo(), sku.ID, syncStatus)
|
||||||
if (len(skuIDs) == 0 || skuMap[sku.ID]) && (syncStatus != 0) {
|
// if (len(skuIDs) == 0 || skuMap[sku.ID]) && (syncStatus != 0) {
|
||||||
updateFields := []string{syncStatusFieldName}
|
// updateFields := []string{syncStatusFieldName}
|
||||||
if syncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
// if syncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
||||||
if syncStatus&model.SyncFlagNewMask == 0 {
|
// if syncStatus&model.SyncFlagNewMask == 0 {
|
||||||
err = multiStoresHandler.DeleteSku(db, sku, userName)
|
// err = multiStoresHandler.DeleteSku(db, sku, userName)
|
||||||
}
|
// }
|
||||||
} else if syncStatus&model.SyncFlagNewMask != 0 { // 新增
|
// } else if syncStatus&model.SyncFlagNewMask != 0 { // 新增
|
||||||
if err = multiStoresHandler.CreateSku(db, sku, userName); err == nil {
|
// if err = multiStoresHandler.CreateSku(db, sku, userName); err == nil {
|
||||||
var tmpStruct struct {
|
// var tmpStruct struct {
|
||||||
MaxIndex int
|
// MaxIndex int
|
||||||
}
|
// }
|
||||||
// todo hard code 得到京东spu中sku的顺序(以方便以后修改销售属性),这个必须要每次重新从数据库取
|
// // 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 {
|
// 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
|
// sku.SkuIndex = tmpStruct.MaxIndex + 1
|
||||||
updateFields = append(updateFields, "SkuIndex")
|
// updateFields = append(updateFields, "SkuIndex")
|
||||||
}
|
// }
|
||||||
updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[multiStoresHandler.GetVendorID()]))
|
// updateFields = append(updateFields, dao.GetVendorThingIDStructField(model.VendorNames[multiStoresHandler.GetVendorID()]))
|
||||||
}
|
// }
|
||||||
} else if syncStatus&model.SyncFlagModifiedMask != 0 { // 修改
|
// } else if syncStatus&model.SyncFlagModifiedMask != 0 { // 修改
|
||||||
err = multiStoresHandler.UpdateSku(db, sku, userName)
|
// err = multiStoresHandler.UpdateSku(db, sku, userName)
|
||||||
}
|
// }
|
||||||
if err == nil {
|
// if err == nil {
|
||||||
refutil.SetObjFieldByName(sku, syncStatusFieldName, int8(0))
|
// refutil.SetObjFieldByName(sku, syncStatusFieldName, int8(0))
|
||||||
if _, err = dao.UpdateEntity(db, sku, updateFields...); err != nil {
|
// if _, err = dao.UpdateEntity(db, sku, updateFields...); err != nil {
|
||||||
break
|
// break
|
||||||
} else {
|
// } else {
|
||||||
resultList = append(resultList, 1)
|
// resultList = append(resultList, 1)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if err == nil {
|
// if err == nil {
|
||||||
refutil.SetObjFieldByName(skuName, syncStatusFieldName, int8(0))
|
// refutil.SetObjFieldByName(skuName, syncStatusFieldName, int8(0))
|
||||||
_, err = dao.UpdateEntity(db, skuName, syncStatusFieldName)
|
// _, err = dao.UpdateEntity(db, skuName, syncStatusFieldName)
|
||||||
}
|
// }
|
||||||
return resultList, err
|
// return resultList, err
|
||||||
}, skuNameList)
|
// }, skuNameList)
|
||||||
t.AddChild(task).Run()
|
// t.AddChild(task).Run()
|
||||||
result, err2 := task.GetResult(0)
|
// result, err2 := task.GetResult(0)
|
||||||
if err = err2; err == nil {
|
// if err = err2; err == nil {
|
||||||
resultList = append(resultList, result...)
|
// resultList = append(resultList, result...)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return resultList, err
|
// 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) {
|
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")
|
globals.SugarLogger.Debug("SyncStoresCategory")
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ func Init() {
|
|||||||
act.RefreshPageActs(jxcontext.AdminCtx, []int{model.VendorIDEBAI}, time.Now().Add(-30*24*time.Hour), false)
|
act.RefreshPageActs(jxcontext.AdminCtx, []int{model.VendorIDEBAI}, time.Now().Add(-30*24*time.Hour), false)
|
||||||
}, refreshPageActTimeList)
|
}, refreshPageActTimeList)
|
||||||
ScheduleTimerFunc("UpdateActStatusByTime", func() {
|
ScheduleTimerFunc("UpdateActStatusByTime", func() {
|
||||||
dao.UpdateActStatusByTime(dao.GetDB(), time.Now().Add(-48*time.Hour))
|
dao.UpdateActStatusByTime(dao.GetDB(), time.Now())
|
||||||
}, updateActStatusTimeList)
|
}, updateActStatusTimeList)
|
||||||
ScheduleScoreStore()
|
ScheduleScoreStore()
|
||||||
ScheduleCheckStoreAlert()
|
ScheduleCheckStoreAlert()
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ var (
|
|||||||
OrderStatusMsg: "通知消息",
|
OrderStatusMsg: "通知消息",
|
||||||
OrderStatusRefuseFailedGetGoods: "取货失败审核驳回",
|
OrderStatusRefuseFailedGetGoods: "取货失败审核驳回",
|
||||||
OrderStatusAdjust: "订单调整完成",
|
OrderStatusAdjust: "订单调整完成",
|
||||||
OrderStatusWait4Pay: "待付款",
|
|
||||||
OrderStatusApplyUrgeOrder: "催单",
|
OrderStatusApplyUrgeOrder: "催单",
|
||||||
|
|
||||||
OrderStatusUnlocked: "解锁",
|
OrderStatusUnlocked: "解锁",
|
||||||
@@ -46,7 +45,7 @@ var (
|
|||||||
|
|
||||||
OrderStatusUnknown: "一般事件",
|
OrderStatusUnknown: "一般事件",
|
||||||
|
|
||||||
OrderStatusCreated: "待支付",
|
OrderStatusWait4Pay: "待付款",
|
||||||
OrderStatusNew: "新订单",
|
OrderStatusNew: "新订单",
|
||||||
OrderStatusAccepted: "待拣货",
|
OrderStatusAccepted: "待拣货",
|
||||||
OrderStatusFinishedPickup: "待配送",
|
OrderStatusFinishedPickup: "待配送",
|
||||||
@@ -163,17 +162,17 @@ const (
|
|||||||
|
|
||||||
OrderStatusRefuseFailedGetGoods = -70 // 取货失败审核驳回
|
OrderStatusRefuseFailedGetGoods = -70 // 取货失败审核驳回
|
||||||
OrderStatusAdjust = -65 // 原值-35 订单调整完成
|
OrderStatusAdjust = -65 // 原值-35 订单调整完成
|
||||||
OrderStatusWait4Pay = -60 // 原值-30 下单待支付,微盟在这个时间发新订单事件
|
|
||||||
OrderStatusApplyUrgeOrder = -55 // 原值-15
|
OrderStatusApplyUrgeOrder = -55 // 原值-15
|
||||||
|
|
||||||
OrderStatusUnlocked = -25
|
OrderStatusUnlocked = -25
|
||||||
OrderStatusLocked = -20
|
OrderStatusLocked = -20
|
||||||
// OrderStatusApplyRefund = -10
|
OrderStatusUndoApplyCancel = -10
|
||||||
OrderStatusUndoApplyCancel = -10
|
OrderStatusVendorRejectCancel = -7
|
||||||
OrderStatusApplyCancel = -5
|
OrderStatusVendorAgreeCancel = -6
|
||||||
|
OrderStatusApplyCancel = -5
|
||||||
|
|
||||||
OrderStatusUnknown = 0
|
OrderStatusUnknown = 0
|
||||||
OrderStatusCreated = 2 // 已支付
|
OrderStatusWait4Pay = 2 // 原值-60 下单待支付
|
||||||
OrderStatusNew = 5 // 新订单,实际是已经支付
|
OrderStatusNew = 5 // 新订单,实际是已经支付
|
||||||
OrderStatusAccepted = 10 // 已经接单,也即待出库,待拣货
|
OrderStatusAccepted = 10 // 已经接单,也即待出库,待拣货
|
||||||
OrderStatusFinishedPickup = 15 // 拣货完成
|
OrderStatusFinishedPickup = 15 // 拣货完成
|
||||||
@@ -336,7 +335,7 @@ func IsOrderLockStatus(status int) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func IsOrderUnlockStatus(status int) bool {
|
func IsOrderUnlockStatus(status int) bool {
|
||||||
return status == OrderStatusUnlocked || status == OrderStatusUndoApplyCancel
|
return status == OrderStatusUnlocked || status == OrderStatusUndoApplyCancel || status == OrderStatusVendorAgreeCancel || status == OrderStatusVendorRejectCancel
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsOrderMainStatus(status int) bool {
|
func IsOrderMainStatus(status int) bool {
|
||||||
|
|||||||
@@ -436,7 +436,7 @@ func UpdateActStatusByTime(db *DaoDB, refTime time.Time) (num int64, err error)
|
|||||||
model.ActStatusEnded,
|
model.ActStatusEnded,
|
||||||
utils.DefaultTimeValue,
|
utils.DefaultTimeValue,
|
||||||
model.ActStatusCanceled,
|
model.ActStatusCanceled,
|
||||||
refTime,
|
utils.Time2Date(refTime),
|
||||||
}
|
}
|
||||||
num, err = ExecuteSQL(db, sql, sqlParams...)
|
num, err = ExecuteSQL(db, sql, sqlParams...)
|
||||||
return num, err
|
return num, err
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ type GoodsOrder struct {
|
|||||||
GoodsCount int `json:"goodsCount"` // 商品个数
|
GoodsCount int `json:"goodsCount"` // 商品个数
|
||||||
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
|
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
|
||||||
VendorStatus string `orm:"size(255)" json:"vendorStatus"`
|
VendorStatus string `orm:"size(255)" json:"vendorStatus"`
|
||||||
LockStatus int `json:"lockStatus"`
|
LockStatus int `json:"lockStatus"` // 当前只支持单一锁定
|
||||||
LockStatusTime time.Time `orm:"type(datetime);null" json:"lockStatusTime"` // last lock status time
|
LockStatusTime time.Time `orm:"type(datetime);null" json:"lockStatusTime"` // last lock status time
|
||||||
OrderSeq int `json:"orderSeq"` // 门店订单序号
|
OrderSeq int `json:"orderSeq"` // 门店订单序号
|
||||||
BuyerComment string `orm:"size(255)" json:"buyerComment"`
|
BuyerComment string `orm:"size(255)" json:"buyerComment"`
|
||||||
|
|||||||
@@ -156,10 +156,10 @@ type IMultipleStoresHandler interface {
|
|||||||
IPurchasePlatformHandler
|
IPurchasePlatformHandler
|
||||||
GetAllCategories(ctx *jxcontext.Context, vendorOrgCode string) (cats []*BareCategoryInfo, err error)
|
GetAllCategories(ctx *jxcontext.Context, vendorOrgCode string) (cats []*BareCategoryInfo, err error)
|
||||||
|
|
||||||
CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error)
|
// CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error)
|
||||||
UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error
|
// UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error
|
||||||
DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error
|
// DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error
|
||||||
ReorderCategories(db *dao.DaoDB, parentCatID int, userName string) (err error)
|
// ReorderCategories(db *dao.DaoDB, parentCatID int, userName string) (err error)
|
||||||
|
|
||||||
CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error)
|
CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error)
|
||||||
UpdateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error)
|
UpdateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error)
|
||||||
@@ -167,9 +167,9 @@ type IMultipleStoresHandler interface {
|
|||||||
ReorderCategories2(ctx *jxcontext.Context, vendorOrgCode, vendorParentCatID string, vendorCatIDList []string) (err error)
|
ReorderCategories2(ctx *jxcontext.Context, vendorOrgCode, vendorParentCatID string, vendorCatIDList []string) (err error)
|
||||||
|
|
||||||
// sku
|
// sku
|
||||||
CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error)
|
// CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error)
|
||||||
UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error)
|
// UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error)
|
||||||
DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error)
|
// DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error)
|
||||||
|
|
||||||
// ReadSku(ctx *jxcontext.Context, vendorOrgCode, vendorSkuID string) (skuNameExt *model.SkuNameExt, err error)
|
// ReadSku(ctx *jxcontext.Context, vendorOrgCode, vendorSkuID string) (skuNameExt *model.SkuNameExt, err error)
|
||||||
CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error)
|
CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error)
|
||||||
|
|||||||
@@ -28,8 +28,6 @@ const (
|
|||||||
callDeliveryDelay = 10 * time.Minute
|
callDeliveryDelay = 10 * time.Minute
|
||||||
callDeliveryDelayGap = 30
|
callDeliveryDelayGap = 30
|
||||||
|
|
||||||
fakeUserApplyCancel = "fake_user_apply_cancel"
|
|
||||||
fakeUserUndoApplyCancel = "fake_user_undo_apply_cancel"
|
|
||||||
fakeAcceptOrder = "fake_accept_order"
|
fakeAcceptOrder = "fake_accept_order"
|
||||||
fakeOrderAdjustFinished = "fake_order_adjust_finished"
|
fakeOrderAdjustFinished = "fake_order_adjust_finished"
|
||||||
fakeOrderCanceled = "fake_order_canceled"
|
fakeOrderCanceled = "fake_order_canceled"
|
||||||
@@ -49,8 +47,6 @@ var (
|
|||||||
ebaiapi.OrderStatusCanceled: model.OrderStatusCanceled,
|
ebaiapi.OrderStatusCanceled: model.OrderStatusCanceled,
|
||||||
|
|
||||||
fakeOrderAdjustFinished: model.OrderStatusAdjust,
|
fakeOrderAdjustFinished: model.OrderStatusAdjust,
|
||||||
fakeUserApplyCancel: model.OrderStatusApplyCancel,
|
|
||||||
fakeUserUndoApplyCancel: model.OrderStatusUndoApplyCancel,
|
|
||||||
fakeOrderCanceled: model.OrderStatusCanceled,
|
fakeOrderCanceled: model.OrderStatusCanceled,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -478,11 +474,15 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *ebaiapi.CallbackMsg) (orderSta
|
|||||||
if cancelType == ebaiapi.OrderUserCancelTypeBeforeSale {
|
if cancelType == ebaiapi.OrderUserCancelTypeBeforeSale {
|
||||||
if msgType == ebaiapi.OrderUserCancelApply ||
|
if msgType == ebaiapi.OrderUserCancelApply ||
|
||||||
msgType == ebaiapi.OrderUserCancelCSIntervene {
|
msgType == ebaiapi.OrderUserCancelCSIntervene {
|
||||||
orderStatus.VendorStatus = fakeUserApplyCancel
|
orderStatus.Status = model.OrderStatusApplyCancel
|
||||||
} else if msgType == ebaiapi.OrderUserCancelInvalid ||
|
} else if msgType == ebaiapi.OrderUserCancelCSRefused ||
|
||||||
msgType == ebaiapi.OrderUserCancelMerchantRefused ||
|
msgType == ebaiapi.OrderUserCancelMerchantRefused {
|
||||||
msgType == ebaiapi.OrderUserCancelCSRefused {
|
orderStatus.Status = model.OrderStatusVendorRejectCancel
|
||||||
orderStatus.VendorStatus = fakeUserUndoApplyCancel
|
} else if msgType == ebaiapi.OrderUserCancelInvalid {
|
||||||
|
orderStatus.Status = model.OrderStatusUndoApplyCancel
|
||||||
|
} else if msgType == ebaiapi.OrderUserCancelCSAgreed ||
|
||||||
|
msgType == ebaiapi.OrderUserCancelMerchantAgreed {
|
||||||
|
orderStatus.Status = model.OrderStatusVendorAgreeCancel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if msg.Cmd == ebaiapi.CmdOrderPartRefund {
|
} else if msg.Cmd == ebaiapi.CmdOrderPartRefund {
|
||||||
@@ -500,7 +500,9 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *ebaiapi.CallbackMsg) (orderSta
|
|||||||
}
|
}
|
||||||
orderStatus.Remark = utils.Interface2String(msg.Body["reason"])
|
orderStatus.Remark = utils.Interface2String(msg.Body["reason"])
|
||||||
}
|
}
|
||||||
orderStatus.Status = c.getStatusFromVendorStatus(orderStatus.VendorStatus)
|
if orderStatus.Status == 0 {
|
||||||
|
orderStatus.Status = c.getStatusFromVendorStatus(orderStatus.VendorStatus)
|
||||||
|
}
|
||||||
return orderStatus
|
return orderStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -315,7 +315,7 @@ func jxCatSeq2Ebai(seq int) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func formatCatName(name string) string {
|
func formatCatName(name string) string {
|
||||||
return name
|
return utils.LimitUTF8StringLen(name, ebaiapi.MaxCategoryNameLen)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (skuNameList []*partner.SkuNameInfo, err error) {
|
func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (skuNameList []*partner.SkuNameInfo, err error) {
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ var (
|
|||||||
jdapi.OrderStatusUserApplyCancel: model.OrderStatusApplyCancel,
|
jdapi.OrderStatusUserApplyCancel: model.OrderStatusApplyCancel,
|
||||||
jdapi.OrderStatusLocked: model.OrderStatusLocked,
|
jdapi.OrderStatusLocked: model.OrderStatusLocked,
|
||||||
jdapi.OrderStatusUnlocked: model.OrderStatusUnlocked,
|
jdapi.OrderStatusUnlocked: model.OrderStatusUnlocked,
|
||||||
|
|
||||||
|
jdapi.OrderStatusVenderAgreeCancel: model.OrderStatusVendorAgreeCancel,
|
||||||
|
jdapi.OrderStatusVenderRejectCancel: model.OrderStatusVendorRejectCancel,
|
||||||
}
|
}
|
||||||
deliveryTypeMap = map[int]string{
|
deliveryTypeMap = map[int]string{
|
||||||
jdapi.CarrierNoCrowdSourcing: model.OrderDeliveryTypePlatform,
|
jdapi.CarrierNoCrowdSourcing: model.OrderDeliveryTypePlatform,
|
||||||
|
|||||||
@@ -2,501 +2,479 @@ package jd
|
|||||||
|
|
||||||
// 这里函数取得的信息,除了与自身实体相关的ID(比如PARENT ID),都已经转换成了本地ID了
|
// 这里函数取得的信息,除了与自身实体相关的ID(比如PARENT ID),都已经转换成了本地ID了
|
||||||
|
|
||||||
import (
|
// type tSkuInfoExt struct {
|
||||||
"fmt"
|
// model.SkuName
|
||||||
"time"
|
// JdCatID int64 `orm:"column(jd_cat_id)"` // 商家类别
|
||||||
"unicode/utf8"
|
// JdCategoryID int `orm:"column(jd_category_id)"` // 到家类别
|
||||||
|
// SkuCatID int64 `orm:"column(sku_cat_id)"` // 商家特殊类别
|
||||||
|
// Comment string `orm:"size(255)" json:"comment"`
|
||||||
|
// }
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
// var (
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
// skuAddParamsKeyMap = map[string]int{
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
// jdapi.KeyUpcCode: 1,
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
// }
|
||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
// )
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
|
||||||
)
|
|
||||||
|
|
||||||
type tSkuInfoExt struct {
|
// func (p *PurchaseHandler) CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
|
||||||
model.SkuName
|
// var jdPid int64
|
||||||
JdCatID int64 `orm:"column(jd_cat_id)"` // 商家类别
|
// if cat.ParentID != 0 {
|
||||||
JdCategoryID int `orm:"column(jd_category_id)"` // 到家类别
|
// pCat := &model.SkuCategory{}
|
||||||
SkuCatID int64 `orm:"column(sku_cat_id)"` // 商家特殊类别
|
// pCat.ID = cat.ParentID
|
||||||
Comment string `orm:"size(255)" json:"comment"`
|
// if err = dao.GetEntity(db, pCat); err == nil {
|
||||||
}
|
// jdPid = pCat.JdID
|
||||||
|
// } else {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if globals.EnableJdStoreWrite {
|
||||||
|
// result, err2 := getAPI("").AddShopCategory(jdPid, cat.Name, int(cat.Level), cat.Seq, userName)
|
||||||
|
// if err = err2; err == nil {
|
||||||
|
// if jdID := utils.Str2Int64WithDefault(result, 0); jdID != 0 {
|
||||||
|
// cat.JdID = jdID
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// cat.JdID = jxutils.GenFakeID()
|
||||||
|
// }
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
|
||||||
var (
|
// func (p *PurchaseHandler) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error {
|
||||||
skuAddParamsKeyMap = map[string]int{
|
// if globals.EnableJdStoreWrite {
|
||||||
jdapi.KeyUpcCode: 1,
|
// return getAPI("").UpdateShopCategory(cat.JdID, cat.Name)
|
||||||
}
|
// }
|
||||||
)
|
// return nil
|
||||||
|
// }
|
||||||
|
|
||||||
func (p *PurchaseHandler) CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
|
// func (p *PurchaseHandler) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error {
|
||||||
var jdPid int64
|
// if globals.EnableJdStoreWrite {
|
||||||
if cat.ParentID != 0 {
|
// return getAPI("").DelShopCategory(cat.JdID)
|
||||||
pCat := &model.SkuCategory{}
|
// }
|
||||||
pCat.ID = cat.ParentID
|
// return nil
|
||||||
if err = dao.GetEntity(db, pCat); err == nil {
|
// }
|
||||||
jdPid = pCat.JdID
|
|
||||||
} else {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if globals.EnableJdStoreWrite {
|
|
||||||
result, err2 := getAPI("").AddShopCategory(jdPid, cat.Name, int(cat.Level), cat.Seq, userName)
|
|
||||||
if err = err2; err == nil {
|
|
||||||
if jdID := utils.Str2Int64WithDefault(result, 0); jdID != 0 {
|
|
||||||
cat.JdID = jdID
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
cat.JdID = jxutils.GenFakeID()
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PurchaseHandler) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error {
|
// func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, userName string) (err error) {
|
||||||
if globals.EnableJdStoreWrite {
|
// var parentJDID int64
|
||||||
return getAPI("").UpdateShopCategory(cat.JdID, cat.Name)
|
// if parentCatID != 0 {
|
||||||
}
|
// cat := &model.SkuCategory{}
|
||||||
return nil
|
// cat.ID = parentCatID
|
||||||
}
|
// if err = dao.GetEntity(db, cat); err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// parentJDID = cat.JdID
|
||||||
|
// }
|
||||||
|
// var cats []*model.SkuCategory
|
||||||
|
// if err = dao.GetRows(db, &cats, `
|
||||||
|
// SELECT *
|
||||||
|
// FROM sku_category
|
||||||
|
// WHERE parent_id = ? AND deleted_at = ?
|
||||||
|
// ORDER BY seq`, parentCatID, utils.DefaultTimeValue); err == nil {
|
||||||
|
// jdCatIDs := make([]int64, len(cats))
|
||||||
|
// for k, v := range cats {
|
||||||
|
// jdCatIDs[k] = v.JdID
|
||||||
|
// }
|
||||||
|
// if globals.EnableJdStoreWrite {
|
||||||
|
// err = getAPI("").ChangeShopCategoryOrder(parentJDID, jdCatIDs)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
|
||||||
func (p *PurchaseHandler) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error {
|
// func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error)) (err error) {
|
||||||
if globals.EnableJdStoreWrite {
|
// var skuInfoExt tSkuInfoExt
|
||||||
return getAPI("").DelShopCategory(cat.JdID)
|
// err = dao.GetRow(nil, &skuInfoExt, `
|
||||||
}
|
// SELECT
|
||||||
return nil
|
// t2.*, IF(t2.jd_category_id > 0, t2.jd_category_id, t3.jd_category_id) jd_category_id,
|
||||||
}
|
// t3.jd_id jd_cat_id,
|
||||||
|
// t4.jd_id sku_cat_id
|
||||||
func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, userName string) (err error) {
|
// FROM sku t1
|
||||||
var parentJDID int64
|
// JOIN sku_name t2 ON t1.name_id = t2.id
|
||||||
if parentCatID != 0 {
|
// JOIN sku_category t3 ON t2.category_id = t3.id
|
||||||
cat := &model.SkuCategory{}
|
// LEFT JOIN sku_category t4 ON t1.category_id = t4.id
|
||||||
cat.ID = parentCatID
|
// WHERE t1.id = ?
|
||||||
if err = dao.GetEntity(db, cat); err != nil {
|
// `, sku.ID)
|
||||||
return err
|
|
||||||
}
|
|
||||||
parentJDID = cat.JdID
|
|
||||||
}
|
|
||||||
var cats []*model.SkuCategory
|
|
||||||
if err = dao.GetRows(db, &cats, `
|
|
||||||
SELECT *
|
|
||||||
FROM sku_category
|
|
||||||
WHERE parent_id = ? AND deleted_at = ?
|
|
||||||
ORDER BY seq`, parentCatID, utils.DefaultTimeValue); err == nil {
|
|
||||||
jdCatIDs := make([]int64, len(cats))
|
|
||||||
for k, v := range cats {
|
|
||||||
jdCatIDs[k] = v.JdID
|
|
||||||
}
|
|
||||||
if globals.EnableJdStoreWrite {
|
|
||||||
err = getAPI("").ChangeShopCategoryOrder(parentJDID, jdCatIDs)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error)) (err error) {
|
|
||||||
var skuInfoExt tSkuInfoExt
|
|
||||||
err = dao.GetRow(nil, &skuInfoExt, `
|
|
||||||
SELECT
|
|
||||||
t2.*, IF(t2.jd_category_id > 0, t2.jd_category_id, t3.jd_category_id) jd_category_id,
|
|
||||||
t3.jd_id jd_cat_id,
|
|
||||||
t4.jd_id sku_cat_id
|
|
||||||
FROM sku t1
|
|
||||||
JOIN sku_name t2 ON t1.name_id = t2.id
|
|
||||||
JOIN sku_category t3 ON t2.category_id = t3.id
|
|
||||||
LEFT JOIN sku_category t4 ON t1.category_id = t4.id
|
|
||||||
WHERE t1.id = ?
|
|
||||||
`, sku.ID)
|
|
||||||
if err == nil {
|
|
||||||
shopCategories := []int64{skuInfoExt.JdCatID}
|
|
||||||
// SPU只支持SPU的商家分类,不支持单独SKU的,去除SKU的分类
|
|
||||||
// if skuInfoExt.SkuCatID != 0 {
|
|
||||||
// shopCategories = append(shopCategories, skuInfoExt.SkuCatID)
|
|
||||||
// }
|
|
||||||
if skuInfoExt.JdCategoryID == 0 {
|
|
||||||
skuInfoExt.JdCategoryID = getDefJdCategoryID()
|
|
||||||
}
|
|
||||||
if skuInfoExt.BrandID == 0 {
|
|
||||||
skuInfoExt.BrandID = DefBrandID
|
|
||||||
}
|
|
||||||
addParams := map[string]interface{}{}
|
|
||||||
|
|
||||||
if skuInfoExt.IsGlobal == 0 { //如果不是全国可售,要查可售区域
|
|
||||||
sellPlaces, err2 := dao.GetSellCities(db, skuInfoExt.ID, model.VendorIDJD)
|
|
||||||
if err = err2; err == nil && len(sellPlaces) > 0 {
|
|
||||||
sellCites := make([]int, len(sellPlaces))
|
|
||||||
for k, v := range sellPlaces {
|
|
||||||
sellCites[k] = v.JdCode
|
|
||||||
}
|
|
||||||
addParams["sellCities"] = sellCites
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if addParams["sellCities"] == nil {
|
|
||||||
addParams["sellCities"] = []int{0}
|
|
||||||
}
|
|
||||||
if skuInfoExt.DescImg != "" {
|
|
||||||
addParams[jdapi.KeyProductDesc] = fmt.Sprintf(`<img src="%s" alt="一张图片" />`, skuInfoExt.DescImg)
|
|
||||||
addParams[jdapi.KeyIfViewDesc] = 0
|
|
||||||
} else {
|
|
||||||
addParams[jdapi.KeyIfViewDesc] = 1
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
skuName := ""
|
|
||||||
if skuInfoExt.ExPrefixEnd != utils.ZeroTimeValue && skuInfoExt.ExPrefixBegin != utils.ZeroTimeValue {
|
|
||||||
if time.Now().Before(skuInfoExt.ExPrefixEnd) && time.Now().After(skuInfoExt.ExPrefixBegin) {
|
|
||||||
skuName = skuInfoExt.ExPrefix + jxutils.ComposeSkuName(skuInfoExt.Prefix, skuInfoExt.Name, sku.Comment, skuInfoExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount)
|
|
||||||
} else {
|
|
||||||
skuName = jxutils.ComposeSkuName(skuInfoExt.Prefix, skuInfoExt.Name, sku.Comment, skuInfoExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
skuName = jxutils.ComposeSkuName(skuInfoExt.Prefix, skuInfoExt.Name, sku.Comment, skuInfoExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount)
|
|
||||||
}
|
|
||||||
skuPrice := jxutils.CaculateSkuPrice(skuInfoExt.Price, sku.SpecQuality, sku.SpecUnit, skuInfoExt.Unit)
|
|
||||||
if skuInfoExt.Upc != "" {
|
|
||||||
addParams[jdapi.KeyUpcCode] = skuInfoExt.Upc
|
|
||||||
}
|
|
||||||
result, err2 := handler(&skuInfoExt, skuPrice, skuName, shopCategories, addParams)
|
|
||||||
if err = err2; err == nil {
|
|
||||||
if jdID := utils.Str2Int64WithDefault(result, 0); jdID != 0 {
|
|
||||||
sku.JdID = jdID
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PurchaseHandler) CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
|
||||||
return p.cuSku(db, sku, func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) {
|
|
||||||
if skuExt.IsSpu == 0 {
|
|
||||||
if globals.EnableJdStoreWrite {
|
|
||||||
vendorSkuID, err = getAPI("").AddSku(utils.Int2Str(sku.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, skuName, price, jxutils.IntWeight2Float(sku.Weight), jxutils.BatchString2Slice(skuExt.Img, skuExt.Img2), jxStatus2jdStatus(sku.Status), true, addParams)
|
|
||||||
if err != nil {
|
|
||||||
if jdSkuID := jdapi.GetJdSkuIDFromError(err); jdSkuID > 0 {
|
|
||||||
vendorSkuID = utils.Int64ToStr(jdSkuID)
|
|
||||||
err = nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
vendorSkuID = utils.Int64ToStr(jxutils.GenFakeID())
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
vendorSkuID, err = p.syncSkuNameAsSpu(db, sku, skuExt, price, skuName, shopCategories, addParams)
|
|
||||||
}
|
|
||||||
return vendorSkuID, err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// func (p *PurchaseHandler) ReadSku(ctx *jxcontext.Context, vendorOrgCode, vendorSkuID string) (skuNameExt *model.SkuNameExt, err error) {
|
|
||||||
// jdSkuID := utils.Str2Int64(vendorSkuID)
|
|
||||||
// a := getAPI(vendorOrgCode)
|
|
||||||
// skuList, _, err := a.QuerySkuInfos(&jdapi.QuerySkuParam{
|
|
||||||
// SkuID: jdSkuID,
|
|
||||||
// })
|
|
||||||
// if err == nil {
|
// if err == nil {
|
||||||
// if len(skuList) >= 1 {
|
// shopCategories := []int64{skuInfoExt.JdCatID}
|
||||||
// skuNameExt = &model.SkuNameExt{}
|
// // SPU只支持SPU的商家分类,不支持单独SKU的,去除SKU的分类
|
||||||
// if imgList, err2 := a.QueryListBySkuIds(&jdapi.QueryListBySkuIdsParam{
|
// // if skuInfoExt.SkuCatID != 0 {
|
||||||
// SkuIDs: []int64{jdSkuID},
|
// // shopCategories = append(shopCategories, skuInfoExt.SkuCatID)
|
||||||
// }); err2 == nil && len(imgList) > 0 {
|
// // }
|
||||||
// skuNameExt.Img = imgList[0].SourceImgURL
|
// if skuInfoExt.JdCategoryID == 0 {
|
||||||
// }
|
// skuInfoExt.JdCategoryID = getDefJdCategoryID()
|
||||||
// sku := skuList[0]
|
// }
|
||||||
// prefix, name, comment, specUnit, unit, specQuality := jxutils.SplitSkuName(sku.SkuName)
|
// if skuInfoExt.BrandID == 0 {
|
||||||
// if name == "" {
|
// skuInfoExt.BrandID = DefBrandID
|
||||||
// name = sku.SkuName
|
// }
|
||||||
// unit = "份"
|
// addParams := map[string]interface{}{}
|
||||||
// specUnit = "g"
|
|
||||||
// }
|
|
||||||
// skuNameExt.Prefix = prefix
|
|
||||||
// skuNameExt.Name = name
|
|
||||||
// skuNameExt.Unit = unit
|
|
||||||
// skuNameExt.Price = sku.SkuPrice
|
|
||||||
// skuNameExt.Skus = []*model.SkuWithVendor{
|
|
||||||
// &model.SkuWithVendor{
|
|
||||||
// Sku: &model.Sku{
|
|
||||||
// SpecQuality: specQuality,
|
|
||||||
// SpecUnit: specUnit,
|
|
||||||
// Weight: jxutils.FloatWeight2Int(float32(sku.Weight)),
|
|
||||||
// JdID: sku.SkuID,
|
|
||||||
// Status: jdStatus2jxStatus(sku.FixedStatus),
|
|
||||||
// Comment: comment,
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
// }
|
|
||||||
// skuNameExt.Skus[0].ID = int(utils.Str2Int64(sku.OutSkuID))
|
|
||||||
|
|
||||||
// db := dao.GetDB()
|
// if skuInfoExt.IsGlobal == 0 { //如果不是全国可售,要查可售区域
|
||||||
// shopCategories := sku.ShopCategories
|
// sellPlaces, err2 := dao.GetSellCities(db, skuInfoExt.ID, model.VendorIDJD)
|
||||||
// if len(shopCategories) > 0 {
|
// if err = err2; err == nil && len(sellPlaces) > 0 {
|
||||||
// skuCat := &model.SkuCategory{}
|
// sellCites := make([]int, len(sellPlaces))
|
||||||
// skuCat.JdID = shopCategories[0]
|
// for k, v := range sellPlaces {
|
||||||
// if dao.GetEntity(db, skuCat, "JdID") == nil {
|
// sellCites[k] = v.JdCode
|
||||||
// skuNameExt.CategoryID = skuCat.ID
|
// }
|
||||||
|
// addParams["sellCities"] = sellCites
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if addParams["sellCities"] == nil {
|
||||||
|
// addParams["sellCities"] = []int{0}
|
||||||
|
// }
|
||||||
|
// if skuInfoExt.DescImg != "" {
|
||||||
|
// addParams[jdapi.KeyProductDesc] = fmt.Sprintf(`<img src="%s" alt="一张图片" />`, skuInfoExt.DescImg)
|
||||||
|
// addParams[jdapi.KeyIfViewDesc] = 0
|
||||||
|
// } else {
|
||||||
|
// addParams[jdapi.KeyIfViewDesc] = 1
|
||||||
|
// }
|
||||||
|
// if err == nil {
|
||||||
|
// skuName := jxutils.ComposeSkuName(skuInfoExt.Prefix, skuInfoExt.Name, sku.Comment, skuInfoExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount)
|
||||||
|
// skuPrice := jxutils.CaculateSkuPrice(skuInfoExt.Price, sku.SpecQuality, sku.SpecUnit, skuInfoExt.Unit)
|
||||||
|
// if skuInfoExt.Upc != "" {
|
||||||
|
// addParams[jdapi.KeyUpcCode] = skuInfoExt.Upc
|
||||||
|
// }
|
||||||
|
// result, err2 := handler(&skuInfoExt, skuPrice, skuName, shopCategories, addParams)
|
||||||
|
// if err = err2; err == nil {
|
||||||
|
// if jdID := utils.Str2Int64WithDefault(result, 0); jdID != 0 {
|
||||||
|
// sku.JdID = jdID
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// sellCities := sku.SellCities
|
// }
|
||||||
// for _, v := range sellCities {
|
// }
|
||||||
// if v == 0 {
|
// return err
|
||||||
// skuNameExt.IsGlobal = 1
|
// }
|
||||||
|
|
||||||
|
// func (p *PurchaseHandler) CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
||||||
|
// return p.cuSku(db, sku, func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) {
|
||||||
|
// if skuExt.IsSpu == 0 {
|
||||||
|
// if globals.EnableJdStoreWrite {
|
||||||
|
// vendorSkuID, err = getAPI("").AddSku(utils.Int2Str(sku.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, skuName, price, jxutils.IntWeight2Float(sku.Weight), jxutils.BatchString2Slice(skuExt.Img, skuExt.Img2), jxStatus2jdStatus(sku.Status), true, addParams)
|
||||||
|
// if err != nil {
|
||||||
|
// if jdSkuID := jdapi.GetJdSkuIDFromError(err); jdSkuID > 0 {
|
||||||
|
// vendorSkuID = utils.Int64ToStr(jdSkuID)
|
||||||
|
// err = nil
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
|
||||||
// if len(sellCities) == 0 || skuNameExt.IsGlobal == 1 {
|
|
||||||
// skuNameExt.IsGlobal = 1
|
|
||||||
// } else {
|
// } else {
|
||||||
// var places []*model.Place
|
// vendorSkuID = utils.Int64ToStr(jxutils.GenFakeID())
|
||||||
// if err = dao.GetRows(db, &places, "SELECT * FROM place WHERE jd_code IN ("+dao.GenQuestionMarks(len(sellCities))+") AND level = 2", sellCities); err == nil {
|
// }
|
||||||
// skuNameExt.Places = make([]int, len(places))
|
// } else {
|
||||||
// for k, v := range places {
|
// vendorSkuID, err = p.syncSkuNameAsSpu(db, sku, skuExt, price, skuName, shopCategories, addParams)
|
||||||
// skuNameExt.Places[k] = v.Code
|
// }
|
||||||
|
// return vendorSkuID, err
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // func (p *PurchaseHandler) ReadSku(ctx *jxcontext.Context, vendorOrgCode, vendorSkuID string) (skuNameExt *model.SkuNameExt, err error) {
|
||||||
|
// // jdSkuID := utils.Str2Int64(vendorSkuID)
|
||||||
|
// // a := getAPI(vendorOrgCode)
|
||||||
|
// // skuList, _, err := a.QuerySkuInfos(&jdapi.QuerySkuParam{
|
||||||
|
// // SkuID: jdSkuID,
|
||||||
|
// // })
|
||||||
|
// // if err == nil {
|
||||||
|
// // if len(skuList) >= 1 {
|
||||||
|
// // skuNameExt = &model.SkuNameExt{}
|
||||||
|
// // if imgList, err2 := a.QueryListBySkuIds(&jdapi.QueryListBySkuIdsParam{
|
||||||
|
// // SkuIDs: []int64{jdSkuID},
|
||||||
|
// // }); err2 == nil && len(imgList) > 0 {
|
||||||
|
// // skuNameExt.Img = imgList[0].SourceImgURL
|
||||||
|
// // }
|
||||||
|
// // sku := skuList[0]
|
||||||
|
// // prefix, name, comment, specUnit, unit, specQuality := jxutils.SplitSkuName(sku.SkuName)
|
||||||
|
// // if name == "" {
|
||||||
|
// // name = sku.SkuName
|
||||||
|
// // unit = "份"
|
||||||
|
// // specUnit = "g"
|
||||||
|
// // }
|
||||||
|
// // skuNameExt.Prefix = prefix
|
||||||
|
// // skuNameExt.Name = name
|
||||||
|
// // skuNameExt.Unit = unit
|
||||||
|
// // skuNameExt.Price = sku.SkuPrice
|
||||||
|
// // skuNameExt.Skus = []*model.SkuWithVendor{
|
||||||
|
// // &model.SkuWithVendor{
|
||||||
|
// // Sku: &model.Sku{
|
||||||
|
// // SpecQuality: specQuality,
|
||||||
|
// // SpecUnit: specUnit,
|
||||||
|
// // Weight: jxutils.FloatWeight2Int(float32(sku.Weight)),
|
||||||
|
// // JdID: sku.SkuID,
|
||||||
|
// // Status: jdStatus2jxStatus(sku.FixedStatus),
|
||||||
|
// // Comment: comment,
|
||||||
|
// // },
|
||||||
|
// // },
|
||||||
|
// // }
|
||||||
|
// // skuNameExt.Skus[0].ID = int(utils.Str2Int64(sku.OutSkuID))
|
||||||
|
|
||||||
|
// // db := dao.GetDB()
|
||||||
|
// // shopCategories := sku.ShopCategories
|
||||||
|
// // if len(shopCategories) > 0 {
|
||||||
|
// // skuCat := &model.SkuCategory{}
|
||||||
|
// // skuCat.JdID = shopCategories[0]
|
||||||
|
// // if dao.GetEntity(db, skuCat, "JdID") == nil {
|
||||||
|
// // skuNameExt.CategoryID = skuCat.ID
|
||||||
|
// // }
|
||||||
|
// // }
|
||||||
|
// // sellCities := sku.SellCities
|
||||||
|
// // for _, v := range sellCities {
|
||||||
|
// // if v == 0 {
|
||||||
|
// // skuNameExt.IsGlobal = 1
|
||||||
|
// // }
|
||||||
|
// // }
|
||||||
|
// // if len(sellCities) == 0 || skuNameExt.IsGlobal == 1 {
|
||||||
|
// // skuNameExt.IsGlobal = 1
|
||||||
|
// // } else {
|
||||||
|
// // var places []*model.Place
|
||||||
|
// // if err = dao.GetRows(db, &places, "SELECT * FROM place WHERE jd_code IN ("+dao.GenQuestionMarks(len(sellCities))+") AND level = 2", sellCities); err == nil {
|
||||||
|
// // skuNameExt.Places = make([]int, len(places))
|
||||||
|
// // for k, v := range places {
|
||||||
|
// // skuNameExt.Places[k] = v.Code
|
||||||
|
// // }
|
||||||
|
// // }
|
||||||
|
// // }
|
||||||
|
// // } else {
|
||||||
|
// // err = partner.ErrCanNotFindItem
|
||||||
|
// // }
|
||||||
|
// // }
|
||||||
|
// // return skuNameExt, err
|
||||||
|
// // }
|
||||||
|
|
||||||
|
// func (p *PurchaseHandler) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
||||||
|
// return p.cuSku(db, sku, func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) {
|
||||||
|
// params := utils.MergeMaps(addParams)
|
||||||
|
// params[jdapi.KeyCategoryId] = skuExt.JdCategoryID
|
||||||
|
// params[jdapi.KeyShopCategories] = shopCategories
|
||||||
|
// params[jdapi.KeyBrandId] = skuExt.BrandID
|
||||||
|
// params[jdapi.KeySkuName] = skuName
|
||||||
|
// params[jdapi.KeyWeight] = jxutils.IntWeight2Float(sku.Weight)
|
||||||
|
// params[jdapi.KeyImages] = jxutils.BatchString2Slice(skuExt.Img, skuExt.Img2)
|
||||||
|
// params[jdapi.KeyFixedStatus] = jxStatus2jdStatus(sku.Status)
|
||||||
|
// if skuExt.IsSpu == 0 {
|
||||||
|
// if globals.EnableJdStoreWrite {
|
||||||
|
// vendorSkuID, err = getAPI("").UpdateSku(utils.Int2Str(sku.ID), params)
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// vendorSkuID, err = p.syncSkuNameAsSpu(db, sku, skuExt, price, skuName, shopCategories, addParams)
|
||||||
|
// }
|
||||||
|
// return vendorSkuID, err
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func (p *PurchaseHandler) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
||||||
|
// params := map[string]interface{}{
|
||||||
|
// jdapi.KeyFixedStatus: jdapi.SkuFixedStatusDeleted,
|
||||||
|
// }
|
||||||
|
// sql := `
|
||||||
|
// SELECT t2.*
|
||||||
|
// FROM sku t1
|
||||||
|
// JOIN sku_name t2 ON t1.name_id = t2.id
|
||||||
|
// WHERE t1.id = ?
|
||||||
|
// `
|
||||||
|
// var skuExt tSkuInfoExt
|
||||||
|
// err = dao.GetRow(db, &skuExt, sql, sku.ID)
|
||||||
|
// if err == nil {
|
||||||
|
// if skuExt.IsSpu == 0 {
|
||||||
|
// if globals.EnableJdStoreWrite {
|
||||||
|
// _, err = getAPI("").UpdateSku(utils.Int2Str(sku.ID), params)
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// _, err = p.syncSkuNameAsSpu(db, sku, &skuExt, 0, "", nil, nil)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // func (p *PurchaseHandler) RefreshAllSkusID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) {
|
||||||
|
// // globals.SugarLogger.Debugf("jd RefreshAllSkusID")
|
||||||
|
|
||||||
|
// // db := dao.GetDB()
|
||||||
|
// // var skuPairs []*jdapi.SkuIDPair
|
||||||
|
// // const stepCount = 2
|
||||||
|
|
||||||
|
// // rootTask := tasksch.NewSeqTask("jd RefreshAllSkusID", ctx,
|
||||||
|
// // func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||||
|
// // switch step {
|
||||||
|
// // case 0:
|
||||||
|
// // err = dao.GetRows(db, &skuPairs, `
|
||||||
|
// // SELECT t1.id out_sku_id, t1.jd_id sku_id
|
||||||
|
// // FROM sku t1
|
||||||
|
// // WHERE t1.deleted_at = ?
|
||||||
|
// // `, utils.DefaultTimeValue)
|
||||||
|
// // default:
|
||||||
|
// // taskName := "RefreshAllSkusID update id"
|
||||||
|
// // if step != stepCount-1 {
|
||||||
|
// // taskName = "RefreshAllSkusID update uuid"
|
||||||
|
// // }
|
||||||
|
// // task1 := tasksch.NewParallelTask(taskName, tasksch.NewParallelConfig().SetIsContinueWhenError(true).SetBatchSize(jdapi.MaxBatchSize4BatchUpdateOutSkuId), ctx,
|
||||||
|
// // func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
// // skuPairs := make([]*jdapi.SkuIDPair, len(batchItemList))
|
||||||
|
// // for k, v := range batchItemList {
|
||||||
|
// // pair := v.(*jdapi.SkuIDPair)
|
||||||
|
// // skuPairs[k] = &jdapi.SkuIDPair{
|
||||||
|
// // SkuId: pair.SkuId,
|
||||||
|
// // OutSkuId: pair.OutSkuId,
|
||||||
|
// // }
|
||||||
|
// // if step != stepCount-1 {
|
||||||
|
// // skuPairs[k].OutSkuId = utils.GetUUID()
|
||||||
|
// // }
|
||||||
|
// // }
|
||||||
|
// // globals.SugarLogger.Debug(utils.Format4Output(skuPairs, false))
|
||||||
|
// // if globals.EnableJdStoreWrite {
|
||||||
|
// // _, err = getAPI("").BatchUpdateOutSkuId(skuPairs)
|
||||||
|
// // }
|
||||||
|
// // return nil, err
|
||||||
|
// // }, skuPairs)
|
||||||
|
// // rootTask.AddChild(task1).Run()
|
||||||
|
// // _, err = task1.GetResult(0)
|
||||||
|
// // }
|
||||||
|
// // return nil, err
|
||||||
|
// // }, stepCount)
|
||||||
|
// // tasksch.HandleTask(rootTask, parentTask, false).Run()
|
||||||
|
// // if !isAsync {
|
||||||
|
// // _, err = rootTask.GetResult(0)
|
||||||
|
// // }
|
||||||
|
// // return rootTask.ID, err
|
||||||
|
// // }
|
||||||
|
|
||||||
|
// func splitAddParams(addParams map[string]interface{}) (spuAddParams, skuAddParams map[string]interface{}) {
|
||||||
|
// if addParams != nil {
|
||||||
|
// spuAddParams = make(map[string]interface{})
|
||||||
|
// skuAddParams = make(map[string]interface{})
|
||||||
|
// for key := range addParams {
|
||||||
|
// if skuAddParamsKeyMap[key] == 1 {
|
||||||
|
// skuAddParams[key] = addParams[key]
|
||||||
|
// } else {
|
||||||
|
// spuAddParams[key] = addParams[key]
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return spuAddParams, skuAddParams
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // 这个处理JD SPU,补丁形式
|
||||||
|
// func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) {
|
||||||
|
// // SPU的SKU NAME不需要规格信息
|
||||||
|
// skuName = jxutils.ComposeSkuName(skuExt.Prefix, skuExt.Name, sku.Comment, "", 0, "", 0)
|
||||||
|
// skuNameJdID := skuExt.JdID
|
||||||
|
// globals.SugarLogger.Debugf("syncSkuNameAsSpu1 sku.id=%d, bareSkuName:%s, skuName:%s, skuNameJdID:%d", sku.ID, skuExt.Name, skuName, skuNameJdID)
|
||||||
|
// spuAddParams, skuAddParams := splitAddParams(addParams)
|
||||||
|
// if !jxutils.IsEmptyID(skuNameJdID) && sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除SKU
|
||||||
|
// if globals.EnableJdStoreWrite {
|
||||||
|
// err = getAPI("").UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusDeleted))
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if err == nil {
|
||||||
|
// updateFields := []string{}
|
||||||
|
// if skuExt.JdSyncStatus&model.SyncFlagDeletedMask != 0 {
|
||||||
|
// sql := `
|
||||||
|
// SELECT COUNT(*) ct
|
||||||
|
// FROM sku t1
|
||||||
|
// WHERE t1.name_id = ? AND (t1.status <> ? OR t1.jd_sync_status <> 0)
|
||||||
|
// `
|
||||||
|
// var count struct {
|
||||||
|
// Ct int
|
||||||
|
// }
|
||||||
|
// if err = dao.GetRow(db, &count, sql, sku.NameID, model.SkuStatusDeleted); err != nil {
|
||||||
|
// return "", err
|
||||||
|
// }
|
||||||
|
// if count.Ct <= 1 && sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 1就是最后删的那个
|
||||||
|
// updateFields = append(updateFields, model.FieldJdSyncStatus)
|
||||||
|
// if globals.EnableJdStoreWrite {
|
||||||
|
// if err = getAPI("").UpdateSpu(utils.Int2Str(skuExt.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusOffline)); err == nil {
|
||||||
|
// err = getAPI("").UpdateSpu(utils.Int2Str(skuExt.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusDeleted))
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// } else {
|
// } else if skuExt.JdSyncStatus&model.SyncFlagNewMask != 0 && jxutils.IsEmptyID(skuNameJdID) {
|
||||||
// err = partner.ErrCanNotFindItem
|
// if globals.EnableJdStoreWrite {
|
||||||
|
// spuName := jxutils.ComposeSpuName(skuExt.Prefix, skuExt.Name, 0)
|
||||||
|
// skus := []map[string]interface{}{
|
||||||
|
// map[string]interface{}{
|
||||||
|
// jdapi.KeyOutSkuId: utils.Int2Str(sku.ID),
|
||||||
|
// jdapi.KeySkuName: skuName,
|
||||||
|
// jdapi.KeyFixedStatus: jxStatus2jdStatus(sku.Status),
|
||||||
|
// jdapi.KeySkuPrice: price,
|
||||||
|
// jdapi.KeyWeight: jxutils.IntWeight2Float(sku.Weight),
|
||||||
|
// jdapi.KeyIsSale: true,
|
||||||
|
// jdapi.FakeKeySpecAttr: composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit),
|
||||||
|
// },
|
||||||
|
// }
|
||||||
|
// skus[0] = utils.MergeMaps(skus[0], skuAddParams)
|
||||||
|
// updateFields = append(updateFields, model.FieldJdSyncStatus)
|
||||||
|
// if globals.EnableJdStoreWrite {
|
||||||
|
// vendorSpuID, skuPairs, err2 := getAPI("").AddSpu(utils.Int2Str(skuExt.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, spuName, []string{skuExt.Img}, jxStatus2jdStatus(skuExt.Status), spuAddParams, skus)
|
||||||
|
// if err = err2; err == nil {
|
||||||
|
// skuExt.JdID = vendorSpuID
|
||||||
|
// // skuNameJdID = skuExt.JdID // 这个是故意去掉的,这样之后的首次SKU修改操作就会被忽略,下一条语句也就可以不用了
|
||||||
|
// // sku.JdSyncStatus &= ^model.SyncFlagNewMask
|
||||||
|
// vendorSkuID = utils.Int64ToStr(skuPairs[0].SkuId)
|
||||||
|
// updateFields = append(updateFields, model.FieldJdID)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else if skuExt.JdSyncStatus&model.SyncFlagModifiedMask != 0 {
|
||||||
|
// params := utils.MergeMaps(map[string]interface{}{
|
||||||
|
// jdapi.KeySpuName: jxutils.ComposeSpuName(skuExt.Prefix, skuExt.Name, 0),
|
||||||
|
// jdapi.KeyShopCategories: shopCategories,
|
||||||
|
// jdapi.KeyCategoryId: skuExt.JdCategoryID,
|
||||||
|
// jdapi.KeyBrandId: skuExt.BrandID,
|
||||||
|
// jdapi.KeyImages: []string{skuExt.Img},
|
||||||
|
// jdapi.KeyFixedStatus: jxStatus2jdStatus(skuExt.Status),
|
||||||
|
// }, spuAddParams)
|
||||||
|
// updateFields = append(updateFields, model.FieldJdSyncStatus)
|
||||||
|
// if globals.EnableJdStoreWrite {
|
||||||
|
// err = getAPI("").UpdateSpu(utils.Int2Str(skuExt.ID), params)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if err == nil {
|
||||||
|
// if skuExt.JdSyncStatus != 0 && len(updateFields) > 0 {
|
||||||
|
// skuExt.JdSyncStatus = 0
|
||||||
|
// _, err = dao.UpdateEntity(db, &skuExt.SkuName, updateFields...)
|
||||||
|
// globals.SugarLogger.Debugf("syncSkuNameAsSpu4 sku.id=%d, skuName:%s, skuName:%s", sku.ID, skuExt.Name, utils.Format4Output(&skuExt.SkuName, false))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// return skuNameExt, err
|
// if err == nil && !jxutils.IsEmptyID(skuNameJdID) {
|
||||||
// }
|
// if sku.JdSyncStatus&model.SyncFlagNewMask != 0 { // 非首次新增SKU
|
||||||
|
// if globals.EnableJdStoreWrite {
|
||||||
func (p *PurchaseHandler) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
// vendorSkuID2, err2 := getAPI("").AppendSku(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), skuName, price, jxutils.IntWeight2Float(sku.Weight), []string{skuExt.Img}, jxStatus2jdStatus(sku.Status), true, composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit), skuAddParams)
|
||||||
return p.cuSku(db, sku, func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) {
|
// if err = err2; err == nil {
|
||||||
params := utils.MergeMaps(addParams)
|
// vendorSkuID = utils.Int64ToStr(vendorSkuID2)
|
||||||
params[jdapi.KeyCategoryId] = skuExt.JdCategoryID
|
|
||||||
params[jdapi.KeyShopCategories] = shopCategories
|
|
||||||
params[jdapi.KeyBrandId] = skuExt.BrandID
|
|
||||||
params[jdapi.KeySkuName] = skuName
|
|
||||||
params[jdapi.KeyWeight] = jxutils.IntWeight2Float(sku.Weight)
|
|
||||||
params[jdapi.KeyImages] = jxutils.BatchString2Slice(skuExt.Img, skuExt.Img2)
|
|
||||||
params[jdapi.KeyFixedStatus] = jxStatus2jdStatus(sku.Status)
|
|
||||||
if skuExt.IsSpu == 0 {
|
|
||||||
if globals.EnableJdStoreWrite {
|
|
||||||
vendorSkuID, err = getAPI("").UpdateSku(utils.Int2Str(sku.ID), params)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
vendorSkuID, err = p.syncSkuNameAsSpu(db, sku, skuExt, price, skuName, shopCategories, addParams)
|
|
||||||
}
|
|
||||||
return vendorSkuID, err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PurchaseHandler) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
|
||||||
params := map[string]interface{}{
|
|
||||||
jdapi.KeyFixedStatus: jdapi.SkuFixedStatusDeleted,
|
|
||||||
}
|
|
||||||
sql := `
|
|
||||||
SELECT t2.*
|
|
||||||
FROM sku t1
|
|
||||||
JOIN sku_name t2 ON t1.name_id = t2.id
|
|
||||||
WHERE t1.id = ?
|
|
||||||
`
|
|
||||||
var skuExt tSkuInfoExt
|
|
||||||
err = dao.GetRow(db, &skuExt, sql, sku.ID)
|
|
||||||
if err == nil {
|
|
||||||
if skuExt.IsSpu == 0 {
|
|
||||||
if globals.EnableJdStoreWrite {
|
|
||||||
_, err = getAPI("").UpdateSku(utils.Int2Str(sku.ID), params)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_, err = p.syncSkuNameAsSpu(db, sku, &skuExt, 0, "", nil, nil)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// func (p *PurchaseHandler) RefreshAllSkusID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) {
|
|
||||||
// globals.SugarLogger.Debugf("jd RefreshAllSkusID")
|
|
||||||
|
|
||||||
// db := dao.GetDB()
|
|
||||||
// var skuPairs []*jdapi.SkuIDPair
|
|
||||||
// const stepCount = 2
|
|
||||||
|
|
||||||
// rootTask := tasksch.NewSeqTask("jd RefreshAllSkusID", ctx,
|
|
||||||
// func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
|
||||||
// switch step {
|
|
||||||
// case 0:
|
|
||||||
// err = dao.GetRows(db, &skuPairs, `
|
|
||||||
// SELECT t1.id out_sku_id, t1.jd_id sku_id
|
|
||||||
// FROM sku t1
|
|
||||||
// WHERE t1.deleted_at = ?
|
|
||||||
// `, utils.DefaultTimeValue)
|
|
||||||
// default:
|
|
||||||
// taskName := "RefreshAllSkusID update id"
|
|
||||||
// if step != stepCount-1 {
|
|
||||||
// taskName = "RefreshAllSkusID update uuid"
|
|
||||||
// }
|
// }
|
||||||
// task1 := tasksch.NewParallelTask(taskName, tasksch.NewParallelConfig().SetIsContinueWhenError(true).SetBatchSize(jdapi.MaxBatchSize4BatchUpdateOutSkuId), ctx,
|
|
||||||
// func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
||||||
// skuPairs := make([]*jdapi.SkuIDPair, len(batchItemList))
|
|
||||||
// for k, v := range batchItemList {
|
|
||||||
// pair := v.(*jdapi.SkuIDPair)
|
|
||||||
// skuPairs[k] = &jdapi.SkuIDPair{
|
|
||||||
// SkuId: pair.SkuId,
|
|
||||||
// OutSkuId: pair.OutSkuId,
|
|
||||||
// }
|
|
||||||
// if step != stepCount-1 {
|
|
||||||
// skuPairs[k].OutSkuId = utils.GetUUID()
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(skuPairs, false))
|
|
||||||
// if globals.EnableJdStoreWrite {
|
|
||||||
// _, err = getAPI("").BatchUpdateOutSkuId(skuPairs)
|
|
||||||
// }
|
|
||||||
// return nil, err
|
|
||||||
// }, skuPairs)
|
|
||||||
// rootTask.AddChild(task1).Run()
|
|
||||||
// _, err = task1.GetResult(0)
|
|
||||||
// }
|
// }
|
||||||
// return nil, err
|
// } else if sku.JdSyncStatus&model.SyncFlagModifiedMask != 0 {
|
||||||
// }, stepCount)
|
// params := make(map[string]interface{})
|
||||||
// tasksch.HandleTask(rootTask, parentTask, false).Run()
|
// params[jdapi.KeySkuName] = skuName
|
||||||
// if !isAsync {
|
// params[jdapi.KeyImages] = []string{skuExt.Img}
|
||||||
// _, err = rootTask.GetResult(0)
|
// params[jdapi.KeyFixedStatus] = jxStatus2jdStatus(sku.Status)
|
||||||
|
// params[jdapi.KeyWeight] = jxutils.IntWeight2Float(sku.Weight)
|
||||||
|
// params[jdapi.KeySkuPrice] = price
|
||||||
|
// if globals.EnableJdStoreWrite {
|
||||||
|
// err = getAPI("").UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), utils.MergeMaps(params, skuAddParams))
|
||||||
|
// if sku.JdSyncStatus&model.SyncFlagSpecMask != 0 {
|
||||||
|
// skuIndex := sku.SkuIndex
|
||||||
|
// if skuIndex > 0 {
|
||||||
|
// saleAttrValue := composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit)
|
||||||
|
// globals.SugarLogger.Debugf("syncSkuNameAsSpu outSuperId:%d, saleAttrId:%d, saleAttrValueId:%d, saleAttrValueName:%s", skuExt.ID, jdapi.SaleAttrIDBase, jdapi.SaleAttrValueIDBase+skuIndex-1, saleAttrValue)
|
||||||
|
// err = getAPI("").UpdateSpuSaleAttr(utils.Int2Str(skuExt.ID), utils.Int2Str(jdapi.SaleAttrIDBase), "", utils.Int2Str(jdapi.SaleAttrValueIDBase+skuIndex-1), saleAttrValue)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if err == nil {
|
||||||
|
// sku.JdSyncStatus = 0
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
// return rootTask.ID, err
|
// return vendorSkuID, err
|
||||||
// }
|
// }
|
||||||
|
|
||||||
func splitAddParams(addParams map[string]interface{}) (spuAddParams, skuAddParams map[string]interface{}) {
|
// func composeSkuSpec(specQuality float32, specUnit, unit string) string {
|
||||||
if addParams != nil {
|
// prefix := ""
|
||||||
spuAddParams = make(map[string]interface{})
|
// if unit == model.SpecialUnit {
|
||||||
skuAddParams = make(map[string]interface{})
|
// prefix = "约"
|
||||||
for key := range addParams {
|
// }
|
||||||
if skuAddParamsKeyMap[key] == 1 {
|
// value := prefix + jxutils.ComposeSkuSpec(specQuality, specUnit)
|
||||||
skuAddParams[key] = addParams[key]
|
// suffix := "/" + unit
|
||||||
} else {
|
// if utf8.RuneCountInString(value) <= 8-utf8.RuneCountInString(suffix) {
|
||||||
spuAddParams[key] = addParams[key]
|
// value += suffix
|
||||||
}
|
// }
|
||||||
}
|
// return value
|
||||||
}
|
// }
|
||||||
return spuAddParams, skuAddParams
|
|
||||||
}
|
|
||||||
|
|
||||||
// 这个处理JD SPU,补丁形式
|
|
||||||
func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) {
|
|
||||||
// SPU的SKU NAME不需要规格信息
|
|
||||||
skuName = jxutils.ComposeSkuName(skuExt.Prefix, skuExt.Name, sku.Comment, "", 0, "", 0)
|
|
||||||
skuNameJdID := skuExt.JdID
|
|
||||||
globals.SugarLogger.Debugf("syncSkuNameAsSpu1 sku.id=%d, bareSkuName:%s, skuName:%s, skuNameJdID:%d", sku.ID, skuExt.Name, skuName, skuNameJdID)
|
|
||||||
spuAddParams, skuAddParams := splitAddParams(addParams)
|
|
||||||
if !jxutils.IsEmptyID(skuNameJdID) && sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除SKU
|
|
||||||
if globals.EnableJdStoreWrite {
|
|
||||||
err = getAPI("").UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusDeleted))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
updateFields := []string{}
|
|
||||||
if skuExt.JdSyncStatus&model.SyncFlagDeletedMask != 0 {
|
|
||||||
sql := `
|
|
||||||
SELECT COUNT(*) ct
|
|
||||||
FROM sku t1
|
|
||||||
WHERE t1.name_id = ? AND (t1.status <> ? OR t1.jd_sync_status <> 0)
|
|
||||||
`
|
|
||||||
var count struct {
|
|
||||||
Ct int
|
|
||||||
}
|
|
||||||
if err = dao.GetRow(db, &count, sql, sku.NameID, model.SkuStatusDeleted); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
if count.Ct <= 1 && sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 1就是最后删的那个
|
|
||||||
updateFields = append(updateFields, model.FieldJdSyncStatus)
|
|
||||||
if globals.EnableJdStoreWrite {
|
|
||||||
if err = getAPI("").UpdateSpu(utils.Int2Str(skuExt.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusOffline)); err == nil {
|
|
||||||
err = getAPI("").UpdateSpu(utils.Int2Str(skuExt.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusDeleted))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if skuExt.JdSyncStatus&model.SyncFlagNewMask != 0 && jxutils.IsEmptyID(skuNameJdID) {
|
|
||||||
if globals.EnableJdStoreWrite {
|
|
||||||
spuName := jxutils.ComposeSpuName(skuExt.Prefix, skuExt.Name, 0)
|
|
||||||
skus := []map[string]interface{}{
|
|
||||||
map[string]interface{}{
|
|
||||||
jdapi.KeyOutSkuId: utils.Int2Str(sku.ID),
|
|
||||||
jdapi.KeySkuName: skuName,
|
|
||||||
jdapi.KeyFixedStatus: jxStatus2jdStatus(sku.Status),
|
|
||||||
jdapi.KeySkuPrice: price,
|
|
||||||
jdapi.KeyWeight: jxutils.IntWeight2Float(sku.Weight),
|
|
||||||
jdapi.KeyIsSale: true,
|
|
||||||
jdapi.FakeKeySpecAttr: composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
skus[0] = utils.MergeMaps(skus[0], skuAddParams)
|
|
||||||
updateFields = append(updateFields, model.FieldJdSyncStatus)
|
|
||||||
if globals.EnableJdStoreWrite {
|
|
||||||
vendorSpuID, skuPairs, err2 := getAPI("").AddSpu(utils.Int2Str(skuExt.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, spuName, []string{skuExt.Img}, jxStatus2jdStatus(skuExt.Status), spuAddParams, skus)
|
|
||||||
if err = err2; err == nil {
|
|
||||||
skuExt.JdID = vendorSpuID
|
|
||||||
// skuNameJdID = skuExt.JdID // 这个是故意去掉的,这样之后的首次SKU修改操作就会被忽略,下一条语句也就可以不用了
|
|
||||||
// sku.JdSyncStatus &= ^model.SyncFlagNewMask
|
|
||||||
vendorSkuID = utils.Int64ToStr(skuPairs[0].SkuId)
|
|
||||||
updateFields = append(updateFields, model.FieldJdID)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if skuExt.JdSyncStatus&model.SyncFlagModifiedMask != 0 {
|
|
||||||
params := utils.MergeMaps(map[string]interface{}{
|
|
||||||
jdapi.KeySpuName: jxutils.ComposeSpuName(skuExt.Prefix, skuExt.Name, 0),
|
|
||||||
jdapi.KeyShopCategories: shopCategories,
|
|
||||||
jdapi.KeyCategoryId: skuExt.JdCategoryID,
|
|
||||||
jdapi.KeyBrandId: skuExt.BrandID,
|
|
||||||
jdapi.KeyImages: []string{skuExt.Img},
|
|
||||||
jdapi.KeyFixedStatus: jxStatus2jdStatus(skuExt.Status),
|
|
||||||
}, spuAddParams)
|
|
||||||
updateFields = append(updateFields, model.FieldJdSyncStatus)
|
|
||||||
if globals.EnableJdStoreWrite {
|
|
||||||
err = getAPI("").UpdateSpu(utils.Int2Str(skuExt.ID), params)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
if skuExt.JdSyncStatus != 0 && len(updateFields) > 0 {
|
|
||||||
skuExt.JdSyncStatus = 0
|
|
||||||
_, err = dao.UpdateEntity(db, &skuExt.SkuName, updateFields...)
|
|
||||||
globals.SugarLogger.Debugf("syncSkuNameAsSpu4 sku.id=%d, skuName:%s, skuName:%s", sku.ID, skuExt.Name, utils.Format4Output(&skuExt.SkuName, false))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err == nil && !jxutils.IsEmptyID(skuNameJdID) {
|
|
||||||
if sku.JdSyncStatus&model.SyncFlagNewMask != 0 { // 非首次新增SKU
|
|
||||||
if globals.EnableJdStoreWrite {
|
|
||||||
vendorSkuID2, err2 := getAPI("").AppendSku(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), skuName, price, jxutils.IntWeight2Float(sku.Weight), []string{skuExt.Img}, jxStatus2jdStatus(sku.Status), true, composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit), skuAddParams)
|
|
||||||
if err = err2; err == nil {
|
|
||||||
vendorSkuID = utils.Int64ToStr(vendorSkuID2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if sku.JdSyncStatus&model.SyncFlagModifiedMask != 0 {
|
|
||||||
params := make(map[string]interface{})
|
|
||||||
params[jdapi.KeySkuName] = skuName
|
|
||||||
params[jdapi.KeyImages] = []string{skuExt.Img}
|
|
||||||
params[jdapi.KeyFixedStatus] = jxStatus2jdStatus(sku.Status)
|
|
||||||
params[jdapi.KeyWeight] = jxutils.IntWeight2Float(sku.Weight)
|
|
||||||
params[jdapi.KeySkuPrice] = price
|
|
||||||
if globals.EnableJdStoreWrite {
|
|
||||||
err = getAPI("").UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), utils.MergeMaps(params, skuAddParams))
|
|
||||||
if sku.JdSyncStatus&model.SyncFlagSpecMask != 0 {
|
|
||||||
skuIndex := sku.SkuIndex
|
|
||||||
if skuIndex > 0 {
|
|
||||||
saleAttrValue := composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit)
|
|
||||||
globals.SugarLogger.Debugf("syncSkuNameAsSpu outSuperId:%d, saleAttrId:%d, saleAttrValueId:%d, saleAttrValueName:%s", skuExt.ID, jdapi.SaleAttrIDBase, jdapi.SaleAttrValueIDBase+skuIndex-1, saleAttrValue)
|
|
||||||
err = getAPI("").UpdateSpuSaleAttr(utils.Int2Str(skuExt.ID), utils.Int2Str(jdapi.SaleAttrIDBase), "", utils.Int2Str(jdapi.SaleAttrValueIDBase+skuIndex-1), saleAttrValue)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
sku.JdSyncStatus = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return vendorSkuID, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func composeSkuSpec(specQuality float32, specUnit, unit string) string {
|
|
||||||
prefix := ""
|
|
||||||
if unit == model.SpecialUnit {
|
|
||||||
prefix = "约"
|
|
||||||
}
|
|
||||||
value := prefix + jxutils.ComposeSkuSpec(specQuality, specUnit)
|
|
||||||
suffix := "/" + unit
|
|
||||||
if utf8.RuneCountInString(value) <= 8-utf8.RuneCountInString(suffix) {
|
|
||||||
value += suffix
|
|
||||||
}
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64,
|
|||||||
outJxOrder.OrderID = GenOrderNo(ctx)
|
outJxOrder.OrderID = GenOrderNo(ctx)
|
||||||
order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress)
|
order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress)
|
||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
order.Status = model.OrderStatusCreated
|
order.Status = model.OrderStatusWait4Pay
|
||||||
callNewOrder(order)
|
callNewOrder(order)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -556,7 +556,7 @@ func AgreeOrRefuseCancel(ctx *jxcontext.Context, order *model.GoodsOrder, isAgre
|
|||||||
if isAgree {
|
if isAgree {
|
||||||
err = CancelOrder(ctx, order, reason)
|
err = CancelOrder(ctx, order, reason)
|
||||||
} else {
|
} else {
|
||||||
err = changeOrderStatus(order.VendorOrderID, model.OrderStatusUndoApplyCancel, reason)
|
err = changeOrderStatus(order.VendorOrderID, model.OrderStatusVendorRejectCancel, reason)
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,25 +9,25 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p *PurchaseHandler) CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
|
// func (p *PurchaseHandler) CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (p *PurchaseHandler) GetAllCategories(ctx *jxcontext.Context, vendorOrgCode string) (cats []*partner.BareCategoryInfo, err error) {
|
func (p *PurchaseHandler) GetAllCategories(ctx *jxcontext.Context, vendorOrgCode string) (cats []*partner.BareCategoryInfo, err error) {
|
||||||
return cats, err
|
return cats, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error {
|
// func (p *PurchaseHandler) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error {
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (p *PurchaseHandler) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error {
|
// func (p *PurchaseHandler) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error {
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, userName string) (err error) {
|
// func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, userName string) (err error) {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (p *PurchaseHandler) CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) {
|
func (p *PurchaseHandler) CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) {
|
||||||
return err
|
return err
|
||||||
@@ -45,21 +45,21 @@ func (p *PurchaseHandler) ReorderCategories2(ctx *jxcontext.Context, vendorOrgCo
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
// func (p *PurchaseHandler) CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
// func (p *PurchaseHandler) ReadSku(ctx *jxcontext.Context, vendorOrgCode, vendorSkuID string) (skuNameExt *model.SkuNameExt, err error) {
|
// func (p *PurchaseHandler) ReadSku(ctx *jxcontext.Context, vendorOrgCode, vendorSkuID string) (skuNameExt *model.SkuNameExt, err error) {
|
||||||
// return skuNameExt, err
|
// return skuNameExt, err
|
||||||
// }
|
// }
|
||||||
|
|
||||||
func (p *PurchaseHandler) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
// func (p *PurchaseHandler) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (p *PurchaseHandler) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
// func (p *PurchaseHandler) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (p *PurchaseHandler) CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) {
|
func (p *PurchaseHandler) CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ var (
|
|||||||
|
|
||||||
fakeFinishedPickup: model.OrderStatusFinishedPickup,
|
fakeFinishedPickup: model.OrderStatusFinishedPickup,
|
||||||
fakeOrderAdjustFinished: model.OrderStatusAdjust,
|
fakeOrderAdjustFinished: model.OrderStatusAdjust,
|
||||||
fakeRefuseUserApplyCancel: model.OrderStatusUnlocked,
|
fakeRefuseUserApplyCancel: model.OrderStatusVendorRejectCancel,
|
||||||
fakeUserApplyCancel: model.OrderStatusApplyCancel,
|
fakeUserApplyCancel: model.OrderStatusApplyCancel,
|
||||||
fakeUserUndoApplyCancel: model.OrderStatusUndoApplyCancel,
|
fakeUserUndoApplyCancel: model.OrderStatusUndoApplyCancel,
|
||||||
fakeMerchantAgreeApplyCancel: model.OrderStatusCanceled,
|
fakeMerchantAgreeApplyCancel: model.OrderStatusCanceled,
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ func (c *ActController) RefreshPageActs() {
|
|||||||
// @Param token header string true "认证token"
|
// @Param token header string true "认证token"
|
||||||
// @Param skuIDs query string true "skuID列表"
|
// @Param skuIDs query string true "skuID列表"
|
||||||
// @Param vendorID query int true "厂商ID"
|
// @Param vendorID query int true "厂商ID"
|
||||||
|
// @Param types query string false "活动类型列表"
|
||||||
// @Param isAsync query bool false "是否异步"
|
// @Param isAsync query bool false "是否异步"
|
||||||
// @Param isContinueWhenError query bool false "单个同步失败是否继续,缺省false"
|
// @Param isContinueWhenError query bool false "单个同步失败是否继续,缺省false"
|
||||||
// @Success 200 {object} controllers.CallResult
|
// @Success 200 {object} controllers.CallResult
|
||||||
@@ -295,8 +296,9 @@ func (c *ActController) RefreshPageActs() {
|
|||||||
func (c *ActController) DeleteSkusFromAct() {
|
func (c *ActController) DeleteSkusFromAct() {
|
||||||
c.callDeleteSkusFromAct(func(params *tActDeleteSkusFromActParams) (retVal interface{}, errCode string, err error) {
|
c.callDeleteSkusFromAct(func(params *tActDeleteSkusFromActParams) (retVal interface{}, errCode string, err error) {
|
||||||
var skuIDs []int
|
var skuIDs []int
|
||||||
if err = jxutils.Strings2Objs(params.SkuIDs, &skuIDs); err == nil {
|
var types []int
|
||||||
retVal, err = act.DeleteSkusFromAct(params.Ctx, params.VendorID, skuIDs, params.IsAsync, params.IsContinueWhenError)
|
if err = jxutils.Strings2Objs(params.SkuIDs, &skuIDs, params.Types, &types); err == nil {
|
||||||
|
retVal, err = act.DeleteSkusFromAct(params.Ctx, params.VendorID, types, skuIDs, params.IsAsync, params.IsContinueWhenError)
|
||||||
}
|
}
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user