【修改】mysql判分明细改为对象属性

This commit is contained in:
YOHO\20373
2025-06-16 14:34:24 +08:00
parent dae4732061
commit c979ccd6d5

View File

@@ -314,11 +314,13 @@ public class MysqlServericeImpl implements IMysqlServerice {
String sql3 = resultStu.get(entry.getKey());
if (table1Columns.equals(table2Columns)) {
//
double sr= accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql3,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sr;
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql3,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
} else {
double sw= calculateTotalScoreRate(sql3, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sw;
SourceAndText studentScorePojo= calculateTotalScoreRate(sql2, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
}
}
@@ -354,11 +356,13 @@ public class MysqlServericeImpl implements IMysqlServerice {
boolean equals = sql1.equals(sql2);
if (equals) {
double sr=accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql2,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sr;
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql2,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
} else {
double sw= calculateTotalScoreRate(sql2, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sw;
SourceAndText studentScorePojo= calculateTotalScoreRate(sql2, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
}
@@ -414,11 +418,14 @@ public class MysqlServericeImpl implements IMysqlServerice {
//累加删除语句的所有权值 examQuestionKeywords累加scorerate
appendToFile(answerLogPath, "验证通过:符合 DELETE 条件的记录已删除。");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "验证通过:符合 DELETE 条件的记录已删除。");
double sr= accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql2,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sr;
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql2,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
} else {
double sw= calculateTotalScoreRate(sql2, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sw;
SourceAndText studentScorePojo= calculateTotalScoreRate(sql2, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
}
}
}catch (SQLException e) {
@@ -472,11 +479,17 @@ public class MysqlServericeImpl implements IMysqlServerice {
//
if (b) {
double sr= accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql2,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sr;
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql2,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
} else {
double sw= calculateTotalScoreRate(sql2, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sw;
SourceAndText studentScorePojo= calculateTotalScoreRate(sql2, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
}
@@ -510,7 +523,7 @@ public class MysqlServericeImpl implements IMysqlServerice {
answerList = getAnswerList(answer);
appendToFile(answerLogPath, "查找语句标准答案");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "查找语句标准答案");
printResult(answerList);
printResult(answerList,judgementStr);
}catch (SQLException e) {
appendToFile(answerLogPath, "执行验证语句"+sql1+"时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行验证语句"+sql1+"时发生错误: " + e.getMessage());
@@ -523,7 +536,7 @@ public class MysqlServericeImpl implements IMysqlServerice {
answerListStu = getAnswerList(answer);
appendToFile(answerLogPath, "学生语句答案");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "学生语句答案");
printResult(answerListStu);
printResult(answerListStu,judgementStr);
} catch (SQLException e) {
appendToFile(answerLogPath, "执行学生库语句"+sql2+"时发生错误: " + e.getMessage());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行学生库语句"+sql2+"时发生错误: " + e.getMessage());
@@ -539,12 +552,14 @@ public class MysqlServericeImpl implements IMysqlServerice {
if (isEquivalent) {
//todo 得分
double sr= accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql2,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sr;
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql2,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
} else {
double sw= calculateTotalScoreRate(sql2, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sw;
SourceAndText studentScorePojo= calculateTotalScoreRate(sql2, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
}
@@ -612,13 +627,13 @@ public class MysqlServericeImpl implements IMysqlServerice {
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行正确答案视图语句的查询结果:");
String sql3 = "SELECT * FROM " + viewName1;
List<List<String>> result1 = executeQuery(stmt, sql3);
printResult(result1);
printResult(result1,judgementStr);
// 执行查询获取视图2的结果
appendToFile(answerLogPath, "执行考生视图语句的查询结果:");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行考生视图语句的查询结果:");
String sql4 = "SELECT * FROM " + viewName2;
List<List<String>> result2 = executeQuery(stmt, sql4);
printResult(result2);
printResult(result2,judgementStr);
// 比较两个视图的结果
boolean isEquivalent = !hasError &&compareResults(result1, result2);
@@ -630,11 +645,17 @@ public class MysqlServericeImpl implements IMysqlServerice {
stmt.execute("DROP VIEW IF EXISTS " + viewName1);
stmt.execute("DROP VIEW IF EXISTS " + viewName2);
if (isEquivalent) {
double sr= accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql2,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sr;
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql2,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
} else {
double sw= calculateTotalScoreRate(sql2, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sw;
SourceAndText studentScorePojo= calculateTotalScoreRate(sql2, examMysqlKeywordList,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
}
// }
@@ -711,16 +732,19 @@ public class MysqlServericeImpl implements IMysqlServerice {
}
// 比较结果(如果发生异常,可以认为比较失败)
boolean flag = !hasError && compareExtractResults(anwerResults, stuResults);
boolean flag = !hasError && compareExtractResults(anwerResults, stuResults,judgementStr);
if (flag) {
//todo 得分
double sr= accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql2,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal+=sr;
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList,total,answerLogPath,sql2,totalKeyScore,score,answerId,scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
} else {
//得分
double sw = calculateTotalScoreRate(sql2, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal,judgementStr);
scoreTotal+=sw;
SourceAndText studentScorePojo = calculateTotalScoreRate(sql2, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
}
} else {
@@ -763,11 +787,13 @@ public class MysqlServericeImpl implements IMysqlServerice {
boolean equals = normalizedTriggerSql1.equals(normalizedTriggerSql2);
if (equals) {
//todo 得分
double sr= accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, sql2, totalKeyScore, score, answerId, scoreTotal,judgementStr);
scoreTotal+=sr;
SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, sql2, totalKeyScore, score, answerId, scoreTotal,judgementStr);
} else {
double sw = calculateTotalScoreRate(sql2, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal,judgementStr);
scoreTotal+=sw;
SourceAndText studentScorePojo = calculateTotalScoreRate(sql2, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal,judgementStr);
scoreTotal += studentScorePojo.getScore();
judgementStr = studentScorePojo.getText();
}
@@ -811,11 +837,15 @@ public class MysqlServericeImpl implements IMysqlServerice {
folder.delete(); // 删除空文件夹或文件
}
//如果这个小题对了,直接累加对应的权值分
private double 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();
if(StringUtils.isBlank(answerId)){
appendToFile(answerLogPath, "❌该语句找不到试题id请检查出题内容" );
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌该语句找不到试题id请检查出题内容");
return 0.0;
sourceAndText.setText(judgementStr);
sourceAndText.setScore(0.0);
//返回累加的总分
return sourceAndText;
}
//用answerid查对应答案的权值 。除以总权值
String scoreRateStr= examQuestionAnswerMapper.selectExamQuestionAnswerScoreByAnswerId(answerId);
@@ -843,16 +873,23 @@ public class MysqlServericeImpl implements IMysqlServerice {
} catch (NumberFormatException e) {
System.err.println("无效的totalKeyScore值" + totalKeyScore);
}
return singleScore;
sourceAndText.setText(judgementStr);
sourceAndText.setScore(singleScore);
//返回累加的总分
return sourceAndText;
}
public double 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();
if(StringUtils.isBlank(answerId)){
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌该语句找不到试题id请检查出题内容");
appendToFile(answerLogPath, "❌该语句找不到试题id请检查出题内容" );
return 0.0;
sourceAndText.setText(judgementStr);
sourceAndText.setScore(0.0);
//返回累加的总分
return sourceAndText;
}
//用answerid查对应答案的权值 。除以总权值
String scoreRateStr= examQuestionAnswerMapper.selectExamQuestionAnswerScoreByAnswerId(answerId);
@@ -918,7 +955,10 @@ public class MysqlServericeImpl implements IMysqlServerice {
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌学生语句"+sql+"不正确,语句权值:"+scoreRateStr+",关键权值:"+totalKeyScoreInt+",答对得分点为:"+matchedKeywords+",答对关键得分权值"+ totalScoreRate+ ",得分" + finalRoundedScore);
appendToFile(answerLogPath,"❌学生语句"+sql+"不正确,语句权值:"+scoreRateStr+",关键权值:"+totalKeyScoreInt+",答对得分点为:"+matchedKeywords+",答对关键得分权值"+ totalScoreRate+ ",得分" + finalRoundedScore);
return finalRoundedScore;
sourceAndText.setText(judgementStr);
sourceAndText.setScore(finalRoundedScore);
//返回累加的总分
return sourceAndText;
}
// 预处理函数:去除空格和换行并转为大写
@@ -976,19 +1016,23 @@ public class MysqlServericeImpl implements IMysqlServerice {
// 比较两个结果集
private static boolean compareExtractResults(List<Map<String, Object>> newResults, List<Map<String, Object>> oldResults) {
private static boolean compareExtractResults(List<Map<String, Object>> newResults, List<Map<String, Object>> oldResults,String judgementStr) {
appendToFile(answerLogPath,"==== 标准答案 ====");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "==== 标准答案 ====");
for (Map<String, Object> row : newResults) {
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, row.toString());
appendToFile(answerLogPath,row.toString());
}
appendToFile(answerLogPath,"==== 考生答案 ====");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "==== 考生答案 ====");
for (Map<String, Object> row : oldResults) {
appendToFile(answerLogPath,row.toString());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, row.toString());
}
if (newResults.size() != oldResults.size()) {
appendToFile(answerLogPath,"❌考生答案与标准答案个数不对");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌考生答案与标准答案个数不对");
return false;
}
@@ -997,7 +1041,7 @@ public class MysqlServericeImpl implements IMysqlServerice {
Set<Map<String, Object>> oldSet = new HashSet<>(oldResults);
if (!newSet.equals(oldSet)) {
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "❌ 内容相同但顺序不同,或存在差异:");
appendToFile(answerLogPath,"❌ 内容相同但顺序不同,或存在差异:");
Set<Map<String, Object>> onlyInNew = new HashSet<>(newSet);
onlyInNew.removeAll(oldSet);
@@ -1007,17 +1051,18 @@ public class MysqlServericeImpl implements IMysqlServerice {
for (Map<String, Object> row : onlyInNew) {
appendToFile(answerLogPath,"⚠️ 标准答案中有但考生答案中没有: " + row);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "⚠️ 标准答案中有但考生答案中没有: " + row);
}
for (Map<String, Object> row : onlyInOld) {
appendToFile(answerLogPath,"⚠️ 考生答案中有但标准答案中没有: " + row);
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "⚠️ 考生答案中有但标准答案中没有: " + row);
}
return false;
}
appendToFile(answerLogPath,"两个结果集内容一致(不考虑顺序)!");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "两个结果集内容一致(不考虑顺序)!");
return true;
}
@@ -1168,9 +1213,11 @@ public class MysqlServericeImpl implements IMysqlServerice {
/**
* 打印查询结果
*/
private static void printResult(List<List<String>> result) {
private static void printResult(List<List<String>> result,String judgementStr) {
if (result.isEmpty()) {
appendToFile(answerLogPath, "查询结果为空");
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "查询结果为空");
} else {
for (int i = 0; i < result.size(); i++) {
List<String> row = result.get(i);
@@ -1186,6 +1233,7 @@ public class MysqlServericeImpl implements IMysqlServerice {
// 输出整行
appendToFile(answerLogPath, sb.toString());
judgementStr = HtmlAppender.appendHtmlLine(judgementStr, sb.toString());
}
}
}