Address.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  9. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  10. * =========================================================
  11. */
  12. namespace addon\store\shopapi\controller;
  13. use app\model\system\Address as AddressModel;
  14. /**
  15. * 地址控制器
  16. * Class Order
  17. * @package app\shop\controller
  18. */
  19. class Address extends BaseStoreApi
  20. {
  21. /**
  22. * 通过ajax得到运费模板的地区数据
  23. */
  24. public function areaList()
  25. {
  26. $address_model = new AddressModel();
  27. $pid = isset($this->params[ 'pid' ]) ? $this->params[ 'pid' ] : 0;
  28. $condition = array (
  29. "pid" => $pid
  30. );
  31. $list = $address_model->getAreaList($condition, "id, pid, name, level", "id asc");
  32. return $this->response($list);
  33. }
  34. /**
  35. * 获取地理位置id
  36. */
  37. public function getGeographicId()
  38. {
  39. $address_model = new AddressModel();
  40. $address = isset($this->params[ 'address' ]) ? $this->params[ 'address' ] : ",,";
  41. $address_array = explode(",", $address);
  42. $province = $address_array[ 0 ];
  43. $city = $address_array[ 1 ];
  44. $district = $address_array[ 2 ];
  45. $subdistrict = $address_array[ 3 ];
  46. $province_list = $address_model->getAreaList([ "name" => $province, "level" => 1 ], "id", '');
  47. $province_id = !empty($province_list[ "data" ]) ? $province_list[ "data" ][ 0 ][ "id" ] : 0;
  48. $city_list = ( $province_id > 0 ) && !empty($city) ? $address_model->getAreaList([ "name" => $city, "level" => 2, "pid" => $province_id ], "id", '') : [];
  49. $city_id = !empty($city_list[ "data" ]) ? $city_list[ "data" ][ 0 ][ "id" ] : 0;
  50. $district_list = !empty($district) && $city_id > 0 && $province_id > 0 ? $address_model->getAreaList([ "name" => $district, "level" => 3, "pid" => $city_id ], "id", '') : [];
  51. $district_id = !empty($district_list[ "data" ]) ? $district_list[ "data" ][ 0 ][ "id" ] : 0;
  52. $subdistrict_list = !empty($subdistrict) && $city_id > 0 && $province_id > 0 && $district_id > 0 ? $address_model->getAreaList([ "name" => $subdistrict, "level" => 4, "pid" => $district_id ], "id", '') : [];
  53. $subdistrict_id = !empty($subdistrict_list[ "data" ]) ? $subdistrict_list[ "data" ][ 0 ][ "id" ] : 0;
  54. $data = [];
  55. $data[ 'province_id' ] = $province_id;
  56. $data[ 'city_id' ] = $city_id;
  57. $data[ 'district_id' ] = $district_id;
  58. $data[ 'subdistrict_id' ] = $subdistrict_id;
  59. return $this->response($this->success($data));
  60. }
  61. /**
  62. * 转化省市区地址形式为实际的省市区id
  63. */
  64. public function tranAddressInfo()
  65. {
  66. $latlng = $this->params[ 'latlng' ] ?? '';
  67. $address_model = new AddressModel();
  68. $address_result = $address_model->getAddressByLatlng([ 'latlng' => $latlng ]);
  69. if ($address_result[ 'code' ] < 0)
  70. return $this->response($address_result);
  71. $address_data = $address_result[ 'data' ];
  72. $province = $address_data[ 'province' ] ?? '';
  73. $city = $address_data[ 'city' ] ?? '';
  74. $district = $address_data[ 'district' ] ?? '';
  75. $province_id = $address_model->getAreasInfo([ [ 'name', 'like', '%' . $province . '%' ], [ 'level', '=', 1 ] ], 'id')[ 'data' ][ 'id' ] ?? 0;
  76. if ($province_id > 0)
  77. $city_id = $address_model->getAreasInfo([ [ 'name', 'like', '%' . $city . '%' ], [ 'level', '=', 2 ], [ 'pid', '=', $province_id ] ], 'id')[ 'data' ][ 'id' ] ?? 0;
  78. if ($city_id > 0 && $province_id > 0)
  79. $district_id = $address_model->getAreasInfo([ [ 'name', 'like', '%' . $district . '%' ], [ 'level', '=', 3 ], [ 'pid', '=', $city_id ] ], 'id')[ 'data' ][ 'id' ] ?? 0;
  80. $data = array (
  81. 'province_id' => $province_id ?? 0,
  82. 'city_id' => $city_id ?? 0,
  83. 'district_id' => $district_id ?? 0,
  84. 'province' => $province,
  85. 'city' => $city,
  86. 'district' => $district,
  87. );
  88. return $this->response($this->success($data));
  89. }
  90. }