新增电话二维码

新增车辆导入更新
qifengyuze
zhaocheng 5 years ago
parent 4fbc1ae1ea
commit 589bc4a1d2
  1. 13
      common/libs/MyLib.php
  2. 70
      common/models/CarT.php
  3. 1
      frontend/controllers/CommonController.php
  4. 392
      frontend/controllers/FinanceController.php
  5. 122
      frontend/controllers/PhoneController.php
  6. 27
      frontend/views/car/info.php
  7. 79
      frontend/views/finance/car-info-import-index.php
  8. 28
      frontend/web/js/jquery.qrcode.min.js
  9. 136
      frontend/web/phone.html
  10. BIN
      frontend/web/print/car_info_import_temp.xlsx
  11. BIN
      frontend/web/print/install_lodop64.exe

@ -127,7 +127,7 @@ class MyLib {
return $return_str; return $return_str;
} }
static public function Post($curlPost,$url,$cookie_flag=false) static public function Post($curlPost, $url, $cookie_flag = false, $headers = [])
{ {
$cookie = \Yii::$app->getRuntimePath() . '/cookie_tmp.txt'; $cookie = \Yii::$app->getRuntimePath() . '/cookie_tmp.txt';
$curl = curl_init(); $curl = curl_init();
@ -145,6 +145,9 @@ class MyLib {
} }
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (count($headers) > 0) {
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
}
$return_str = curl_exec($curl); $return_str = curl_exec($curl);
curl_close($curl); curl_close($curl);
return $return_str; return $return_str;
@ -357,4 +360,12 @@ class MyLib {
return $i; return $i;
} }
static public function StartsWith($haystack, $needle){
return strncmp($haystack, $needle, strlen($needle)) === 0;
}
static public function EndsWith($haystack, $needle)
{
return $haystack != '' && $needle != '' && substr_compare($haystack, $needle, -strlen($needle)) === 0;
}
} }

@ -7,10 +7,10 @@ use Yii;
/** /**
* This is the model class for table "car_t". * This is the model class for table "car_t".
* *
* @property integer $id * @property int $id
* @property integer $user_id * @property int $user_id
* @property integer $car_type_id * @property int $car_type_id
* @property integer $car_use_id * @property int $car_use_id
* @property string $car_no * @property string $car_no
* @property string $factory_model * @property string $factory_model
* @property string $car_model * @property string $car_model
@ -18,32 +18,35 @@ use Yii;
* @property string $insurer1_date * @property string $insurer1_date
* @property string $insurer2_date * @property string $insurer2_date
* @property string $id_man * @property string $id_man
* @property string $id_man_number * @property string $id_man_number 被保险人证件号码
* @property string $engine_no * @property string $engine_no
* @property string $car_frame_no * @property string $car_frame_no
* @property integer $seats * @property int $seats
* @property string $car_man * @property string $car_man
* @property string $car_man_phone * @property string $car_man_phone
* @property string $remark * @property string $remark
* @property integer $location * @property int $location
* @property string $print_date * @property string $print_date
* @property string $car_man_number * @property string $car_man_number
* @property integer $is_track
* @property integer $times
* @property string $old_user
* @property string $company * @property string $company
* @property string $op_user1 * @property string $op_user1
* @property string $op_user2 * @property string $op_user2
* @property string $from_src * @property string $from_src 来源
* @property string $created_at * @property string $created_at
* @property string $updated_at * @property string $updated_at
* @property integer $op1_id * @property int $biaozhu
* @property integer $op2_id * @property int $is_xubao 是否续保
* @property string $id_man_phone
* @property string $purchase_price
* @property string $car_man_type 车主证件类型
* @property int $op1_id 新保ID
* @property int $op2_id 续保ID
* @property string $purchase_value
*/ */
class CarT extends \common\models\Base class CarT extends \yii\db\ActiveRecord
{ {
/** /**
* @inheritdoc * {@inheritdoc}
*/ */
public static function tableName() public static function tableName()
{ {
@ -51,21 +54,22 @@ class CarT extends \common\models\Base
} }
/** /**
* @inheritdoc * {@inheritdoc}
*/ */
public function rules() public function rules()
{ {
return [ return [
[['user_id'], 'required'], [['user_id', 'car_type_id', 'car_use_id', 'seats', 'location', 'biaozhu', 'is_xubao', 'op1_id', 'op2_id'], 'integer'],
[['user_id', 'car_type_id', 'car_use_id','seats','location','op1_id', 'op2_id'], 'integer'], [['register_date', 'insurer1_date', 'insurer2_date', 'print_date', 'created_at', 'updated_at'], 'safe'],
[['register_date', 'insurer1_date', 'insurer2_date','id_man','id_man_number','print_date','car_man_number', 'created_at', 'updated_at'], 'safe'], [['purchase_price', 'purchase_value'], 'number'],
[['car_no', 'factory_model', 'car_model', 'engine_no', 'car_frame_no','id_man_phone'], 'string', 'max' => 50], [['car_no', 'factory_model', 'car_model', 'engine_no', 'car_frame_no', 'car_man_phone', 'id_man_phone'], 'string', 'max' => 50],
[['car_man','car_man_phone','remark','company','op_user1','op_user2','from_src'], 'string', 'max' => 200], [['id_man', 'id_man_number', 'car_man', 'car_man_number', 'company', 'op_user1', 'op_user2', 'from_src', 'car_man_type'], 'string', 'max' => 100],
[['remark'], 'string', 'max' => 200],
]; ];
} }
/** /**
* @inheritdoc * {@inheritdoc}
*/ */
public function attributeLabels() public function attributeLabels()
{ {
@ -78,29 +82,33 @@ class CarT extends \common\models\Base
'factory_model' => 'Factory Model', 'factory_model' => 'Factory Model',
'car_model' => 'Car Model', 'car_model' => 'Car Model',
'register_date' => 'Register Date', 'register_date' => 'Register Date',
'insurer1_date' => 'Insurer 1 Date', 'insurer1_date' => 'Insurer1 Date',
'insurer2_date' => 'Insurer 2 Date', 'insurer2_date' => 'Insurer2 Date',
'id_man' => 'ID Man', 'id_man' => 'Id Man',
'id_man_number' => 'ID Number', 'id_man_number' => 'Id Man Number',
'engine_no' => 'Engine No', 'engine_no' => 'Engine No',
'car_frame_no' => 'Car Frame No', 'car_frame_no' => 'Car Frame No',
'seats' => 'Seats', 'seats' => 'Seats',
'car_man' => 'Car Man', 'car_man' => 'Car Man',
'car_man_phone' => 'Phone', 'car_man_phone' => 'Car Man Phone',
'remark' => 'Remark', 'remark' => 'Remark',
'location' => 'Location', 'location' => 'Location',
'print_date' => 'Print Date', 'print_date' => 'Print Date',
'car_man_number' => 'Car Man Number', 'car_man_number' => 'Car Man Number',
'is_track' => 'Is Track',
'times' => 'Times',
'old_user' => 'Old User',
'company' => 'Company', 'company' => 'Company',
'op_user1' => 'Op User1', 'op_user1' => 'Op User1',
'op_user2' => 'Op User2', 'op_user2' => 'Op User2',
'op_user3' => 'Op User3',
'from_src' => 'From Src', 'from_src' => 'From Src',
'created_at' => 'Created At', 'created_at' => 'Created At',
'updated_at' => 'Updated At', 'updated_at' => 'Updated At',
'biaozhu' => 'Biaozhu',
'is_xubao' => 'Is Xubao',
'id_man_phone' => 'Id Man Phone',
'purchase_price' => 'Purchase Price',
'car_man_type' => 'Car Man Type',
'op1_id' => 'Op1 ID',
'op2_id' => 'Op2 ID',
'purchase_value' => 'Purchase Value',
]; ];
} }

