From b8ed974289c7199a60bf46baa5013ed94b471c39 Mon Sep 17 00:00:00 2001
From: dlaren
Date: Sun, 24 Aug 2025 19:21:29 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E3=80=90=E4=BF=AE=E6=94=B9=E3=80=91=20C?=
=?UTF-8?q?=E8=AF=AD=E8=A8=80=E5=88=A4=E5=88=86=E5=90=8E=E8=BE=93=E5=87=BA?=
=?UTF-8?q?=E4=B8=AD=E6=96=87=E5=8F=98=E4=B9=B1=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../exam/exam/utils/c/JudgementCUtils.java | 77 ++++++++++++-------
1 file changed, 48 insertions(+), 29 deletions(-)
diff --git a/src/main/java/com/example/exam/exam/utils/c/JudgementCUtils.java b/src/main/java/com/example/exam/exam/utils/c/JudgementCUtils.java
index e7a8562..d7c357a 100644
--- a/src/main/java/com/example/exam/exam/utils/c/JudgementCUtils.java
+++ b/src/main/java/com/example/exam/exam/utils/c/JudgementCUtils.java
@@ -120,18 +120,22 @@ public class JudgementCUtils
}
public static String run_codes(String pathC, String code, String input, String standard, String text) {
try {
- boolean hasInput = code.contains("scanf") || code.contains("fgets") || code.contains("getchar");
+ boolean hasInput = code != null && (code.contains("scanf") || code.contains("fgets") || code.contains("getchar"));
File workDir = new File(pathC);
if (!workDir.exists()) workDir.mkdirs();
boolean isWindows = System.getProperty("os.name").toLowerCase().contains("win");
+ java.nio.charset.Charset charset = pickCharset(text, isWindows);
+
String programC = new File(workDir, "program.c").getAbsolutePath();
String programOut = new File(workDir, isWindows ? "program.exe" : "program.out").getAbsolutePath();
- // 写入 C 源码
- try (FileWriter writer = new FileWriter(programC)) {
- writer.write(code);
+ // 写入 C 源码(按指定字符集)
+ try (java.io.OutputStream os = new java.io.FileOutputStream(programC);
+ java.io.OutputStreamWriter writer = new java.io.OutputStreamWriter(os, charset)) {
+ writer.write(code == null ? "" : code);
+ writer.flush();
}
// jar 所在目录
@@ -149,21 +153,15 @@ public class JudgementCUtils
}
// 编译命令
- ProcessBuilder compileBuilder;
- if (stdFlag == null) {
- compileBuilder = new ProcessBuilder(tccExe.getAbsolutePath(), programC, "-o", programOut);
- } else {
- compileBuilder = new ProcessBuilder(tccExe.getAbsolutePath(), stdFlag, programC, "-o", programOut);
- }
+ ProcessBuilder compileBuilder = (stdFlag == null)
+ ? new ProcessBuilder(tccExe.getAbsolutePath(), programC, "-o", programOut)
+ : new ProcessBuilder(tccExe.getAbsolutePath(), stdFlag, programC, "-o", programOut);
+
compileBuilder.directory(workDir);
compileBuilder.redirectErrorStream(true);
Process compileProcess = compileBuilder.start();
- StringBuilder compileOutput = new StringBuilder();
- try (BufferedReader br = new BufferedReader(new InputStreamReader(compileProcess.getInputStream(), StandardCharsets.UTF_8))) {
- String line;
- while ((line = br.readLine()) != null) compileOutput.append(line).append("\n");
- }
+ String compileOutput = readAll(compileProcess.getInputStream(), charset);
int compileResult = compileProcess.waitFor();
if (compileResult != 0 || !new File(programOut).exists()) {
return "❌ 编译失败,输出:\n" + compileOutput;
@@ -176,29 +174,25 @@ public class JudgementCUtils
Process runProcess = runBuilder.start();
if (hasInput && input != null) {
- try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(runProcess.getOutputStream()))) {
+ try (java.io.OutputStream os = runProcess.getOutputStream();
+ java.io.OutputStreamWriter osw = new java.io.OutputStreamWriter(os, charset);
+ java.io.BufferedWriter bw = new java.io.BufferedWriter(osw)) {
bw.write(input);
bw.newLine();
bw.flush();
}
+ } else {
+ // 关闭输入流,避免某些程序等待 STDIN
+ try { runProcess.getOutputStream().close(); } catch (Exception ignore) {}
}
- ExecutorService executor = Executors.newSingleThreadExecutor();
- Future future = executor.submit(() -> {
- StringBuilder output = new StringBuilder();
- // 运行过程读取输出
- try (BufferedReader br = new BufferedReader(
- new InputStreamReader(runProcess.getInputStream(), StandardCharsets.UTF_8))) {
- String line;
- while ((line = br.readLine()) != null) output.append(line).append("\n");
- }
- return output.toString();
- });
+ java.util.concurrent.ExecutorService executor = java.util.concurrent.Executors.newSingleThreadExecutor();
+ java.util.concurrent.Future future = executor.submit(() -> readAll(runProcess.getInputStream(), charset));
String output;
try {
- output = future.get(5, TimeUnit.SECONDS);
- } catch (TimeoutException e) {
+ output = future.get(5, java.util.concurrent.TimeUnit.SECONDS);
+ } catch (java.util.concurrent.TimeoutException e) {
runProcess.destroyForcibly();
future.cancel(true);
output = "⏰ 程序运行超时(超过 5 秒)";
@@ -213,6 +207,31 @@ public class JudgementCUtils
return "运行 C 代码时出错:" + ex.getMessage();
}
}
+
+ private static java.nio.charset.Charset pickCharset(String text, boolean isWindows) {
+ if (text != null && !text.isBlank()) {
+ try {
+ return java.nio.charset.Charset.forName(text.trim());
+ } catch (Exception ignore) {
+ // ignore and fallback
+ }
+ }
+ // 常见场景:Windows 中文环境默认 GBK;其他系统默认 UTF-8
+ return isWindows ? java.nio.charset.Charset.forName("GBK") : java.nio.charset.StandardCharsets.UTF_8;
+ }
+
+ private static String readAll(java.io.InputStream is, java.nio.charset.Charset cs) throws java.io.IOException {
+ try (java.io.InputStream in = is;
+ java.io.InputStreamReader isr = new java.io.InputStreamReader(in, cs);
+ java.io.BufferedReader br = new java.io.BufferedReader(isr)) {
+ StringBuilder sb = new StringBuilder();
+ String line;
+ while ((line = br.readLine()) != null) {
+ sb.append(line).append('\n');
+ }
+ return sb.toString();
+ }
+ }
/**
* 读取文件代码
* @param filePath 文件路径
From f7e5b46598ca3d413426de623e034d5096c31278 Mon Sep 17 00:00:00 2001
From: dlaren
Date: Mon, 25 Aug 2025 00:01:34 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E3=80=90=E4=BF=AE=E6=94=B9=E3=80=91=20?=
=?UTF-8?q?=E9=83=A8=E5=88=86=E8=AF=95=E9=A2=98=E8=A7=A3=E6=9E=90=E7=94=B1?=
=?UTF-8?q?p=E6=A0=87=E7=AD=BE=E6=94=B9=E6=88=90h2=E6=A0=87=E7=AD=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../AutoForWinEmailSettingServiceImpl.java | 27 ++++++++-------
.../AutoForWinEdgeSettingServiceImpl.java | 27 ++++++++-------
.../AutoForBrowerServiceImpl.java | 11 +++---
.../service/autoforc/AutoForCServiceImpl.java | 12 ++++---
.../AutoForChoiceServiceImpl.java | 32 ++++++++---------
.../autoforfile/AutoForFileServiceImpl.java | 11 +++---
.../autoformysql/AutoForMysqlServiceImpl.java | 11 +++---
.../autoforps/AutoForPsServiceImpl.java | 11 +++---
.../brower/JudgementBrowerServiceImpl.java | 8 ++---
.../service/mysql/IMysqlLocalService.java | 7 ++--
.../service/mysql/IMysqlLocalServiceImpl.java | 34 +++++++++----------
.../service/winfile/FileServericeImpl.java | 8 ++---
.../JudgementWpsExcelServiceImpl.java | 8 ++---
.../excel/JudgementForExcelServiceImpl.java | 11 +++---
.../wpspptx/JudgementWpsPptxService.java | 2 ++
.../wpspptx/JudgementWpsPptxServiceImpl.java | 6 ++--
.../pptx/JudgementForPptxServiceImpl.java | 11 +++---
.../wpsword/JudgementWpsWordServiceImpl.java | 8 ++---
.../word/JudgementForWordServiceImpl.java | 11 +++---
19 files changed, 135 insertions(+), 121 deletions(-)
diff --git a/src/main/java/com/example/exam/exam/service/autoForEmailSetting/AutoForWinEmailSettingServiceImpl.java b/src/main/java/com/example/exam/exam/service/autoForEmailSetting/AutoForWinEmailSettingServiceImpl.java
index 2064e36..e6b1db2 100644
--- a/src/main/java/com/example/exam/exam/service/autoForEmailSetting/AutoForWinEmailSettingServiceImpl.java
+++ b/src/main/java/com/example/exam/exam/service/autoForEmailSetting/AutoForWinEmailSettingServiceImpl.java
@@ -148,11 +148,11 @@ public class AutoForWinEmailSettingServiceImpl implements AutoForWinEmailSetting
Map map = objectMapper.readValue(jsonText, Map.class);
String judgementStr = "-----------------------------------------------------------
";
- judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
- judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
- judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
- judgementStr += "试题名称: 邮箱
";
-
+ judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
+ judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
+ judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
+ judgementStr += "试题名称: 邮箱
";
+ judgementStr += "✅ 开始QQ邮箱提判分
";
// 考试进行比对
for (ExamQuestionAnswer questionAnswer : examQuestion.getAnswerList()) {
boolean flag = false;
@@ -178,12 +178,12 @@ public class AutoForWinEmailSettingServiceImpl implements AutoForWinEmailSetting
oneScore += one_sorce;
score = score.add(new BigDecimal(one_sorce));
if (flag) {
- judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "✅ " + questionAnswer.getContentIn() + " 得分成功,得分:" + one_sorce);
+ judgementStr = HtmlAppender.appendHtmlLine(judgementStr, questionAnswer.getContentIn() + " 得分成功,得分:" + one_sorce + " 【✅】");
} else {
- judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌ " + questionAnswer.getContentIn() + " 得分失败");
+ judgementStr = HtmlAppender.appendHtmlLine(judgementStr, questionAnswer.getContentIn() + " 得分失败 【❌】");
}
}
- judgementStr += "试题得分: " + oneScore + "
";
+ judgementStr += "试题得分: " + oneScore + "
";
StuPaperScoreDO insertInfo = new StuPaperScoreDO();
insertInfo.setStuId(stuInfoVo.getStuId());
insertInfo.setPaperId(stuInfoVo.getPaperId());
@@ -227,12 +227,13 @@ public class AutoForWinEmailSettingServiceImpl implements AutoForWinEmailSetting
// 根据ID查询试题
ExamQuestion examQuestion = examQuestionService.selectExamQuestionByQuId(quId);
String judgementStr = "-----------------------------------------------------------
";
- judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
- judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
- judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
- judgementStr += "试题名称: 邮箱
";
+ judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
+ judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
+ judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
+ judgementStr += "试题名称: 邮箱
";
+ judgementStr += "✅ 开始QQ邮箱提判分
";
judgementStr += "❌ 未成功检测到作答情况
";
- judgementStr += "试题得分: 0分
";
+ judgementStr += "试题得分: 0分
";
StuPaperScoreDO insertInfo = new StuPaperScoreDO();
insertInfo.setStuId(stuInfoVo.getStuId());
insertInfo.setPaperId(stuInfoVo.getPaperId());
diff --git a/src/main/java/com/example/exam/exam/service/autoForWinEdgeSetting/AutoForWinEdgeSettingServiceImpl.java b/src/main/java/com/example/exam/exam/service/autoForWinEdgeSetting/AutoForWinEdgeSettingServiceImpl.java
index 19e0e1e..f5b409c 100644
--- a/src/main/java/com/example/exam/exam/service/autoForWinEdgeSetting/AutoForWinEdgeSettingServiceImpl.java
+++ b/src/main/java/com/example/exam/exam/service/autoForWinEdgeSetting/AutoForWinEdgeSettingServiceImpl.java
@@ -148,11 +148,11 @@ public class AutoForWinEdgeSettingServiceImpl implements AutoForWinEdgeSettingSe
Map map = objectMapper.readValue(jsonText, Map.class);
String judgementStr = "-----------------------------------------------------------
";
- judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
- judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
- judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
- judgementStr += "试题名称: windows网络设置
";
-
+ judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
+ judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
+ judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
+ judgementStr += "试题名称: windows网络设置
";
+ judgementStr += "✅ 开始EDGE浏览器网络设置判分
";
// 考试进行比对
for (ExamQuestionAnswer questionAnswer : examQuestion.getAnswerList()) {
boolean flag = false;
@@ -178,12 +178,12 @@ public class AutoForWinEdgeSettingServiceImpl implements AutoForWinEdgeSettingSe
oneScore += one_sorce;
score = score.add(new BigDecimal(one_sorce));
if (flag) {
- judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "✅ " + questionAnswer.getContentIn() + " 得分成功,得分:" + one_sorce);
+ judgementStr = HtmlAppender.appendHtmlLine(judgementStr, questionAnswer.getContentIn() + " 得分成功,得分:" + one_sorce + " 【✅】");
} else {
- judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌ " + questionAnswer.getContentIn() + " 得分失败");
+ judgementStr = HtmlAppender.appendHtmlLine(judgementStr, questionAnswer.getContentIn() + " 得分失败 【❌】");
}
}
- judgementStr += "试题得分: " + oneScore + "
";
+ judgementStr += "试题得分: " + oneScore + "
";
StuPaperScoreDO insertInfo = new StuPaperScoreDO();
insertInfo.setStuId(stuInfoVo.getStuId());
insertInfo.setPaperId(stuInfoVo.getPaperId());
@@ -227,12 +227,13 @@ public class AutoForWinEdgeSettingServiceImpl implements AutoForWinEdgeSettingSe
// 根据ID查询试题
ExamQuestion examQuestion = examQuestionService.selectExamQuestionByQuId(quId);
String judgementStr = "-----------------------------------------------------------
";
- judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
- judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
- judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
- judgementStr += "试题名称: windows网络设置
";
+ judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
+ judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
+ judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
+ judgementStr += "试题名称: windows网络设置
";
+ judgementStr += "✅ 开始EDGE浏览器网络设置判分
";
judgementStr += "❌ 未成功检测到作答情况
";
- judgementStr += "试题得分: 0分
";
+ judgementStr += "试题得分: 0分
";
StuPaperScoreDO insertInfo = new StuPaperScoreDO();
insertInfo.setStuId(stuInfoVo.getStuId());
insertInfo.setPaperId(stuInfoVo.getPaperId());
diff --git a/src/main/java/com/example/exam/exam/service/autoforbrower/AutoForBrowerServiceImpl.java b/src/main/java/com/example/exam/exam/service/autoforbrower/AutoForBrowerServiceImpl.java
index 1fa7170..0755ec3 100644
--- a/src/main/java/com/example/exam/exam/service/autoforbrower/AutoForBrowerServiceImpl.java
+++ b/src/main/java/com/example/exam/exam/service/autoforbrower/AutoForBrowerServiceImpl.java
@@ -74,14 +74,15 @@ public class AutoForBrowerServiceImpl implements AutoForBrowerService {
EducationPaperQu educationPaperQu = results.get();
String quScore = educationPaperScheme.getQuScores();
String judgementStr = "-----------------------------------------------------------
";
- judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
- judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
- judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
- judgementStr += "试题名称:" + name + "
";
+ judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
+ judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
+ judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
+ judgementStr += "试题名称:" + name + "
";
+ judgementStr += "✅ 开始网络提判分
";
SourceAndText cpojo = judgementBrowerService.Judgement(Double.parseDouble(quScore), stFile, examQuestion, judgementStr);
score = score.add(new BigDecimal(cpojo.getScore()).setScale(1, BigDecimal.ROUND_HALF_UP));
judgementStr = cpojo.getText();
- judgementStr += "试题得分:" + cpojo.getScore() + "
";
+ judgementStr += "试题得分:" + cpojo.getScore() + "
";
// 4、需要更新学生试题得分
StuPaperScoreDO insertInfo = new StuPaperScoreDO();
insertInfo.setStuId(stuInfoVo.getStuId());
diff --git a/src/main/java/com/example/exam/exam/service/autoforc/AutoForCServiceImpl.java b/src/main/java/com/example/exam/exam/service/autoforc/AutoForCServiceImpl.java
index e93a721..15e145e 100644
--- a/src/main/java/com/example/exam/exam/service/autoforc/AutoForCServiceImpl.java
+++ b/src/main/java/com/example/exam/exam/service/autoforc/AutoForCServiceImpl.java
@@ -8,6 +8,7 @@ import com.example.exam.exam.service.c.JudgementService;
import com.example.exam.exam.service.question.IExamQuestionService;
import com.example.exam.exam.service.stupaperscore.StuPaperScoreService;
import com.example.exam.exam.service.tenant.SystemTenantService;
+import com.example.exam.exam.utils.HtmlAppender;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
@@ -72,16 +73,17 @@ public class AutoForCServiceImpl implements AutoForCService {
String quScore = educationPaperScheme.getQuScores();
if (wjFile.getName().contains(".c")) {
String judgementStr = "-----------------------------------------------------------
";
- judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
- judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
- judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
- judgementStr += "试题名称:" + name + "
";
+ judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
+ judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
+ judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
+ judgementStr += "试题名称:" + name + "
";
+ judgementStr += "✅ 开始C语言编程题判分
";
// 获取不带文件名称的路径
String filePaths = wjFile.getParent();
SourceAndText cpojo = judgementService.ProgrammingC(Double.parseDouble(quScore), filePaths, wjFile.getName(), examQuestion, judgementStr);
judgementStr = cpojo.getText();
BigDecimal dangSource = new BigDecimal(cpojo.getScore()).setScale(1, BigDecimal.ROUND_HALF_UP);
- judgementStr += "试题得分:" + dangSource + "
";
+ judgementStr += "试题得分:" + dangSource + "
";
// 4、需要更新学生试题得分,首先需要查询试题的数据库是否保存信息
score = score.add(new BigDecimal(cpojo.getScore()).setScale(1, BigDecimal.ROUND_HALF_UP));
// 直接进行新增,不需要进行更新
diff --git a/src/main/java/com/example/exam/exam/service/autoforchoice/AutoForChoiceServiceImpl.java b/src/main/java/com/example/exam/exam/service/autoforchoice/AutoForChoiceServiceImpl.java
index 1989b73..3034ede 100644
--- a/src/main/java/com/example/exam/exam/service/autoforchoice/AutoForChoiceServiceImpl.java
+++ b/src/main/java/com/example/exam/exam/service/autoforchoice/AutoForChoiceServiceImpl.java
@@ -122,22 +122,22 @@ public class AutoForChoiceServiceImpl implements AutoForChoiceService {
stuAnswerSort = convertToLetter(resultAnswer.get().getSort());
}
String judgementStr = "-----------------------------------------------------------
";
- judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
- judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
- judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
- judgementStr += "试题名称: 选择题
";
+ judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
+ judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
+ judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
+ judgementStr += "试题名称: 选择题
";
judgementStr += "学生答案:" + stuAnswerSort + "
";
judgementStr += "正确答案:" + trueAbswerSort + "
";
boolean isRight = false;
// 开始判断学生的答案是否正确
if (stuAnswerId.equals(trueAnswerId)) {
// 正确
- judgementStr += "得分:" + Double.parseDouble(quScore) + "
";
+ judgementStr += "得分:" + Double.parseDouble(quScore) + "
";
isRight = true;
score += Double.parseDouble(quScore);
} else {
// 不正确
- judgementStr += "得分:0
";
+ judgementStr += "得分:0
";
isRight = false;
}
StuPaperScoreDO insertInfo = new StuPaperScoreDO();
@@ -165,13 +165,13 @@ public class AutoForChoiceServiceImpl implements AutoForChoiceService {
}
// 没有找到作答情况直接该题判0分
String judgementStr = "-----------------------------------------------------------
";
- judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
- judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
- judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
- judgementStr += "试题名称: 选择题
";
+ judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
+ judgementStr += "";
+ judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
+ judgementStr += "试题名称: 选择题
";
judgementStr += "
学生答案: 未作答
";
judgementStr += "正确答案:" + trueAbswerSort + "
";
- judgementStr += "得分:0
";
+ judgementStr += "得分:0
";
StuPaperScoreDO insertInfo = new StuPaperScoreDO();
insertInfo.setStuId(stuInfoVo.getStuId());
insertInfo.setPaperId(stuInfoVo.getPaperId());
@@ -215,13 +215,13 @@ public class AutoForChoiceServiceImpl implements AutoForChoiceService {
EducationPaperQu educationPaperQu = resultss.get();
// 没有找到作答情况直接该题判0分
String judgementStr = "-----------------------------------------------------------
";
- judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
- judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
- judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
- judgementStr += "试题名称: 选择题
";
+ judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
+ judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
+ judgementStr += "试题分数:" + Double.parseDouble(quScore) + "";
+ judgementStr += "试题名称: 选择题
";
judgementStr += "学生答案: 未作答
";
judgementStr += "正确答案:" + trueAbswerSort + "
";
- judgementStr += "得分:0
";
+ judgementStr += "得分:0 ";
StuPaperScoreDO insertInfo = new StuPaperScoreDO();
insertInfo.setStuId(stuInfoVo.getStuId());
insertInfo.setPaperId(stuInfoVo.getPaperId());
diff --git a/src/main/java/com/example/exam/exam/service/autoforfile/AutoForFileServiceImpl.java b/src/main/java/com/example/exam/exam/service/autoforfile/AutoForFileServiceImpl.java
index e720176..670fd86 100644
--- a/src/main/java/com/example/exam/exam/service/autoforfile/AutoForFileServiceImpl.java
+++ b/src/main/java/com/example/exam/exam/service/autoforfile/AutoForFileServiceImpl.java
@@ -80,14 +80,15 @@ public class AutoForFileServiceImpl implements AutoForFileService {
EducationPaperQu educationPaperQu = results.get();
String quScore = educationPaperScheme.getQuScores();
String judgementStr = "
-----------------------------------------------------------
";
- judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
- judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
- judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
- judgementStr += "试题名称:" + name + "
";
+ judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
+ judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
+ judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
+ judgementStr += "试题名称:" + name + "
";
+ judgementStr += "✅ 开始文件题判分
";
SourceAndText cpojo = fileServerice.Judgement(Double.parseDouble(quScore), stFile, examQuestion, judgementStr);
score = score.add(new BigDecimal(cpojo.getScore()).setScale(1, BigDecimal.ROUND_HALF_UP));
judgementStr = cpojo.getText();
- judgementStr += "试题得分:" + cpojo.getScore() + "
";
+ judgementStr += "试题得分:" + cpojo.getScore() + "
";
// 4、需要更新学生试题得分
StuPaperScoreDO insertInfo = new StuPaperScoreDO();
insertInfo.setStuId(stuInfoVo.getStuId());
diff --git a/src/main/java/com/example/exam/exam/service/autoformysql/AutoForMysqlServiceImpl.java b/src/main/java/com/example/exam/exam/service/autoformysql/AutoForMysqlServiceImpl.java
index 33c1597..f905ac8 100644
--- a/src/main/java/com/example/exam/exam/service/autoformysql/AutoForMysqlServiceImpl.java
+++ b/src/main/java/com/example/exam/exam/service/autoformysql/AutoForMysqlServiceImpl.java
@@ -78,14 +78,15 @@ public class AutoForMysqlServiceImpl implements AutoForMysqlService {
if (wjFile.getName().contains(".sql")) {
String judgementStr = "-----------------------------------------------------------
";
- judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
- judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
- judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
- judgementStr += "试题名称:" + name + "
";
+ judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
+ judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
+ judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
+ judgementStr += "试题名称:" + name + "
";
+ judgementStr += "✅ 开始MYSQL判分
";
SourceAndText cpojo = mysqlLocalService.Judgement(Double.parseDouble(quScore), stFile, examQuestion, judgementStr);
score = score.add(new BigDecimal(cpojo.getScore()).setScale(1, BigDecimal.ROUND_HALF_UP));
judgementStr = cpojo.getText();
- judgementStr += "试题得分:" + cpojo.getScore() + "
";
+ judgementStr += "试题得分:" + cpojo.getScore() + "
";
// 4、需要更新学生试题得分
StuPaperScoreDO insertInfo = new StuPaperScoreDO();
insertInfo.setStuId(stuInfoVo.getStuId());
diff --git a/src/main/java/com/example/exam/exam/service/autoforps/AutoForPsServiceImpl.java b/src/main/java/com/example/exam/exam/service/autoforps/AutoForPsServiceImpl.java
index 280d9af..6e567ea 100644
--- a/src/main/java/com/example/exam/exam/service/autoforps/AutoForPsServiceImpl.java
+++ b/src/main/java/com/example/exam/exam/service/autoforps/AutoForPsServiceImpl.java
@@ -69,14 +69,15 @@ public class AutoForPsServiceImpl implements AutoForPsService {
if (wjFile.getName().contains("原始")) {
String filePaths = wjFile.getParent();
String judgementStr = "-----------------------------------------------------------
";
- judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
- judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
- judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
- judgementStr += "试题名称:" + name + "
";
+ judgementStr += "试题序号:" + educationPaperQu.getSort() + "
";
+ judgementStr += "试题编号:" + examQuestion.getQuNum() + "
";
+ judgementStr += "试题分数:" + Double.parseDouble(quScore) + "
";
+ judgementStr += "试题名称:" + name + "
";
+ judgementStr += "✅ 开始QQ邮箱提判分
";
SourceAndText wordpojo = psService.Judgement(Double.parseDouble(quScore), filePaths, wjFile.getPath(), examQuestion, judgementStr);
score = score.add(new BigDecimal(wordpojo.getScore()).setScale(1, BigDecimal.ROUND_HALF_UP));
judgementStr = wordpojo.getText();
- judgementStr += "试题得分:" + wordpojo.getScore() + "
";
+ judgementStr += "试题得分:" + wordpojo.getScore() + "
";
// 4、需要更新学生试题得分
StuPaperScoreDO insertInfo = new StuPaperScoreDO();
insertInfo.setStuId(stuInfoVo.getStuId());
diff --git a/src/main/java/com/example/exam/exam/service/brower/JudgementBrowerServiceImpl.java b/src/main/java/com/example/exam/exam/service/brower/JudgementBrowerServiceImpl.java
index 3f2e830..6ee8d8b 100644
--- a/src/main/java/com/example/exam/exam/service/brower/JudgementBrowerServiceImpl.java
+++ b/src/main/java/com/example/exam/exam/service/brower/JudgementBrowerServiceImpl.java
@@ -100,12 +100,12 @@ public class JudgementBrowerServiceImpl implements JudgementBrowerService {
String formattedWeightScore = String.format("%.1f", weightScore);
appendToFile(answerLogPath, "✅考点" + bookmarkNameToDelete + " -> 得分权值:" + currentScore + "-> 得分:" + formattedWeightScore);
- judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "✅考点" + bookmarkNameToDelete + " -> 得分权值:" + currentScore + "-> 得分:" + formattedWeightScore);
+ judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考点" + bookmarkNameToDelete + " -> 得分权值:" + currentScore + "-> 得分:" + formattedWeightScore + " 【✅】");
//删除此书签
BookmarkDeleter.deleteBookmarkByName(chromeBookmarkPath, bookmarkNameToDelete);
} else {
appendToFile(answerLogPath, "❌考点" + bookmarkNameToDelete + " -> 得分权值:" + currentScore + "-> 得分:0");
- judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌考点" + bookmarkNameToDelete + " -> 得分权值:" + currentScore + "-> 得分:0");
+ judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考点" + bookmarkNameToDelete + " -> 得分权值:" + currentScore + "-> 得分:0 【❌】");
}
}
@@ -146,10 +146,10 @@ public class JudgementBrowerServiceImpl implements JudgementBrowerService {
double weightScore = ((double) currentScore / total) * score;
String formattedWeightScore = String.format("%.1f", weightScore);
appendToFile(answerLogPath, "✅考点" + answer.getContent() + " -> 得分权值:" + answer.getScoreRate() + "-> 得分:" + formattedWeightScore);
- judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "✅考点" + answer.getContent() + " -> 得分权值:" + answer.getScoreRate() + "-> 得分:" + formattedWeightScore);
+ judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考点" + answer.getContent() + " -> 得分权值:" + answer.getScoreRate() + "-> 得分:" + formattedWeightScore + " 【✅】");
} else {
appendToFile(answerLogPath, "❌考点" + answer.getContent() + " -> 得分权值:" + answer.getScoreRate() + "-> 得分:0");
- judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌考点" + answer.getContent() + " -> 得分权值:" + answer.getScoreRate() + "-> 得分:0");
+ judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考点" + answer.getContent() + " -> 得分权值:" + answer.getScoreRate() + "-> 得分:0 【❌】");
}
}
}
diff --git a/src/main/java/com/example/exam/exam/service/mysql/IMysqlLocalService.java b/src/main/java/com/example/exam/exam/service/mysql/IMysqlLocalService.java
index dcba630..76f59a1 100644
--- a/src/main/java/com/example/exam/exam/service/mysql/IMysqlLocalService.java
+++ b/src/main/java/com/example/exam/exam/service/mysql/IMysqlLocalService.java
@@ -12,9 +12,10 @@ import java.util.List;
public interface IMysqlLocalService {
- void delMysqlConnect(List tNames);
- SourceAndText Judgement(double source, File file, ExamQuestion examQuestion, String judgementStr) throws IOException, SQLException;
+ void delMysqlConnect(List tNames);
- void JudgementFile(File mysqlFile, ExamQuestion examQuestion);
+ SourceAndText Judgement(double source, File file, ExamQuestion examQuestion, String judgementStr) throws IOException, SQLException;
+
+ void JudgementFile(File mysqlFile, ExamQuestion examQuestion);
}
diff --git a/src/main/java/com/example/exam/exam/service/mysql/IMysqlLocalServiceImpl.java b/src/main/java/com/example/exam/exam/service/mysql/IMysqlLocalServiceImpl.java
index 8203737..43d4216 100644
--- a/src/main/java/com/example/exam/exam/service/mysql/IMysqlLocalServiceImpl.java
+++ b/src/main/java/com/example/exam/exam/service/mysql/IMysqlLocalServiceImpl.java
@@ -195,7 +195,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
boolean tableExists = false;
//学生语句
String stuSQL = null;
- String yuju=null;
+ String yuju = null;
try (Connection connstu = DriverManager.getConnection(stuDbUrl, user, password);
Statement stmtstu = connstu.createStatement()) {
try (ResultSet rsstu = stmtstu.executeQuery(sql2)) {
@@ -224,7 +224,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
} else {
// 表不存在时的处理逻辑
System.out.println("表 " + tableName + " 在学生数据库中不存在");
- yuju = compareTables(table1Columns, table2Columns, stuDataName, tableName, null, judgementStr);
+ yuju = compareTables(table1Columns, table2Columns, stuDataName, tableName, null, judgementStr);
}
@@ -949,23 +949,23 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
boolean equals = normalizedTriggerSql1.equals(normalizedTriggerSql2);
if (equals) {
correctCount++; // 完全正确
- appendToFile(answerLogPath, "【执行】"+answerSQL+"【验证】【文件】 【" + fileName.get() + "】【结果】【√】");
- judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】"+answerSQL+"【验证】【文件】 【" + fileName.get() + "】【结果】【✅】");
+ appendToFile(answerLogPath, "【执行】" + answerSQL + "【验证】【文件】 【" + fileName.get() + "】【结果】【√】");
+ judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + answerSQL + "【验证】【文件】 【" + fileName.get() + "】【结果】【✅】");
//todo 得分
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, stuAnswer.get(), totalKeyScore, score, answerId, scoreTotal, judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
} else {
- appendToFile(answerLogPath, "【执行】"+answerSQL+"【验证】【文件】 【" + fileName.get() + "】【结果】【×】");
- judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】"+answerSQL+"【验证】【文件】 【" + fileName.get() + "】【验证】【结果】【❌】");
+ appendToFile(answerLogPath, "【执行】" + answerSQL + "【验证】【文件】 【" + fileName.get() + "】【结果】【×】");
+ judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + answerSQL + "【验证】【文件】 【" + fileName.get() + "】【验证】【结果】【❌】");
SourceAndText studentScorePojo = calculateTotalScoreRate(stuAnswer.get(), examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
}
} else {
- appendToFile(answerLogPath, "【执行】"+answerSQL+"【验证】【文件】 【" + fileName.get() + "】【结果】【×】");
- judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】"+answerSQL+"【验证】【文件】 【" + fileName.get() + "】【结果】【❌】");
+ appendToFile(answerLogPath, "【执行】" + answerSQL + "【验证】【文件】 【" + fileName.get() + "】【结果】【×】");
+ judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + answerSQL + "【验证】【文件】 【" + fileName.get() + "】【结果】【❌】");
SourceAndText studentScorePojo = calculateTotalScoreRate(stuAnswer.get(), examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
@@ -1055,7 +1055,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
SourceAndText studentScorePojo = calculateTotalScoreRate(alterSQL, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
- }else {
+ } else {
SourceAndText studentScorePojo = calculateTotalScoreRate(null, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
@@ -1215,14 +1215,14 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
private static String compareTables(Set