diff --git a/Study-Vue-redis/ry-study-admin/src/main/java/com/ddnai/web/controller/study/StudyClassUserController.java b/Study-Vue-redis/ry-study-admin/src/main/java/com/ddnai/web/controller/study/StudyClassUserController.java index 45d15f7..691e0a7 100644 --- a/Study-Vue-redis/ry-study-admin/src/main/java/com/ddnai/web/controller/study/StudyClassUserController.java +++ b/Study-Vue-redis/ry-study-admin/src/main/java/com/ddnai/web/controller/study/StudyClassUserController.java @@ -275,7 +275,6 @@ public class StudyClassUserController extends BaseController StudentImportData sample = new StudentImportData(); sample.setUserId("001"); sample.setUserName("张三"); - sample.setPrisonName("XX监狱"); sample.setPrisonArea("一监区"); sample.setClassName("一班"); sample.setSex("男"); diff --git a/Study-Vue-redis/ry-study-admin/src/main/java/com/ddnai/web/controller/study/StudyVoiceEvaluationController.java b/Study-Vue-redis/ry-study-admin/src/main/java/com/ddnai/web/controller/study/StudyVoiceEvaluationController.java index 2bc38be..b76878d 100644 --- a/Study-Vue-redis/ry-study-admin/src/main/java/com/ddnai/web/controller/study/StudyVoiceEvaluationController.java +++ b/Study-Vue-redis/ry-study-admin/src/main/java/com/ddnai/web/controller/study/StudyVoiceEvaluationController.java @@ -515,6 +515,20 @@ public class StudyVoiceEvaluationController extends BaseController Map evaluationResult = voiceService.evaluateVoice(fileName, content, language, format); + // ✅ 从resultDetail中提取recognizedText + String recognizedText = ""; + String resultDetail = (String) evaluationResult.get("resultDetail"); + if (resultDetail != null && resultDetail.contains("recognizedText")) { + try { + com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper(); + Map detailMap = mapper.readValue(resultDetail, Map.class); + recognizedText = (String) detailMap.getOrDefault("recognizedText", ""); + logger.info("✅ 提取识别文本: {}", recognizedText); + } catch (Exception e) { + logger.warn("解析resultDetail失败", e); + } + } + // 保存评测记录 StudyVoiceEvaluation voiceEvaluation = new StudyVoiceEvaluation(); voiceEvaluation.setStudentId(studentId); @@ -537,6 +551,8 @@ public class StudyVoiceEvaluationController extends BaseController AjaxResult ajax = AjaxResult.success("评测完成"); ajax.put("evaluation", voiceEvaluation); ajax.put("audioUrl", audioUrl); + // ✅ 添加recognizedText到返回数据 + ajax.put("recognizedText", recognizedText); return ajax; } catch (Exception e) diff --git a/Study-Vue-redis/ry-study-admin/src/main/resources/application-druid.yml b/Study-Vue-redis/ry-study-admin/src/main/resources/application-druid.yml index 71d9c81..2f0574b 100644 --- a/Study-Vue-redis/ry-study-admin/src/main/resources/application-druid.yml +++ b/Study-Vue-redis/ry-study-admin/src/main/resources/application-druid.yml @@ -8,7 +8,7 @@ spring: master: url: jdbc:mysql://127.0.0.1:3306/study?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true username: root - password: root + password: 123456 # 从库数据源 slave: # 从数据源开关/默认关闭 diff --git a/Study-Vue-redis/ry-study-common/src/main/java/com/ddnai/common/core/domain/entity/StudentImportData.java b/Study-Vue-redis/ry-study-common/src/main/java/com/ddnai/common/core/domain/entity/StudentImportData.java index ea503c8..a001c5d 100644 --- a/Study-Vue-redis/ry-study-common/src/main/java/com/ddnai/common/core/domain/entity/StudentImportData.java +++ b/Study-Vue-redis/ry-study-common/src/main/java/com/ddnai/common/core/domain/entity/StudentImportData.java @@ -20,12 +20,11 @@ public class StudentImportData @Excel(name = "罪犯姓名", sort = 2, prompt = "必填项,如:张三") private String userName; - /** 监狱(可选) */ - @Excel(name = "监狱", sort = 3, prompt = "可选,如:第一监狱") + /** 监狱(不导出到模板,仅保留字段用于兼容旧数据导入) */ private String prisonName; /** 监区 - 支持多种列名匹配 */ - @Excel(name = "监区", sort = 4, prompt = "必填项,如:第三监区") + @Excel(name = "监区", sort = 3, prompt = "必填项,如:第三监区") private String prisonArea; /** 班级名称(用于按名称匹配班级,可选) */ diff --git a/Study-Vue-redis/ry-study-system/src/main/java/com/ddnai/system/domain/study/StudyVoiceEvaluation.java b/Study-Vue-redis/ry-study-system/src/main/java/com/ddnai/system/domain/study/StudyVoiceEvaluation.java index 0486d64..6e53cc3 100644 --- a/Study-Vue-redis/ry-study-system/src/main/java/com/ddnai/system/domain/study/StudyVoiceEvaluation.java +++ b/Study-Vue-redis/ry-study-system/src/main/java/com/ddnai/system/domain/study/StudyVoiceEvaluation.java @@ -48,22 +48,27 @@ public class StudyVoiceEvaluation extends BaseEntity /** 评分(总分,0-100) */ @Excel(name = "总分", cellType = ColumnType.NUMERIC) + @com.fasterxml.jackson.databind.annotation.JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class) private BigDecimal score; /** 准确度(0-100) */ @Excel(name = "准确度", cellType = ColumnType.NUMERIC) + @com.fasterxml.jackson.databind.annotation.JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class) private BigDecimal accuracy; /** 流畅度(0-100) */ @Excel(name = "流畅度", cellType = ColumnType.NUMERIC) + @com.fasterxml.jackson.databind.annotation.JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class) private BigDecimal fluency; /** 完整度(0-100) */ @Excel(name = "完整度", cellType = ColumnType.NUMERIC) + @com.fasterxml.jackson.databind.annotation.JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class) private BigDecimal completeness; /** 发音得分(0-100) */ @Excel(name = "发音得分", cellType = ColumnType.NUMERIC) + @com.fasterxml.jackson.databind.annotation.JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class) private BigDecimal pronunciation; /** 评测详情(JSON格式,包含详细评测结果) */ diff --git a/Study-Vue-redis/ry-study-system/src/main/java/com/ddnai/system/service/voice/DeepSeekService.java b/Study-Vue-redis/ry-study-system/src/main/java/com/ddnai/system/service/voice/DeepSeekService.java index f4df678..d571f97 100644 --- a/Study-Vue-redis/ry-study-system/src/main/java/com/ddnai/system/service/voice/DeepSeekService.java +++ b/Study-Vue-redis/ry-study-system/src/main/java/com/ddnai/system/service/voice/DeepSeekService.java @@ -123,13 +123,27 @@ public class DeepSeekService { return parseEvaluationResponse(response, recognizedText, standardText); } + /** + * 清理文本:去除标点符号和空格,只保留文字 + */ + private String cleanText(String text) { + if (text == null) return ""; + // 去除所有标点符号(\p{P})、符号(\p{S})和空格(\s),只保留中文、英文、数字 + return text.replaceAll("[\\p{P}\\p{S}\\s]+", "").toLowerCase(); + } + /** * 构建评测提示词 */ private String buildEvaluationPrompt(String recognizedText, String standardText) { + // ✅ 清理标点符号,只评测文字内容 + String cleanRecognized = cleanText(recognizedText); + String cleanStandard = cleanText(standardText); + return "你是一位专业的语音评测专家。请对以下语音识别结果进行评测:\n\n" + - "[标准文本] " + standardText + "\n" + - "[识别文本] " + recognizedText + "\n\n" + + "[标准文本] " + cleanStandard + "\n" + + "[识别文本] " + cleanRecognized + "\n\n" + + "注意:已去除标点符号,只评测文字内容。\n\n" + "请从以下维度进行评分(每项0-100分):\n" + "1. 准确度(accuracy): 文本是否与标准一致\n" + "2. 完整度(completeness): 是否完整表达了标准内容\n" + @@ -218,8 +232,9 @@ public class DeepSeekService { * 计算文本相似度 */ private double calculateSimilarity(String text1, String text2) { - String clean1 = text1.replaceAll("\\s+", "").toLowerCase(); - String clean2 = text2.replaceAll("\\s+", "").toLowerCase(); + // ✅ 使用 cleanText 方法,自动去除标点符号和空格 + String clean1 = cleanText(text1); + String clean2 = cleanText(text2); int maxLen = Math.max(clean1.length(), clean2.length()); if (maxLen == 0) return 1.0; diff --git a/Study-Vue-redis/ry-study-ui/src/views/study/voiceEvaluation/index.vue b/Study-Vue-redis/ry-study-ui/src/views/study/voiceEvaluation/index.vue index 33d495c..23d2117 100644 --- a/Study-Vue-redis/ry-study-ui/src/views/study/voiceEvaluation/index.vue +++ b/Study-Vue-redis/ry-study-ui/src/views/study/voiceEvaluation/index.vue @@ -261,7 +261,7 @@ - + {{ form.id }} {{ form.studentName }} @@ -271,19 +271,20 @@ 已提交 未提交 - - {{ parseTime(form.submitTime, '{y}-{m}-{d} {h}:{i}:{s}') }} + + {{ parseTime(form.submitTime, '{y}-{m}-{d} {h}:{i}:{s}') }} + 未提交
{{ form.content }}
- - {{ form.score || 0 }}分 + + {{ parseFloat(form.score || 0).toFixed(0) }}分 - {{ form.accuracy || 0 }}分 - {{ form.fluency || 0 }}分 - {{ form.completeness || 0 }}分 - {{ form.pronunciation || 0 }}分 + {{ parseFloat(form.accuracy || 0).toFixed(0) }}分 + {{ parseFloat(form.completeness || 0).toFixed(0) }}分 + {{ parseFloat(form.fluency || 0).toFixed(0) }}分 + {{ parseFloat(form.pronunciation || 0).toFixed(0) }}分
@@ -317,7 +318,7 @@
-
{{ formatJson(form.resultDetail) }}
+
{{ formatJson(form.resultDetail) }}