diff --git a/2017/build.gradle.kts b/2017/build.gradle.kts index a8c7845..6b1ad0d 100644 --- a/2017/build.gradle.kts +++ b/2017/build.gradle.kts @@ -12,20 +12,12 @@ repositories { dependencies { annotationProcessor("org.projectlombok:lombok:1.18.30") compileOnly("org.projectlombok:lombok:1.18.30") - implementation("com.h2database:h2:2.2.224") implementation("org.apache.logging.log4j:log4j-core:2.21.1") implementation("org.apache.logging.log4j:log4j-slf4j2-impl:2.21.1") implementation("org.apache.poi:poi:5.2.4") implementation("org.apache.poi:poi-ooxml:5.2.4") + implementation("org.hibernate.orm:hibernate-community-dialects:6.3.1.Final") implementation("org.hibernate.orm:hibernate-core:6.3.1.Final") implementation("org.slf4j:slf4j-api:2.0.9") - - testAnnotationProcessor("org.projectlombok:lombok:1.18.30") - testCompileOnly("org.projectlombok:lombok:1.18.30") - testImplementation(platform("org.junit:junit-bom:5.9.1")) - testImplementation("org.junit.jupiter:junit-jupiter") -} - -tasks.test { - useJUnitPlatform() + implementation("org.xerial:sqlite-jdbc:3.43.2.2") } diff --git a/2017/database.sqlite b/2017/database.sqlite new file mode 100644 index 0000000..37a1839 Binary files /dev/null and b/2017/database.sqlite differ diff --git a/2017/src/main/java/dev/miti99/thptqg2017/Converter.java b/2017/src/main/java/dev/miti99/thptqg2017/Converter.java index 424184b..7a0e8d8 100644 --- a/2017/src/main/java/dev/miti99/thptqg2017/Converter.java +++ b/2017/src/main/java/dev/miti99/thptqg2017/Converter.java @@ -1,32 +1,145 @@ package dev.miti99.thptqg2017; import dev.miti99.thptqg2017.entity.Student; +import java.io.FileInputStream; +import java.nio.file.Files; +import java.nio.file.Path; import java.text.SimpleDateFormat; +import java.util.regex.Pattern; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.hibernate.cfg.Configuration; @Slf4j public class Converter { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); + private static final String excelFolder = "src/main/resources/raw"; + private static final Pattern toanPattern = Pattern.compile("Toán:\\s*(\\d*.\\d*)"); + private static final Pattern nguVanPattern = Pattern.compile("Ngữ văn:\\s*(\\d*.\\d*)"); + private static final Pattern vatLiPattern = Pattern.compile("Vật lí:\\s*(\\d*.\\d*)"); + private static final Pattern hoaHocPattern = Pattern.compile("Hóa học:\\s*(\\d*.\\d*)"); + private static final Pattern sinhHocPattern = Pattern.compile("Sinh học:\\s*(\\d*.\\d*)"); + private static final Pattern khtnPattern = Pattern.compile("KHTN:\\s*(\\d*.\\d*)"); + private static final Pattern lichSuPattern = Pattern.compile("Lịch sử:\\s*(\\d*.\\d*)"); + private static final Pattern diaLiPattern = Pattern.compile("Địa lí:\\s*(\\d*.\\d*)"); + private static final Pattern gdcdPattern = Pattern.compile("GDCD:\\s*(\\d*.\\d*)"); + private static final Pattern khxhPattern = Pattern.compile("KHXH:\\s*(\\d*.\\d*)"); + private static final Pattern tiengAnhPattern = Pattern.compile("Tiếng Anh:\\s*(\\d*.\\d*)"); public static void main(String[] args) { var configuration = new Configuration(); configuration.configure("hibernate.cfg.xml"); try (var sessionFactory = configuration.buildSessionFactory(); - var session = sessionFactory.openSession()) { + var session = sessionFactory.openSession(); + var paths = Files.walk(Path.of(excelFolder))) { var transaction = session.beginTransaction(); - var newStudent = new Student(); - newStudent.setSoBaoDanh(12345); - newStudent.setHoTen("John Doe"); - newStudent.setNgaySinh(dateFormat.parse("01/01/1999")); + paths + .filter(Files::isRegularFile) + .forEach( + file -> { + try (var workbook = new XSSFWorkbook(new FileInputStream(file.toFile()))) { + var sheet = workbook.getSheetAt(0); - session.merge(newStudent); + for (var row : sheet) { + try { + // Một số file lỗi nên không chắc có header, không skip + // if (row.getRowNum() == 0) { + // return; + // } + var student = new Student(); + var hoTen = row.getCell(0).getStringCellValue(); + student.setHoTen(hoTen); + + var ngaySinh = row.getCell(1).getStringCellValue(); + student.setNgaySinh(dateFormat.parse(ngaySinh)); + + var soBaoDanh = row.getCell(2).getStringCellValue(); + student.setSoBaoDanh(soBaoDanh); + + var diemThi = row.getCell(3).getStringCellValue(); + + var toanMatcher = toanPattern.matcher(diemThi); + if (toanMatcher.find()) { + var toan = Double.parseDouble(toanMatcher.group(1)); + student.setToan(toan); + } + + var nguVanMatcher = nguVanPattern.matcher(diemThi); + if (nguVanMatcher.find()) { + var nguVan = Double.parseDouble(nguVanMatcher.group(1)); + student.setNguVan(nguVan); + } + + var vatLiMatcher = vatLiPattern.matcher(diemThi); + if (vatLiMatcher.find()) { + var vatLi = Double.parseDouble(vatLiMatcher.group(1)); + student.setVatLy(vatLi); + } + + var hoaHocMatcher = hoaHocPattern.matcher(diemThi); + if (hoaHocMatcher.find()) { + var hoaHoc = Double.parseDouble(hoaHocMatcher.group(1)); + student.setHoaHoc(hoaHoc); + } + + var sinhHocMatcher = sinhHocPattern.matcher(diemThi); + if (sinhHocMatcher.find()) { + var sinhHoc = Double.parseDouble(sinhHocMatcher.group(1)); + student.setSinhHoc(sinhHoc); + } + + var khtnMatcher = khtnPattern.matcher(diemThi); + if (khtnMatcher.find()) { + var khtn = Double.parseDouble(khtnMatcher.group(1)); + student.setKhtn(khtn); + } + + var lichSuMatcher = lichSuPattern.matcher(diemThi); + if (lichSuMatcher.find()) { + var lichSu = Double.parseDouble(lichSuMatcher.group(1)); + student.setLichSu(lichSu); + } + + var diaLiMatcher = diaLiPattern.matcher(diemThi); + if (diaLiMatcher.find()) { + var diaLi = Double.parseDouble(diaLiMatcher.group(1)); + student.setDiaLy(diaLi); + } + + var gdcdMatcher = gdcdPattern.matcher(diemThi); + if (gdcdMatcher.find()) { + var gdcd = Double.parseDouble(gdcdMatcher.group(1)); + student.setGdcd(gdcd); + } + + var khxhMatcher = khxhPattern.matcher(diemThi); + if (khxhMatcher.find()) { + var khxh = Double.parseDouble(khxhMatcher.group(1)); + student.setKhxh(khxh); + } + + var tiengAnhMatcher = tiengAnhPattern.matcher(diemThi); + if (tiengAnhMatcher.find()) { + var tiengAnh = Double.parseDouble(tiengAnhMatcher.group(1)); + student.setTiengAnh(tiengAnh); + } + + session.merge(student); + } catch (Exception e) { + log.error("Error", e); + } + } + + } catch (Exception e) { + log.error("Error", e); + } + }); transaction.commit(); } catch (Exception e) { - log.error("Exception occurred", e); + log.error("Error", e); } } } diff --git a/2017/src/main/java/dev/miti99/thptqg2017/entity/Student.java b/2017/src/main/java/dev/miti99/thptqg2017/entity/Student.java index d0b1d31..ab140b0 100644 --- a/2017/src/main/java/dev/miti99/thptqg2017/entity/Student.java +++ b/2017/src/main/java/dev/miti99/thptqg2017/entity/Student.java @@ -14,14 +14,14 @@ import lombok.Data; @Data public class Student { @Id - @Column(name = "SOBAODANH") - private int soBaoDanh; + @Column(name = "SO_BAO_DANH") + private String soBaoDanh; @Column(name = "HO_TEN") private String hoTen; @Column(name = "NGAY_SINH") - @Temporal(TemporalType.TIMESTAMP) + @Temporal(TemporalType.DATE) private Date ngaySinh; @Column(name = "TOAN") diff --git a/2017/src/main/resources/hibernate.cfg.xml b/2017/src/main/resources/hibernate.cfg.xml index 25c132c..7583446 100644 --- a/2017/src/main/resources/hibernate.cfg.xml +++ b/2017/src/main/resources/hibernate.cfg.xml @@ -5,13 +5,14 @@ - org.h2.Driver - jdbc:h2:./database - username - password + org.sqlite.JDBC + jdbc:sqlite:database.sqlite + + org.hibernate.community.dialect.SQLiteDialect + + false create - false