diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index ce4d1d81f..894c6796d 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -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") diff --git a/business/partner/partner.go b/business/partner/partner.go index f9146c15d..2f8587541 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -156,10 +156,10 @@ type IMultipleStoresHandler interface { IPurchasePlatformHandler GetAllCategories(ctx *jxcontext.Context, vendorOrgCode string) (cats []*BareCategoryInfo, err error) - CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) - UpdateCategory(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) + // CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) + // UpdateCategory(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) CreateCategory2(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) // sku - CreateSku(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) + // CreateSku(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) // ReadSku(ctx *jxcontext.Context, vendorOrgCode, vendorSkuID string) (skuNameExt *model.SkuNameExt, err error) CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) diff --git a/business/partner/purchase/jd/sku.go b/business/partner/purchase/jd/sku.go index 214aea54b..5643a4c7b 100644 --- a/business/partner/purchase/jd/sku.go +++ b/business/partner/purchase/jd/sku.go @@ -2,491 +2,479 @@ package jd // 这里函数取得的信息,除了与自身实体相关的ID(比如PARENT ID),都已经转换成了本地ID了 -import ( - "fmt" - "unicode/utf8" +// type tSkuInfoExt struct { +// model.SkuName +// JdCatID int64 `orm:"column(jd_cat_id)"` // 商家类别 +// 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" - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/jxutils" - "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/business/model/dao" - "git.rosy.net.cn/jx-callback/globals" -) +// var ( +// skuAddParamsKeyMap = map[string]int{ +// jdapi.KeyUpcCode: 1, +// } +// ) -type tSkuInfoExt struct { - model.SkuName - JdCatID int64 `orm:"column(jd_cat_id)"` // 商家类别 - JdCategoryID int `orm:"column(jd_category_id)"` // 到家类别 - SkuCatID int64 `orm:"column(sku_cat_id)"` // 商家特殊类别 - Comment string `orm:"size(255)" json:"comment"` -} +// func (p *PurchaseHandler) CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) { +// var jdPid int64 +// if cat.ParentID != 0 { +// pCat := &model.SkuCategory{} +// pCat.ID = cat.ParentID +// 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 ( - skuAddParamsKeyMap = map[string]int{ - jdapi.KeyUpcCode: 1, - } -) +// func (p *PurchaseHandler) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error { +// if globals.EnableJdStoreWrite { +// return getAPI("").UpdateShopCategory(cat.JdID, cat.Name) +// } +// return nil +// } -func (p *PurchaseHandler) CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) { - var jdPid int64 - if cat.ParentID != 0 { - pCat := &model.SkuCategory{} - pCat.ID = cat.ParentID - 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) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error { +// if globals.EnableJdStoreWrite { +// return getAPI("").DelShopCategory(cat.JdID) +// } +// return nil +// } -func (p *PurchaseHandler) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error { - if globals.EnableJdStoreWrite { - return getAPI("").UpdateShopCategory(cat.JdID, cat.Name) - } - return nil -} +// func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, userName string) (err error) { +// var parentJDID int64 +// if parentCatID != 0 { +// cat := &model.SkuCategory{} +// 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 { - if globals.EnableJdStoreWrite { - return getAPI("").DelShopCategory(cat.JdID) - } - return nil -} - -func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, userName string) (err error) { - var parentJDID int64 - if parentCatID != 0 { - cat := &model.SkuCategory{} - 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) 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(`一张图片`, 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 - } - } - } - } - 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, -// }) +// 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 { -// 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)) +// 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{}{} -// 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 +// 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(`一张图片`, 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 { -// skuNameExt.IsGlobal = 1 +// } +// } +// 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 +// } // } -// } -// 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 +// 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 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 { -// err = partner.ErrCanNotFindItem +// } 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)) +// } // } // } -// 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" +// 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) // } -// 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) +// } 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 rootTask.ID, err +// return vendorSkuID, 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 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 -} +// 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 +// } diff --git a/business/partner/purchase/jx/sku.go b/business/partner/purchase/jx/sku.go index 7673a1423..32daa9b18 100644 --- a/business/partner/purchase/jx/sku.go +++ b/business/partner/purchase/jx/sku.go @@ -9,25 +9,25 @@ import ( "git.rosy.net.cn/jx-callback/business/partner" ) -func (p *PurchaseHandler) CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) { - return err -} +// func (p *PurchaseHandler) CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) { +// return err +// } func (p *PurchaseHandler) GetAllCategories(ctx *jxcontext.Context, vendorOrgCode string) (cats []*partner.BareCategoryInfo, err error) { return cats, err } -func (p *PurchaseHandler) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error { - return nil -} +// func (p *PurchaseHandler) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error { +// return nil +// } -func (p *PurchaseHandler) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error { - return nil -} +// func (p *PurchaseHandler) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) error { +// return nil +// } -func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, userName string) (err error) { - return err -} +// func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, userName string) (err error) { +// return err +// } func (p *PurchaseHandler) CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) { return err @@ -45,21 +45,21 @@ func (p *PurchaseHandler) ReorderCategories2(ctx *jxcontext.Context, vendorOrgCo return err } -func (p *PurchaseHandler) CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) { - return err -} +// func (p *PurchaseHandler) CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) { +// return err +// } // func (p *PurchaseHandler) ReadSku(ctx *jxcontext.Context, vendorOrgCode, vendorSkuID string) (skuNameExt *model.SkuNameExt, err error) { // return skuNameExt, err // } -func (p *PurchaseHandler) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) { - return err -} +// func (p *PurchaseHandler) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) { +// return err +// } -func (p *PurchaseHandler) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) { - return err -} +// func (p *PurchaseHandler) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) { +// return err +// } func (p *PurchaseHandler) CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) { return err