whereIn('cNo', $simArray)->get(); $values = []; foreach ($res as $value) { $activated_at = $value['saDate'] ? Carbon::createFromTimestampMs(strval($value['saDate'])) : null; if ($activated_at && $activated_at < Carbon::parse('2000-01-01 00:00:00')) { $activated_at = null; } $sim = intval(preg_replace('/\D/', '', $value['cNo'])); $values[$sim] = [ 'sim' => $sim, 'imsi' => $value['imsi'] ?? '', 'iccid' => $value['iccid'] ?? '', 'carrier_operator' => self::$carrierOperators[$value['oType']] ?? 255, 'activated_at' => $activated_at, 'virtual_activated_at' => $activated_at, 'created_at' => $value['sDate'] ? Carbon::createFromTimestampMs(strval($value['sDate'])) : null, 'updated_at' => date('Y-m-d H:i:s'), ]; } return $values; } /** * 查询MONGODB 卡主表 tblCard */ public static function getMongoCardList(){ set_time_limit(-1); ini_set('memory_limit', '4096m'); //开始查询时间 $time = time(); //每次查询多少数量 $limit = 100000; //总数 $count = TblCard::count(); //$count = 200; //每次查询100000条,iCount为次数 $iCount = ceil($count/$limit); //停止执行,等待下一步数据需求 print_r($count);exit; $b = 0; for ($i = 0;$i<$iCount;$i++){ //从第几天开始查询 $page = $i*$limit; $res = TblCard::select(['cNo', 'iccid', 'imsi', 'oType', 'saDate', 'sDate','comId','pFlow','sPeriod','cDate']) ->offset($page) ->limit($limit) ->orderBy("_id") ->get(); foreach ($res as $value) { //print_r($value['cNo'].PHP_EOL);exit; $b++; //$sDate_at = $value['sDate'] ? date('Y-m-d H:i:s',strval($value['sDate'])/1000) : null; $saDate_at = $value['saDate'] ? Carbon::createFromTimestampMs(strval($value['saDate'])) : null; $sDate_at = $value['sDate'] ? Carbon::createFromTimestampMs(strval($value['sDate'])) : null; $cDate_at = $value['cDate'] ? Carbon::createFromTimestampMs(strval($value['cDate'])) : null; $values = [ 'cNo' => $value['cNo'], 'iccid' => $value['iccid'] ?? '', 'imsi' => $value['imsi'] ?? '', 'oType' => self::$carrierOperators[$value['oType']] ?? 255, 'saDate' => $saDate_at, 'sDate' => $sDate_at, 'comId' => $value['comId'] ? $value['comId'] : null, 'pFlow' => $value['pFlow'] ? $value['pFlow'] : null, 'sPeriod' => $value['sPeriod'] ? $value['sPeriod'] : null, 'updated_at' => date('Y-m-d H:i:s'), 'cDate' => $cDate_at, ]; DB::connection('pgsql')->table('virtual_mongodb_card')->insert($values); //执行一条时间 $end_time = time()-$time; print_r($b."_".$end_time."_".$count);print_r(PHP_EOL); } $total_time = time(); $time3 = $total_time-$time; print_r("=============================================================================================".$time3."======================================================="); } $zhen_total_time = time(); $total_end_time = $zhen_total_time-$time; print_r("=============================================================================================".$total_end_time."======================================================="); print_r("执行完毕"); exit; } /** * 处理数据,筛选VD没有的表 */ public static function getVdNoCard(){ /** * 查询从MONGODB同步的数据表 virtual_mongodb_card * */ set_time_limit(-1); ini_set('memory_limit', '4096m'); //开始查询时间 $time = time(); //每次查询多少数量 $limit = 100000; //总数 $count = DB::selectOne(sprintf("SELECT count(*) FROM virtual_mongodb_card;")); $count = (array)$count; $count = $count['count']; //$count = 200; //每次查询100000条,iCount为次数 $iCount = ceil($count/$limit); //$iCount = 62; $b = 0; for ($i = 0;$i<$iCount;$i++){ //从第几天开始查询 $page = $i*$limit; //分批次查询数量 $sql = "SELECT * FROM virtual_mongodb_card ORDER BY id ASC offset $page LIMIT $limit "; $res = DB::select($sql); //循环判断数据 foreach ($res as $value) { $value = (array)$value; //判断卡号cNo 是否在表 cards中 $cNo = $value['cNo']; //排查卡号中是否是村数字,cards的sim是Interge $cards_res = null; if (is_numeric($cNo)) { //排除掉长度超过20位的,cards长度超过20位会报错 if (strlen($cNo) < 20){ $cards_sql = "SELECT * FROM cards where sim='$cNo' limit 1"; $cards_res = DB::select($cards_sql); } } $b++; if ($cards_res != null){ //不为空,不执行插入,跳过 }else{ //为空,将VD没有的卡数据,插入到表 virtual_not_vd_card 中 //整理参数 $values = [ 'cNo' => $value['cNo'], 'iccid' => $value['iccid'] ?? '', 'imsi' => $value['imsi'] ?? '', 'oType' => self::$carrierOperators[$value['oType']] ?? 255, 'saDate' => $value['saDate'], 'sDate' => $value['sDate'], 'updated_at' => date('Y-m-d H:i:s'), 'cDate' => $value['cDate'], 'mid' => $value['id'], ]; //DB::connection('pgsql')->table('virtual_not_vd_card')->insert($values); //判断virtual_not_vd_card中是否存在 //不存在 则添加 存在则修改 $not_vd_card_sql = 'SELECT * FROM virtual_not_vd_card where "cNo" ='."'$cNo'".' limit 1'; $not_vd_card_res = DB::select($not_vd_card_sql); if ($not_vd_card_res != null){ //不为空,修改 DB::connection('pgsql')->table('virtual_not_vd_card')->where("cNo",$value['cNo'])->update($values); }else{ //为空,新增 DB::connection('pgsql')->table('virtual_not_vd_card')->insert($values); } } //执行一条时间 $end_time = time()-$time; print_r($b."_".$end_time."_".$count);print_r(PHP_EOL); } $total_time = time(); $time3 = $total_time-$time; print_r("====================================一个批次花费=========================================================".$time3."======================================================="); } $zhen_total_time = time(); $total_end_time = $zhen_total_time-$time; print_r("=============================================================================================".$total_end_time."======================================================="); print_r("执行完毕"); exit; } }