diff --git a/app/Domains/Card/Services/CardService.php b/app/Domains/Card/Services/CardService.php index ec7f1f20..89add559 100644 --- a/app/Domains/Card/Services/CardService.php +++ b/app/Domains/Card/Services/CardService.php @@ -4,6 +4,7 @@ namespace App\Domains\Card\Services; use Carbon\Carbon; use App\Core\Service; use App\Models\Mongo\TblCard; +use DB; class CardService extends Service { @@ -57,4 +58,185 @@ class CardService extends Service 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; + + } }