123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- <?php
- namespace App\Http\Controllers;
- use GuzzleHttp\Client;
- use Illuminate\Http\Request;
- use App\Handlers\IdentifyAddress;
- use App\Handlers\Address;
- use App\Handlers\AddressParse;
- use App\Handlers\DetailParse;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- class AddressController extends Controller{
- private $userRepository;
- public function __construct(IdentifyAddress $userRepo)
- {
- $this->userRepository = new AddressParse();
- }
- public function getTest(Request $request){
- $string = $request->input('str');
- $r = Address::smart($string);
- return $r;
- print_r($r);
- $string = '吉林省长春市朝阳区开运街领秀朝阳小区333弄8号502';
- $r = Address::smart($string, $user = false);
- print_r($r);
- }
- public static function smart_parse(Request $request)
- {
-
- $parse = [];
- $address=$request->input('discernDel');
-
- $search = ['收货地址', '地址', '收货人', '收件人', '收货', '邮编', '电话', '身份证号码', '身份证号', '身份证', ':', ':', ';', ';', ',', ',', '。', ];
- $replace = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '];
- $address = str_replace($search, $replace, $address);
-
- $address = preg_replace('/\s{1,}/', ' ', $address);
-
- $address = preg_replace('/0-|0?(\d{3})-(\d{4})-(\d{4})/', '$1$2$3', $address);
-
- preg_match('/\d{18}|\d{17}X/i', $address, $match);
- if ($match && $match[0]) {
- $parse['idno'] = strtoupper($match[0]);
- $address = str_replace($match[0], '', $address);
- }
-
- preg_match('/\d{7,11}|\d{3,4}-\d{6,8}/', $address, $match);
- if ($match && $match[0]) {
- $parse['mobile'] = $match[0];
- $address = str_replace($match[0], '', $address);
- }
-
- preg_match('/\d{6}/', $address, $match);
- if ($match && $match[0]) {
- $parse['postcode'] = $match[0];
- $address = str_replace($match[0], '', $address);
- }
-
- $address = trim(preg_replace('/ {2,}/', ' ', $address));
-
- $split_arr = explode(' ', $address);
- if (count($split_arr) > 1) {
- $parse['name'] = $split_arr[0];
- foreach ($split_arr as $value) {
- if (strlen($value) < strlen($parse['name'])) {
- $parse['name'] = $value;
- }
- }
- $address = trim(str_replace($parse['name'], '', $address));
- }
- $address_detail = DetailParse::detail_parse($address);
- $parse['address_detail'] = $address_detail;
- $parse['detail'] = $address;
-
- return $parse;
- }
-
- public function getDiscern(Request $request)
- {
- $discernDel = $request->input('discernDel');
- return $this->userRepository->getAddress($discernDel);
- try{
- DB::beginTransaction();
- $address = $this->userRepository->getDiscern($discernDel);
- DB::commit();
- }catch (\Exception $e){
- DB::rollBack();
- $msg = "信息提示:".$e->getMessage().",行:".$e->getLine();
- return response(['code' => 0, 'msg'=>$msg]);
- }
- return response(['code'=>1,'msg'=>$address]);
- }
- public function DealAddress(Request $request){
- $data=[];
- $details=$request->input('details');
- $r = Address::smart($details);
- return $this->success([
- 'phone'=>array_key_exists('mobile',$r)?$r['mobile']:'',
- 'name'=>array_key_exists('name',$r)?$r['name']:'',
- 'province'=>$r['province'],
- 'city'=>$r['city'],
- 'area'=>$r['region'],
- 'street'=>$r['street'],
- ]);
- preg_match_all("/1((34[0-8]\d{7})|((3[0-3|5-9])|(4[5-7|9])|(5[0-3|5-9])|(66)|(7[2-3|5-8])|(8[0-9])|(9[1|8|9]))\d{8})/", $details,$phones);
- if($phones){
- if($phones[0]){
- $data['phone']=$phones[0][0];
- }
- }
- $name=trim(mb_substr($details,'0',mb_strpos($details,$phones[0][0])));
- $regex = "/\ |\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\:|\<|\>|\?|\[|\]|\,|\.|\/|\;|\,|\。|\。|\“|\‘|\?|\!|\【|\】|\;|\:|\¥|\(|\)|\'|\`|\-|\=|\\\|\|/";
- $data['name'] = preg_replace($regex,"",$name);
- $client = new Client();
- $url = 'https://restapi.amap.com/v5/place/text?parameters';
- $array = [
- 'query' => [
- 'keywords' => $details,
- 'output' => 'json',
- 'key' => '4e0ce153265426f2d2ceef069e5eb552',
- ]
- ];
- $response = $client->request('GET', $url, $array);
- $ad = json_decode($response->getBody()->getContents());
- if ($ad->pois){
- $data['province']=$ad->pois[0]->pname;
- $data['city']=$ad->pois[0]->cityname;
- $data['area']=$ad->pois[0]->adname;
- }
- return $this->success($data);
- }
- }
|