diff --git a/business/jxstore/yonghui/yonghui.go b/business/jxstore/yonghui/yonghui.go index 1bbb1da35..a32ab5727 100644 --- a/business/jxstore/yonghui/yonghui.go +++ b/business/jxstore/yonghui/yonghui.go @@ -104,130 +104,108 @@ func LoadExcelBinByYongHui(ctx *jxcontext.Context, reader io.Reader, isAsync, Is goodsIDListForPutAway []interface{} ) db := dao.GetDB() - taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { - switch step { - case 0: - //读取excel文件 - xlsx, err := excelize.OpenReader(reader) - if err != nil { - return "", err + + //读取excel文件 + xlsx, err := excelize.OpenReader(reader) + if err != nil { + return "", err + } + for k := range sheetMap { + sheetParam := sheetMap[k] + rows, _ := xlsx.GetRows(k) + for rowNum, row := range rows { + if rowNum < sheetParam.SkuRow { + continue } - for k := range sheetMap { - sheetParam := sheetMap[k] - rows, _ := xlsx.GetRows(k) - for rowNum, row := range rows { - if rowNum < sheetParam.SkuRow { - continue - } - GetCellIntoMap(sheetParam.SkuIDCol, sheetParam.SkuPriceCol, sheetParam.OrgSkuIdCol, sheetParam.OrgSkuPriceCol, skuMap, row, k, rowNum) - if len(skuMap) < 1 { - errMsg += fmt.Sprintf("读取Excel数据失败,Excel格式排版可能发生了变化!sheetName: [%v]\n", k) - } - } - if errMsg != "" { - return "", errors.New(errMsg) - } + GetCellIntoMap(sheetParam.SkuIDCol, sheetParam.SkuPriceCol, sheetParam.OrgSkuIdCol, sheetParam.OrgSkuPriceCol, skuMap, row, k, rowNum) + if len(skuMap) < 1 { + errMsg += fmt.Sprintf("读取Excel数据失败,Excel格式排版可能发生了变化!sheetName: [%v]\n", k) } - case 1: - //获取微盟所有商品 - goodsList, err = GetWeiMobGoodsList() - if err != nil { - baseapi.SugarLogger.Errorf("GetWeiMobGoodsList error:%v", err) - } - taskFunc2 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - v := batchItemList[0].(*weimobapi.GoodsInfo) - goodsDetail, err := api.WeimobAPI.QueryGoodsDetail(v.GoodsID) - if err != nil { - baseapi.SugarLogger.Errorf("QueryGoodsDetail error:%v", err) - } - v.GoodsDetailInfo = goodsDetail - return retVal, err - } - taskParallel2 := tasksch.NewParallelTask("获取微盟商品", tasksch.NewParallelConfig().SetParallelCount(parallelCount), ctx, taskFunc2, goodsList) - tasksch.HandleTask(taskParallel2, task, true).Run() - _, err = taskParallel2.GetResult(0) - case 2: - //找出excel上有,微盟没有的,有就列出报错,不进行更新 - goodsInfoAndDetailMap := GetGoodsInfoAndDetailMap(goodsList) - skuMapList := GetSkuMapList(skuMap) - taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - k := batchItemList[0].(string) - //表示excel上有,微盟上没有 - if goodsInfoAndDetailMap[k] == nil { - return "", errors.New(fmt.Sprintf("在微盟上未找到该商品!excel商品ID : [%v]\n", k)) - } - return retVal, err - } - taskParallel := tasksch.NewParallelTask("对比Excel上有微盟上没有的商品", tasksch.NewParallelConfig().SetIsContinueWhenError(IsContinueWhenError), ctx, taskFunc, skuMapList) - tasksch.HandleTask(taskParallel, task, true).Run() - _, err = taskParallel.GetResult(0) - case 3: - //找出微盟上有,excel上没有的,有就更新,没有就下架 - taskFunc3 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - goods := batchItemList[0].(*weimobapi.GoodsInfo) - goodsDetail := goods.GoodsDetailInfo - spuCode := goodsDetail.OuterGoodsCode - if spuCode != "" { - //如果微盟商品里找得到excel中的商品 - if skuMap[spuCode] != 0 { - //获取京西库商品 - skuList, _ := dao.GetSkus(db, nil, []int{int(utils.Str2Int64(goodsDetail.SkuMap.SingleSku.OuterSkuCode))}, nil, nil) - if len(skuList) == 0 { - return "", errors.New(fmt.Sprintf("在京西库中未找到该商品!name_id : [%v]\n", goodsDetail.SkuMap.SingleSku.OuterSkuCode)) - } else { - if skuList[0].Unit == "份" { - if goodsDetail.SkuMap.SingleSku.B2CSku.Weight == 0 { - costPrice = skuMap[spuCode] - } else { - costPrice = Float64Round(0.5 / goodsDetail.SkuMap.SingleSku.B2CSku.Weight * skuMap[spuCode]) - } - } else { - costPrice = skuMap[spuCode] - } - // if errMsg == "" { - _, _, err = updateWeiMobGoods(costPrice, skuMap[spuCode], goodsDetail) - // } - } - } else { - //下架微盟商品 - retVal = []int64{goodsDetail.GoodsID} - } - } - return retVal, err - } - taskParallel3 := tasksch.NewParallelTask("根据获取的微盟所有商品并更新", tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetIsContinueWhenError(IsContinueWhenError), ctx, taskFunc3, goodsList) - tasksch.HandleTask(taskParallel3, task, true).Run() - goodsIDListForPutAwayInterface, err2 := taskParallel3.GetResult(0) - if err = err2; err != nil { - return "", err - } - goodsIDListForPutAway = goodsIDListForPutAwayInterface - case 4: - // 批量下架微盟商品 - // if errMsg == "" { - taskFunc4 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - int64Slice := []int64{} - for _, v := range batchItemList { - int64Slice = append(int64Slice, v.(int64)) - } - PutAwayWeiMobSku(int64Slice) - return retVal, err - } - taskParallel4 := tasksch.NewParallelTask("下架微盟商品", tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetBatchSize(UpdateGoodsShelfStatusCount), ctx, taskFunc4, goodsIDListForPutAway) - tasksch.HandleTask(taskParallel4, task, true).Run() - _, err = taskParallel4.GetResult(0) - // } } - return result, err + if errMsg != "" { + return "", errors.New(errMsg) + } } - taskSeq := tasksch.NewSeqTask("读取永辉Excel文件修改微盟商品价格可售状态-序列任务", ctx, taskSeqFunc, 5) - tasksch.HandleTask(taskSeq, nil, true).Run() - if !isAsync { - _, err = taskSeq.GetResult(0) - hint = "1" - } else { - hint = taskSeq.GetID() + + //获取微盟所有商品 + goodsList, err = GetWeiMobGoodsList() + if err != nil { + baseapi.SugarLogger.Errorf("GetWeiMobGoodsList error:%v", err) } + task := tasksch.NewParallelTask("获取微盟商品", tasksch.NewParallelConfig().SetIsContinueWhenError(IsContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + v := batchItemList[0].(*weimobapi.GoodsInfo) + goodsDetail, err := api.WeimobAPI.QueryGoodsDetail(v.GoodsID) + if err != nil { + baseapi.SugarLogger.Errorf("QueryGoodsDetail error:%v", err) + } + v.GoodsDetailInfo = goodsDetail + return retVal, err + }, goodsList) + tasksch.HandleTask(task, nil, true).Run() + + //找出excel上有,微盟没有的,有就列出报错,不进行更新 + goodsInfoAndDetailMap := GetGoodsInfoAndDetailMap(goodsList) + skuMapList := GetSkuMapList(skuMap) + task1 := tasksch.NewParallelTask("对比Excel上有微盟上没有的商品", tasksch.NewParallelConfig().SetIsContinueWhenError(IsContinueWhenError), ctx, + func(task1 *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + k := batchItemList[0].(string) + //表示excel上有,微盟上没有 + if goodsInfoAndDetailMap[k] == nil { + return "", errors.New(fmt.Sprintf("在微盟上未找到该商品!excel商品ID : [%v]\n", k)) + } + return retVal, err + }, skuMapList) + tasksch.HandleTask(task1, nil, true).Run() + + //找出微盟上有,excel上没有的,有就更新,没有就下架 + task2 := tasksch.NewParallelTask("根据获取的微盟所有商品并更新", tasksch.NewParallelConfig().SetIsContinueWhenError(IsContinueWhenError), ctx, + func(task1 *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + goods := batchItemList[0].(*weimobapi.GoodsInfo) + goodsDetail := goods.GoodsDetailInfo + spuCode := goodsDetail.OuterGoodsCode + if spuCode != "" { + //如果微盟商品里找得到excel中的商品 + if skuMap[spuCode] != 0 { + //获取京西库商品 + skuList, _ := dao.GetSkus(db, nil, []int{int(utils.Str2Int64(goodsDetail.SkuMap.SingleSku.OuterSkuCode))}, nil, nil) + if len(skuList) == 0 { + return "", errors.New(fmt.Sprintf("在京西库中未找到该商品!name_id : [%v]\n", goodsDetail.SkuMap.SingleSku.OuterSkuCode)) + } else { + if skuList[0].Unit == "份" { + if goodsDetail.SkuMap.SingleSku.B2CSku.Weight == 0 { + costPrice = skuMap[spuCode] + } else { + costPrice = Float64Round(0.5 / goodsDetail.SkuMap.SingleSku.B2CSku.Weight * skuMap[spuCode]) + } + } else { + costPrice = skuMap[spuCode] + } + // if errMsg == "" { + _, _, err = updateWeiMobGoods(costPrice, skuMap[spuCode], goodsDetail) + // } + } + } else { + //下架微盟商品 + retVal = []int64{goodsDetail.GoodsID} + } + } + return retVal, err + }, goodsList) + tasksch.HandleTask(task2, nil, true).Run() + goodsIDListForPutAwayInterface, err := task2.GetResult(0) + goodsIDListForPutAway = goodsIDListForPutAwayInterface + // 批量下架微盟商品 + task3 := tasksch.NewParallelTask("下架微盟商品", tasksch.NewParallelConfig().SetIsContinueWhenError(IsContinueWhenError), ctx, + func(task1 *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + int64Slice := []int64{} + for _, v := range batchItemList { + int64Slice = append(int64Slice, v.(int64)) + } + PutAwayWeiMobSku(int64Slice) + return retVal, err + }, goodsIDListForPutAway) + tasksch.HandleTask(task3, nil, true).Run() return hint, err }