|
|
@@ -7,6 +7,7 @@ use app\common\model\decorate\DecorateTabbar;
|
|
|
use app\common\model\setting\PostageRegion;
|
|
|
use app\common\service\ConfigService;
|
|
|
use app\common\service\FileService;
|
|
|
+use think\Exception;
|
|
|
|
|
|
/**
|
|
|
* index
|
|
|
@@ -21,7 +22,138 @@ class RegionLogic extends BaseLogic
|
|
|
*/
|
|
|
public static function getRegionList()
|
|
|
{
|
|
|
- $result = PostageRegion::cache(true,86400)->field('id,name,pid')->order('sorts asc,id asc')->select()->toArray();
|
|
|
- return $result;
|
|
|
+ $area_list = PostageRegion::cache(true,86400)->where('first','<>','')->field('id,name,pid')->order('sorts asc,id asc')->select()->toArray();
|
|
|
+ foreach ($area_list as &$vo) {
|
|
|
+ $vo['field'] = self::get_first_char($vo['name']);
|
|
|
+ }
|
|
|
+ $arr = self::array_group_by($area_list, 'field');
|
|
|
+ ksort($arr);
|
|
|
+ $citys = array();
|
|
|
+ foreach ($arr as $keys=>$vo){
|
|
|
+ $citys[] = ['key'=>$keys,'list'=>$vo];
|
|
|
+ }
|
|
|
+ ksort($citys);
|
|
|
+
|
|
|
+ //获取热门城市
|
|
|
+ $map['id'] = ['in','1710'];
|
|
|
+ $hot_list = PostageRegion::cache(true,86400)->where($map)->field('id,pid,name')->order('first asc')->select()->toArray();
|
|
|
+ $list = ['hot_list'=>$hot_list,'city_list'=> $citys];
|
|
|
+ return $list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取定位信息
|
|
|
+ * @param $params
|
|
|
+ * @return false|mixed|void
|
|
|
+ */
|
|
|
+ public static function getLocation($params)
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ $location = $params['latitude'].','.$params['longitude'];
|
|
|
+ $key = 'SEGBZ-P3PK6-CU5SB-MQLQP-ZDPJS-PHFR6';
|
|
|
+ $url = 'https://apis.map.qq.com/ws/geocoder/v1/?location=' . $location . '&key='.$key.'&get_poi=1';
|
|
|
+ $result = http_request($url);
|
|
|
+ if(empty($result)){
|
|
|
+ throw new Exception('定位请求失败');
|
|
|
+ }
|
|
|
+ if ($result['status'] === 0) {
|
|
|
+ //获取城市id
|
|
|
+ $city_id = Area::where(['name'=>['like',"%".$result['result']['address_component']['city']."%"]])->value('id');
|
|
|
+ $result['result']['address_component']['city_id'] = $city_id;
|
|
|
+ return $result['result']['address_component'];
|
|
|
+ }
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ self::$error = $e->getMessage();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function get_first_char($s)
|
|
|
+ {
|
|
|
+ $s0 = mb_substr(self::my_trim($s), 0, 1); //获取名字的姓
|
|
|
+ try {
|
|
|
+ $s = iconv('UTF-8', 'GB2312', $s0); //将UTF-8转换成GB2312编码
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ return 'Z#';
|
|
|
+ }
|
|
|
+ if (ord($s0) > 128) { //汉字开头,汉字没有以U、V开头的
|
|
|
+ $asc = ord($s[0]) * 256 + ord($s[1]) - 65536;
|
|
|
+ if ($asc >= -20319 and $asc <= -20284) return "A";
|
|
|
+ if ($asc >= -20283 and $asc <= -19776) return "B";
|
|
|
+ if ($asc >= -19775 and $asc <= -19219) return "C";
|
|
|
+ if ($asc >= -19218 and $asc <= -18711) return "D";
|
|
|
+ if ($asc >= -18710 and $asc <= -18527) return "E";
|
|
|
+ if ($asc >= -18526 and $asc <= -18240) return "F";
|
|
|
+ if ($asc >= -18239 and $asc <= -17760) return "G";
|
|
|
+ if ($asc >= -17759 and $asc <= -17248) return "H";
|
|
|
+ if ($asc >= -17247 and $asc <= -17418) return "I";
|
|
|
+ if ($asc >= -17417 and $asc <= -16475) return "J";
|
|
|
+ if ($asc >= -16474 and $asc <= -16213) return "K";
|
|
|
+ if ($asc >= -16212 and $asc <= -15641) return "L";
|
|
|
+ if ($asc >= -15640 and $asc <= -15166) return "M";
|
|
|
+ if ($asc >= -15165 and $asc <= -14923) return "N";
|
|
|
+ if ($asc >= -14922 and $asc <= -14915) return "O";
|
|
|
+ if ($asc >= -14914 and $asc <= -14631) return "P";
|
|
|
+ if ($asc >= -14630 and $asc <= -14150) return "Q";
|
|
|
+ if ($asc >= -14149 and $asc <= -14091) return "R";
|
|
|
+ if ($asc >= -14090 and $asc <= -13319) return "S";
|
|
|
+ if ($asc >= -13318 and $asc <= -12839) return "T";
|
|
|
+ if ($asc >= -12838 and $asc <= -12557) return "W";
|
|
|
+ if ($asc >= -12556 and $asc <= -11848) return "X";
|
|
|
+ if ($asc >= -11847 and $asc <= -11056) return "Y";
|
|
|
+ if ($asc >= -11055 and $asc <= -10247) return "Z";
|
|
|
+ } else if (ord($s) >= 48 and ord($s) <= 57) { //数字开头
|
|
|
+ switch (iconv_substr($s, 0, 1, 'utf-8')) {
|
|
|
+ case 1:
|
|
|
+ return "Y";
|
|
|
+ case 2:
|
|
|
+ return "E";
|
|
|
+ case 3:
|
|
|
+ return "S";
|
|
|
+ case 4:
|
|
|
+ return "S";
|
|
|
+ case 5:
|
|
|
+ return "W";
|
|
|
+ case 6:
|
|
|
+ return "L";
|
|
|
+ case 7:
|
|
|
+ return "Q";
|
|
|
+ case 8:
|
|
|
+ return "B";
|
|
|
+ case 9:
|
|
|
+ return "J";
|
|
|
+ case 0:
|
|
|
+ return "L";
|
|
|
+ }
|
|
|
+ } else if (ord($s) >= 65 and ord($s) <= 90) { //大写英文开头
|
|
|
+ return substr($s, 0, 1);
|
|
|
+ } else if (ord($s) >= 97 and ord($s) <= 122) { //小写英文开头
|
|
|
+ return strtoupper(substr($s, 0, 1));
|
|
|
+ } else {
|
|
|
+ return iconv_substr($s0, 0, 1, 'utf-8');//中英混合的词语,不适合上面的各种情况,因此直接提取首个字符即可
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function array_group_by($arr, $key)
|
|
|
+ {
|
|
|
+ $grouped = array();
|
|
|
+ foreach ($arr as $value) {
|
|
|
+ $grouped[$value[$key]][] = $value;
|
|
|
+ }
|
|
|
+ if (func_num_args() > 2) {
|
|
|
+ $args = func_get_args();
|
|
|
+ foreach ($grouped as $key => $value) {
|
|
|
+ $parms = array_merge($value, array_slice($args, 2, func_num_args()));
|
|
|
+ $grouped[$key] = call_user_func_array('array_group_by', $parms);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $grouped;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function my_trim($str)
|
|
|
+ {
|
|
|
+ $search = array(" ", " ", "\n", "\r", "\t");
|
|
|
+ $replace = array("", "", "", "", "");
|
|
|
+ return str_replace($search, $replace, $str);
|
|
|
}
|
|
|
}
|