@ -380,6 +380,7 @@ class CommonController extends \yii\web\Controller
$data['status'] = 'SUCCESS'; $data['status'] = 'SUCCESS';
$data['fileUrl'] = '/'.$filename; $data['fileUrl'] = '/'.$filename;
$data['OriginfileName'] = $img->getBaseName();
} }
return $data; return $data;
} }

@ -33,6 +33,7 @@ use common\models\GzT;
use common\models\InsurerCompany2T; use common\models\InsurerCompany2T;
use common\models\InsurerCompanyT; use common\models\InsurerCompanyT;
use common\models\InsurerTypeT; use common\models\InsurerTypeT;
use common\models\LinkmanT;
use common\models\OrderCaiwuT; use common\models\OrderCaiwuT;
use common\models\OrderGiftT; use common\models\OrderGiftT;
use common\models\OrderT; use common\models\OrderT;
@ -7532,7 +7533,6 @@ class FinanceController extends \frontend\controllers\UserBaseController
'my_type1_query_hebao' => $my_type1_query_hebao, 'my_type1_query_hebao' => $my_type1_query_hebao,
'type_query' => $type_query, 'type_query' => $type_query,
'type3_query' => $type3_query, 'type3_query' => $type3_query,
'back_params' => $back_params,
'pay_order_users' => $pay_order_users, 'pay_order_users' => $pay_order_users,
'pay_chexian' => $pay_chexian, 'pay_chexian' => $pay_chexian,
'pay_nochexian' => $pay_nochexian, 'pay_nochexian' => $pay_nochexian,
@ -8049,4 +8049,394 @@ class FinanceController extends \frontend\controllers\UserBaseController
return $result; return $result;
} }
public function actionCarInfoImportIndex()
{
$request = Yii::$app->request;
return $this->render('car-info-import-index');
}
public function actionCarInfoImport()
{
set_time_limit(0);
ini_set('memory_limit', '3072M');
$this->pushInfoToHtml('开始处理上传文件...');
$request = Yii::$app->request;
$base_filename = $request->get('urlfile');
$upload_filename = $request->get('filename');
$this->pushInfoToHtml('文件名:' . $upload_filename);
$web_path = Yii::$app->getBasePath() . '/../frontend/web';
$filename = $web_path . $base_filename;
$this->pushInfoToHtml('开始加载excel文件...');
$reader = new \PHPExcel_Reader_Excel2007();
if(!$reader->canRead($filename)) {
$reader = new \PHPExcel_Reader_Excel5();
if(!$reader->canRead($filename)) {
$this->pushInfoToHtml('加载失败,不能读取文件...');
exit();
}
}
$data = $reader->load($filename)->getSheet(0)->toArray('', true, true);
$total = count($data);
$this->pushInfoToHtml('加载完成,预计'. $total .'条数据...');
$statistical_information = [
'total_all' => $total - 1,
'total_skip' => 0,
'total_insert' => 0,
'total_update' => 0,
'total_conflict' => 0,
'total_handle' => 0,
];
$from_src = 'BMC' . date('Ymd') . strtoupper(substr(md5($filename), 0, 6));
$file_path = Yii::getAlias('@frontend/web');
$destination = '/upload/outlier_data/';
if (!is_dir($file_path . $destination)) {
@mkdir($file_path . $destination, 0777);
}
$filename = md5('outlier_data_' . date('Y-m-d-H-i')) . '.csv';
$this->pushInfoToHtml('开始处理...');
for ($i = 1; $i < $total; $i++) {
$item = $data[$i];
$this->pushInfoToHtml('第' . ($i) . '条:' . $item[1]);
$import_info = ['linkmans'=>[], 'linkphones'=>[]];
$import_info['register_date'] = trim(sprintf("%s",$item[0]));
$import_info['car_no'] = trim(sprintf("%s",$item[1]));
$import_info['car_frame_no'] = trim(sprintf("%s",$item[2]));
$import_info['engine_no'] = trim(sprintf("%s",$item[3]));
$import_info['factory_model'] = trim(sprintf("%s",$item[4]));
$import_info['car_year'] = trim(sprintf("%s", $item[5]));
$import_info['factory_model'] .= ' ' . trim(sprintf("%s", $item[6]));
$import_info['car_man'] = trim(sprintf("%s",$item[7]));
$import_info['car_number'] = trim(sprintf("%s",$item[8]));
$import_info['phone'] = trim(sprintf("%s",$item[9]));
$import_info['purchase_value'] = trim(sprintf("%s",$item[10]));
$import_info['id_man'] = trim(sprintf("%s",$item[11]));
$import_info['id_number'] = trim(sprintf("%s",$item[12]));
$import_info['id_phone'] = trim(sprintf("%s",$item[13]));
$import_info['company'] = trim(sprintf("%s",$item[14]));
$import_info['insurer1_date'] = trim(sprintf("%s",$item[15]));
$import_info['insurer2_date'] = trim(sprintf("%s",$item[16]));
$import_info['insurer_type'] = trim(sprintf("%s",$item[17]));
$import_info['linkmans'][] = trim(sprintf("%s",$item[18]));
$import_info['linkphones'][] = trim(sprintf("%s",$item[19]));
$import_info['linkmans'][] = trim(sprintf("%s",$item[20]));
$import_info['linkphones'][] = trim(sprintf("%s",$item[21]));
$import_info['linkmans'][] = trim(sprintf("%s",$item[22]));
$import_info['linkphones'][] = trim(sprintf("%s",$item[23]));
$import_info['car_no'] = $import_info['car_no'] == '*' ? '' : $import_info['car_no'];
if ($import_info['car_frame_no'] == '' && $import_info['car_no'] == '' && $import_info['engine_no'] == '') {
$statistical_information['total_skip']++;
unset($item,$data[$i]);
$statistical_information['total_all'] --;
continue;
}
$tran = CarT::getDb()->beginTransaction();
try {
$ret = $this->checkCarProject($from_src, $import_info);
switch($ret['code']){
case 1:
$this->pushInfoToHtml('项目存在,做更新处理...');
$ret = $this->updateCarInfo($ret['id'], $import_info, $from_src, false, true);
$statistical_information['total_update']++;
break;
case 2:
$this->pushInfoToHtml('空行或已导入,跳过...');
$statistical_information['total_skip']++;
break;
case 3:
$this->pushInfoToHtml('新增数据,做插入处理...');
$ret = $this->createCarInfo($import_info, $from_src);
$statistical_information['total_insert']++;
break;
}
$tran->commit();
}catch(\Exception $e){
$tran->rollBack();
$this->pushInfoToHtml('操作失败:' . $e->getMessage());
}
if(!$ret['success']){
$data[$i][] = $ret['msg'];
$this->outlierDataHandle($data[$i], $file_path . $destination . $filename);
$statistical_information['total_handle']++;
}
unset($item, $data[$i], $ret);
}
$this->pushInfoToHtml('操作成功'. "数据总计{$statistical_information['total_all']}条,
冲突{$statistical_information['total_conflict']},
更新{$statistical_information['total_update']},
跳过{$statistical_information['total_skip']},
插入{$statistical_information['total_insert']},
异常{$statistical_information['total_handle']}");
echo '<script>parent.window.layer.closeAll();parent.window.onbeforeunload = null;</script>';
exit();
}
public function actionCarInfoBhxUpdate()
{
set_time_limit(0);
ini_set('memory_limit', '3072M');
$this->pushInfoToHtml('开始处理上传文件...');
$request = Yii::$app->request;
$base_filename = $request->get('urlfile');
$upload_filename = $request->get('filename');
$this->pushInfoToHtml('文件名:' . $upload_filename);
$web_path = Yii::$app->getBasePath() . '/../frontend/web';
$filename = $web_path . $base_filename;
$this->pushInfoToHtml('开始加载excel文件...');
$reader = new \PHPExcel_Reader_Excel2007();
if(!$reader->canRead($filename)) {
$reader = new \PHPExcel_Reader_Excel5();
if(!$reader->canRead($filename)) {
$this->pushInfoToHtml('加载失败,不能读取文件...');
exit();
}
}
$data = $reader->load($filename)->getSheet(0)->toArray('', true, true);
$total = count($data);
$this->pushInfoToHtml('加载完成,预计'. $total .'条数据...');
$statistical_information = [
'total_all' => $total - 1,
'total_skip' => 0,
'total_insert' => 0,
'total_update' => 0,
'total_error' => 0,
'total_error_arr' => [],
];
$this->pushInfoToHtml('开始处理...');
for ($i = 1; $i < $total; $i++) {
$item = $data[$i];
$this->pushInfoToHtml('第' . ($i + 1) . '条:' . $item[0]);
$car_no = trim(sprintf("%s", $item[0]));
$car_man = trim(sprintf("%s", $item[1]));
$factory_model = trim(sprintf("%s", $item[2]));
$engine_no = trim(sprintf("%s", $item[3]));
$car_frame_no = trim(sprintf("%s", $item[4]));
$register_date = trim(sprintf("%s", $item[5]));
$company = trim(sprintf("%s", $item[6]));
$insurer1_date = trim(sprintf("%s", $item[7]));
$insurer2_date = trim(sprintf("%s", $item[8]));
$id_man = trim(sprintf("%s", $item[9]));
$id_number = trim(sprintf("%s", $item[10]));
$car_info = CarT::findOne(['car_frame_no' => $car_frame_no]);
if(isset($car_info)) {
if ($car_info->location > 2 && $car_info->insurer1_date >= $insurer1_date) {
$this->pushInfoToHtml('空行或已导入,跳过...');
$statistical_information['total_skip'] ++ ;
continue;
}
$car_info->car_no = $car_no!= '' ? $car_no : $car_info->car_no;
$car_info->car_man = $car_info->car_man!= '' ? $car_info->car_man : $car_man;
$car_info->register_date = $register_date;
$car_info->factory_model = $factory_model;
//对比原信息是否包含待更新信息(删除星号)
$car_info->engine_no = $car_info->engine_no != '' && MyLib::StartsWith($car_info->engine_no,rtrim($engine_no,'*')) ? $car_info->engine_no : $engine_no;
$insurer1_flag = strtotime(date('Y',strtotime($insurer1_date))) > strtotime(date('Y',strtotime($car_info->insurer1_date)));
if($insurer1_flag){
$car_info->insurer1_date = $insurer1_date;
}
$insurer2_flag = strtotime(date('Y',strtotime($insurer2_date))) > strtotime(date('Y',strtotime($car_info->insurer2_date)));
if($insurer2_flag) {
$car_info->insurer2_date = $insurer2_date;
}
if(($car_info->insurer1_date != '' && $insurer1_flag) || ($car_info->insurer2_date != '' && $insurer2_flag) || $car_info->insurer1_date == '' || $car_info->insurer2_date == ''){
$car_info->company = $company != '' ? $company : $car_info->company;
$car_info->id_man = $car_info->id_man != '' && MyLib::StartsWith($car_info->id_man,rtrim($id_man,'*')) ? $car_info->id_man : $id_man;
$car_info->id_man_number = $car_info->id_man_number != '' && MyLib::StartsWith($car_info->id_man_number,rtrim($id_number,'*')) ? $car_info->id_man_number : $id_number;
}
if (!$car_info->save()) {
$this->pushInfoToHtml('操作失败:' . json_encode($car_info->getErrorSummary(true)));
$statistical_information['total_error'] ++ ;
$statistical_information['total_error_arr'][] = $i;
}else {
$this->pushInfoToHtml('更新车辆信息...');
$statistical_information['total_update'] ++ ;
}
}else {
$statistical_information['total_skip'] ++ ;
$this->pushInfoToHtml('空行或不存在,跳过...');
}
}
$this->pushInfoToHtml('操作成功'. "数据总计{$statistical_information['total_all']}条,
更新{$statistical_information['total_update']},
失败{$statistical_information['total_error']},
失败数据列:". implode(',',$statistical_information['total_error_arr']) . ",
跳过{$statistical_information['total_skip']}");
echo '<script>parent.window.layer.closeAll();parent.window.onbeforeunload = null;</script>';
exit();
}
private function pushInfoToHtml($msg){
echo "<p style='color: #fff;font-size: 12px;'><span>>>>&nbsp;&nbsp;&nbsp;&nbsp;</span>$msg</p><script>document.body.scrollTop = document.body.offsetHeight;</script>";
ob_flush();
flush();
}
/**
* 检查车辆信息
* @param $from_src
* @param $import_info
* @return array
*/
private function checkCarProject($from_src, $import_info)
{
$result = ['success' => true];
$car_info = CarT::find()->where([
'car_frame_no' => $import_info['car_frame_no'],
])->one();
//如果当前批次插入信息则跳过
if ($car_info) { //基础信息冲突调整
if ($car_info->from_src == $from_src) {
$result['code'] = 2;
$result['msg'] = '批次重复,跳过';
return $result;
}
$result['code'] = 1;
$result['msg'] = '信息更新';
$result['id'] = $car_info->id;
} else {
$result['code'] = 3;
$result['msg'] = '新增数据';
}
unset($car_info);
return $result;
}
/**
* 新增车辆信息
* @param $info
* @param $from_src
* @param int $lv
* @param null $old_car_info
* @return array
* @throws \Exception
*/
private function createCarInfo($info, $from_src, $lv = 1, &$old_car_info = null)
{
$result = [];
$car_info = new CarT();
$car_info->from_src = $from_src;
$car_info->user_id = $this->my->id;
$car_info->car_use_id = 0;
$car_info->car_type_id = 0;
$car_info->car_no = $info['car_no']?:$car_info->car_no;
$car_info->location = 1;
$car_info->car_man = $info['car_man'];
$car_info->car_man_number = $info['car_number'];
$car_info->car_man_phone = $info['phone'];
$car_info->factory_model = $info['factory_model'];
$car_info->engine_no = $info['engine_no'];
$car_info->car_frame_no = $info['car_frame_no'];
$car_info->register_date = $info['register_date'];
$car_info->company = $info['company'];
$car_info->insurer1_date = $info['insurer1_date'];
$car_info->insurer2_date = $info['insurer2_date'];
$car_info->id_man = $info['id_man'];
$car_info->id_man_number = $info['id_number'];
$car_info->id_man_phone = $info['id_phone'];
$car_info->purchase_value = $info['purchase_value']?:0;;
if (!$car_info->save()) throw new \Exception("车辆信息保存失败:" . json_encode($car_info->getErrors(),JSON_UNESCAPED_UNICODE));
$info['linkphones'] = is_array($info['linkphones']) ? $info['linkphones'] : explode(',', $info['linkphones']);
$info['linkmans'] = is_array($info['linkmans']) ? $info['linkmans'] : explode(',', $info['linkmans']);
foreach ($info['linkphones'] as $k => $link) {
if(!$link) continue;
$linkman_info = LinkmanT::findOne(['car_id' => $id, 'phone' => $link]);
if(!$linkman_info){
$linkman_info = new LinkmanT();
}
$linkman_info->car_id = $id;
$linkman_info->phone = $link;
$linkman_info->name = $info['linkmans'][$k];
$linkman_info->type = '联系人';
if (!$linkman_info->save()) throw new \Exception("联系人信息保存:" . json_encode($kehu_info->getErrors(),JSON_UNESCAPED_UNICODE));
}
unset($car_info,$kehu_info,$linkman_info);
$result['success'] = true;
$result['msg'] = '保存成功';
return $result;
}
/**
* 更新车辆信息
* 强制更新 以导入信息为主
* 车主电话冲突处理 原被保险人电话为空时,原车主电话改至更新信息的被保险人电话作更新处理,如果原被保险人电话不为空改至联系人电话作更新处理
* 车牌、发动机、车主、车主证件 原库不为空使用原库否则更新
* 保险日期以最新为主
* 其余项以更新消息为主
* @param $id
* @param $info
* @param $from_src
* @param bool $is_car_phone_conflict
* @return array
* @throws \Exception
*/
private function updateCarInfo($id, $info, $from_src, $is_car_phone_conflict = false)
{
$result = [];
$car_info = CarT::findOne(['id' => $id]);
$car_info->car_frame_no = $info['car_frame_no'];
$car_info->from_src = $from_src;
$car_info->user_id = $this->my->id;
$car_info->car_use_id = 0;
$car_info->car_type_id = 0;
$car_info->is_track = 0;
$car_info->times = 1;
$car_info->invalid_flag = 0;
$car_info->invalid_id = 0;
$car_info->car_year = $info['car_year'];
if (str_replace('-', '', $car_info->car_no) == $info['car_no']) {
$car_info->car_no = $info['car_no'];
} else {
$car_info->car_no = $car_info->car_no != '' ? $car_info->car_no : $info['car_no'];
}
$car_info->engine_no = $car_info->engine_no != '' ? $car_info->engine_no : $info['engine_no'];
$car_info->car_man = $car_info->car_man != '' ? $car_info->car_man : $info['car_man'];
$car_info->car_man_number = $car_info->car_man_number != '' ? $car_info->car_man_number : $info['car_number'];
if($is_car_phone_conflict && $car_info->id_man_phone == ''){
$car_info->id_man_phone = $car_info->car_man_phone;
$car_info->car_man_phone = $info['phone'];
}else if($is_car_phone_conflict && $car_info->id_man_phone != ''){
$info['linkmans'][] = $car_info->car_man;
$info['linkphones'][] = $car_info->car_man_phone;
$car_info->car_man_phone = $info['phone'];
}else {
$car_info->id_man_phone = $car_info->id_man_phone != '' && $car_info->id_man_phone == $info['id_phone'] ? $car_info->id_man_phone : $info['id_phone'];
$car_info->car_man_phone = $car_info->car_man_phone != '' ? $car_info->car_man_phone : $info['phone'];
}
$car_info->factory_model = $car_info->factory_model != '' && $car_info->factory_model == $info['factory_model'] ? $car_info->factory_model : ($info['factory_model']?:$car_info->factory_model);
$car_info->register_date = $car_info->register_date != '' && $car_info->register_date == $info['register_date'] ? $car_info->register_date : ($info['register_date'] ?: $car_info->register_date);
$car_info->company = $car_info->company != '' && $car_info->company == $info['company'] ? $car_info->company : ($info['company'] ?: $car_info->company);
$car_info->id_man = $car_info->id_man != '' && $car_info->id_man == $info['id_man'] ? $car_info->id_man : ($info['id_man'] ?: $car_info->id_man);
$car_info->id_man_number = $car_info->id_man_number != '' && $car_info->id_man_number == $info['id_number'] ? $car_info->id_man_number : ($info['id_number']?:$car_info->id_man_number);
$car_info->purchase_value = $car_info->purchase_value != '' && $car_info->purchase_value == $info['purchase_value'] ? $car_info->purchase_value : ($info['purchase_value'] ?: $car_info->purchase_value);
$car_info->purchase_value = $car_info->purchase_value > 0 ? $car_info->purchase_value : 0;
$car_info->insurer1_date = $car_info->insurer1_date != '' && strtotime($car_info->insurer1_date) >= strtotime($info['insurer1_date']) ? $car_info->insurer1_date : $info['insurer1_date'];
$car_info->insurer2_date = $car_info->insurer2_date != '' && strtotime($car_info->insurer2_date) >= strtotime($info['insurer2_date']) ? $car_info->insurer2_date : $info['insurer2_date'];
if (!$car_info->save())
throw new \Exception("车辆信息保存失败:" . json_encode($car_info->getErrors(),JSON_UNESCAPED_UNICODE));
$info['linkphones'] = is_array($info['linkphones']) ? $info['linkphones'] : explode(',', $info['linkphones']);
$info['linkmans'] = is_array($info['linkmans']) ? $info['linkmans'] : explode(',', $info['linkmans']);
foreach ($info['linkphones'] as $k => $link) {
if(!$link){
continue;
}
$id = $id ?: $car_info->id;
$linkman_info = LinkmanT::findOne(['car_id' => $id, 'phone' => $link]);
if(!$linkman_info){
$linkman_info = new LinkmanT();
}
$linkman_info->car_id = $id;
$linkman_info->phone = $link;
$linkman_info->name = $info['linkmans'][$k];
$linkman_info->type = '联系人';
if (!$linkman_info->save())
throw new \Exception("联系人信息保存失败:" . json_encode($linkman_info->getErrors(),JSON_UNESCAPED_UNICODE));
}
unset($car_info,$kehu_info,$linkman_info);
$result['success'] = true;
$result['msg'] = '保存成功';
return $result;
}
} }

