|
@@ -98,35 +98,111 @@ class SouhuanAnalysis
|
|
|
* @author wj
|
|
|
* @date 2023-08-23
|
|
|
*/
|
|
|
- public function getmacforUD($str)
|
|
|
+ public function getmacforUD($str, $device_id_code)
|
|
|
{
|
|
|
- $data = [];
|
|
|
- $preg = "/(?<=\*)([a-zA-Z]){2,}(?=,)|(?<=,)([AV]{1})(?=,)|(?<=,)([0-9a-z]{2}:[0-9a-z]{2}:[0-9a-z]{2}:[0-9a-z]{2}:[0-9a-z]{2}:[0-9a-z]{2})(?=,)/";
|
|
|
- $data = preg_match_all($preg, $str, $match);
|
|
|
- $data = $match[0];
|
|
|
- $command = $data[0];
|
|
|
- if ('UD' == $command) {
|
|
|
- $is_gps = $data[1];
|
|
|
- if ('V' == $is_gps) {
|
|
|
- //异步请求
|
|
|
- $mac = $data[2];
|
|
|
- $url = "http://api.cellocation.com:84/wifi/?mac=" . $mac . "&output=json";
|
|
|
+ $data = explode(",", $str);
|
|
|
+ $is_gps = $data[3];
|
|
|
+ $is_success = false;
|
|
|
+ $accesstype = -1;
|
|
|
+ $apikey = "67019de565fb4aa2a0e101b70ae3fd91";
|
|
|
+ if ('V' == $is_gps) {
|
|
|
+ $jzcount = $data['17'];
|
|
|
+ $jzlist = [];
|
|
|
+ $mcc = $data['19'];
|
|
|
+ $mnc = $data['20'];
|
|
|
+ $jzindex = 21;
|
|
|
+ for ($i = 0; $i < $jzcount; $i++) {
|
|
|
+ $item = [
|
|
|
+ 'area_code' => $data[$jzindex],
|
|
|
+ 'jz_code' => $data[$jzindex + 1],
|
|
|
+ 'signal_strength' => $data[$jzindex + 2],
|
|
|
+ ];
|
|
|
+ $jzindex += 3;
|
|
|
+ $jzlist[] = $item;
|
|
|
+ }
|
|
|
+ $wificount = $data[$jzindex];
|
|
|
+ $wifiindex = $jzindex + 1;
|
|
|
+ $wifilist = [];
|
|
|
+ for ($i = 0; $i < $wificount; $i++) {
|
|
|
+ $item = [
|
|
|
+ 'name' => $data[$wifiindex],
|
|
|
+ 'mac' => $data[$wifiindex + 1],
|
|
|
+ 'signal_strength' => $data[$wifiindex + 2],
|
|
|
+ ];
|
|
|
+ $wifiindex += 3;
|
|
|
+ $wifilist[] = $item;
|
|
|
+ }
|
|
|
+ $bts = "";
|
|
|
+ $nearbts_arr = [];
|
|
|
+ $nearbts = "";
|
|
|
+ $macs_arr = [];
|
|
|
+ $macs = "";
|
|
|
+ foreach ($jzlist as $key => $value) {
|
|
|
+ if ($key === 0) {
|
|
|
+ $bts = $mcc . "," . $mnc . "," . $value['area_code'] . "," . $value['jz_code'] . "," . $value['signal_strength'];
|
|
|
+ } else {
|
|
|
+ $nearbts_arr[] = $mcc . "," . $mnc . "," . $value['area_code'] . "," . $value['jz_code'] . "," . $value['signal_strength'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $nearbts = join("|", $nearbts_arr);
|
|
|
+ foreach ($wifilist as $key => $value) {
|
|
|
+ $macs_arr[] = $value['mac'] . "," . $value['signal_strength'];
|
|
|
+ }
|
|
|
+ $macs = join("|", $macs_arr);
|
|
|
+ $accesstype = 1;
|
|
|
+ $url = "http://apilocate.amap.com/position?macs=" . $macs . "&bts=" . $bts . "&nearbts=" . $nearbts . "&network=GSM&cdma=0&accesstype=" . $accesstype . "&output=json&key=" . $apikey;
|
|
|
+ $result = curl_request($url);
|
|
|
+ if ('10000' === $result['infocode']) {
|
|
|
+ $resultdata = $result['result'];
|
|
|
+ $locations = explode(",", $resultdata['location']);
|
|
|
+ $use_gps_long = $locations[0];
|
|
|
+ $use_gps_lat = $locations[1];
|
|
|
+ $address_desc = $resultdata['desc'];
|
|
|
+ $accesstype = 2;
|
|
|
+ $is_success = true;
|
|
|
+ } else {
|
|
|
+ Log::write($url, 'shouhuan');
|
|
|
+ Log::write($result, 'shouhuan');
|
|
|
+ $accesstype = -2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!$is_success) {
|
|
|
+ $use_gps_long = $data[6];
|
|
|
+ $use_gps_lat = $data[4];
|
|
|
+ $gps_str = $use_gps_long . "," . $use_gps_lat;
|
|
|
+ $url = "https://restapi.amap.com/v3/assistant/coordinate/convert?locations=" . $gps_str . "&coordsys=gps&output=JSON&key=" . $apikey;
|
|
|
+ $result = curl_request($url);
|
|
|
+ if ('10000' == $result['infocode']) {
|
|
|
+ $locations = $result['locations'];
|
|
|
+ $url = "https://restapi.amap.com/v3/geocode/regeo?location=" . $locations . "&key=" . $apikey;
|
|
|
$result = curl_request($url);
|
|
|
- Log::write($match, 'shouhuan');
|
|
|
- $data = [];
|
|
|
- if (0 === $result['errcode']) {
|
|
|
- $data['use_gps_lat'] = $result['lat'];
|
|
|
- $data['use_gps_long'] = $result['lon'];
|
|
|
- $data['use_mac'] = $mac;
|
|
|
- $address = $result['address'];
|
|
|
- $address = explode(";", $address);
|
|
|
- $data['address'] = $address[0];
|
|
|
- $data['address1'] = $address[1];
|
|
|
- return $data;
|
|
|
+ if ('10000' == $result['infocode']) {
|
|
|
+ $address_desc = $result['regeocode']['formatted_address'];
|
|
|
+ $is_success = true;
|
|
|
+ $accesstype = 0; //未接入智能硬件定位
|
|
|
+ } else {
|
|
|
+ Log::write($url, 'shouhuan');
|
|
|
+ Log::write($result, 'shouhuan');
|
|
|
}
|
|
|
+ } else {
|
|
|
+ Log::write($url, 'shouhuan');
|
|
|
+ Log::write($result, 'shouhuan');
|
|
|
}
|
|
|
}
|
|
|
- return false;
|
|
|
+ if (!$is_success) {
|
|
|
+ $accesstype = -2;
|
|
|
+ $use_gps_long = $data[6];
|
|
|
+ $use_gps_lat = $data[4];
|
|
|
+ $address_desc = "";
|
|
|
+ }
|
|
|
+ $data = [
|
|
|
+ 'is_gps' => $is_gps == "A" ? 1 : 0,
|
|
|
+ 'address_desc' => $address_desc,
|
|
|
+ 'accesstype' => $accesstype,
|
|
|
+ 'use_gps_long' => $use_gps_long,
|
|
|
+ 'use_gps_lat' => $use_gps_lat,
|
|
|
+ ];
|
|
|
+ return $data;
|
|
|
}
|
|
|
/**
|
|
|
* 内容解析
|
|
@@ -982,9 +1058,11 @@ class SouhuanAnalysis
|
|
|
} else {
|
|
|
//手环基础信息修改
|
|
|
$sriData = $data;
|
|
|
- $uddata = $this->getmacforUD($original_str);
|
|
|
- if ($uddata) {
|
|
|
- $sriData = array_merge($sriData, $uddata);
|
|
|
+ if ($command == "UD") {
|
|
|
+ $uddata = $this->getmacforUD($original_str, $device_id_code);
|
|
|
+ if ($uddata) {
|
|
|
+ $sriData = array_merge($sriData, $uddata);
|
|
|
+ }
|
|
|
}
|
|
|
$sriwhere = [
|
|
|
'facility_id' => $facility_id,
|
|
@@ -1506,7 +1584,6 @@ class SouhuanAnalysis
|
|
|
$unicode = '';
|
|
|
$arr = mb_str_split($str); //适配中文
|
|
|
foreach ($arr as $key => $value) {
|
|
|
- var_dump($value);
|
|
|
$char = bin2hex(iconv('UTF-8', 'UCS-2BE', $value));
|
|
|
$char = str_pad($char, 4, '0', STR_PAD_LEFT);
|
|
|
$arr[$key] = $char;
|