123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <?php
- /**
- * Created by PhpStorm.
- * User: stanley-king
- * Date: 2017/3/16
- * Time: 下午8:54
- */
- namespace area;
- require_once(BASE_ROOT_PATH . '/helper/util_helper.php');
- use util;
- class upgrade
- {
- private $mod_area;
- private $mod_region;
- public function __construct()
- {
- $this->mod_area = Model('area');
- $this->mod_region = Model('bs_region');
- }
- public function province()
- {
- $this->parent_match(0,1,1);
- }
- public function city()
- {
- $items = $this->mod_area->where(array('area_parent_id' => 0))->field('area_id,tm_region_id')->order('area_name ASC')->select();
- foreach ($items as $item)
- {
- $area_id = intval($item['area_id']);
- $region_id = intval($item['tm_region_id']);
- $this->parent_match($area_id,$region_id,2);
- }
- }
- public function country()
- {
- //得到所有的省
- $items = $this->mod_area->where(array('area_parent_id' => 0))->field('area_id,tm_region_id')->order('area_name ASC')->select();
- foreach ($items as $item)
- {
- $area_id = intval($item['area_id']);
- if($area_id >= 32) continue; //海外地区不处理了。
- $citys = $this->mod_area->where(array('area_parent_id' => $area_id))->field('area_id,tm_region_id')->order('area_name ASC')->select();
- foreach ($citys as $city)
- {
- $city_id = intval($city['area_id']);
- $region_id = intval($city['tm_region_id']);
- $this->parent_match($city_id,$region_id,3);
- }
- }
- }
- private function parent_match($area_parent,$tm_parent,$area_deep)
- {
- $areas = $this->mod_area->where(array('area_parent_id' => $area_parent))->field('area_id,area_name,area_parent_id,area_deep')->order('area_name ASC')->select();
- $regions = $this->mod_region->where(array('parent_id' => $tm_parent)) ->field('county_name,region_id,parent_id')->order('county_name ASC')->select();
- $maps = $this->map_region($regions);
- $this->match($areas,$maps,$area_parent,$area_deep);
- }
- private function match($areas,$maps,$parent_id,$area_deep)
- {
- foreach ($areas as $area)
- {
- $name = $area['area_name'];
- if(array_key_exists($name,$maps)) {
- $maps[$name]['finded'] = true;
- $this->update($area,$maps[$name]);
- }
- else
- {
- foreach ($maps as $key => $region)
- {
- if($region['finded'] == true) continue;
- if(self::fuzzy_name($key,$name)) {
- $maps[$name]['finded'] = true;
- $this->update($area,$region);
- break;
- }
- }
- $this->nouse($area);
- }
- }
- foreach ($maps as $region)
- {
- if($region['finded'] != true) {
- $this->insert($parent_id,$area_deep,$region);
- }
- }
- }
- private function nouse($area)
- {
- $ret = $this->mod_area->where(array('area_id' => $area['area_id']))->update(array('enable' => 0));
- }
- private function update($area,$region)
- {
- $this->mod_area->where(array('area_id' => $area['area_id']))->update(array('tm_name' => $region['county_name'],'tm_region_id' => $region['region_id'],'tm_parent_id' => $region['parent_id']));
- }
- private function insert($parent_id,$area_deep,$region)
- {
- $ret = $this->mod_area->insert(array('area_name' => "",'area_parent_id' => $parent_id,'area_deep' => $area_deep,
- 'tm_name' => $region['county_name'],'tm_region_id' => $region['region_id'],'tm_parent_id' => $region['parent_id']));
- }
- private static function short_name($area_name)
- {
- static $words = array('省','市','区','县','乡','镇','阁');
- $last = mb_substr($area_name, -1, 1);
- if(in_array($last,$words)) {
- return mb_substr($area_name, 0, mb_strlen($area_name) - 1);
- }
- else {
- return $area_name;
- }
- }
- private static function fuzzy_name($country_name,$area_name)
- {
- if (util::start_with($country_name, $area_name)) {
- return true;
- }
- $area_name = self::short_name($area_name);
- if (util::start_with($country_name, $area_name)) {
- return true;
- } else {
- return false;
- }
- }
- private function map_region($regions)
- {
- $maps = [];
- foreach ($regions as $region) {
- $name = trim($region['county_name']);
- $maps[$name] = $region;
- }
- return $maps;
- }
- }
|