@ -4,8 +4,10 @@ namespace frontend\controllers;
use common\libs\Fdfs; use common\libs\Fdfs;
use common\libs\MyLib; use common\libs\MyLib;
use common\models\AppointmentT;
use common\models\CardinfoT; use common\models\CardinfoT;
use common\models\CarLogT; use common\models\CarLogT;
use common\models\LinkmanT;
use common\models\OrderGiftT; use common\models\OrderGiftT;
use common\models\OrderT; use common\models\OrderT;
use common\models\OrderUserT; use common\models\OrderUserT;
@ -828,7 +830,6 @@ class PhoneController extends \yii\web\Controller
return $result; return $result;
} }
public function actionPushApi22() public function actionPushApi22()
{ {
// header("Content-type: text/html; charset=utf-8"); // header("Content-type: text/html; charset=utf-8");
@ -951,4 +952,123 @@ class PhoneController extends \yii\web\Controller
} }
public function actionPhoneList(){
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->request;
$result['success'] = false;
$result['msg'] = '操作失败';
$car_id = $request->get('car_id',0);
$user_id = $request->get('user_id',0);
$appointment_info = AppointmentT::find()->where(['and',
['=','car_id', $car_id],
['=','user_id', $user_id]])->one();
if(!$appointment_info){
$result['msg'] = '当前用户无此预约信息';
return $result;
}
$car_info = $appointment_info->car;
$linkman_list = [];
$linkman_info = LinkmanT::find()
->where(['car_id' => $car_id])
->orderBy('id ASC')->all();
$linkman_list[] = [
'name' => $car_info->car_man . '(车主)',
'phone' => $car_info->car_man_phone,
];
$linkman_list[] = [
'name' => $car_info->id_man . '(被保险人)',
'phone' => $car_info->id_man_phone,
];
foreach ($linkman_info as $item){
$linkman_list[] = [
'name' => $item->name . '(联系人)',
'phone' => $item->phone,
];
}
$result['success'] = true;
$result['msg'] = '操作成功';
$result['data'] = [
'phones' => $linkman_list,
'car_info' => $car_info,
];
return $result;
}
public function actionWebAxOut(){
Yii::$app->response->format = Response::FORMAT_JSON;
$request = Yii::$app->request;
$result['success'] = false;
$result['msg'] = '设置错误';
if($this->getPhoneTime() <= 0){
$result['msg'] = '电话剩余话费不足,请联系管理员充值';
return $result;
}
$caller = $request->get('caller','');
$called = $request->get('called','');
$user_id = $request->get('user_id',0);
$assign = NetworkPhoneAssignT::find()->where('user_id='.$user_id)->one();
if(!$assign){
$result['msg'] = '该账号无绑定主叫号码';
return $result;
}
$sub_infos = NetworkPhoneSubT::find()->where('assign_id='.$assign->id)->indexBy('id')->asArray()->all();;
$count = count($sub_infos);
if($count <= 0){
$result['msg'] = '该主叫号码无绑定子号码';
return $result;
}
$tel_x = $tel_y = $sub_infos[mt_rand(0,$count-1)]['phone'];
$parmas = [
'appkey' => '0946239060682011',
'ts' => time(),
'caller' => $caller,
'called' => $called,
'expiration'=> 60,
'request_id' => md5(uniqid(microtime(true),true)),
'tel_x' =>$tel_x,
'tel_y' =>$tel_y
];
ksort($parmas);
$parmas['sign'] = md5(http_build_query($parmas) . '&secret=3E8QV35pHjjev1713E61xV3tFq1N1E4W');
$res = MyLib::Post(json_encode($parmas), 'http://api.1ketong.com/ykt-pool/number/ax2/call_out', false, [
"Content-Type: application/json;charset=UTF-8",
"Accept:application/json",
]);
$succ = json_decode($res);
if ($succ->code == 0) {
$assign->is_phone = 1;
$assign->save(false);
$result['success'] = true;
$result['msg'] = $tel_x;
}else {
$result['msg'] = '远程接口调用失败,请稍后重试';
}
return $result;
}
private function getPhoneTime()
{
//检查通话剩余分钟
$url = Yii::$app->params['userPanel']['myinfo_url'];
$token = Yii::$app->params['userPanel']['token'];
$client = new Client();
$res = $client->request('GET', $url . '?token=' . $token);
$phone_time = 0;
if ($res->getStatusCode() == 200) {
$obj = json_decode($res->getBody(), true);
if ($obj['code'] == 400) {
$result['msg'] = $obj['msg'];
return $result;
}
$phone_time = intval($obj['data']['phone_time']);
}
return $phone_time;
}
} }

