stanley-king 8 лет назад
Родитель
Сommit
62237fb685
4 измененных файлов с 188 добавлено и 1 удалено
  1. 0 0
      helper/area/area_check.php
  2. 152 0
      helper/area/area_upgrade.php
  3. 1 1
      mobile/control/activity.php
  4. 35 0
      test/areaTest.php

helper/area_check.php → helper/area/area_check.php


+ 152 - 0
helper/area/area_upgrade.php

@@ -0,0 +1,152 @@
+<?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('eanble' => 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;
+    }
+}

+ 1 - 1
mobile/control/activity.php

@@ -165,7 +165,7 @@ class act_formater
         }
     }
 
-    private function format_limit($limt,&$gids)
+    private function format_limit($limt, &$gids)
     {
         $result =[];
 

+ 35 - 0
test/areaTest.php

@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/3/16
+ * Time: 下午11:55
+ */
+define('BASE_ROOT_PATH',str_replace('/test','',dirname(__FILE__)));
+
+require_once(BASE_ROOT_PATH . '/fooder.php');
+require_once(BASE_ROOT_PATH . '/helper/area/area_upgrade.php');
+
+class areaTest extends PHPUnit_Framework_TestCase
+{
+    public static function setUpBeforeClass() {
+        Base::run_util();
+    }
+    public function testProvince()
+    {
+        $area = new area\upgrade();
+        $area->province();
+    }
+
+    public function testCity()
+    {
+        $area = new area\upgrade();
+        $area->city();
+    }
+    public function testConutry()
+    {
+        $area = new area\upgrade();
+        $area->country();
+    }
+}