From adf4407e93983a35cdcdf80c08193c5bc58b2ea3 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, 10 Jan 2020 11:14:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B9=E6=8D=AEskuid=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=85=B3=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 101 +++++++++++++++++------------- controllers/cms_store_sku.go | 9 +-- 2 files changed, 61 insertions(+), 49 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 9936f75ee..de976ca29 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -830,6 +830,10 @@ func UpdateStoresSkusByBind(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBind } }() for _, storeID := range storeIDs { + fmt.Println(storeID) + for _, v := range skuBindInfosMap[storeID] { + fmt.Println(*v) + } skuIDs, err2 := updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosMap[storeID], false) if err = err2; err != nil { dao.Rollback(db) @@ -2943,68 +2947,75 @@ func GetCellForFocusStoreSkus(db *dao.DaoDB, rowNum int, row []string, sheetPara skuMap[skuID] = price } -func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { - var ( - skuNameMap = make(map[int][]*StoreSkuBindSkuInfo) - result1 []interface{} - ) +func FocusStoreSkusBySku(ctx *jxcontext.Context, skuBindInfos []*StoreSkuBindInfo, isAsync, isContinueWhenError bool) (hint string, err error) { + var result1 []interface{} db := dao.GetDB() - skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil) - storeList, err := dao.GetStoreList(db, nil, nil, "") taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: - for _, v := range skuList { - skuNameMap[v.NameID] = append(skuNameMap[v.NameID], &StoreSkuBindSkuInfo{ - SkuID: v.ID, - IsSale: 1, - }) - } - case 1: taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - store := batchItemList[0].(*model.Store) - for k, v := range skuNameMap { - var price int - focusList, _ := dao.GetStoreSkuBindByNameID(db, store.ID, k, model.StoreSkuBindStatusNormal) - //有关注过 - if len(focusList) > 0 { - price = focusList[0].UnitPrice - } else { - var payPercentage int - if store.PayPercentage < 50 { - payPercentage = 70 - } else { - payPercentage = store.PayPercentage - } - priceReferList, _ := dao.GetPriceReferSnapshotNoPage(db, []int{store.CityCode}, nil, []int{k}, utils.Time2Date(time.Now().AddDate(0, 0, -1))) - if len(priceReferList) > 0 { - price = priceReferList[0].MidUnitPrice * payPercentage / 100 - } - } - skuBindInfo := &StoreSkuBindInfo{ - StoreID: store.ID, - NameID: k, - UnitPrice: price, - IsFocus: 1, - Skus: v, - } - retVal = []*StoreSkuBindInfo{skuBindInfo} + var ( + price int + payPercentage int + ) + skuBindInfo := batchItemList[0].(*StoreSkuBindInfo) + storeID := skuBindInfo.StoreID + skuID := skuBindInfo.Skus[0].SkuID + store, err := dao.GetStoreDetail(db, storeID, -1) + if err != nil { + return retVal, err } + skuList, err := dao.GetSkus(db, []int{skuID}, nil, nil, nil) + if err != nil { + return retVal, err + } + if len(skuList) == 0 { + return retVal, fmt.Errorf("未查询到此商品!商品id :[%V]", skuID) + } + focusList, _ := dao.GetStoreSkuBindByNameID(db, storeID, skuList[0].NameID, model.StoreSkuBindStatusNormal) + //有关注过 + if len(focusList) > 0 { + price = focusList[0].UnitPrice + } else { + if store.PayPercentage < 50 { + payPercentage = 70 + } else { + payPercentage = store.PayPercentage + } + priceReferList, _ := dao.GetPriceReferSnapshotNoPage(db, []int{store.CityCode}, nil, []int{skuList[0].NameID}, utils.Time2Date(time.Now().AddDate(0, 0, -1))) + if len(priceReferList) > 0 { + price = priceReferList[0].MidUnitPrice * payPercentage / 100 + } + } + skuBindSkuInfo := &StoreSkuBindSkuInfo{ + SkuID: skuID, + IsSale: 1, + } + var skuBindSkuInfos []*StoreSkuBindSkuInfo + skuBindSkuInfos = append(skuBindSkuInfos, skuBindSkuInfo) + skuBindInfo2 := &StoreSkuBindInfo{ + StoreID: storeID, + NameID: skuList[0].NameID, + UnitPrice: price, + IsFocus: 1, + Skus: skuBindSkuInfos, + } + retVal = []*StoreSkuBindInfo{skuBindInfo2} return retVal, err } - taskParallel := tasksch.NewParallelTask("根据skuID部分关注商品", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, storeList) + taskParallel := tasksch.NewParallelTask("根据skuID部分关注商品", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, skuBindInfos) tasksch.HandleTask(taskParallel, task, true).Run() result1, _ = taskParallel.GetResult(0) - case 2: + case 1: var skuBindInfos []*StoreSkuBindInfo for _, v := range result1 { skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo)) } - UpdateStoresSkusByBind(ctx, skuBindInfos, isAsync, isContinueWhenError) + hint, err = UpdateStoresSkusByBind(ctx, skuBindInfos, isAsync, isContinueWhenError) } return result, err } - taskSeq := tasksch.NewSeqTask2("根据skuID批量部分关注商品", ctx, isContinueWhenError, taskSeqFunc, 3) + taskSeq := tasksch.NewSeqTask2("根据skuID批量部分关注商品", ctx, isContinueWhenError, taskSeqFunc, 2) tasksch.HandleTask(taskSeq, nil, true).Run() if !isAsync { _, err = taskSeq.GetResult(0) diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index dc1c5ae62..ba3b0e9e6 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -610,18 +610,19 @@ func (c *StoreSkuController) GetVendorStoreSkuPrice() { // @Title 根据skuID关注商品,价格为中位价,部分可售 // @Description 根据skuID关注商品,价格为中位价,部分可售 // @Param token header string true "认证token" -// @Param skuIDs formData string true "商品ID列表" +// @Param payload formData string true "json数据,StoreSkuBindInfo对象数组" // @Param isAsync formData bool true "是否异步,缺省是同步" // @Param isContinueWhenError formData bool true "单个同步失败是否继续,缺省false" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /FocusStoreSkusBySku [post] func (c *StoreSkuController) FocusStoreSkusBySku() { - var skuIDList []int + var skuBindInfos []*cms.StoreSkuBindInfo c.callFocusStoreSkusBySku(func(params *tStoreSkuFocusStoreSkusBySkuParams) (retVal interface{}, errCode string, err error) { - if jxutils.Strings2Objs(params.SkuIDs, &skuIDList); err == nil { - retVal, err = cms.FocusStoreSkusBySku(params.Ctx, skuIDList, params.IsAsync, params.IsContinueWhenError) + if err = jxutils.Strings2Objs(params.Payload, &skuBindInfos); err != nil { + return retVal, "", err } + retVal, err = cms.FocusStoreSkusBySku(params.Ctx, skuBindInfos, params.IsAsync, params.IsContinueWhenError) return retVal, "", err }) }