批量发货优惠优化

背景

批量发货是通过上传文件进行的,同时操作几千个订单进行发货,比较慢。

处理方式

  主要通过ajax多次请求,大概思路为上传6500条,上传的数据存储到redis中,然后返回总数。
  上传完成后,根据总数量,发送N个ajax请求,每个Ajax请求指定数量,到最后全部处理完成后,再进行结果提示。

ajax请求

$.ajax({
     //upload file 
}).done(function(resp){
      let count = resp.count;
      let batch_num = 100;
      // 总数/单次处理数量
      let need_request_num = Math.ceil(resp.count / batch_num);
      for(let i=0; i<need_request_num; i++) {
            // 分批数据处理
            $.ajax({
                  //
            }).done(function(res2){
                  if (res2.finished) {
                        // 处理完毕
                  } else {
                        // 未处理完毕
                  }
            });
      }
})

php代码

      $cacheKey = $_GET['cache_key'];
      $data = $redis->get($cacheKey);
      $batchNum = $_GET['batch_num'];
      $indexKey = $cacheKey . ':index';
      $tradeData = [];
      while($batchNum--) {
            $index = $redis->incr($indexKey);
            if (isset($data[$index])) {
                  $tradeData[$index] = $data[$index];
            }
      }

      foreach ($tradeData[$index] as $index => $_tradeData) {
            if ($error) {
                  //放入redis中 hset($key, $index, $errmsg);
            }
      }

      $dealedCount = $redis->incryBy($cahceKey . ':count', count($tradedData));
      if ($dealedCount >= count($data)) {
            return ['finished' => true, 'data' => []];
      } else {
            return ['finished' => false];
      }
posted @ 2021-01-11 17:20  FZ-august  阅读(157)  评论(0)    收藏  举报