main
HuangHai 4 months ago
parent b3229d4dbb
commit 29bab5972d

@ -1,32 +0,0 @@
package com.dsideal.base.Tools.Excel.Bean;
import cn.idev.excel.annotation.ExcelProperty;
import com.dsideal.base.Tools.Excel.Util.ExcelUtil;
import lombok.Data;
@Data
public class BeanSchool2019_CZ {
@ExcelProperty(index = 1) // B列
private String schoolName;
@ExcelProperty(index = 3) // D列
private String schoolType;
@ExcelProperty(index = 5) // F列
private Integer schoolCount;
@ExcelProperty(index = 374) // NK列
private String city;
@ExcelProperty(index = 375) // NL列
private String district;
public static void main(String[] args) {
// 测试字母标号转列索引
String columnLetter = "NK"; // 示例输入
int columnIndex = ExcelUtil.columnLetterToIndex(columnLetter);
System.out.printf("字母标号 %s 对应的列索引是: %d%n", columnLetter, columnIndex);
}
}

@ -1,32 +0,0 @@
package com.dsideal.base.Tools.Excel.Bean;
import cn.idev.excel.annotation.ExcelProperty;
import com.dsideal.base.Tools.Excel.Util.ExcelUtil;
import lombok.Data;
@Data
public class BeanSchool2019_GZ {
@ExcelProperty(index = 1) // B列
private String schoolName;
@ExcelProperty(index = 3) // D列
private String schoolType;
@ExcelProperty(index = 5) // F列
private Integer schoolCount;
@ExcelProperty(index = 320) // LI列
private String city;
@ExcelProperty(index = 321) // LJ列
private String district;
public static void main(String[] args) {
// 测试字母标号转列索引
String columnLetter = "LI"; // 示例输入
int columnIndex = ExcelUtil.columnLetterToIndex(columnLetter);
System.out.printf("字母标号 %s 对应的列索引是: %d%n", columnLetter, columnIndex);
}
}

@ -1,32 +0,0 @@
package com.dsideal.base.Tools.Excel.Bean;
import cn.idev.excel.annotation.ExcelProperty;
import com.dsideal.base.Tools.Excel.Util.ExcelUtil;
import lombok.Data;
@Data
public class BeanSchool2019_XX {
@ExcelProperty(index = 1) // B列
private String schoolName;
@ExcelProperty(index = 3) // D列
private String schoolType;
@ExcelProperty(index = 5) // F列
private Integer schoolCount;
@ExcelProperty(index = 350) // MM列
private String city;
@ExcelProperty(index = 351) // MN列
private String district;
public static void main(String[] args) {
// 测试字母标号转列索引
String columnLetter = "MM"; // 示例输入
int columnIndex = ExcelUtil.columnLetterToIndex(columnLetter);
System.out.printf("字母标号 %s 对应的列索引是: %d%n", columnLetter, columnIndex);
}
}

