-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
- $.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