diff --git a/Doc/DataEase优化步骤.txt b/Doc/DataEase优化步骤.txt new file mode 100644 index 00000000..0551339e --- /dev/null +++ b/Doc/DataEase优化步骤.txt @@ -0,0 +1,58 @@ +# 查看DataEase宿主机配置 +ulimit -n +输出:1014 + +# 临时修改大 +ulimit -n 10000 + +#永久修改 +vi /etc/security/limits.conf +在最底部加上 +* soft nofile 65535 +* hard nofile 65535 + +# 查看mysql的配置信息 +vi /opt/dataease2.0/conf/my.cnf + + +# 以下是修改后的内容 +[mysqld] +datadir=/var/lib/mysql + +default-storage-engine=INNODB +character_set_server=utf8 +#lower_case_table_names=1 +table_open_cache=128 +max_connections=2000 +max_connect_errors=6000 +innodb_file_per_table=1 +#innodb_buffer_pool_size=1G +max_allowed_packet=64M +transaction_isolation=READ-COMMITTED +innodb_flush_method=O_DIRECT +innodb_lock_wait_timeout=1800 +innodb_flush_log_at_trx_commit=0 +sync_binlog=0 + +sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION + +skip-name-resolve + +#下面是黄海增加的优化配置信息 +innodb_buffer_pool_size = 8192MB +innodb_buffer_pool_instances = 8 +max_allowed_packet = 8M +back_log = 1000 + + +[mysql] +default-character-set=utf8 + +[mysql.server] +default-character-set=utf8 + +# 重新启动下Mysql +docker restart 349ec45f2c98 + +# 在线升级dataease +dectl upgrade \ No newline at end of file diff --git a/Doc/DataEase源码修改.md b/Doc/DataEase源码修改.md new file mode 100644 index 00000000..55fabad4 --- /dev/null +++ b/Doc/DataEase源码修改.md @@ -0,0 +1,218 @@ +### 一、修改目标 + +由于地图组件是无法通过传递参数进行绘制固定区域地图的,黄海采用的办法是外部链接+$Java$路由,将控制权交给$Java$,获取要绘制哪个城市后,由$Java$修改数据库中的数据来达到改变城市的效果,具体代码见: + +```shell +D:\dsWork\YunNanDsBase\src\main\java\com\dsideal\base\DataEase\Controller\DataEaseController.java + +public void updateCityArea(String city_name){ + ... +} +``` + +这样做后,正常操作是没有问题的,可以从省级页面跳转到任何一个城市页面,城市的地图也能正确展示,但有一个问题:害怕刷新页面! + + + +因为一旦刷新了页面,数据库中的城市数据可能已经被修改,就会造成数据还是这个城市的,但地图已经是别的城市了! + +需要解决掉这个问题。 + + + +黄海的办法是采用$OpenResty$捕获链接,比如: + +``` +http://10.10.14.203:8100/#/de-link/X4l1qGNH?attachParams=eyJjaXR5X25hbWUiOiLkuL3msZ/luIIifQ== +``` + + + +一旦可以拦截成功,就可以采用前置拦截进行处理,修改数据表中城市为丽江市! + + + +但经实验发现,这样干行不通,原因是: + +- 去掉$DataEaseV2$中共享链接中存在的#号,这个#号会导致浏览器不会把#号后面的参数传递给$Nginx$,也就是刷新动作无法捕获。 + + + +### 二、解决办法 + +**配置信任的服务器$HTTPS$验证** + +``` +git config --global http.sslVerify false +``` + + + +**使用$TortoiseGit$下载源码** + +``` +https://github.com/dataease/dataease.git +``` + + + +**$DataEase$ $v2$ 开源代码 $Windows$ 从$0$到$1$环境搭建** + +``` +https://blog.csdn.net/chajinglong/article/details/142666079 +``` + + + +**前端项目编译** + +- 使用$vscode$ 打开`D:\dsWork\dataease\core\core-frontend\src\router\index.ts` + + + +**$vue3$ $history$模式配置及$nginx$服务器配置** + +``` +https://blog.csdn.net/jay100500/article/details/130072520 +``` + +**切换到$V2.10.1$版本** + +![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202412110806315.png) + + + +$NodeJs$与$NPM$版本 + +``` + v16.15.0 + 8.5.5 +``` + + + +### 三、遇到的问题 + +``` +D:\dsWork\DataEaseV2.10.1\core\core-frontend\src\custom-component\v-query\DynamicTimeFiltering.vue +D:\dsWork\DataEaseV2.10.1\core\core-frontend\src\custom-component\v-query\DynamicTimeRangeFiltering.vue +``` + +**改正前**: + +```javascript +timeGranularityMultiple: { + type: String as PropType, + default: () => { + return 'yearrange' + } + } +``` + +**改正后**: + +```javascript + timeGranularityMultiple: { + type: Object as PropType, + default: () => { + return { type: 'yearrange' } + } + } +``` + + + +**$core-frontend$前端打包失败** + +``` +**报错:** on project core-frontend: Failed to run task: 'npm run build:distributed' failed. +**原因:**在core-frontend/package.json中 "build:distributed": "NODE_OPTIONS=--max_old_space_size=4096 vite build --mode distributed && npm run +``` + +build:flush",而在**$Windows$系统不支持$NODE\_OPTIONS$命令** +**解决方案:** + +``` +使用npm install cross-env --save-dev 安装cross-env +``` + +![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202412111339690.png) + +在`core-frontend/package.json`中添加`cross-env`命令 + +![(https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202412111339065.png) + +![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202412111341686.png) + +### 四、去掉$Vue$中的#号 + +```javascript +D:\dsWork\DataEaseV2.10.1\core\core-frontend\src\router\index.ts + +//import { createRouter, createWebHashHistory } from 'vue-router' +import { createRouter, createWebHistory } from 'vue-router' + +const router = createRouter({ + //history: createWebHashHistory(), + history: createWebHistory(), + routes: routes as RouteRecordRaw[] +}) + +``` + +然后前端重新打包,漫长的等待... + +![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202412111557806.png) + + + +**配置好的$Nginx$配置文件** + +```nginx +upstream dataease { + server 10.10.14.203:8100; +} + +location /de2api { + client_max_body_size 600m; + client_body_buffer_size 128k; + proxy_connect_timeout 600; + proxy_read_timeout 600; + proxy_send_timeout 600; + proxy_buffer_size 64k; + proxy_buffers 4 32k; + proxy_busy_buffers_size 64k; + proxy_temp_file_write_size 64k; + + proxy_pass http://dataease; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } +``` + + + + + +### 五、参考资料 + +**官方:源码部署** + +``` +https://dataease.io/docs/v2/installation/deployment_installation/ +``` + +**手把手教你搭建$DataEase$二次开发环境$Windows$** + +``` +https://segmentfault.com/a/1190000045261128 +``` + +**用户名与密码** + +``` +admin +DataEase@123456 +``` + diff --git a/Doc/待处理/区/【10】新-概览/新-概览.xlsx b/Doc/待处理/区/【10】新-概览/新-概览.xlsx index 9ba3fdbf..777119b4 100644 Binary files a/Doc/待处理/区/【10】新-概览/新-概览.xlsx and b/Doc/待处理/区/【10】新-概览/新-概览.xlsx differ diff --git a/Doc/待处理/区/【10】新-概览/新-概览【成果】.xlsx b/Doc/待处理/区/【10】新-概览/新-概览【成果】.xlsx deleted file mode 100644 index 66c23aec..00000000 Binary files a/Doc/待处理/区/【10】新-概览/新-概览【成果】.xlsx and /dev/null differ diff --git a/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测.xlsx b/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测.xlsx index ba5361b0..d2f3e41d 100644 Binary files a/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测.xlsx and b/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测.xlsx differ diff --git a/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测【成果】.xlsx b/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测【成果】.xlsx deleted file mode 100644 index 5a7fd544..00000000 Binary files a/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测【成果】.xlsx and /dev/null differ diff --git a/Doc/待处理/区/【15】发展规模预测/教育规模发展情况与预测.xlsx b/Doc/待处理/区/【15】发展规模预测/教育规模发展情况与预测.xlsx index a9cdab40..58bf4bec 100644 Binary files a/Doc/待处理/区/【15】发展规模预测/教育规模发展情况与预测.xlsx and b/Doc/待处理/区/【15】发展规模预测/教育规模发展情况与预测.xlsx differ diff --git a/Doc/待处理/区/【15】发展规模预测/教育规模发展情况与预测【成果】.xlsx b/Doc/待处理/区/【15】发展规模预测/教育规模发展情况与预测【成果】.xlsx index 2c8cfc11..1fca772a 100644 Binary files a/Doc/待处理/区/【15】发展规模预测/教育规模发展情况与预测【成果】.xlsx and b/Doc/待处理/区/【15】发展规模预测/教育规模发展情况与预测【成果】.xlsx differ diff --git a/Doc/待处理/区/【1】学前幼儿入园总量预测/学前幼儿入园总量预测.xlsx b/Doc/待处理/区/【1】学前幼儿入园总量预测/学前幼儿入园总量预测.xlsx index 89aa95a7..b2a8708c 100644 Binary files a/Doc/待处理/区/【1】学前幼儿入园总量预测/学前幼儿入园总量预测.xlsx and b/Doc/待处理/区/【1】学前幼儿入园总量预测/学前幼儿入园总量预测.xlsx differ diff --git a/Doc/待处理/区/【1】学前幼儿入园总量预测/学前幼儿入园总量预测【成果】.xlsx b/Doc/待处理/区/【1】学前幼儿入园总量预测/学前幼儿入园总量预测【成果】.xlsx index e6130397..1abd3c17 100644 Binary files a/Doc/待处理/区/【1】学前幼儿入园总量预测/学前幼儿入园总量预测【成果】.xlsx and b/Doc/待处理/区/【1】学前幼儿入园总量预测/学前幼儿入园总量预测【成果】.xlsx differ diff --git a/Doc/待处理/区/【2】学前幼儿在园总量预测/学前幼儿在园总量预测.xlsx b/Doc/待处理/区/【2】学前幼儿在园总量预测/学前幼儿在园总量预测.xlsx index 42dd094e..d041aa05 100644 Binary files a/Doc/待处理/区/【2】学前幼儿在园总量预测/学前幼儿在园总量预测.xlsx and b/Doc/待处理/区/【2】学前幼儿在园总量预测/学前幼儿在园总量预测.xlsx differ diff --git a/Doc/待处理/区/【2】学前幼儿在园总量预测/学前幼儿在园总量预测【成果】.xlsx b/Doc/待处理/区/【2】学前幼儿在园总量预测/学前幼儿在园总量预测【成果】.xlsx deleted file mode 100644 index 22a25a85..00000000 Binary files a/Doc/待处理/区/【2】学前幼儿在园总量预测/学前幼儿在园总量预测【成果】.xlsx and /dev/null differ diff --git a/Doc/待处理/区/【3】义务教育招生总量预测/义务教育招生总量预测.xlsx b/Doc/待处理/区/【3】义务教育招生总量预测/义务教育招生总量预测.xlsx index 9070c3b4..4287d604 100644 Binary files a/Doc/待处理/区/【3】义务教育招生总量预测/义务教育招生总量预测.xlsx and b/Doc/待处理/区/【3】义务教育招生总量预测/义务教育招生总量预测.xlsx differ diff --git a/Doc/待处理/区/【3】义务教育招生总量预测/义务教育招生总量预测【成果】.xlsx b/Doc/待处理/区/【3】义务教育招生总量预测/义务教育招生总量预测【成果】.xlsx index 059d9944..ea484b33 100644 Binary files a/Doc/待处理/区/【3】义务教育招生总量预测/义务教育招生总量预测【成果】.xlsx and b/Doc/待处理/区/【3】义务教育招生总量预测/义务教育招生总量预测【成果】.xlsx differ diff --git a/Doc/待处理/区/【4】义务教育在校生总量预测/义务教育在校生总量预测.xlsx b/Doc/待处理/区/【4】义务教育在校生总量预测/义务教育在校生总量预测.xlsx index 05e4c7f7..0d31a20e 100644 Binary files a/Doc/待处理/区/【4】义务教育在校生总量预测/义务教育在校生总量预测.xlsx and b/Doc/待处理/区/【4】义务教育在校生总量预测/义务教育在校生总量预测.xlsx differ diff --git a/Doc/待处理/区/【4】义务教育在校生总量预测/义务教育在校生总量预测【成果】.xlsx b/Doc/待处理/区/【4】义务教育在校生总量预测/义务教育在校生总量预测【成果】.xlsx index 783eb65e..54570555 100644 Binary files a/Doc/待处理/区/【4】义务教育在校生总量预测/义务教育在校生总量预测【成果】.xlsx and b/Doc/待处理/区/【4】义务教育在校生总量预测/义务教育在校生总量预测【成果】.xlsx differ diff --git a/Doc/待处理/区/【5】普通高中招生总量预测/普通高中招生总量预测.xlsx b/Doc/待处理/区/【5】普通高中招生总量预测/普通高中招生总量预测.xlsx index 42469940..78d61ef9 100644 Binary files a/Doc/待处理/区/【5】普通高中招生总量预测/普通高中招生总量预测.xlsx and b/Doc/待处理/区/【5】普通高中招生总量预测/普通高中招生总量预测.xlsx differ diff --git a/Doc/待处理/区/【5】普通高中招生总量预测/普通高中招生总量预测【成果】.xlsx b/Doc/待处理/区/【5】普通高中招生总量预测/普通高中招生总量预测【成果】.xlsx index 2279972c..4ce545b2 100644 Binary files a/Doc/待处理/区/【5】普通高中招生总量预测/普通高中招生总量预测【成果】.xlsx and b/Doc/待处理/区/【5】普通高中招生总量预测/普通高中招生总量预测【成果】.xlsx differ diff --git a/Doc/待处理/区/【6】普通高中在校生总量预测/普通高中在校生总量预测.xlsx b/Doc/待处理/区/【6】普通高中在校生总量预测/普通高中在校生总量预测.xlsx index 4e6173a7..040ddc71 100644 Binary files a/Doc/待处理/区/【6】普通高中在校生总量预测/普通高中在校生总量预测.xlsx and b/Doc/待处理/区/【6】普通高中在校生总量预测/普通高中在校生总量预测.xlsx differ diff --git a/Doc/待处理/区/【6】普通高中在校生总量预测/普通高中在校生总量预测【成果】.xlsx b/Doc/待处理/区/【6】普通高中在校生总量预测/普通高中在校生总量预测【成果】.xlsx index 8ce6b97d..bca2be58 100644 Binary files a/Doc/待处理/区/【6】普通高中在校生总量预测/普通高中在校生总量预测【成果】.xlsx and b/Doc/待处理/区/【6】普通高中在校生总量预测/普通高中在校生总量预测【成果】.xlsx differ diff --git a/Doc/待处理/区/【7】终-人口总体情况/终-人口总体情况(万人).xlsx b/Doc/待处理/区/【7】终-人口总体情况/终-人口总体情况(万人).xlsx index e09ef14e..1b679fc5 100644 Binary files a/Doc/待处理/区/【7】终-人口总体情况/终-人口总体情况(万人).xlsx and b/Doc/待处理/区/【7】终-人口总体情况/终-人口总体情况(万人).xlsx differ diff --git a/Doc/待处理/区/【7】终-人口总体情况/终-人口总体情况(万人)【成果】.xlsx b/Doc/待处理/区/【7】终-人口总体情况/终-人口总体情况(万人)【成果】.xlsx index b156e618..43b1d102 100644 Binary files a/Doc/待处理/区/【7】终-人口总体情况/终-人口总体情况(万人)【成果】.xlsx and b/Doc/待处理/区/【7】终-人口总体情况/终-人口总体情况(万人)【成果】.xlsx differ diff --git a/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人).xlsx b/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人).xlsx index 9aac659e..edaef118 100644 Binary files a/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人).xlsx and b/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人).xlsx differ diff --git a/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人)【成果】.xlsx b/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人)【成果】.xlsx index b8bf9e76..b7a7b3e6 100644 Binary files a/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人)【成果】.xlsx and b/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人)【成果】.xlsx differ diff --git a/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双.xlsx b/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双.xlsx index a95f5b60..be119f75 100644 Binary files a/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双.xlsx and b/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双.xlsx differ diff --git a/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双【成果】.xlsx b/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双【成果】.xlsx index d42f0a36..e62d441c 100644 Binary files a/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双【成果】.xlsx and b/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双【成果】.xlsx differ diff --git a/Doc/更新三个县区/三个区的名称.txt b/Doc/更新三个县区/三个区的名称.txt new file mode 100644 index 00000000..dd40e9fe --- /dev/null +++ b/Doc/更新三个县区/三个区的名称.txt @@ -0,0 +1,16 @@ +磨憨-磨丁合作区 +http://10.10.14.203:8100/#/de-link/OxwyzDTr?attachParams=eyJhcmVhX25hbWUiOiLno6jmhqgt56Oo5LiB5ZCI5L2c5Yy6In0= + +经开区 +http://10.10.14.203:8100/#/de-link/OxwyzDTr?attachParams=eyJhcmVhX25hbWUiOiLnu4/lvIDljLoifQ== + +阳宗海区 +http://10.10.14.203:8100/#/de-link/OxwyzDTr?attachParams=eyJhcmVhX25hbWUiOiLpmLPlrpfmtbfljLoifQ== + + + +工具页面: +https://www.toolhelper.cn/EncodeDecode/Base64 + +加码示例: +{"area_name":"阳宗海区"} \ No newline at end of file diff --git a/Doc/更新三个县区/三个县区的数据/义务教育在校生总量预测【成果】.xlsx b/Doc/更新三个县区/三个县区的数据/义务教育在校生总量预测【成果】.xlsx new file mode 100644 index 00000000..256aabce Binary files /dev/null and b/Doc/更新三个县区/三个县区的数据/义务教育在校生总量预测【成果】.xlsx differ diff --git a/Doc/更新三个县区/三个县区的数据/义务教育招生总量预测【成果】.xlsx b/Doc/更新三个县区/三个县区的数据/义务教育招生总量预测【成果】.xlsx new file mode 100644 index 00000000..e3bdca1e Binary files /dev/null and b/Doc/更新三个县区/三个县区的数据/义务教育招生总量预测【成果】.xlsx differ diff --git a/Doc/更新三个县区/三个县区的数据/城镇&乡村人口变化及预测-双【成果】.xlsx b/Doc/更新三个县区/三个县区的数据/城镇&乡村人口变化及预测-双【成果】.xlsx new file mode 100644 index 00000000..12b0bdd5 Binary files /dev/null and b/Doc/更新三个县区/三个县区的数据/城镇&乡村人口变化及预测-双【成果】.xlsx differ diff --git a/Doc/更新三个县区/三个县区的数据/学前幼儿入园总量预测【成果】.xlsx b/Doc/更新三个县区/三个县区的数据/学前幼儿入园总量预测【成果】.xlsx new file mode 100644 index 00000000..a7083436 Binary files /dev/null and b/Doc/更新三个县区/三个县区的数据/学前幼儿入园总量预测【成果】.xlsx differ diff --git a/Doc/更新三个县区/三个县区的数据/学前幼儿在园总量预测【成果】.xlsx b/Doc/更新三个县区/三个县区的数据/学前幼儿在园总量预测【成果】.xlsx new file mode 100644 index 00000000..f16815cc Binary files /dev/null and b/Doc/更新三个县区/三个县区的数据/学前幼儿在园总量预测【成果】.xlsx differ diff --git a/Doc/更新三个县区/三个县区的数据/总人口变化及预测-双-(万人)【成果】.xlsx b/Doc/更新三个县区/三个县区的数据/总人口变化及预测-双-(万人)【成果】.xlsx new file mode 100644 index 00000000..244ab2e5 Binary files /dev/null and b/Doc/更新三个县区/三个县区的数据/总人口变化及预测-双-(万人)【成果】.xlsx differ diff --git a/Doc/更新三个县区/三个县区的数据/新-教育资源配置发展预测.xlsx b/Doc/更新三个县区/三个县区的数据/新-教育资源配置发展预测.xlsx new file mode 100644 index 00000000..08c1d55b Binary files /dev/null and b/Doc/更新三个县区/三个县区的数据/新-教育资源配置发展预测.xlsx differ diff --git a/Doc/更新三个县区/三个县区的数据/普通高中在校生总量预测【成果】.xlsx b/Doc/更新三个县区/三个县区的数据/普通高中在校生总量预测【成果】.xlsx new file mode 100644 index 00000000..0e9836cc Binary files /dev/null and b/Doc/更新三个县区/三个县区的数据/普通高中在校生总量预测【成果】.xlsx differ diff --git a/Doc/更新三个县区/三个县区的数据/普通高中招生总量预测【成果】.xlsx b/Doc/更新三个县区/三个县区的数据/普通高中招生总量预测【成果】.xlsx new file mode 100644 index 00000000..33f5fff2 Binary files /dev/null and b/Doc/更新三个县区/三个县区的数据/普通高中招生总量预测【成果】.xlsx differ diff --git a/Doc/更新三个县区/三个县区的数据/终-人口总体情况(万人)【成果】.xlsx b/Doc/更新三个县区/三个县区的数据/终-人口总体情况(万人)【成果】.xlsx new file mode 100644 index 00000000..7d9d459c Binary files /dev/null and b/Doc/更新三个县区/三个县区的数据/终-人口总体情况(万人)【成果】.xlsx differ diff --git a/Doc/更新三个县区/合并后的数据/【云南省】义务教育在校生总量预测.xlsx b/Doc/更新三个县区/合并后的数据/【云南省】义务教育在校生总量预测.xlsx new file mode 100644 index 00000000..23410647 Binary files /dev/null and b/Doc/更新三个县区/合并后的数据/【云南省】义务教育在校生总量预测.xlsx differ diff --git a/Doc/更新三个县区/合并后的数据/【云南省】义务教育招生总量预测.xlsx b/Doc/更新三个县区/合并后的数据/【云南省】义务教育招生总量预测.xlsx new file mode 100644 index 00000000..7be3b03a Binary files /dev/null and b/Doc/更新三个县区/合并后的数据/【云南省】义务教育招生总量预测.xlsx differ diff --git a/Doc/更新三个县区/合并后的数据/【云南省】城镇&乡村人口变化及预测-双.xlsx b/Doc/更新三个县区/合并后的数据/【云南省】城镇&乡村人口变化及预测-双.xlsx new file mode 100644 index 00000000..5cfca3a2 Binary files /dev/null and b/Doc/更新三个县区/合并后的数据/【云南省】城镇&乡村人口变化及预测-双.xlsx differ diff --git a/Doc/更新三个县区/合并后的数据/【云南省】学前幼儿入园总量预测.xlsx b/Doc/更新三个县区/合并后的数据/【云南省】学前幼儿入园总量预测.xlsx new file mode 100644 index 00000000..ac9d2796 Binary files /dev/null and b/Doc/更新三个县区/合并后的数据/【云南省】学前幼儿入园总量预测.xlsx differ diff --git a/Doc/更新三个县区/合并后的数据/【云南省】学前幼儿在园总量预测.xlsx b/Doc/更新三个县区/合并后的数据/【云南省】学前幼儿在园总量预测.xlsx new file mode 100644 index 00000000..e2385a8c Binary files /dev/null and b/Doc/更新三个县区/合并后的数据/【云南省】学前幼儿在园总量预测.xlsx differ diff --git a/Doc/更新三个县区/合并后的数据/【云南省】总人口变化及预测-双-.xlsx b/Doc/更新三个县区/合并后的数据/【云南省】总人口变化及预测-双-.xlsx new file mode 100644 index 00000000..705b7d4e Binary files /dev/null and b/Doc/更新三个县区/合并后的数据/【云南省】总人口变化及预测-双-.xlsx differ diff --git a/Doc/更新三个县区/合并后的数据/【云南省】新-教育资源配置发展预测.xlsx b/Doc/更新三个县区/合并后的数据/【云南省】新-教育资源配置发展预测.xlsx new file mode 100644 index 00000000..6bb4cdc9 Binary files /dev/null and b/Doc/更新三个县区/合并后的数据/【云南省】新-教育资源配置发展预测.xlsx differ diff --git a/Doc/更新三个县区/合并后的数据/【云南省】普通高中在校生总量预测.xlsx b/Doc/更新三个县区/合并后的数据/【云南省】普通高中在校生总量预测.xlsx new file mode 100644 index 00000000..6b3817d8 Binary files /dev/null and b/Doc/更新三个县区/合并后的数据/【云南省】普通高中在校生总量预测.xlsx differ diff --git a/Doc/更新三个县区/合并后的数据/【云南省】普通高中招生总量预测.xlsx b/Doc/更新三个县区/合并后的数据/【云南省】普通高中招生总量预测.xlsx new file mode 100644 index 00000000..ce77eb97 Binary files /dev/null and b/Doc/更新三个县区/合并后的数据/【云南省】普通高中招生总量预测.xlsx differ diff --git a/Doc/更新三个县区/合并后的数据/【云南省】终-人口总体情况.xlsx b/Doc/更新三个县区/合并后的数据/【云南省】终-人口总体情况.xlsx new file mode 100644 index 00000000..56250fc5 Binary files /dev/null and b/Doc/更新三个县区/合并后的数据/【云南省】终-人口总体情况.xlsx differ diff --git a/Doc/更新三个县区/未更新前/【云南省】义务教育在校生总量预测.xlsx b/Doc/更新三个县区/未更新前/【云南省】义务教育在校生总量预测.xlsx new file mode 100644 index 00000000..5f2a7b73 Binary files /dev/null and b/Doc/更新三个县区/未更新前/【云南省】义务教育在校生总量预测.xlsx differ diff --git a/Doc/更新三个县区/未更新前/【云南省】义务教育招生总量预测.xlsx b/Doc/更新三个县区/未更新前/【云南省】义务教育招生总量预测.xlsx new file mode 100644 index 00000000..5a162524 Binary files /dev/null and b/Doc/更新三个县区/未更新前/【云南省】义务教育招生总量预测.xlsx differ diff --git a/Doc/更新三个县区/未更新前/【云南省】城镇&乡村人口变化及预测-双.xlsx b/Doc/更新三个县区/未更新前/【云南省】城镇&乡村人口变化及预测-双.xlsx new file mode 100644 index 00000000..0e92b95f Binary files /dev/null and b/Doc/更新三个县区/未更新前/【云南省】城镇&乡村人口变化及预测-双.xlsx differ diff --git a/Doc/更新三个县区/未更新前/【云南省】学前幼儿入园总量预测.xlsx b/Doc/更新三个县区/未更新前/【云南省】学前幼儿入园总量预测.xlsx new file mode 100644 index 00000000..7fe395a8 Binary files /dev/null and b/Doc/更新三个县区/未更新前/【云南省】学前幼儿入园总量预测.xlsx differ diff --git a/Doc/更新三个县区/未更新前/【云南省】学前幼儿在园总量预测.xlsx b/Doc/更新三个县区/未更新前/【云南省】学前幼儿在园总量预测.xlsx new file mode 100644 index 00000000..d461ced7 Binary files /dev/null and b/Doc/更新三个县区/未更新前/【云南省】学前幼儿在园总量预测.xlsx differ diff --git a/Doc/更新三个县区/未更新前/【云南省】总人口变化及预测-双-.xlsx b/Doc/更新三个县区/未更新前/【云南省】总人口变化及预测-双-.xlsx new file mode 100644 index 00000000..0c06d441 Binary files /dev/null and b/Doc/更新三个县区/未更新前/【云南省】总人口变化及预测-双-.xlsx differ diff --git a/Doc/更新三个县区/未更新前/【云南省】新-教育资源配置发展预测.xlsx b/Doc/更新三个县区/未更新前/【云南省】新-教育资源配置发展预测.xlsx new file mode 100644 index 00000000..38c546f2 Binary files /dev/null and b/Doc/更新三个县区/未更新前/【云南省】新-教育资源配置发展预测.xlsx differ diff --git a/Doc/更新三个县区/未更新前/【云南省】普通高中在校生总量预测.xlsx b/Doc/更新三个县区/未更新前/【云南省】普通高中在校生总量预测.xlsx new file mode 100644 index 00000000..77a6a9bf Binary files /dev/null and b/Doc/更新三个县区/未更新前/【云南省】普通高中在校生总量预测.xlsx differ diff --git a/Doc/更新三个县区/未更新前/【云南省】普通高中招生总量预测.xlsx b/Doc/更新三个县区/未更新前/【云南省】普通高中招生总量预测.xlsx new file mode 100644 index 00000000..4e82619d Binary files /dev/null and b/Doc/更新三个县区/未更新前/【云南省】普通高中招生总量预测.xlsx differ diff --git a/Doc/更新三个县区/未更新前/【云南省】终-人口总体情况.xlsx b/Doc/更新三个县区/未更新前/【云南省】终-人口总体情况.xlsx new file mode 100644 index 00000000..0cad74c2 Binary files /dev/null and b/Doc/更新三个县区/未更新前/【云南省】终-人口总体情况.xlsx differ diff --git a/有问题/南华县.docx b/Doc/有问题/南华县.docx similarity index 100% rename from 有问题/南华县.docx rename to Doc/有问题/南华县.docx diff --git a/有问题/(图1为图片并数据显示不全,图2为图片,缺少图3)南华县.docx b/Doc/有问题/(图1为图片并数据显示不全,图2为图片,缺少图3)南华县.docx similarity index 100% rename from 有问题/(图1为图片并数据显示不全,图2为图片,缺少图3)南华县.docx rename to Doc/有问题/(图1为图片并数据显示不全,图2为图片,缺少图3)南华县.docx diff --git a/有问题/(图2缺少乡村人口、缺少图3)蒙自市人口变化趋势对基础教育的影响(修改).docx b/Doc/有问题/(图2缺少乡村人口、缺少图3)蒙自市人口变化趋势对基础教育的影响(修改).docx similarity index 100% rename from 有问题/(图2缺少乡村人口、缺少图3)蒙自市人口变化趋势对基础教育的影响(修改).docx rename to Doc/有问题/(图2缺少乡村人口、缺少图3)蒙自市人口变化趋势对基础教育的影响(修改).docx diff --git a/Doc/缺失的三个开发区-成果/义务教育在校生总量预测【成果】.xlsx b/Doc/缺失的三个开发区-成果/义务教育在校生总量预测【成果】.xlsx new file mode 100644 index 00000000..54570555 Binary files /dev/null and b/Doc/缺失的三个开发区-成果/义务教育在校生总量预测【成果】.xlsx differ diff --git a/Doc/缺失的三个开发区-成果/义务教育招生总量预测【成果】.xlsx b/Doc/缺失的三个开发区-成果/义务教育招生总量预测【成果】.xlsx new file mode 100644 index 00000000..ea484b33 Binary files /dev/null and b/Doc/缺失的三个开发区-成果/义务教育招生总量预测【成果】.xlsx differ diff --git a/Doc/缺失的三个开发区-成果/城镇&乡村人口变化及预测-双【成果】.xlsx b/Doc/缺失的三个开发区-成果/城镇&乡村人口变化及预测-双【成果】.xlsx new file mode 100644 index 00000000..e62d441c Binary files /dev/null and b/Doc/缺失的三个开发区-成果/城镇&乡村人口变化及预测-双【成果】.xlsx differ diff --git a/Doc/缺失的三个开发区-成果/学前幼儿入园总量预测【成果】.xlsx b/Doc/缺失的三个开发区-成果/学前幼儿入园总量预测【成果】.xlsx new file mode 100644 index 00000000..4660b22b Binary files /dev/null and b/Doc/缺失的三个开发区-成果/学前幼儿入园总量预测【成果】.xlsx differ diff --git a/Doc/缺失的三个开发区-成果/学前幼儿在园总量预测【成果】.xlsx b/Doc/缺失的三个开发区-成果/学前幼儿在园总量预测【成果】.xlsx new file mode 100644 index 00000000..550997c5 Binary files /dev/null and b/Doc/缺失的三个开发区-成果/学前幼儿在园总量预测【成果】.xlsx differ diff --git a/Doc/缺失的三个开发区-成果/总人口变化及预测-双-(万人)【成果】.xlsx b/Doc/缺失的三个开发区-成果/总人口变化及预测-双-(万人)【成果】.xlsx new file mode 100644 index 00000000..b7a7b3e6 Binary files /dev/null and b/Doc/缺失的三个开发区-成果/总人口变化及预测-双-(万人)【成果】.xlsx differ diff --git a/Doc/缺失的三个开发区-成果/教育规模发展情况与预测【成果】.xlsx b/Doc/缺失的三个开发区-成果/教育规模发展情况与预测【成果】.xlsx new file mode 100644 index 00000000..1fca772a Binary files /dev/null and b/Doc/缺失的三个开发区-成果/教育规模发展情况与预测【成果】.xlsx differ diff --git a/Doc/缺失的三个开发区-成果/普通高中在校生总量预测【成果】.xlsx b/Doc/缺失的三个开发区-成果/普通高中在校生总量预测【成果】.xlsx new file mode 100644 index 00000000..bca2be58 Binary files /dev/null and b/Doc/缺失的三个开发区-成果/普通高中在校生总量预测【成果】.xlsx differ diff --git a/Doc/缺失的三个开发区-成果/普通高中招生总量预测【成果】.xlsx b/Doc/缺失的三个开发区-成果/普通高中招生总量预测【成果】.xlsx new file mode 100644 index 00000000..4ce545b2 Binary files /dev/null and b/Doc/缺失的三个开发区-成果/普通高中招生总量预测【成果】.xlsx differ diff --git a/Doc/缺失的三个开发区-成果/终-人口总体情况(万人)【成果】.xlsx b/Doc/缺失的三个开发区-成果/终-人口总体情况(万人)【成果】.xlsx new file mode 100644 index 00000000..43b1d102 Binary files /dev/null and b/Doc/缺失的三个开发区-成果/终-人口总体情况(万人)【成果】.xlsx differ diff --git a/Doc/缺失的三个开发区/《磨憨-磨丁合作区人口变化趋势对基础教育的影响》研究报告.docx b/Doc/缺失的三个开发区/《磨憨-磨丁合作区人口变化趋势对基础教育的影响》研究报告.docx new file mode 100644 index 00000000..09cf7655 Binary files /dev/null and b/Doc/缺失的三个开发区/《磨憨-磨丁合作区人口变化趋势对基础教育的影响》研究报告.docx differ diff --git a/Doc/缺失的三个开发区/磨憨-磨丁合作区教育发展规模数据收集表.xlsx b/Doc/缺失的三个开发区/磨憨-磨丁合作区教育发展规模数据收集表.xlsx new file mode 100644 index 00000000..db353d48 Binary files /dev/null and b/Doc/缺失的三个开发区/磨憨-磨丁合作区教育发展规模数据收集表.xlsx differ diff --git a/Doc/缺失的三个开发区/经开区人口变化趋势对基础教育的影响.docx b/Doc/缺失的三个开发区/经开区人口变化趋势对基础教育的影响.docx new file mode 100644 index 00000000..26d5fbe9 Binary files /dev/null and b/Doc/缺失的三个开发区/经开区人口变化趋势对基础教育的影响.docx differ diff --git a/Doc/缺失的三个开发区/经开区教育发展规模数据收集表.xlsx b/Doc/缺失的三个开发区/经开区教育发展规模数据收集表.xlsx new file mode 100644 index 00000000..0a519fbc Binary files /dev/null and b/Doc/缺失的三个开发区/经开区教育发展规模数据收集表.xlsx differ diff --git a/Doc/缺失的三个开发区/阳宗海人口变化趋势对基础教育的影响.docx b/Doc/缺失的三个开发区/阳宗海人口变化趋势对基础教育的影响.docx new file mode 100644 index 00000000..3b208da8 Binary files /dev/null and b/Doc/缺失的三个开发区/阳宗海人口变化趋势对基础教育的影响.docx differ diff --git a/Doc/缺失的三个开发区/阳宗海教育发展规模数据收集表.xlsx b/Doc/缺失的三个开发区/阳宗海教育发展规模数据收集表.xlsx new file mode 100644 index 00000000..085c68e6 Binary files /dev/null and b/Doc/缺失的三个开发区/阳宗海教育发展规模数据收集表.xlsx differ diff --git a/Doc/解决刷新市州等页面地图可能不正确的问题.txt b/Doc/解决刷新市州等页面地图可能不正确的问题.txt deleted file mode 100644 index bca60ca0..00000000 --- a/Doc/解决刷新市州等页面地图可能不正确的问题.txt +++ /dev/null @@ -1,5 +0,0 @@ -因为用户可能打开了一个市州的页面,然后他又打开了另一个市州的页面, -这时,他回来刷新了第一个市州的页面,就会造成地图显示错误。 -原因:我们在通过JAVA将城市动态修改的,如果再点一次,数据就改动了。 - -办法:采用OpenResty开发一个前置的拦截器,发现固定的链接访问时,就解析base64,然后先写入数据库正确的市州代码,再让其它访问即可。 \ No newline at end of file diff --git a/Doc/账号/云南教育厅修改.txt b/Doc/账号/云南教育厅修改.txt new file mode 100644 index 00000000..ad8f2ca6 --- /dev/null +++ b/Doc/账号/云南教育厅修改.txt @@ -0,0 +1,19 @@ +#省管理员 +sys1 +12345678 + +大屏数据维护 +大屏数据省代录市数据 +大屏数据省代录区数据 + +#市州管理员 +shi1 +200187 +大屏数据维护 +大屏数据市级代录 + + +#县区管理员 +qu1 +358526 +大屏数据维护 diff --git a/Doc/账号/县区管理员账号.xls b/Doc/账号/县区管理员账号.xls new file mode 100644 index 00000000..6a935350 Binary files /dev/null and b/Doc/账号/县区管理员账号.xls differ diff --git a/Doc/账号/市管理员账号.xls b/Doc/账号/市管理员账号.xls new file mode 100644 index 00000000..b143fdeb Binary files /dev/null and b/Doc/账号/市管理员账号.xls differ diff --git a/Doc/长春开发区地图/156810100_full.json b/Doc/长春开发区地图/156810100_full.json new file mode 100644 index 00000000..5b603a8a --- /dev/null +++ b/Doc/长春开发区地图/156810100_full.json @@ -0,0 +1,5807 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "name": "长春新区(北湖)" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 125.37443161010741, + 44.088448124967535 + ], + [ + 125.37147045135498, + 44.08743090250518 + ], + [ + 125.3691530227661, + 44.08758502824516 + ], + [ + 125.36001205444335, + 44.08293025382515 + ], + [ + 125.36014080047607, + 44.08194376452889 + ], + [ + 125.35250186920166, + 44.08092643021364 + ], + [ + 125.35271644592284, + 44.08323852835681 + ], + [ + 125.35014152526854, + 44.08231369994265 + ], + [ + 125.3444766998291, + 44.07713439364974 + ], + [ + 125.34310340881348, + 44.08067980107852 + ], + [ + 125.33872604370117, + 44.07876839042275 + ], + [ + 125.34031391143797, + 44.07509954213302 + ], + [ + 125.33297538757323, + 44.07257129580427 + ], + [ + 125.33048629760741, + 44.06853204402051 + ], + [ + 125.32855510711671, + 44.06458502791567 + ], + [ + 125.32413482666016, + 44.062303039171155 + ], + [ + 125.32349109649658, + 44.06319734253895 + ], + [ + 125.32237529754637, + 44.0627656115653 + ], + [ + 125.32482147216797, + 44.05758459430318 + ], + [ + 125.32078742980957, + 44.05508644184596 + ], + [ + 125.33065795898438, + 44.054006960644706 + ], + [ + 125.33134460449219, + 44.050984308596504 + ], + [ + 125.33250331878664, + 44.04984306311329 + ], + [ + 125.33125877380371, + 44.04786896495563 + ], + [ + 125.33426284790038, + 44.04469176258148 + ], + [ + 125.33529281616211, + 44.04484599964191 + ], + [ + 125.33666610717773, + 44.04284088653304 + ], + [ + 125.3358507156372, + 44.04151438979323 + ], + [ + 125.32859802246094, + 44.037442167760894 + ], + [ + 125.31477928161621, + 44.034171847449166 + ], + [ + 125.31314849853516, + 44.034943165673276 + ], + [ + 125.31357765197754, + 44.02133563878369 + ], + [ + 125.31198978424071, + 44.019422311973806 + ], + [ + 125.3125476837158, + 44.01624358416797 + ], + [ + 125.31156063079834, + 44.013774551788885 + ], + [ + 125.31452178955077, + 44.01130541660934 + ], + [ + 125.3171396255493, + 44.01127455176905 + ], + [ + 125.31744003295898, + 44.007508920738246 + ], + [ + 125.31808376312256, + 44.00399000026026 + ], + [ + 125.31744003295898, + 44.001304367875015 + ], + [ + 125.3190279006958, + 44.000717834282774 + ], + [ + 125.32005786895752, + 43.999421265766166 + ], + [ + 125.32022953033447, + 43.99719851096094 + ], + [ + 125.3211736679077, + 43.99559313626136 + ], + [ + 125.32087326049805, + 43.992691002547026 + ], + [ + 125.32280445098877, + 43.99086937803825 + ], + [ + 125.3252077102661, + 43.991394258630905 + ], + [ + 125.32718181610106, + 43.989541718172 + ], + [ + 125.32911300659178, + 43.98917120314138 + ], + [ + 125.33022880554199, + 43.98796701331814 + ], + [ + 125.33537864685059, + 43.98697894188333 + ], + [ + 125.33924102783203, + 43.9871642065302 + ], + [ + 125.34211635589598, + 43.985126263611804 + ], + [ + 125.34284591674803, + 43.982470657252016 + ], + [ + 125.34567832946777, + 43.98256329668287 + ], + [ + 125.34657955169678, + 43.97870319792429 + ], + [ + 125.34370422363281, + 43.9735148298778 + ], + [ + 125.35301685333252, + 43.97357659883031 + ], + [ + 125.35833835601807, + 43.96844955713785 + ], + [ + 125.36460399627684, + 43.9576071863508 + ], + [ + 125.36795139312743, + 43.9556918041089 + ], + [ + 125.36850929260252, + 43.95349830667529 + ], + [ + 125.37232875823975, + 43.949141966085065 + ], + [ + 125.37202835083008, + 43.95383814960611 + ], + [ + 125.37408828735352, + 43.95627878264734 + ], + [ + 125.37559032440186, + 43.95671128943919 + ], + [ + 125.42258262634279, + 43.95655682308919 + ], + [ + 125.42155265808105, + 43.95284951022894 + ], + [ + 125.42502880096434, + 43.95226249781701 + ], + [ + 125.43163776397704, + 43.97058073062806 + ], + [ + 125.43198108673096, + 43.97308244541117 + ], + [ + 125.43052196502686, + 43.99685891608883 + ], + [ + 125.42721748352052, + 44.00834231869766 + ], + [ + 125.42331218719482, + 44.01331159677322 + ], + [ + 125.42584419250487, + 44.014823903110944 + ], + [ + 125.42524337768556, + 44.016212721897716 + ], + [ + 125.42146682739258, + 44.015255983552414 + ], + [ + 125.42078018188477, + 44.01661393015826 + ], + [ + 125.42631626129149, + 44.01849648651216 + ], + [ + 125.43039321899413, + 44.022816881650314 + ], + [ + 125.42331218719482, + 44.02883405022857 + ], + [ + 125.42253971099852, + 44.0287414830304 + ], + [ + 125.41863441467287, + 44.03352393238253 + ], + [ + 125.41867733001709, + 44.05153950115052 + ], + [ + 125.41271209716798, + 44.05194047031391 + ], + [ + 125.41018009185791, + 44.05440791310222 + ], + [ + 125.4087209701538, + 44.05406864581487 + ], + [ + 125.40816307067871, + 44.05480886284506 + ], + [ + 125.40910720825195, + 44.05601169578525 + ], + [ + 125.40515899658203, + 44.055055599799 + ], + [ + 125.4052448272705, + 44.0567210473481 + ], + [ + 125.39185523986816, + 44.050336577372235 + ], + [ + 125.38249969482423, + 44.05379106204314 + ], + [ + 125.37606239318848, + 44.05767711644426 + ], + [ + 125.38310050964354, + 44.06174794752731 + ], + [ + 125.38215637207031, + 44.06631187984567 + ], + [ + 125.37503242492674, + 44.06575682579049 + ], + [ + 125.37194252014162, + 44.07038211722099 + ], + [ + 125.37365913391113, + 44.07124546492416 + ], + [ + 125.37400245666504, + 44.07395876143088 + ], + [ + 125.37537574768066, + 44.07531536303529 + ], + [ + 125.3734016418457, + 44.08055648612541 + ], + [ + 125.37056922912596, + 44.082036248599195 + ], + [ + 125.37571907043456, + 44.085982100919225 + ], + [ + 125.37443161010741, + 44.088448124967535 + ] + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "长春新区(高新)" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 125.22122383117674, + 43.80436735534033 + ], + [ + 125.21727561950682, + 43.802385093691115 + ], + [ + 125.21920680999754, + 43.79866817581804 + ], + [ + 125.2181339263916, + 43.79811061819304 + ], + [ + 125.2199363708496, + 43.794021703302974 + ], + [ + 125.19517421722412, + 43.78138147017093 + ], + [ + 125.20019531249999, + 43.77025709350306 + ], + [ + 125.20272731781004, + 43.75584500569063 + ], + [ + 125.20337104797362, + 43.73960012674238 + ], + [ + 125.20633220672607, + 43.738793968325226 + ], + [ + 125.23319721221925, + 43.751722200099096 + ], + [ + 125.25173664093018, + 43.72651421389918 + ], + [ + 125.26409626007081, + 43.7342668771467 + ], + [ + 125.25783061981201, + 43.7529621714962 + ], + [ + 125.2556848526001, + 43.75073020448396 + ], + [ + 125.25358200073244, + 43.756185976894656 + ], + [ + 125.25371074676514, + 43.75776681800001 + ], + [ + 125.25650024414062, + 43.75872770100856 + ], + [ + 125.25654315948486, + 43.76068041570689 + ], + [ + 125.26641368865967, + 43.76353188458899 + ], + [ + 125.26461124420165, + 43.76749891955783 + ], + [ + 125.26473999023439, + 43.77059798257491 + ], + [ + 125.26216506958008, + 43.77313909442939 + ], + [ + 125.26126384735106, + 43.777012532806765 + ], + [ + 125.25860309600829, + 43.781102611366684 + ], + [ + 125.2588176727295, + 43.78348836131966 + ], + [ + 125.26628494262695, + 43.78599794358248 + ], + [ + 125.26409626007081, + 43.78952976976758 + ], + [ + 125.26649951934813, + 43.7940836586464 + ], + [ + 125.26598453521727, + 43.79600424243409 + ], + [ + 125.26396751403807, + 43.79715036786509 + ], + [ + 125.2633237838745, + 43.79903987801094 + ], + [ + 125.26405334472655, + 43.80901302334783 + ], + [ + 125.29572486877441, + 43.818922574183254 + ], + [ + 125.29555320739745, + 43.83037844247522 + ], + [ + 125.2759838104248, + 43.829821180837406 + ], + [ + 125.27589797973631, + 43.8372509082031 + ], + [ + 125.26731491088866, + 43.837188997630385 + ], + [ + 125.26559829711914, + 43.836322242867624 + ], + [ + 125.25650024414062, + 43.84610345873097 + ], + [ + 125.23538589477539, + 43.835517387886 + ], + [ + 125.23178100585936, + 43.83787001039733 + ], + [ + 125.20036697387695, + 43.81037568409368 + ], + [ + 125.20740509033202, + 43.80672120561967 + ], + [ + 125.22122383117674, + 43.80436735534033 + ] + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "经开区" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 125.46266555786131, + 43.87611806075357 + ], + [ + 125.474853515625, + 43.87741732078134 + ], + [ + 125.47528266906738, + 43.8742000536979 + ], + [ + 125.4733943939209, + 43.873581328575504 + ], + [ + 125.47665596008301, + 43.87147761510885 + ], + [ + 125.4832649230957, + 43.87153949009429 + ], + [ + 125.48412322998047, + 43.87463315746137 + ], + [ + 125.4806900024414, + 43.879025889184724 + ], + [ + 125.48274993896484, + 43.88824338597516 + ], + [ + 125.48335075378418, + 43.895789536161864 + ], + [ + 125.46584129333495, + 43.91520719741534 + ], + [ + 125.46378135681151, + 43.91254846524209 + ], + [ + 125.45408248901366, + 43.91588731912389 + ], + [ + 125.45331001281737, + 43.91124997147516 + ], + [ + 125.44386863708496, + 43.90877657163917 + ], + [ + 125.4444694519043, + 43.91149730580548 + ], + [ + 125.43168067932127, + 43.90302551971789 + ], + [ + 125.42481422424316, + 43.901603130856536 + ], + [ + 125.41786193847655, + 43.90203603541184 + ], + [ + 125.41683197021484, + 43.90073731230249 + ], + [ + 125.41605949401855, + 43.87933522428377 + ], + [ + 125.38782119750977, + 43.880263219944986 + ], + [ + 125.3866195678711, + 43.86745560326477 + ], + [ + 125.38790702819824, + 43.862381293467486 + ], + [ + 125.35202980041502, + 43.86207187036178 + ], + [ + 125.35134315490721, + 43.84963173160685 + ], + [ + 125.35305976867676, + 43.84567014767305 + ], + [ + 125.34790992736816, + 43.83892246938548 + ], + [ + 125.35288810729982, + 43.833969559332715 + ], + [ + 125.35640716552734, + 43.832297859402075 + ], + [ + 125.35640716552734, + 43.830688030025804 + ], + [ + 125.35752296447754, + 43.82889239987879 + ], + [ + 125.36155700683594, + 43.82722055773225 + ], + [ + 125.36602020263673, + 43.827468241005015 + ], + [ + 125.3679943084717, + 43.828458963818704 + ], + [ + 125.38138389587402, + 43.82889239987879 + ], + [ + 125.38395881652832, + 43.827406320283195 + ], + [ + 125.38936614990234, + 43.827468241005015 + ], + [ + 125.39219856262206, + 43.82660134505382 + ], + [ + 125.39451599121094, + 43.82536290042663 + ], + [ + 125.39958000183107, + 43.825734436512654 + ], + [ + 125.42713165283202, + 43.850683983112454 + ], + [ + 125.43846130371094, + 43.84746527299301 + ], + [ + 125.4388904571533, + 43.853654945977816 + ], + [ + 125.44652938842773, + 43.85718277215135 + ], + [ + 125.44644355773926, + 43.859720202276236 + ], + [ + 125.45785903930663, + 43.862133755111394 + ], + [ + 125.46266555786131, + 43.87611806075357 + ] + ], + [ + [ + 125.37215709686282, + 43.94898748005993 + ], + [ + 125.37554740905762, + 43.94623756162791 + ], + [ + 125.37842273712157, + 43.94083004762969 + ], + [ + 125.38486003875731, + 43.936132836320326 + ], + [ + 125.40631771087646, + 43.937956140036796 + ], + [ + 125.40537357330321, + 43.93050805567305 + ], + [ + 125.39473056793211, + 43.92871543137507 + ], + [ + 125.39743423461913, + 43.92438818460419 + ], + [ + 125.39739131927489, + 43.919504199431636 + ], + [ + 125.39824962615968, + 43.91684565924676 + ], + [ + 125.40185451507571, + 43.91845316285845 + ], + [ + 125.40305614471438, + 43.915238112207085 + ], + [ + 125.40975093841556, + 43.9198133243022 + ], + [ + 125.42266845703124, + 43.9285608922681 + ], + [ + 125.42395591735838, + 43.92754092409175 + ], + [ + 125.43627262115477, + 43.93276421290811 + ], + [ + 125.44150829315187, + 43.936132836320276 + ], + [ + 125.45279502868651, + 43.930044451120445 + ], + [ + 125.45627117156982, + 43.93016807935447 + ], + [ + 125.46056270599367, + 43.93304236335304 + ], + [ + 125.45665740966795, + 43.936009220485296 + ], + [ + 125.45768737792969, + 43.93851239105732 + ], + [ + 125.45489788055419, + 43.940150211065394 + ], + [ + 125.45618534088133, + 43.94302401260676 + ], + [ + 125.46875953674316, + 43.93801794596272 + ], + [ + 125.48206329345703, + 43.93860509905481 + ], + [ + 125.49249172210696, + 43.93773981879015 + ], + [ + 125.49498081207274, + 43.93474214336054 + ], + [ + 125.49789905548096, + 43.93446400086573 + ], + [ + 125.50068855285643, + 43.92769546584876 + ], + [ + 125.50206184387206, + 43.92655184733864 + ], + [ + 125.50055980682373, + 43.92457364449369 + ], + [ + 125.50244808197024, + 43.9227808413424 + ], + [ + 125.51532268524169, + 43.93319689081589 + ], + [ + 125.51841259002684, + 43.93347503923717 + ], + [ + 125.52351951599121, + 43.94540329155843 + ], + [ + 125.52712440490721, + 43.94836953194398 + ], + [ + 125.52931308746338, + 43.953869044321635 + ], + [ + 125.52845478057863, + 43.95683486223007 + ], + [ + 125.52592277526854, + 43.95871931544918 + ], + [ + 125.52579402923585, + 43.961530437858755 + ], + [ + 125.52175998687746, + 43.96412520203068 + ], + [ + 125.50648212432863, + 43.96783181139651 + ], + [ + 125.50227642059329, + 43.96566965070761 + ], + [ + 125.50176143646243, + 43.9673376101777 + ], + [ + 125.49704074859622, + 43.966843404847076 + ], + [ + 125.49060344696048, + 43.96727583473625 + ], + [ + 125.49189090728763, + 43.969715915822455 + ], + [ + 125.48837184906007, + 43.97332952263469 + ], + [ + 125.49214839935304, + 43.97715908815004 + ], + [ + 125.48871517181398, + 43.97777673687828 + ], + [ + 125.4882860183716, + 43.974997267006245 + ], + [ + 125.4839086532593, + 43.97462666119351 + ], + [ + 125.48232078552245, + 43.97647966712835 + ], + [ + 125.48322200775146, + 43.98148249432801 + ], + [ + 125.47983169555663, + 43.98645402224371 + ], + [ + 125.48493862152101, + 44.00383565686425 + ], + [ + 125.48189163208008, + 44.004669106432225 + ], + [ + 125.47000408172607, + 44.00334175529847 + ], + [ + 125.46146392822266, + 44.005440808554624 + ], + [ + 125.45438289642334, + 44.0063359704397 + ], + [ + 125.44584274291992, + 44.0012734978305 + ], + [ + 125.43335437774658, + 43.99747635986527 + ], + [ + 125.43266773223877, + 44.0002547773509 + ], + [ + 125.43060779571533, + 44.00003868287922 + ], + [ + 125.43241024017335, + 43.97320598415144 + ], + [ + 125.42554378509523, + 43.952447870783985 + ], + [ + 125.42159557342531, + 43.95306577649804 + ], + [ + 125.42296886444093, + 43.95664950294739 + ], + [ + 125.37747859954837, + 43.95677307586674 + ], + [ + 125.37357330322266, + 43.95634056952464 + ], + [ + 125.37185668945311, + 43.95306577649807 + ], + [ + 125.37215709686282, + 43.94898748005993 + ] + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "净月区" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 125.43859004974368, + 43.85117915386783 + ], + [ + 125.43876171112062, + 43.847248622803704 + ], + [ + 125.42751789093019, + 43.85086967262752 + ], + [ + 125.39897918701175, + 43.8254867460456 + ], + [ + 125.39661884307863, + 43.8254867460456 + ], + [ + 125.39558887481691, + 43.82527001604383 + ], + [ + 125.39348602294923, + 43.82588924253261 + ], + [ + 125.39061069488528, + 43.82753016166264 + ], + [ + 125.38777828216553, + 43.82672518810337 + ], + [ + 125.38314342498781, + 43.82715863675342 + ], + [ + 125.38146972656253, + 43.828675682242135 + ], + [ + 125.36838054656984, + 43.828428003979674 + ], + [ + 125.36692142486575, + 43.827684963025625 + ], + [ + 125.36438941955568, + 43.827406320283195 + ], + [ + 125.3594970703125, + 43.82830416446303 + ], + [ + 125.35670757293703, + 43.82917103568391 + ], + [ + 125.35649299621583, + 43.830757687003334 + ], + [ + 125.35014152526857, + 43.830873781785314 + ], + [ + 125.34966945648196, + 43.829867619505904 + ], + [ + 125.34398317337038, + 43.82536290042661 + ], + [ + 125.34112930297854, + 43.818829679779896 + ], + [ + 125.34147262573244, + 43.814339611312285 + ], + [ + 125.34125804901126, + 43.81003502182174 + ], + [ + 125.336709022522, + 43.80603983744573 + ], + [ + 125.33533573150638, + 43.800929328405 + ], + [ + 125.33220291137697, + 43.797553055365256 + ], + [ + 125.3322458267212, + 43.79631400823192 + ], + [ + 125.33580780029297, + 43.79665474875483 + ], + [ + 125.33585071563724, + 43.79414561392558 + ], + [ + 125.33692359924318, + 43.79129560460269 + ], + [ + 125.33181667327882, + 43.79154343689574 + ], + [ + 125.3301000595093, + 43.78875526434553 + ], + [ + 125.33194541931155, + 43.78788780635808 + ], + [ + 125.33233165740968, + 43.786400706233174 + ], + [ + 125.33104419708253, + 43.78503749861789 + ], + [ + 125.3305721282959, + 43.78426293498678 + ], + [ + 125.33254623413089, + 43.78296164549342 + ], + [ + 125.33130168914798, + 43.78128851738073 + ], + [ + 125.33374786376955, + 43.77995617817323 + ], + [ + 125.33280372619632, + 43.77939844596848 + ], + [ + 125.33284664154054, + 43.77803507867666 + ], + [ + 125.33520698547366, + 43.777539301044754 + ], + [ + 125.3350353240967, + 43.77595898240894 + ], + [ + 125.33700942993165, + 43.77375886143003 + ], + [ + 125.33580780029297, + 43.77155865950591 + ], + [ + 125.33559322357179, + 43.769110452366185 + ], + [ + 125.33409118652347, + 43.76858360987891 + ], + [ + 125.33138751983645, + 43.76935837663674 + ], + [ + 125.32962799072267, + 43.76811874500696 + ], + [ + 125.32967090606691, + 43.76694107116195 + ], + [ + 125.33181667327882, + 43.76641420956656 + ], + [ + 125.33276081085208, + 43.76511253161263 + ], + [ + 125.33207416534427, + 43.764492675012455 + ], + [ + 125.33005714416507, + 43.76452366799498 + ], + [ + 125.32795429229739, + 43.76219914974504 + ], + [ + 125.3286409378052, + 43.76102135935712 + ], + [ + 125.32804012298587, + 43.76061842574353 + ], + [ + 125.32919883728029, + 43.759285625996874 + ], + [ + 125.33271789550784, + 43.75953359098847 + ], + [ + 125.33473491668704, + 43.75844873656341 + ], + [ + 125.33924102783206, + 43.75345815286151 + ], + [ + 125.34134387969974, + 43.75203219535689 + ], + [ + 125.34421920776369, + 43.75166020085488 + ], + [ + 125.34640789031985, + 43.75228019040704 + ], + [ + 125.34799575805665, + 43.75221819174085 + ], + [ + 125.3489398956299, + 43.74973819242657 + ], + [ + 125.3443479537964, + 43.74598699820524 + ], + [ + 125.34318923950198, + 43.74406480759715 + ], + [ + 125.34623622894289, + 43.742793647646174 + ], + [ + 125.3474807739258, + 43.74090235971822 + ], + [ + 125.3434467315674, + 43.739538114941794 + ], + [ + 125.34709453582767, + 43.73290248118246 + ], + [ + 125.34520626068118, + 43.729956520247484 + ], + [ + 125.3489398956299, + 43.729119220694905 + ], + [ + 125.35305976867679, + 43.72893315253811 + ], + [ + 125.35408973693849, + 43.7275066107992 + ], + [ + 125.35434722900393, + 43.72366098122699 + ], + [ + 125.35207271575929, + 43.72055948722686 + ], + [ + 125.34439086914065, + 43.71702358821485 + ], + [ + 125.34391880035403, + 43.71537963428499 + ], + [ + 125.34645080566409, + 43.714790281327886 + ], + [ + 125.34786701202395, + 43.71522454196349 + ], + [ + 125.34992694854738, + 43.713022187679385 + ], + [ + 125.35344600677492, + 43.71069566919166 + ], + [ + 125.35254478454591, + 43.70942380090421 + ], + [ + 125.34863948822023, + 43.70805883905931 + ], + [ + 125.35005569458009, + 43.7049875612576 + ], + [ + 125.34760951995851, + 43.704367081989325 + ], + [ + 125.3460216522217, + 43.70601133800946 + ], + [ + 125.34447669982913, + 43.70684896052862 + ], + [ + 125.34267425537111, + 43.70635259304132 + ], + [ + 125.34284591674806, + 43.704677322426235 + ], + [ + 125.3418588638306, + 43.70306405462153 + ], + [ + 125.33821105957033, + 43.702722780868775 + ], + [ + 125.33735275268558, + 43.700923305318 + ], + [ + 125.33520698547366, + 43.700147652647075 + ], + [ + 125.33082962036136, + 43.69335250627861 + ], + [ + 125.33177375793458, + 43.692111300487106 + ], + [ + 125.33349037170412, + 43.69183202564379 + ], + [ + 125.32490730285647, + 43.68702208816855 + ], + [ + 125.32061576843263, + 43.68382559381072 + ], + [ + 125.32164573669435, + 43.682801438231415 + ], + [ + 125.31984329223634, + 43.68149794220731 + ], + [ + 125.32138824462893, + 43.67985301394873 + ], + [ + 125.32576560974123, + 43.6812806901165 + ], + [ + 125.32602310180667, + 43.678952939774426 + ], + [ + 125.32370567321779, + 43.67721482729579 + ], + [ + 125.32473564147952, + 43.67659406063735 + ], + [ + 125.33082962036136, + 43.67733897985683 + ], + [ + 125.33031463623048, + 43.67622159755974 + ], + [ + 125.32773971557619, + 43.675383547182186 + ], + [ + 125.3280830383301, + 43.67423508876687 + ], + [ + 125.32048702239992, + 43.67063437396699 + ], + [ + 125.3198003768921, + 43.66818203936356 + ], + [ + 125.32241821289064, + 43.66572960456249 + ], + [ + 125.32928466796878, + 43.66762326556466 + ], + [ + 125.32636642456056, + 43.664953496729005 + ], + [ + 125.32876968383792, + 43.66125908588579 + ], + [ + 125.32645225524904, + 43.65920998690081 + ], + [ + 125.32782554626466, + 43.658154363161344 + ], + [ + 125.32623767852785, + 43.65374538104486 + ], + [ + 125.32713890075685, + 43.6520996920826 + ], + [ + 125.32915592193605, + 43.65182023098723 + ], + [ + 125.33181667327882, + 43.653465927607364 + ], + [ + 125.33396244049075, + 43.6516028714584 + ], + [ + 125.32576560974123, + 43.647534998019516 + ], + [ + 125.31808376312259, + 43.64334262645166 + ], + [ + 125.31735420227052, + 43.64185193494013 + ], + [ + 125.32113075256349, + 43.6401438054434 + ], + [ + 125.3238344192505, + 43.64101340471016 + ], + [ + 125.32422065734866, + 43.638559860152576 + ], + [ + 125.31825542449954, + 43.63473958501087 + ], + [ + 125.31653881073, + 43.63287594802547 + ], + [ + 125.32130241394044, + 43.63306231432476 + ], + [ + 125.32220363616946, + 43.63585773946101 + ], + [ + 125.32469272613528, + 43.63710010889262 + ], + [ + 125.32623767852785, + 43.63647892738761 + ], + [ + 125.3278684616089, + 43.633186558203185 + ], + [ + 125.3253793716431, + 43.63026675915267 + ], + [ + 125.31829833984378, + 43.62827872969522 + ], + [ + 125.32971382141115, + 43.62038808944439 + ], + [ + 125.32868385314944, + 43.60805300638365 + ], + [ + 125.32507896423341, + 43.604945533642415 + ], + [ + 125.32319068908693, + 43.60071911309534 + ], + [ + 125.32525062561037, + 43.59773557864942 + ], + [ + 125.3218173980713, + 43.59257620125193 + ], + [ + 125.3207874298096, + 43.58834891179795 + ], + [ + 125.31529426574708, + 43.58424567044833 + ], + [ + 125.31769752502443, + 43.58076391299252 + ], + [ + 125.31460762023927, + 43.57902295875412 + ], + [ + 125.31100273132327, + 43.5698199358068 + ], + [ + 125.31289100646975, + 43.563103328742045 + ], + [ + 125.31117439270021, + 43.56024232423526 + ], + [ + 125.31280517578125, + 43.5560127643583 + ], + [ + 125.31100273132327, + 43.55159628942324 + ], + [ + 125.30593872070314, + 43.547926014725086 + ], + [ + 125.30465126037599, + 43.54232686010964 + ], + [ + 125.30714035034183, + 43.53890489849281 + ], + [ + 125.3057670593262, + 43.53181148683992 + ], + [ + 125.30113220214847, + 43.52565074189045 + ], + [ + 125.29967308044436, + 43.51980056328782 + ], + [ + 125.30061721801759, + 43.51544367878392 + ], + [ + 125.30671119689943, + 43.515007973031054 + ], + [ + 125.31023025512698, + 43.51986280221584 + ], + [ + 125.32190322875978, + 43.52048518796483 + ], + [ + 125.32396316528322, + 43.52384596006697 + ], + [ + 125.31958580017093, + 43.52988243235471 + ], + [ + 125.3207015991211, + 43.53193593984926 + ], + [ + 125.32293319702151, + 43.53081585351972 + ], + [ + 125.32688140869143, + 43.5324337493185 + ], + [ + 125.33306121826173, + 43.53168703357375 + ], + [ + 125.33709526062013, + 43.527766624232214 + ], + [ + 125.3408718109131, + 43.52814000752928 + ], + [ + 125.339412689209, + 43.52471724079202 + ], + [ + 125.34954071044923, + 43.51363859161292 + ], + [ + 125.35211563110353, + 43.514385530784 + ], + [ + 125.35305976867679, + 43.51177120323805 + ], + [ + 125.35486221313478, + 43.51177120323805 + ], + [ + 125.36112785339357, + 43.51768440153494 + ], + [ + 125.36378860473634, + 43.52347255018968 + ], + [ + 125.37142753601077, + 43.52596190571312 + ], + [ + 125.38310050964357, + 43.52726877624073 + ], + [ + 125.38335800170901, + 43.52932237272165 + ], + [ + 125.38550376892091, + 43.53050471473651 + ], + [ + 125.38413047790529, + 43.53442494610479 + ], + [ + 125.38610458374025, + 43.5349849583553 + ], + [ + 125.38249969482423, + 43.540460359668245 + ], + [ + 125.37365913391115, + 43.538158262875115 + ], + [ + 125.37254333496095, + 43.54133140039851 + ], + [ + 125.37417411804202, + 43.54270015326376 + ], + [ + 125.37340164184573, + 43.546681803087765 + ], + [ + 125.3686809539795, + 43.548796947590176 + ], + [ + 125.37322998046876, + 43.55116084478865 + ], + [ + 125.37520408630373, + 43.55203173091177 + ], + [ + 125.38790702819827, + 43.551907319378934 + ], + [ + 125.38696289062501, + 43.55396007682907 + ], + [ + 125.38936614990237, + 43.561672843471484 + ], + [ + 125.38249969482423, + 43.57112585576623 + ], + [ + 125.38919448852542, + 43.572929222492384 + ], + [ + 125.38215637207033, + 43.57690887521656 + ], + [ + 125.38679122924806, + 43.58045303199915 + ], + [ + 125.39683341979982, + 43.57976908816323 + ], + [ + 125.39846420288089, + 43.584556531857785 + ], + [ + 125.40404319763185, + 43.58412132543516 + ], + [ + 125.40224075317383, + 43.58735421230633 + ], + [ + 125.41090965270999, + 43.58437001520475 + ], + [ + 125.41846275329591, + 43.58834891179795 + ], + [ + 125.42017936706546, + 43.584432187486684 + ], + [ + 125.42738914489749, + 43.5882867435613 + ], + [ + 125.42721748352052, + 43.59015176272912 + ], + [ + 125.43708801269533, + 43.595435669874945 + ], + [ + 125.43554306030275, + 43.59748694410091 + ], + [ + 125.43923377990725, + 43.59928952130085 + ], + [ + 125.43931961059573, + 43.602210824839375 + ], + [ + 125.44043540954593, + 43.6036403472209 + ], + [ + 125.44361114501955, + 43.600159711655856 + ], + [ + 125.45004844665529, + 43.60190005460943 + ], + [ + 125.47425270080568, + 43.611595329492445 + ], + [ + 125.47674179077148, + 43.60351604227532 + ], + [ + 125.48764228820802, + 43.60550489058306 + ], + [ + 125.48678398132326, + 43.608301597268 + ], + [ + 125.49021720886232, + 43.60954453627873 + ], + [ + 125.49631118774414, + 43.60817730195426 + ], + [ + 125.49768447875977, + 43.61613168422215 + ], + [ + 125.4946804046631, + 43.616877353620715 + ], + [ + 125.49536705017091, + 43.62017061618987 + ], + [ + 125.50343513488771, + 43.62451993182167 + ], + [ + 125.49854278564456, + 43.62967656977042 + ], + [ + 125.49914360046387, + 43.6366963416448 + ], + [ + 125.49562454223633, + 43.63731752090232 + ], + [ + 125.5071258544922, + 43.64390162623238 + ], + [ + 125.50669670104982, + 43.64508171979896 + ], + [ + 125.50420761108398, + 43.64564070339714 + ], + [ + 125.50463676452638, + 43.648125012012244 + ], + [ + 125.5090141296387, + 43.64911870668913 + ], + [ + 125.51055908203126, + 43.65408693348016 + ], + [ + 125.51055908203126, + 43.659054749279555 + ], + [ + 125.50609588623048, + 43.661848965053835 + ], + [ + 125.49940109252931, + 43.66147641046411 + ], + [ + 125.49322128295901, + 43.65911684437622 + ], + [ + 125.4848098754883, + 43.66309079698944 + ], + [ + 125.48455238342288, + 43.666691964340494 + ], + [ + 125.47837257385255, + 43.66526394106652 + ], + [ + 125.47639846801759, + 43.669113317468934 + ], + [ + 125.47099113464357, + 43.67010666485495 + ], + [ + 125.47940254211429, + 43.67817700292489 + ], + [ + 125.47811508178714, + 43.68183933676051 + ], + [ + 125.47365188598634, + 43.68183933676051 + ], + [ + 125.47416687011722, + 43.68543937924172 + ], + [ + 125.46541213989258, + 43.68761171415088 + ], + [ + 125.46592712402345, + 43.692514695187064 + ], + [ + 125.46841621398927, + 43.693693833367746 + ], + [ + 125.46901702880861, + 43.69586586932696 + ], + [ + 125.47579765319826, + 43.69710699741023 + ], + [ + 125.47948837280273, + 43.69872042551382 + ], + [ + 125.48197746276858, + 43.699713282768144 + ], + [ + 125.49399375915529, + 43.702195353975135 + ], + [ + 125.49948692321779, + 43.70231945483814 + ], + [ + 125.50180435180667, + 43.69853426294827 + ], + [ + 125.50661087036134, + 43.701202537823015 + ], + [ + 125.50395011901857, + 43.70455322644414 + ], + [ + 125.50789833068849, + 43.70380864515684 + ], + [ + 125.51141738891602, + 43.702195353975135 + ], + [ + 125.51854133605958, + 43.70312610418604 + ], + [ + 125.51854133605958, + 43.70473937032093 + ], + [ + 125.51596641540529, + 43.705608034103555 + ], + [ + 125.51939964294436, + 43.710199333559 + ], + [ + 125.52206039428714, + 43.711192000714085 + ], + [ + 125.52806854248047, + 43.71112995949858 + ], + [ + 125.5276393890381, + 43.71323932479688 + ], + [ + 125.53253173828128, + 43.716837482486675 + ], + [ + 125.53184509277347, + 43.71826427829775 + ], + [ + 125.53544998168947, + 43.718388345893125 + ], + [ + 125.53948402404787, + 43.72037339248104 + ], + [ + 125.54257392883304, + 43.71950494269104 + ], + [ + 125.54635047912598, + 43.72018729715717 + ], + [ + 125.54463386535646, + 43.72117979887173 + ], + [ + 125.54755210876466, + 43.72403314971728 + ], + [ + 125.54446220397949, + 43.73302651846373 + ], + [ + 125.55004119873048, + 43.73711960462292 + ], + [ + 125.5554485321045, + 43.73612736700192 + ], + [ + 125.55871009826662, + 43.74053029604388 + ], + [ + 125.5507278442383, + 43.74480888870276 + ], + [ + 125.55227279663089, + 43.74883916729737 + ], + [ + 125.54892539978027, + 43.75237318828593 + ], + [ + 125.55098533630371, + 43.75435710860918 + ], + [ + 125.55733680725099, + 43.755783010717494 + ], + [ + 125.56119918823244, + 43.758200767075905 + ], + [ + 125.56034088134768, + 43.76068041570684 + ], + [ + 125.55965423583987, + 43.76396579185232 + ], + [ + 125.55845260620119, + 43.76594932783462 + ], + [ + 125.55939674377443, + 43.76886252706786 + ], + [ + 125.55227279663089, + 43.76551543495846 + ], + [ + 125.5529594421387, + 43.77127975488976 + ], + [ + 125.5477237701416, + 43.77295316307673 + ], + [ + 125.54909706115723, + 43.7768576000889 + ], + [ + 125.55330276489259, + 43.77939844596848 + ], + [ + 125.55287361145022, + 43.78150540699973 + ], + [ + 125.55974006652832, + 43.78745407264339 + ], + [ + 125.56411743164065, + 43.79470320854802 + ], + [ + 125.56815147399905, + 43.79532275202651 + ], + [ + 125.57158470153809, + 43.80034081747631 + ], + [ + 125.56858062744142, + 43.80096030250385 + ], + [ + 125.56729316711427, + 43.80312844951746 + ], + [ + 125.5642890930176, + 43.80281871904718 + ], + [ + 125.56034088134768, + 43.80504874259131 + ], + [ + 125.5580234527588, + 43.81037568409363 + ], + [ + 125.55493354797366, + 43.81341058947611 + ], + [ + 125.55347442626955, + 43.809694357606844 + ], + [ + 125.54780960083008, + 43.80641149377684 + ], + [ + 125.5466938018799, + 43.80746450749073 + ], + [ + 125.53141593933105, + 43.80647343627388 + ], + [ + 125.52600860595706, + 43.807836154957705 + ], + [ + 125.52515029907228, + 43.81105700280833 + ], + [ + 125.52334785461429, + 43.811614439612036 + ], + [ + 125.52120208740236, + 43.80839362182244 + ], + [ + 125.51648139953615, + 43.807216741228125 + ], + [ + 125.5148506164551, + 43.80826974074655 + ], + [ + 125.51330566406251, + 43.8103137456433 + ], + [ + 125.50566673278809, + 43.809880174692225 + ], + [ + 125.50532341003417, + 43.81266736160142 + ], + [ + 125.49682617187501, + 43.81347252471485 + ], + [ + 125.4961395263672, + 43.8156402176027 + ], + [ + 125.49708366394046, + 43.81836520559538 + ], + [ + 125.49691200256349, + 43.82109006923157 + ], + [ + 125.49579620361331, + 43.82102814189362 + ], + [ + 125.49734115600587, + 43.82431020229184 + ], + [ + 125.50163269042969, + 43.82790168425939 + ], + [ + 125.50369262695315, + 43.832297859402054 + ], + [ + 125.5090141296387, + 43.829821180837406 + ], + [ + 125.51201820373537, + 43.831740615685774 + ], + [ + 125.51459312438966, + 43.83044036011378 + ], + [ + 125.51939964294436, + 43.8316786993961 + ], + [ + 125.52008628845218, + 43.83341233122548 + ], + [ + 125.51725387573241, + 43.83805573980301 + ], + [ + 125.51596641540529, + 43.843194024103035 + ], + [ + 125.51296234130862, + 43.84127495764453 + ], + [ + 125.51047325134279, + 43.84455590478528 + ], + [ + 125.50875663757326, + 43.84412258248603 + ], + [ + 125.50849914550783, + 43.84653676664129 + ], + [ + 125.50309181213382, + 43.85006501388686 + ], + [ + 125.50789833068846, + 43.852169483045316 + ], + [ + 125.50283432006837, + 43.85699710229275 + ], + [ + 125.49854278564456, + 43.85712088226272 + ], + [ + 125.49674034118654, + 43.855511722611446 + ], + [ + 125.49124717712402, + 43.859472652871254 + ], + [ + 125.49116134643558, + 43.8537168394637 + ], + [ + 125.49004554748537, + 43.8540263059296 + ], + [ + 125.48901557922365, + 43.85575928846114 + ], + [ + 125.48781394958499, + 43.85656387037451 + ], + [ + 125.48171997070314, + 43.85712088226272 + ], + [ + 125.48129081726077, + 43.85544983098845 + ], + [ + 125.47691345214845, + 43.85650197984351 + ], + [ + 125.471248626709, + 43.85384062624276 + ], + [ + 125.47107696533205, + 43.85161242490646 + ], + [ + 125.46463966369627, + 43.84950793609157 + ], + [ + 125.46360969543457, + 43.84796047047087 + ], + [ + 125.45588493347167, + 43.84876515760409 + ], + [ + 125.45382499694826, + 43.85111725774827 + ], + [ + 125.43859004974368, + 43.85117915386783 + ] + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "莲花山旅游度假区" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 125.75037002563477, + 43.92615003020991 + ], + [ + 125.7447052001953, + 43.92250264290764 + ], + [ + 125.73843955993652, + 43.92138983615944 + ], + [ + 125.72762489318846, + 43.91928781106665 + ], + [ + 125.72238922119139, + 43.9179276376096 + ], + [ + 125.71423530578613, + 43.91687657318725 + ], + [ + 125.70496559143066, + 43.913661437350505 + ], + [ + 125.69475173950194, + 43.91458889820756 + ], + [ + 125.69440841674805, + 43.91922598567497 + ], + [ + 125.69286346435545, + 43.92058612945193 + ], + [ + 125.69621086120607, + 43.93226972001598 + ], + [ + 125.6931209564209, + 43.93264059007052 + ], + [ + 125.68925857543945, + 43.93115709597569 + ], + [ + 125.68771362304688, + 43.93171341059772 + ], + [ + 125.68694114685057, + 43.93579289215576 + ], + [ + 125.68522453308105, + 43.93628735575264 + ], + [ + 125.67904472351073, + 43.93301145781231 + ], + [ + 125.6744956970215, + 43.93257877855539 + ], + [ + 125.67054748535158, + 43.928622707959065 + ], + [ + 125.65930366516112, + 43.92713911364427 + ], + [ + 125.65415382385254, + 43.92336814487696 + ], + [ + 125.64814567565917, + 43.92336814487696 + ], + [ + 125.64222335815428, + 43.92380089113975 + ], + [ + 125.63758850097655, + 43.91916416021903 + ], + [ + 125.62994956970215, + 43.91539268592495 + ], + [ + 125.62943458557129, + 43.92151348238157 + ], + [ + 125.63183784484863, + 43.9247281939599 + ], + [ + 125.63166618347167, + 43.92683002683773 + ], + [ + 125.62728881835938, + 43.92806636442745 + ], + [ + 125.62153816223145, + 43.9323933436245 + ], + [ + 125.61141014099121, + 43.93276421290811 + ], + [ + 125.60789108276366, + 43.93381499665203 + ], + [ + 125.60368537902832, + 43.93325870168863 + ], + [ + 125.60059547424315, + 43.931280721896975 + ], + [ + 125.58995246887207, + 43.93053896251475 + ], + [ + 125.58480262756346, + 43.928251812849524 + ], + [ + 125.57690620422362, + 43.92695366175308 + ], + [ + 125.57235717773436, + 43.92423363425462 + ], + [ + 125.5703830718994, + 43.92132801295201 + ], + [ + 125.56248664855956, + 43.92163712834673 + ], + [ + 125.56128501892088, + 43.92009153531244 + ], + [ + 125.55802345275877, + 43.91941146165728 + ], + [ + 125.53553581237792, + 43.901108378938865 + ], + [ + 125.5265235900879, + 43.90042808833887 + ], + [ + 125.52875518798828, + 43.90302551971789 + ], + [ + 125.52746772766113, + 43.90587019548961 + ], + [ + 125.52000045776367, + 43.90593203475757 + ], + [ + 125.51304817199707, + 43.90271630763886 + ], + [ + 125.50317764282227, + 43.888367101064084 + ], + [ + 125.51081657409668, + 43.88626390960569 + ], + [ + 125.51279067993164, + 43.88651134774929 + ], + [ + 125.5129623413086, + 43.88515042523991 + ], + [ + 125.51107406616211, + 43.8850885643871 + ], + [ + 125.50952911376953, + 43.87698423725312 + ], + [ + 125.522403717041, + 43.874447541948165 + ], + [ + 125.52128791809082, + 43.87283884994914 + ], + [ + 125.53038597106932, + 43.86906444057123 + ], + [ + 125.52798271179199, + 43.86745560326477 + ], + [ + 125.53433418273924, + 43.86324766961987 + ], + [ + 125.53562164306639, + 43.863309553148994 + ], + [ + 125.53553581237792, + 43.86182433072093 + ], + [ + 125.53905487060547, + 43.86176244565013 + ], + [ + 125.54351806640624, + 43.86170056051508 + ], + [ + 125.54677963256835, + 43.86108170563157 + ], + [ + 125.54746627807616, + 43.85848244497344 + ], + [ + 125.55321693420409, + 43.8550165878287 + ], + [ + 125.5517578125, + 43.850622086478964 + ], + [ + 125.5480670928955, + 43.850745879681725 + ], + [ + 125.54334640502928, + 43.85018880824586 + ], + [ + 125.54102897644043, + 43.85334547758478 + ], + [ + 125.53828239440917, + 43.85099346531637 + ], + [ + 125.53871154785156, + 43.85025070532901 + ], + [ + 125.53562164306639, + 43.84876515760409 + ], + [ + 125.53605079650879, + 43.846722469067906 + ], + [ + 125.53407669067383, + 43.84269878705569 + ], + [ + 125.53733825683594, + 43.83737472915584 + ], + [ + 125.54609298706053, + 43.83861292455135 + ], + [ + 125.54703712463379, + 43.83254552160589 + ], + [ + 125.53802490234375, + 43.83192636416934 + ], + [ + 125.53519248962402, + 43.83483634826866 + ], + [ + 125.52995681762695, + 43.832297859402075 + ], + [ + 125.52515029907225, + 43.834650608842274 + ], + [ + 125.52042961120604, + 43.83421721459913 + ], + [ + 125.51828384399414, + 43.831121449898724 + ], + [ + 125.51485061645508, + 43.830626112644154 + ], + [ + 125.51167488098145, + 43.83192636416934 + ], + [ + 125.50970077514648, + 43.82975926255648 + ], + [ + 125.50412178039552, + 43.832297859402075 + ], + [ + 125.49545288085936, + 43.82096621449141 + ], + [ + 125.49759864807129, + 43.81886064459711 + ], + [ + 125.49553871154784, + 43.81588794892255 + ], + [ + 125.49631118774414, + 43.81421574256916 + ], + [ + 125.50583839416504, + 43.812481553187475 + ], + [ + 125.50506591796875, + 43.809942113592236 + ], + [ + 125.51382064819335, + 43.8101898685499 + ], + [ + 125.5165672302246, + 43.80696897393774 + ], + [ + 125.52231788635252, + 43.80833168131663 + ], + [ + 125.52291870117188, + 43.81093312725651 + ], + [ + 125.5246353149414, + 43.81105700280833 + ], + [ + 125.52575111389159, + 43.807774213873806 + ], + [ + 125.5290126800537, + 43.80678314779554 + ], + [ + 125.5466079711914, + 43.807216741228096 + ], + [ + 125.54789543151855, + 43.80647343627388 + ], + [ + 125.55407524108885, + 43.809508539943366 + ], + [ + 125.55459022521971, + 43.81316284787894 + ], + [ + 125.55896759033203, + 43.809694357606844 + ], + [ + 125.56025505065918, + 43.80511068650146 + ], + [ + 125.5712413787842, + 43.80065056079296 + ], + [ + 125.5678081512451, + 43.795632521357085 + ], + [ + 125.56480407714844, + 43.79488907226601 + ], + [ + 125.5528736114502, + 43.781815247947776 + ], + [ + 125.55295944213867, + 43.77921253407743 + ], + [ + 125.54866790771483, + 43.77586602118854 + ], + [ + 125.54755210876466, + 43.773448978732596 + ], + [ + 125.55270195007323, + 43.771527670168346 + ], + [ + 125.55373191833496, + 43.76811874500704 + ], + [ + 125.5528736114502, + 43.765577419847766 + ], + [ + 125.55879592895508, + 43.768366673388314 + ], + [ + 125.55991172790526, + 43.76068041570689 + ], + [ + 125.56188583374022, + 43.76068041570689 + ], + [ + 125.56265830993654, + 43.756092984940786 + ], + [ + 125.56394577026366, + 43.75727087234526 + ], + [ + 125.57158470153809, + 43.755535030182806 + ], + [ + 125.58780670166016, + 43.757146885289295 + ], + [ + 125.59707641601562, + 43.755163057453906 + ], + [ + 125.60325622558592, + 43.76576337413024 + ], + [ + 125.59965133666992, + 43.76787081559809 + ], + [ + 125.6034278869629, + 43.77233338772624 + ], + [ + 125.60617446899414, + 43.77270525370729 + ], + [ + 125.61312675476073, + 43.7712177759096 + ], + [ + 125.61269760131836, + 43.771155796865166 + ], + [ + 125.61501502990723, + 43.774626524440386 + ], + [ + 125.61758995056152, + 43.773325025204 + ], + [ + 125.61707496643065, + 43.77289118583071 + ], + [ + 125.61999320983887, + 43.7732010714185 + ], + [ + 125.63261032104492, + 43.779708297835654 + ], + [ + 125.6344985961914, + 43.78410802105625 + ], + [ + 125.64488410949708, + 43.779708297835654 + ], + [ + 125.65561294555664, + 43.780699813019915 + ], + [ + 125.67054748535158, + 43.79104777128196 + ], + [ + 125.69200515747069, + 43.78993250862075 + ], + [ + 125.69337844848631, + 43.795384706021096 + ], + [ + 125.69603919982909, + 43.79742915180812 + ], + [ + 125.71809768676758, + 43.79024230589192 + ], + [ + 125.72753906249999, + 43.79092385423618 + ], + [ + 125.72977066040039, + 43.78677248473288 + ], + [ + 125.73406219482422, + 43.78410802105625 + ], + [ + 125.73363304138182, + 43.781505406999756 + ], + [ + 125.7425594329834, + 43.78658659577207 + ], + [ + 125.74230194091797, + 43.77933647540239 + ], + [ + 125.7344913482666, + 43.77871676620848 + ], + [ + 125.73431968688966, + 43.77803507867666 + ], + [ + 125.74539184570311, + 43.773325025204 + ], + [ + 125.75019836425781, + 43.779522386908056 + ], + [ + 125.75294494628906, + 43.77475047527133 + ], + [ + 125.76024055480957, + 43.78008011795666 + ], + [ + 125.76650619506835, + 43.77530825083124 + ], + [ + 125.75989723205565, + 43.77053600288821 + ], + [ + 125.7611846923828, + 43.766631153138455 + ], + [ + 125.75946807861328, + 43.76470962555312 + ], + [ + 125.77448844909668, + 43.77041204332203 + ], + [ + 125.78461647033691, + 43.7707219417557 + ], + [ + 125.78616142272948, + 43.773510955400546 + ], + [ + 125.79088211059572, + 43.77016412341899 + ], + [ + 125.79508781433105, + 43.77475047527133 + ], + [ + 125.79723358154295, + 43.78026602715006 + ], + [ + 125.78976631164551, + 43.786400706233195 + ], + [ + 125.79860687255858, + 43.78962270974378 + ], + [ + 125.8004093170166, + 43.79742915180812 + ], + [ + 125.79568862915039, + 43.80021691969999 + ], + [ + 125.7999801635742, + 43.8070928577114 + ], + [ + 125.81654548645021, + 43.86145301933252 + ], + [ + 125.81182479858397, + 43.87463315746137 + ], + [ + 125.81457138061525, + 43.89585138590115 + ], + [ + 125.80770492553711, + 43.90778718292443 + ], + [ + 125.78959465026857, + 43.92287357386489 + ], + [ + 125.77637672424315, + 43.9270154791144 + ], + [ + 125.75672149658205, + 43.92342996596437 + ], + [ + 125.75037002563477, + 43.92615003020991 + ] + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "汽开区" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 125.26568412780762, + 43.86731637491785 + ], + [ + 125.26821613311768, + 43.86923460351617 + ], + [ + 125.26911735534667, + 43.87082792388348 + ], + [ + 125.26946067810059, + 43.87317915380116 + ], + [ + 125.26845216751099, + 43.8732100904186 + ], + [ + 125.26843070983887, + 43.874586753637274 + ], + [ + 125.26679992675781, + 43.87467956124933 + ], + [ + 125.26682138442992, + 43.87545295239563 + ], + [ + 125.26525497436522, + 43.87548388783267 + ], + [ + 125.26514768600464, + 43.87359679678186 + ], + [ + 125.2572512626648, + 43.86949758165731 + ], + [ + 125.25607109069823, + 43.87090526844837 + ], + [ + 125.25609254837036, + 43.873426646291186 + ], + [ + 125.24871110916138, + 43.87333383672787 + ], + [ + 125.24853944778441, + 43.88187171151824 + ], + [ + 125.23221015930176, + 43.88168611855298 + ], + [ + 125.2344846725464, + 43.86974508943611 + ], + [ + 125.23302555084227, + 43.86911084869531 + ], + [ + 125.2339482307434, + 43.8642223277416 + ], + [ + 125.2318024635315, + 43.86416044516 + ], + [ + 125.23150205612181, + 43.865150558756945 + ], + [ + 125.22830486297607, + 43.86453173968598 + ], + [ + 125.22937774658203, + 43.85914774271749 + ], + [ + 125.22639513015747, + 43.858714526424954 + ], + [ + 125.227210521698, + 43.857600527219276 + ], + [ + 125.21875619888306, + 43.854227458271254 + ], + [ + 125.21744728088379, + 43.856254417077196 + ], + [ + 125.21337032318114, + 43.85512489891371 + ], + [ + 125.21158933639525, + 43.8582658348037 + ], + [ + 125.20326375961305, + 43.85630083517417 + ], + [ + 125.20485162734985, + 43.85305148112393 + ], + [ + 125.19847869873047, + 43.85096251716825 + ], + [ + 125.19386529922484, + 43.850312602347934 + ], + [ + 125.18296480178833, + 43.848486613286504 + ], + [ + 125.17985343933104, + 43.848455663837576 + ], + [ + 125.17584085464478, + 43.848734208299696 + ], + [ + 125.17433881759645, + 43.85605327157277 + ], + [ + 125.17431735992432, + 43.85783261210347 + ], + [ + 125.17255783081053, + 43.86431515149354 + ], + [ + 125.16603469848631, + 43.8738133512492 + ], + [ + 125.1648759841919, + 43.87296259702925 + ], + [ + 125.16474723815917, + 43.87232839052755 + ], + [ + 125.16384601593018, + 43.87170964597298 + ], + [ + 125.16360998153685, + 43.8711991768795 + ], + [ + 125.16290187835693, + 43.871353864945284 + ], + [ + 125.1623225212097, + 43.871013550670554 + ], + [ + 125.16155004501343, + 43.86971415101997 + ], + [ + 125.1587176322937, + 43.86815174012137 + ], + [ + 125.1576018333435, + 43.8680898616189 + ], + [ + 125.15743017196655, + 43.867269965396595 + ], + [ + 125.15676498413085, + 43.866867748032185 + ], + [ + 125.15635728836058, + 43.86700697742698 + ], + [ + 125.1554775238037, + 43.86679039822786 + ], + [ + 125.15221595764159, + 43.86569202017449 + ], + [ + 125.15296697616577, + 43.85985944836485 + ], + [ + 125.14620780944823, + 43.859472652871254 + ], + [ + 125.14468431472777, + 43.85854433344883 + ], + [ + 125.14092922210692, + 43.85848244497344 + ], + [ + 125.141122341156, + 43.86055567392992 + ], + [ + 125.13783931732179, + 43.86063303182418 + ], + [ + 125.13702392578124, + 43.857322024165846 + ], + [ + 125.1298141479492, + 43.85978208946686 + ], + [ + 125.12125253677368, + 43.864392504509745 + ], + [ + 125.1167678833008, + 43.87266869729441 + ], + [ + 125.11305570602416, + 43.875422016942466 + ], + [ + 125.11084556579591, + 43.87608712564569 + ], + [ + 125.10902166366576, + 43.87596338505371 + ], + [ + 125.10608196258544, + 43.87109089499453 + ], + [ + 125.10481595993042, + 43.871353864945284 + ], + [ + 125.10597467422485, + 43.87837628024927 + ], + [ + 125.08945226669313, + 43.87579324132016 + ], + [ + 125.08992433547972, + 43.8709516751391 + ], + [ + 125.09314298629761, + 43.8651969699283 + ], + [ + 125.09925842285156, + 43.86146849068656 + ], + [ + 125.10170459747314, + 43.85783261210347 + ], + [ + 125.10282039642333, + 43.85046734461418 + ], + [ + 125.10140419006346, + 43.845824901983626 + ], + [ + 125.0984001159668, + 43.84381306463094 + ], + [ + 125.09608268737793, + 43.84047016946789 + ], + [ + 125.09711265563965, + 43.83861292455135 + ], + [ + 125.09445190429688, + 43.83496017423177 + ], + [ + 125.09612560272215, + 43.832700309961325 + ], + [ + 125.09367942810057, + 43.83257647930908 + ], + [ + 125.09419441223143, + 43.82722055773225 + ], + [ + 125.08938789367676, + 43.823195560503564 + ], + [ + 125.0914478302002, + 43.82118296011813 + ], + [ + 125.09054660797119, + 43.82009922411591 + ], + [ + 125.0932502746582, + 43.81480411681069 + ], + [ + 125.09702682495119, + 43.812264775973915 + ], + [ + 125.09694099426268, + 43.81037568409368 + ], + [ + 125.08840084075926, + 43.801022250653325 + ], + [ + 125.09020328521727, + 43.792039098398824 + ], + [ + 125.08234977722167, + 43.77530825083124 + ], + [ + 125.08908748626708, + 43.76040146036614 + ], + [ + 125.08840084075926, + 43.75252818442957 + ], + [ + 125.0935935974121, + 43.745521957750384 + ], + [ + 125.10908603668213, + 43.74198753222855 + ], + [ + 125.11818408966064, + 43.75048220301106 + ], + [ + 125.1308012008667, + 43.753055168315306 + ], + [ + 125.13084411621094, + 43.75652694615579 + ], + [ + 125.13204574584961, + 43.756712928570245 + ], + [ + 125.13298988342284, + 43.754481101445634 + ], + [ + 125.13397693634033, + 43.754698088291235 + ], + [ + 125.13324737548828, + 43.757208878849376 + ], + [ + 125.13419151306152, + 43.757921800174124 + ], + [ + 125.1348352432251, + 43.75677492257993 + ], + [ + 125.13831138610838, + 43.757642831971694 + ], + [ + 125.13715267181398, + 43.76120732780193 + ], + [ + 125.13938426971436, + 43.76105235413804 + ], + [ + 125.14092922210692, + 43.75789080377141 + ], + [ + 125.14311790466309, + 43.75832475194815 + ], + [ + 125.13856887817383, + 43.76377983198197 + ], + [ + 125.14599323272705, + 43.767189004424615 + ], + [ + 125.165433883667, + 43.78494455151208 + ], + [ + 125.20882129669191, + 43.81703369290818 + ], + [ + 125.22495746612549, + 43.83071898869253 + ], + [ + 125.23049354553221, + 43.83678657734198 + ], + [ + 125.23963451385497, + 43.8428845014302 + ], + [ + 125.25645732879639, + 43.851395789780646 + ], + [ + 125.26710033416748, + 43.860076052745185 + ], + [ + 125.26506185531618, + 43.86170056051508 + ], + [ + 125.26564121246338, + 43.8620409279629 + ], + [ + 125.26568412780762, + 43.86731637491785 + ] + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "长春新区(长德)" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 125.3741955757141, + 44.088263176730095 + ], + [ + 125.37548303604125, + 44.086167056289014 + ], + [ + 125.37256479263306, + 44.0844407836813 + ], + [ + 125.37076234817503, + 44.08197459256838 + ], + [ + 125.37338018417357, + 44.08067980107852 + ], + [ + 125.3744101524353, + 44.07784349213097 + ], + [ + 125.37509679794312, + 44.0750687105113 + ], + [ + 125.37355184555052, + 44.07386626473446 + ], + [ + 125.3741955757141, + 44.07124546492414 + ], + [ + 125.37101984024046, + 44.07016627832739 + ], + [ + 125.37483930587767, + 44.06560264318479 + ], + [ + 125.38183450698853, + 44.065911007994536 + ], + [ + 125.38290739059445, + 44.061532077149145 + ], + [ + 125.37604093551634, + 44.05780047907416 + ], + [ + 125.37998914718627, + 44.054808862845036 + ], + [ + 125.38604021072386, + 44.0536985338301 + ], + [ + 125.39157629013062, + 44.04996644206354 + ], + [ + 125.4099440574646, + 44.05906493121221 + ], + [ + 125.41333436965942, + 44.0593424902624 + ], + [ + 125.41573762893675, + 44.060545231111114 + ], + [ + 125.41899919509886, + 44.06970376376207 + ], + [ + 125.43367624282837, + 44.07809013308908 + ], + [ + 125.43444871902466, + 44.07969327425716 + ], + [ + 125.43908357620236, + 44.079569957247834 + ], + [ + 125.4426884651184, + 44.0769802406815 + ], + [ + 125.44165849685669, + 44.07371210325249 + ], + [ + 125.44994115829466, + 44.071769634171005 + ], + [ + 125.45449018478392, + 44.07398959363089 + ], + [ + 125.45822381973265, + 44.07143046636492 + ], + [ + 125.46569108963011, + 44.07735020713056 + ], + [ + 125.47152757644652, + 44.07901502752554 + ], + [ + 125.47195672988892, + 44.084224996063206 + ], + [ + 125.4750037193298, + 44.088386475619295 + ], + [ + 125.47680616378783, + 44.08847894961754 + ], + [ + 125.47584056854247, + 44.0919312087662 + ], + [ + 125.47809362411498, + 44.09333363148598 + ], + [ + 125.47772884368895, + 44.09505964456397 + ], + [ + 125.48126935958861, + 44.09646199309589 + ], + [ + 125.47809362411498, + 44.09874266473569 + ], + [ + 125.48702001571655, + 44.10509109817213 + ], + [ + 125.49062490463255, + 44.09883512254136 + ], + [ + 125.49386501312256, + 44.10086915768796 + ], + [ + 125.49313545227048, + 44.097124629733116 + ], + [ + 125.4965043067932, + 44.09888135138998 + ], + [ + 125.50173997879027, + 44.09923577136192 + ], + [ + 125.50002336502072, + 44.09769479950048 + ], + [ + 125.51259756088257, + 44.09593804259086 + ], + [ + 125.51508665084837, + 44.098681026118285 + ], + [ + 125.51860570907593, + 44.097602339911695 + ], + [ + 125.5342698097229, + 44.09997542359045 + ], + [ + 125.53800344467162, + 44.09609214616251 + ], + [ + 125.54714441299437, + 44.10080752128736 + ], + [ + 125.54379701614378, + 44.104505591587426 + ], + [ + 125.54971933364867, + 44.10877349349063 + ], + [ + 125.55480480194093, + 44.10848075916016 + ], + [ + 125.55564165115355, + 44.10355027892052 + ], + [ + 125.56834459304808, + 44.098372832067255 + ], + [ + 125.57392358779907, + 44.10256413352324 + ], + [ + 125.57469606399535, + 44.099297409401025 + ], + [ + 125.57933092117308, + 44.100098698062276 + ], + [ + 125.58817148208615, + 44.089249560647076 + ], + [ + 125.5964970588684, + 44.09806463640984 + ], + [ + 125.59769868850707, + 44.10558415185072 + ], + [ + 125.59023141860962, + 44.10823424491527 + ], + [ + 125.59503793716429, + 44.11581408767786 + ], + [ + 125.58310747146604, + 44.14316738286846 + ], + [ + 125.57795763015746, + 44.14464557848633 + ], + [ + 125.57555437088011, + 44.1586865907949 + ], + [ + 125.58087587356565, + 44.16385875326032 + ], + [ + 125.57804346084593, + 44.17611004293643 + ], + [ + 125.58533906936644, + 44.19032819767913 + ], + [ + 125.58156251907346, + 44.19722061410819 + ], + [ + 125.58997392654418, + 44.215555439113466 + ], + [ + 125.57555437088011, + 44.22109168032017 + ], + [ + 125.55023431777954, + 44.22029203319917 + ], + [ + 125.55135011672971, + 44.22896454897111 + ], + [ + 125.5470585823059, + 44.23259309484693 + ], + [ + 125.53950548171994, + 44.23136310435926 + ], + [ + 125.53409814834593, + 44.23210110173659 + ], + [ + 125.53178071975708, + 44.230010085132264 + ], + [ + 125.52894830703733, + 44.230010085132264 + ], + [ + 125.52963495254514, + 44.23320808045099 + ], + [ + 125.52525758743285, + 44.232900588452296 + ], + [ + 125.52062273025513, + 44.23591394076148 + ], + [ + 125.52045106887815, + 44.24120230848736 + ], + [ + 125.5224251747131, + 44.24298548811552 + ], + [ + 125.52251100540158, + 44.25060950862164 + ], + [ + 125.49950838088986, + 44.24187869332931 + ], + [ + 125.47976732254028, + 44.24845766744436 + ], + [ + 125.48019647598265, + 44.253007181768474 + ], + [ + 125.47521829605103, + 44.2538678611065 + ], + [ + 125.47238588333127, + 44.25675719247231 + ], + [ + 125.46448945999143, + 44.25688013959411 + ], + [ + 125.45599222183228, + 44.25571213155775 + ], + [ + 125.45685052871704, + 44.26038402450117 + ], + [ + 125.45453310012816, + 44.26087578111209 + ], + [ + 125.45058488845824, + 44.258478428784606 + ], + [ + 125.45041322708128, + 44.252761271072565 + ], + [ + 125.44637918472289, + 44.254113767175205 + ], + [ + 125.44517755508421, + 44.251162826485334 + ], + [ + 125.43934106826781, + 44.25577360624334 + ], + [ + 125.41711091995236, + 44.24815025513522 + ], + [ + 125.41170358657835, + 44.242370604693804 + ], + [ + 125.39479494094849, + 44.23185510363906 + ], + [ + 125.41882753372191, + 44.21893875948325 + ], + [ + 125.43766736984253, + 44.20685018510104 + ], + [ + 125.43457746505736, + 44.20094341443568 + ], + [ + 125.43895483016968, + 44.195712966896195 + ], + [ + 125.42243242263794, + 44.17888008227805 + ], + [ + 125.41281938552854, + 44.18245016325662 + ], + [ + 125.4068112373352, + 44.17875697218167 + ], + [ + 125.40706872940062, + 44.17038488259615 + ], + [ + 125.41693925857543, + 44.14797138329563 + ], + [ + 125.40612459182739, + 44.14088842544049 + ], + [ + 125.39316415786742, + 44.13805500434519 + ], + [ + 125.38380861282349, + 44.13331179951643 + ], + [ + 125.36578416824341, + 44.137377426981466 + ], + [ + 125.35522699356078, + 44.1277673109664 + ], + [ + 125.35874605178833, + 44.11119234799829 + ], + [ + 125.3661274909973, + 44.10379681269956 + ], + [ + 125.3741955757141, + 44.088263176730095 + ] + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "name": "长春新区(空港)" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 125.62702596187593, + 43.98034763067922 + ], + [ + 125.62814176082614, + 43.980810842951904 + ], + [ + 125.62893569469455, + 43.97730578030473 + ], + [ + 125.64234673976901, + 43.98057923726731 + ], + [ + 125.64404189586642, + 43.98053291602199 + ], + [ + 125.64923465251925, + 43.98192253766145 + ], + [ + 125.65221726894382, + 43.98201517794762 + ], + [ + 125.65326869487765, + 43.98300333200541 + ], + [ + 125.65668046474461, + 43.982926133061945 + ], + [ + 125.66041409969333, + 43.98396059056442 + ], + [ + 125.6670016050339, + 43.98497959077865 + ], + [ + 125.67195832729342, + 43.98533469280403 + ], + [ + 125.67728519439697, + 43.984817478278174 + ], + [ + 125.68054139614108, + 43.98391427195724 + ], + [ + 125.69247186183932, + 43.98805192493956 + ], + [ + 125.70165574550632, + 43.990460276710316 + ], + [ + 125.715651512146, + 43.99287624936496 + ], + [ + 125.7214826345444, + 43.9950297011906 + ], + [ + 125.73950707912446, + 43.99496795455622 + ], + [ + 125.7467168569565, + 43.997129048531605 + ], + [ + 125.74449062347412, + 44.00000781217615 + ], + [ + 125.74263989925386, + 44.000864468224435 + ], + [ + 125.74238240718844, + 44.002222744352025 + ], + [ + 125.74684560298924, + 44.00592697573719 + ], + [ + 125.74856221675874, + 44.01225450260684 + ], + [ + 125.7472801208496, + 44.01309554986242 + ], + [ + 125.74379861354831, + 44.012532281001214 + ], + [ + 125.74333190917967, + 44.0096386922489 + ], + [ + 125.74118077754977, + 44.00963097582351 + ], + [ + 125.73967874050143, + 44.013612517944516 + ], + [ + 125.74538648128511, + 44.01827274318998 + ], + [ + 125.74731767177583, + 44.02614182851047 + ], + [ + 125.75045049190524, + 44.02543211072917 + ], + [ + 125.75281083583835, + 44.02885719200555 + ], + [ + 125.75560033321383, + 44.031479868188335 + ], + [ + 125.75469911098484, + 44.03653976249754 + ], + [ + 125.75602948665623, + 44.04150667751607 + ], + [ + 125.76062142848973, + 44.045763701848394 + ], + [ + 125.76611459255221, + 44.063158795258644 + ], + [ + 125.76620042324069, + 44.06602664438406 + ], + [ + 125.76495587825778, + 44.06756844132538 + ], + [ + 125.76491296291354, + 44.0697577239809 + ], + [ + 125.76783120632176, + 44.07210109173994 + ], + [ + 125.76838910579683, + 44.07512266583877 + ], + [ + 125.76710164546968, + 44.076571733373555 + ], + [ + 125.76289594173434, + 44.07885317204279 + ], + [ + 125.76268136501315, + 44.08036380599664 + ], + [ + 125.76044976711275, + 44.08079540861362 + ], + [ + 125.75461328029634, + 44.086313478879994 + ], + [ + 125.75293958187106, + 44.091152926864225 + ], + [ + 125.7513946294785, + 44.092416666548075 + ], + [ + 125.75173795223239, + 44.09827266865482 + ], + [ + 125.75607240200046, + 44.101662720605944 + ], + [ + 125.75886189937594, + 44.10591541998129 + ], + [ + 125.75886726379395, + 44.110267956688524 + ], + [ + 125.75963437557223, + 44.11281770099028 + ], + [ + 125.75911939144136, + 44.115529090855 + ], + [ + 125.75748860836032, + 44.117747408213205 + ], + [ + 125.7540982961655, + 44.11981160095061 + ], + [ + 125.75126588344575, + 44.12095149737512 + ], + [ + 125.74942588806151, + 44.12139050567252 + ], + [ + 125.749506354332, + 44.12249186300838 + ], + [ + 125.75440406799316, + 44.12591903245074 + ], + [ + 125.7575744390488, + 44.13099395858988 + ], + [ + 125.76212882995605, + 44.1334350044613 + ], + [ + 125.7628530263901, + 44.13475174125622 + ], + [ + 125.76203763484958, + 44.135367748389555 + ], + [ + 125.75818061828613, + 44.13599144906519 + ], + [ + 125.75705945491794, + 44.13693853749433 + ], + [ + 125.75689315795898, + 44.138609380041274 + ], + [ + 125.75804650783542, + 44.14007999035013 + ], + [ + 125.76024055480957, + 44.140857628116045 + ], + [ + 125.76371133327486, + 44.14026477648958 + ], + [ + 125.76409757137301, + 44.14146587229907 + ], + [ + 125.76311588287352, + 44.14230508499824 + ], + [ + 125.76023519039157, + 44.14260535086444 + ], + [ + 125.75628697872165, + 44.14377560325534 + ], + [ + 125.75538575649266, + 44.146608749817624 + ], + [ + 125.7571506500244, + 44.148464079182745 + ], + [ + 125.7617372274399, + 44.14814844635348 + ], + [ + 125.7648754119873, + 44.15123541691779 + ], + [ + 125.7657712697983, + 44.15307520537597 + ], + [ + 125.76496124267578, + 44.15440689931381 + ], + [ + 125.76246678829195, + 44.15510737365957 + ], + [ + 125.75954854488376, + 44.154553152885995 + ], + [ + 125.75732231140135, + 44.151882043665516 + ], + [ + 125.75568616390231, + 44.15156642911421 + ], + [ + 125.7541036605835, + 44.15271341050243 + ], + [ + 125.75384080410005, + 44.154245250207055 + ], + [ + 125.75496196746826, + 44.15825555678907 + ], + [ + 125.75358331203464, + 44.1615728980852 + ], + [ + 125.75603485107423, + 44.16438210158061 + ], + [ + 125.75817525386813, + 44.16548265716483 + ], + [ + 125.7611846923828, + 44.165490353285435 + ], + [ + 125.76353967189792, + 44.1660983436402 + ], + [ + 125.76526165008546, + 44.1702001907509 + ], + [ + 125.76422631740573, + 44.17142376344959 + ], + [ + 125.7570219039917, + 44.173093629880654 + ], + [ + 125.75590074062349, + 44.17447104171849 + ], + [ + 125.75667858123781, + 44.175494460966284 + ], + [ + 125.75838983058932, + 44.17619468495478 + ], + [ + 125.76371669769286, + 44.175709915386825 + ], + [ + 125.76847493648533, + 44.176287021563525 + ], + [ + 125.76813161373141, + 44.17727193639326 + ], + [ + 125.76482713222507, + 44.179026275183645 + ], + [ + 125.76010644435885, + 44.179549488928174 + ], + [ + 125.75967729091647, + 44.18090366764833 + ], + [ + 125.76053559780122, + 44.18235014237965 + ], + [ + 125.76465547084811, + 44.18668935364042 + ], + [ + 125.76439797878267, + 44.1878587318234 + ], + [ + 125.76169967651366, + 44.18780487939031 + ], + [ + 125.75911939144136, + 44.18822800432463 + ], + [ + 125.75984895229341, + 44.19216676705614 + ], + [ + 125.75564324855807, + 44.19201291407716 + ], + [ + 125.74607849121092, + 44.185158356346356 + ], + [ + 125.73839128017428, + 44.18376580668856 + ], + [ + 125.73612213134764, + 44.18020349957976 + ], + [ + 125.7355159521103, + 44.184196654295924 + ], + [ + 125.73303222656251, + 44.184358221336865 + ], + [ + 125.73268353939059, + 44.18588923941183 + ], + [ + 125.73110103607178, + 44.18666627357442 + ], + [ + 125.72912156581882, + 44.185673822186985 + ], + [ + 125.72861194610596, + 44.18737405815466 + ], + [ + 125.7240575551987, + 44.18598156083862 + ], + [ + 125.72007179260254, + 44.18118834899081 + ], + [ + 125.717448592186, + 44.18019580537899 + ], + [ + 125.71663856506348, + 44.183157998459535 + ], + [ + 125.72053849697117, + 44.1894896679152 + ], + [ + 125.71758270263672, + 44.1885126502987 + ], + [ + 125.71607530117038, + 44.18936657997327 + ], + [ + 125.71479320526123, + 44.18922041270836 + ], + [ + 125.7148736715317, + 44.19016664700102 + ], + [ + 125.71805477142334, + 44.19152827456806 + ], + [ + 125.71715354919432, + 44.19312833907517 + ], + [ + 125.71062505245213, + 44.191582123599254 + ], + [ + 125.70890843868258, + 44.19527451123217 + ], + [ + 125.70934295654298, + 44.19795903948531 + ], + [ + 125.70535182952882, + 44.19758982795348 + ], + [ + 125.70508897304538, + 44.19533604906604 + ], + [ + 125.70033073425293, + 44.199681996044546 + ], + [ + 125.70380151271823, + 44.194874513745646 + ], + [ + 125.70075988769533, + 44.194851436884726 + ], + [ + 125.6992954015732, + 44.1926590938899 + ], + [ + 125.69732129573823, + 44.19235139010079 + ], + [ + 125.69668292999266, + 44.193282189142266 + ], + [ + 125.69285809993748, + 44.1919513727731 + ], + [ + 125.69363594055176, + 44.18986662313832 + ], + [ + 125.69161891937256, + 44.18885114642453 + ], + [ + 125.69509506225586, + 44.18429667204015 + ], + [ + 125.6969350576401, + 44.18151919314827 + ], + [ + 125.69946706295018, + 44.177702831458184 + ], + [ + 125.6988286972046, + 44.1757714736481 + ], + [ + 125.69959580898288, + 44.17311671526029 + ], + [ + 125.69123268127441, + 44.1702001907509 + ], + [ + 125.69461762905122, + 44.16462068530348 + ], + [ + 125.69114685058594, + 44.16327382905518 + ], + [ + 125.69247186183932, + 44.16135739201865 + ], + [ + 125.69432258605957, + 44.160903287372896 + ], + [ + 125.69534718990327, + 44.15880204579754 + ], + [ + 125.69342136383055, + 44.157147169172525 + ], + [ + 125.69659173488618, + 44.15492263398004 + ], + [ + 125.6997299194336, + 44.150465613933115 + ], + [ + 125.67899644374849, + 44.139987597063545 + ], + [ + 125.68003177642822, + 44.13617624800026 + ], + [ + 125.66144406795505, + 44.12886854942014 + ], + [ + 125.65248012542725, + 44.11039120969852 + ], + [ + 125.64663827419282, + 44.11029106664749 + ], + [ + 125.64252376556396, + 44.108758086456746 + ], + [ + 125.64174592494967, + 44.10452870379937 + ], + [ + 125.62634468078612, + 44.104166611440434 + ], + [ + 125.62573850154881, + 44.105792157637964 + ], + [ + 125.62093734741211, + 44.104197427897766 + ], + [ + 125.61496675014499, + 44.10369665847582 + ], + [ + 125.60990273952486, + 44.10039917851057 + ], + [ + 125.59505403041842, + 44.09805693149783 + ], + [ + 125.59291362762453, + 44.09256307366845 + ], + [ + 125.59012413024901, + 44.09287129800025 + ], + [ + 125.58971643447875, + 44.09055957635557 + ], + [ + 125.58831632137303, + 44.089796688383316 + ], + [ + 125.58209896087646, + 44.09515981341915 + ], + [ + 125.57960987091063, + 44.10060720254173 + ], + [ + 125.57449221611022, + 44.0996055986328 + ], + [ + 125.57433128356932, + 44.103226701775284 + ], + [ + 125.57323694229126, + 44.102248255347206 + ], + [ + 125.5722713470459, + 44.10233300331619 + ], + [ + 125.57194948196411, + 44.10110799813325 + ], + [ + 125.56806564331055, + 44.09841906127732 + ], + [ + 125.56822657585144, + 44.09813398057282 + ], + [ + 125.56918144226073, + 44.09832660282106 + ], + [ + 125.56904733181001, + 44.09744053528342 + ], + [ + 125.56832313537598, + 44.096739376777855 + ], + [ + 125.56727170944214, + 44.09695511874204 + ], + [ + 125.56700348854064, + 44.096777902186325 + ], + [ + 125.56731462478638, + 44.09647740333458 + ], + [ + 125.56698203086853, + 44.095876401049765 + ], + [ + 125.56624174118043, + 44.0963464161777 + ], + [ + 125.56571602821349, + 44.09593804259086 + ], + [ + 125.56496500968933, + 44.09612296682864 + ], + [ + 125.56480407714844, + 44.0960150944269 + ], + [ + 125.56511521339418, + 44.09552966618378 + ], + [ + 125.56605935096741, + 44.09518292928471 + ], + [ + 125.56591987609865, + 44.09436616322071 + ], + [ + 125.56626319885254, + 44.093842194145616 + ], + [ + 125.5653727054596, + 44.09335674806538 + ], + [ + 125.56625247001648, + 44.09337986463576 + ], + [ + 125.56741118431093, + 44.09238584395023 + ], + [ + 125.56689620018005, + 44.09142262967304 + ], + [ + 125.56815147399902, + 44.09048251741121 + ], + [ + 125.56788325309752, + 44.08997392586041 + ], + [ + 125.56861817836766, + 44.08921103033406 + ], + [ + 125.5680549144745, + 44.08791639722622 + ], + [ + 125.56835532188416, + 44.08763897215929 + ], + [ + 125.56828022003174, + 44.086652561383346 + ], + [ + 125.56728780269627, + 44.0858819165191 + ], + [ + 125.56865572929381, + 44.085604481910195 + ], + [ + 125.56934237480162, + 44.086059165726915 + ], + [ + 125.56934237480162, + 44.086059165726915 + ], + [ + 125.56995391845703, + 44.08573549285988 + ], + [ + 125.56978225708006, + 44.08525768681929 + ], + [ + 125.56928873062134, + 44.08530392628221 + ], + [ + 125.56950330734252, + 44.084648863853246 + ], + [ + 125.57027578353882, + 44.084294356454876 + ], + [ + 125.5698251724243, + 44.08320770097592 + ], + [ + 125.5691921710968, + 44.083408078664505 + ], + [ + 125.5689775943756, + 44.083939846932076 + ], + [ + 125.56831240653992, + 44.08344661275757 + ], + [ + 125.56767940521239, + 44.083230821513105 + ], + [ + 125.56685328483582, + 44.08368552357439 + ], + [ + 125.56602716445923, + 44.083485146825545 + ], + [ + 125.56565165519714, + 44.08271446069716 + ], + [ + 125.56598424911499, + 44.08260656383803 + ], + [ + 125.56673526763916, + 44.083061270697385 + ], + [ + 125.56716442108153, + 44.08305356383056 + ], + [ + 125.5673360824585, + 44.08266821921021 + ], + [ + 125.56791543960571, + 44.082344527789374 + ], + [ + 125.56794762611389, + 44.08216726745129 + ], + [ + 125.56719660758971, + 44.0822289232813 + ], + [ + 125.56570529937743, + 44.08156611974136 + ], + [ + 125.56568384170532, + 44.080756872793685 + ], + [ + 125.56697130203248, + 44.08038692764524 + ], + [ + 125.56614518165588, + 44.079076686640605 + ], + [ + 125.56508302688599, + 44.07957766456847 + ], + [ + 125.56496500968933, + 44.07926166360025 + ], + [ + 125.56531906127931, + 44.078336773019075 + ], + [ + 125.56451439857484, + 44.07842155525757 + ], + [ + 125.5642032623291, + 44.077573727405884 + ], + [ + 125.56374192237853, + 44.07738874516929 + ], + [ + 125.56309819221495, + 44.07754289707329 + ], + [ + 125.56275486946106, + 44.077288546216344 + ], + [ + 125.56204676628111, + 44.07723073905093 + ], + [ + 125.56158542633057, + 44.078093986845865 + ], + [ + 125.56085050106049, + 44.07839072536672 + ], + [ + 125.5603516101837, + 44.077893591158805 + ], + [ + 125.56087195873259, + 44.07719605472459 + ], + [ + 125.56053936481476, + 44.076644956589035 + ], + [ + 125.56134402751923, + 44.07578168765421 + ], + [ + 125.56134402751925, + 44.075188182956 + ], + [ + 125.56160151958467, + 44.074575402379104 + ], + [ + 125.56110799312593, + 44.07433645477418 + ], + [ + 125.56153714656833, + 44.07364273045459 + ], + [ + 125.56096851825717, + 44.0735579413689 + ], + [ + 125.56070029735568, + 44.072702335615595 + ], + [ + 125.56123673915864, + 44.07203942535606 + ], + [ + 125.56158006191257, + 44.07210880003339 + ], + [ + 125.56176245212556, + 44.073103161472574 + ], + [ + 125.56211650371553, + 44.073103161472574 + ], + [ + 125.56213796138766, + 44.07237858967234 + ], + [ + 125.56358635425569, + 44.07199317552601 + ], + [ + 125.56195557117464, + 44.071900675757355 + ], + [ + 125.56192338466646, + 44.07134567410969 + ], + [ + 125.56265294551851, + 44.0704823278683 + ], + [ + 125.56148350238801, + 44.067545314667946 + ], + [ + 125.56190192699435, + 44.06692860046951 + ], + [ + 125.56251347064975, + 44.06747593464139 + ], + [ + 125.5633503198624, + 44.06723695837191 + ], + [ + 125.56600034236911, + 44.067969301952104 + ], + [ + 125.56652605533601, + 44.06672816697156 + ], + [ + 125.56775987148286, + 44.06642751545209 + ], + [ + 125.56852161884309, + 44.0658184987203 + ], + [ + 125.57005584239961, + 44.0662116621374 + ], + [ + 125.57067811489108, + 44.065934135290505 + ], + [ + 125.57121455669406, + 44.0655563883248 + ], + [ + 125.57269513607028, + 44.065409914363 + ], + [ + 125.57509839534764, + 44.06630417079721 + ], + [ + 125.57539880275729, + 44.065749116669735 + ], + [ + 125.57867109775546, + 44.065941844387154 + ], + [ + 125.5812352895737, + 44.06633500698503 + ], + [ + 125.59694230556491, + 44.066674203990786 + ], + [ + 125.59861600399019, + 44.06685921972013 + ], + [ + 125.6002897024155, + 44.057946971863394 + ], + [ + 125.60041844844821, + 44.04801548231369 + ], + [ + 125.59651315212253, + 44.04641148308151 + ], + [ + 125.57385385036473, + 44.03317683211147 + ], + [ + 125.57381093502049, + 44.03141815949372 + ], + [ + 125.57471215724948, + 44.031233033024414 + ], + [ + 125.57566702365877, + 44.02975971425935 + ], + [ + 125.57625710964204, + 44.0278389452719 + ], + [ + 125.57695448398592, + 44.024668383190246 + ], + [ + 125.5769866704941, + 44.02052556843741 + ], + [ + 125.57870328426364, + 44.01737776145827 + ], + [ + 125.58376729488376, + 44.016266730860146 + ], + [ + 125.58453977108005, + 44.01382856297197 + ], + [ + 125.59093415737156, + 44.01330388082568 + ], + [ + 125.59307992458346, + 44.01095818623011 + ], + [ + 125.59831559658053, + 44.0132112893768 + ], + [ + 125.60797154903413, + 44.01407547061105 + ], + [ + 125.6132072210312, + 44.01274832996396 + ], + [ + 125.61790645122531, + 44.011992155150814 + ], + [ + 125.62346398830417, + 44.01185326485136 + ], + [ + 125.6240648031235, + 44.00963097582351 + ], + [ + 125.62697231769565, + 44.01043347868892 + ], + [ + 125.6278306245804, + 44.01129770040076 + ], + [ + 125.63026607036593, + 44.01166807727943 + ], + [ + 125.63122093677522, + 44.012138761225195 + ], + [ + 125.6325298547745, + 44.011992155150814 + ], + [ + 125.63346326351167, + 44.010024512239276 + ], + [ + 125.6321543455124, + 44.00882846209979 + ], + [ + 125.6323152780533, + 44.00843491774811 + ], + [ + 125.63334524631502, + 44.008504366941075 + ], + [ + 125.63376367092134, + 44.00807223730813 + ], + [ + 125.63270151615144, + 44.007694121296716 + ], + [ + 125.63214361667634, + 44.00709993412315 + ], + [ + 125.63285171985629, + 44.00655204197433 + ], + [ + 125.63151061534884, + 44.0062433681125 + ], + [ + 125.63137114048006, + 44.00587295735815 + ], + [ + 125.63337743282321, + 44.00412890897334 + ], + [ + 125.63538372516635, + 44.00363500984909 + ], + [ + 125.63546955585483, + 44.00328001731364 + ], + [ + 125.63453614711764, + 44.00237709194433 + ], + [ + 125.63615620136264, + 44.001474152832664 + ], + [ + 125.63456833362581, + 44.00052489433368 + ], + [ + 125.63482582569125, + 44.0002779302833 + ], + [ + 125.6361132860184, + 43.99986889381362 + ], + [ + 125.63630640506747, + 43.999174297121975 + ], + [ + 125.63506186008456, + 43.997638437791935 + ], + [ + 125.63377439975741, + 43.997387602717765 + ], + [ + 125.6334471702576, + 43.997862258962876 + ], + [ + 125.63306093215944, + 43.99796259231716 + ], + [ + 125.63262641429903, + 43.99765773275373 + ], + [ + 125.63278734683992, + 43.99740689776116 + ], + [ + 125.63301265239718, + 43.99731042248166 + ], + [ + 125.63290536403657, + 43.99693223787347 + ], + [ + 125.63149988651277, + 43.99624146588753 + ], + [ + 125.62996566295625, + 43.996222170465245 + ], + [ + 125.62987446784976, + 43.99574750110055 + ], + [ + 125.6302446126938, + 43.99469009390639 + ], + [ + 125.6298637390137, + 43.99445854237106 + ], + [ + 125.62944531440739, + 43.99501426453802 + ], + [ + 125.62879085540773, + 43.99503356035314 + ], + [ + 125.62795937061314, + 43.9944662607701 + ], + [ + 125.6270688772202, + 43.993408830745516 + ], + [ + 125.62608718872073, + 43.99298816903721 + ], + [ + 125.62556684017183, + 43.99245944321148 + ], + [ + 125.62586724758151, + 43.991494602921534 + ], + [ + 125.62535226345065, + 43.991154975407035 + ], + [ + 125.62453687191012, + 43.98976556988217 + ], + [ + 125.6244081258774, + 43.98877752838706 + ], + [ + 125.62488019466403, + 43.98806736340318 + ], + [ + 125.62456905841829, + 43.98710245171215 + ], + [ + 125.6237751245499, + 43.98631507215037 + ], + [ + 125.623796582222, + 43.98559715815316 + ], + [ + 125.62483727931979, + 43.98544276691184 + ], + [ + 125.62654852867131, + 43.984257800767054 + ], + [ + 125.62638223171236, + 43.983640219458735 + ], + [ + 125.62535762786868, + 43.9834549438134 + ], + [ + 125.62520205974582, + 43.983103690481876 + ], + [ + 125.6260818243027, + 43.98286437383486 + ], + [ + 125.62678992748265, + 43.982262218004024 + ], + [ + 125.62651097774508, + 43.98068732003259 + ], + [ + 125.62702596187593, + 43.98034763067922 + ] + ] + ] + } + } + ] +} diff --git a/Doc/长春开发区地图/V1配置办法.txt b/Doc/长春开发区地图/V1配置办法.txt new file mode 100644 index 00000000..391ad332 --- /dev/null +++ b/Doc/长春开发区地图/V1配置办法.txt @@ -0,0 +1,5 @@ +将文件156810100_full.json覆盖掉: +/opt/dataease/data/custom/full/156/156810100_full.json + + +香港特别行政区 diff --git a/Doc/长春开发区地图/V2配置办法.txt b/Doc/长春开发区地图/V2配置办法.txt new file mode 100644 index 00000000..f7f24c86 --- /dev/null +++ b/Doc/长春开发区地图/V2配置办法.txt @@ -0,0 +1,8 @@ + location /de2api/map/156/156810100.json { + root /usr/local/openresty/nginx/html; + } + +因为204的Ningx是使用Docker部署的,所以,需要进入Docker拷贝文件 + +拷贝到的文件位置: +/usr/local/openresty/nginx/html/de2api/map/156/156810100.json \ No newline at end of file diff --git a/WebRoot/html/pages/dataease/dataList.html b/WebRoot/html/pages/dataease/dataList.html index ecdd9ab1..af04f4bd 100644 --- a/WebRoot/html/pages/dataease/dataList.html +++ b/WebRoot/html/pages/dataease/dataList.html @@ -51,10 +51,7 @@ - - - @@ -111,7 +107,7 @@ content: './upload_proxy_city.html?id=' + obj.data.id }); - } else if (obj.event === 'downloadData') { + }else if (obj.event === 'downloadData') { window.location.href = "/dsBase/dataease/downloadExcelByCity?id=" + obj.data.id; } else { window.location.href = "./dataMod_proxy_city.html?id=" + obj.data.id diff --git a/WebRoot/html/pages/dataease/dataList_proxy_province.html b/WebRoot/html/pages/dataease/dataList_proxy_province.html index 350324dd..eb84deae 100644 --- a/WebRoot/html/pages/dataease/dataList_proxy_province.html +++ b/WebRoot/html/pages/dataease/dataList_proxy_province.html @@ -51,7 +51,7 @@ - - - diff --git a/WebRoot/html/pages/dataease/dataMod.html b/WebRoot/html/pages/dataease/dataMod.html index 1ff0fa04..06604da6 100644 --- a/WebRoot/html/pages/dataease/dataMod.html +++ b/WebRoot/html/pages/dataease/dataMod.html @@ -68,135 +68,115 @@ -
-
- -
- - -
-
- - - - - +
+
+ +
+
-
- - - - - $.ajax({ - type: "GET", - async: false, - url: '/dsBase/dataease/getDataSetContent?id=' + id, - dataType: "json", - success: function (res) { - _data = res.data; - } - }); +
+
+ + + + + if (r != null) return unescape(r[2]); + return null; + } + }); + diff --git a/WebRoot/html/pages/dataease/dataMod_proxy_city.html b/WebRoot/html/pages/dataease/dataMod_proxy_city.html index 96d63b10..5144f2d7 100644 --- a/WebRoot/html/pages/dataease/dataMod_proxy_city.html +++ b/WebRoot/html/pages/dataease/dataMod_proxy_city.html @@ -160,7 +160,7 @@ type: "POST", dataType: "json", async: false, - url: '/dsBase/dataease/saveDataSetByCity', + url: '/dsBase/dataease/saveDataSet', data: { "id": id, "data": JSON.stringify(cleanedData) diff --git a/WebRoot/html/pages/dataease/dataMod_proxy_province.html b/WebRoot/html/pages/dataease/dataMod_proxy_province.html index fe913308..7f115cd6 100644 --- a/WebRoot/html/pages/dataease/dataMod_proxy_province.html +++ b/WebRoot/html/pages/dataease/dataMod_proxy_province.html @@ -68,135 +68,118 @@ -
-
- -
- - -
-
- - +
+
+ +
+ + +
+
+ -
+
+ + + + - + if (r != null) return unescape(r[2]); + return null; + } + }); + diff --git a/WebRoot/upload/19D0B801-B1C2-4884-9648-5A1C1FFEA306.xlsx b/WebRoot/upload/19D0B801-B1C2-4884-9648-5A1C1FFEA306.xlsx new file mode 100644 index 00000000..d461ced7 Binary files /dev/null and b/WebRoot/upload/19D0B801-B1C2-4884-9648-5A1C1FFEA306.xlsx differ diff --git a/WebRoot/upload/3CCB711C-1861-4FF5-88E7-CA42FCA82E48.xlsx b/WebRoot/upload/3CCB711C-1861-4FF5-88E7-CA42FCA82E48.xlsx new file mode 100644 index 00000000..5f2a7b73 Binary files /dev/null and b/WebRoot/upload/3CCB711C-1861-4FF5-88E7-CA42FCA82E48.xlsx differ diff --git a/WebRoot/upload/5867C934-1437-4CCC-8170-6F79BBA86E72.xlsx b/WebRoot/upload/5867C934-1437-4CCC-8170-6F79BBA86E72.xlsx new file mode 100644 index 00000000..0e92b95f Binary files /dev/null and b/WebRoot/upload/5867C934-1437-4CCC-8170-6F79BBA86E72.xlsx differ diff --git a/WebRoot/upload/638BBBC7-85E8-42CA-A6E6-9A6E0F7F7EAC.xlsx b/WebRoot/upload/638BBBC7-85E8-42CA-A6E6-9A6E0F7F7EAC.xlsx new file mode 100644 index 00000000..5a162524 Binary files /dev/null and b/WebRoot/upload/638BBBC7-85E8-42CA-A6E6-9A6E0F7F7EAC.xlsx differ diff --git a/WebRoot/upload/6E989941-01FF-430B-BEE9-59EC46E1FA14.xlsx b/WebRoot/upload/6E989941-01FF-430B-BEE9-59EC46E1FA14.xlsx new file mode 100644 index 00000000..38c546f2 Binary files /dev/null and b/WebRoot/upload/6E989941-01FF-430B-BEE9-59EC46E1FA14.xlsx differ diff --git a/WebRoot/upload/6FDA88D6-FE34-4195-9517-B0345D8FD7B9.xlsx b/WebRoot/upload/6FDA88D6-FE34-4195-9517-B0345D8FD7B9.xlsx new file mode 100644 index 00000000..7fe395a8 Binary files /dev/null and b/WebRoot/upload/6FDA88D6-FE34-4195-9517-B0345D8FD7B9.xlsx differ diff --git a/WebRoot/upload/7D165DFF-595F-403E-8C69-AC14279395A6.xlsx b/WebRoot/upload/7D165DFF-595F-403E-8C69-AC14279395A6.xlsx new file mode 100644 index 00000000..77a6a9bf Binary files /dev/null and b/WebRoot/upload/7D165DFF-595F-403E-8C69-AC14279395A6.xlsx differ diff --git a/WebRoot/upload/7EA91AD7-AD91-4A80-B9BE-F6C31477A063.xlsx b/WebRoot/upload/7EA91AD7-AD91-4A80-B9BE-F6C31477A063.xlsx new file mode 100644 index 00000000..0cad74c2 Binary files /dev/null and b/WebRoot/upload/7EA91AD7-AD91-4A80-B9BE-F6C31477A063.xlsx differ diff --git a/WebRoot/upload/93EA3E11-FD86-4622-AE0D-4C8D9A80E404.xlsx b/WebRoot/upload/93EA3E11-FD86-4622-AE0D-4C8D9A80E404.xlsx new file mode 100644 index 00000000..0c06d441 Binary files /dev/null and b/WebRoot/upload/93EA3E11-FD86-4622-AE0D-4C8D9A80E404.xlsx differ diff --git a/WebRoot/upload/AB8F8E05-CCCC-4DC0-B744-12C3EEA1F676.xlsx b/WebRoot/upload/AB8F8E05-CCCC-4DC0-B744-12C3EEA1F676.xlsx new file mode 100644 index 00000000..4e82619d Binary files /dev/null and b/WebRoot/upload/AB8F8E05-CCCC-4DC0-B744-12C3EEA1F676.xlsx differ diff --git a/src/main/java/com/dsideal/base/BaseApplication.java b/src/main/java/com/dsideal/base/BaseApplication.java index 390ae75a..9a6ce8fe 100644 --- a/src/main/java/com/dsideal/base/BaseApplication.java +++ b/src/main/java/com/dsideal/base/BaseApplication.java @@ -29,7 +29,6 @@ import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.OrderedFieldContainerFactory; import com.jfinal.plugin.activerecord.dialect.MysqlDialect; import com.jfinal.plugin.druid.DruidPlugin; -import com.jfinal.plugin.hikaricp.HikariCpPlugin; import com.jfinal.plugin.redis.RedisPlugin; import com.jfinal.server.undertow.UndertowServer; import com.jfinal.template.Engine; diff --git a/src/main/java/com/dsideal/base/DataEase/Controller/DataEaseController.java b/src/main/java/com/dsideal/base/DataEase/Controller/DataEaseController.java index efd725fb..df0136c8 100644 --- a/src/main/java/com/dsideal/base/DataEase/Controller/DataEaseController.java +++ b/src/main/java/com/dsideal/base/DataEase/Controller/DataEaseController.java @@ -5,9 +5,11 @@ import com.dsideal.base.BaseApplication; import com.dsideal.base.DataEase.Model.DataEaseModel; import com.dsideal.base.DataEase.Model.ExcelReader; import com.dsideal.base.DataEase.Model.ExcelRow; +import com.dsideal.base.DataEase.Util.Step3_CopyBigScreen; import com.dsideal.base.Interceptor.EmptyInterface; import com.dsideal.base.Interceptor.IsLoginInterface; import com.dsideal.base.Interceptor.IsNumericInterface; +import com.dsideal.base.Interceptor.LayUiPageInfoInterface; import com.dsideal.base.Res.Model.ResourceModel; import com.dsideal.base.Util.CommonUtil; import com.dsideal.base.Util.CookieUtil; @@ -17,6 +19,7 @@ import com.jfinal.ext.interceptor.GET; import com.jfinal.ext.interceptor.POST; import com.jfinal.kit.Kv; import com.jfinal.kit.StrKit; +import com.jfinal.plugin.activerecord.Page; import com.jfinal.plugin.activerecord.Record; import com.jfinal.upload.UploadFile; import io.github.yedaxia.apidocs.ApiDoc; @@ -28,7 +31,6 @@ import java.io.IOException; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.UUID; @ApiDoc public class DataEaseController extends Controller { @@ -47,19 +49,19 @@ public class DataEaseController extends Controller { /** * 省级路由 * - * @param city_name 城市名称 + * @param city_name 市州名称 */ @Before({GET.class}) @EmptyInterface({"city_name"}) public void route(String city_name) { //大屏名称 - String dataVisualizationName = BaseApplication.PropKit.get("dataEase.dataVisualizationName"); + String dataVisualizationNameCity = BaseApplication.PropKit.get("dataEase.dataVisualizationOuterParamsNameCity"); //发布的地址 String publish_url = BaseApplication.PropKit.get("dataEase.publish_url"); //先更新一下数据表 - int res = dm.updateCityArea(dataVisualizationName, city_name); + int res = dm.updateCityArea(dataVisualizationNameCity, city_name); if (res == -1) { - renderJson(CommonUtil.returnMessageJson(false, dataVisualizationName + "名称的大屏不唯一,无法完成更新操作!")); + renderJson(CommonUtil.returnMessageJson(false, dataVisualizationNameCity + "名称的大屏不唯一,无法完成更新操作!")); return; } //拼接一下URL的最终地址 @@ -73,22 +75,28 @@ public class DataEaseController extends Controller { } /** - * 为OpenResty拦截器写的更新城市地图的接口 + * 省级路由,配合市州的大屏文档拷贝使用,每个市州大屏的仪表盘都拷贝一份出来,然后修改名称和数据源即可 * - * @param city_name 城市名称 + * @param city_name 市州名称 */ - @Before({POST.class}) + @Before({GET.class}) @EmptyInterface({"city_name"}) - public void updateCityArea(String city_name) { + public void routeV2(String city_name) { //大屏名称 - String dataVisualizationName = BaseApplication.PropKit.get("dataEase.dataVisualizationName"); - //先更新一下数据表 - int res = dm.updateCityArea(dataVisualizationName, city_name); - if (res == -1) { - renderJson(CommonUtil.returnMessageJson(false, dataVisualizationName + "名称的大屏不唯一,无法完成更新操作!")); - return; - } - renderJson(CommonUtil.returnMessageJson(true, "更新成功!")); + String dataVisualizationNameCity = BaseApplication.PropKit.get("dataEase.dataVisualizationNameCity"); + //发布的地址 + String publish_url = BaseApplication.PropKit.get("dataEase.publish_url"); + //共享地址 + String shareUrl = Step3_CopyBigScreen.getCityShare(dataVisualizationNameCity, city_name); + System.out.println("city_name=" + city_name + ",shareUrl=" + shareUrl); + //拼接一下URL的最终地址 + JSONObject jo = new JSONObject(); + jo.put("city_name", city_name); + String base64Str = Base64.encode(jo.toString()); + //记录最后一次操作的是哪个市或者县区 + dm.writeLastArea(city_name); + //跳转 + redirect(publish_url + "/#/de-link/" + shareUrl + "?attachParams=" + base64Str); } @@ -101,13 +109,13 @@ public class DataEaseController extends Controller { @EmptyInterface({"area_name"}) public void routeArea(String area_name) { //大屏名称 - String dataVisualizationName = BaseApplication.PropKit.get("dataEase.dataVisualizationNameArea"); + String dataVisualizationNameArea = BaseApplication.PropKit.get("dataEase.dataVisualizationNameArea"); //发布的地址 String publish_url = BaseApplication.PropKit.get("dataEase.publish_url"); //先更新一下数据表 - int res = dm.updateCityArea(dataVisualizationName, area_name); + int res = dm.updateCityArea(dataVisualizationNameArea, area_name); if (res == -1) { - renderJson(CommonUtil.returnMessageJson(false, dataVisualizationName + "名称的大屏不唯一,无法完成更新操作!")); + renderJson(CommonUtil.returnMessageJson(false, dataVisualizationNameArea + "名称的大屏不唯一,无法完成更新操作!")); return; } //拼接一下URL的最终地址 @@ -210,38 +218,6 @@ public class DataEaseController extends Controller { } - /** - * 下载模板Excel - * - * @param id 数据集id - */ - @Before(GET.class) - @IsLoginInterface({}) - @IsNumericInterface({"id"}) - public void downSampleExcel(int id) throws IOException { - String identity_idStr = CookieUtil.getValue(getRequest(), "identity_id"); - int identity_id = 1; - if (!StrKit.isBlank(identity_idStr)) { - identity_id = Integer.parseInt(identity_idStr); - } - String area_name = "云南省"; - //获取他是哪个城市的管理员 - if (identity_id == 2) { - area_name = "昆明市"; - } - //获取他是哪个县区的管理员 - if (identity_id == 3) { - area_name = "寻甸县"; - } - Record record = dm.getDataSetById(id); - String tableName = record.getStr("table_name"); - String dataSetName = record.getStr("dataset_name"); - //导出excel - String excelFileName = dm.exportExcel(identity_id, tableName, tempDir, area_name); - //renderFile - renderFile(new File(excelFileName), "【样例:" + area_name + "】" + dataSetName + "." + "xlsx"); - } - /** * 下载指定数据集的Excel文件 * @@ -340,12 +316,16 @@ public class DataEaseController extends Controller { /** * 获取数据集下的数据表 * - * @param id 数据集id + * @param id 数据集id + * @param pageNumber 第几页 + * @param pageSize 每页多少条数据 */ @Before(GET.class) @IsLoginInterface({}) @IsNumericInterface({"id"}) - public void getDataSetContent(int id) { + public void getDataSetContent(int id, int pageNumber, int pageSize) { + if (pageNumber == 0) pageNumber = 1; + if (pageSize == 0) pageSize = 20; //登录的人员 int identity_id = Integer.parseInt(CookieUtil.getValue(getRequest(), "identity_id")); String person_id = CookieUtil.getValue(getRequest(), "person_id"); @@ -355,42 +335,23 @@ public class DataEaseController extends Controller { String area_code = rm.getAreaCode(identity_id, person_id); //根据区域码,获取区域名称 String area_name = rm.getAreaName(area_code); - //父亲的区域名称 - String parent_area_name = rm.getParentAreaName(area_name); - List list = dm.getDataSetContent(id, identity_id, area_name); - renderJson(CommonUtil.renderJsonForLayUI(list)); + Page pageList = dm.getDataSetContent(id, identity_id, area_name, pageNumber, pageSize); + renderJson(CommonUtil.renderJsonForLayUI(pageList)); } /** * 保存数据集下的数据表 * - * @param id 数据集id - * @param data 保存的数据 + * @param dataset_id 数据集id + * @param id 数据集下的数据表的id + * @param field 字段名 + * @param value 值 */ @Before(POST.class) @IsLoginInterface({}) - public void saveDataSet(int id, String data) { - //登录的人员 - int identity_id = Integer.parseInt(CookieUtil.getValue(getRequest(), "identity_id")); - String person_id = CookieUtil.getValue(getRequest(), "person_id"); - - //获取他是哪个城市或者县区的管理员 - //行政区划码 - String area_code = rm.getAreaCode(identity_id, person_id); - //根据区域码,获取区域名称 - String area_name = rm.getAreaName(area_code); - //父亲的区域名称 - String parent_area_name = rm.getParentAreaName(area_name); - - JSONArray jsonArray = JSONArray.fromObject(data); - for (Object o : jsonArray) { - JSONObject jo = (JSONObject) o; - jo.put("行政区划", area_name); - jo.put("上级行政区划", parent_area_name); - } - //保存 - dm.saveDataSet(identity_id, id, area_name, jsonArray); + public void saveDataSet(int dataset_id, int id, String field, String value) { + dm.saveDataSet(dataset_id, id, field, value); renderJson(CommonUtil.returnMessageJson(true, "保存成功")); } @@ -424,12 +385,16 @@ public class DataEaseController extends Controller { /** * 市州管理员,帮助县区管理员填报数据,需要获取指定数据集的数据 * - * @param id 数据集id + * @param id 数据集id + * @param pageNumber 第几页 + * @param pageSize 每页多少条数据 */ @Before(GET.class) @IsLoginInterface({}) @IsNumericInterface({"id"}) - public void getDataSetContentByCity(int id) { + public void getDataSetContentByCity(int id, int pageNumber, int pageSize) { + if (pageNumber == 0) pageNumber = 1; + if (pageSize == 0) pageSize = 20; //登录的人员 int identity_id = Integer.parseInt(CookieUtil.getValue(getRequest(), "identity_id")); String person_id = CookieUtil.getValue(getRequest(), "person_id"); @@ -439,52 +404,10 @@ public class DataEaseController extends Controller { //根据区域码,获取区域名称 String area_name = rm.getAreaName(area_code); - List list = dm.getDataSetContentByCity(id, area_name); + Page list = dm.getDataSetContentByCity(id, area_name, pageNumber, pageSize); renderJson(CommonUtil.renderJsonForLayUI(list)); } - /** - * 市州管理员,帮助县区管理员填报数据,保存数据集下的数据表 - * - * @param id 数据集id - * @param data 保存的数据 - */ - @Before(POST.class) - @IsLoginInterface({}) - public void saveDataSetByCity(int id, String data) { - //登录的人员 - int identity_id = Integer.parseInt(CookieUtil.getValue(getRequest(), "identity_id")); - String person_id = CookieUtil.getValue(getRequest(), "person_id"); - - //获取他是哪个城市或者县区的管理员 - //行政区划码 - String area_code = rm.getAreaCode(identity_id, person_id); - //根据区域码,获取区域名称 - String area_name = rm.getAreaName(area_code); - //行政区划 - Record rArea = rm.getAreaRecordByName(area_name); - String area_id = rArea.getStr("id"); - //此市州下有哪些县区 - List list = dm.getAreaList(area_id); - Set set = new HashSet<>(); - for (Record record : list) { - set.add(record.getStr("area_name")); - } - - JSONArray jsonArray = JSONArray.fromObject(data); - for (Object o : jsonArray) { - JSONObject jo = (JSONObject) o; - if (!set.contains(jo.get("行政区划").toString())) { - renderJson(CommonUtil.returnMessageJson(false, jo.get("行政区划").toString() + "并不隶属于" + area_name + ",请检查后重新填报!")); - return; - } - jo.put("上级行政区划", area_name); - } - //保存 - dm.saveDataSetByCity(id, area_name, jsonArray); - renderJson(CommonUtil.returnMessageJson(true, "保存成功")); - } - /** * 市管理员辅助县区录入:下载指定数据集的Excel文件 * @@ -591,25 +514,13 @@ public class DataEaseController extends Controller { @Before(GET.class) @IsLoginInterface({}) @IsNumericInterface({"id"}) - public void getDataSetContentByProvince(int id) { - List list = dm.getDataSetContentByProvince(id); + public void getDataSetContentByProvince(int id, int pageNumber, int pageSize) { + if (pageNumber == 0) pageNumber = 1; + if (pageSize == 0) pageSize = 20; + Page list = dm.getDataSetContentByProvince(id, pageNumber, pageSize); renderJson(CommonUtil.renderJsonForLayUI(list)); } - /** - * 省管理员,帮助市州、县区填报数据,保存数据集下的数据表 - * - * @param id 数据集id - * @param data 保存的数据 - */ - @Before(POST.class) - @IsLoginInterface({}) - public void saveDataSetByProvince(int id, String data) { - JSONArray jsonArray = JSONArray.fromObject(data); - //保存 - dm.saveDataSetByCity(id, "云南省", jsonArray); - renderJson(CommonUtil.returnMessageJson(true, "保存成功")); - } /** * 省管理员辅助市州、县区录入:下载指定数据集的Excel文件 @@ -678,5 +589,4 @@ public class DataEaseController extends Controller { kv.set("message", "上传成功"); renderJson(kv); } - } diff --git a/src/main/java/com/dsideal/base/DataEase/Model/DataEaseModel.java b/src/main/java/com/dsideal/base/DataEase/Model/DataEaseModel.java index aefd8502..ffdf94c4 100644 --- a/src/main/java/com/dsideal/base/DataEase/Model/DataEaseModel.java +++ b/src/main/java/com/dsideal/base/DataEase/Model/DataEaseModel.java @@ -5,6 +5,7 @@ import com.dsideal.base.Util.ExcelCommonUtil; import com.jfinal.kit.Kv; import com.jfinal.kit.StrKit; import com.jfinal.plugin.activerecord.Db; +import com.jfinal.plugin.activerecord.Page; import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.SqlPara; import net.sf.json.JSONArray; @@ -584,17 +585,18 @@ public class DataEaseModel { * @param id 数据集id * @return */ - public List getDataSetContent(int id, int identity_id, String area_name) { + public Page getDataSetContent(int id, int identity_id, String area_name, int pageNumber, int pageSize) { Record record = Db.findById("t_dp_dataset", "id", id); String tableName = record.getStr("table_name"); - + Page p; if (identity_id > 1) { - String sql = "select * from `" + tableName + "` where `行政区划`='" + area_name + "' or `上级行政区划`='" + area_name + "'"; - return Db.use(DB_NAME).find(sql); + p = Db.paginate(pageNumber, pageSize, + "SELECT *", "from " + DB_NAME + ".`" + tableName + "` where `行政区划`='" + area_name + "' or `上级行政区划`='" + area_name + "'"); } else { - String sql = "select * from `" + tableName + "`"; - return Db.use(DB_NAME).find(sql); + p = Db.paginate(pageNumber, pageSize, + "SELECT *", "from " + DB_NAME + ".`" + tableName + "`"); } + return p; } /** @@ -604,12 +606,13 @@ public class DataEaseModel { * @param area_name * @return */ - public List getDataSetContentByCity(int id, String area_name) { + public Page getDataSetContentByCity(int id, String area_name, int pageNumber, int pageSize) { Record record = Db.findById("t_dp_dataset", "id", id); String tableName = record.getStr("table_name"); - String sql = "select * from `" + tableName + "` where `上级行政区划`='" + area_name + "'"; - return Db.use(DB_NAME).find(sql); + Page p = Db.paginate(pageNumber, pageSize, + "SELECT *", "from " + DB_NAME + ".`" + tableName + "` where `上级行政区划`='" + area_name + "'"); + return p; } /** @@ -618,77 +621,25 @@ public class DataEaseModel { * @param id * @return */ - public List getDataSetContentByProvince(int id) { + public Page getDataSetContentByProvince(int id, int pageNumber, int pageSize) { Record record = Db.findById("t_dp_dataset", "id", id); String tableName = record.getStr("table_name"); - String sql = "select * from `" + tableName + "`"; - return Db.use(DB_NAME).find(sql); + return Db.paginate(pageNumber, pageSize, + "SELECT *", "from " + DB_NAME + ".`" + tableName + "`"); } /** * 保存数据集对应的表 - * - * @param id 数据集id - * @param ja json数组 */ - public void saveDataSet(int identity_id, int id, String area_name, JSONArray ja) { - Record record = Db.findById("t_dp_dataset", "id", id); + public void saveDataSet(int dataset_id, int id, String field, String value) { + Record record = Db.findById("t_dp_dataset", "id", dataset_id); String tableName = record.getStr("table_name"); - - if (identity_id > 1) { - String sql = "delete from `" + tableName + "` where `行政区划`=?"; - Db.use(DB_NAME).update(sql, area_name); - } else { - String sql = "delete from `" + tableName + "`"; - Db.use(DB_NAME).update(sql); - } - - List list = new ArrayList<>(); - for (int i = 0; i < ja.size(); i++) { - JSONObject jsonObject = ja.getJSONObject(i); - //遍历jo的每一个属性 - // 或者使用keySet和for-each循环遍历 - record = new Record(); - for (Object key : jsonObject.keySet()) { - Object value = jsonObject.get(key); - if (value.equals("null")) value = null; - record.set(key.toString(), value); - } - list.add(record); - } - Db.use(DB_NAME).batchSave(tableName, list, 100); + String sql = "update `" + tableName + "` set `" + field + "`=? where id=?"; + Db.use(DB_NAME).update(sql, value, id); } - /** - * 保存数据集对应的表 - * - * @param id 数据集id - * @param ja json数组 - */ - public void saveDataSetByCity(int id, String area_name, JSONArray ja) { - Record record = Db.findById("t_dp_dataset", "id", id); - String tableName = record.getStr("table_name"); - - String sql = "delete from `" + tableName + "` where `上级行政区划`=?"; - Db.use(DB_NAME).update(sql, area_name); - - List list = new ArrayList<>(); - for (int i = 0; i < ja.size(); i++) { - JSONObject jsonObject = ja.getJSONObject(i); - //遍历jo的每一个属性 - // 或者使用keySet和for-each循环遍历 - record = new Record(); - for (Object key : jsonObject.keySet()) { - Object value = jsonObject.get(key); - if (value.equals("null")) value = null; - record.set(key.toString(), value); - } - list.add(record); - } - Db.use(DB_NAME).batchSave(tableName, list, 100); - } /** * 导出Excel @@ -786,7 +737,7 @@ public class DataEaseModel { if ((StrKit.isBlank(value.trim()))) { record.set(colName, null); - } else if (colName.contains("数值") ) { + } else if (colName.contains("数值")) { //去掉非数字 record.set(colName, value.trim().replaceAll("[^\\d.]", "")); } else if (isInteger(value)) { @@ -879,10 +830,10 @@ public class DataEaseModel { public String getCityNameByAreaName(String areaName) { String sql = "select id,parent_id from t_dm_area where area_name=?"; - Record record= Db.findFirst(sql, areaName); - if(record==null) return null; + Record record = Db.findFirst(sql, areaName); + if (record == null) return null; String parent_id = record.getStr("parent_id"); - if(parent_id==null) return null; + if (parent_id == null) return null; return getAreaById(parent_id).getStr("area_name"); } } diff --git a/src/main/java/com/dsideal/base/DataEase/Util/Step1_DeleteBigScreen.java b/src/main/java/com/dsideal/base/DataEase/Util/Step1_DeleteBigScreen.java new file mode 100644 index 00000000..67da9c2b --- /dev/null +++ b/src/main/java/com/dsideal/base/DataEase/Util/Step1_DeleteBigScreen.java @@ -0,0 +1,23 @@ +package com.dsideal.base.DataEase.Util; + +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; + +import static com.dsideal.base.DataEase.Util.Step3_CopyBigScreen.clearScreen; + +public class Step1_DeleteBigScreen { + + public static void main(String[] args) throws InterruptedException { + //连接本地数据库系统 + LocalMysqlConnectUtil.Init(); + //获取省级大屏名称 + String dataVisualizationProvince = LocalMysqlConnectUtil.PropKit.get("dataEase.dataVisualizationProvince"); + //清理掉旧的数据 + clearScreen(dataVisualizationProvince); + //获取市州级大屏名称 + String dataVisualizationNameCity = LocalMysqlConnectUtil.PropKit.get("dataEase.dataVisualizationNameCity"); + //清理掉旧的数据 + clearScreen(dataVisualizationNameCity); + + System.out.println("恭喜,所有操作成功完成~~~"); + } +} diff --git a/src/main/java/com/dsideal/base/DataEase/Util/Step2_CopyFilter.java b/src/main/java/com/dsideal/base/DataEase/Util/Step2_CopyFilter.java new file mode 100644 index 00000000..40034a3b --- /dev/null +++ b/src/main/java/com/dsideal/base/DataEase/Util/Step2_CopyFilter.java @@ -0,0 +1,178 @@ +package com.dsideal.base.DataEase.Util; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONObject; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.dsideal.base.Util.CommonUtil; +import com.dsideal.base.Util.FileUtil; +import com.jfinal.kit.Kv; +import com.jfinal.kit.PathKit; +import com.jfinal.plugin.activerecord.Db; +import com.jfinal.plugin.activerecord.Record; +import com.jfinal.plugin.activerecord.SqlPara; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.dsideal.base.DataEase.Model.DataEaseModel.DB_NAME; +import static com.dsideal.base.DataEase.Util.Step3_CopyBigScreen.*; + +public class Step2_CopyFilter { + //DataEase部署的地址 + public static String urlPrefix = "http://10.10.14.203"; + + public static DataEaseModel dm = new DataEaseModel(); + + + /** + * 清理指定名称指定大屏 + * + * @param bigScreenName 大屏名称 + */ + public static void clearSingleScreen(String bigScreenName) { + //一、先删除后插入保持健康 + String sql = "select * from data_visualization_info where name ='" + bigScreenName + "'"; + List toDelList = Db.use(DB_NAME).find(sql); + for (Record record : toDelList) { + long id = record.getLong("id"); + //(1) 删除关联的表core_chart_view + sql = "delete from core_chart_view where scene_id=?"; + Db.use(DB_NAME).update(sql, id); + //(2) 删除共享链接表 + sql = "delete from xpack_share where resource_id=?"; + Db.use(DB_NAME).update(sql, id); + //(3) 删除可视化资源表 + sql = "delete from core_opt_recent where resource_id=?"; + Db.use(DB_NAME).update(sql, id); + // (4) 跳转记录表 + sql = "delete from visualization_link_jump where source_dv_id=?"; + Db.use(DB_NAME).update(sql, id); + // (5) 跳转配置表 + sql = "select * from visualization_link_jump_info where target_dv_id=?"; + List jumpList = Db.use(DB_NAME).find(sql, id); + for (Record r : jumpList) { + long jumpId = r.getLong("id"); + sql = "delete from visualization_link_jump_target_view_info where link_jump_info_id =?"; + Db.use(DB_NAME).update(sql, jumpId); + sql = "delete from visualization_link_jump_info where id=?"; + Db.use(DB_NAME).update(sql, jumpId); + } + //(7) 删除主表数据 + Db.use(DB_NAME).deleteById("data_visualization_info", id); + } + } + + /** + * 获取指定大屏中每个图表对应的数据集中,行政区划对应的字段ID + * + * @param scene_id + * @return + */ + public static Map queryChartViewFilterFieldId(long scene_id) { + Map map = new HashMap<>(); + Kv kv = Kv.by("scene_id", scene_id); + SqlPara sqlPara = Db.getSqlPara("DataEase.queryChartViewFilterFieldId", kv); + List list = Db.use(DB_NAME).find(sqlPara); + for (Record record : list) { + map.put(record.getLong("id"), record.getLong("table_field_id")); + } + return map; + } + + /** + * 拷贝城市大屏 + * + * @param dataVisualizationNameCity + */ + public static void copyOuterParamsScreenToFilterScreen(String dataVisualizationNameCity) throws InterruptedException { + //母屏信息 + Record motherRecord = getVisualizationByName(dataVisualizationNameCity); + long motherId = motherRecord.getLong("id");//母屏ID + long pid = motherRecord.getLong("pid"); //隶属文件夹 + + //母屏共享链接 + String sql = "select * from xpack_share where resource_id=?"; + Record motherShareRecord = Db.use(DataEaseModel.DB_NAME).findFirst(sql, motherId); + + String cityName = "昆明市"; + + String screenName = LocalMysqlConnectUtil.PropKit.get("dataEase.dataVisualizationNameCity");//要拷贝出来的屏幕名称 + long childId = callApiToCopy(screenName, motherId, pid); + + //只有一个复制的大屏,当然只有一个字段map,如果是16个的话,就需要放到循环里面进行获取map + Map mapField = queryChartViewFilterFieldId(childId); + + // 修改地图中城市 + List listMap = dm.getMap(childId); + //获取城市编码 + String area_code = dm.getCityCode(cityName); + //core_chart_view表 + for (Record record : listMap) { + long id = record.getLong("id"); + JSONObject jo = JSONObject.parseObject(record.getStr("custom_attr")); + //修改城市编码 + jo.getJSONObject("map").put("id", area_code); + jo.getJSONObject("map").put("level", "city"); + //写到数据库 + String jsonString = jo.toString(); + Db.use(DB_NAME).update("update core_chart_view set custom_attr=? where id=?", jsonString, id); + } + //更改过滤器 + sql = "select * from core_chart_view where scene_id=? and table_id>0 and type not like '%map%'"; + List list = Db.use(DB_NAME).find(sql, childId); + String custom_filter_json = cn.hutool.core.io.FileUtil.readUtf8String(PathKit.getRootClassPath() + "/Data/filter.json"); + for (Record record : list) { + long id = record.getLong("id"); + + long fieldId = -1; + if (mapField.containsKey(id)) { + fieldId = mapField.get(id); + } + + String custom_filter = record.getStr("custom_filter"); + JSONObject jo = JSONObject.parseObject(custom_filter); + jo.put("logic", "and"); + if (jo.getJSONArray("items") == null) { + jo = JSONObject.parseObject(custom_filter_json); + if (fieldId > 0) { + jo.getJSONArray("items").getJSONObject(0).put("fieldId", fieldId); + } + } else { + JSONObject newJo = JSONObject.parseObject(custom_filter_json).getJSONArray("items").getJSONObject(0); + if (fieldId > 0) { + newJo.put("fieldId", fieldId); + } + jo.getJSONArray("items").add(newJo); + } + sql = "update core_chart_view set custom_filter=? where id=?"; + Db.use(DB_NAME).update(sql, jo.toString(), id); + } + + sql = "update core_chart_view set custom_filter=replace(custom_filter,'昆明市','" + cityName + "') where scene_id=?"; + Db.use(DB_NAME).update(sql, childId); + + //发布共享链接 + publishShare(motherShareRecord, childId); + } + + + public static void main(String[] args) throws InterruptedException { + //连接本地数据库系统 + LocalMysqlConnectUtil.Init(); + + //清理掉旧的数据 + String dataVisualizationNameCity = LocalMysqlConnectUtil.PropKit.get("dataEase.dataVisualizationNameCity"); + //清理掉旧的数据 + clearSingleScreen(dataVisualizationNameCity); + + //获取市州级外链参数大屏名称 + String dataVisualizationOuterParamsNameCity = LocalMysqlConnectUtil.PropKit.get("dataEase.dataVisualizationOuterParamsNameCity"); + + //拷贝外部参数大屏到过滤器大屏 + copyOuterParamsScreenToFilterScreen(dataVisualizationOuterParamsNameCity); + + System.out.println("过滤器大屏拷贝完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/DataEase/Util/Step3_CopyBigScreen.java b/src/main/java/com/dsideal/base/DataEase/Util/Step3_CopyBigScreen.java new file mode 100644 index 00000000..d13cbbf9 --- /dev/null +++ b/src/main/java/com/dsideal/base/DataEase/Util/Step3_CopyBigScreen.java @@ -0,0 +1,248 @@ +package com.dsideal.base.DataEase.Util; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONObject; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.dsideal.base.Util.CommonUtil; +import com.dsideal.base.Util.FileUtil; +import com.jfinal.kit.PathKit; +import com.jfinal.plugin.activerecord.Db; +import com.jfinal.plugin.activerecord.Record; + +import java.util.*; + +import static com.dsideal.base.DataEase.Model.DataEaseModel.DB_NAME; + +public class Step3_CopyBigScreen { + //DataEase部署的地址 + public static String urlPrefix = "http://10.10.14.203"; + + public static DataEaseModel dm = new DataEaseModel(); + + /** + * 功能:获取DataEase的Token + * + * @return + */ + public static String getToken() { + //读取Data目录下DataEaseLogin.json文件 + JSONObject jo = FileUtil.readJsonFile(PathKit.getRootClassPath() + "/Data/DataEaseLogin.json"); + String url = urlPrefix + "/de2api/login/localLogin"; + String res = HttpUtil.createPost(url).contentType("application/json").body(jo.toString()).execute().body(); + return JSONObject.parseObject(res).getJSONObject("data").getString("token"); + } + + + /** + * 清理指定名称大屏的所有副本,为了再次生成不重复 + * + * @param bigScreenName 大屏名称 + */ + public static void clearScreen(String bigScreenName) { + //一、先删除后插入保持健康 + // 保留:【云南省教育决策支持系统【市州拷贝】】,删除掉云南省教育决策支持系统【市州拷贝】+昆明市,云南省教育决策支持系统【市州】+楚雄州等数据 + String sql = "select * from data_visualization_info where name like '%" + bigScreenName + "%' and name <>'" + bigScreenName + "'"; + List toDelList = Db.use(DB_NAME).find(sql); + for (Record record : toDelList) { + long id = record.getLong("id"); + //(1) 删除关联的表core_chart_view + sql = "delete from core_chart_view where scene_id=?"; + Db.use(DB_NAME).update(sql, id); + //(2) 删除共享链接表 + sql = "delete from xpack_share where resource_id=?"; + Db.use(DB_NAME).update(sql, id); + //(3) 删除可视化资源表 + sql = "delete from core_opt_recent where resource_id=?"; + Db.use(DB_NAME).update(sql, id); + // (4) 跳转记录表 + sql = "delete from visualization_link_jump where source_dv_id=?"; + Db.use(DB_NAME).update(sql, id); + // (5) 跳转配置表 + sql = "select * from visualization_link_jump_info where target_dv_id=?"; + List jumpList = Db.use(DB_NAME).find(sql, id); + for (Record r : jumpList) { + long jumpId = r.getLong("id"); + sql = "delete from visualization_link_jump_target_view_info where link_jump_info_id =?"; + Db.use(DB_NAME).update(sql, jumpId); + sql = "delete from visualization_link_jump_info where id=?"; + Db.use(DB_NAME).update(sql, jumpId); + } + //(7) 删除主表数据 + Db.use(DB_NAME).deleteById("data_visualization_info", id); + } + } + + /** + * 获取指定大屏的信息 + * + * @param dataVisualizationNameCity + * @return + */ + public static Record getVisualizationByName(String dataVisualizationNameCity) { + String sql = "select * from data_visualization_info where name =?"; + return Db.use(DB_NAME).findFirst(sql, dataVisualizationNameCity); + } + + /** + * 调用API拷贝大屏 + * + * @param screenName 目标大屏名称 + * @param id 源大屏ID + * @param pid 源大屏所属文件夹id + * @return + */ + public static long callApiToCopy(String screenName, long id, long pid) throws InterruptedException { + //拷贝API + String url = urlPrefix + "/de2api/dataVisualization/copy"; + JSONObject jo = new JSONObject(); + jo.put("nodeType", "leaf"); + jo.put("name", screenName); + jo.put("type", "dataV"); + jo.put("id", id); + jo.put("pid", pid); + String res = HttpUtil.createPost(url).contentType("application/json") + .header("x-de-token", getToken()).body(jo.toString()).execute().body(); + Thread.sleep(2200); + System.out.println(res); + long childId = Long.parseLong(JSONObject.parseObject(res).getString("data")); + + //更新pid,没有这步的话,在界面上看不到拷贝出来的大屏! + String sql = "update data_visualization_info set pid=? where id=?"; + Db.use(DB_NAME).update(sql, pid, childId); + return childId; + } + + /** + * 发布共享链接 + * + * @param motherShareRecord + * @param childId + */ + public static void publishShare(Record motherShareRecord, long childId) { + //发布共享链接 + Record shareRecord = new Record().setColumns(motherShareRecord); + shareRecord.set("resource_id", childId); + shareRecord.set("id", CommonUtil.getSnowId()); + shareRecord.set("uuid", CommonUtil.randomString(8));//大小写字母和数字组合,长度为8 + Db.use(DB_NAME).save("xpack_share", "id", shareRecord); + } + + + /** + * 拷贝城市大屏 + * + * @param dataVisualizationNameCity + */ + public static void copyCityScreen(String dataVisualizationNameCity) throws InterruptedException { + //母屏信息 + Record motherRecord = getVisualizationByName(dataVisualizationNameCity); + long motherId = motherRecord.getLong("id");//母屏ID + long pid = motherRecord.getLong("pid"); //隶属文件夹 + + //母屏共享链接 + String sql = "select * from xpack_share where resource_id=?"; + Record motherShareRecord = Db.use(DB_NAME).findFirst(sql, motherId); + + //按16个市州进行生成 + List list = dm.getCityNameList(); + for (int i = 0; i < list.size(); i++) { + String cityName = list.get(i); + String screenName = dataVisualizationNameCity + cityName;//要拷贝出来的屏幕名称 + long childId = callApiToCopy(screenName, motherId, pid); + + // 修改地图中城市 + List listMap = dm.getMap(childId); + //获取城市编码 + String area_code = dm.getCityCode(cityName); + //core_chart_view表 + for (Record record : listMap) { + long id = record.getLong("id"); + JSONObject jo = JSONObject.parseObject(record.getStr("custom_attr")); + //修改城市编码 + jo.getJSONObject("map").put("id", area_code); + jo.getJSONObject("map").put("level", "city"); + //写到数据库 + String jsonString = jo.toString(); + Db.use(DB_NAME).update("update core_chart_view set custom_attr=? where id=?", jsonString, id); + } + //更改过滤器 + sql = "update core_chart_view set custom_filter=replace(custom_filter,'昆明市','" + cityName + "') where scene_id=?"; + Db.use(DB_NAME).update(sql, childId); + + //发布共享链接 + publishShare(motherShareRecord, childId); + System.out.println((i + 1) + "、" + cityName + "修改完成,共" + (list.size()) + "个。"); + } + System.out.println(list.size() + "个城市大屏拷贝完成!"); + } + + /** + * 拷贝省级大屏 + * + * @param dataVisualizationProvince 省级大屏的名称 + */ + public static void copyProvinceScreen(String dataVisualizationProvince) throws InterruptedException { + //母屏信息 + Record motherRecord = getVisualizationByName(dataVisualizationProvince); + long motherId = motherRecord.getLong("id");//母屏ID + long pid = motherRecord.getLong("pid"); //隶属文件夹 + + //母屏共享链接 + String sql = "select * from xpack_share where resource_id=?"; + Record motherShareRecord = Db.use(DB_NAME).findFirst(sql, motherId); + + String screenName = dataVisualizationProvince + "【拷贝】";//要拷贝出来的屏幕名称 + //拷贝API + long childId = callApiToCopy(screenName, motherId, pid); + + //发布共享链接 + publishShare(motherShareRecord, childId); + System.out.println("省级大屏拷贝完成!"); + } + + /** + * 获取城市的共享链接 + * + * @param dataVisualizationName + * @param cityName + * @return + */ + public static String getCityShare(String dataVisualizationName, String cityName) { + String screenName = dataVisualizationName + cityName; + String sql = "select * from data_visualization_info where name =?"; + Record record = Db.use(DB_NAME).findFirst(sql, screenName); + long id = record.getLong("id"); + sql = "select * from xpack_share where resource_id=?"; + Record shareRecord = Db.use(DB_NAME).findFirst(sql, id); + System.out.println(cityName + "的共享链接:" + shareRecord.getStr("uuid")); + return shareRecord.getStr("uuid"); + } + + public static void main(String[] args) throws InterruptedException { + //连接本地数据库系统 + LocalMysqlConnectUtil.Init(); + //获取省级大屏名称 + String dataVisualizationProvince = LocalMysqlConnectUtil.PropKit.get("dataEase.dataVisualizationProvince"); + //清理掉旧的数据 + clearScreen(dataVisualizationProvince); + //获取市州级大屏名称 + String dataVisualizationNameCity = LocalMysqlConnectUtil.PropKit.get("dataEase.dataVisualizationNameCity"); + //清理掉旧的数据 + clearScreen(dataVisualizationNameCity); + + //拷贝省级大屏 + copyProvinceScreen(dataVisualizationProvince); + //拷贝市州级大屏 + copyCityScreen(dataVisualizationNameCity); + //更新复制出的省级大屏的链接路由 + Record motherRecord = getVisualizationByName(dataVisualizationProvince + "【拷贝】"); + long motherId = motherRecord.getLong("id");//母屏ID + String sql = "update visualization_link_jump_info set content=replace(content,'/dsBase/dataease/route?city_name=','/dsBase/dataease/routeV2?city_name=') where link_jump_id in (select id from visualization_link_jump where source_dv_id=?)"; + Db.use(DB_NAME).update(sql, motherId); + // 下面代码调试期使用 + // sql = "update visualization_link_jump_info set content=replace(content,'10.10.14.14','10.10.21.20') where link_jump_id in (select id from visualization_link_jump where source_dv_id=?)"; + // Db.use(DB_NAME).update(sql,motherId); + System.out.println("恭喜,所有操作成功完成~~~"); + } +} diff --git a/src/main/java/com/dsideal/base/DataEase/Util/Watch.java b/src/main/java/com/dsideal/base/DataEase/Util/Watch.java new file mode 100644 index 00000000..98e80011 --- /dev/null +++ b/src/main/java/com/dsideal/base/DataEase/Util/Watch.java @@ -0,0 +1,58 @@ +package com.dsideal.base.DataEase.Util; + +import com.github.shyiko.mysql.binlog.BinaryLogClient; +import com.github.shyiko.mysql.binlog.event.*; +import com.github.shyiko.mysql.binlog.event.deserialization.EventDeserializer; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; + +public class Watch { + //服务器id + public static int SERVER_ID = 12345; + + public static void main(String[] args) throws IOException, URISyntaxException { + //获取数据库地址,端口号,用户名,密码 + String jdbcUrl = "jdbc:mysql://10.10.14.203:3306/ds_db?rewriteBatchedStatements=true&useUnicode=true&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&failOverReadOnly=false"; + URI uri = new URI(jdbcUrl.substring(5)); // 去掉 "jdbc:" 部分,因为 URI 不识别它 + String host = uri.getHost(); // 获取IP地址 + int port = uri.getPort(); // 获取端口号 + String user = "root";//用户名 + String password = "Password123@mysql";//密码 + + Set set = new HashSet<>(); + set.add("QRTZ_FIRED_TRIGGERS"); + // 构建二进制日志客户端 + BinaryLogClient client = new BinaryLogClient(host, port, user, password); + // 反序列化配置 + EventDeserializer eventDeserializer = new EventDeserializer(); + eventDeserializer.setCompatibilityMode(EventDeserializer.CompatibilityMode.DATE_AND_TIME_AS_LONG); + // 设置反序列化配置 + client.setEventDeserializer(eventDeserializer); + // 设置自己的client作为服务器的id + client.setServerId(SERVER_ID); + Map tableMap = new HashMap<>(); + + client.registerEventListener(event -> { + EventData data = event.getData(); + if (data instanceof TableMapEventData) { + TableMapEventData tableMapEventData = (TableMapEventData) data; + tableMap.put(tableMapEventData.getTableId(), tableMapEventData.getTable()); + } + if (data instanceof WriteRowsEventData) { + String tableName = tableMap.get(((WriteRowsEventData) data).getTableId()); + if (!set.contains(tableName) && !tableName.startsWith("tmp_") && !tableName.endsWith("_log")) { + set.add(tableName); + System.out.println(tableName); + } + } + }); + client.connect(); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A1.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A1.java new file mode 100644 index 00000000..4d4100f8 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A1.java @@ -0,0 +1,184 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A1 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【1】学前幼儿入园总量预测\\学前幼儿入园总量预测.xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + + + //有好多EXCEL,啥样的有用?必须带有关键字字样的才有用! + static String fileNameKey = "发展规模数据"; + + //第二个表格的表头信息 + static String tableKeyword = "自动计算招生数、在校生数"; + //第二个表格的表头有几行 + static int tableHeadRows = 2; + //第二个表格的最后一列的列名 + static String tableLetterIndex = "K"; + + public static void main(String[] args) throws IOException, InvalidFormatException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".xlsx") && !file.getName().endsWith(".xls")) + continue; + //只关心发展规模数据的表格 + if (!file.getName().contains(fileNameKey)) continue; + //县区名称 + String areaName = "阳宗海"; + if (file.getName().contains("磨憨")) { + areaName = "磨憨-磨丁合作区"; + } else if (file.getName().contains("经开")) { + areaName = "经开区"; + } + //市州名称 + String cityName = "昆明市"; + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + String sourceExcel = file.getAbsolutePath(); + List> dataList = DsKit.readSecondTable(sourceExcel, 0, tableKeyword, + tableHeadRows, tableLetterIndex); + + //这个工作表有四个蓝色列:D:预测总招生数,E:修正城区招生A,F:修正镇区招生B,G:修正乡村招生C + //有时,有也三个蓝色列:D:预测总招生数,E:修正县城内招生,G:修正县城外招生 + //处理办法:先判断是4个的还是3个的,如果是3个的,就把修正县城外招生拆分开两项,第一项=修正县城外招生*30%,第二项=修正县城外招生- 第一项 + //至于是4个还是3个的,可以通过获取第二个table的列宽来获取,4列的时候,整个表的列数应该是11列,3列的时候,整个表的列数应该是9列 + //取出第一行 + if (dataList.isEmpty()) continue; + List x = dataList.getFirst(); + int cnt = 0; + for (String s : x) if (s == null) cnt++; + int colsCount = x.size() - cnt; + + //入园总数 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //D预测总招生数 + String v = stringList.get(DsKit.transLetter2Num("D")).split("\\.")[0]; + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "总入园数", "", v, "", areaName, cityName), dataStyle); + } + + //2022入园基数 + for (List ignored : dataList) { + //年份 + int year = 2022; + //D预测总招生数 + int v = Integer.parseInt(dataList.getFirst().get(DsKit.transLetter2Num("D")).split("\\.")[0]); + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "2022年基数(人)", "", String.valueOf(v), "", areaName, cityName), dataStyle); + } + + //城区 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //E:修正城区招生A 修正县城内招生 + String q = "0"; + int v = 0; + if (!StrKit.isBlank(q)) { + try { + q = stringList.get(DsKit.transLetter2Num("E")).split("\\.")[0]; + v = Integer.parseInt(q); + } catch (Exception err) { + + } + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), + "", "城区", "", String.valueOf(v), areaName, cityName), dataStyle); + } + + //修正镇区招生B 修正县城外招生*30% + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //F:修正镇区招生B 修正县城内招生 + String q = stringList.get(DsKit.transLetter2Num("F")); + if (StrKit.isBlank(q)) q = "0"; + int v = Integer.parseInt(q.split("\\.")[0]); + if (colsCount == 9) { + v = (int) (v * 0.3);//乘以0.3 + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "", "镇区", "", String.valueOf(v), areaName, cityName), dataStyle); + } + + // 修正乡村招生C 修正县城外招生-修正县城外招生*30% + for (List stringList : dataList) { + try { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //G:6修正乡村招生G + String q = stringList.get(DsKit.transLetter2Num("G")); + if (StrKit.isBlank(q)) q = "0"; + int v = Integer.parseInt(q.split("\\.")[0]); + if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("F")).split("\\.")[0]); + int d = (int) (v * 0.3);//乘以0.3 + v = v - d;//剩下70% + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "", "乡村", "", String.valueOf(v), areaName, cityName), dataStyle); + } catch (Exception err) { + + } + } + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A10.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A10.java new file mode 100644 index 00000000..f627a097 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A10.java @@ -0,0 +1,221 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class A10 { + static DataEaseModel dm = new DataEaseModel(); + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【10】新-概览\\新-概览.xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + + public static void main(String[] args) throws IOException, InvalidFormatException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //实例化 + + + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".xlsx") && !file.getName().endsWith(".xls")) + continue; + + //市州名称 + String cityName = "昆明市"; + + //县区名称 + System.out.println("正在进行" + cityName + "的数据填充~"); + String sourceExcel = file.getAbsolutePath(); + + List> dataList = DsKit.readSheet(sourceExcel, 4); + //我们认为第一行就是市州的统计数据,如果不是而是写到了最后的,就人为调整到第一行 + // 在本例中,跳过第一行,就是县区 + for (int i = 1; i < dataList.size(); i++) { + List row = dataList.get(i); + String areaName = row.getFirst(); + // 列的情况 + // 行政区划 类型 年份 学段 数值 上级行政区划 + // 行的情况 + //1、学前学校总数 I + int colIdx = DsKit.transLetter2Num("I"); + String xq_school_count = row.get(colIdx).trim(); + //2、学前招生总数 O + colIdx = DsKit.transLetter2Num("O"); + String xq_enroll_count = row.get(colIdx).trim(); + //3、学前在校生总数 P + colIdx = DsKit.transLetter2Num("P"); + String xq_student_count = row.get(colIdx).trim(); + //4、学前教职工总数 M + colIdx = DsKit.transLetter2Num("M"); + String xq_teacher_count = row.get(colIdx).trim(); + //5、学前专任教师数 N + colIdx = DsKit.transLetter2Num("N"); + String xq_special_teacher_count = row.get(colIdx).trim(); + + //6、小学学校总数 S + colIdx = DsKit.transLetter2Num("S"); + String xx_school_count = row.get(colIdx).trim(); + //7、小学招生总数 Z + colIdx = DsKit.transLetter2Num("Z"); + String xx_enroll_count = row.get(colIdx).trim(); + //8、小学在校生总数 AA + colIdx = DsKit.transLetter2Num("AA"); + String xx_student_count = row.get(colIdx).trim(); + //9、小学教职工总数 X + colIdx = DsKit.transLetter2Num("X"); + String xx_teacher_count = row.get(colIdx).trim(); + //10、小学专任教师数 Y + colIdx = DsKit.transLetter2Num("Y"); + String xx_special_teacher_count = row.get(colIdx).trim(); + + //11、初中学校总数 AD + colIdx = DsKit.transLetter2Num("AD"); + String cz_school_count = row.get(colIdx).trim(); + //12、初中招生总数 AJ + colIdx = DsKit.transLetter2Num("AJ"); + String cz_enroll_count = row.get(colIdx).trim(); + //13、初中在校生总数 AK + colIdx = DsKit.transLetter2Num("AK"); + String cz_student_count = row.get(colIdx).trim(); + //14、初中教职工总数 AH + colIdx = DsKit.transLetter2Num("AH"); + String cz_teacher_count = row.get(colIdx).trim(); + //15、初中专任教师数 AI + colIdx = DsKit.transLetter2Num("AI"); + String cz_special_teacher_count = row.get(colIdx).trim(); + + //16、高中学校总数 AN + colIdx = DsKit.transLetter2Num("AN"); + String gz_school_count = row.get(colIdx).trim(); + //17、高中招生总数 AQ + colIdx = DsKit.transLetter2Num("AQ"); + String gz_enroll_count = row.get(colIdx).trim(); + //18、高中在校生总数 AR + colIdx = DsKit.transLetter2Num("AR"); + String gz_student_count = row.get(colIdx).trim(); + //19、高中教职工总数 AO + colIdx = DsKit.transLetter2Num("AO"); + String gz_teacher_count = row.get(colIdx).trim(); + //20、高中专任教师数 AP + colIdx = DsKit.transLetter2Num("AP"); + String gz_special_teacher_count = row.get(colIdx).trim(); + + //21、中职学校总数 AU + colIdx = DsKit.transLetter2Num("AU"); + String zz_school_count = row.get(colIdx).trim(); + //22、中职招生总数 AX + colIdx = DsKit.transLetter2Num("AX"); + String zz_enroll_count = row.get(colIdx).trim(); + //23、中职在校生总数 AY + colIdx = DsKit.transLetter2Num("AY"); + String zz_student_count = row.get(colIdx).trim(); + //24、中职教职工总数 AV + colIdx = DsKit.transLetter2Num("AV"); + String zz_teacher_count = row.get(colIdx).trim(); + //25、中职专任教师数 AW + colIdx = DsKit.transLetter2Num("AW"); + String zz_special_teacher_count = row.get(colIdx).trim(); + + //学前 + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "学校总数", "2023", "学前", xq_school_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "招生总数", "2023", "学前", xq_enroll_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "在校生总数", "2023", "学前", xq_student_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "教职工总数", "2023", "学前", xq_teacher_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "专任教师数", "2023", "学前", xq_special_teacher_count, cityName)), dataStyle); + //小学 + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "学校总数", "2023", "小学", xx_school_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "招生总数", "2023", "小学", xx_enroll_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "在校生总数", "2023", "小学", xx_student_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "教职工总数", "2023", "小学", xx_teacher_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "专任教师数", "2023", "小学", xx_special_teacher_count, cityName)), dataStyle); + //初中 + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "学校总数", "2023", "初中", cz_school_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "招生总数", "2023", "初中", cz_enroll_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "在校生总数", "2023", "初中", cz_student_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "教职工总数", "2023", "初中", cz_teacher_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "专任教师数", "2023", "初中", cz_special_teacher_count, cityName)), dataStyle); + + //高中 + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "学校总数", "2023", "高中", gz_school_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "招生总数", "2023", "高中", gz_enroll_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "在校生总数", "2023", "高中", gz_student_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "教职工总数", "2023", "高中", gz_teacher_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "专任教师数", "2023", "高中", gz_special_teacher_count, cityName)), dataStyle); + //中职 + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "学校总数", "2023", "中职", zz_school_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "招生总数", "2023", "中职", zz_enroll_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "在校生总数", "2023", "中职", zz_student_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "教职工总数", "2023", "中职", zz_teacher_count, cityName)), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>(Arrays.asList(areaName, "专任教师数", "2023", "中职", zz_special_teacher_count, cityName)), dataStyle); + } + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A11.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A11.java new file mode 100644 index 00000000..f470221a --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A11.java @@ -0,0 +1,62 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.plugin.activerecord.Db; +import com.jfinal.plugin.activerecord.Record; +import com.jfinal.plugin.activerecord.SqlPara; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class A11 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【11】区(县)情\\区(县)情.xlsx"; + + + public static void main(String[] args) throws IOException, InvalidFormatException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + SqlPara sqlPara = Db.getSqlPara("DataEase.getAreaMemo"); + List list = Db.find(sqlPara); + + int rowIndex = 0; + for (Record record : list) { + String areaName = record.getStr("area_name"); + String cityName = record.getStr("city_name"); + String memo = record.getStr("memo"); + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, new ArrayList<>( + Arrays.asList(areaName, areaName, memo, cityName)), dataStyle); + } + + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A12.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A12.java new file mode 100644 index 00000000..2b1989d4 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A12.java @@ -0,0 +1,179 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.dom4j.DocumentException; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A12 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【12】新-教育资源配置发展预测\\新-教育资源配置发展预测.xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + //static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【12】新-教育资源配置发展预测"; + + + static DataEaseModel dm=new DataEaseModel(); + public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException, DocumentException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".docx") || file.getName().startsWith("~")) + continue; + //县区名称 + String areaName = "阳宗海"; + if (file.getName().contains("磨憨")) { + areaName = "磨憨-磨丁合作区"; + } else if (file.getName().contains("经开")) { + areaName = "经开区"; + } + //市州名称 + String cityName = "昆明市"; + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + int chartNumber = 36; + List> source1 = DsKit.getChartData(file.getAbsolutePath(), chartNumber, 0); + + //需要处理下人与万人的单位兼容 + if (source1 != null) { + //本例中要乘以多少呢? + String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml"; + int mul = DsKit.getMul(xmlPath); + for (List row : source1) { + for (int j = 1; j <= 4; j++) { + if (j + 1 > row.size()) continue; + row.set(j, String.valueOf((int) (Double.parseDouble(row.get(j)) * mul))); + } + } + } + chartNumber = 37; + List> source2 = DsKit.getChartData(file.getAbsolutePath(), chartNumber, 0); + + //需要处理下平方米与万平方米的单位兼容 + if (source2 != null) { + //本例中要乘以多少呢? + String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml"; + int mul = DsKit.getMul(xmlPath); + for (List row : source2) { + for (int j = 1; j <= 4; j++) { + if (j + 1 > row.size()) continue; + row.set(j, String.valueOf(Double.parseDouble(row.get(j)) * mul / 10000));//单位:万平方米 + } + } + } + + if (source1 != null) { + for (int i = 0; i < source1.size(); i++) { + List row36 = source1.get(i); + if (source2 != null && i + 1 > source2.size()) continue; + List row37 = null; + if (source2 != null) { + row37 = source2.get(i); + } + Row outRow = outSheet.createRow(++rowIndex); + String year = row36.getFirst();//年份 + //学前 + String xq_jzg = row36.get(1).split("\\.")[0];//教职工数 + String xq_jzg2022 = source1.getFirst().get(1).split("\\.")[0];//教职工2022基数 + String xq_szqk = String.valueOf((int) (Double.parseDouble(xq_jzg2022) - Double.parseDouble(xq_jzg)));//缺口、富裕 + String xq_ysmj = null;//园舍面积 + if (row37 != null) { + xq_ysmj = row37.get(1); + } + String xq_ysmj2022 = null;//园舍面积2022基数 + if (source2 != null) { + xq_ysmj2022 = source2.getFirst().get(1); + } + String xq_ysmjqk = String.format("%.2f", Double.parseDouble(xq_ysmj2022) - Double.parseDouble(xq_ysmj)); + + //小学 + String xx_jzg = row36.get(2).split("\\.")[0];//教职工数 + String xx_jzg2022 = source1.getFirst().get(2).split("\\.")[0];//教职工2022基数 + String xx_szqk = String.valueOf((int) (Double.parseDouble(xx_jzg2022) - Double.parseDouble(xx_jzg)));//缺口、富裕 + if (2 + 1 > row37.size()) continue; + String xx_ysmj = row37.get(2);//园舍面积 + String xx_ysmj2022 = source2.getFirst().get(2);//园舍面积2022基数 + String xx_ysmjqk = String.format("%.2f", Double.parseDouble(xx_ysmj2022) - Double.parseDouble(xx_ysmj)); + + //初中 + String cz_jzg = row36.get(3).split("\\.")[0];//教职工数 + String cz_jzg2022 = source1.getFirst().get(3).split("\\.")[0];//教职工2022基数 + String cz_szqk = String.valueOf((int) (Double.parseDouble(cz_jzg2022) - Double.parseDouble(cz_jzg)));//缺口、富裕 + String cz_ysmj = row37.get(3);//园舍面积 + String cz_ysmj2022 = source2.getFirst().get(3);//园舍面积2022基数 + String cz_ysmjqk = String.format("%.2f", Double.parseDouble(cz_ysmj2022) - Double.parseDouble(cz_ysmj)); + + //高中 + String gz_jzg = "0"; + String gz_jzg2022 = "0"; + String gz_szqk = "0"; + String gz_ysmj = "0"; + String gz_ysmj2022 = "0"; + String gz_ysmjqk = "0"; + try { + gz_jzg = row36.get(4).split("\\.")[0];//教职工数 + gz_jzg2022 = source1.getFirst().get(4).split("\\.")[0];//教职工2022基数 + gz_szqk = String.valueOf((int) (Double.parseDouble(gz_jzg2022) - Double.parseDouble(gz_jzg)));//缺口、富裕 + gz_ysmj = row37.get(4);//园舍面积 + gz_ysmj2022 = source2.getFirst().get(4);//园舍面积2022基数 + gz_ysmjqk = String.format("%.2f", Double.parseDouble(gz_ysmj2022) - Double.parseDouble(gz_ysmj)); + } catch (Exception err) { + } + + DsKit.putData(outRow, Arrays.asList(year, areaName, + xq_jzg, xq_jzg2022, xq_szqk, String.format("%.2f", Double.parseDouble(xq_ysmj)), String.format("%.2f", Double.parseDouble(xq_ysmj2022)), xq_ysmjqk, // 学前 + xx_jzg, xx_jzg2022, xx_szqk, String.format("%.2f", Double.parseDouble(xx_ysmj)), String.format("%.2f", Double.parseDouble(xx_ysmj2022)), xx_ysmjqk, // 小学 + cz_jzg, cz_jzg2022, cz_szqk, String.format("%.2f", Double.parseDouble(cz_ysmj)), String.format("%.2f", Double.parseDouble(cz_ysmj2022)), cz_ysmjqk, // 初中 + gz_jzg, gz_jzg2022, gz_szqk, String.format("%.2f", Double.parseDouble(gz_ysmj)), String.format("%.2f", Double.parseDouble(gz_ysmj2022)), gz_ysmjqk, // 高中 + cityName), dataStyle); + } + } + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A13.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A13.java new file mode 100644 index 00000000..55e97c50 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A13.java @@ -0,0 +1,278 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.alibaba.dashscope.aigc.generation.Generation; +import com.alibaba.dashscope.aigc.generation.GenerationResult; +import com.alibaba.dashscope.aigc.generation.models.QwenParam; +import com.alibaba.dashscope.common.Message; +import com.alibaba.dashscope.common.Role; +import com.alibaba.dashscope.exception.ApiException; +import com.alibaba.dashscope.exception.InputRequiredException; +import com.alibaba.dashscope.exception.NoApiKeyException; +import com.alibaba.dashscope.utils.Constants; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFParagraph; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.Element; +import org.dom4j.io.SAXReader; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static com.dsideal.base.Tools.FillData.DataEaseKit.DsKit.DocxUnzipDirectory; + +public class A13 { + //只输出四和五 + static String[] printDx = {"一", "二", "三", "四", "五", "六", "七", "八", "九", "十"}; + //转为 List + static List printDxList = Arrays.asList(printDx); + //哪些是处理不了的,就不处理了~ + static String[] excludeCityList = {"~$", "磨憨-磨丁", "经开区", "阳宗海"}; + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【13】教育特征决策建议\\【云南省】教育特征-决策建议.xlsx"; + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + + /** + * 提取Word文档中的目录信息 + * + * @param wordPath + * @throws DocumentException + * @throws IOException + */ + + + static DataEaseModel dm = new DataEaseModel(); + + public static List get(int idx) throws DocumentException { + List list = new ArrayList<>(); + //读入XML + String xmlPath = DocxUnzipDirectory + "word\\document.xml"; + SAXReader reader = new SAXReader(); // 创建 SAXReader 对象,读取 XML 文件 + Document document = reader.read(new File(xmlPath)); + Element root = document.getRootElement();// 获取根元素 + List children = root.element("body").elements("p");//工作区 + boolean out = false; + int parent = 0; + for (Element child : children) { + if (child.getName().equals("p")) { + List pChildren = child.elements(); + String content = ""; + for (Element pChild : pChildren) { + if (!pChild.getName().equals("pPr")) { + if (pChild.getName().equals("r")) { + for (Element t : pChild.elements("t")) { + content = content + t.getText(); + } + } + } + } + if (!StrKit.isBlank(content)) { + //如果content是 "图"+数字形式的,不输出 + if (!content.contains("(图") && !content.contains("(图")) { + //如果文字不是以上面printDx中的某一个开头,而且不是以数字+.开头,不输出 + if (content.startsWith("(") && printDxList.contains(String.valueOf(content.charAt(1)))) { + out = true; + } + //太长的不要 + if (content.length() > 40) continue; + if (printDxList.contains(content.substring(0, 1))) { + if (content.charAt(0) == '四' && content.charAt(1) == '、') { + parent = 4; + } + if (content.charAt(0) == '五' && content.charAt(1) == '、') { + parent = 5; + } + out = true; + } + if (out && parent > 0) { + if (!content.startsWith("(")) continue; + if (parent == idx) { + String c = killKuoHao(content.split("。")[0]); + list.add("• " + c); + } + out = false; + } + } + } + } + } + return list; + } + + /** + * 调用通义千问 + * + * @param question + * @return + * @throws NoApiKeyException + * @throws ApiException + * @throws InputRequiredException + */ + public static String callTongYiQianWen(String question) + throws NoApiKeyException, ApiException, InputRequiredException { + //使用驿来特的api key + Constants.apiKey = "sk-f6da0c787eff4b0389e4ad03a35a911f"; + Generation gen = new Generation(); + Message userMsg = Message.builder().role(Role.USER.getValue()).content(question).build(); + QwenParam param = + QwenParam.builder().model("qwen-long").messages(Arrays.asList(userMsg)) + .resultFormat(QwenParam.ResultFormat.MESSAGE).topP(0.8).build(); + GenerationResult result = gen.call(param); + return result.getOutput().getChoices().getFirst().getMessage().getContent(); + } + + public static String rs(String s) { + //如果s中以 形如 (一) (二)或者 (三) (四)这样的内容替换为空,其它的内容保留下来 + String regex = "(\\([一二三四五六七八九十]+\\))|(\\([一二三四五六七八九十]+\\))"; + return s.replaceAll(regex, ""); + + } + + public static String get2012Summary(String filePath) { + try (FileInputStream fis = new FileInputStream(filePath); + XWPFDocument document = new XWPFDocument(fis)) { + + List paragraphs = document.getParagraphs(); + for (XWPFParagraph paragraph : paragraphs) { + String text = paragraph.getText(); + if (text != null && text.trim().startsWith("2012")) { + return text.trim(); + } + } + return null; + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + public static String killKuoHao(String originalString) { + // 正则表达式匹配中文括号、英文圆括号、方括号和花括号内的内容 + String regex = "([^)]*)|\\([^\\)]*\\)|【[^】]*】|\\{[^}]*\\}"; + // 替换掉匹配的内容 + return originalString.replaceAll(regex, ""); + } + + public static void main(String[] args) throws IOException, DocumentException, NoApiKeyException, InputRequiredException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + String fileName = file.getName(); + //判断是否为docx文件 + if (fileName.endsWith(".docx") && !fileName.startsWith("~")) { + boolean flag = false; + for (String s : excludeCityList) { + if (file.getName().contains(s)) { + flag = true; + break; + } + } + if (flag) continue; + //县区名称 + String areaName = dm.getAreaName(file.getName()); + //市州名称 + String cityName = dm.getCityNameByAreaName(areaName); + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + continue; + } + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + DsKit.unCompress(file.getAbsolutePath()); + + List list4 = get(4); + try { + //截取 小学 初中 高中 后面的文字,看看是不是一样的 + String prefix = list4.get(1).split("小学")[0]; + String xx = list4.get(1).split("小学")[1]; + String cz = list4.get(2).split("初中")[1]; + String gz = list4.get(3).split("高中")[1]; + //三个全相同,需要三个合并 + if (xx.equals(cz) && xx.equals(gz)) { + for (int i = 1; i <= 3; i++) list4.removeLast(); + list4.add(prefix + "小学、初中、高中" + xx); + } + //如果小学和初中一样 + else if (xx.equals(cz)) { + for (int i = 1; i <= 3; i++) list4.removeLast(); + list4.add(prefix + "小学、初中" + xx); + list4.add(prefix + "高中" + gz); + } else if (cz.equals(gz)) { + for (int i = 1; i <= 3; i++) list4.removeLast(); + list4.add(prefix + "小学" + xx); + list4.add(prefix + "初中、高中" + gz); + } + } catch (Exception err) { + } + + List list5 = get(5); + list4.addAll(list5); + while (list4.size() < 7) list4.add(""); + + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(areaName, "教育特征", "", + rs(list4.getFirst()), + rs(list4.get(1)), + rs(list4.get(2)), + rs(list4.get(3)), + rs(list4.get(4)), + rs(list4.get(5)), + rs(list4.get(6)), + cityName), dataStyle); + + +// outRow = outSheet.createRow(++rowIndex); +// DsKit.putData(outRow, Arrays.asList(areaName, "决策建议", +// rs(list5.getFirst()), +// rs(list5.get(1)), +// rs(list5.get(2)), +// rs(list5.get(3)), +// rs(list5.get(4)), +// rs(list5.get(5)), +// rs(list5.get(6)), +// rs(list5.get(7)), +// cityName), dataStyle); + } + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} \ No newline at end of file diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A14.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A14.java new file mode 100644 index 00000000..e12d87b2 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A14.java @@ -0,0 +1,171 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import com.alibaba.dashscope.exception.InputRequiredException; +import com.alibaba.dashscope.exception.NoApiKeyException; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.jfinal.kit.StrKit; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class A14 { + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【14】基本县情\\2023年基本县情【成果】.xlsx"; + + public static String getHTML(String url) throws IOException { + StringBuilder stringBuilder = new StringBuilder(); + URL website = new URL(url); + HttpURLConnection connection = (HttpURLConnection) website.openConnection(); + connection.setRequestMethod("GET"); + BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String line; + while ((line = reader.readLine()) != null) { + stringBuilder.append(line); + } + reader.close(); + return stringBuilder.toString(); + } + + /** + * 按县区名称获取面积和镇乡信息 + * + * @param areaName + * @return + * @throws IOException + */ + public static List getXq(String areaName) throws IOException { + List list = new ArrayList<>(); + String url = "https://baike.baidu.com/item/" + areaName + "?fromModule=lemma_search-box"; + String htmlContent = getHTML(url); + //System.out.println(htmlContent); + // 从字符串解析HTML + Document doc = Jsoup.parse(htmlContent); + Elements dts = doc.select("dt"); + // 遍历所有dt标签 + for (Element dt : dts) { + if (dt.text().equals("下辖地区")) { + // 使用正则表达式替换掉以[]包含的部分 + String output = dt.nextElementSibling().text().replaceAll("\\[.*?\\]", ""); + output = output.trim(); + list.add(output); + } + if (dt.text().replace(" ", "").equals("面积")) { + String output = dt.nextElementSibling().text().replaceAll("\\[.*?\\]", ""); + output = output.replace("km²", ""); + output = output.trim(); + list.add(output); + } + } + return list; + } + + public static List extractTownAndVillage(String input) { + List counts = new ArrayList<>(); + Pattern pattern = Pattern.compile("(\\d+)个镇|(\\d+)镇|(\\d+)个乡|(\\d+)乡"); + Matcher matcher = pattern.matcher(input); + + int townCount = 0; + int villageCount = 0; + + while (matcher.find()) { + if (matcher.group(1) != null || matcher.group(2) != null) { + townCount = Integer.parseInt(matcher.group(0).replace("镇", "").replace("乡", "").replace("个", "")); + } + if (matcher.group(3) != null || matcher.group(4) != null) { + villageCount = Integer.parseInt(matcher.group(0).replace("镇", "").replace("乡", "").replace("个", "")); + } + } + + counts.add(townCount); + counts.add(villageCount); + return counts; + } + + /** + * 统计字符串中特定汉字出现的次数 + * + * @param input 要统计的字符串 + * @param character 要统计的汉字 + * @return 汉字出现的次数 + */ + public static int countChineseCharacter(String input, String character) { + if (input == null || character == null || character.length() != 1) { + return 0; + } + int count = 0; + for (int i = 0; i < input.length(); i++) { + if (input.charAt(i) == character.charAt(0)) { + count++; + } + } + return count; + } + + public static void main(String[] args) throws NoApiKeyException, InputRequiredException, IOException, InterruptedException { + FileInputStream inputStream = new FileInputStream(sampleExcelPath); + FileOutputStream outputStream; + + Workbook workbook = new XSSFWorkbook(inputStream); // 打开工作簿 + Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表 + + // 读取数据 + int idx = 0; + for (Row row : sheet) { + idx++; + if (idx == 1) continue; + String cityName = DsKit.readCell(row.getCell(0)).replace(" ", ""); + String areaName = DsKit.readCell(row.getCell(1)).replace(" ", ""); + if (!StrKit.isBlank(areaName)) { + System.out.println("正在查询县区:" + cityName + "\t" + areaName); + List list = getXq(areaName); + Thread.sleep(2000); + if (!list.isEmpty()) { + Cell cell2 = row.getCell(2); + if (cell2 == null) cell2 = row.createCell(2); + cell2.setCellValue(list.getFirst()); + } + if (list.size() > 1) { + List result = extractTownAndVillage(list.get(1)); + int zhenCount = result.get(0); + int xiangCount = result.get(1); + //如果zhenCount==0,那么我就用list.get(1)中去查找 镇 这个字的数量,然后用这个数量作为镇的数量 + if (zhenCount == 0 && xiangCount == 0) { + zhenCount = countChineseCharacter(list.get(1), "镇"); + xiangCount = countChineseCharacter(list.get(1), "乡"); + } + System.out.println("镇数量=" + zhenCount + ",乡数量=" + xiangCount); + if (zhenCount == 0 && xiangCount == 0) { + System.out.println("没有找到镇或乡的数量,请手动输入!"); + System.out.println(list.get(1)); + } + Cell cell3 = row.getCell(3); + if (cell3 == null) cell3 = row.createCell(3); + cell3.setCellValue(zhenCount); + + Cell cell4 = row.getCell(4); + if (cell4 == null) cell4 = row.createCell(4); + cell4.setCellValue(xiangCount); + } + } + } + outputStream = new FileOutputStream(sampleExcelPath); + workbook.write(outputStream); // 将修改后的工作簿写入文件 + inputStream.close(); + outputStream.close(); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A15.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A15.java new file mode 100644 index 00000000..af6afdc3 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A15.java @@ -0,0 +1,186 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.alibaba.dashscope.exception.InputRequiredException; +import com.alibaba.dashscope.exception.NoApiKeyException; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFParagraph; +import org.apache.poi.xwpf.usermodel.XWPFRun; +import org.dom4j.DocumentException; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class A15 { + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【15】发展规模预测\\教育规模发展情况与预测.xlsx"; + + + public static String removeEmptyLines(String text) { + // 使用正则表达式分割字符串,然后过滤掉空行 + return text.replace("\n\n", "\n"); + } + + /** + * 获取指定文档中的四个阶段的教育发展现状 + * + * @param filePath + * @return + * @throws IOException + */ + public static List getDocxJYFZXZ(String filePath) throws IOException { + //使用POI读取上面word文档的所有文字信息 + String content = ""; + InputStream inputStream = new FileInputStream(filePath); + XWPFDocument document = new XWPFDocument(inputStream); + List paragraphs = document.getParagraphs(); + + String[] a = {"入园", "在园", "小学招生", "小学在校生", "初中招生", "初中在校生", "高中招生", "高中在校生"}; + //接下我将遍历 word文档 中的每一段文字,如果遍历到的文字中包含上面数组的某一个字符串,开始截取此学段的文字 + for (XWPFParagraph paragraph : paragraphs) { + List runs = paragraph.getRuns(); + for (XWPFRun run : runs) { + String text = run.getText(0); + if (text != null) { + content += text + "\n"; + } + } + } + List posList = new ArrayList<>(); + for (String s : a) { + int pos = content.indexOf(s); +// if (pos < 0) { +// System.out.println(s + "在给定的文本中没有找到,程序无法继续,请人工检查!"); +// return null; +// } + posList.add(pos); + } + List res = new ArrayList<>(); + for (int i = 0; i < posList.size() - 1; i++) { + int start = posList.get(i); + + if (start >= 0) { + int end = start + 1; + //从start开始向后查找,直到遇到换行符为止 + while (end < content.length() && content.charAt(end) != '图' + && content.charAt(end) != '。') { + end++; + } + String q = content.substring(start, end); + if (q.endsWith("呈现")) q += "稳步上升变化"; + else if (q.endsWith("初中在校生数变化")) q += "相对平稳"; + else if (q.endsWith("高中招生数")) q += "变化相对平稳"; + else if (q.endsWith("小学在校生规模")) q += "相对平稳"; + else if (q.endsWith("初中招生规模")) q += "相对平稳"; + else if (q.endsWith("初中在校生规")) q += "模相对平稳"; + else if (q.endsWith("高中招生规模")) q += "相对平稳"; + else if (q.endsWith("高中招生数变化")) q += "相对平稳"; + res.add(q); + } else { + res.add(""); + } + } + return res; + } + + public static void main(String[] args) throws IOException, DocumentException, NoApiKeyException, InputRequiredException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".docx") || file.getName().startsWith("~")) + continue; + + //县区名称 + //县区名称 + String areaName = "阳宗海"; + if (file.getName().contains("磨憨")) { + areaName = "磨憨-磨丁合作区"; + } else if (file.getName().contains("经开")) { + areaName = "经开区"; + } + //市州名称 + String cityName = "昆明市"; + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + continue; + } + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + //获取教育发展现状态 + List list = getDocxJYFZXZ(file.getAbsolutePath()); + //如果长度不足8个,需要补全8个 + if (list.size() < 8) { + for (int i = list.size(); i < 8; i++) { + list.add("高中在校生数变化相对平稳。"); + } + } + + Row outRow = outSheet.createRow(++rowIndex); + + + DsKit.putData(outRow, Arrays.asList(cityName, areaName, "学前", "入园幼儿", list.get(0), ""), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(cityName, areaName, "学前", "在园幼儿", list.get(1), ""), dataStyle); + + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(cityName, areaName, "小学", "招生总数", list.get(2), ""), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(cityName, areaName, "小学", "在校生总数", list.get(3), ""), dataStyle); + + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(cityName, areaName, "初中", "招生总数", list.get(4), ""), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(cityName, areaName, "初中", "在校生总数", list.get(5), ""), dataStyle); + + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(cityName, areaName, "高中", "招生总数", list.get(6), ""), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(cityName, areaName, "高中", "在校生总数", list.get(7), ""), dataStyle); + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} \ No newline at end of file diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A2.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A2.java new file mode 100644 index 00000000..20aa749d --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A2.java @@ -0,0 +1,188 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A2 { + static DataEaseModel dm = new DataEaseModel(); + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【2】学前幼儿在园总量预测\\学前幼儿在园总量预测.xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + + + //有好多EXCEL,啥样的有用?必须带有关键字字样的才有用! + static String fileNameKey = "发展规模数据"; + + //第二个表格的表头信息 + static String tableKeyword = "自动计算招生数、在校生数"; + //第二个表格的表头有几行 + static int tableHeadRows = 2; + //第二个表格的最后一列的列名 + static String tableLetterIndex = "K"; + + public static void main(String[] args) throws IOException, InvalidFormatException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //实例化 + + + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".xlsx") && !file.getName().endsWith(".xls")) + continue; + + //只关心发展规模数据的表格 + if (!file.getName().contains(fileNameKey)) continue; + //县区名称 + String areaName = "阳宗海"; + if (file.getName().contains("磨憨")) { + areaName = "磨憨-磨丁合作区"; + } else if (file.getName().contains("经开")) { + areaName = "经开区"; + } + //市州名称 + String cityName = "昆明市"; + + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + String sourceExcel = file.getAbsolutePath(); + List> dataList = DsKit.readSecondTable(sourceExcel, 0, tableKeyword, + tableHeadRows, tableLetterIndex); + + //这个工作表有四个蓝色列:D:预测总招生数,E:修正城区招生A,F:修正镇区招生B,G:修正乡村招生C + //有时,有也三个蓝色列:D:预测总招生数,E:修正县城内招生,G:修正县城外招生 + //处理办法:先判断是4个的还是3个的,如果是3个的,就把修正县城外招生拆分开两项,第一项=修正县城外招生*30%,第二项=修正县城外招生- 第一项 + //至于是4个还是3个的,可以通过获取第二个table的列宽来获取,4列的时候,整个表的列数应该是11列,3列的时候,整个表的列数应该是9列 + //取出第一行 + if (dataList.isEmpty()) continue; + List x = dataList.getFirst(); + int cnt = 0; + for (String s : x) if (s == null) cnt++; + int colsCount = x.size() - cnt; + + //在园总数 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //H预测总在校生数 + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("H")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("G")).split("\\.")[0]); + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "总在园数", "", String.valueOf(v), "", areaName, cityName), dataStyle); + } + + //2022入园基数 + for (List ignored : dataList) { + //年份 + int year = 2022; + //H预测总招生数 + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(dataList.getFirst().get(DsKit.transLetter2Num("H")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(dataList.getFirst().get(DsKit.transLetter2Num("G")).split("\\.")[0]); + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "2022年基数(人)", "", String.valueOf(v), "", areaName, cityName), dataStyle); + } + + //城区 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //I:修正城区招生A 修正县城内招生 + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("I")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("H")).split("\\.")[0]); + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), + "", "城区", "", String.valueOf(v), areaName, cityName), dataStyle); + } + + //预测镇区在校生数 修正县城外在校生数*30% + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("J")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("I")).split("\\.")[0]); + v = (int) (v * 0.3);//乘以0.3 + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "", "镇区", "", String.valueOf(v), areaName, cityName), dataStyle); + } + + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("K")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("I")).split("\\.")[0]); + int d = (int) (v * 0.3);//乘以0.3 + v = v - d;//剩下70% + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "", "乡村", "", String.valueOf(v), areaName, cityName), dataStyle); + } + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A3.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A3.java new file mode 100644 index 00000000..ffc8a40d --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A3.java @@ -0,0 +1,190 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A3 { + static DataEaseModel dm = new DataEaseModel(); + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【3】义务教育招生总量预测\\义务教育招生总量预测.xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + + + //有好多EXCEL,啥样的有用?必须带有关键字字样的才有用! + static String fileNameKey = "发展规模数据"; + + //第二个表格的表头信息 + static String tableKeyword = "自动计算招生数、在校生数"; + //第二个表格的表头有几行 + static int tableHeadRows = 2; + //第二个表格的最后一列的列名 + static String tableLetterIndex = "K"; + + public static void main(String[] args) throws IOException, InvalidFormatException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //实例化 + + + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".xlsx") && !file.getName().endsWith(".xls")) + continue; + + //只关心发展规模数据的表格 + if (!file.getName().contains(fileNameKey)) continue; + //县区名称 + String areaName = "阳宗海"; + if (file.getName().contains("磨憨")) { + areaName = "磨憨-磨丁合作区"; + } else if (file.getName().contains("经开")) { + areaName = "经开区"; + } + //市州名称 + String cityName = "昆明市"; + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + String sourceExcel = file.getAbsolutePath(); + + String[] stageList = {"小学", "初中"}; + int[] sheetIndexList = {1, 2}; + + for (int K = 0; K < 2; K++) { + int sheetIndex = sheetIndexList[K]; + String stageName = stageList[K]; + + List> dataList = DsKit.readSecondTable(sourceExcel, sheetIndex, tableKeyword, + tableHeadRows, tableLetterIndex); + //取出第一行 + if (dataList.isEmpty()) continue; + List x = dataList.getFirst(); + int cnt = 0; + for (String s : x) if (s == null) cnt++; + int colsCount = x.size() - cnt; + + //义务教育招生数量 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("D")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("D")).split("\\.")[0]); + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "", "总招生数", stageName, "", String.valueOf(v), areaName, cityName), dataStyle); + } + + //2022入园基数 + for (List ignored : dataList) { + //年份 + int year = 2022; + //H预测总招生数 + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(dataList.getFirst().get(DsKit.transLetter2Num("D")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(dataList.getFirst().get(DsKit.transLetter2Num("D")).split("\\.")[0]); + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "", "2022年基数(人)", stageName, "", String.valueOf(v), areaName, cityName), dataStyle); + } + + //城区 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //I:修正城区招生A 修正县城内招生 + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("E")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("E")).split("\\.")[0]); + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), + "城区", "", stageName, String.valueOf(v), "", areaName, cityName), dataStyle); + } + + //预测镇区在校生数 修正县城外在校生数*30% + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("F")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("F")).split("\\.")[0]); + v = (int) (v * 0.3);//乘以0.3 + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "镇区", "", stageName, String.valueOf(v), "", areaName, cityName), dataStyle); + } + + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("G")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("F")).split("\\.")[0]); + int d = (int) (v * 0.3);//乘以0.3 + v = v - d;//剩下70% + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "乡村", "", stageName, String.valueOf(v), "", areaName, cityName), dataStyle); + } + } + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A4.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A4.java new file mode 100644 index 00000000..f5c9aa81 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A4.java @@ -0,0 +1,190 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A4 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【4】义务教育在校生总量预测\\义务教育在校生总量预测.xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + + //有好多EXCEL,啥样的有用?必须带有关键字字样的才有用! + static String fileNameKey = "发展规模数据"; + + //第二个表格的表头信息 + static String tableKeyword = "自动计算招生数、在校生数"; + //第二个表格的表头有几行 + static int tableHeadRows = 2; + //第二个表格的最后一列的列名 + static String tableLetterIndex = "K"; + + public static void main(String[] args) throws IOException, InvalidFormatException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //实例化 + + + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".xlsx") && !file.getName().endsWith(".xls")) + continue; + + //只关心发展规模数据的表格 + if (!file.getName().contains(fileNameKey)) continue; + //县区名称 + //县区名称 + String areaName = "阳宗海"; + if (file.getName().contains("磨憨")) { + areaName = "磨憨-磨丁合作区"; + } else if (file.getName().contains("经开")) { + areaName = "经开区"; + } + //市州名称 + String cityName = "昆明市"; + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + + String[] stageList = {"小学", "初中"}; + int[] sheetIndexList = {1, 2}; + for (int K = 0; K < 2; K++) { + int sheetIndex = sheetIndexList[K]; + String stageName = stageList[K]; + String sourceExcel = file.getAbsolutePath(); + List> dataList = DsKit.readSecondTable(sourceExcel, sheetIndex, tableKeyword, + tableHeadRows, tableLetterIndex); + + //取出第一行 + if (dataList.isEmpty()) continue; + List x = dataList.getFirst(); + int cnt = 0; + for (String s : x) if (s == null) cnt++; + int colsCount = x.size() - cnt; + + + //在园总数 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //H预测总在校生数 + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("H")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("G")).split("\\.")[0]); + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "", "总在校生数", stageName, "", String.valueOf(v), areaName, cityName), dataStyle); + } + + //2022入园基数 + for (List ignored : dataList) { + //年份 + int year = 2022; + //H预测总招生数 + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(dataList.getFirst().get(DsKit.transLetter2Num("H")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(dataList.getFirst().get(DsKit.transLetter2Num("G")).split("\\.")[0]); + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "", "2022年基数(人)", stageName, "", String.valueOf(v), areaName, cityName), dataStyle); + } + + //城区 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //I:修正城区招生A 修正县城内招生 + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("I")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("H")).split("\\.")[0]); + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), + "城区", "", stageName, String.valueOf(v), "", areaName, cityName), dataStyle); + } + + //预测镇区在校生数 修正县城外在校生数*30% + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("J")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("I")).split("\\.")[0]); + v = (int) (v * 0.3);//乘以0.3 + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "镇区", "", stageName, String.valueOf(v), "", areaName, cityName), dataStyle); + } + + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("K")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("I")).split("\\.")[0]); + int d = (int) (v * 0.3);//乘以0.3 + v = v - d;//剩下70% + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "乡村", "", stageName, String.valueOf(v), "", areaName, cityName), dataStyle); + } + } + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A5.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A5.java new file mode 100644 index 00000000..3d946fe7 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A5.java @@ -0,0 +1,172 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A5 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【5】普通高中招生总量预测\\普通高中招生总量预测.xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + + + + //有好多EXCEL,啥样的有用?必须带有关键字字样的才有用! + static String fileNameKey = "发展规模数据"; + + //第二个表格的表头信息 + static String tableKeyword = "自动计算招生数、在校生数"; + //第二个表格的表头有几行 + static int tableHeadRows = 2; + //第二个表格的最后一列的列名 + static String tableLetterIndex = "K"; + + public static void main(String[] args) throws IOException, InvalidFormatException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //实例化 + + + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".xlsx") && !file.getName().endsWith(".xls")) + continue; + + //只关心发展规模数据的表格 + if (!file.getName().contains(fileNameKey)) continue; + //县区名称 + //县区名称 + String areaName = "阳宗海"; + if (file.getName().contains("磨憨")) { + areaName = "磨憨-磨丁合作区"; + } else if (file.getName().contains("经开")) { + areaName = "经开区"; + } + //市州名称 + String cityName = "昆明市"; + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + String sourceExcel = file.getAbsolutePath(); + List> dataList = DsKit.readSecondTable(sourceExcel, 3, tableKeyword, + tableHeadRows, tableLetterIndex); + + //这个工作表有四个蓝色列:D:预测总招生数,E:修正城区招生A,F:修正镇区招生B,G:修正乡村招生C + //有时,有也三个蓝色列:D:预测总招生数,E:修正县城内招生,G:修正县城外招生 + //处理办法:先判断是4个的还是3个的,如果是3个的,就把修正县城外招生拆分开两项,第一项=修正县城外招生*30%,第二项=修正县城外招生- 第一项 + //至于是4个还是3个的,可以通过获取第二个table的列宽来获取,4列的时候,整个表的列数应该是11列,3列的时候,整个表的列数应该是9列 + //取出第一行 + if (dataList.isEmpty()) continue; + List x = dataList.getFirst(); + int cnt = 0; + for (String s : x) if (s == null) cnt++; + int colsCount = x.size() - cnt; + + //入园总数 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //D预测总招生数 + String v = stringList.get(DsKit.transLetter2Num("D")).split("\\.")[0]; + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "总招生数", "", v, "", areaName, cityName), dataStyle); + } + + //2022入园基数 + for (List ignored : dataList) { + //年份 + int year = 2022; + //D预测总招生数 + int v = Integer.parseInt(dataList.getFirst().get(DsKit.transLetter2Num("D")).split("\\.")[0]); + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "2022年基数(人)", "", String.valueOf(v), "", areaName, cityName), dataStyle); + } + + //城区 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //E:修正城区招生A 修正县城内招生 + int v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("E")).split("\\.")[0]); + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), + "", "城区", "", String.valueOf(v), areaName, cityName), dataStyle); + } + + //修正镇区招生B 修正县城外招生*30% + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //F:修正镇区招生B 修正县城内招生 + int v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("F")).split("\\.")[0]); + if (colsCount == 9) { + v = (int) (v * 0.3);//乘以0.3 + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "", "镇区", "", String.valueOf(v), areaName, cityName), dataStyle); + } + + // 修正乡村招生C 修正县城外招生-修正县城外招生*30% + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //G:6修正乡村招生G + int v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("G")).split("\\.")[0]); + if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("F")).split("\\.")[0]); + int d = (int) (v * 0.3);//乘以0.3 + v = v - d;//剩下70% + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "", "乡村", "", String.valueOf(v), areaName, cityName), dataStyle); + } + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A6.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A6.java new file mode 100644 index 00000000..e995f375 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A6.java @@ -0,0 +1,187 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A6 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【6】普通高中在校生总量预测\\普通高中在校生总量预测.xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + + + //有好多EXCEL,啥样的有用?必须带有关键字字样的才有用! + static String fileNameKey = "发展规模数据"; + + //第二个表格的表头信息 + static String tableKeyword = "自动计算招生数、在校生数"; + //第二个表格的表头有几行 + static int tableHeadRows = 2; + //第二个表格的最后一列的列名 + static String tableLetterIndex = "K"; + + public static void main(String[] args) throws IOException, InvalidFormatException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //实例化 + + + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".xlsx") && !file.getName().endsWith(".xls")) + continue; + + //只关心发展规模数据的表格 + if (!file.getName().contains(fileNameKey)) continue; + //县区名称 + String areaName = "阳宗海"; + if (file.getName().contains("磨憨")) { + areaName = "磨憨-磨丁合作区"; + } else if (file.getName().contains("经开")) { + areaName = "经开区"; + } + //市州名称 + String cityName = "昆明市"; + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + String sourceExcel = file.getAbsolutePath(); + List> dataList = DsKit.readSecondTable(sourceExcel, 3, tableKeyword, + tableHeadRows, tableLetterIndex); + + //这个工作表有四个蓝色列:D:预测总招生数,E:修正城区招生A,F:修正镇区招生B,G:修正乡村招生C + //有时,有也三个蓝色列:D:预测总招生数,E:修正县城内招生,G:修正县城外招生 + //处理办法:先判断是4个的还是3个的,如果是3个的,就把修正县城外招生拆分开两项,第一项=修正县城外招生*30%,第二项=修正县城外招生- 第一项 + //至于是4个还是3个的,可以通过获取第二个table的列宽来获取,4列的时候,整个表的列数应该是11列,3列的时候,整个表的列数应该是9列 + //取出第一行 + if (dataList.isEmpty()) continue; + List x = dataList.getFirst(); + int cnt = 0; + for (String s : x) if (s == null) cnt++; + int colsCount = x.size() - cnt; + + //在园总数 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //H预测总在校生数 + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("H")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("G")).split("\\.")[0]); + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "总在校生数", "", String.valueOf(v), "", areaName, cityName), dataStyle); + } + + //2022入园基数 + for (List ignored : dataList) { + //年份 + int year = 2022; + //H预测总招生数 + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(dataList.getFirst().get(DsKit.transLetter2Num("H")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(dataList.getFirst().get(DsKit.transLetter2Num("G")).split("\\.")[0]); + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "2022年基数(人)", "", String.valueOf(v), "", areaName, cityName), dataStyle); + } + + //城区 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //I:修正城区招生A 修正县城内招生 + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("I")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("H")).split("\\.")[0]); + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), + "", "城区", "", String.valueOf(v), areaName, cityName), dataStyle); + } + + //预测镇区在校生数 修正县城外在校生数*30% + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("J")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("I")).split("\\.")[0]); + v = (int) (v * 0.3);//乘以0.3 + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "", "镇区", "", String.valueOf(v), areaName, cityName), dataStyle); + } + + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + int v = 0; + if (colsCount == 11) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("K")).split("\\.")[0]); + } else if (colsCount == 9) { + v = Integer.parseInt(stringList.get(DsKit.transLetter2Num("I")).split("\\.")[0]); + int d = (int) (v * 0.3);//乘以0.3 + v = v - d;//剩下70% + } + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(String.valueOf(year), "", "乡村", "", String.valueOf(v), areaName, cityName), dataStyle); + } + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A7.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A7.java new file mode 100644 index 00000000..d748926f --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A7.java @@ -0,0 +1,125 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A7 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【7】终-人口总体情况\\终-人口总体情况(万人).xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + + + //有好多EXCEL,啥样的有用?必须带有关键字字样的才有用! + + //第二个表格的表头信息 + static String tableKeyword = "自动计算人口数"; + //第二个表格的表头有几行 + static int tableHeadRows = 2; + //第二个表格的最后一列的列名 + static String tableLetterIndex = "D"; + + public static void main(String[] args) throws IOException, InvalidFormatException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + + int idx = 0; + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".xlsx") && !file.getName().endsWith(".xls")) + continue; + + //县区名称 + //县区名称 + String areaName = "阳宗海"; + if (file.getName().contains("磨憨")) { + areaName = "磨憨-磨丁合作区"; + } else if (file.getName().contains("经开")) { + areaName = "经开区"; + } + //市州名称 + String cityName = "昆明市"; + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + + //县区名称 + idx++; + System.out.println("第" + idx + "个,正在进行" + cityName + "-" + areaName + "的数据填充~"); + String sourceExcel = file.getAbsolutePath(); + + List> dataList = DsKit.readSecondTable(sourceExcel, 0, tableKeyword, + tableHeadRows, tableLetterIndex); + + //取出第一行 + if (dataList.isEmpty()) { + System.out.println(areaName + ":该县区没有数据,请检查!"); + System.exit(-1); + } + + List stringList = dataList.get(1); + //总人口 + String zrk = stringList.get(DsKit.transLetter2Num("B")).split("\\.")[0]; + //城镇人口 + String cz = stringList.get(DsKit.transLetter2Num("C")).split("\\.")[0]; + //乡村人口 + String xc = stringList.get(DsKit.transLetter2Num("D")).split("\\.")[0]; + + Row outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(areaName, "总人口", String.format("%.2f", 1.0 * Integer.parseInt(zrk) / 10000), "万人", cityName), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(areaName, "新生人口", "0", "万人", cityName), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(areaName, "城镇人口", String.format("%.2f", 1.0 * Integer.parseInt(cz) / 10000), "万人", cityName), dataStyle); + outRow = outSheet.createRow(++rowIndex); + DsKit.putData(outRow, Arrays.asList(areaName, "乡村人口", String.format("%.2f", 1.0 * Integer.parseInt(xc) / 10000), "万人", cityName), dataStyle); + outRow = outSheet.createRow(++rowIndex); + //保留两位小数 + DsKit.putData(outRow, Arrays.asList(areaName, "城镇化率", + String.format("%.2f", Double.parseDouble(cz) / Double.parseDouble(zrk) * 100) + "%", "", cityName), dataStyle); + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A8.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A8.java new file mode 100644 index 00000000..a332e6be --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A8.java @@ -0,0 +1,117 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.dom4j.DocumentException; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A8 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【8】总人口变化及预测-双\\总人口变化及预测-双-(万人).xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + + + public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException, DocumentException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".docx") || file.getName().startsWith("~")) + continue; + + //县区名称 + //县区名称 + String areaName = "阳宗海"; + if (file.getName().contains("磨憨")) { + areaName = "磨憨-磨丁合作区"; + } else if (file.getName().contains("经开")) { + areaName = "经开区"; + } + //市州名称 + String cityName = "昆明市"; + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + int chartNumber = 1; + + List> source = + DsKit.getChartData(file.getAbsolutePath(), chartNumber, 0); + + //需要处理下人与万人的单位兼容 + int mul; + if (source != null) { + //本例中要乘以多少呢? + String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml"; + mul = DsKit.getMul(xmlPath); + + + for (List row : source) { + String year = row.getFirst().split("\\.")[0]; + year = year.replace("年", ""); + + String q = row.get(1); + if (StrKit.isBlank(q)) { + q = "0"; + } + double x = Double.parseDouble(q) * mul; + String v = String.format("%.2f", (x > 1000 ? x / 10000 : x));//如果数值大于1000,则计算以万为单位,否则就保留原来的数字 + + Row outRow = outSheet.createRow(++rowIndex); + if (Integer.parseInt(year) < 2023) { + DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, v, ""), dataStyle); + } else if (Integer.parseInt(year) > 2023) { + DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, "", v), dataStyle); + } else { + DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, v, v), dataStyle); + } + } + } + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A9.java b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A9.java new file mode 100644 index 00000000..a5d609fd --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/KaiFaArea/A9.java @@ -0,0 +1,154 @@ +package com.dsideal.base.Tools.FillData.KaiFaArea; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.dom4j.DocumentException; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A9 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【9】城镇&乡村人口变化及预测-双\\城镇&乡村人口变化及预测-双.xlsx"; + + //源文件 + + static String parentPath = "D:\\dsWork\\YunNanDsBase\\缺失的三个开发区"; + + + public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException, DocumentException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".docx") || file.getName().startsWith("~")) + continue; + + String areaName = "阳宗海"; + if (file.getName().contains("磨憨")) { + areaName = "磨憨-磨丁合作区"; + } else if (file.getName().contains("经开")) { + areaName = "经开区"; + } + //市州名称 + String cityName = "昆明市"; + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + int chartNumber = 2; + List> source1 = + DsKit.getChartData(file.getAbsolutePath(), chartNumber, 0); + + + //需要处理下人与万人的单位兼容 + int mul = 1; + if (source1 != null) { + //本例中要乘以多少呢? + String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml"; + mul = DsKit.getMul(xmlPath); + + for (List row : source1) { + String year = row.getFirst().split("\\.")[0]; + year = year.replace("年", ""); + Row outRow = outSheet.createRow(++rowIndex); + String q1 = row.get(1); + if (StrKit.isBlank(q1)) { + q1 = "0"; + } + + double x = Double.parseDouble(q1) * mul; + String v1 = String.format("%.2f", (x > 1000 ? x / 10000 : x)); + + String q2 = "0"; + try { + q2 = row.get(2); + if (StrKit.isBlank(q2)) { + q2 = "0"; + } + } catch (Exception err) { + } + + x = Double.parseDouble(q2) * mul; + String v2 = String.format("%.2f", (x > 1000 ? x / 10000 : x)); + DsKit.putData(outRow, Arrays.asList(cityName, areaName, year.replace("年份", "").replace("年", ""), v1, "", v2, ""), dataStyle); + } + } + + chartNumber = 3; + List> source2 = + DsKit.getChartData(file.getAbsolutePath(), chartNumber, 1); + if (source2 != null) { + //本例中要乘以多少呢? + String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml"; + mul = DsKit.getMul(xmlPath); + + for (List row : source2) { + String year = row.getFirst().split("\\.")[0]; + year = year.replace("年", ""); + Row outRow = outSheet.createRow(++rowIndex); + String q1 = row.get(1); + if (StrKit.isBlank(q1)) { + q1 = "0"; + } + String v1 = String.format("%.2f", Double.parseDouble(q1) * mul / 10000); + + String q2 = "0"; + try { + q2 = row.get(2); + if (StrKit.isBlank(q2)) { + q2 = "0"; + } + } catch (Exception err) { + } + + double x = Double.parseDouble(q2) * mul; + String v2 = String.format("%.2f", (x > 1000 ? x / 10000 : x)); + DsKit.putData(outRow, Arrays.asList(cityName, areaName, year.replace("年份", "").replace("年", ""), "", v1, "", v2), dataStyle); + } + } + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/Test/ChangeDataEaseCity.java b/src/main/java/com/dsideal/base/Tools/Test/ChangeDataEaseCity.java index feafdba5..5383c670 100644 --- a/src/main/java/com/dsideal/base/Tools/Test/ChangeDataEaseCity.java +++ b/src/main/java/com/dsideal/base/Tools/Test/ChangeDataEaseCity.java @@ -31,10 +31,10 @@ public class ChangeDataEaseCity { arpDataEase.start(); //要修改的大屏中文名称 - String dataVisualizationName = "黄海测试的市州地图"; + String dataVisualizationNameCity = "黄海测试的市州地图"; String cityName = "昭通市"; DataEaseModel dm = new DataEaseModel(); - dm.updateCityArea(dataVisualizationName, cityName); + dm.updateCityArea(dataVisualizationNameCity, cityName); /* 要修改的市州名称,需要用全称 156530100 昆明市 diff --git a/src/main/java/com/dsideal/base/Util/CommonUtil.java b/src/main/java/com/dsideal/base/Util/CommonUtil.java index 029358c0..c7bd66b9 100644 --- a/src/main/java/com/dsideal/base/Util/CommonUtil.java +++ b/src/main/java/com/dsideal/base/Util/CommonUtil.java @@ -1,6 +1,8 @@ package com.dsideal.base.Util; import cn.hutool.core.io.IoUtil; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.dsideal.base.BaseApplication; @@ -495,4 +497,35 @@ public class CommonUtil { String base64Rule = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$"; return Pattern.matches(base64Rule, str); } + + + /** + * 利用雪花算法获取唯一ID + * + * @return + */ + public static long getSnowId() { + Snowflake snowflake = IdUtil.createSnowflake(1, 1); + return snowflake.nextId(); + } + + /** + * 生成随机字符串 + * + * @param len + * @return + */ + public static String randomString(int len) { + String alphabetsInUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + String alphabetsInLowerCase = "abcdefghijklmnopqrstuvwxyz"; + String numbers = "0123456789"; + String allCharacters = alphabetsInLowerCase + alphabetsInUpperCase + numbers; + StringBuilder randomString = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < len; i++) { + int randomIndex = random.nextInt(allCharacters.length()); + randomString.append(allCharacters.charAt(randomIndex)); + } + return randomString.toString(); + } } diff --git a/src/main/resources/Data/DataEaseLogin.json b/src/main/resources/Data/DataEaseLogin.json new file mode 100644 index 00000000..da5a2dc6 --- /dev/null +++ b/src/main/resources/Data/DataEaseLogin.json @@ -0,0 +1,4 @@ +{ + "name": "XkdqNzblA7zA9bmvcDs1lR4Dg2/bVaPnYN0+7y/VfyR2XoJ/Miu9gqKa5kVQe/reZyyAgUKqgD1AJwEKsvXC9fyeccIcAWqUwg6gKNoY7Wu4iZM6cJ6ri3CLhqtOGlHRLrn105btKxSrt/nM71pEy8a8lYbCBZRGqHnBDU1/JAs=", + "pwd": "a/w4bFGfyY2BqZ6xEM5cj6ChOxC7ves8sJM0wUAKnBtqdIYHwxMLBDWKgmua0EMH7EvRy5S6yirz3VZI+fpGQAZF8jX+7evIZxdQq2jJU7r5EJPY5L+AA/a3zbuOvoOEtOdh5Y9nNdI1jSEzqH4m9IP/ADRFhF1xEfmemQKmU08=" +} \ No newline at end of file diff --git a/src/main/resources/Data/filter.json b/src/main/resources/Data/filter.json new file mode 100644 index 00000000..0d9b2cea --- /dev/null +++ b/src/main/resources/Data/filter.json @@ -0,0 +1,25 @@ +{ + "logic": "and", + "items": [ + { + "type": "item", + "fieldId": "1728893495030", + "field": null, + "filterType": "logic", + "term": "eq", + "value": "昆明市", + "enumValue": [], + "filterTypeTime": "dateValue", + "dynamicTimeSetting": { + "relativeToCurrent": null, + "timeGranularity": null, + "timeNum": null, + "relativeToCurrentType": null, + "around": null, + "arbitraryTime": null + }, + "subTree": null, + "valueType": null + } + ] +} \ No newline at end of file diff --git a/src/main/resources/Sql/dataease.sql b/src/main/resources/Sql/dataease.sql index fe56886f..a4f702ed 100644 --- a/src/main/resources/Sql/dataease.sql +++ b/src/main/resources/Sql/dataease.sql @@ -33,4 +33,14 @@ where t1.province_id='FD61813E-70A1-42AB-9A8E-141ED4D47B98' and t1.level_id=5 order by t1.city_id #end + + #sql("queryChartViewFilterFieldId") + select * from ( + select t1.id,t1.title,t1.table_id,t1.custom_filter, + (select t2.id from core_dataset_table_field as t2 + where t2.dataset_table_id =(select t3.id from core_dataset_table as t3 where t3.dataset_group_id=t1.table_id) and t2.origin_name='行政区划') as table_field_id + from core_chart_view as t1 where t1.scene_id=#para(scene_id) and t1.table_id>0 + and t1.type not like '%map%' + ) as tt where table_field_id is not null ; + #end #end \ No newline at end of file diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 139a58f4..7eb6f695 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -24,14 +24,18 @@ redis: # 数据可视化 dataEase: publish_url: http://10.10.14.203:8100 - + # 省级大屏名称 + dataVisualizationProvince: 云南省教育决策支持系统【云南省】 dataVisualizationRootName: 云南省教科院 - dataVisualizationName: 云南省教育决策支持系统【市州】 + # 外联参数大屏名称 + dataVisualizationOuterParamsNameCity: 云南省教育决策支持系统【市州】 + # 市级大屏名称 + dataVisualizationNameCity: 云南省教育决策支持系统【市州拷贝】 ShiZhou_url: /#/de-link/X4l1qGNH ShiLeft_url: /#/de-link/TgShVA0z ShiBottom_url: /#/de-link/QZVOyXqD ShiRight_url: /#/de-link/oitjXDlA - + # 县区级大屏名称 dataVisualizationNameArea: 云南省教育决策支持系统【县区】 Area_url: /#/de-link/OxwyzDTr AreaLeft_url: /#/de-link/WTtaPIn6