BaiduRegion.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <?php
  2. namespace common\models;
  3. use common\models\Region;
  4. use sunmoon\phpspreadsheet\Excel;
  5. class BaiduRegion extends \common\components\ActiveRecord
  6. {
  7. /**
  8. * {@inheritdoc}
  9. */
  10. public static function tableName()
  11. {
  12. return '{{%BAIDU_REGION}}';
  13. }
  14. public static function importXls($startRow, $limit, $offset=0){
  15. // $offset = 0;
  16. $inData = BaiduRegion::getXlsData($startRow, $limit);
  17. if($inData){
  18. $offset += $limit;
  19. // print_r($inData);
  20. // print_r("插入数据");
  21. BaiduRegion::batchInsert($inData);
  22. unset($inData);
  23. self::importXls($startRow+$offset, $limit);
  24. }
  25. }
  26. public static function getXlsData($startRow, $limit) {
  27. $filePath = \Yii::getAlias('@common/runtime/uploads/area.xlsx');
  28. $tempFileName = \Yii::getAlias('@common/runtime/uploads/' . 'importTemp.txt');
  29. $xlsData = Excel::import($filePath, [
  30. 'setFirstRecordAsKeys' => true,
  31. 'readStartRow' => $startRow + 1,
  32. 'readEndRow' => $startRow + $limit,
  33. 'storeFile' => $tempFileName,
  34. 'dropKeysRow' => $startRow == 1 ? false : true,
  35. ]);
  36. $dataArray = [];
  37. foreach ($xlsData as $dl) {
  38. if ($dl['乡镇代码']) {
  39. $dataArray[] = [
  40. 'PROV_NAME' => $dl['省份名称'],
  41. 'PROV_CODE' => $dl['省份代码'],
  42. 'CITY_NAME' => $dl['城市名称'],
  43. 'CITY_CODE' => $dl['城市代码'],
  44. 'COUNTY_NAME' => $dl['区县名称'],
  45. 'COUNTY_CODE' => $dl['区县代码'],
  46. 'TOWN_NAME' => $dl['乡镇名称'],
  47. 'TOWN_CODE' => $dl['乡镇代码'],
  48. ];
  49. }else{
  50. break;
  51. }
  52. }
  53. return $dataArray;
  54. }
  55. public static function _getAllNcRegion() {
  56. $ncRegion = Region::find()->select("REGION_CODE, REGION_NAME, PID, DEEP")
  57. ->where("STATUS = 1 AND DEEP <= 5")
  58. ->orderBy("REGION_CODE")
  59. ->asArray()->all();
  60. return $ncRegion;
  61. }
  62. public static function _getBdProv() {
  63. $bdProv = self::find()->select('PROV_CODE,PROV_NAME')
  64. // ->where("CITY_CODE like :CITY_CODE", [':CITY_CODE'=>'%00'])
  65. // ->andWhere("PROV_CODE !=:PROV_CODE", [':PROV_CODE'=>'710000'])
  66. ->groupBy('PROV_CODE')
  67. ->asArray()->all();
  68. return $bdProv;
  69. }
  70. public static function _getBdCity() {
  71. $bdCity = self::find()->select('CITY_CODE,CITY_NAME,PROV_CODE')
  72. ->where("PROV_CODE <=:PROV_CODE", [':PROV_CODE'=>800000])
  73. ->groupBy('CITY_CODE')
  74. ->asArray()->all();
  75. return $bdCity;
  76. }
  77. public static function _getBdCounty() {
  78. $bdCounty = self::find()->select('COUNTY_CODE,COUNTY_NAME,CITY_CODE')
  79. ->where("PROV_CODE <=:PROV_CODE", [':PROV_CODE'=>800000])
  80. ->groupBy('COUNTY_CODE')
  81. ->asArray()->all();
  82. return $bdCounty;
  83. }
  84. public static function _getBdTown() {
  85. $bdTown = self::find()->select('TOWN_CODE,TOWN_NAME,COUNTY_CODE')
  86. ->where(["in","CITY_CODE",[
  87. '419001', '429004', '429005', '429006', '429021', // 济源、仙天潜神
  88. '441900', '442000', '460400', '469001', '620200', // 东莞、中山、儋州、嘉峪关
  89. '469001','469002','469005','469006','469007','469021','469022','469023','469024','469025','469026','469027','469028','469029','469030', // 海南
  90. '659001', '659002', '659003', '659004', '659005', '659006', '659007', '659008', '659009', // 石河子、阿拉尔、图木舒克、五家渠、北屯、铁门关、双河、可克达拉、昆玉
  91. '659010', '659011', // 胡杨河、新星市
  92. ]])
  93. ->asArray()->all();
  94. return $bdTown;
  95. }
  96. public static function _checkInNc($region_code){
  97. $p = Region::find()->select('REGION_CODE, REGION_NAME')
  98. ->where('STATUS = 1 AND REGION_CODE = :REGION_CODE', [':REGION_CODE'=>$region_code])
  99. ->asArray()->one();
  100. return $p;
  101. }
  102. public static function addNcRegion($region_code, $region_name, $pid, $deep){
  103. $newRegion = new Region();
  104. $newRegion->REGION_CODE = $region_code;
  105. $newRegion->REGION_NAME = $region_name;
  106. $newRegion->PID = $pid;
  107. $newRegion->DEEP = $deep;
  108. $newRegion->STATUS = 1;
  109. return $newRegion->save();
  110. }
  111. public static function _checkInBd($region_code, $region_name, $pid, $deep) {
  112. $ncOtherRegion = [
  113. '419001', '429004', '429005', '429006', '429021', // 济源,仙天潜神
  114. // '441900', '442000', '460400', '469001', '620200', // 东莞、中山、儋州、嘉峪关
  115. '469001','469002','469005','469006','469007','469021','469022','469023','469024','469025','469026','469027','469028','469029','469030', // 海南
  116. '659001', '659002', '659003', '659004', '659005', '659006', '659007', '659008', '659009', // 石河子、阿拉尔、图木舒克、五家渠、北屯、铁门关、双河、可克达拉、昆玉
  117. '659010', '659011', // 胡杨河、新星市
  118. ];
  119. $ret = [];
  120. if ($deep==2){ // 省级
  121. $t = BaiduRegion::find()->select('PROV_CODE, PROV_NAME')
  122. ->where("PROV_CODE = :PROV_CODE", [':PROV_CODE'=>$region_code])
  123. // ->orderBy('PROV_CODE')->groupBy('PROV_CODE')
  124. ->asArray()->one();
  125. if($t){
  126. $ret = [
  127. 'REGION_CODE' => $region_code
  128. ];
  129. $ret['REGION_NAME'] = $t['PROV_NAME'];
  130. $ret['PID'] = '1';
  131. }
  132. }else if($deep==3){ // 地级
  133. $t = BaiduRegion::find()->select('CITY_CODE, CITY_NAME, PROV_CODE')
  134. ->where("CITY_CODE = :CITY_CODE", [':CITY_CODE'=>$region_code])
  135. // ->orderBy('CITY_CODE')->groupBy('CITY_CODE')
  136. ->asArray()->one();
  137. if($t){
  138. $ret = [
  139. 'REGION_CODE' => $region_code
  140. ];
  141. $ret['REGION_NAME'] = $t['CITY_NAME'];
  142. $ret['PID'] = $t['PROV_CODE'];
  143. }
  144. }else if($deep==4){ // 县级
  145. $t = BaiduRegion::find()->select('COUNTY_CODE, COUNTY_NAME, CITY_CODE, PROV_CODE')
  146. ->where("COUNTY_CODE = :COUNTY_CODE", [':COUNTY_CODE'=>$region_code])
  147. // ->orderBy('COUNTY_CODE')->groupBy('COUNTY_CODE')
  148. ->asArray()->one();
  149. if($t){
  150. $ret = [
  151. 'REGION_CODE' => $region_code
  152. ];
  153. $ret['REGION_NAME'] = $t['COUNTY_NAME'];
  154. $ret['PID'] = $t['CITY_CODE'];
  155. if(in_array($region_code, $ncOtherRegion)){
  156. $ret['PID'] = $t['PROV_CODE'];
  157. }
  158. }
  159. }else if($deep==5){ // 乡镇
  160. $t = BaiduRegion::find()->select('TOWN_CODE, TOWN_NAME, COUNTY_CODE')
  161. ->where("TOWN_CODE = :TOWN_CODE", [':TOWN_CODE'=>$region_code])
  162. // ->orderBy('COUNTY_CODE')->groupBy('COUNTY_CODE')
  163. ->asArray()->one();
  164. if($t){
  165. $ret = [
  166. 'REGION_CODE' => $region_code
  167. ];
  168. $ret['REGION_NAME'] = $t['TOWN_NAME'];
  169. $ret['PID'] = $t['COUNTY_CODE'];
  170. }
  171. }
  172. if(!$t){
  173. $ret = null;
  174. }
  175. return $ret;
  176. }
  177. // 构建js用到:
  178. public static function _getAllNcProv() {
  179. $ncRegion = Region::find()->select("REGION_CODE, REGION_NAME, PID, DEEP")
  180. ->where("STATUS = 1 AND DEEP = 2")
  181. ->orderBy("REGION_CODE")
  182. ->asArray()->all();
  183. return $ncRegion;
  184. }
  185. public static function _getAllNcCity() {
  186. $ncRegion = Region::find()->select("REGION_CODE, REGION_NAME, PID, DEEP")
  187. ->where("STATUS = 1 AND DEEP = 3 AND REGION_CODE!='999900'")
  188. ->orderBy("REGION_CODE")
  189. ->asArray()->all();
  190. return $ncRegion;
  191. }
  192. public static function _getAllNcCounty() {
  193. $ncRegion = Region::find()->select("REGION_CODE, REGION_NAME, PID, DEEP")
  194. ->where(['in', 'REGION_CODE', [
  195. '419001', '429004', '429005', '429006', '429021', // 济源、仙天潜神
  196. // '441900', '442000', '460400', '469001', '620200', // 东莞、中山、儋州、嘉峪关
  197. '469001','469002','469005','469006','469007','469021','469022','469023','469024','469025','469026','469027','469028','469029','469030', // 海南
  198. '659001', '659002', '659003', '659004', '659005', '659006', '659007', '659008', '659009', // 石河子、阿拉尔、图木舒克、五家渠、北屯、铁门关、双河、可克达拉、昆玉
  199. '659010', '659011', // 胡杨河、新星市
  200. ]])
  201. ->andWhere("STATUS = 1 AND DEEP = 4")
  202. ->orderBy("REGION_CODE")
  203. ->asArray()->all();
  204. return $ncRegion;
  205. }
  206. public static function _getAllNcCountyByCity($pid) {
  207. $ncRegion = Region::find()->select("REGION_CODE, REGION_NAME, PID, DEEP")
  208. ->where("STATUS = 1 AND PID = :PID", [':PID'=>$pid])
  209. ->orderBy("REGION_CODE")
  210. ->asArray()->all();
  211. return $ncRegion;
  212. }
  213. public static function _getAllNcTownByCity($pid) {
  214. $ncRegion = Region::find()->select("REGION_CODE, REGION_NAME, PID, DEEP")
  215. ->where("STATUS = 1 AND DEEP = 5 AND PID = :PID", [':PID'=>$pid])
  216. ->orderBy("REGION_CODE")
  217. ->asArray()->all();
  218. return $ncRegion;
  219. }
  220. }