From 4b5a6aeaa75d8261164c72ffc946f2ba8e8abb5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 21 Feb 2020 14:26:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=B7=E6=96=B0=E9=A5=BF=E9=B2=9C=E8=BE=BE?= =?UTF-8?q?=E5=95=86=E5=93=81=E5=88=86=E7=B1=BB=E5=88=86=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sku.go | 336 +++++++++++--------------- controllers/cms_sku.go | 32 +-- routers/commentsRouter_controllers.go | 27 +-- 3 files changed, 162 insertions(+), 233 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index f0f19cb45..7cba54d3b 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -1482,152 +1482,98 @@ func SumExianDaDepot(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) switch step { case 0: taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - // v := batchItemList[0].(*ebaiapi.ExianDaSkus) - // skus, err := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(v.ElemeGoodsID)) - // if err != nil { - // return result, err - // } - // skuNameExt := &model.SkuName{} - // sql2 := ` - // SELECT a.* - // FROM sku_name a - // JOIN sku b ON b.name_id = a.id - // WHERE a.upc = ? - // ` - // sqlParams2 := []interface{}{ - // skus.UpcIds, - // } - // dao.GetRow(db, skuNameExt, sql2, sqlParams2) - // prefix, _, _, specUnit, unit, specQuality := jxutils.SplitSkuName(v.GoodsName) - // //京西库中存在此商品 - // if skuNameExt.ID != 0 { - // var flag = false - // if skuNameExt.Name != v.GoodsName { - // skuNameExt.Name = v.GoodsName - // skuNameExt.Prefix = prefix - // skuNameExt.SpecUnit = specUnit - // skuNameExt.Unit = unit - // skuNameExt.SpecQuality = specQuality - // flag = true - // } - // if skuNameExt.Img != v.ImageURL { - // skuNameExt.Img = v.ImageURL - // flag = true - // } - // if flag { - // _, err = dao.UpdateEntity(db, skuNameExt, "Name", "Prefix", "SpecUnit", "Unit", "SpecQuality", "Img") - // if err != nil { - // return result, err - // } - // } - // } else { - // skuCat := &model.SkuCategory{} - // sql := ` - // SELECT * - // FROM sku_category - // WHERE ebai_category_id = ? - // ` - // sqlParams := []interface{}{ - // skus.CategoryIDThird, - // } - // dao.GetRow(db, skuCat, sql, sqlParams) - // skuName := &model.SkuName{ - // Prefix: prefix, - // Name: v.GoodsName, - // IsGlobal: model.YES, - // Unit: unit, - // SpecQuality: specQuality, - // SpecUnit: specUnit, - // Price: 100, - // Img: v.ImageURL, - // Upc: &v.UpcID, - // Status: model.SkuStatusNormal, - // } - // if skuCat.ID != 0 { - // skuName.CategoryID = skuCat.ID - // } else { - // skuName.CategoryID = 35 //默认给了个分类 - // } - // dao.WrapAddIDCULDEntity(skuName, ctx.GetUserName()) - // err = dao.CreateEntity(db, skuName) - // if err != nil { - // return result, err - // } - // sku := &model.Sku{ - // NameID: skuName.ID, - // SpecQuality: specQuality, - // SpecUnit: specUnit, - // Weight: int(utils.Str2Int64(skus.Weight)), - // Status: model.SkuStatusNormal, - // ExdSkuID: v.ElemeGoodsID, - // ExdCategoryThirdID: skus.CategoryIDThird, - // } - // dao.WrapAddIDCULDEntity(sku, ctx.GetUserName()) - // err = dao.CreateEntity(db, sku) - // if err != nil { - // return result, err - // } - // } + v := batchItemList[0].(*ebaiapi.ExianDaSkus) + skus, err := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(v.ElemeGoodsID)) + if err != nil { + return result, err + } + skuNameExt := &model.SkuName{} + sql2 := ` + SELECT a.* + FROM sku_name a + JOIN sku b ON b.name_id = a.id + WHERE a.upc = ? + ` + sqlParams2 := []interface{}{ + skus.UpcIds, + } + dao.GetRow(db, skuNameExt, sql2, sqlParams2) + prefix, _, _, specUnit, unit, specQuality := jxutils.SplitSkuName(v.GoodsName) + //京西库中存在此商品 + if skuNameExt.ID != 0 { + var flag = false + if skuNameExt.Name != v.GoodsName { + skuNameExt.Name = v.GoodsName + skuNameExt.Prefix = prefix + skuNameExt.SpecUnit = specUnit + skuNameExt.Unit = unit + skuNameExt.SpecQuality = specQuality + flag = true + } + if skuNameExt.Img != v.ImageURL { + skuNameExt.Img = v.ImageURL + flag = true + } + if flag { + _, err = dao.UpdateEntity(db, skuNameExt, "Name", "Prefix", "SpecUnit", "Unit", "SpecQuality", "Img") + if err != nil { + return result, err + } + } + } else { + skuCat := &model.SkuCategory{} + sql := ` + SELECT * + FROM sku_category + WHERE ebai_category_id = ? + ` + sqlParams := []interface{}{ + skus.CategoryIDThird, + } + dao.GetRow(db, skuCat, sql, sqlParams) + skuName := &model.SkuName{ + Prefix: prefix, + Name: v.GoodsName, + IsGlobal: model.YES, + Unit: unit, + SpecQuality: specQuality, + SpecUnit: specUnit, + Price: 100, + Img: v.ImageURL, + Upc: &v.UpcID, + Status: model.SkuStatusNormal, + } + if skuCat.ID != 0 { + skuName.CategoryID = skuCat.ID + } else { + skuName.CategoryID = 35 //默认给了个分类 + } + dao.WrapAddIDCULDEntity(skuName, ctx.GetUserName()) + err = dao.CreateEntity(db, skuName) + if err != nil { + return result, err + } + sku := &model.Sku{ + NameID: skuName.ID, + SpecQuality: specQuality, + SpecUnit: specUnit, + Weight: int(utils.Str2Int64(skus.Weight)), + Status: model.SkuStatusNormal, + ExdSkuID: v.ElemeGoodsID, + ExdCategoryThirdID: skus.CategoryIDThird, + } + dao.WrapAddIDCULDEntity(sku, ctx.GetUserName()) + err = dao.CreateEntity(db, sku) + if err != nil { + return result, err + } + } return retVal, err } taskParallel := tasksch.NewParallelTask("更新京西上饿鲜达商品库", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, results) tasksch.HandleTask(taskParallel, task, true).Run() _, err = taskParallel.GetResult(0) case 1: - //刷新分类 - var skus []*model.SkuName - sql := ` - SELECT a.* - FROM sku_name a - JOIN sku b ON b.name_id = a.id - WHERE b.exd_sku_id <> '' - AND a.deleted_at = ? - AND b.deleted_at = ? - AND a.category_id = 35 - ` - sqlParams := []interface{}{ - utils.DefaultTimeValue, utils.DefaultTimeValue, - } - err = dao.GetRows(db, &skus, sql, sqlParams...) - taskFunc2 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - v := batchItemList[0].(*model.SkuName) - skuList, err := api.Ebai2API.GetEbaiDepotSku(ebaiapi.EbaiWholeCountryStore, *v.Upc) - if err != nil || len(skuList) == 0 { - return retVal, err - } - sku, err := api.Ebai2API.GetEbaiSku(skuList[0].UpcID, ebaiapi.EbaiWholeCountryStore) - if err != nil || sku == nil { - return retVal, err - } - skuCat := &model.SkuCategory{} - sql := ` - SELECT * - FROM sku_category - WHERE exd_name like ? - ` - sqlParams := []interface{}{ - "%" + sku.CustomCatName + "%", - } - err = dao.GetRow(db, skuCat, sql, sqlParams) - dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db) - panic(r) - } - }() - v.CategoryID = skuCat.ID - _, err = dao.UpdateEntity(db, v, "CategoryID") - if err != nil { - dao.Rollback(db) - return retVal, err - } - dao.Commit(db) - return retVal, err - } - taskParallel2 := tasksch.NewParallelTask("更新京西上饿鲜达商品分类", tasksch.NewParallelConfig().SetParallelCount(parallelCount), ctx, taskFunc2, skus) - tasksch.HandleTask(taskParallel2, task, true).Run() - _, err = taskParallel2.GetResult(0) } return result, err } @@ -1642,63 +1588,67 @@ func SumExianDaDepot(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) return hint, err } -func CopyEbaiSkuPriceToJx(ctx *jxcontext.Context, baiduShopID string) (err error) { - db := dao.GetDB() - skuList, err := api.EbaiAPI.PageGetSkuList(utils.Str2Int64(baiduShopID)) - for _, v := range skuList { - sku, _ := api.EbaiAPI.PageGetSku(utils.Str2Int64(baiduShopID), utils.Str2Int64(v["sku_id"].(string))) - var skuName model.SkuName - sql2 := ` - SELECT * FROM sku_category WHERE exd_name like ? AND deleted_at = ? +func UpdateExianDaSkuCategory(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { + var ( + db = dao.GetDB() + skus []*model.SkuName + ) + sql := ` + SELECT a.* + FROM sku_name a + JOIN sku b ON b.name_id = a.id + WHERE b.exd_sku_id <> '' + AND a.deleted_at = ? + AND b.deleted_at = ? + AND a.category_id = 35 ` - sqlParams2 := []interface{}{ - "%" + sku.CustomCatName + "%", - utils.DefaultTimeValue, - } - dao.GetRow(db, &skuName, sql2, sqlParams2) - price := int(utils.Float64TwoInt64(utils.Interface2Float64WithDefault(v["sale_price"], 0) * 100)) - sql := ` - UPDATE sku_name a - JOIN sku b ON a.id = b.name_id - SET a.price = ?,a.category_id = ? - WHERE a.upc = ? - ` - sqlParams := []interface{}{ - price, skuName.ID, - v["upc"].(string), - } - dao.ExecuteSQL(db, sql, sqlParams) + sqlParams := []interface{}{ + utils.DefaultTimeValue, utils.DefaultTimeValue, } - return err -} - -type Tmp struct { - CatID int - Name string -} - -func SearchExianDaDepot(ctx *jxcontext.Context) (err error) { - var resultIns []interface{} - var skuMap = make(map[int]string) - results, err := api.EbaiAPI.GetExianDaSkuDepot("") - task := tasksch.NewParallelTask("SearchExianDaDepot", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, + err = dao.GetRows(db, &skus, sql, sqlParams...) + task := tasksch.NewParallelTask("更新京西上饿鲜达商品分类", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - v := batchItemList[0].(*ebaiapi.ExianDaSkus) - tmp := &Tmp{} - skus, _ := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(v.ElemeGoodsID)) - tmp.CatID = skus.CategoryIDThird - tmp.Name = skus.CategoryText - retVal = []*Tmp{tmp} + v := batchItemList[0].(*model.SkuName) + skuList, err := api.Ebai2API.GetEbaiDepotSku(ebaiapi.EbaiWholeCountryStore, *v.Upc) + if err != nil || len(skuList) == 0 { + return retVal, err + } + sku, err := api.Ebai2API.GetEbaiSku(skuList[0].UpcID, ebaiapi.EbaiWholeCountryStore) + if err != nil || sku == nil || sku.CustomCatName == "" { + return retVal, err + } + skuCat := &model.SkuCategory{} + sql := ` + SELECT * + FROM sku_category + WHERE exd_name like ? + ` + sqlParams := []interface{}{ + "%" + sku.CustomCatName + "%", + } + err = dao.GetRow(db, skuCat, sql, sqlParams) + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + v.CategoryID = skuCat.ID + _, err = dao.UpdateEntity(db, v, "CategoryID") + if err != nil { + dao.Rollback(db) + return retVal, err + } + dao.Commit(db) return retVal, err - }, results) + }, skus) tasksch.HandleTask(task, nil, true).Run() - resultIns, err = task.GetResult(0) - for _, v := range resultIns { - tmp := v.(*Tmp) - skuMap[tmp.CatID] = tmp.Name + if !isAsync { + _, err = task.GetResult(0) + hint = "1" + } else { + hint = task.GetID() } - for k, _ := range skuMap { - fmt.Println(k, skuMap[k]) - } - return err + return hint, err } diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index 0fe2d964f..d6d7a3a39 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -420,8 +420,8 @@ func (c *SkuController) UpdateSkuNamesExPrefix() { }) } -// @Title 合并饿鲜达商品库 -// @Description 合并饿鲜达商品库 +// @Title 合并饿鲜达商品库(必须要在饿鲜达系统中先导入商品) +// @Description 合并饿鲜达商品库(必须要在饿鲜达系统中先导入商品) // @Param token header string true "认证token" // @Param isAsync formData bool false "是否异步" // @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" @@ -435,29 +435,17 @@ func (c *SkuController) SumExianDaDepot() { }) } -// @Title 复制一个饿百的店的商品的价格和分类到京西饿鲜达商品 -// @Description 复制一个饿百的店的商品的价格和分类到京西饿鲜达商品 -// @Param token header string true "认证token" -// @Param baiduShopID formData string true "饿百店ID" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /CopyEbaiSkuPriceToJx [post] -func (c *SkuController) CopyEbaiSkuPriceToJx() { - c.callCopyEbaiSkuPriceToJx(func(params *tSkuCopyEbaiSkuPriceToJxParams) (retVal interface{}, errCode string, err error) { - err = cms.CopyEbaiSkuPriceToJx(params.Ctx, params.BaiduShopID) - return retVal, "", err - }) -} - -// @Title 合并饿鲜达商品库2 -// @Description 合并饿鲜达商品库2 +// @Title 根据饿百上已经分类的商品刷新京西库中饿鲜达商品分类 +// @Description 根据饿百上已经分类的商品刷新京西库中饿鲜达商品分类 // @Param token header string true "认证token" +// @Param isAsync formData bool false "是否异步" +// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult -// @router /SearchExianDaDepot [post] -func (c *SkuController) SearchExianDaDepot() { - c.callSearchExianDaDepot(func(params *tSkuSearchExianDaDepotParams) (retVal interface{}, errCode string, err error) { - err = cms.SearchExianDaDepot(params.Ctx) +// @router /UpdateExianDaSkuCategory [put] +func (c *SkuController) UpdateExianDaSkuCategory() { + c.callUpdateExianDaSkuCategory(func(params *tSkuUpdateExianDaSkuCategoryParams) (retVal interface{}, errCode string, err error) { + retVal, err = cms.UpdateExianDaSkuCategory(params.Ctx, params.IsAsync, params.IsContinueWhenError) return retVal, "", err }) } diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 3736e8c33..2eea1a1a7 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1251,15 +1251,6 @@ func init() { Filters: nil, Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], - beego.ControllerComments{ - Method: "CopyEbaiSkuPriceToJx", - Router: `/CopyEbaiSkuPriceToJx`, - AllowHTTPMethods: []string{"post"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], beego.ControllerComments{ Method: "DeleteCategory", @@ -1359,15 +1350,6 @@ func init() { Filters: nil, Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], - beego.ControllerComments{ - Method: "SearchExianDaDepot", - Router: `/SearchExianDaDepot`, - AllowHTTPMethods: []string{"post"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], beego.ControllerComments{ Method: "SortCategorySkus", @@ -1413,6 +1395,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], + beego.ControllerComments{ + Method: "UpdateExianDaSkuCategory", + Router: `/UpdateExianDaSkuCategory`, + AllowHTTPMethods: []string{"put"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], beego.ControllerComments{ Method: "UpdateSku",