244 lines
8.7 KiB
PHP
244 lines
8.7 KiB
PHP
<?php
|
|
namespace App\Domains\Card\Services;
|
|
|
|
use Carbon\Carbon;
|
|
use App\Core\Service;
|
|
use App\Models\Mongo\TblCard;
|
|
use DB;
|
|
|
|
class CardService extends Service
|
|
{
|
|
protected static $carrierOperators = [1, 0, 2];
|
|
|
|
/**
|
|
* 构造函数
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* 从MongoDB上获取卡详情
|
|
*
|
|
* @param array $simArray
|
|
* @return array
|
|
*/
|
|
public static function getMongoCardsInfo(array $simArray)
|
|
{
|
|
$simArray = array_map('strval', $simArray);
|
|
|
|
$res = TblCard::select(['cNo', 'iccid', 'imsi', 'oType', 'saDate', 'sDate'])
|
|
->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();
|
|
|
|
print_r("停止使用!等待下次一同步数据任务!");exit;
|
|
|
|
//每次查询多少数量
|
|
$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();
|
|
print_r("停止使用!等待下次一同步数据任务!");exit;
|
|
|
|
//每次查询多少数量
|
|
$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 = 48;$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;
|
|
|
|
}
|
|
}
|