From 38046bbe247129476ea34489b1ceaf68099a5398 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 11:21:54 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E5=B0=BD=E9=87=8F=E5=87=8F=E5=B0=91?= =?UTF-8?q?=E5=AF=B9=E4=BA=8Eapi.JdAPI=E7=9A=84=E7=9B=B4=E6=8E=A5=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/financial.go | 76 ------ business/jxstore/initdata/initdata.go | 318 ---------------------- business/jxstore/tempop/tempop.go | 285 ++++++++++++++----- controllers/init_data.go | 32 --- controllers/temp_op.go | 16 ++ routers/commentsRouter_controllers.go | 27 +- 6 files changed, 238 insertions(+), 516 deletions(-) diff --git a/business/jxcallback/orderman/financial.go b/business/jxcallback/orderman/financial.go index bfb79be22..f00091462 100644 --- a/business/jxcallback/orderman/financial.go +++ b/business/jxcallback/orderman/financial.go @@ -255,79 +255,3 @@ func (c *OrderManager) UpdataOrderFinancialInfo(orderFinancial *model.OrderFinan // orderFinancial 和 OrderSkuFinancial 数据计算完毕,准备进行更新 return err } - -// 正向订单设置小费后更新信息,需要再去订单查询列表接口查询小费金额,然后传递过来,感觉这样一个个写非常麻烦(以下demo是以京东为例) -// 为什么不直接用OrderDetail2Financial再处理一遍,通过传递一个type=新建/更新,在SaveOrderFinancialInfo进行相应的数据库操作 - -// func UpdataOrderFinancialInfoByTips(orderFinancial *model.OrderFinancial, orderData map[string]interface{}) (err error) { -// db := dao.GetDB() -// dao.Begin(db) -// defer dao.Rollback(db) -// order1, err2 := api.JdAPI.OrderShoudSettlementService(orderFinancial.VendorOrderID) // 考虑放到上层实现然后传递过来 -// orderFinancial.FreightTipsMoney = utils.MustInterface2Int64(orderData["tips"]) -// pmMoney := orderFinancial.PmMoney -// JxPmMoney := orderFinancial.JxPmMoney -// orderFinancial.PmMoney = 0 -// // 京东/京西平台费可能会变化 -// if err = err2; err == nil { -// orderFinancial.ShopMoney = utils.Interface2Int64WithDefault(order1["settlementAmount"], 0) -// orderFinancial.PmMoney += utils.Interface2Int64WithDefault(order1["goodsCommission"], 0) -// orderFinancial.PmMoney += utils.Interface2Int64WithDefault(order1["freightCommission"], 0) -// orderFinancial.PmMoney += utils.Interface2Int64WithDefault(order1["packageCommission"], 0) -// orderFinancial.PmMoney += utils.Interface2Int64WithDefault(order1["guaranteedCommission"], 0) -// orderFinancial.JxPmMoney = (orderFinancial.ShopMoney+orderFinancial.PmMoney)*TotalRate/1000 - orderFinancial.PmMoney // 京西平台费 = 总金额*20%-第三方平台费 -// if orderFinancial.JxPmMoney < 0 { // 如果算出京西平台费为负数,则置0 -// orderFinancial.JxPmMoney = 0 -// } -// // 计算在此次变动中,第三方平台结算费用的变化值 -// decMoney := orderFinancial.FreightTipsMoney + orderFinancial.PmMoney - pmMoney -// orderFinancial.ShopMoneyByCal -= decMoney -// decMoney2 := decMoney -// // 计算在此次变动中,京西结算费用的变化值 -// jxDecMoney := decMoney + orderFinancial.JxPmMoney - JxPmMoney -// orderFinancial.JxShopMoney -= jxDecMoney -// jxDecMoney2 := jxDecMoney - -// for _, sku := range orderFinancial.Skus[1:] { -// // 重新计算单条sku平台应该结算的金额 -// skuDecMoney := utils.Float64TwoInt64(float64(decMoney*sku.SalePrice*int64(sku.Count)+sku.MealBoxMoney) / float64(orderFinancial.SalePriceMoney+orderFinancial.MealBoxMoney)) -// sku.PmDeductionsMoney += skuDecMoney -// sku.ShopMoneyByCal -= skuDecMoney -// decMoney2 -= skuDecMoney - -// // 重新计算单条sku京西应该结算的金额 -// skuJxDecMoney := utils.Float64TwoInt64(float64(jxDecMoney*sku.SalePrice*int64(sku.Count)+sku.MealBoxMoney) / float64(orderFinancial.SalePriceMoney+orderFinancial.MealBoxMoney)) -// sku.JxDeductionsMoney += skuJxDecMoney -// sku.JxShopMoney -= skuJxDecMoney -// jxDecMoney2 -= skuJxDecMoney -// if err = dao.UpdateEntity(db, sku); err != nil { -// return err -// } -// } -// if len(orderFinancial.Skus) > 0 { -// sku := orderFinancial.Skus[0] - -// sku.PmDeductionsMoney += decMoney2 -// sku.ShopMoneyByCal -= decMoney2 - -// sku.JxDeductionsMoney += jxDecMoney2 -// sku.JxShopMoney -= jxDecMoney2 -// if err = dao.UpdateEntity(db, sku); err != nil { -// return err -// } -// } -// // orderFinancial 和 OrderSkuFinancial 数据计算完毕,准备进行更新 -// // 更新 -// // 更新 - -// } else { -// globals.SugarLogger.Warnf("jd OrderDetail2Financial, orderID:%s is not found from api.JdAPI.OrderShoudSettlementService", orderFinancial.VendorOrderID) -// } -// return err -// } - -// 正向订单转自配送后更新信息 -// func SaveOrderFinancialInfoBySelf(orderFinancial *model.OrderFinancial) (err error) { -// // 此时考虑之前有没有设置小费,如果设置了小费,要扣掉 -// return err -// } diff --git a/business/jxstore/initdata/initdata.go b/business/jxstore/initdata/initdata.go index 448a5b61a..70d0b2ba9 100644 --- a/business/jxstore/initdata/initdata.go +++ b/business/jxstore/initdata/initdata.go @@ -1,13 +1,9 @@ package initdata import ( - "bytes" - "context" "fmt" - "strings" "git.rosy.net.cn/baseapi/platformapi/autonavi" - "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/jxutils/datares" @@ -16,10 +12,7 @@ import ( "git.rosy.net.cn/jx-callback/business/model" "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/purchase/jd" - "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" - "github.com/qiniu/api.v7/storage" ) func TruncateTable(db *dao.DaoDB, tableName string) (err error) { @@ -142,107 +135,6 @@ func InitPlace(ctx *jxcontext.Context) (err error) { return err } -func RefreshSkuNameImg(ctx *jxcontext.Context, parentTask tasksch.ITask, isForce, isAsync, isContinueWhenError bool) (hint string, err error) { - db := dao.GetDB() - var skuNameList []*model.SkuName - if err = dao.GetRows(db, &skuNameList, ` - SELECT t1.id, t1.img, MAX(t2.jd_id) jd_id - FROM sku_name t1 - JOIN sku t2 ON t2.name_id = t1.id AND t2.deleted_at = ? - WHERE t1.deleted_at = ? - GROUP BY 1,2 - ORDER BY t1.id - `, utils.DefaultTimeValue, utils.DefaultTimeValue); err != nil { - return "", err - } - - task := tasksch.NewParallelTask("RefreshSkuNameImg", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - skuName := batchItemList[0].(*model.SkuName) - if !jxutils.IsEmptyID(skuName.JdID) { - if skuName.Img == "" || isForce { - var imgList []*jdapi.SkuPageImg - if imgList, err = api.JdAPI.GetSkuPageImageInfo(skuName.JdID); err == nil { - if len(imgList) > 0 { - skuName.Img = imgList[0].Big - _, err = dao.UpdateEntity(db, skuName, "Img") - } - } - } - } - return nil, err - }, skuNameList) - tasksch.HandleTask(task, parentTask, true).Run() - if !isAsync { - _, err = task.GetResult(0) - } else { - hint = task.ID - } - return hint, err -} - -// func RefreshImgMd5(ctx *jxcontext.Context, parentTask tasksch.ITask, isForce, isAsync, isContinueWhenError bool) (hint string, err error) { -// db := dao.GetDB() -// var skuNameList []*model.SkuName -// if err = dao.GetRows(db, &skuNameList, ` -// SELECT * -// FROM sku_name -// WHERE deleted_at = ? AND img <> '' -// ORDER BY id -// `, utils.DefaultTimeValue); err != nil { -// return "", err -// } - -// task := tasksch.NewParallelTask("InitSkuName calculate md5", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, -// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { -// skuName := batchItemList[0].(*model.SkuName) -// if skuName.ImgHashCode == "" || isForce { -// response, err := http.Get(skuName.Img) -// if err == nil { -// defer response.Body.Close() -// if response.StatusCode == http.StatusOK { -// data, err2 := ioutil.ReadAll(response.Body) -// if err = err2; err == nil { -// skuName.ImgHashCode = fmt.Sprintf("%X", md5.Sum(data)) -// db := dao.GetDB() -// _, err = dao.UpdateEntity(db, skuName, "ImgHashCode") -// } -// } else { -// err = platformapi.ErrHTTPCodeIsNot200 -// } -// } -// } -// return nil, err -// }, skuNameList) -// tasksch.HandleTask(task, parentTask, true).Run() -// if !isAsync { -// _, err = task.GetResult(0) -// } else { -// hint = task.ID -// } -// return hint, err -// } - -func InitSkuName(ctx *jxcontext.Context, isForce, isAsync, isContinueWhenError bool) (hint string, err error) { - rootTask := tasksch.NewSeqTask("InitSkuName", ctx, - func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { - switch step { - case 0: - _, err = RefreshSkuNameImg(ctx, task, isForce, false, isContinueWhenError) - case 1: - // _, err = RefreshImgMd5(ctx, task, isForce, false, isContinueWhenError) - } - return nil, err - }, 2) - tasksch.ManageTask(rootTask).Run() - if !isAsync { - _, err = rootTask.GetResult(0) - } else { - hint = rootTask.ID - } - return hint, err -} - func InitVendorCategory(ctx *jxcontext.Context, vendorID int, isAsync bool) (hint string, err error) { if handler := partner.GetPurchasePlatformFromVendorID(vendorID); handler != nil { var cats []*model.SkuVendorCategory @@ -386,213 +278,3 @@ func UploadImg4Vendors(ctx *jxcontext.Context, isAsync, isContinueWhenError bool func getSkuNameKey(prefix, name, comment, specUnit, unit string, specQuality float32) string { return fmt.Sprintf("%s-%s-%f-%s-%s", prefix, name, specQuality, specUnit, unit) } - -func BuildSkuFromEbaiStore(ctx *jxcontext.Context, baiduShopID int64, isAsync, isContinueWhenError bool) (hint string, err error) { - ebaiCatIDKey := "ebaiCatID" - catList, err := api.EbaiAPI.PageGetCustomCatList(baiduShopID) - if err != nil { - return hint, err - } - catMap := make(map[string]map[string]interface{}) - - allSkuInfo := make(map[string]map[string]map[string]map[string]interface{}) - for _, cat := range catList { - catName := utils.Interface2String(cat["cat_name"]) - if catName == "限时特惠" || catName == "应季热销" { - catName = "应季水果" - } - skuNameMap := allSkuInfo[catName] - if skuNameMap == nil { - skuNameMap = make(map[string]map[string]map[string]interface{}) - allSkuInfo[catName] = skuNameMap - } - if catMap[catName] == nil { - catMap[catName] = cat - } - skuList, err2 := api.EbaiAPI.PageGetCustomSkuList(baiduShopID, utils.Str2Int64(utils.Interface2String(cat["cat_id"]))) - if err = err2; err != nil { - return hint, err - } - for _, sku := range skuList { - _, _, _, specUnit, _, specQuality := jxutils.SplitSkuName(sku["upc_name"].(string)) - if specQuality > 0 { - if catMap[catName][ebaiCatIDKey] == nil { - catMap[catName][ebaiCatIDKey] = utils.Interface2String(sku["cat3_id"]) - } - skuNameKey := sku["photos"].([]interface{})[0].(map[string]interface{})["url"].(string) - if skuNameMap[skuNameKey] == nil { - skuNameMap[skuNameKey] = make(map[string]map[string]interface{}) - } - skuNameMap[skuNameKey][fmt.Sprintf("%f.%s", specQuality, specUnit)] = sku - } - } - } - allSkuInfo2 := make(map[*model.SkuCategory][]*model.SkuNameExt) - catSeq := 0 - for catName, catSkuNameMap := range allSkuInfo { - if len(catSkuNameMap) > 0 { - skuCat := &model.SkuCategory{ - Name: catName, - ParentID: 0, - Level: 1, - Type: model.SkuCategoryNormal, - Seq: catSeq, - EbaiCategoryID: utils.Str2Int64(utils.Interface2String(catMap[catName][ebaiCatIDKey])), - } - catSeq++ - for _, skuList := range catSkuNameMap { - var skuNameExt *model.SkuNameExt - for _, sku := range skuList { - prefix, name, comment, specUnit, unit, specQuality := jxutils.SplitSkuName(sku["upc_name"].(string)) - if skuNameExt == nil { - skuNameExt = &model.SkuNameExt{ - SkuName: model.SkuName{ - Prefix: prefix, - Name: name, - // CategoryID: - IsGlobal: 1, - Unit: unit, - SpecQuality: specQuality, - SpecUnit: specUnit, - Price: int(jxutils.StandardPrice2Int(utils.MustInterface2Float64(sku["sale_price"]))), - Img: sku["photos"].([]interface{})[0].(map[string]interface{})["url"].(string), - Status: model.SkuStatusNormal, - IsSpu: 0, - }, - } - if len(skuList) > 1 { - skuNameExt.Unit = "份" - skuNameExt.SpecQuality = 500 - skuNameExt.SpecUnit = "g" - } - if skuNameExt.Unit == "份" { - tmpSpecQuality := specQuality - if specUnit == "kg" || specUnit == "l" { - tmpSpecQuality *= 1000 - } - skuNameExt.Price = int(float32(skuNameExt.Price) * 500 / tmpSpecQuality) - } - } - mySku := &model.Sku{ - // CategoryID: - // NameID: - Comment: comment, - SpecQuality: specQuality, - SpecUnit: specUnit, - Weight: int(utils.Str2Int64(utils.Interface2String(sku["weight"]))), - Status: model.SkuStatusNormal, - - LinkID: int(jxutils.StandardPrice2Int(utils.MustInterface2Float64(sku["sale_price"]))), // 临时传递价格用 - } - if sku["enabled"].(string) == "0" { - mySku.Status = model.SkuStatusDontSale - } - skuNameExt.Skus = append(skuNameExt.Skus, mySku) - } - allSkuInfo2[skuCat] = append(allSkuInfo2[skuCat], skuNameExt) - } - } - } - - startOutSkuID := 1000 - var skuCatList []*model.SkuCategory - for cat := range allSkuInfo2 { - skuCatList = append(skuCatList, cat) - } - putPolicy := storage.PutPolicy{ - Scope: globals.QiniuBucket, - // Expires: 10 * 60, - } - cfg := &storage.Config{} - upToken := putPolicy.UploadToken(api.QiniuAPI) - rootTask := tasksch.NewSeqTask("BuildSkuFromEbaiStore", ctx, - func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { - var catID string - cat := skuCatList[step] - skuNameExtList := allSkuInfo2[cat] - catID, err = addShopCategory(0, cat.Name, int(cat.Level), cat.Seq, ctx.GetUserName()) - if err == nil { - shopCategories := []int64{utils.Str2Int64(catID)} - for _, skuNameExt := range skuNameExtList { - var imgContent []byte - skuNameExt.CategoryID = cat.ID - skuNameExt.Img = strings.Replace(skuNameExt.Img, "https://", "http://", 1) - if imgContent, _, err = jxutils.DownloadFileByURL(skuNameExt.Img); err != nil { - globals.SugarLogger.Infof("download pic %s failed with error:%v", skuNameExt.Img, err) - if !isContinueWhenError { - return nil, err - } - err = nil - continue - } - formUploader := storage.NewFormUploader(cfg) - ret := storage.PutRet{} - key := jxutils.GenPicFileName(".jpeg") - for i := 0; i < 3; i++ { - if err = formUploader.Put(context.Background(), &ret, upToken, key, bytes.NewReader(imgContent), int64(len(imgContent)), &storage.PutExtra{}); err == nil { - break - } - } - if err != nil { - globals.SugarLogger.Infof("upload pic %s failed with error:%v", skuNameExt.Img, err) - if !isContinueWhenError { - return nil, err - } - err = nil - continue - } - qiniuImgURL := jxutils.ComposeQiniuResURL(key) + "?imageMogr2/thumbnail/x800/gravity/Center/crop/800x800" - for _, sku := range skuNameExt.Skus { - jdCatID := 22410 // 其他国产水果 - if cat.Name == "进口水果" { - jdCatID = 20342 // 其他进口水果 - } - price := sku.LinkID - sku.LinkID = 0 - skuName := jxutils.ComposeSkuName(skuNameExt.Prefix, skuNameExt.Name, sku.Comment, skuNameExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount) - fixedStatus := 1 - if sku.Status != model.SkuStatusNormal { - fixedStatus = 2 - } - var vendorSkuID string - vendorSkuID, err = addSku(utils.Int2Str(startOutSkuID), jdCatID, shopCategories, jd.DefBrandID, skuName, price, jxutils.IntWeight2Float(sku.Weight), []string{qiniuImgURL}, fixedStatus, true, nil) - if err == nil { - globals.SugarLogger.Debugf("vendorSkuID=%s", vendorSkuID) - } else { - globals.SugarLogger.Infof("create %s failed with error:%v", skuName, err) - if !isContinueWhenError { - return nil, err - } - err = nil - } - // fmt.Printf("%s,[%s]%s-%f-%s, %s, %s\n", cat.Name, skuNameExt.Prefix, skuNameExt.Name, skuNameExt.SpecQuality, skuNameExt.SpecUnit, qiniuImgURL, skuName) - startOutSkuID++ - // rootTask.Cancel() - // return nil, nil - } - } - } else { - return nil, err - } - return nil, err - }, len(skuCatList)) - tasksch.ManageTask(rootTask).Run() - if !isAsync { - _, err = rootTask.GetResult(0) - } else { - hint = rootTask.ID - } - return hint, err -} - -func addShopCategory(pid int64, shopCategoryName string, shopCategoryLevel, sort int, userName string) (catId string, err error) { - // globals.SugarLogger.Debug(pid, shopCategoryName, shopCategoryLevel, sort, userName) - // return "123", err - return api.JdAPI.AddShopCategory(pid, shopCategoryName, shopCategoryLevel, sort, userName) -} - -func addSku(outSkuId string, cagtegoryId int, shopCategories []int64, brandId int, skuName string, skuPrice int, weight float32, images []string, fixedStatus int, isSale bool, addParams map[string]interface{}) (skuId string, err error) { - // globals.SugarLogger.Debug(outSkuId, cagtegoryId, shopCategories, brandId, skuName, skuPrice, weight, images, fixedStatus, isSale, addParams) - // return "456", err - return api.JdAPI.AddSku(outSkuId, cagtegoryId, shopCategories, brandId, skuName, skuPrice, weight, images, fixedStatus, isSale, addParams) -} diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index 299d4cb99..34ce3f737 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -2,6 +2,7 @@ package tempop import ( "bytes" + "context" "fmt" "image" "image/jpeg" @@ -15,6 +16,7 @@ import ( "git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin" "git.rosy.net.cn/jx-callback/business/partner/delivery" "github.com/360EntSecGroup-Skylar/excelize" + "github.com/qiniu/api.v7/storage" "git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/platformapi/mtwmapi" @@ -29,6 +31,7 @@ import ( "git.rosy.net.cn/jx-callback/business/model/legacymodel" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/business/partner/purchase/ebai" + "git.rosy.net.cn/jx-callback/business/partner/purchase/jd" "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" @@ -600,78 +603,6 @@ type GoodsOrderOriginalEx struct { OrderStatus int } -// func CreateOrderFromOriginal(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { -// sqlBatchCount := 5000 -// rootTask := tasksch.NewSeqTask("CreateOrderFromOriginal", ctx, -// func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { -// sql := ` -// SELECT t1.*, t3.order_status -// FROM goods_order_original t1 -// LEFT JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id -// LEFT JOIN jxorder t3 ON t3.order_id = t1.vendor_order_id -// WHERE t2.id IS NULL -// LIMIT ?; -// ` -// db := dao.GetDB() -// var orderList []*GoodsOrderOriginalEx -// if err = dao.GetRows(db, &orderList, sql, sqlBatchCount); err != nil { -// return nil, err -// } -// if len(orderList) > 0 { -// task := tasksch.NewParallelTask("CreateOrderFromOriginal", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError).SetParallelCount(1), ctx, -// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { -// orderOriginal := batchItemList[0].(*GoodsOrderOriginalEx) -// globals.SugarLogger.Debugf("CreateOrderFromOriginal processing orderID:%s", orderOriginal.VendorOrderID) -// if handler := partner.GetPurchasePlatformFromVendorID(orderOriginal.VendorID); handler != nil { -// var detail map[string]interface{} -// if err = utils.UnmarshalUseNumber([]byte(strings.Replace(strings.Replace(orderOriginal.OriginalData, "\n", "", -1), "\r", "", -1)), &detail); err != nil { -// globals.SugarLogger.Debugf("CreateOrderFromOriginal abnormal orderID:%s, error:%v", orderOriginal.VendorOrderID, err) -// return nil, err -// } -// order := handler.Map2Order(detail) -// if order.Status < model.OrderStatusEndBegin { -// if orderOriginal.OrderStatus == 3 { -// order.Status = model.OrderStatusFinished -// } else if orderOriginal.OrderStatus == 7 { -// order.Status = model.OrderStatusCanceled -// } else { -// order2, err2 := handler.GetOrder(order.VendorOrderID) -// if err = err2; err == nil { -// order.Status = order2.Status -// } else { -// err = nil // ignore get status error -// } -// } -// } -// if err == nil { -// if _, err = orderman.FixedOrderManager.SaveOrder(order, false, dao.GetDB()); err != nil { -// globals.SugarLogger.Debugf("CreateOrderFromOriginal abnormal orderID:%s, error:%v", orderOriginal.VendorOrderID, err) -// } -// } else { -// globals.SugarLogger.Debugf("CreateOrderFromOriginal abnormal orderID:%s, error:%v", orderOriginal.VendorOrderID, err) -// } -// } else { -// globals.SugarLogger.Debugf("CreateOrderFromOriginal abnormal orderID:%s", orderOriginal.VendorOrderID) -// } -// return nil, err -// }, orderList) -// // rootTask.AddChild(task).Run() -// task.Run() -// _, err = task.GetResult(0) -// } else { -// rootTask.Cancel() -// } -// return nil, err -// }, math.MaxInt32) -// tasksch.ManageTask(rootTask).Run() -// if !isAsync { -// _, err = rootTask.GetResult(0) -// } else { -// hint = rootTask.ID -// } -// return hint, err -// } - func TransformJdSpu2Sku(ctx *jxcontext.Context, skuNameIDs []int, count int, isAsync, isContinueWhenError bool) (hint string, err error) { sql := ` SELECT t1.* @@ -1359,3 +1290,213 @@ func JdStoreInfo1125() (hint string, err error) { } return hint, err } + +func BuildSkuFromEbaiStore(ctx *jxcontext.Context, baiduShopID int64, isAsync, isContinueWhenError bool) (hint string, err error) { + ebaiCatIDKey := "ebaiCatID" + catList, err := api.EbaiAPI.PageGetCustomCatList(baiduShopID) + if err != nil { + return hint, err + } + catMap := make(map[string]map[string]interface{}) + + allSkuInfo := make(map[string]map[string]map[string]map[string]interface{}) + for _, cat := range catList { + catName := utils.Interface2String(cat["cat_name"]) + if catName == "限时特惠" || catName == "应季热销" { + catName = "应季水果" + } + skuNameMap := allSkuInfo[catName] + if skuNameMap == nil { + skuNameMap = make(map[string]map[string]map[string]interface{}) + allSkuInfo[catName] = skuNameMap + } + if catMap[catName] == nil { + catMap[catName] = cat + } + skuList, err2 := api.EbaiAPI.PageGetCustomSkuList(baiduShopID, utils.Str2Int64(utils.Interface2String(cat["cat_id"]))) + if err = err2; err != nil { + return hint, err + } + for _, sku := range skuList { + _, _, _, specUnit, _, specQuality := jxutils.SplitSkuName(sku["upc_name"].(string)) + if specQuality > 0 { + if catMap[catName][ebaiCatIDKey] == nil { + catMap[catName][ebaiCatIDKey] = utils.Interface2String(sku["cat3_id"]) + } + skuNameKey := sku["photos"].([]interface{})[0].(map[string]interface{})["url"].(string) + if skuNameMap[skuNameKey] == nil { + skuNameMap[skuNameKey] = make(map[string]map[string]interface{}) + } + skuNameMap[skuNameKey][fmt.Sprintf("%f.%s", specQuality, specUnit)] = sku + } + } + } + allSkuInfo2 := make(map[*model.SkuCategory][]*model.SkuNameExt) + catSeq := 0 + for catName, catSkuNameMap := range allSkuInfo { + if len(catSkuNameMap) > 0 { + skuCat := &model.SkuCategory{ + Name: catName, + ParentID: 0, + Level: 1, + Type: model.SkuCategoryNormal, + Seq: catSeq, + EbaiCategoryID: utils.Str2Int64(utils.Interface2String(catMap[catName][ebaiCatIDKey])), + } + catSeq++ + for _, skuList := range catSkuNameMap { + var skuNameExt *model.SkuNameExt + for _, sku := range skuList { + prefix, name, comment, specUnit, unit, specQuality := jxutils.SplitSkuName(sku["upc_name"].(string)) + if skuNameExt == nil { + skuNameExt = &model.SkuNameExt{ + SkuName: model.SkuName{ + Prefix: prefix, + Name: name, + // CategoryID: + IsGlobal: 1, + Unit: unit, + SpecQuality: specQuality, + SpecUnit: specUnit, + Price: int(jxutils.StandardPrice2Int(utils.MustInterface2Float64(sku["sale_price"]))), + Img: sku["photos"].([]interface{})[0].(map[string]interface{})["url"].(string), + Status: model.SkuStatusNormal, + IsSpu: 0, + }, + } + if len(skuList) > 1 { + skuNameExt.Unit = "份" + skuNameExt.SpecQuality = 500 + skuNameExt.SpecUnit = "g" + } + if skuNameExt.Unit == "份" { + tmpSpecQuality := specQuality + if specUnit == "kg" || specUnit == "l" { + tmpSpecQuality *= 1000 + } + skuNameExt.Price = int(float32(skuNameExt.Price) * 500 / tmpSpecQuality) + } + } + mySku := &model.Sku{ + // CategoryID: + // NameID: + Comment: comment, + SpecQuality: specQuality, + SpecUnit: specUnit, + Weight: int(utils.Str2Int64(utils.Interface2String(sku["weight"]))), + Status: model.SkuStatusNormal, + + LinkID: int(jxutils.StandardPrice2Int(utils.MustInterface2Float64(sku["sale_price"]))), // 临时传递价格用 + } + if sku["enabled"].(string) == "0" { + mySku.Status = model.SkuStatusDontSale + } + skuNameExt.Skus = append(skuNameExt.Skus, mySku) + } + allSkuInfo2[skuCat] = append(allSkuInfo2[skuCat], skuNameExt) + } + } + } + + startOutSkuID := 1000 + var skuCatList []*model.SkuCategory + for cat := range allSkuInfo2 { + skuCatList = append(skuCatList, cat) + } + putPolicy := storage.PutPolicy{ + Scope: globals.QiniuBucket, + // Expires: 10 * 60, + } + cfg := &storage.Config{} + upToken := putPolicy.UploadToken(api.QiniuAPI) + rootTask := tasksch.NewSeqTask("BuildSkuFromEbaiStore", ctx, + func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + var catID string + cat := skuCatList[step] + skuNameExtList := allSkuInfo2[cat] + catID, err = addShopCategory(0, cat.Name, int(cat.Level), cat.Seq, ctx.GetUserName()) + if err == nil { + shopCategories := []int64{utils.Str2Int64(catID)} + for _, skuNameExt := range skuNameExtList { + var imgContent []byte + skuNameExt.CategoryID = cat.ID + skuNameExt.Img = strings.Replace(skuNameExt.Img, "https://", "http://", 1) + if imgContent, _, err = jxutils.DownloadFileByURL(skuNameExt.Img); err != nil { + globals.SugarLogger.Infof("download pic %s failed with error:%v", skuNameExt.Img, err) + if !isContinueWhenError { + return nil, err + } + err = nil + continue + } + formUploader := storage.NewFormUploader(cfg) + ret := storage.PutRet{} + key := jxutils.GenPicFileName(".jpeg") + for i := 0; i < 3; i++ { + if err = formUploader.Put(context.Background(), &ret, upToken, key, bytes.NewReader(imgContent), int64(len(imgContent)), &storage.PutExtra{}); err == nil { + break + } + } + if err != nil { + globals.SugarLogger.Infof("upload pic %s failed with error:%v", skuNameExt.Img, err) + if !isContinueWhenError { + return nil, err + } + err = nil + continue + } + qiniuImgURL := jxutils.ComposeQiniuResURL(key) + "?imageMogr2/thumbnail/x800/gravity/Center/crop/800x800" + for _, sku := range skuNameExt.Skus { + jdCatID := 22410 // 其他国产水果 + if cat.Name == "进口水果" { + jdCatID = 20342 // 其他进口水果 + } + price := sku.LinkID + sku.LinkID = 0 + skuName := jxutils.ComposeSkuName(skuNameExt.Prefix, skuNameExt.Name, sku.Comment, skuNameExt.Unit, sku.SpecQuality, sku.SpecUnit, jdapi.MaxSkuNameCharCount) + fixedStatus := 1 + if sku.Status != model.SkuStatusNormal { + fixedStatus = 2 + } + var vendorSkuID string + vendorSkuID, err = addSku(utils.Int2Str(startOutSkuID), jdCatID, shopCategories, jd.DefBrandID, skuName, price, jxutils.IntWeight2Float(sku.Weight), []string{qiniuImgURL}, fixedStatus, true, nil) + if err == nil { + globals.SugarLogger.Debugf("vendorSkuID=%s", vendorSkuID) + } else { + globals.SugarLogger.Infof("create %s failed with error:%v", skuName, err) + if !isContinueWhenError { + return nil, err + } + err = nil + } + // fmt.Printf("%s,[%s]%s-%f-%s, %s, %s\n", cat.Name, skuNameExt.Prefix, skuNameExt.Name, skuNameExt.SpecQuality, skuNameExt.SpecUnit, qiniuImgURL, skuName) + startOutSkuID++ + // rootTask.Cancel() + // return nil, nil + } + } + } else { + return nil, err + } + return nil, err + }, len(skuCatList)) + tasksch.ManageTask(rootTask).Run() + if !isAsync { + _, err = rootTask.GetResult(0) + } else { + hint = rootTask.ID + } + return hint, err +} + +func addShopCategory(pid int64, shopCategoryName string, shopCategoryLevel, sort int, userName string) (catId string, err error) { + // globals.SugarLogger.Debug(pid, shopCategoryName, shopCategoryLevel, sort, userName) + // return "123", err + return api.JdAPI.AddShopCategory(pid, shopCategoryName, shopCategoryLevel, sort, userName) +} + +func addSku(outSkuId string, cagtegoryId int, shopCategories []int64, brandId int, skuName string, skuPrice int, weight float32, images []string, fixedStatus int, isSale bool, addParams map[string]interface{}) (skuId string, err error) { + // globals.SugarLogger.Debug(outSkuId, cagtegoryId, shopCategories, brandId, skuName, skuPrice, weight, images, fixedStatus, isSale, addParams) + // return "456", err + return api.JdAPI.AddSku(outSkuId, cagtegoryId, shopCategories, brandId, skuName, skuPrice, weight, images, fixedStatus, isSale, addParams) +} diff --git a/controllers/init_data.go b/controllers/init_data.go index 91a6b0b39..b14810151 100644 --- a/controllers/init_data.go +++ b/controllers/init_data.go @@ -22,22 +22,6 @@ func (c *InitDataController) InitPlace() { }) } -// @Title 初始化skuname(当前主要是计算md5) -// @Description 初始化skuname(当前主要是计算md5) -// @Param token header string true "认证token" -// @Param isForce formData bool false "是否强刷,即即使本地已经有了hashCode也重新计算,缺省为false" -// @Param isAsync formData bool false "是否异步操作" -// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /InitSkuName [post] -func (c *InitDataController) InitSkuName() { - c.callInitSkuName(func(params *tInitdataInitSkuNameParams) (retVal interface{}, errCode string, err error) { - retVal, err = initdata.InitSkuName(params.Ctx, params.IsForce, params.IsAsync, params.IsContinueWhenError) - return retVal, "", err - }) -} - // @Title 初始化vendor category // @Description 初始化vendor category // @Param token header string true "认证token" @@ -67,19 +51,3 @@ func (c *InitDataController) UploadImage4Vendors() { return retVal, "", err }) } - -// @Title 从饿百店建商品 -// @Description 从饿百店建商品 -// @Param token header string true "认证token" -// @Param baiduShopID formData int true "skuNameID" -// @Param isAsync formData bool false "是否异步操作" -// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /BuildSkuFromEbaiStore [post] -func (c *InitDataController) BuildSkuFromEbaiStore() { - c.callBuildSkuFromEbaiStore(func(params *tInitdataBuildSkuFromEbaiStoreParams) (retVal interface{}, errCode string, err error) { - retVal, err = initdata.BuildSkuFromEbaiStore(params.Ctx, int64(params.BaiduShopID), params.IsAsync, params.IsContinueWhenError) - return retVal, "", err - }) -} diff --git a/controllers/temp_op.go b/controllers/temp_op.go index c9524bd6c..b2ab93b95 100644 --- a/controllers/temp_op.go +++ b/controllers/temp_op.go @@ -352,3 +352,19 @@ func (c *TempOpController) FixMtwmCategory() { return retVal, "", err }) } + +// @Title 从饿百店建商品 +// @Description 从饿百店建商品 +// @Param token header string true "认证token" +// @Param baiduShopID formData int true "skuNameID" +// @Param isAsync formData bool false "是否异步操作" +// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /BuildSkuFromEbaiStore [post] +func (c *TempOpController) BuildSkuFromEbaiStore() { + c.callBuildSkuFromEbaiStore(func(params *tTempopBuildSkuFromEbaiStoreParams) (retVal interface{}, errCode string, err error) { + retVal, err = tempop.BuildSkuFromEbaiStore(params.Ctx, int64(params.BaiduShopID), params.IsAsync, params.IsContinueWhenError) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index efb874ecf..1abd060ff 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -484,15 +484,6 @@ func init() { Filters: nil, Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"], - beego.ControllerComments{ - Method: "BuildSkuFromEbaiStore", - Router: `/BuildSkuFromEbaiStore`, - AllowHTTPMethods: []string{"post"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"], beego.ControllerComments{ Method: "Change2JDSPU4Store", @@ -529,15 +520,6 @@ func init() { Filters: nil, Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"], - beego.ControllerComments{ - Method: "InitSkuName", - Router: `/InitSkuName`, - AllowHTTPMethods: []string{"post"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"], beego.ControllerComments{ Method: "InitVendorCategory", @@ -1818,6 +1800,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"], + beego.ControllerComments{ + Method: "BuildSkuFromEbaiStore", + Router: `/BuildSkuFromEbaiStore`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TempOpController"], beego.ControllerComments{ Method: "CheckSkuDiffBetweenJxAndVendor", From c98299cdcb15058dc10f41a3c132edbf655bc74b Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 11:48:16 +0800 Subject: [PATCH 02/12] debug --- business/partner/purchase/jx/localjx/wxpay.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/business/partner/purchase/jx/localjx/wxpay.go b/business/partner/purchase/jx/localjx/wxpay.go index 3fa7d4c79..62d71fad7 100644 --- a/business/partner/purchase/jx/localjx/wxpay.go +++ b/business/partner/purchase/jx/localjx/wxpay.go @@ -57,6 +57,7 @@ func pay4OrderByWX(ctx *jxcontext.Context, order *model.GoodsOrder, vendorPayTyp } func OnWxPayCallback(msg *wxpay.CallbackMsg) (err error) { + globals.SugarLogger.Debugf("OnWxPayCallback msg:%s", utils.Format4Output(msg, true)) switch msg.MsgType { case wxpay.MsgTypePay: err = onWxpayFinished(msg.Data.(*wxpay.PayResultMsg)) @@ -88,6 +89,8 @@ func onWxpayFinished(msg *wxpay.PayResultMsg) (err error) { if msg.ResultCode == wxpay.ResponseCodeSuccess { err = OnPayFinished(orderPay) } + } else { + globals.SugarLogger.Debugf("onWxpayFinished msg:%s, err:%v", utils.Format4Output(msg, true), err) } return err } From dabbfc1dd642f1e735b09daddf52be04372a55b3 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 11:57:27 +0800 Subject: [PATCH 03/12] up --- controllers/wxpay_callback.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/controllers/wxpay_callback.go b/controllers/wxpay_callback.go index dc7c2d049..67c30eb01 100644 --- a/controllers/wxpay_callback.go +++ b/controllers/wxpay_callback.go @@ -5,7 +5,9 @@ import ( "net/http" "git.rosy.net.cn/baseapi/platformapi/wxpay" + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/partner/purchase/jx/localjx" + "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" "github.com/astaxie/beego" ) @@ -17,6 +19,7 @@ type WXPayController struct { func (c *WXPayController) Msg() { if c.Ctx.Input.Method() == http.MethodPost { msg, callbackResponse := api.WxpayAPI.GetCallbackMsg(c.Ctx.Request) + globals.SugarLogger.Debugf("wxpay callback msg:%s, callbackResponse:%s", utils.Format4Output(msg, true), utils.Format4Output(callbackResponse, true)) var err error if callbackResponse == nil { if msg.MsgType != wxpay.MsgTypeUnkown { From 596afbd8c585355ec9bcebd718fa735d6722bc5d Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 12:08:51 +0800 Subject: [PATCH 04/12] fk --- controllers/wxpay_callback.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/controllers/wxpay_callback.go b/controllers/wxpay_callback.go index 67c30eb01..5fe56ca86 100644 --- a/controllers/wxpay_callback.go +++ b/controllers/wxpay_callback.go @@ -19,12 +19,15 @@ type WXPayController struct { func (c *WXPayController) Msg() { if c.Ctx.Input.Method() == http.MethodPost { msg, callbackResponse := api.WxpayAPI.GetCallbackMsg(c.Ctx.Request) - globals.SugarLogger.Debugf("wxpay callback msg:%s, callbackResponse:%s", utils.Format4Output(msg, true), utils.Format4Output(callbackResponse, true)) + globals.SugarLogger.Debugf("wxpay callback msg:%s, callbackResponse:%s, %t", utils.Format4Output(msg, true), utils.Format4Output(callbackResponse, true), callbackResponse == nil) var err error if callbackResponse == nil { + globals.SugarLogger.Debugf("wxpay callback1 msg:%s", utils.Format4Output(msg, true)) if msg.MsgType != wxpay.MsgTypeUnkown { + globals.SugarLogger.Debugf("wxpay callback2 msg:%s", utils.Format4Output(msg, true)) err = fmt.Errorf("未知的微信支付回调类型:%d", msg.MsgType) } else { + globals.SugarLogger.Debugf("wxpay callback3 msg:%s", utils.Format4Output(msg, true)) err = localjx.OnWxPayCallback(msg) } } From ea3cd1b8335945fa22eb8538cbab3015ba7b504a Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 12:12:03 +0800 Subject: [PATCH 05/12] fk --- controllers/wxpay_callback.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/controllers/wxpay_callback.go b/controllers/wxpay_callback.go index 5fe56ca86..2d6d89e7d 100644 --- a/controllers/wxpay_callback.go +++ b/controllers/wxpay_callback.go @@ -5,9 +5,7 @@ import ( "net/http" "git.rosy.net.cn/baseapi/platformapi/wxpay" - "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/partner/purchase/jx/localjx" - "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" "github.com/astaxie/beego" ) @@ -19,15 +17,12 @@ type WXPayController struct { func (c *WXPayController) Msg() { if c.Ctx.Input.Method() == http.MethodPost { msg, callbackResponse := api.WxpayAPI.GetCallbackMsg(c.Ctx.Request) - globals.SugarLogger.Debugf("wxpay callback msg:%s, callbackResponse:%s, %t", utils.Format4Output(msg, true), utils.Format4Output(callbackResponse, true), callbackResponse == nil) + // globals.SugarLogger.Debugf("wxpay callback msg:%s, callbackResponse:%s, %t", utils.Format4Output(msg, true), utils.Format4Output(callbackResponse, true), callbackResponse == nil) var err error if callbackResponse == nil { - globals.SugarLogger.Debugf("wxpay callback1 msg:%s", utils.Format4Output(msg, true)) - if msg.MsgType != wxpay.MsgTypeUnkown { - globals.SugarLogger.Debugf("wxpay callback2 msg:%s", utils.Format4Output(msg, true)) + if msg.MsgType == wxpay.MsgTypeUnkown { err = fmt.Errorf("未知的微信支付回调类型:%d", msg.MsgType) } else { - globals.SugarLogger.Debugf("wxpay callback3 msg:%s", utils.Format4Output(msg, true)) err = localjx.OnWxPayCallback(msg) } } From 84dac23be8180196be2de1ae23a5289771c4859b Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 15:07:50 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=A0=B9=E6=8D=AEtoken=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E4=B8=8D=E5=90=8C=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/partner_api.go | 1 + business/partner/purchase/jd/jd.go | 16 ++++++ controllers/jd_callback.go | 78 +++++++++++++++++----------- globals/api/apimanager/apimanager.go | 12 +++++ 4 files changed, 78 insertions(+), 29 deletions(-) diff --git a/business/partner/partner_api.go b/business/partner/partner_api.go index 386527933..3e1b15a17 100644 --- a/business/partner/partner_api.go +++ b/business/partner/partner_api.go @@ -2,6 +2,7 @@ package partner type IAPIManager interface { GetAPI(vendorID int, appOrgCode string) interface{} + GetAPIList(vendorID int) []interface{} GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) } diff --git a/business/partner/purchase/jd/jd.go b/business/partner/purchase/jd/jd.go index f80525291..66b30d0f8 100644 --- a/business/partner/purchase/jd/jd.go +++ b/business/partner/purchase/jd/jd.go @@ -26,6 +26,22 @@ func getAPI(appOrgCode string) (apiObj *jdapi.API) { return partner.CurAPIManager.GetAPI(model.VendorIDJD, appOrgCode).(*jdapi.API) } +func GetAPIByToken(token string) (apiObj *jdapi.API) { + if token == "" { + apiObj = getAPI("") + } else { + apiList := partner.CurAPIManager.GetAPIList(model.VendorIDJD) + for _, v := range apiList { + jdAPI := v.(*jdapi.API) + if jdAPI.GetToken() == token { + apiObj = jdAPI + break + } + } + } + return apiObj +} + func (c *PurchaseHandler) GetVendorID() int { return model.VendorIDJD } diff --git a/controllers/jd_callback.go b/controllers/jd_callback.go index 3aa5f753b..60c39a6c4 100644 --- a/controllers/jd_callback.go +++ b/controllers/jd_callback.go @@ -2,14 +2,15 @@ package controllers import ( "bytes" + "fmt" "io/ioutil" "net/http" + "net/url" "git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/partner/purchase/jd" "git.rosy.net.cn/jx-callback/globals" - "git.rosy.net.cn/jx-callback/globals/api" "github.com/astaxie/beego" "github.com/astaxie/beego/context" ) @@ -19,20 +20,27 @@ type DjswController struct { beego.Controller } +func (c *DjswController) handleMsg(isNeedDecode bool, handler func(*jdapi.API, url.Values, string) *jdapi.CallbackResponse) (callbackResponse *jdapi.CallbackResponse) { + values, token, msgURL, callbackResponse := jdapi.GetCallbackMsg(getUsefulRequest(c.Ctx), isNeedDecode) + if callbackResponse == nil { + if jdAPI := jd.GetAPIByToken(token); jdAPI != nil { + callbackResponse = handler(jdAPI, values, msgURL) + } else { + callbackResponse = jdapi.Err2CallbackResponse(fmt.Errorf("没有匹配的token,非法请求"), "") + } + } + return callbackResponse +} + func (c *DjswController) orderStatus(isCancelOrder bool) { if c.Ctx.Input.Method() == http.MethodPost { - var obj *jdapi.CallbackOrderMsg - var callbackResponse *jdapi.CallbackResponse - - if isCancelOrder { - obj, callbackResponse = api.JdAPI.GetOrderApplyCancelCallbackMsg(getUsefulRequest(c.Ctx)) - } else { - obj, callbackResponse = api.JdAPI.GetOrderCallbackMsg(getUsefulRequest(c.Ctx)) - } - globals.SugarLogger.Debug(utils.Format4Output(obj, true)) - if callbackResponse == nil { - callbackResponse = jd.OnOrderMsg(obj) - } + callbackResponse := c.handleMsg(isCancelOrder, func(a *jdapi.API, values url.Values, msgURL string) (callbackResponse *jdapi.CallbackResponse) { + obj, callbackResponse := a.GetOrderCallbackMsg(values, msgURL) + if callbackResponse == nil { + callbackResponse = jd.OnOrderMsg(obj) + } + return callbackResponse + }) c.Data["json"] = c.transferResponse("orderStatus", callbackResponse) c.ServeJSON() } else { @@ -82,10 +90,13 @@ func (c *DjswController) ApplyCancelOrder() { func (c *DjswController) PushDeliveryStatus() { if c.Ctx.Input.Method() == http.MethodPost { - obj, callbackResponse := api.JdAPI.GetOrderDeliveryCallbackMsg(getUsefulRequest(c.Ctx)) - if callbackResponse == nil { - callbackResponse = jd.OnWaybillMsg(obj) - } + callbackResponse := c.handleMsg(true, func(a *jdapi.API, values url.Values, msgURL string) (callbackResponse *jdapi.CallbackResponse) { + obj, callbackResponse := a.GetOrderDeliveryCallbackMsg(values, msgURL) + if callbackResponse == nil { + callbackResponse = jd.OnWaybillMsg(obj) + } + return callbackResponse + }) c.Data["json"] = c.transferResponse("PushDeliveryStatus", callbackResponse) c.ServeJSON() } else { @@ -109,10 +120,13 @@ func (c *DjswController) Token() { func (c *DjswController) StockIsHave() { // globals.SugarLogger.Info(string(c.Ctx.Input.RequestBody)) if c.Ctx.Input.Method() == http.MethodPost { - _, callbackResponse := api.JdAPI.GetStoreStockCallbackMsg(getUsefulRequest(c.Ctx)) - if callbackResponse == nil { - // globals.SugarLogger.Debugf("StockIsHave, obj:%s", utils.Format4Output(obj, false)) - } + callbackResponse := c.handleMsg(true, func(a *jdapi.API, values url.Values, msgURL string) (callbackResponse *jdapi.CallbackResponse) { + _, callbackResponse = a.GetStoreStockCallbackMsg(values, msgURL) + if callbackResponse == nil { + // globals.SugarLogger.Debugf("StockIsHave, obj:%s", utils.Format4Output(obj, false)) + } + return callbackResponse + }) c.Data["json"] = c.transferResponse("StockIsHave", callbackResponse) c.ServeJSON() } else { @@ -122,10 +136,13 @@ func (c *DjswController) StockIsHave() { func (c *DjswController) SinglePromoteCreate() { if c.Ctx.Input.Method() == http.MethodPost { - obj, callbackResponse := api.JdAPI.GetOrderCallbackMsg(getUsefulRequest(c.Ctx)) - if callbackResponse == nil { - callbackResponse = jd.OnActMsg(obj) - } + callbackResponse := c.handleMsg(false, func(a *jdapi.API, values url.Values, msgURL string) (callbackResponse *jdapi.CallbackResponse) { + obj, callbackResponse := a.GetOrderCallbackMsg(values, msgURL) + if callbackResponse == nil { + callbackResponse = jd.OnActMsg(obj) + } + return callbackResponse + }) c.Data["json"] = c.transferResponse("SinglePromoteCreate", callbackResponse) c.ServeJSON() } else { @@ -135,10 +152,13 @@ func (c *DjswController) SinglePromoteCreate() { func (c *DjswController) StoreCrud() { if c.Ctx.Input.Method() == http.MethodPost { - obj, callbackResponse := api.JdAPI.GetOrderCallbackMsg(getUsefulRequest(c.Ctx)) - if callbackResponse == nil { - callbackResponse = jd.OnStoreMsg(obj) - } + callbackResponse := c.handleMsg(false, func(a *jdapi.API, values url.Values, msgURL string) (callbackResponse *jdapi.CallbackResponse) { + obj, callbackResponse := a.GetOrderCallbackMsg(values, msgURL) + if callbackResponse == nil { + callbackResponse = jd.OnStoreMsg(obj) + } + return callbackResponse + }) c.Data["json"] = c.transferResponse("StoreCrud", callbackResponse) c.ServeJSON() } else { diff --git a/globals/api/apimanager/apimanager.go b/globals/api/apimanager/apimanager.go index 6e62c34b6..88d2c7ca6 100644 --- a/globals/api/apimanager/apimanager.go +++ b/globals/api/apimanager/apimanager.go @@ -38,6 +38,18 @@ func (a *APIManager) GetAPI(vendorID int, appOrgCode string) (pfAPI interface{}) return pfAPI } +func (a *APIManager) GetAPIList(vendorID int) (pfAPIList []interface{}) { + switch vendorID { + case model.VendorIDJD: + pfAPIList = []interface{}{api.JdAPI} + case model.VendorIDMTWM: + pfAPIList = []interface{}{api.MtwmAPI} + case model.VendorIDEBAI: + pfAPIList = []interface{}{api.EbaiAPI} + } + return pfAPIList +} + func (a *APIManager) GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) { switch vendorID { case model.VendorIDJD: From 902c770515a544b3ff79762a76d4b23ebdc53a6b Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 15:34:14 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E8=B0=83=E6=95=B4GetOrders=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E6=8E=92=E5=BA=8F=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/dao_order.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index b8965c0ba..02982381a 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -899,7 +899,7 @@ func GetOrders(db *DaoDB, ids []int64, isIncludeSku, isIncludeFake bool, fromDat ORDER BY IF(t1.status < ?, IF(t1.vendor_id = ?, 0, 1), 0), t1.order_created_at DESC` sqlParams = append(sqlParams, model.OrderStatusEndBegin, model.VendorIDJX) } else { - if isIncludeSku { + if isIncludeSku && userID == "" { sql += ` ORDER BY t1.id` } else { From c75769495a94eed00606eaf7c87988f746baa79f Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 15:54:33 +0800 Subject: [PATCH 08/12] remove some comment --- business/partner/partner.go | 4 -- business/partner/purchase/jd/store.go | 46 ---------------------- business/partner/purchase/jd/store_sku2.go | 14 ------- 3 files changed, 64 deletions(-) diff --git a/business/partner/partner.go b/business/partner/partner.go index 7327885f9..8af7d7564 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -146,10 +146,6 @@ type IPurchasePlatformHandler interface { GetStoreStatus(ctx *jxcontext.Context, storeID int, vendorStoreID string) (storeStatus int, err error) UpdateStoreCustomID(ctx *jxcontext.Context, vendorStoreID string, storeID int64) (err error) - // SyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) - // // !!!注意,此操作会先清除门店已有的商品,一般用于初始化,小心使用 - // FullSyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) - RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index 039fd747e..43c54fa2c 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -207,24 +207,6 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin return err } -/////////////////////// -func (p *PurchaseHandler) GetAllStoresFromRemote() ([]*model.Store, error) { - ids, err := p.GetAllStoresVendorID(jxcontext.AdminCtx) - if err == nil { - retVal := make([]*model.Store, len(ids)) - for index, id := range ids { - store, err2 := p.ReadStore(jxcontext.AdminCtx, id) - if err2 == nil { - retVal[index] = &store.Store - } else { - return nil, err2 - } - } - return retVal, nil - } - return nil, err -} - func (p *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) { globals.SugarLogger.Debugf("jd RefreshAllStoresID") const stepCount = 3 @@ -274,34 +256,6 @@ func (p *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask return rootTask.ID, err } -// func JdRange2JxRange(jdRanges string) (jxRanges string) { -// coords := strings.Split(jdRanges, ";") -// intCoords := []string{} -// for _, coord := range coords { -// items := strings.Split(coord, ",") -// if len(items) == 2 { -// lng := jxutils.StandardCoordinate2Int(utils.Str2Float64(items[0])) -// lat := jxutils.StandardCoordinate2Int(utils.Str2Float64(items[1])) -// intCoords = append(intCoords, fmt.Sprintf("%d,%d", lng, lat)) -// } -// } -// return strings.Join(intCoords, ";") -// } - -// func JxRange2JdRange(jxRanges string) (jdRanges string) { -// coords := strings.Split(jxRanges, ";") -// intCoords := []string{} -// for _, coord := range coords { -// items := strings.Split(coord, ",") -// if len(items) == 2 { -// lng := jxutils.IntCoordinate2Standard(int(utils.Str2Int64(items[0]))) -// lat := jxutils.IntCoordinate2Standard(int(utils.Str2Int64(items[1]))) -// intCoords = append(intCoords, fmt.Sprintf("%f,%f", lng, lat)) -// } -// } -// return strings.Join(intCoords, ";") -// } - func JdDeliveryType2Jx(deliveryType int) int8 { if deliveryType == jdapi.CarrierNoSelfDelivery { return scheduler.StoreDeliveryTypeByStore diff --git a/business/partner/purchase/jd/store_sku2.go b/business/partner/purchase/jd/store_sku2.go index f6b5a46d8..304e9af7b 100644 --- a/business/partner/purchase/jd/store_sku2.go +++ b/business/partner/purchase/jd/store_sku2.go @@ -211,17 +211,3 @@ func (p *PurchaseHandler) SyncStoreProducts(ctx *jxcontext.Context, parentTask t } return hint, err } - -// func (p *PurchaseHandler) ReorderStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, vendorCatID string, storeSkuList []*partner.StoreSkuInfo) (err error) { -// storeSkuCount := len(storeSkuList) -// if storeSkuCount > 0 { -// if storeSkuCount > jdapi.MaxAddByStoreAndSkusCount { -// storeSkuList = storeSkuList[:jdapi.MaxAddByStoreAndSkusCount] -// } -// vendorSkuIDs := partner.BareStoreSkuInfoList(storeSkuList).GetVendorSkuIDIntList() -// if globals.EnableJdStoreWrite { -// err = getAPI("").AddByStoreAndSkus(utils.Str2Int64(vendorStoreID), vendorSkuIDs) -// } -// } -// return err -// } From 86f37ba367378b44de32541777229c6016438e94 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 16:36:20 +0800 Subject: [PATCH 09/12] up --- business/partner/purchase/jx/phpjx/order.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/partner/purchase/jx/phpjx/order.go b/business/partner/purchase/jx/phpjx/order.go index 0b513e4b4..dda421a47 100644 --- a/business/partner/purchase/jx/phpjx/order.go +++ b/business/partner/purchase/jx/phpjx/order.go @@ -64,7 +64,7 @@ func callbackMsg2Status(msg *CallbackMsg) *model.OrderStatus { func onOrderNew(msg *CallbackMsg, subMsgType int, order *Data4Neworder) (retVal, errCode string, err error) { globals.SugarLogger.Debugf("onOrderNew orderID:%s", msg.ThingID) order.StoreID = int(utils.Str2Int64WithDefault(order.VendorStoreID, 0)) - order.DeliveryType = model.OrderDeliveryTypeStoreSelf + // order.DeliveryType = model.OrderDeliveryTypeStoreSelf order.GoodsOrder.Skus = order.Skus order.VendorID = model.VendorIDJX order.Flag = model.OrderFlagMaskTempJX From b25b7ebe41de0da16b190e08dc5fe7a0bde34e05 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 16:38:20 +0800 Subject: [PATCH 10/12] fk --- business/partner/purchase/jx/phpjx/order.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/business/partner/purchase/jx/phpjx/order.go b/business/partner/purchase/jx/phpjx/order.go index dda421a47..fa079d957 100644 --- a/business/partner/purchase/jx/phpjx/order.go +++ b/business/partner/purchase/jx/phpjx/order.go @@ -64,7 +64,9 @@ func callbackMsg2Status(msg *CallbackMsg) *model.OrderStatus { func onOrderNew(msg *CallbackMsg, subMsgType int, order *Data4Neworder) (retVal, errCode string, err error) { globals.SugarLogger.Debugf("onOrderNew orderID:%s", msg.ThingID) order.StoreID = int(utils.Str2Int64WithDefault(order.VendorStoreID, 0)) - // order.DeliveryType = model.OrderDeliveryTypeStoreSelf + if order.DeliveryType == "" { + order.DeliveryType = model.OrderDeliveryTypeStoreSelf + } order.GoodsOrder.Skus = order.Skus order.VendorID = model.VendorIDJX order.Flag = model.OrderFlagMaskTempJX From 457bd4b0a2531eab007b6ab67f97d19d470c6fd0 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 17:52:51 +0800 Subject: [PATCH 11/12] =?UTF-8?q?GetStoreOrderAfterTime=E6=8E=92=E9=99=A4?= =?UTF-8?q?=E5=86=85=E9=83=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/dao_order.go | 2 ++ business/msghub/msghub.go | 16 ++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 02982381a..afc941ad4 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -179,6 +179,7 @@ func GetStoreOrderAfterTime(db *DaoDB, storeID int, orderTime time.Time, lastOrd FROM goods_order t1 LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id WHERE IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id) = ? AND t1.order_created_at >= ? AND t1.id > ? AND t1.status < ? + AND (t1.flag & ?) = 0 ORDER BY t1.order_created_at DESC, t1.id DESC; ` sqlParams := []interface{}{ @@ -186,6 +187,7 @@ func GetStoreOrderAfterTime(db *DaoDB, storeID int, orderTime time.Time, lastOrd orderTime, lastOrderSeqID, model.OrderStatusEndBegin, + model.OrderFlagMaskFake, } return orderList, GetRows(db, &orderList, sql, sqlParams...) } diff --git a/business/msghub/msghub.go b/business/msghub/msghub.go index 5a14d84a4..6823daaf9 100644 --- a/business/msghub/msghub.go +++ b/business/msghub/msghub.go @@ -107,23 +107,26 @@ func unregisterChan(storeID int, chan2Listen chan<- *ServerMsg) { <-chan2Close } -func getPendingOrderList(storeID int, lastOrderTime time.Time, lastOrderSeqID int64) (orderList []*model.GoodsOrderExt, err error) { +func getPendingOrderList(storeID int, lastOrderTime time.Time, lastOrderSeqID int64) (vendorOrderIDs []string, err error) { if utils.IsTimeZero(lastOrderTime) || time.Now().Sub(lastOrderTime) > maxGetOrderTimeDuration { lastOrderTime = time.Now().Add(-maxGetOrderTimeDuration) } - orderList, err = dao.GetStoreOrderAfterTime(dao.GetDB(), storeID, lastOrderTime, lastOrderSeqID) - return orderList, err + orderList, err := dao.GetStoreOrderAfterTime(dao.GetDB(), storeID, lastOrderTime, lastOrderSeqID) + for _, v := range orderList { + vendorOrderIDs = append(vendorOrderIDs, v.VendorOrderID) + } + return vendorOrderIDs, err } func GetMsg(ctx *jxcontext.Context, storeID int, lastOrderTime time.Time, lastOrderSeqID int64, msgTypeList []string, waitingSecond int) (msg *ServerMsg, err error) { - orderList, err := getPendingOrderList(storeID, lastOrderTime, lastOrderSeqID) + vendorOrderIDs, err := getPendingOrderList(storeID, lastOrderTime, lastOrderSeqID) if err == nil { msg = &ServerMsg{ Type: ServerMsgNewOrder, StoreID: storeID, MsgData: 0, } - if len(orderList) == 0 { + if len(vendorOrderIDs) == 0 { chan2Listen := make(chan *ServerMsg, 1) registerChan(storeID, chan2Listen) pollingDuration := defPollingDuration @@ -149,7 +152,8 @@ func GetMsg(ctx *jxcontext.Context, storeID int, lastOrderTime time.Time, lastOr } close(chan2Listen) } else { - msg.MsgData = len(orderList) + globals.SugarLogger.Debugf("GetMsg vendorOrderIDs:%s", utils.Format4Output(vendorOrderIDs, true)) + msg.MsgData = len(vendorOrderIDs) } } return msg, err From 55fdde9be29512dba11e350fac94fa3802d7760a Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 18:27:53 +0800 Subject: [PATCH 12/12] =?UTF-8?q?LoopMultiStoresVendors=E5=BC=95=E5=85=A5O?= =?UTF-8?q?rgCode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync.go | 36 +++++++++++++++++++++------- business/partner/partner_api.go | 1 - business/partner/purchase/jd/jd.go | 4 ++-- globals/api/apimanager/apimanager.go | 12 ---------- 4 files changed, 30 insertions(+), 23 deletions(-) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 543c09ca6..14498bcfa 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -38,6 +38,11 @@ type SingleStoreHandlerWrapper struct { partner.ISingleStoreHandler } +type tMultiStoreVendorInfo struct { + VendorID int + OrgCode string +} + var ( CurVendorSync VendorSync ) @@ -96,6 +101,20 @@ func (v *VendorSync) GetSingleStoreHandler(vendorID int) partner.ISingleStoreHan return nil } +func getMultiStoreVendorInfoList() (list []*tMultiStoreVendorInfo) { + vendorIDs := partner.GetMultiStoreVendorIDs() + for _, vendorID := range vendorIDs { + orgCodeList := partner.CurAPIManager.GetAppOrgCodeList(vendorID) + for _, v := range orgCodeList { + list = append(list, &tMultiStoreVendorInfo{ + VendorID: vendorID, + OrgCode: v, + }) + } + } + return list +} + 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]) @@ -132,7 +151,7 @@ func (v *VendorSync) SyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categor 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) { - vendorID := batchItemList[0].(int) + vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo) var cats []*model.SkuCategory cond := make(map[string]interface{}) if categoryID > 0 { @@ -142,7 +161,7 @@ func (v *VendorSync) SyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categor } err := dao.GetEntitiesByKV(db, &cats, cond, true) if err == nil { - err = v.syncCategories(ctx, t, vendorID, db, cats, userName) + err = v.syncCategories(ctx, t, vendorInfo.VendorID, db, cats, userName) } if err != nil || categoryID > 0 { return nil, err @@ -150,7 +169,7 @@ func (v *VendorSync) SyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categor cond[model.FieldLevel] = 2 err = dao.GetEntitiesByKV(db, &cats, cond, true) if err == nil { - err = v.syncCategories(ctx, t, vendorID, db, cats, userName) + err = v.syncCategories(ctx, t, vendorInfo.VendorID, db, cats, userName) } return nil, err }) @@ -159,7 +178,8 @@ func (v *VendorSync) SyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categor func (v *VendorSync) SyncReorderCategories(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) { - multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int)) + vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo) + multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID) err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName) if err2 == nil { cat := &model.SkuCategory{} @@ -236,8 +256,8 @@ func (v *VendorSync) SyncSkus(ctx *jxcontext.Context, db *dao.DaoDB, nameIDs []i 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{} - vendorID := batchItemList[0].(int) - multiStoresHandler := v.GetMultiStoreHandler(vendorID) + vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo) + multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID) syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()]) dbField := dao.ConvertDBFieldPrefix(model.VendorNames[multiStoresHandler.GetVendorID()]) skuMap := make(map[int]bool) @@ -266,7 +286,7 @@ func (v *VendorSync) SyncSkus(ctx *jxcontext.Context, db *dao.DaoDB, nameIDs []i 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[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) { var resultList []interface{} skuName := batchItemList[0].(*model.SkuName) @@ -562,7 +582,7 @@ func (v *VendorSync) LoopStoresMap(ctx *jxcontext.Context, db *dao.DaoDB, taskNa } func (v *VendorSync) LoopMultiStoresVendors(ctx *jxcontext.Context, db *dao.DaoDB, taskName string, isAsync bool, isManageIt bool, handler tasksch.WorkFunc) (hint string, err error) { - task := tasksch.NewParallelTask(taskName, tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, handler, partner.GetMultiStoreVendorIDs()) + task := tasksch.NewParallelTask(taskName, tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, handler, getMultiStoreVendorInfoList()) tasksch.HandleTask(task, nil, isManageIt).Run() if !isAsync { result, err2 := task.GetResult(0) diff --git a/business/partner/partner_api.go b/business/partner/partner_api.go index 3e1b15a17..386527933 100644 --- a/business/partner/partner_api.go +++ b/business/partner/partner_api.go @@ -2,7 +2,6 @@ package partner type IAPIManager interface { GetAPI(vendorID int, appOrgCode string) interface{} - GetAPIList(vendorID int) []interface{} GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) } diff --git a/business/partner/purchase/jd/jd.go b/business/partner/purchase/jd/jd.go index 66b30d0f8..7e5e7740d 100644 --- a/business/partner/purchase/jd/jd.go +++ b/business/partner/purchase/jd/jd.go @@ -30,9 +30,9 @@ func GetAPIByToken(token string) (apiObj *jdapi.API) { if token == "" { apiObj = getAPI("") } else { - apiList := partner.CurAPIManager.GetAPIList(model.VendorIDJD) + apiList := partner.CurAPIManager.GetAppOrgCodeList(model.VendorIDJD) for _, v := range apiList { - jdAPI := v.(*jdapi.API) + jdAPI := partner.CurAPIManager.GetAPI(model.VendorIDJD, v).(*jdapi.API) if jdAPI.GetToken() == token { apiObj = jdAPI break diff --git a/globals/api/apimanager/apimanager.go b/globals/api/apimanager/apimanager.go index 88d2c7ca6..6e62c34b6 100644 --- a/globals/api/apimanager/apimanager.go +++ b/globals/api/apimanager/apimanager.go @@ -38,18 +38,6 @@ func (a *APIManager) GetAPI(vendorID int, appOrgCode string) (pfAPI interface{}) return pfAPI } -func (a *APIManager) GetAPIList(vendorID int) (pfAPIList []interface{}) { - switch vendorID { - case model.VendorIDJD: - pfAPIList = []interface{}{api.JdAPI} - case model.VendorIDMTWM: - pfAPIList = []interface{}{api.MtwmAPI} - case model.VendorIDEBAI: - pfAPIList = []interface{}{api.EbaiAPI} - } - return pfAPIList -} - func (a *APIManager) GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) { switch vendorID { case model.VendorIDJD: