最近接到了退券任务,要求把几万条不同类型的券码值批量处理,主要的类型有三种,并保存在不同的表中,退券时要修改券码表中的状态,同时将操作过程记录下来,主要问题在于几万条数据先查询,然后分类插入数据库,一条一条处理时间太慢,所以我将数据读取到内存,然后处理,将结果整合重新入库。
8108684592429189 //券码值直接保存在券码表中,券码表也是最终要操作的表
http://t.cn/Rx2GM2q //短链接是旧连接,数据表中存在大小写不同的数据,还要提取出来过滤一遍
http://v.51jifengou.com/t8209952787309387 //长链接存在于长链接表中,后边16位为券码值,需要截取字符串。
首先对三种数据通过正则分类,分别通过不同的表进行处理,然后将处理好的数据整合,批量插入表中。下面直接贴上代码。
contraller层:
public function voucherRefundList(){
$type = I('post.type', '');
if(empty($type) || empty($_FILES['source']['name'])){
$this->error('缺少必要参数');
}
$kbpackageBusines = new KbPackageBusiness();
$res = $kbpackageBusines->importVoidPackageTxt($type);
if (count($res['data']) != count(array_unique($res['data']))) {
$unique_arr = array_unique ( $res['data'] );
// 获取重复数据的数组
$repeat_arr = array_diff_assoc ( $res['data'], $unique_arr );
foreach ($repeat_arr as $v=>$k){
$res = $k;