From c5c39bb23c024e95b23e8427760bf5bb0d128309 Mon Sep 17 00:00:00 2001 From: youys <1272586223@qq.com> Date: Mon, 22 May 2023 09:43:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=8B=E5=8A=A8=E8=B7=91=E8=AF=84=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../ecsonar/services/SonarService.java | 4 +- .../ecsonar/task/ReadExcelRunnable.java | 80 +-------- .../net/educoder/ecsonar/utils/ExcelUtil.java | 10 +- .../net/educoder/ecsonar/utils/RarUtil.java | 161 ++++++++++++++++++ src/main/resources/template1.xlsx | Bin 13059 -> 13199 bytes .../ecsonar/EcsonarApplicationTests.java | 13 +- 7 files changed, 189 insertions(+), 81 deletions(-) create mode 100644 src/main/java/net/educoder/ecsonar/utils/RarUtil.java diff --git a/pom.xml b/pom.xml index b30a9b6..1c19d1e 100644 --- a/pom.xml +++ b/pom.xml @@ -111,7 +111,7 @@ com.github.junrar junrar - 4.0.0 + 7.5.4 diff --git a/src/main/java/net/educoder/ecsonar/services/SonarService.java b/src/main/java/net/educoder/ecsonar/services/SonarService.java index 1141db2..c71db27 100644 --- a/src/main/java/net/educoder/ecsonar/services/SonarService.java +++ b/src/main/java/net/educoder/ecsonar/services/SonarService.java @@ -193,7 +193,7 @@ public class SonarService { "-Dsonar.projectBaseDir=" + projectPath; log.info("projectPath:{},key:{}, command: {}", projectPath, key, command); SystemUtil.ExecuteResp executeResp = SystemUtil.executeAndGetExitStatus(command); - log.info("projectPath:{},key:{}, result: {}", projectPath, key, executeResp.getOutput()); + log.info("projectPath:{},key:{}, result: {}", projectPath, key, executeResp.getStatus() != 0 ? executeResp.getOutput() : "success"); } /** @@ -258,7 +258,7 @@ public class SonarService { */ public void scanExcel(String excelPath) { - int homeworkId = 20230102; + int homeworkId = 20230302; try { List personList = ExcelUtil.readExcel(excelPath); diff --git a/src/main/java/net/educoder/ecsonar/task/ReadExcelRunnable.java b/src/main/java/net/educoder/ecsonar/task/ReadExcelRunnable.java index f3136bf..f0a62d9 100644 --- a/src/main/java/net/educoder/ecsonar/task/ReadExcelRunnable.java +++ b/src/main/java/net/educoder/ecsonar/task/ReadExcelRunnable.java @@ -1,9 +1,12 @@ package net.educoder.ecsonar.task; +import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ZipUtil; +import com.github.junrar.Junrar; import net.educoder.ecsonar.model.api.Person; import net.educoder.ecsonar.model.api.SonarRequest; import net.educoder.ecsonar.services.SonarService; +import net.educoder.ecsonar.utils.RarUtil; import net.educoder.ecsonar.utils.UrlUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -42,7 +45,7 @@ public class ReadExcelRunnable implements Runnable{ String path = String.format("/tmp/%d/%s/", homeworkId, uid); File file = new File(path); if(!file.exists()){ - file.mkdir(); + file.mkdirs(); } // for (Person person : sonarRequest.getPersonList()) { // String[] split = StringUtils.split(person.getDownloadUrl(), "/"); @@ -54,6 +57,10 @@ public class ReadExcelRunnable implements Runnable{ // } // } String key = String.format("%d-%s", homeworkId, uid); + if(new File(path + "/.scannerwork/").exists()){ + System.out.println(path+ "----exist"); + return; + } log.info("开始调用sonar:{}",key); sonarService.sonar(path,key); } @@ -87,76 +94,5 @@ public class ReadExcelRunnable implements Runnable{ } - public static void main(String[] args) { - -// unzip(); - valid("/tmp/20230102"); - } - - - public static void unzip(){ - String sourceDir = "/tmp/20230101"; - String targetDir = "/tmp/20230102"; - - File directory = new File(sourceDir); - File[] studentDirs = directory.listFiles(); - if (studentDirs == null) { - System.out.println("No student directories found."); - return; - } - - int i=0; - for (File studentDir : studentDirs) { - if (!studentDir.isDirectory()) { - continue; - } - - String studentId = studentDir.getName(); - String studentTargetDir = targetDir + "/" + studentId; - - File[] zipFiles = studentDir.listFiles((dir, name) -> name.endsWith(".zip")); - if (zipFiles == null) { - System.out.println("No zip files found for student: " + studentId); - continue; - } - - -// if(i++ < 82){ -// continue; -// } - for (File zipFile : zipFiles) { - try { - unzip(zipFile.getAbsolutePath(), studentTargetDir); - } catch (Exception e) { - System.out.println("Error occurred while unzipping file: " + zipFile.getName()); - e.printStackTrace(); - } - } - } - } - - private static void unzip(String zipFilePath, String targetDir) throws IOException { - System.out.println(zipFilePath + " to " + targetDir); - ZipUtil.unzip(zipFilePath,targetDir,Charset.forName("GBK")); - } - - - public static void valid(String path){ - File directory = new File(path); - File[] studentDirs = directory.listFiles(); - if (studentDirs == null) { - System.out.println("No student directories found."); - return; - } - - for (File studentDir : studentDirs) { - if (studentDir.isDirectory()) { - for (File file : studentDir.listFiles()) { - System.out.println(studentDir.getName()+" ->" + file.getName()); - } - } - } - - } } diff --git a/src/main/java/net/educoder/ecsonar/utils/ExcelUtil.java b/src/main/java/net/educoder/ecsonar/utils/ExcelUtil.java index a92847c..e49edee 100644 --- a/src/main/java/net/educoder/ecsonar/utils/ExcelUtil.java +++ b/src/main/java/net/educoder/ecsonar/utils/ExcelUtil.java @@ -397,8 +397,16 @@ public class ExcelUtil { Row row = sheet.getRow(i); String name = row.getCell(0).getStringCellValue(); +// String uid; +// try { +// uid = String.valueOf(row.getCell(1).getNumericCellValue()); +// }catch (Exception e){ +// uid = row.getCell(1).getStringCellValue(); +// } + String uid = row.getCell(1).getStringCellValue(); - String downloadUrl = row.getCell(2).getStringCellValue(); + + String downloadUrl = row.getCell(2).getStringCellValue() + "?secret_key=806ac9e5a8b40233c99bb513a315ed66"; Person person = new Person(); person.setName(name); diff --git a/src/main/java/net/educoder/ecsonar/utils/RarUtil.java b/src/main/java/net/educoder/ecsonar/utils/RarUtil.java new file mode 100644 index 0000000..848c8d8 --- /dev/null +++ b/src/main/java/net/educoder/ecsonar/utils/RarUtil.java @@ -0,0 +1,161 @@ +package net.educoder.ecsonar.utils; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.RuntimeUtil; +import cn.hutool.core.util.ZipUtil; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; + +/** + * @Author: youys + * @Date: 2023/5/19 + * @Description: + */ +public class RarUtil { + + public static void unrar(String sourceFilePath, String outputDirectory) { + String s = RuntimeUtil.execForStr("unar", sourceFilePath,"-o", outputDirectory); + System.out.println("result====" + s); + } + + + public static void un7Z(String sourceFilePath, String outputDirectory) { + String s = RuntimeUtil.execForStr("unar", sourceFilePath,"-o", outputDirectory); + System.out.println("result====" + s); + } + + + public static void main(String[] args) { + // unrar("/tmp/20230301/201905962222/20230519153409_wuiol3vn.rar", "/Users/youyongsheng/Desktop/aa"); + un7Z("/tmp/20230301/201905962241/20230519153506_i39sv5p2.7z", "/Users/youyongsheng/Desktop/aa"); + +// unzip(); +// valid("/tmp/20230201"); + removeFullCode("/tmp/20230302"); + } + + + public static void unzip(){ + String sourceDir = "/tmp/20230301"; + String targetDir = "/tmp/20230302"; + + File directory = new File(sourceDir); + File[] studentDirs = directory.listFiles(); + if (studentDirs == null) { + System.out.println("No student directories found."); + return; + } + + int i=0; + for (File studentDir : studentDirs) { + if (!studentDir.isDirectory()) { + System.out.println("111--------------------------------"); + continue; + } + + + + String studentId = studentDir.getName(); + String studentTargetDir = targetDir + "/" + studentId; + + File[] zipFiles = studentDir.listFiles(); +// File[] zipFiles = studentDir.listFiles((dir, name) -> name.endsWith(".zip")); +// if (zipFiles == null) { +// System.out.println("No zip files found for student: " + studentId); +// continue; +// } + + + for (File zipFile : zipFiles) { + try { + if(zipFile.getName().endsWith(".zip")){ +// unzip(zipFile.getAbsolutePath(), studentTargetDir); + }else if(zipFile.getName().endsWith(".rar")){ + System.out.println(zipFile.getAbsolutePath() + " to " + targetDir); + unRar(zipFile.getAbsolutePath(), studentTargetDir); + }else{ + System.out.println(zipFile.getAbsolutePath() + " to " + targetDir); + RarUtil.un7Z(zipFile.getAbsolutePath(), studentTargetDir); + } + } catch (Exception e) { + System.out.println("Error occurred while unzipping file: " + zipFile.getName()); + } + } + + System.out.println("--------------------------------"); + } + } + + private static void unzip(String zipFilePath, String targetDir) throws IOException { + System.out.println(zipFilePath + " to " + targetDir); + ZipUtil.unzip(zipFilePath,targetDir, Charset.forName("GBK")); + } + + private static void unRar(String zipFilePath, String targetDir) throws Exception { + System.out.println(zipFilePath + " to " + targetDir); + RarUtil.unrar(zipFilePath,targetDir); + } + + + public static void valid(String path){ + File directory = new File(path); + File[] studentDirs = directory.listFiles(); + if (studentDirs == null) { + System.out.println("No student directories found."); + return; + } + + for (File studentDir : studentDirs) { + if (studentDir.isDirectory()) { + + for (File file : studentDir.listFiles()) { + System.out.println(studentDir.getName()+" ->" + file.getName()); + } + System.out.println("--------------------------------"); + } + } + + } + + public static void removeFullCode(String path){ + // 删除完整代码 + File directory = new File(path); + File[] studentDirs = directory.listFiles(); + if (studentDirs == null) { + System.out.println("No student directories found."); + return; + } + + for (File studentDir : studentDirs) { + if (studentDir.isDirectory()) { + + String stuNo = studentDir.getName(); + File[] files = studentDir.listFiles(); + if(files.length == 2){ + for (File file : files) { + if (file.getName().contains("完整")) { + System.out.println(stuNo + "==11===" + file.getAbsolutePath()); + cn.hutool.core.io.FileUtil.del(file.getAbsolutePath()); + } + } + + }else if(files.length == 1){ + File file = files[0]; + File[] files1 = file.listFiles(); + if(files1 != null && files1.length == 2){ + for (File f : files1) { + if (f.getName().contains("完整")) { + System.out.println(stuNo + "==22===" + f.getAbsolutePath()); + FileUtil.del(f.getAbsolutePath()); + } + } + + } + } + + } + } + } +} diff --git a/src/main/resources/template1.xlsx b/src/main/resources/template1.xlsx index b828e405f8fa6824020ddfb8f07d53028fd39135..75a4d0860fab219c81c34efa79b3fceba62eab4c 100644 GIT binary patch delta 9134 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 delta 8995 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 personList = ExcelUtil.readExcel("/Users/youyongsheng/Desktop/ZQ/质量分析/2023-05-16/data.xlsx"); + List personList = ExcelUtil.readExcel("/Users/youyongsheng/Desktop/ZQ/质量分析/2023-05-16/湘潭大学网络工程专业2023届-原始数据.xlsx"); Map> collect = personList.stream().collect(Collectors.groupingBy(Person::getUid)); @@ -100,7 +100,7 @@ public class EcsonarApplicationTests { Metrics metrics = reportService.getMetrics(projectName); String templatePath = this.getClass().getClassLoader().getResource("template1.xlsx").getPath(); - String outPath = "/Users/youyongsheng/Desktop/2222222.xlsx"; + String outPath = "/Users/youyongsheng/Desktop/bbbbb.xlsx"; System.out.println("第"+(i++)+"个学生," + uid); if (CollectionUtils.isEmpty(collect.get(uid))) { @@ -122,4 +122,7 @@ public class EcsonarApplicationTests { System.out.println("---------end------------"); } + + + }