|
|
@@ -163,23 +163,20 @@ public class ExportCompositionService {
|
|
|
try {
|
|
|
List<ZipExport.ZipItem> zipItems = new ArrayList<>();
|
|
|
for (StudentInfoVO student : students) {
|
|
|
- // 获取学生ID
|
|
|
String officialNumber = student.getOfficialNumber();
|
|
|
User user = userMapper.selectOne(new QueryWrapper<User>().eq("official_number", officialNumber));
|
|
|
if (user == null) {
|
|
|
continue;
|
|
|
}
|
|
|
Long studentId = user.getId();
|
|
|
- String studentDir = user.getOfficialNumber() + "_" + user.getName() + "/";
|
|
|
|
|
|
- // 对每个作业,获取学生的提交历史
|
|
|
for (Assignment assignment : courseAssignments) {
|
|
|
Long assignmentId = assignment.getAssignmentId();
|
|
|
+ String assignmentDir = assignment.getAssignmentName() + "/";
|
|
|
+ String studentDir = assignmentDir + user.getOfficialNumber() + "_" + user.getName() + "/";
|
|
|
try {
|
|
|
- // 获取作业历史记录
|
|
|
List<EngagementHistoryVO> historyList = assignmentService.getEngagementHistory(studentId, assignmentId);
|
|
|
for (EngagementHistoryVO history : historyList) {
|
|
|
- // 生成Word文档
|
|
|
Map<String, Object> model = new HashMap<>();
|
|
|
model.put("title", assignment.getAssignmentName());
|
|
|
model.put("studentName", user.getName());
|
|
|
@@ -193,7 +190,6 @@ public class ExportCompositionService {
|
|
|
zipItems.add(new ZipExport.ZipItem(fileName, wordBytes));
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
- // 学生可能未提交该作业,跳过
|
|
|
log.warn("学生 {} 未提交作业 {},跳过", studentId, assignmentId);
|
|
|
}
|
|
|
}
|
|
|
@@ -205,31 +201,87 @@ public class ExportCompositionService {
|
|
|
}
|
|
|
|
|
|
public byte[] downloadAssignmentSubmissions(Long assignmentId) {
|
|
|
- // 获取作业信息
|
|
|
AssignmentVO assignment = assignmentService.findAssignmentById(assignmentId);
|
|
|
if (assignment == null) {
|
|
|
throw MyException.create(HttpStatus.BAD_REQUEST, "作业不存在");
|
|
|
}
|
|
|
|
|
|
- // 获取所有提交该作业的学生
|
|
|
- List<Engagement> engagements = engagementMapperServiceImpl.getEngagementByAssignmentId(assignmentId);
|
|
|
- if (engagements.isEmpty()) {
|
|
|
- throw MyException.create(HttpStatus.BAD_REQUEST, "无学生提交该作业");
|
|
|
+ Long courseId = assignment.getCourseId();
|
|
|
+ List<com.njuzr.eaibackend.po.Class> courseClasses = classService.select(courseId);
|
|
|
+ if (courseClasses.isEmpty()) {
|
|
|
+ throw MyException.create(HttpStatus.BAD_REQUEST, "课程无班级");
|
|
|
}
|
|
|
|
|
|
- // 生成ZIP文件
|
|
|
try {
|
|
|
List<ZipExport.ZipItem> zipItems = new ArrayList<>();
|
|
|
- for (Engagement engagement : engagements) {
|
|
|
- Long studentId = engagement.getStudentId();
|
|
|
- // 获取学生信息
|
|
|
- UserVO user = userService.searchUsers(new Page<>(1, 1), studentId, null, null, null).getRecords().get(0);
|
|
|
- String studentDir = user.getOfficialNumber() + "_" + user.getName() + "/";
|
|
|
+
|
|
|
+ for (com.njuzr.eaibackend.po.Class cls : courseClasses) {
|
|
|
+ String className = cls.getClassName();
|
|
|
+ String classDir = className + "/";
|
|
|
+
|
|
|
+ List<StudentInfoVO> students = classService.getStudentsByClassId(cls.getClassId());
|
|
|
+ for (StudentInfoVO student : students) {
|
|
|
+ String officialNumber = student.getOfficialNumber();
|
|
|
+ User user = userMapper.selectOne(new QueryWrapper<User>().eq("official_number", officialNumber));
|
|
|
+ if (user == null) continue;
|
|
|
+
|
|
|
+ Long studentId = user.getId();
|
|
|
+ String studentDir = classDir + user.getOfficialNumber() + "_" + user.getName() + "/";
|
|
|
+
|
|
|
+ List<EngagementHistoryVO> historyList = assignmentService.getEngagementHistory(studentId, assignmentId);
|
|
|
+ for (EngagementHistoryVO history : historyList) {
|
|
|
+ Map<String, Object> model = new HashMap<>();
|
|
|
+ model.put("title", assignment.getAssignmentName());
|
|
|
+ model.put("studentName", user.getName());
|
|
|
+ model.put("officialNumber", user.getOfficialNumber());
|
|
|
+ model.put("assignmentName", assignment.getAssignmentName());
|
|
|
+ model.put("date", history.getSubmitTime());
|
|
|
+ model.put("content", processContent(history.getTextContent()));
|
|
|
+
|
|
|
+ byte[] wordBytes = wordExporter.exportCompositionWord(model);
|
|
|
+ String fileName = studentDir + user.getOfficialNumber() + "_" + user.getName() + "_版本" + history.getVersion() + ".docx";
|
|
|
+ zipItems.add(new ZipExport.ZipItem(fileName, wordBytes));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ZipExport.packToZip(zipItems);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw MyException.create(HttpStatus.INTERNAL_SERVER_ERROR, "ZIP打包失败" + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public byte[] downloadClassAssignment(Long classId, Long assignmentId) {
|
|
|
+ com.njuzr.eaibackend.po.Class cls = classService.getClassById(classId);
|
|
|
+ if (cls == null) {
|
|
|
+ throw MyException.create(HttpStatus.BAD_REQUEST, "班级不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ AssignmentVO assignment = assignmentService.findAssignmentById(assignmentId);
|
|
|
+ if (assignment == null) {
|
|
|
+ throw MyException.create(HttpStatus.BAD_REQUEST, "作业不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ String folderName = cls.getClassName() + "_" + assignment.getAssignmentName();
|
|
|
+ String folderDir = folderName + "/";
|
|
|
+
|
|
|
+ List<StudentInfoVO> students = classService.getStudentsByClassId(classId);
|
|
|
+ if (students.isEmpty()) {
|
|
|
+ throw MyException.create(HttpStatus.BAD_REQUEST, "班级无学生");
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ List<ZipExport.ZipItem> zipItems = new ArrayList<>();
|
|
|
+
|
|
|
+ for (StudentInfoVO student : students) {
|
|
|
+ String officialNumber = student.getOfficialNumber();
|
|
|
+ User user = userMapper.selectOne(new QueryWrapper<User>().eq("official_number", officialNumber));
|
|
|
+ if (user == null) continue;
|
|
|
+
|
|
|
+ Long studentId = user.getId();
|
|
|
+ String studentDir = folderDir + user.getOfficialNumber() + "_" + user.getName() + "/";
|
|
|
|
|
|
- // 获取作业历史记录
|
|
|
List<EngagementHistoryVO> historyList = assignmentService.getEngagementHistory(studentId, assignmentId);
|
|
|
for (EngagementHistoryVO history : historyList) {
|
|
|
- // 生成Word文档
|
|
|
Map<String, Object> model = new HashMap<>();
|
|
|
model.put("title", assignment.getAssignmentName());
|
|
|
model.put("studentName", user.getName());
|