@ -1,140 +0,0 @@
package com.dsideal.base.Tools.Excel;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import cn.idev.excel.*;
import com.dsideal.base.Tools.Excel.Bean.BeanSchool2019_CZ;
import com.dsideal.base.Tools.Excel.Bean.BeanSchool2019_GZ;
import com.dsideal.base.Tools.Excel.Bean.BeanSchool2019_XX;
import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class School2019 {
public static void main(String[] args) {
// 一、关闭各种日志输出信息
// 禁用 logback 的状态输出
System.setProperty("logback.statusListenerClass", "ch.qos.logback.core.status.NopStatusListener");
// 设置所有相关日志级别
Logger root = (Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
root.setLevel(Level.ERROR);
// 设置特定包的日志级别
String[] packages = {
"org.ehcache",
"org.ehcache.core",
"org.ehcache.impl",
"org.terracotta",
"ch.qos.logback",
"org.slf4j"
};
for (String pkg : packages) {
Logger logger = (Logger) LoggerFactory.getLogger(pkg);
logger.setLevel(Level.ERROR);
logger.setAdditive(false); // 防止日志向上传递
}
//初始化数据库连接
LocalMysqlConnectUtil.Init();
//二、业务逻辑
String filePath = "D:/dsWork/2025年收集的人口与教育数据库20250328/2015-2020年的数据/基础教育/2019.xlsx";
// 创建一个Map来存储所有处理结果
Map<String, Map<String, Map<String, Integer>>> allResults = new HashMap<>();
//跳过的行数
int skipRows = 7;
// 处理小学数据
allResults.put("小学", processSheet(filePath, "基教小学", skipRows, BeanSchool2019_XX.class));
// 处理初中数据
allResults.put("初中", processSheet(filePath, "基教初中", skipRows, BeanSchool2019_CZ.class));
// 处理高中数据
allResults.put("高中", processSheet(filePath, "基教高中", skipRows, BeanSchool2019_GZ.class));
// 保存统计结果到数据库
saveToDatabase(allResults, 2019);
}
/**
*
*
* @param allResults
* @param year
*/
private static void saveToDatabase(Map<String, Map<String, Map<String, Integer>>> allResults, int year) {
// 先删除该年份的旧数据
Db.delete("DELETE FROM t_yn_school_count WHERE year = ?", year);
// 遍历所有结果并保存
for (Map.Entry<String, Map<String, Map<String, Integer>>> schoolTypeEntry : allResults.entrySet()) {
String schoolType = schoolTypeEntry.getKey();
for (Map.Entry<String, Map<String, Integer>> cityEntry : schoolTypeEntry.getValue().entrySet()) {
String city = cityEntry.getKey();
for (Map.Entry<String, Integer> districtEntry : cityEntry.getValue().entrySet()) {
String district = districtEntry.getKey();
int count = districtEntry.getValue();
// 创建记录
Record record = new Record();
record.set("school_type", schoolType)
.set("city", city)
.set("district", district)
.set("school_count", count)
.set("year", year);
// 保存到数据库
Db.save("t_yn_school_count", record);
}
}
}
System.out.println("数据已成功保存到数据库");
}
/**
* Sheet
*
* @param filePath
* @param sheetName Sheet
* @param skipRows
* @param beanClass Bean
* @return Map
*/
private static <T> Map<String, Map<String, Integer>> processSheet(String filePath, String sheetName, int skipRows,
Class<T> beanClass) {
// 从指定行开始读取
List<T> dataList = FastExcel.read(filePath)
.head(beanClass)
.sheet(sheetName)
.headRowNumber(skipRows) // 跳过前 skipRows 行
.doReadSync();
// 使用 Map 进行分组统计
Map<String, Map<String, Integer>> cityDistrictMap = new HashMap<>();
for (T data : dataList) {
try {
// 通过反射获取字段值
String city = (String) beanClass.getMethod("getCity").invoke(data);
String district = (String) beanClass.getMethod("getDistrict").invoke(data);
int count = (int) beanClass.getMethod("getSchoolCount").invoke(data);
if (count > 0) {
// 如果市不存在,创建新的 Map
cityDistrictMap.putIfAbsent(city, new HashMap<>());
// 累加区对应的学校数量
cityDistrictMap.get(city).merge(district, count, Integer::sum);
}
} catch (Exception e) {
throw new RuntimeException("处理数据时发生错误", e);
}
}
return cityDistrictMap;
}
}

@ -1,4 +1,4 @@
package com.dsideal.base.Tools.Excel;
package com.dsideal.base.Tools.JkyNewData;
import cn.idev.excel.*;
import com.alibaba.fastjson2.JSON;
@ -7,9 +7,9 @@ import com.alibaba.fastjson2.JSONObject;
import java.io.FileNotFoundException;
import java.io.FileReader;
import com.dsideal.base.Tools.Excel.Util.CloseLogUtil;
import com.dsideal.base.Tools.Excel.Util.ColumnConfig;
import com.dsideal.base.Tools.Excel.Util.ExcelUtil;
import com.dsideal.base.Tools.JkyNewData.Util.CloseLogUtil;
import com.dsideal.base.Tools.JkyNewData.Util.ColumnConfig;
import com.dsideal.base.Tools.JkyNewData.Util.ExcelUtil;
import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
@ -18,7 +18,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SchoolWithMap {
public class SchoolCountSummary {
public static void main(String[] args) throws FileNotFoundException {
// 一、关闭日志输出

@ -1,4 +1,4 @@
package com.dsideal.base.Tools.Excel.Util;
package com.dsideal.base.Tools.JkyNewData.Util;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;

@ -1,4 +1,4 @@
package com.dsideal.base.Tools.Excel.Util;
package com.dsideal.base.Tools.JkyNewData.Util;
import lombok.Getter;
import lombok.Setter;

@ -1,4 +1,4 @@
package com.dsideal.base.Tools.Excel.Util;
package com.dsideal.base.Tools.JkyNewData.Util;
import java.util.Map;
Loading…
Cancel
Save