批量发货优惠优化
背景
批量发货是通过上传文件进行的,同时操作几千个订单进行发货,比较慢。
处理方式
主要通过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];
}

浙公网安备 33010602011771号