【修改】mysql判分样式,文件夹总分输出重复

This commit is contained in:
YOHO\20373
2025-06-30 16:55:36 +08:00
parent a370e6acd5
commit a215890004
2 changed files with 275 additions and 141 deletions

View File

@@ -128,8 +128,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
appendToFile(answerLogPath, "未找到答题表:" +stuDataName+ ","+e.getMessage()); appendToFile(answerLogPath, "未找到答题库:【" +stuDataName+"");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "未找到答题表:" +stuDataName+","+ e.getMessage()); judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "未找到答题库:【" +stuDataName+"");
} }
// // **建立连接到新创建的数据库** // // **建立连接到新创建的数据库**
@@ -152,7 +152,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
String sql=examQuestionAnswer.getContent(); String sql=examQuestionAnswer.getContent();
if(sql.trim().toUpperCase().startsWith("CREATE TABLE")) { if(sql.trim().toUpperCase().startsWith("CREATE TABLE")) {
appendToFile(answerLogPath, "==================建表语句=================="); appendToFile(answerLogPath, "==================建表语句==================");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "==================建表语句=================="); judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "==================建表语句 ==================");
// 匹配成功 // 匹配成功
String answerId = examQuestionAnswer.getAnswerId(); String answerId = examQuestionAnswer.getAnswerId();
List<ExamMysqlKeyword> examMysqlKeywordList= examMysqlKeywordMapper.selectListByAnswerId(answerId); List<ExamMysqlKeyword> examMysqlKeywordList= examMysqlKeywordMapper.selectListByAnswerId(answerId);
@@ -241,11 +241,14 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
if (table1Columns.equals(table2Columns)) { if (table1Columns.equals(table2Columns)) {
// appendToFile(answerLogPath, "【执行】"+""+showCreateTableSql+"】【验证】【表】【"+tableName+"】【✅】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】"+""+showCreateTableSql+"】【验证】【表】【"+tableName+"】【✅】");
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,stuSQL,totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,stuSQL,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
} else { } else {
appendToFile(answerLogPath, "【执行】 "+""+showCreateTableSql+"】【验证】【表】【"+tableName+"】【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 "+""+showCreateTableSql+"】【验证】【表】【"+tableName+"】【❌】");
SourceAndText studentScorePojo= calculateTotalScoreRate(stuSQL, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo= calculateTotalScoreRate(stuSQL, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
@@ -260,9 +263,9 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
// 正则表达式匹配表名 // 正则表达式匹配表名
Pattern pattern = Pattern.compile("INSERT INTO\\s+`?(\\w+)`?\\s*\\("); Pattern pattern = Pattern.compile("INSERT INTO\\s+`?(\\w+)`?\\s*\\(");
Matcher matcher = pattern.matcher(sql); Matcher matcher = pattern.matcher(sql);
appendToFile(answerLogPath, "答案语句: " + sql); // appendToFile(answerLogPath, "答案语句: " + sql);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: "); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: ");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql);
if (matcher.find()) { if (matcher.find()) {
String tableName = matcher.group(1).replace("`", ""); // 获取表名 String tableName = matcher.group(1).replace("`", ""); // 获取表名
// 匹配成功 // 匹配成功
@@ -283,8 +286,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
// judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "查找语句标准答案"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "查找语句标准答案");
// printResult(answerList,judgementStr); // printResult(answerList,judgementStr);
}catch (SQLException e) { }catch (SQLException e) {
appendToFile(answerLogPath, "答案表执行验证语句"+yanzheng+"时发生错误: " + e.getMessage()); // appendToFile(answerLogPath, "答案表执行验证语句"+yanzheng+"时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案表执行验证语句"+yanzheng+"时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案表执行验证语句"+yanzheng+"时发生错误: " + e.getMessage());
e.printStackTrace(); e.printStackTrace();
} }
} }
@@ -306,8 +309,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
// judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "学生语句答案"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "学生语句答案");
// printResult(answerListStu,judgementStr); // printResult(answerListStu,judgementStr);
} catch (SQLException e) { } catch (SQLException e) {
appendToFile(answerLogPath, "学生表执行验证语句"+yanzheng+"时发生错误: " + e.getMessage()); // appendToFile(answerLogPath, "学生表执行验证语句"+yanzheng+"时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "学生表执行验证语句"+yanzheng+"时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "学生表执行验证语句"+yanzheng+"时发生错误: " + e.getMessage());
} }
} }
boolean isEquivalent =false; boolean isEquivalent =false;
@@ -317,10 +320,16 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
} }
if (isEquivalent) { if (isEquivalent) {
appendToFile(answerLogPath, "【执行】"+""+yanzheng+"】【验证】【表】【"+tableName+"】【✅】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 "+""+yanzheng+"】【验证】【表】【"+tableName+"】【✅】");
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,stuSql,totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,stuSql,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
} else { } else {
appendToFile(answerLogPath, "【执行】"+""+yanzheng+"】【验证】【表】【"+tableName+"】【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 "+""+yanzheng+"】【验证】【表】【"+tableName+"】【❌】");
SourceAndText studentScorePojo= calculateTotalScoreRate(stuSql, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo= calculateTotalScoreRate(stuSql, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
@@ -331,10 +340,9 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
if (sql.trim().toUpperCase().startsWith("DELETE")) { if (sql.trim().toUpperCase().startsWith("DELETE")) {
appendToFile(answerLogPath, "==================删除语句=================="); appendToFile(answerLogPath, "==================删除语句==================");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "==================删除语句=================="); judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "==================删除语句==================");
// appendToFile(answerLogPath, "答案语句: " + sql);
appendToFile(answerLogPath, "答案语句: " + sql); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: ");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: "); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql);
sql = sql.trim().replaceAll(";+\\s*$", ""); sql = sql.trim().replaceAll(";+\\s*$", "");
// 正则提取表名和 WHERE 条件 // 正则提取表名和 WHERE 条件
Pattern pattern = Pattern.compile("DELETE\\s+FROM\\s+(\\w+)\\s+WHERE\\s+(.+)", Pattern.CASE_INSENSITIVE); Pattern pattern = Pattern.compile("DELETE\\s+FROM\\s+(\\w+)\\s+WHERE\\s+(.+)", Pattern.CASE_INSENSITIVE);
@@ -366,35 +374,39 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
int countstu = rsstu.getInt(1); int countstu = rsstu.getInt(1);
if (countstu == 0) { if (countstu == 0) {
//累加删除语句的所有权值 examQuestionKeywords累加scorerate //累加删除语句的所有权值 examQuestionKeywords累加scorerate
appendToFile(answerLogPath, "验证通过:符合 DELETE 条件的记录已删除。"); // appendToFile(answerLogPath, "验证通过:符合 DELETE 条件的记录已删除。");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "验证通过:符合 DELETE 条件的记录已删除。"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "验证通过:符合 DELETE 条件的记录已删除。");
appendToFile(answerLogPath, "【执行】 "+""+verifySql+"】 【验证】 【表】 【"+tableName+"】【✅】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 "+""+verifySql+"】 【验证】 【表】 【"+tableName+"】【✅】");
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql,totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
} else { } else {
appendToFile(answerLogPath, "【执行】 "+""+verifySql+"】 【验证】 【表】 【"+tableName+"】【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 "+""+verifySql+"】 【验证】 【表】 【"+tableName+"】【❌】");
SourceAndText studentScorePojo= calculateTotalScoreRate(null, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo= calculateTotalScoreRate(null, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
} }
} }
}catch (SQLException e) { }catch (SQLException e) {
appendToFile(answerLogPath, "验证学生库失败,"+"得分0"); appendToFile(answerLogPath, "验证学生库失败,"+"得分0【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "验证学生库失败,"+"得分0"); judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "验证学生库失败,"+"得分0【❌】");
} }
} }
} else { } else {
appendToFile(answerLogPath, "验证答案库失败:还有 " + count + " 条记录符合 DELETE 条件,未被删除。"+"得分0 ❌"); // appendToFile(answerLogPath, "验证答案库失败:还有 " + count + " 条记录符合 DELETE 条件,未被删除。"+"得分0 【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "验证答案库失败:还有 " + count + "条记录符合 DELETE 条件未被删除。得分0 "); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "验证答案库失败:还有 " + count + "条记录符合 DELETE 条件未被删除。得分0 【❌】");
} }
} }
} catch (SQLException e) { } catch (SQLException e) {
appendToFile(answerLogPath, "执行验证 SQL 出错!"); // appendToFile(answerLogPath, "执行验证 SQL 出错!");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行验证 SQL 出错!"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行验证 SQL 出错!");
e.printStackTrace(); e.printStackTrace();
} }
@@ -405,14 +417,25 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
if (sql.trim().toUpperCase().startsWith("UPDATE")) { if (sql.trim().toUpperCase().startsWith("UPDATE")) {
appendToFile(answerLogPath, "==================更新语句=================="); appendToFile(answerLogPath, "==================更新语句==================");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "==================更新语句=================="); judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "==================更新语句==================");
appendToFile(answerLogPath, "答案语句: " + sql); //提取表名
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: "); // appendToFile(answerLogPath, "答案语句: " + sql);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: ");
// judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql);
// 匹配成功 // 匹配成功
String answerId = examQuestionAnswer.getAnswerId(); String answerId = examQuestionAnswer.getAnswerId();
List<ExamMysqlKeyword> examMysqlKeywordList= examMysqlKeywordMapper.selectListByAnswerId(answerId); List<ExamMysqlKeyword> examMysqlKeywordList= examMysqlKeywordMapper.selectListByAnswerId(answerId);
//转换成select语句 //转换成select语句
String selectSql = convertUpdateToSelectWhere(sql); String selectSql = convertUpdateToSelectWhere(sql);
// 提取表名和 WHERE 子句
Pattern pattern = Pattern.compile(
"UPDATE\\s+`?(\\w+)`?\\s+SET\\s+.+?\\s+WHERE\\s+(.+);?",
Pattern.CASE_INSENSITIVE | Pattern.DOTALL
);
Matcher matcher = pattern.matcher(sql);
if (matcher.find()) {
String tableName = matcher.group(1);
List<List<String>> answerList= new ArrayList<>(); List<List<String>> answerList= new ArrayList<>();
List<List<String>> answerListStu = new ArrayList<>(); List<List<String>> answerListStu = new ArrayList<>();
@@ -424,8 +447,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
// judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "查找语句标准答案"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "查找语句标准答案");
// printResult(answerList,judgementStr); // printResult(answerList,judgementStr);
}catch (SQLException e) { }catch (SQLException e) {
appendToFile(answerLogPath, "答案表执行验证语句"+selectSql+"时发生错误: " + e.getMessage()); // appendToFile(answerLogPath, "答案表执行验证语句"+selectSql+"时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案表执行验证语句"+selectSql+"时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案表执行验证语句"+selectSql+"时发生错误: " + e.getMessage());
e.printStackTrace(); e.printStackTrace();
} }
} }
@@ -448,8 +471,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
// judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "学生语句答案:"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "学生语句答案:");
// printResult(answerListStu,judgementStr); // printResult(answerListStu,judgementStr);
} catch (SQLException e) { } catch (SQLException e) {
appendToFile(answerLogPath, "学生表执行验证语句"+selectSql+"时发生错误:" + e.getMessage()); // appendToFile(answerLogPath, "学生表执行验证语句"+selectSql+"时发生错误:" + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "学生表执行验证语句"+selectSql+"时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "学生表执行验证语句"+selectSql+"时发生错误: " + e.getMessage());
} }
@@ -461,17 +484,21 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
} }
// //
if (isEquivalent) { if (isEquivalent) {
appendToFile(answerLogPath, "【执行】 "+""+selectSql+"】【验证】【表】【"+tableName+"】【✅】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 "+""+selectSql+"】【验证】【表】【"+tableName+"】【✅】");
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,stuSql,totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,stuSql,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
} else { } else {
appendToFile(answerLogPath, "【执行】 "+""+selectSql+"】【验证】【表】【"+tableName+"】【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 "+""+selectSql+"】【验证】【表】【"+tableName+"】【❌】");
SourceAndText studentScorePojo= calculateTotalScoreRate(stuSql, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo= calculateTotalScoreRate(stuSql, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
} }
}
} }
if (sql.trim().toUpperCase().startsWith("SELECT")) { if (sql.trim().toUpperCase().startsWith("SELECT")) {
appendToFile(answerLogPath, "==================查找语句=================="); appendToFile(answerLogPath, "==================查找语句==================");
@@ -480,12 +507,12 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
String answerId = examQuestionAnswer.getAnswerId(); String answerId = examQuestionAnswer.getAnswerId();
List<ExamMysqlKeyword> examMysqlKeywordList= examMysqlKeywordMapper.selectListByAnswerId(answerId); List<ExamMysqlKeyword> examMysqlKeywordList= examMysqlKeywordMapper.selectListByAnswerId(answerId);
appendToFile(answerLogPath, "答案语句: " + sql); // appendToFile(answerLogPath, "答案语句: " + sql);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: "); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: ");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql);
AtomicReference<String> stuAnswer = new AtomicReference<>(); AtomicReference<String> stuAnswer = new AtomicReference<>();
AtomicReference<String> fileName= new AtomicReference<>();
// 根据sql 的内容查询结果文件夹语句的文件名,再根据文件名 查找 考生 // 根据sql 的内容查询结果文件夹语句的文件名,再根据文件名 查找 考生
try { try {
String finalSql = sql; String finalSql = sql;
@@ -499,6 +526,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
if (normalizedFinalSql.equals(normalizedFileContent)) { if (normalizedFinalSql.equals(normalizedFileContent)) {
String stuPath=fileStu+"\\"+filePaths.getFileName(); String stuPath=fileStu+"\\"+filePaths.getFileName();
fileName.set(String.valueOf(filePaths.getFileName()));
stuAnswer.set(readSQLFromFile(stuPath)); stuAnswer.set(readSQLFromFile(stuPath));
System.out.println("考生语句"+stuAnswer); System.out.println("考生语句"+stuAnswer);
} }
@@ -519,12 +547,12 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
Statement stmtan = connanswer.createStatement()) { Statement stmtan = connanswer.createStatement()) {
try (ResultSet answer = stmtan.executeQuery(sql)) { try (ResultSet answer = stmtan.executeQuery(sql)) {
answerList = getAnswerList(answer); answerList = getAnswerList(answer);
appendToFile(answerLogPath, "运行标准答案语句的查询结果:"); // appendToFile(answerLogPath, "运行标准答案语句的查询结果:");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "运行标准答案语句的查询结果:"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "运行标准答案语句的查询结果:");
judgementStr = printResult(answerList,judgementStr); // judgementStr = printResult(answerList,judgementStr);
}catch (SQLException e) { }catch (SQLException e) {
appendToFile(answerLogPath, "执行验证语句"+sql+"时发生错误: " + e.getMessage()); // appendToFile(answerLogPath, "执行验证语句"+sql+"时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行验证语句"+sql+"时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行验证语句"+sql+"时发生错误: " + e.getMessage());
e.printStackTrace(); e.printStackTrace();
} }
} }
@@ -532,20 +560,20 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
Statement stmtstu = connstu.createStatement()) { Statement stmtstu = connstu.createStatement()) {
if (StringUtils.isBlank(stuAnswer.get())) { if (StringUtils.isBlank(stuAnswer.get())) {
SourceAndText sourceAndTextError = new SourceAndText(); SourceAndText sourceAndTextError = new SourceAndText();
appendToFile(answerLogPath, "考生SQL文件丢失或未作答无法评分得分0.0"); appendToFile(answerLogPath, "考生SQL文件丢失或未作答无法评分得分0.0【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考生SQL文件丢失或未作答无法评分得分0.0"); judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考生SQL文件丢失或未作答无法评分得分0.0【❌】");
sourceAndTextError.setText(judgementStr); sourceAndTextError.setText(judgementStr);
sourceAndTextError.setScore(0.0); sourceAndTextError.setScore(0.0);
continue; continue;
} }
try (ResultSet answer = stmtstu.executeQuery(String.valueOf(stuAnswer))) { try (ResultSet answer = stmtstu.executeQuery(String.valueOf(stuAnswer))) {
answerListStu = getAnswerList(answer); answerListStu = getAnswerList(answer);
appendToFile(answerLogPath, "运行学生语句的查询结果:"); // appendToFile(answerLogPath, "运行学生语句的查询结果:");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "运行学生语句的查询结果:"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "运行学生语句的查询结果:");
judgementStr= printResult(answerListStu,judgementStr); // judgementStr= printResult(answerListStu,judgementStr);
} catch (SQLException e) { } catch (SQLException e) {
appendToFile(answerLogPath, "执行学生语句"+String.valueOf(stuAnswer)+"时发生错误: " + e.getMessage()); // appendToFile(answerLogPath, "执行学生语句"+String.valueOf(stuAnswer)+"时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行学生语句"+String.valueOf(stuAnswer)+"时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行学生语句"+String.valueOf(stuAnswer)+"时发生错误: " + e.getMessage());
} }
} }
@@ -556,12 +584,16 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
} }
if (isEquivalent) { if (isEquivalent) {
appendToFile(answerLogPath, "执行"+sql+"验证文件【"+fileName.get()+"】【✅】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"执行"+sql+"验证文件【"+fileName.get()+"】【✅】");
//todo 得分 //todo 得分
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,String.valueOf(stuAnswer),totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,String.valueOf(stuAnswer),totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
} else { } else {
appendToFile(answerLogPath, "执行"+sql+"验证文件【"+fileName.get()+"】【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"执行"+sql+"验证文件【"+fileName.get()+"】【❌】");
SourceAndText studentScorePojo= calculateTotalScoreRate(String.valueOf(stuAnswer), examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo= calculateTotalScoreRate(String.valueOf(stuAnswer), examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
@@ -577,23 +609,21 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
// 匹配成功 // 匹配成功
String answerId = examQuestionAnswer.getAnswerId(); String answerId = examQuestionAnswer.getAnswerId();
List<ExamMysqlKeyword> examMysqlKeywordList= examMysqlKeywordMapper.selectListByAnswerId(answerId); List<ExamMysqlKeyword> examMysqlKeywordList= examMysqlKeywordMapper.selectListByAnswerId(answerId);
appendToFile(answerLogPath, "答案语句: " + sql); // appendToFile(answerLogPath, "答案语句: " + sql);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: "); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: ");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql);
// 正则表达式,用于匹配 "VIEW" 后面的视图名称 // 正则表达式,用于匹配 "VIEW" 后面的视图名称
String regex = "(?<=VIEW\\s)([\\w`_]+)"; String regex = "(?i)VIEW\\s+((`?\\w+`?\\.)?`?\\w+`?)";
String sqlviewAnswer = removeComments(sql); String sqlviewAnswer = removeComments(sql);
String viewNam1 = extractViewName(sqlviewAnswer, regex); String viewNam1 = extractViewName(sqlviewAnswer, regex);
String showCreateViewSql = "SHOW CREATE VIEW " + viewNam1; String showCreateViewSql = "SHOW CREATE VIEW " + viewNam1;
// 执行查询,获取答案 视图的结果 // 执行查询,获取答案 视图的结果
appendToFile(answerLogPath, "执行正确答案视图语句的查询结果:"); // appendToFile(answerLogPath, "执行正确答案视图语句的查询结果:");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行正确答案视图语句的查询结果:"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行正确答案视图语句的查询结果:");
String sql3 = "SELECT * FROM " + viewNam1; String sql3 = "SELECT * FROM " + viewNam1;
List<List<String>> result1 = executeQuery(stmt, sql3); List<List<String>> result1 = executeQuery(stmt, sql3);
judgementStr= printResult(result1,judgementStr); // judgementStr= printResult(result1,judgementStr);
List<List<String>> result2 =new ArrayList<>(); List<List<String>> result2 =new ArrayList<>();
String stuSQL =null; String stuSQL =null;
@@ -608,40 +638,54 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
stuSQL=createViewSqlExport; stuSQL=createViewSqlExport;
} }
}catch (SQLException e) { }catch (SQLException e) {
appendToFile(answerLogPath, "执行学生语句"+showCreateViewSql+"时发生错误: " + e.getMessage()); // appendToFile(answerLogPath, "执行学生语句"+showCreateViewSql+"时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行学生语句"+showCreateViewSql+"时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行学生语句"+showCreateViewSql+"时发生错误: " + e.getMessage());
hasError = true; // 发生异常,设为 true hasError = true; // 发生异常,设为 true
} }
// 执行查询,获取考生 视图的结果 // 执行查询,获取考生 视图的结果
appendToFile(answerLogPath, "执行考生视图语句的查询结果:"); // appendToFile(answerLogPath, "执行考生视图语句的查询结果:");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行考生视图语句的查询结果:"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行考生视图语句的查询结果:");
try { try {
result2 = executeQuery(stmtstu, sql3); result2 = executeQuery(stmtstu, sql3);
} catch (SQLException e) { } catch (SQLException e) {
appendToFile(answerLogPath, "执行学生语句"+sql3+"时发生错误: " + e.getMessage()); // appendToFile(answerLogPath, "执行学生语句"+sql3+"时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行学生语句"+sql3+"时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行学生语句"+sql3+"时发生错误: " + e.getMessage());
hasError = true; // 发生异常,设为 true hasError = true; // 发生异常,设为 true
} }
judgementStr= printResult(result2,judgementStr); // judgementStr= printResult(result2,judgementStr);
}
if (result1!=null&&result1.size()>0){
if (result2!=null&&result2.size()>0){
if (result1.size()==result2.size()){
appendToFile(answerLogPath, "【记录数】【"+result1.size()+"】【✅】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【记录数】【"+result1.size()+"】【✅】");
}
}else {
appendToFile(answerLogPath, "【记录数】【"+result1.size()+"】【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【记录数】【"+result1.size()+"】❌");
}
} }
// 比较两个视图的结果 // 比较两个视图的结果
boolean isEquivalent =!hasError &&compareResults(result1, result2); boolean isEquivalent =!hasError &&compareResults(result1, result2);
appendToFile(answerLogPath, "\n是否结果等价: " + isEquivalent); // appendToFile(answerLogPath, "\n是否结果等价: " + isEquivalent);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "\n是否结果等价: " + isEquivalent); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "\n是否结果等价: " + isEquivalent);
if (isEquivalent) { if (isEquivalent) {
appendToFile(answerLogPath, "【执行】"+""+showCreateViewSql+"】【验证】【视图】【"+viewNam1+"】 ✅");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】"+""+showCreateViewSql+"】【验证】【视图】【"+viewNam1+"】【✅】");
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,stuSQL,totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,stuSQL,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
} else { } else {
appendToFile(answerLogPath, "【执行】 "+""+showCreateViewSql+"】【验证】【视图】【"+viewNam1+"】【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】"+""+showCreateViewSql+"】【验证】【视图】【"+viewNam1+"】【❌】");
SourceAndText studentScorePojo= calculateTotalScoreRate(stuSQL, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo= calculateTotalScoreRate(stuSQL, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
@@ -658,13 +702,13 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
appendToFile(answerLogPath, "==================储存过程=================="); appendToFile(answerLogPath, "==================储存过程==================");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "==================储存过程=================="); judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "==================储存过程==================");
appendToFile(answerLogPath, "答案语句: " + sql); // appendToFile(answerLogPath, "答案语句: " + sql);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: "); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: ");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql);
AtomicReference<String> stuAnswer = new AtomicReference<>(); AtomicReference<String> stuAnswer = new AtomicReference<>();
AtomicReference<String> fileName = new AtomicReference<>();
// 根据sql 的内容查询结果文件夹语句的文件名,再根据文件名 查找 考生 // 根据sql 的内容查询结果文件夹语句的文件名,再根据文件名 查找 考生
try { try {
String finalSql = sql; String finalSql = sql;
@@ -679,6 +723,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
String stuPath=fileStu+"\\"+filePaths.getFileName(); String stuPath=fileStu+"\\"+filePaths.getFileName();
stuAnswer.set(readSQLFromFile(stuPath)); stuAnswer.set(readSQLFromFile(stuPath));
fileName.set(String.valueOf(filePaths.getFileName()));
System.out.println("考生语句"+stuAnswer); System.out.println("考生语句"+stuAnswer);
} }
} catch (Exception e) { } catch (Exception e) {
@@ -703,23 +748,23 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
if (extractCallStatements != null && extractCallStatements.size() > 0) { if (extractCallStatements != null && extractCallStatements.size() > 0) {
boolean hasError = false; // 添加标志变量 boolean hasError = false; // 添加标志变量
for (String extractCallStatement : extractCallStatements) { for (String extractCallStatement : extractCallStatements) {
appendToFile(answerLogPath, "测试 call 语句:" + extractCallStatement); // appendToFile(answerLogPath, "测试 call 语句:" + extractCallStatement);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "测试 call 语句:" + extractCallStatement); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "测试 call 语句:" + extractCallStatement);
try { try {
ResultSet newResult = stmt.executeQuery(extractCallStatement); ResultSet newResult = stmt.executeQuery(extractCallStatement);
anwerResults.addAll(extractResults(newResult)); anwerResults.addAll(extractResults(newResult));
} catch (SQLException e) { } catch (SQLException e) {
appendToFile(answerLogPath, "执行标准库 SQL CALL 语句时发生错误: " + e.getMessage()); // appendToFile(answerLogPath, "执行标准库 SQL CALL 语句时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行标准库 SQL CALL 语句时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行标准库 SQL CALL 语句时发生错误: " + e.getMessage());
} }
try (Connection connstu = DriverManager.getConnection(stuDbUrl, user, password); try (Connection connstu = DriverManager.getConnection(stuDbUrl, user, password);
Statement stmtstu = connstu.createStatement()) { Statement stmtstu = connstu.createStatement()) {
if (StringUtils.isBlank(stuAnswer.get())) { if (StringUtils.isBlank(stuAnswer.get())) {
SourceAndText sourceAndTextError = new SourceAndText(); SourceAndText sourceAndTextError = new SourceAndText();
appendToFile(answerLogPath, "考生SQL文件丢失或未作答无法评分得分0.0"); appendToFile(answerLogPath, "考生SQL文件丢失或未作答无法评分得分0.0【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考生SQL文件丢失或未作答无法评分得分0.0"); judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考生SQL文件丢失或未作答无法评分得分0.0【❌】");
sourceAndTextError.setText(judgementStr); sourceAndTextError.setText(judgementStr);
sourceAndTextError.setScore(0.0); sourceAndTextError.setScore(0.0);
continue; continue;
@@ -730,8 +775,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
ResultSet oldResult = stmtstu.executeQuery(extractCallStatement); ResultSet oldResult = stmtstu.executeQuery(extractCallStatement);
stuResults.addAll(extractResults(oldResult)); stuResults.addAll(extractResults(oldResult));
} catch (SQLException e) { } catch (SQLException e) {
appendToFile(answerLogPath, "执行学生库 SQL CALL 语句时发生错误: " + e.getMessage()); // appendToFile(answerLogPath, "执行学生库 SQL CALL 语句时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行学生库 SQL CALL 语句时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行学生库 SQL CALL 语句时发生错误: " + e.getMessage());
hasError = true; // 发生异常,设为 true hasError = true; // 发生异常,设为 true
} }
} }
@@ -739,16 +784,21 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
} }
// 比较结果(如果发生异常,可以认为比较失败) // 比较结果(如果发生异常,可以认为比较失败)
MysqlBooleanVo mysqlBooleanVo = compareExtractResults(anwerResults, stuResults,judgementStr); MysqlBooleanVo mysqlBooleanVo = compareExtractResults(anwerResults, stuResults,judgementStr);
judgementStr=mysqlBooleanVo.getText(); // judgementStr=mysqlBooleanVo.getText();
boolean flag= !hasError &&mysqlBooleanVo.isFlag(); boolean flag= !hasError &&mysqlBooleanVo.isFlag();
if (flag) { if (flag) {
//todo 得分 //todo 得分
appendToFile(answerLogPath, "【执行】"+extractCallStatements+"【验证】【文件】【"+fileName.get()+"】【✅】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"【执行】"+extractCallStatements+"【验证】【文件】 【"+fileName.get()+"】【✅】");
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,stuAnswer.get(),totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,stuAnswer.get(),totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
} else { } else {
appendToFile(answerLogPath, "【执行】"+extractCallStatements+"【验证】【文件】【"+fileName.get()+"】【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"【执行】"+extractCallStatements+"【验证】【文件】【"+fileName.get()+"】【❌】");
//得分 //得分
SourceAndText studentScorePojo = calculateTotalScoreRate(stuAnswer.get(), examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal,judgementStr); SourceAndText studentScorePojo = calculateTotalScoreRate(stuAnswer.get(), examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
@@ -767,13 +817,13 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
String answerId = examQuestionAnswer.getAnswerId(); String answerId = examQuestionAnswer.getAnswerId();
List<ExamMysqlKeyword> examMysqlKeywordList= examMysqlKeywordMapper.selectListByAnswerId(answerId); List<ExamMysqlKeyword> examMysqlKeywordList= examMysqlKeywordMapper.selectListByAnswerId(answerId);
appendToFile(answerLogPath, "答案语句: " + sql); // appendToFile(answerLogPath, "答案语句: " + sql);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: "); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: ");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql);
AtomicReference<String> stuAnswer = new AtomicReference<>(); AtomicReference<String> stuAnswer = new AtomicReference<>();
AtomicReference<String> fileName = new AtomicReference<>();
// 根据sql 的内容查询结果文件夹语句的文件名,再根据文件名 查找 考生 // 根据sql 的内容查询结果文件夹语句的文件名,再根据文件名 查找 考生
try { try {
String finalSql = sql; String finalSql = sql;
@@ -787,6 +837,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
if (normalizedFinalSql.equals(normalizedFileContent)) { if (normalizedFinalSql.equals(normalizedFileContent)) {
String stuPath=fileStu+"\\"+filePaths.getFileName(); String stuPath=fileStu+"\\"+filePaths.getFileName();
fileName.set(String.valueOf(filePaths.getFileName()));
stuAnswer.set(readSQLFromFile(stuPath)); stuAnswer.set(readSQLFromFile(stuPath));
System.out.println("考生语句"+stuAnswer); System.out.println("考生语句"+stuAnswer);
} }
@@ -822,8 +873,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
answerSQL = createTriggerSqlExport; answerSQL = createTriggerSqlExport;
} }
} catch (SQLException e) { } catch (SQLException e) {
appendToFile(answerLogPath, "执行答案语句" + showCreateTriggerSql + "时发生错误: " + e.getMessage()); // appendToFile(answerLogPath, "执行答案语句" + showCreateTriggerSql + "时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行答案语句" + showCreateTriggerSql + "时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行答案语句" + showCreateTriggerSql + "时发生错误: " + e.getMessage());
} }
@@ -832,8 +883,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
Statement stmtstu = connstu.createStatement()) { Statement stmtstu = connstu.createStatement()) {
if (StringUtils.isBlank(stuAnswer.get())) { if (StringUtils.isBlank(stuAnswer.get())) {
SourceAndText sourceAndTextError = new SourceAndText(); SourceAndText sourceAndTextError = new SourceAndText();
appendToFile(answerLogPath, "考生SQL文件丢失或未作答无法评分得分0.0"); appendToFile(answerLogPath, "考生SQL文件丢失或未作答无法评分得分0.0【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考生SQL文件丢失或未作答无法评分得分0.0"); judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考生SQL文件丢失或未作答无法评分得分0.0【❌】");
sourceAndTextError.setText(judgementStr); sourceAndTextError.setText(judgementStr);
sourceAndTextError.setScore(0.0); sourceAndTextError.setScore(0.0);
continue; continue;
@@ -844,8 +895,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
stuSQL = createTriggerSqlExport; stuSQL = createTriggerSqlExport;
} }
} catch (SQLException e) { } catch (SQLException e) {
appendToFile(answerLogPath, "执行学生语句" + showCreateTriggerSql + "时发生错误: " + e.getMessage()); // appendToFile(answerLogPath, "执行学生语句" + showCreateTriggerSql + "时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行学生语句" + showCreateTriggerSql + "时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行学生语句" + showCreateTriggerSql + "时发生错误: " + e.getMessage());
hasError = true; // 发生异常,设为 true hasError = true; // 发生异常,设为 true
} }
} }
@@ -876,6 +927,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
boolean equals = normalizedTriggerSql1.equals(normalizedTriggerSql2); boolean equals = normalizedTriggerSql1.equals(normalizedTriggerSql2);
if (equals) { if (equals) {
appendToFile(answerLogPath, "【文件】 【"+fileName.get()+"】【✅】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"【文件】 【"+fileName.get()+"】【✅】");
//todo 得分 //todo 得分
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, stuAnswer.get(), totalKeyScore, score, answerId, scoreTotal,judgementStr); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, stuAnswer.get(), totalKeyScore, score, answerId, scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
@@ -883,6 +936,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
} }
else { else {
appendToFile(answerLogPath, "【文件】 【"+fileName.get()+"】【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"【文件】 【"+fileName.get()+"】【❌】");
SourceAndText studentScorePojo = calculateTotalScoreRate(stuAnswer.get(), examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal,judgementStr); SourceAndText studentScorePojo = calculateTotalScoreRate(stuAnswer.get(), examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
@@ -890,6 +945,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
} }
else { else {
appendToFile(answerLogPath, "【文件】 【"+fileName.get()+"】【❌】");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"【文件】 【"+fileName.get()+"】【❌】");
SourceAndText studentScorePojo = calculateTotalScoreRate(stuAnswer.get(), examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal,judgementStr); SourceAndText studentScorePojo = calculateTotalScoreRate(stuAnswer.get(), examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
@@ -901,14 +958,25 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
if (sql.trim().toUpperCase().startsWith("ALTER TABLE")) { if (sql.trim().toUpperCase().startsWith("ALTER TABLE")) {
appendToFile(answerLogPath, "=================修改表语句=================="); appendToFile(answerLogPath, "=================修改表语句==================");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "==================修改表语句=================="); judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "==================修改表语句==================");
appendToFile(answerLogPath, "答案语句: " + sql); // appendToFile(answerLogPath, "答案语句: " + sql);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: "); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案语句: ");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sql);
// 匹配成功 // 匹配成功
String answerId = examQuestionAnswer.getAnswerId(); String answerId = examQuestionAnswer.getAnswerId();
List<ExamMysqlKeyword> examMysqlKeywordList= examMysqlKeywordMapper.selectListByAnswerId(answerId); List<ExamMysqlKeyword> examMysqlKeywordList= examMysqlKeywordMapper.selectListByAnswerId(answerId);
//转换成select语句 //转换成select语句
String selectSql = convertAlertToSelectWhere(sql); String selectSql = convertAlertToSelectWhere(sql);
// 正则提取表名和字段名(支持反引号)
Pattern pattern = Pattern.compile(
"ALTER\\s+TABLE\\s+`?(\\w+)`?\\s+MODIFY\\s+COLUMN\\s+`?(\\w+)`?",
Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(sql);
if (!matcher.find()) {
throw new IllegalArgumentException("无法解析 UPDATE 语句");
}
String tableName = matcher.group(1);
List<List<String>> answerList= new ArrayList<>(); List<List<String>> answerList= new ArrayList<>();
List<List<String>> answerListStu = new ArrayList<>(); List<List<String>> answerListStu = new ArrayList<>();
@@ -916,12 +984,12 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
Statement stmtan = connanswer.createStatement()) { Statement stmtan = connanswer.createStatement()) {
try (ResultSet answer = stmtan.executeQuery(selectSql)) { try (ResultSet answer = stmtan.executeQuery(selectSql)) {
answerList = getAnswerList(answer); answerList = getAnswerList(answer);
appendToFile(answerLogPath, "查找语句标准答案"); // appendToFile(answerLogPath, "查找语句标准答案");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "查找语句标准答案"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "查找语句标准答案");
printResult(answerList,judgementStr); printResult(answerList,judgementStr);
}catch (SQLException e) { }catch (SQLException e) {
appendToFile(answerLogPath, "答案表执行验证语句"+selectSql+"时发生错误: " + e.getMessage()); // appendToFile(answerLogPath, "答案表执行验证语句"+selectSql+"时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案表执行验证语句"+selectSql+"时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "答案表执行验证语句"+selectSql+"时发生错误: " + e.getMessage());
e.printStackTrace(); e.printStackTrace();
} }
} }
@@ -930,12 +998,12 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
Statement stmtstu = connstu.createStatement()) { Statement stmtstu = connstu.createStatement()) {
try (ResultSet answer = stmtstu.executeQuery(selectSql)) { try (ResultSet answer = stmtstu.executeQuery(selectSql)) {
answerListStu = getAnswerList(answer); answerListStu = getAnswerList(answer);
appendToFile(answerLogPath, "运行学生语句的查询结果:"); // appendToFile(answerLogPath, "运行学生语句的查询结果:");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "运行学生语句的查询结果:"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "运行学生语句的查询结果:");
judgementStr= printResult(answerListStu,judgementStr); // judgementStr= printResult(answerListStu,judgementStr);
} catch (SQLException e) { } catch (SQLException e) {
appendToFile(answerLogPath, "学生表执行验证语句"+selectSql+"时发生错误:" + e.getMessage()); // appendToFile(answerLogPath, "学生表执行验证语句"+selectSql+"时发生错误:" + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "学生表执行验证语句"+selectSql+"时发生错误: " + e.getMessage()); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "学生表执行验证语句"+selectSql+"时发生错误: " + e.getMessage());
} }
@@ -947,14 +1015,33 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
} }
// //
if (isEquivalent) { if (isEquivalent) {
appendToFile(answerLogPath, "【执行】 "+""+selectSql+"】 【验证】 【表】 【"+tableName+"】【✅】");
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql,totalKeyScore,score,answerId,scoreTotal,judgementStr); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore(); scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); judgementStr = studentScorePojo.getText();
} else { } else {
SourceAndText studentScorePojo= calculateTotalScoreRate(sql, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText(); if (answerListStu.size() >= 2) {
List<String> fieldMeta = answerListStu.get(0);
List<String> fieldValue = answerListStu.get(1);
Map<String, String> columnInfo = new HashMap<>();
for (int i = 0; i < fieldMeta.size() && i < fieldValue.size(); i++) {
columnInfo.put(fieldMeta.get(i), fieldValue.get(i));
}
String alterSQL = buildAlterFromShowColumn(tableName, columnInfo);
appendToFile(answerLogPath, "【执行】 "+""+selectSql+"】 【验证】 【表】 【"+tableName+"】【❌】");
SourceAndText studentScorePojo = calculateTotalScoreRate(alterSQL, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
}
} }
@@ -974,7 +1061,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
} }
} }
appendToFile(answerLogPath, "共得分:" + String.format("%.2f", scoreTotal)); appendToFile(answerLogPath, "共得分:" + String.format("%.2f", scoreTotal));
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "共得分:" + String.format("%.2f", scoreTotal)); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "共得分:" + String.format("%.2f", scoreTotal));
folderzip.delete(); folderzip.delete();
deleteFolder(folder); deleteFolder(folder);
//todo 删除学生答题的数据库连接 单独写一个接口 //todo 删除学生答题的数据库连接 单独写一个接口
@@ -1000,6 +1087,31 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
return null; return null;
} }
public static String buildAlterFromShowColumn(String tableName, Map<String, String> columnInfo) {
String field = columnInfo.get("Field");
String type = columnInfo.get("Type");
String isNull = columnInfo.get("Null");
String defaultVal = columnInfo.get("Default");
StringBuilder sb = new StringBuilder("ALTER TABLE ");
sb.append(tableName).append(" MODIFY COLUMN ").append(field).append(" ").append(type);
if ("YES".equalsIgnoreCase(isNull)) {
sb.append(" NULL");
} else {
sb.append(" NOT NULL");
}
if (defaultVal != null && !"".equals(defaultVal)) {
sb.append(" DEFAULT '").append(defaultVal).append("'");
} else {
sb.append(" DEFAULT NULL");
}
sb.append(";");
return sb.toString();
}
@Override @Override
public void delMysqlConnect(List<String> tNames) { public void delMysqlConnect(List<String> tNames) {
@@ -1141,8 +1253,8 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
private SourceAndText accumulateScoreAndLog(List<ExamMysqlKeyword> examMysqlKeywordList, AtomicInteger total, String answerLogPath, String sql2, String totalKeyScore, double score,String answerId,double scoreTotal,String judgementStr) { private SourceAndText accumulateScoreAndLog(List<ExamMysqlKeyword> examMysqlKeywordList, AtomicInteger total, String answerLogPath, String sql2, String totalKeyScore, double score,String answerId,double scoreTotal,String judgementStr) {
SourceAndText sourceAndText = new SourceAndText(); SourceAndText sourceAndText = new SourceAndText();
if(StringUtils.isBlank(answerId)){ if(StringUtils.isBlank(answerId)){
appendToFile(answerLogPath, "该语句找不到试题id请检查出题内容" ); appendToFile(answerLogPath, "该语句找不到试题id请检查出题内容");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "该语句找不到试题id请检查出题内容"); judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "该语句找不到试题id请检查出题内容");
sourceAndText.setText(judgementStr); sourceAndText.setText(judgementStr);
sourceAndText.setScore(0.0); sourceAndText.setScore(0.0);
//返回累加的总分 //返回累加的总分
@@ -1167,21 +1279,21 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
String[] lines = sql2.split("\\r?\\n"); String[] lines = sql2.split("\\r?\\n");
// 开头:✅学生语句: // // 开头:✅学生语句:
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "✅学生语句:"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "✅学生语句:");
// 第一行直接加在后面 // // 第一行直接加在后面
if (lines.length > 0) { // if (lines.length > 0) {
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, StringEscapeUtils.escapeHtml4(lines[0])); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, StringEscapeUtils.escapeHtml4(lines[0]));
} // }
//
// 后续行添加换行和缩进 // // 后续行添加换行和缩进
for (int i = 1; i < lines.length; i++) { // for (int i = 1; i < lines.length; i++) {
judgementStr = HtmlAppender.appendHtmlLine(judgementStr," "+ StringEscapeUtils.escapeHtml4(lines[i].trim())); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr," "+ StringEscapeUtils.escapeHtml4(lines[i].trim()));
} // }
// 最终加入 judgementStr // 最终加入 judgementStr
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,",正确,语句得分权值"+scoreRateStr + ",得分" + singleScore); judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"语句得分权值】:【"+scoreRateStr + "】,【得分】【" + singleScore+"");
// judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "✅学生语句" + sql2 + "正确,语句得分权值:" + scoreRateStr + ",得分" + singleScore); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "✅学生语句" + sql2 + "正确,语句得分权值:" + scoreRateStr + ",得分" + singleScore);
appendToFile(answerLogPath, "✅学生语句" + sql2 + "正确,语句得分权值" + scoreRateStr + ",得分" + singleScore); appendToFile(answerLogPath, "语句得分权值】:【"+scoreRateStr + "】,【得分】【" + singleScore+"");
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
System.err.println("无效的totalKeyScore值" + totalKeyScore); System.err.println("无效的totalKeyScore值" + totalKeyScore);
} }
@@ -1263,8 +1375,23 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
public SourceAndText calculateTotalScoreRate(String sql, List<ExamMysqlKeyword> examQuestionKeywords, String totalKeyScore, double score,String answerId,double scoreTotal,String judgementStr) { public SourceAndText calculateTotalScoreRate(String sql, List<ExamMysqlKeyword> examQuestionKeywords, String totalKeyScore, double score,String answerId,double scoreTotal,String judgementStr) {
SourceAndText sourceAndText = new SourceAndText(); SourceAndText sourceAndText = new SourceAndText();
if(StringUtils.isBlank(answerId) ||StringUtils.isBlank(sql)){ if(StringUtils.isBlank(answerId) ||StringUtils.isBlank(sql)){
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌该语句未作答得分0.0");
appendToFile(answerLogPath, "❌该语句未作答得分0.0"); if (examQuestionKeywords!=null&&examQuestionKeywords.size()>0){
for (ExamMysqlKeyword keyword : examQuestionKeywords) {
String keywordValue = keyword.getKeyword();
if (keywordValue != null && !keywordValue.isEmpty() ) {
// 使用正则,确保是完整单词(字段)匹配
String regex = keywordValue;
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"【关键字】 【"+regex+""+"【❌】");
appendToFile(answerLogPath,"【关键字】 【"+regex+""+"【❌】");
}
}
}else {
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"该语句未设置关键字!");
appendToFile(answerLogPath,"该语句未设置关键字!");
}
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "该语句未作答得分0.0 【❌】");
appendToFile(answerLogPath, "该语句未作答得分0.0 【❌】");
sourceAndText.setText(judgementStr); sourceAndText.setText(judgementStr);
sourceAndText.setScore(0.0); sourceAndText.setScore(0.0);
//返回累加的总分 //返回累加的总分
@@ -1273,8 +1400,6 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
//用answerid查对应答案的权值 。除以总权值 //用answerid查对应答案的权值 。除以总权值
String scoreRateStr= examQuestionAnswerMapper.selectExamQuestionAnswerScoreByAnswerId(answerId); String scoreRateStr= examQuestionAnswerMapper.selectExamQuestionAnswerScoreByAnswerId(answerId);
// 解析权值 // 解析权值
double scoreRate = 0.0; double scoreRate = 0.0;
double totalKey = 0.0; double totalKey = 0.0;
@@ -1306,11 +1431,15 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
if (sql.contains(regex)) { if (sql.contains(regex)) {
try { try {
totalScoreRate += Integer.parseInt(keyword.getScoreRate()); totalScoreRate += Integer.parseInt(keyword.getScoreRate());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"【关键字】 【"+regex+""+"【✅】");
appendToFile(answerLogPath,"【关键字】 【"+regex+""+"【✅】");
matchedKeywords.add(keywordValue); matchedKeywords.add(keywordValue);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
System.err.println("Invalid scoreRate format for keyword: " + keywordValue); System.err.println("Invalid scoreRate format for keyword: " + keywordValue);
} }
}else {
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"【关键字】 【"+regex+""+"【❌】");
appendToFile(answerLogPath,"【关键字】 【"+regex+""+"【❌】");
} }
} }
} }
@@ -1334,22 +1463,27 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
String[] lines = sql.split("\\r?\\n"); String[] lines = sql.split("\\r?\\n");
// 开头:学生语句: // 开头:学生语句:
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌学生语句:"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌学生语句:");
// 第一行直接加在后面 // // 第一行直接加在后面
if (lines.length > 0) { // if (lines.length > 0) {
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, StringEscapeUtils.escapeHtml4(lines[0])); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, StringEscapeUtils.escapeHtml4(lines[0]));
} // }
// 后续行添加换行和缩进 // 后续行添加换行和缩进
for (int i = 1; i < lines.length; i++) { // for (int i = 1; i < lines.length; i++) {
judgementStr = HtmlAppender.appendHtmlLine(judgementStr," "+StringEscapeUtils.escapeHtml4(lines[i].trim())); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr," "+StringEscapeUtils.escapeHtml4(lines[i].trim()));
} // }
// 最终加入 judgementStr // 最终加入 judgementStr
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,",不正确,语句权值"+scoreRateStr+",关键权值"+totalKeyScoreInt+",答对得分点为:"+matchedKeywords+",答对关键得分权值"+ totalScoreRate+ ",得分" + finalRoundedScore); judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"语句权值】:【"+scoreRateStr+"】,【关键权值】:【"+totalKeyScoreInt+"");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr,"【答对关键得分权值】:【"+ totalScoreRate+ "】,【语句得分】:【" + finalRoundedScore+"");
// judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌语句"+sql+"不正确,语句权值:"+scoreRateStr+",关键权值:"+totalKeyScoreInt+",答对得分点为:"+matchedKeywords+",答对关键得分权值"+ totalScoreRate+ ",得分" + finalRoundedScore); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌语句"+sql+"不正确,语句权值:"+scoreRateStr+",关键权值:"+totalKeyScoreInt+",答对得分点为:"+matchedKeywords+",答对关键得分权值"+ totalScoreRate+ ",得分" + finalRoundedScore);
appendToFile(answerLogPath,"❌语句"+sql+"不正确,语句权值:"+scoreRateStr+",关键权值:"+totalKeyScoreInt+",答对得分点为:"+matchedKeywords+",答对关键得分权值"+ totalScoreRate+ ",得分" + finalRoundedScore);
appendToFile(answerLogPath,"【语句权值】:【"+scoreRateStr+"】,【关键字权值】:【"+totalKeyScoreInt+"");
appendToFile(answerLogPath,"【答对关键得分权值】:【"+ totalScoreRate+ "】,【得分】:【" + finalRoundedScore+"");
// appendToFile(answerLogPath,"❌语句"+sql+"不正确,语句权值:"+scoreRateStr+",关键权值:"+totalKeyScoreInt+",答对得分点为:"+matchedKeywords+",答对关键得分权值"+ totalScoreRate+ ",得分" + finalRoundedScore);
sourceAndText.setText(judgementStr); sourceAndText.setText(judgementStr);
sourceAndText.setScore(finalRoundedScore); sourceAndText.setScore(finalRoundedScore);
//返回累加的总分 //返回累加的总分
@@ -1600,7 +1734,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
public static List<String> extractCallStatements(String sql) { public static List<String> extractCallStatements(String sql) {
List<String> callStatements = new ArrayList<>(); List<String> callStatements = new ArrayList<>();
Pattern callPattern = Pattern.compile("CALL\\s+\\w+\\s*\\([^;]*?\\);", Pattern.CASE_INSENSITIVE); Pattern callPattern = Pattern.compile("CALL\\s+\\w+\\s*\\([^\\)]*\\)\\s*;?", Pattern.CASE_INSENSITIVE);
Matcher matcher = callPattern.matcher(sql); Matcher matcher = callPattern.matcher(sql);
while (matcher.find()) { while (matcher.find()) {
@@ -1735,7 +1869,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService {
private static String readSQLFromFile(String filePath) throws IOException { private static String readSQLFromFile(String filePath) throws IOException {
File file = new File(filePath); File file = new File(filePath);
if (!file.exists()) { if (!file.exists()) {
throw new FileNotFoundException("找不到SQL文件" + filePath); throw new FileNotFoundException("找不到SQL文件" + filePath+"");
} }
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();

View File

@@ -71,7 +71,7 @@ public class FileServericeImpl implements IFileServerice {
double scoreRatio = totalScore == 0 ? 0 : (double) studentScore / totalScore; double scoreRatio = totalScore == 0 ? 0 : (double) studentScore / totalScore;
double roundedScoreRatio = Math.round(scoreRatio * 100.0) / 100.0; // 四舍五入到2位小数 double roundedScoreRatio = Math.round(scoreRatio * 100.0) / 100.0; // 四舍五入到2位小数
appendToFile(answerLogPath,"得分:"+roundedScoreRatio*score); appendToFile(answerLogPath,"得分:"+roundedScoreRatio*score);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "得分:"+roundedScoreRatio*score); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "得分:"+roundedScoreRatio*score);
sourceAndText.setScore(roundedScoreRatio*score); sourceAndText.setScore(roundedScoreRatio*score);
sourceAndText.setText(judgementStr); sourceAndText.setText(judgementStr);
return sourceAndText; return sourceAndText;