@ -8,18 +8,13 @@ use \common\libs\MyLib;
<br> <br>
<div id="txt-e" style=" color: red; font-size: 18px; display: none;"></div> <div id="txt-e" style=" color: red; font-size: 18px; display: none;"></div>
<div id="txt-ok" style=" color: green; font-size: 18px; display: none;"></div> <div id="txt-ok" style=" color: green; font-size: 18px; display: none;"></div>
<input id="sendMsg" type="hidden" value='{"cmd":"LINK"}' style="width: 500px;"> <input id="sendMsg" type="hidden" value='{"cmd":"LINK"}' style="width: 500px;">
<input id="recMsg" type="hidden" value='' style="width: 500px;" > <input id="recMsg" type="hidden" value='' style="width: 500px;" >
<div class="wrapper wrapper-content animated fadeInRight"> <div class="wrapper wrapper-content animated fadeInRight">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-title"> <div class="ibox-title">
<h5>车辆信息</h5> <h5>车辆信息</h5>
<div class="ibox-tools"> <div class="ibox-tools">
<!-- <a class="btn btn-primary btn-xs edit-btn" data-id="0" href="javascript:void(0);" onclick="searchDlg()">-->
<!-- <i class="fa fa-list"></i> 历史记录-->
<!-- </a>-->
<a class="btn btn-primary btn-xs edit-btn" data-id="0" href="javascript:void(0);" onclick="opDlg()"> <a class="btn btn-primary btn-xs edit-btn" data-id="0" href="javascript:void(0);" onclick="opDlg()">
<i class="fa fa-history"></i> 操作记录 <i class="fa fa-history"></i> 操作记录
</a> </a>
@ -28,7 +23,7 @@ use \common\libs\MyLib;
</a> </a>
</div> </div>
</div> </div>
<div class="ibox-content"> <div class="ibox-content" style="position: relative;">
<form class="form-horizontal"> <form class="form-horizontal">
<div class="form-group"> <div class="form-group">
<label class="col-sm-1 control-label">车牌号</label> <label class="col-sm-1 control-label">车牌号</label>
@ -95,6 +90,15 @@ use \common\libs\MyLib;
</div> </div>
</div> </div>
</form> </form>
<div id="qrcode" style="
position: absolute;
right: 0;
bottom: 0;
border: 2px solid #000;
padding: 5px;
width: 142px;
height: 142px;
"></div>
</div> </div>
</div> </div>
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
@ -199,9 +203,8 @@ use \common\libs\MyLib;
</div> </div>
</div> </div>
</div> </div>
<?php $this->beginBlock('footer_js'); ?> <?php $this->beginBlock('footer_js'); ?>
<script src="/js/jquery.qrcode.min.js"></script>
<script src="/assets/js/plugins/bootstrap-table/bootstrap-table.min.js"></script> <script src="/assets/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="/assets/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script> <script src="/assets/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
<script src="/assets/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script> <script src="/assets/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
@ -230,7 +233,6 @@ use \common\libs\MyLib;
function refreshList() { function refreshList() {
$('#listTable').bootstrapTable('refresh'); $('#listTable').bootstrapTable('refresh');
} }
function search() { function search() {
$('#listTable').bootstrapTable('destroy'); $('#listTable').bootstrapTable('destroy');
$('#listTable').bootstrapTable({ $('#listTable').bootstrapTable({
@ -246,8 +248,12 @@ use \common\libs\MyLib;
} }
}); });
} }
$(function() { $(function() {
$('#qrcode').qrcode({
text: window.location.origin + '/phone.html?car_id=<?=$car_info->id?>&user_id=<?=$user_id?>',
width: 128,
height: 128,
});
search(); search();
wsInit(); wsInit();
$.get('/car/bihu-search?id=<?=$car_info->id?>',function(obj) { $.get('/car/bihu-search?id=<?=$car_info->id?>',function(obj) {
@ -318,7 +324,6 @@ use \common\libs\MyLib;
parent.layer.msg("您的浏览器不支持 WebSocket!"); parent.layer.msg("您的浏览器不支持 WebSocket!");
} }
} }
function showResult(val){ function showResult(val){
var serverInfo = document.getElementById("serverInfo").value; var serverInfo = document.getElementById("serverInfo").value;
var okText = serverInfo + "连接成功"; var okText = serverInfo + "连接成功";

@ -0,0 +1,79 @@
<?php
use \common\libs\MyLib;
?>
<?php $this->beginBlock('header_css'); ?>
<link rel="stylesheet" type="text/css" href="/assets/css/plugins/webuploader/webuploader.css">
<?php $this->endBlock(); ?>
<div class="wrapper wrapper-content animated fadeInRight">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>批量处理车辆信息</h5>
</div>
<div class="ibox-content">
<div class="row">
<div class="col-sm-12">
<form role="form" class="form-horizontal data-from" id="theFrm">
<div class="form-group w-100">
<label class="control-label col-sm-1">文件</label>
<div class="col-sm-4">
<input type="text" name="filename" id="filename" class="form-control" value="">
<input type="hidden" name="urlfile" id="urlfile" class="form-control" value="">
</div>
<div class="col-sm-6">
<button type="button" class="btn btn-primary" id="upload">上传文件</button>
<button type="button" class="btn btn-primary" id="import-btn" onclick="reloadIframe('/finance/car-info-import')">导入</button>
<button type="button" class="btn btn-primary" id="update-btn" onclick="reloadIframe('/finance/car-info-bhx-update')">更新</button>
<a href="/print/car_info_import_temp.xlsx" class="btn btn-link" download="车辆信息导入模板.xlsx">[下载车辆信息导入模板]</a>
</div>
</div>
</form>
</div>
</div>
<div class="layui-card-body">
<iframe id="process" src="" frameborder="0"></iframe>
</div>
</div>
</div>
</div>
<?php $this->beginBlock('footer_js'); ?>
<script src="/assets/js/plugins/webuploader/webuploader.min.js"></script>
<script type="text/javascript" language="javascript">
layui.use(['upload'], function(){
var upload = layui.upload;
var uploadInst = upload.render({
elem: '#upload' //绑定元素
,url: '/common/upload' //上传接口
,accept: 'file'
,done: function(res){
//上传完毕回调
if(res.status == 'SUCCESS') {
$('#filename').val(res.OriginfileName);
$('#urlfile').val(res.fileUrl);
}
}
,error: function(){
//请求异常回调
}
});
});
function reloadIframe(url){
if (confirm('是否确认提交?')) {
layer.load(1, {shade: [0.1,'#fff']});
$('#process').css({
'width': '100%',
'height': 'calc(100% - 220px)',
'background': '#000',
'overflow': 'hidden',
}).attr('src', url + '?' + $("#theFrm").serialize());
$('#process').contents().change(function(){
$('#process').animate({ scrollTop: $("#frame").height()});
});
window.onbeforeunload=function(event){
return '当前有任务正在进行,确定要退出吗';
}
}
}
</script>
<?php $this->endBlock('footer_js'); ?>

@ -0,0 +1,28 @@
(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
7,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
0<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
0,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
(d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,
78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
2)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,
116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
(a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;jQuery(a).appendTo(this)})}})(jQuery);

@ -0,0 +1,136 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>斑马养车</title>
<link href="/assets/js/plugins/layui/css/layui.css" rel="stylesheet">
</head>
<body>
<div class="layui-card" style="padding-top: 20px;">
<div class="layui-card-body">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">本机号码</label>
<div class="layui-input-inline" style="width: 200px;">
<input type="text" name="tel" id="local-phone" placeholder="请输入本机电话号码" class="layui-input" readonly>
</div>
</div>
<div class="layui-inline">
<button class="layui-btn" onclick="setLocalPhone()">重设电话</button>
<button class="layui-btn" onclick="window.location.reload();">刷新</button>
</div>
</div>
</div>
</div>
<div class="layui-card" style="padding-top: 20px;">
<div class="layui-card-header">车辆信息</div>
<div class="layui-card-body">
<table class="layui-table">
<tbody>
<tr><td>车牌号</td><td id="car_no"></td></tr>
<tr><td>车架号</td><td id="car_frame_no"></td></tr>
<tr><td>发动机号</td><td id="engine_no"></td></tr>
<tr><td>厂牌型号</td><td id="factory_model"></td></tr>
</tbody>
</table>
</div>
</div>
<div class="layui-card" style="padding-top: 20px;">
<div class="layui-card-header">联系人信息</div>
<div class="layui-card-body">
<table id="phone-list" lay-filter="phoneList"></table>
</div>
</div>
<script src="/assets/js/plugins/layui/layui.js"></script>
<script src="/js/jquery.min.js"></script>
<script src="/assets/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
<script src="/assets/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
<script src="/assets/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-xs" lay-event="call">拨号</a>
</script>
<script>
var localPhone = localStorage.getItem('local_phone');
var params = getRequest();
layui.use('table',function(){
if(!localPhone){
setLocalPhone();
}
$('#local-phone').val(localPhone);
$.get('/phone/phone-list',params,function(ret){
if(ret.success) {
var car_info = ret['data']['car_info'];
var phone_list = ret['data']['phones'];
$('#car_no').html(car_info['car_no']);
$('#car_frame_no').html(car_info['car_frame_no']);
$('#engine_no').html(car_info['engine_no']);
$('#factory_model').html(car_info['factory_model']);
layui.table.render({
elem: '#phone-list',
data: phone_list,
cols: [[ //表头
{field: 'name', title: '姓名', width:150},
{field: 'phone', title: '电话', width: 150},
{fixed: 'right', titlel: '操作', width: 80, align: 'center', toolbar: '#barDemo'}
]],
});
layui.table.on('tool(phoneList)', function(obj){
var data = obj.data;
if (obj.event === 'call') {
if(data.phone == ''){
layer.msg("手机号码有误,不能拨号");
return false;
}
$.get('/phone/web-ax-out', {
'caller': localPhone,
'called': data.phone,
'user_id': params['user_id']
}, function (obj) {
if (obj.success) {
var number = obj.msg;
window.location.href = 'tel://' + number;
} else {
alert(obj.msg);
}
}, 'json');
}
});
} else {
alert(ret.msg);
}
})
});
function setLocalPhone(){
layer.prompt({
title: '请输入本机电话号码',
btn: ['提交'],
closeBtn: false,
}, function(value, index, elem){
if(!(/^1[3456789]\d{9}$/.test(value))){
layer.msg("手机号码有误,请重填");
return false;
}
localPhone = value;
localStorage.setItem('local_phone',localPhone);
$('#local-phone').val(localPhone);
layer.close(index);
});
}
function getRequest() {
var url = location.search;
var params = {};
if (url.indexOf("?") != -1) {
var strs = url.substr(1).split("&");
for(let i = 0; i < strs.length; i ++) {
params[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
}
}
return params;
}
</script>
</body>
</html>
Loading…
Cancel
Save