From a1e318aee780d0da5f0063a1fbc7fea4f4c8ef55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 20 Feb 2020 10:34:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=A5=BF=E9=B2=9C=E8=BE=BE?= =?UTF-8?q?=E5=95=86=E5=93=81=E5=AF=BC=E5=85=A5=EF=BC=8Cbug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sku.go | 136 +++++++++++++++++++++++++- business/jxstore/cms/store_sku.go | 5 +- controllers/cms_sku.go | 17 ++++ routers/commentsRouter_controllers.go | 9 ++ 4 files changed, 163 insertions(+), 4 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 35c118ef1..0a35bfdc5 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -7,6 +7,8 @@ import ( "strings" "time" + "github.com/360EntSecGroup-Skylar/excelize" + "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/baseapi/platformapi/jdapi" @@ -412,8 +414,12 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma } if params["nameIDs"] != nil { var nameIDs []int - if err = utils.UnmarshalUseNumber([]byte(params["nameIDs"].(string)), &nameIDs); err != nil { - return nil, err + if ids, ok := params["nameIDs"].([]int); ok { + nameIDs = ids + } else { + if err = utils.UnmarshalUseNumber([]byte(params["nameIDs"].(string)), &nameIDs); err != nil { + return nil, err + } } if len(nameIDs) > 0 { sql += " AND t1.id IN (" + dao.GenQuestionMarks(len(nameIDs)) + ")" @@ -1471,7 +1477,7 @@ func DeleteSkuNameExPrefixOverdue(db *dao.DaoDB) (err error) { func SumExianDaDepot(ctx *jxcontext.Context) (err error) { db := dao.GetDB() - result, err := api.EbaiAPI.GetExianDaSkuDepot() + result, err := api.EbaiAPI.GetExianDaSkuDepot("") for _, v := range result { skus, err := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(v.ElemeGoodsID)) if err != nil { @@ -1579,3 +1585,127 @@ func CopyEbaiStoreSkusToJx(ctx *jxcontext.Context, baiduShopID string, storeID i UpdateStoresSkusByBind(ctx, nil, storeSkuBindInfo, true, true) return err } + +func AddExdSkuByExcel(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { + var ( + db = dao.GetDB() + skuMap = make(map[string]string) + ) + taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + xlsx, err := excelize.OpenFile("111.xlsx") + // xlsx, err := excelize.OpenReader(reader) + if err != nil { + return result, err + } + rows, _ := xlsx.GetRows(xlsx.GetSheetName(1)) + for rowNum, row := range rows { + if rowNum < 2 { + continue + } + var ( + name string + upc string + ) + for k, cell := range row { + if k == 2 { + name = cell + } + if k == 7 { + upc = cell + } + } + skuMap[upc] = name + } + case 1: + for k, _ := range skuMap { + fmt.Println(k, skuMap[k]) + result, err := api.EbaiAPI.GetExianDaSkuDepot(k) + if err != nil { + return result, err + } + exdSku := result[0] + skus, err := api.EbaiAPI.GetExianDaSku(utils.Str2Int64(exdSku.ElemeGoodsID)) + skuName := &model.SkuName{} + sql2 := ` + SELECT a.* + FROM sku_name a + JOIN sku b ON b.name_id = a.id + WHERE a.upc = ? + AND b.exd_sku_id <> '' + ` + sqlParams2 := []interface{}{ + k, + } + dao.GetRow(db, skuName, sql2, sqlParams2) + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + //表示京西库中已存在此饿鲜达商品,再判断更不更新名字 + if skuName != nil { + if skuName.Name != skuMap[k] { + skuName.Name = skuMap[k] + _, err = dao.UpdateEntity(db, skuName, "Name") + if err != nil { + dao.Rollback(db) + return result, err + } + } + } else { + //插入 + prefix, _, _, specUnit, unit, specQuality := jxutils.SplitSkuName(exdSku.GoodsName) + skuName2 := &model.SkuName{ + Prefix: prefix, + Name: skuMap[k], + CategoryID: skus.CategoryIDThird, + IsGlobal: 1, + Unit: unit, + SpecQuality: specQuality, + SpecUnit: specUnit, + Price: 100, + Img: exdSku.ImageURL, + Upc: &k, + Status: model.SkuStatusNormal, + } + dao.WrapAddIDCULDEntity(skuName2, ctx.GetUserName()) + err = dao.CreateEntity(db, skuName2) + if err != nil { + dao.Rollback(db) + return result, err + } + sku := &model.Sku{ + NameID: skuName2.ID, + SpecQuality: specQuality, + SpecUnit: specUnit, + Weight: int(utils.Str2Int64(skus.Weight)), + Status: model.SkuStatusNormal, + ExdSkuID: exdSku.ElemeGoodsID, + ExdCategoryThirdID: skus.CategoryIDThird, + } + dao.WrapAddIDCULDEntity(sku, ctx.GetUserName()) + err = dao.CreateEntity(db, sku) + if err != nil { + dao.Rollback(db) + return result, err + } + } + dao.Commit(db) + } + } + return result, err + } + taskSeq := tasksch.NewSeqTask2("创建饿鲜达商品", ctx, isContinueWhenError, taskSeqFunc, 2) + tasksch.HandleTask(taskSeq, nil, true).Run() + if !isAsync { + _, err = taskSeq.GetResult(0) + hint = "1" + } else { + hint = taskSeq.GetID() + } + return hint, err +} diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 06e30d233..28a8b12e5 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -3341,7 +3341,10 @@ func UpdateStoreSkusSpecTagBin(ctx *jxcontext.Context, reader io.Reader, vendorI storeSkuInfos[len(storeSkuInfos)-i-1] = tmp } for _, v := range vendorIDs { - store, _ := dao.GetStoreDetail(db, storeID, v) + store, err := dao.GetStoreDetail(db, storeID, v) + if err != nil || store == nil { + continue + } for _, vv := range apimanager.CurAPIManager.GetAppOrgCodeList(v) { handler := partner.GetPurchasePlatformFromVendorID(v).(partner.IPurchasePlatformStoreSkuHandler) err = handler.UpdateStoreSkusSpecTag(ctx, vv, storeID, store.VendorStoreID, storeSkuMap[storeID]) diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index a7675d1ab..f88525e98 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -461,3 +461,20 @@ func (c *SkuController) CopyEbaiStoreSkusToJx() { return retVal, "", err }) } + +// @Title 通过Excel创建饿鲜达商品(必须先要在饿鲜达系统中创建) +// @Description 通过Excel创建饿鲜达商品(必须先要在饿鲜达系统中创建) +// @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 /AddExdSkuByExcel [post] +func (c *SkuController) AddExdSkuByExcel() { + c.callAddExdSkuByExcel(func(params *tSkuAddExdSkuByExcelParams) (retVal interface{}, errCode string, err error) { + // r := c.Ctx.Request + // files := r.MultipartForm.File["userfiles"] + retVal, err = cms.AddExdSkuByExcel(params.Ctx, params.IsAsync, params.IsContinueWhenError) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 688856bed..cafde1267 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1224,6 +1224,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: "AddExdSkuByExcel", + Router: `/AddExdSkuByExcel`, + 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: "AddSku",