From 45fce7927dc2ea4cf401581d795f9aca3a315c88 Mon Sep 17 00:00:00 2001 From: lu Date: Tue, 3 Sep 2024 11:21:37 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xboe/module/course/api/CoursePortalApi.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java index 07d15909..180733fd 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java @@ -365,7 +365,7 @@ public class CoursePortalApi extends ApiBaseController{ } //作业导出 @GetMapping("/export") - public JsonResponse export(String courseId,String contentId,String name,Integer status) throws IOException { + public JsonResponse export(String courseId,String courseName,String contentId,String name,Integer status) throws IOException { Mapmap=new HashMap<>(); List userIds = studyCourseDao.findList(FieldFilters.eq("courseId", courseId)).stream().filter(Objects::nonNull).map(StudyCourse::getAid).collect(Collectors.toList()); if (userIds.isEmpty()){ @@ -430,8 +430,8 @@ public class CoursePortalApi extends ApiBaseController{ // 将临时文件移动到指定位置 Path source = tempZipFile.toPath(); //生成uuid - String uuid = UUID.randomUUID().toString(); - Path destination = Paths.get("/home/www/elearning/upload/saveZip/" + uuid + ".zip"); +// String uuid = UUID.randomUUID().toString(); + Path destination = Paths.get("/home/www/elearning/upload/saveZip/" + courseName+"【作业】" + ".zip"); // 确保目标目录存在 Files.createDirectories(destination.getParent()); From 2c967cef0a345594a2427e228ac5468db7ab5853 Mon Sep 17 00:00:00 2001 From: lu Date: Tue, 10 Sep 2024 17:10:48 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA500?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/course/api/CoursePortalApi.java | 98 ++++++++++++------- 1 file changed, 64 insertions(+), 34 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java index 180733fd..75d3d6a7 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java @@ -404,49 +404,79 @@ public class CoursePortalApi extends ApiBaseController{ if (totalFileSize > 2L * 1024 * 1024 * 1024) { return success("您要下载的作业过大,请分批下载或联系管理员!"); } + // 创建压缩文件 + String zipFilePath = "/home/www/elearning/upload/saveZip/" + courseName+"【作业】" + ".zip"; + createZipFile(map, zipFilePath); + return success(zipFilePath); // 创建一个临时文件用于存储ZIP文件 - File tempZipFile = new File("/home/www/elearning/upload/temp.zip"); +// File tempZipFile = new File("/home/www/elearning/upload/temp.zip"); +// +// try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(tempZipFile))) { +// for (Map.Entry e : map.entrySet()) { +// File fileToZip = new File(e.getValue()); +// // 添加 ZIP 条目 +// ZipEntry entry = new ZipEntry(e.getKey()); +// entry.setSize(fileToZip.length()); +// +// zos.putNextEntry(entry); +// +// try (FileInputStream fis = new FileInputStream(fileToZip)) { +// byte[] buffer = new byte[4096]; +// int len; +// while ((len = fis.read(buffer)) > 0) { +// zos.write(buffer, 0, len); +// } +// } +// +// zos.closeEntry(); +// } +// } +// // 将临时文件移动到指定位置 +// Path source = tempZipFile.toPath(); +// //生成uuid +//// String uuid = UUID.randomUUID().toString(); +// Path destination = Paths.get("/home/www/elearning/upload/saveZip/" + courseName+"【作业】" + ".zip"); +// +// // 确保目标目录存在 +// Files.createDirectories(destination.getParent()); +// +// // 删除目标文件如果已存在 +// if (Files.exists(destination)) { +// Files.delete(destination); +// } +// +// // 移动文件 +// Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING); +// +// // 返回文件路径给前端 +// String filePath = destination.toAbsolutePath().toString(); +// return success(filePath); + } + private static void createZipFile(Map map, String zipFilePath) throws IOException { + try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFilePath))) { + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); - try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(tempZipFile))) { - for (Map.Entry e : map.entrySet()) { - File fileToZip = new File(e.getValue()); - // 添加 ZIP 条目 - ZipEntry entry = new ZipEntry(e.getKey()); - entry.setSize(fileToZip.length()); + File file = new File(value); + if (!file.exists()) { + continue; + } - zos.putNextEntry(entry); + byte[] buffer = new byte[1024]; + FileInputStream fis = new FileInputStream(file); + ZipEntry zipEntry = new ZipEntry(key); + zos.putNextEntry(zipEntry); - try (FileInputStream fis = new FileInputStream(fileToZip)) { - byte[] buffer = new byte[4096]; - int len; - while ((len = fis.read(buffer)) > 0) { - zos.write(buffer, 0, len); - } + int length; + while ((length = fis.read(buffer)) > 0) { + zos.write(buffer, 0, length); } zos.closeEntry(); + fis.close(); } } - // 将临时文件移动到指定位置 - Path source = tempZipFile.toPath(); - //生成uuid -// String uuid = UUID.randomUUID().toString(); - Path destination = Paths.get("/home/www/elearning/upload/saveZip/" + courseName+"【作业】" + ".zip"); - - // 确保目标目录存在 - Files.createDirectories(destination.getParent()); - - // 删除目标文件如果已存在 - if (Files.exists(destination)) { - Files.delete(destination); - } - - // 移动文件 - Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING); - - // 返回文件路径给前端 - String filePath = destination.toAbsolutePath().toString(); - return success(filePath); } @GetMapping("/detail-study") public JsonResponse> detailStudy(String courseId, String aid){ From 66e4e73dd2611528136dbf9c2fe8d0d9f8deded3 Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Fri, 20 Sep 2024 15:29:55 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8Cbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/xboe/api/ThirdApi.java | 31 ++++++++++++++++ .../java/com/xboe/api/vo/UserBasicInfo.java | 23 ++++++++++++ .../com/xboe/api/vo/UserBasicInfoResult.java | 35 +++++++++++++++++++ .../module/course/api/CoursePortalApi.java | 13 ++++--- .../school/study/service/IStudyService.java | 1 - .../study/service/impl/StudyServiceImpl.java | 5 --- .../src/main/resources/application.properties | 3 +- 7 files changed, 99 insertions(+), 12 deletions(-) create mode 100644 servers/boe-server-all/src/main/java/com/xboe/api/vo/UserBasicInfo.java create mode 100644 servers/boe-server-all/src/main/java/com/xboe/api/vo/UserBasicInfoResult.java diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java b/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java index b9b6155e..e1a7cff1 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java @@ -14,10 +14,13 @@ import com.xboe.school.study.entity.StudyCourse; import com.xboe.system.user.dao.UserDao; import com.xboe.system.user.entity.User; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -66,6 +69,10 @@ public class ThirdApi { @Value("${manageApi.editExam}") private String editExam; + + @Value("${userBasic.getUserBasicInfo}") + private String getUserBasicInfo; + //获取例外人员的id public List getUserId(){ String responseBody = Optional.ofNullable(HttpRequest.get(infarasApiUrl+"?pid=316&type=1").execute() //prod 316 @@ -234,5 +241,29 @@ public class ThirdApi { } + /** + * 虽然当前已存在接口查询用户基本信息,目前仅仅包括用户名、工号、用户ID + */ + public List getUserBasicInfoByUserId(List userIds, HttpServletRequest request) { + String token = request.getHeader("Xboe-Access-Token"); + if (StringUtils.isEmpty(token)) { + token = request.getHeader("token"); + } + + // 将userIds列表转换为逗号分隔的字符串 + String userIdsStr = userIds.stream() + .collect(Collectors.joining(",")); + String url = getUserBasicInfo +"?userIds=" + userIdsStr; + + String respStr = Optional.ofNullable(HttpRequest + .get(url) + .header("token", token) + .execute().body()).orElseThrow(() -> new RuntimeException("用户中心用户数据获取失败")); + + UserBasicInfoResult userBasicInfoResult = JSONUtil.parseObj(respStr).toBean(UserBasicInfoResult.class); + List basicInfos = userBasicInfoResult.getResult(); + return basicInfos; + + } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserBasicInfo.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserBasicInfo.java new file mode 100644 index 00000000..d016597f --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserBasicInfo.java @@ -0,0 +1,23 @@ +package com.xboe.api.vo; + +import lombok.Data; + +@Data +public class UserBasicInfo { + + /** + * 用户ID + */ + private String userId; + + /** + * 用户名。 + */ + private String userName; + + /** + * 工号。 + */ + private String workNum; + +} \ No newline at end of file diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserBasicInfoResult.java b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserBasicInfoResult.java new file mode 100644 index 00000000..1f69a2ee --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/api/vo/UserBasicInfoResult.java @@ -0,0 +1,35 @@ +package com.xboe.api.vo; + +import cn.hutool.json.JSONUtil; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.util.Date; +import java.util.List; + + +@Data +@Slf4j +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UserBasicInfoResult { + + private String error; + private String message; + private String permissions; + private List result; + private int status; + private Date timestamp; + + public UserBasicInfoResult success() { + if (this.status != 200) { + log.error("获取用户基本信息失败----{}", JSONUtil.toJsonPrettyStr(this)); + return null; + } + return this; + } +} \ No newline at end of file diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java index 75d3d6a7..b59faab5 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java @@ -20,6 +20,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.xboe.api.ThirdApi; +import com.xboe.api.vo.UserBasicInfo; import com.xboe.core.orm.FieldFilters; import com.xboe.module.course.entity.*; import com.xboe.module.course.vo.TeacherVo; @@ -365,13 +366,15 @@ public class CoursePortalApi extends ApiBaseController{ } //作业导出 @GetMapping("/export") - public JsonResponse export(String courseId,String courseName,String contentId,String name,Integer status) throws IOException { + public JsonResponse export(String courseId,String courseName,String contentId,String name,Integer status,HttpServletRequest request) throws IOException { Mapmap=new HashMap<>(); List userIds = studyCourseDao.findList(FieldFilters.eq("courseId", courseId)).stream().filter(Objects::nonNull).map(StudyCourse::getAid).collect(Collectors.toList()); if (userIds.isEmpty()){ return error("查询不到用户"); } - Listuser=studyService.getUserNo(userIds); + + List userBasicInfoList =thirdApi.getUserBasicInfoByUserId(userIds,request); + try {//筛选出的人员 List list = studyService.getList(courseId, contentId, name, status); if(list.isEmpty()){ @@ -383,12 +386,12 @@ public class CoursePortalApi extends ApiBaseController{ return success("暂无数据"); } studyHomeWorks.forEach(e->{ - user.forEach(u->{ - if(u.getId().equals(s.getAid())){ + userBasicInfoList.forEach(u->{ + if(u.getUserId().equals(s.getAid())){ //取后缀 int dotIndex = e.getFilePath().lastIndexOf('.'); // 查找最后一个'.'的位置 String extension = e.getFilePath().substring(dotIndex); - map.put(u.getName()+"-"+u.getUserNo()+extension,"/home/www/elearning/upload"+e.getFilePath()); + map.put(u.getUserName()+"-"+u.getWorkNum()+extension,"/home/www/elearning/upload"+e.getFilePath()); } }); }); diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyService.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyService.java index 40a39db7..540ef110 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/IStudyService.java @@ -99,5 +99,4 @@ public interface IStudyService { List getList(String courseId, String contentId, String name, Integer status); - List getUserNo(List userIds); } diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java index 78b11375..add5b383 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java @@ -219,11 +219,6 @@ public class StudyServiceImpl implements IStudyService{ return scItemDao.findList(query.builder()); } - @Override - public List getUserNo(List userIds) { - return userDao.findList(FieldFilters.in("id", userIds)); - } - @Override @Transactional public void updateProcess(String studyContentId,String studyId, String courseId,Integer total, Integer progress,String token) { diff --git a/servers/boe-server-all/src/main/resources/application.properties b/servers/boe-server-all/src/main/resources/application.properties index 01a9218f..acb91e98 100644 --- a/servers/boe-server-all/src/main/resources/application.properties +++ b/servers/boe-server-all/src/main/resources/application.properties @@ -74,4 +74,5 @@ manageApi.stu.offcourse=${boe.domain}/manageApi/stu/offcourse/getOffCourseId manageApi.editExam=${boe.domain}/manageApi/admin/project/editExam #获取离职教师id userBasic.getTeacherIds=${boe.domain}/userbasic/user/getTeacherInfo -coursesuilt.getStudyStatus=${boe.domain}/manageApi/stu/project/completeStatus \ No newline at end of file +coursesuilt.getStudyStatus=${boe.domain}/manageApi/stu/project/completeStatus +userBasic.getUserBasicInfo=${boe.domain}/userbasic/user/getUserBasicInfo From 6f2236f3bebfbf44b1381fd5a05add5766b29036 Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Mon, 23 Sep 2024 18:13:16 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8Ctoken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boe-server-all/src/main/java/com/xboe/api/ThirdApi.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java b/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java index e1a7cff1..2336a165 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/api/ThirdApi.java @@ -249,6 +249,9 @@ public class ThirdApi { if (StringUtils.isEmpty(token)) { token = request.getHeader("token"); } + if (StringUtils.isEmpty(token)) { + token = request.getHeader("x-access-token"); + } // 将userIds列表转换为逗号分隔的字符串 String userIdsStr = userIds.stream() From f5ac7519e4bc8421e41ef47e777c36e82435d952 Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Mon, 23 Sep 2024 18:09:35 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/StudyExamServiceImpl.java | 81 +++++++++---------- .../impl/StudyHomeWorkServiceImpl.java | 4 + 2 files changed, 42 insertions(+), 43 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java index 3a9401d4..b0c151b0 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java @@ -1,24 +1,9 @@ package com.xboe.school.study.service.impl; -import java.time.LocalDateTime; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import javax.annotation.Resource; -import javax.transaction.Transactional; - -import com.xboe.api.ThirdApi; -import com.xboe.core.orm.QueryBuilder; -import com.xboe.school.study.entity.StudyCourse; -import com.xboe.system.user.entity.Message; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.stereotype.Service; - import com.xboe.common.OrderCondition; import com.xboe.core.orm.FieldFilters; +import com.xboe.core.orm.QueryBuilder; +import com.xboe.core.orm.UpdateBuilder; import com.xboe.module.course.dao.CourseContentDao; import com.xboe.module.course.dao.CourseExamDao; import com.xboe.module.course.entity.CourseExam; @@ -28,6 +13,16 @@ import com.xboe.school.study.dao.StudyExamDao; import com.xboe.school.study.entity.StudyCourseItem; import com.xboe.school.study.entity.StudyExam; import com.xboe.school.study.service.IStudyExamService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.transaction.Transactional; +import java.time.LocalDateTime; +import java.util.List; @Slf4j @Service @@ -73,10 +68,12 @@ public class StudyExamServiceImpl implements IStudyExamService{ exam.setPassLine(0); } - int prog=exam.getScore().intValue()>=exam.getPassLine()?100:exam.getScore().intValue(); //完成处理,判断是否已存在 Object obj=scItemDao.findField("id", FieldFilters.eq("studyId", exam.getStudyId()), FieldFilters.eq("contentId", exam.getContentId())); + //获取本次考试提交,学习状态与学习进度 int status=exam.getScore()>=exam.getPassLine()?StudyCourseItem.STATUS_FINISH:StudyCourseItem.STATUS_STUDYING; + int progress = exam.getScore().intValue() >= exam.getPassLine() ? 100 : 0; + if(obj==null) { StudyCourseItem sci=new StudyCourseItem(); LocalDateTime ldt=LocalDateTime.now(); @@ -85,7 +82,7 @@ public class StudyExamServiceImpl implements IStudyExamService{ //sci.setContentName(homework.getContentName()); sci.setCourseId(exam.getCourseId()); //sci.setCsectionId(homework.getCsectionId()); - sci.setProgress(prog);//直接设置为学习完成 + sci.setProgress(progress);//直接设置为学习完成 sci.setStatus(status);//状态直接更新为已完成 sci.setStartTime(ldt); sci.setAid(exam.getStudentId()); @@ -109,34 +106,32 @@ public class StudyExamServiceImpl implements IStudyExamService{ }else { exam.setStudyItemId(obj.toString());//此项就是学习条目的id dao.save(exam); - if(cexam.getScoringType()==CourseExam.SCORINGTYPE_LAST){ - scItemDao.updateFieldById(exam.getStudyItemId(), "score",exam.getScore()); - scItemDao.updateFieldById(exam.getStudyItemId(), "progress",prog); - if(exam.getScore()>=exam.getPassLine()){ - scItemDao.updateFieldById(exam.getStudyId(), "progress",100); - scItemDao.updateFieldById(exam.getStudyId(), "finish_time",LocalDateTime.now()); - scItemDao.updateFieldById(exam.getStudyId(), "status",StudyCourseItem.STATUS_FINISH); - scItemDao.updateFieldById(exam.getStudyId(), "score",exam.getScore()); - //scDao.updateFieldById(exam.getStudyId(), "last_score",100.0f); + //最新考试分值 + if (cexam.getScoringType() == CourseExam.SCORINGTYPE_LAST) { + scItemDao.updateMultiFieldById(exam.getStudyItemId(), + UpdateBuilder.create("startTime", exam.getStartTime()), + UpdateBuilder.create("finishTime", LocalDateTime.now()), + UpdateBuilder.create("score", exam.getScore()), + UpdateBuilder.create("progress", progress), + UpdateBuilder.create("status", status) + ); + } + + //最高分 + if (cexam.getScoringType() == CourseExam.SCORINGTYPE_MAX) { + Float maxScore = (Float) dao.findField("max(score)", FieldFilters.eq("contentId", exam.getContentId()), FieldFilters.eq("courseId", exam.getCourseId()), FieldFilters.eq("studyId", exam.getStudyId())); + if (exam.getScore() > maxScore) { + scItemDao.updateMultiFieldById(exam.getStudyItemId(), + UpdateBuilder.create("startTime", exam.getStartTime()), + UpdateBuilder.create("finishTime", LocalDateTime.now()), + UpdateBuilder.create("score", exam.getScore()), + UpdateBuilder.create("progress", progress), + UpdateBuilder.create("status", status) + ); } } } - //1最高一次,用于最高一次的计算 - if(cexam.getScoringType()==CourseExam.SCORINGTYPE_MAX) { - Float f=(Float)dao.findField("max(score)", FieldFilters.eq("contentId", exam.getContentId()), FieldFilters.eq("courseId", exam.getCourseId()), FieldFilters.eq("studyId", exam.getStudyId())); - scItemDao.updateFieldById(exam.getStudyItemId(), "score", f); - scItemDao.updateFieldById(exam.getStudyItemId(), "status", f>=exam.getPassLine()?StudyCourseItem.STATUS_FINISH:StudyCourseItem.STATUS_STUDYING); - scItemDao.updateFieldById(exam.getStudyItemId(), "progress",f>=exam.getPassLine()?100:f.intValue()); - if(f>=exam.getPassLine()){ - scItemDao.updateFieldById(exam.getStudyId(), "progress",100); - scItemDao.updateFieldById(exam.getStudyId(), "finish_time",LocalDateTime.now()); - scItemDao.updateFieldById(exam.getStudyId(), "status",StudyCourseItem.STATUS_FINISH); - scItemDao.updateFieldById(exam.getStudyId(), "score",exam.getScore()); - //scDao.updateFieldById(exam.getStudyId(), "last_score",100.0f); - } - - } int totalContent = courseContentDao.getCount(exam.getCourseId()); scDao.finishCheck(exam.getStudyId(),exam.getCourseId(),totalContent,token); scDao.updateFieldById(exam.getStudyId(), "last_score",exam.getScore()); diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyHomeWorkServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyHomeWorkServiceImpl.java index 2396d5f8..0471b207 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyHomeWorkServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyHomeWorkServiceImpl.java @@ -64,6 +64,10 @@ public class StudyHomeWorkServiceImpl implements IStudyHomeWorkService{ int totalContent=courseContentDao.count(FieldFilters.eq("courseId", homework.getCourseId()),FieldFilters.eq("deleted",false)); scDao.finishCheck(homework.getStudyId(),homework.getCourseId(),totalContent,token); }else { + StudyCourseItem sci=new StudyCourseItem(); + sci.setId(obj.toString()); + sci.setFinishTime(LocalDateTime.now()); + scItemDao.update(sci); //只是保留一条作业记录,不再保存多条记录了 //dao.save(homework); //设置id。然后进行悠 From b1ef78aae2b6e6057cf914156c761458ddb11d8b Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Tue, 24 Sep 2024 14:59:04 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E5=AF=BC=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/course/api/CoursePortalApi.java | 61 +++++++------------ 1 file changed, 23 insertions(+), 38 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java index b59faab5..b9f12ae3 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java @@ -1,65 +1,50 @@ package com.xboe.module.course.api; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.net.URLEncoder; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; -import java.util.*; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.xboe.api.ThirdApi; import com.xboe.api.vo.UserBasicInfo; -import com.xboe.core.orm.FieldFilters; -import com.xboe.module.course.entity.*; -import com.xboe.module.course.vo.TeacherVo; -import com.xboe.school.study.dao.StudyCourseDao; -import com.xboe.school.study.entity.StudyHomeWork; -import com.xboe.school.study.service.IStudyHomeWorkService; -import com.xboe.school.study.service.IStudyService; -import com.xboe.system.user.entity.User; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - import com.xboe.common.PageList; import com.xboe.common.Pagination; import com.xboe.common.utils.StringUtil; import com.xboe.core.JsonResponse; import com.xboe.core.api.ApiBaseController; +import com.xboe.core.orm.FieldFilters; import com.xboe.module.course.dto.CourseQueryDto; import com.xboe.module.course.dto.CourseTeacherDto; import com.xboe.module.course.dto.RankingDto; +import com.xboe.module.course.entity.*; import com.xboe.module.course.service.ICourseContentService; import com.xboe.module.course.service.ICourseSectionService; import com.xboe.module.course.service.ICourseService; import com.xboe.module.course.service.ICourseTeacherService; import com.xboe.module.course.vo.CourseStudyVo; +import com.xboe.module.course.vo.TeacherVo; import com.xboe.module.teacher.entity.Teacher; import com.xboe.module.teacher.service.ITeacherService; import com.xboe.module.usergroup.service.IUserGroupService; +import com.xboe.school.study.dao.StudyCourseDao; import com.xboe.school.study.entity.StudyCourse; import com.xboe.school.study.entity.StudyCourseItem; +import com.xboe.school.study.entity.StudyHomeWork; import com.xboe.school.study.service.IStudyCourseService; - +import com.xboe.school.study.service.IStudyHomeWorkService; +import com.xboe.school.study.service.IStudyService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; /** From fd3afef9172889318a1451e5d29de2bfd62c2834 Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Tue, 24 Sep 2024 15:04:45 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8C=E6=A8=A1=E7=B3=8A=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xboe/school/study/service/impl/StudyServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java index add5b383..75ed9dd2 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyServiceImpl.java @@ -214,7 +214,7 @@ public class StudyServiceImpl implements IStudyService{ } if(StringUtils.isNotBlank(name)) { - query.addFilter(FieldFilters.eq("aname", name)); + query.addFilter(FieldFilters.like("aname", name)); } return scItemDao.findList(query.builder()); } From 7db1a03379dfa48d3f84080972a014c924f15aee Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Thu, 26 Sep 2024 20:37:21 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8C=E8=80=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/xboe/school/study/entity/StudyExam.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/entity/StudyExam.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/entity/StudyExam.java index 5e55a9bc..18e833c5 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/entity/StudyExam.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/entity/StudyExam.java @@ -117,7 +117,7 @@ public class StudyExam extends IdEntity { /* * 开始时间 * */ - @JsonFormat(pattern = "yyyy--MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Column(name = "start_time") private LocalDateTime startTime; /* From ea2c6edc9ff6db83fa1569df18e095187f559cb1 Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Fri, 27 Sep 2024 10:50:17 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8C=E6=9C=80=E9=AB=98=E5=88=86=E3=80=81=E4=B8=8E=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E5=AE=8C=E6=88=90=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xboe/school/study/service/impl/StudyExamServiceImpl.java | 2 +- .../school/study/service/impl/StudyHomeWorkServiceImpl.java | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java index b0c151b0..632fb3bd 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java @@ -105,6 +105,7 @@ public class StudyExamServiceImpl implements IStudyExamService{ }else { exam.setStudyItemId(obj.toString());//此项就是学习条目的id + Float maxScore = (Float) dao.findField("max(score)", FieldFilters.eq("contentId", exam.getContentId()), FieldFilters.eq("courseId", exam.getCourseId()), FieldFilters.eq("studyId", exam.getStudyId())); dao.save(exam); //最新考试分值 if (cexam.getScoringType() == CourseExam.SCORINGTYPE_LAST) { @@ -119,7 +120,6 @@ public class StudyExamServiceImpl implements IStudyExamService{ //最高分 if (cexam.getScoringType() == CourseExam.SCORINGTYPE_MAX) { - Float maxScore = (Float) dao.findField("max(score)", FieldFilters.eq("contentId", exam.getContentId()), FieldFilters.eq("courseId", exam.getCourseId()), FieldFilters.eq("studyId", exam.getStudyId())); if (exam.getScore() > maxScore) { scItemDao.updateMultiFieldById(exam.getStudyItemId(), UpdateBuilder.create("startTime", exam.getStartTime()), diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyHomeWorkServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyHomeWorkServiceImpl.java index 0471b207..760fd8e6 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyHomeWorkServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyHomeWorkServiceImpl.java @@ -64,10 +64,7 @@ public class StudyHomeWorkServiceImpl implements IStudyHomeWorkService{ int totalContent=courseContentDao.count(FieldFilters.eq("courseId", homework.getCourseId()),FieldFilters.eq("deleted",false)); scDao.finishCheck(homework.getStudyId(),homework.getCourseId(),totalContent,token); }else { - StudyCourseItem sci=new StudyCourseItem(); - sci.setId(obj.toString()); - sci.setFinishTime(LocalDateTime.now()); - scItemDao.update(sci); + scItemDao.updateFieldById(obj.toString(), "finishTime", LocalDateTime.now()); //只是保留一条作业记录,不再保存多条记录了 //dao.save(homework); //设置id。然后进行悠 From f9b87619517094f4c09fd06aeb4768d7eff85d33 Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Fri, 27 Sep 2024 11:19:18 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8C=E5=88=86=E6=95=B0=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xboe/school/study/service/impl/StudyExamServiceImpl.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java index 632fb3bd..386e8171 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java @@ -90,9 +90,7 @@ public class StudyExamServiceImpl implements IStudyExamService{ sci.setFinishTime(LocalDateTime.now()); sci.setLastStudyTime(0);//此项用户记录视频内容当前学习的时间点 sci.setLastTime(ldt); - if(cexam.getScoringType()==CourseExam.SCORINGTYPE_LAST) { - sci.setScore(exam.getScore()); - } + sci.setScore(exam.getScore()); scItemDao.save(sci); exam.setStudyItemId(sci.getId()); dao.save(exam); From 638aa9ee932a1c253aacad8ab6dd8ae54ca285b0 Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Fri, 27 Sep 2024 14:24:01 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8C=E8=AE=A1=E7=AE=97=E6=97=B6=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../study/service/impl/StudyExamServiceImpl.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java index 386e8171..4bf148be 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.transaction.Transactional; +import java.time.Duration; import java.time.LocalDateTime; import java.util.List; @@ -73,10 +74,12 @@ public class StudyExamServiceImpl implements IStudyExamService{ //获取本次考试提交,学习状态与学习进度 int status=exam.getScore()>=exam.getPassLine()?StudyCourseItem.STATUS_FINISH:StudyCourseItem.STATUS_STUDYING; int progress = exam.getScore().intValue() >= exam.getPassLine() ? 100 : 0; + //计算时长 + LocalDateTime ldt=LocalDateTime.now(); + Integer studyDuration = Math.toIntExact(Duration.between(exam.getStartTime(), ldt).getSeconds()); if(obj==null) { StudyCourseItem sci=new StudyCourseItem(); - LocalDateTime ldt=LocalDateTime.now(); sci.setStudyId(exam.getStudyId()); sci.setContentId(exam.getContentId()); //sci.setContentName(homework.getContentName()); @@ -84,13 +87,14 @@ public class StudyExamServiceImpl implements IStudyExamService{ //sci.setCsectionId(homework.getCsectionId()); sci.setProgress(progress);//直接设置为学习完成 sci.setStatus(status);//状态直接更新为已完成 - sci.setStartTime(ldt); + sci.setStartTime(exam.getStartTime()); sci.setAid(exam.getStudentId()); sci.setAname(exam.getStudentName()); - sci.setFinishTime(LocalDateTime.now()); + sci.setFinishTime(ldt); sci.setLastStudyTime(0);//此项用户记录视频内容当前学习的时间点 sci.setLastTime(ldt); sci.setScore(exam.getScore()); + sci.setStudyDuration(studyDuration); scItemDao.save(sci); exam.setStudyItemId(sci.getId()); dao.save(exam); @@ -112,7 +116,8 @@ public class StudyExamServiceImpl implements IStudyExamService{ UpdateBuilder.create("finishTime", LocalDateTime.now()), UpdateBuilder.create("score", exam.getScore()), UpdateBuilder.create("progress", progress), - UpdateBuilder.create("status", status) + UpdateBuilder.create("status", status), + UpdateBuilder.create("studyDuration", studyDuration) ); } From df770d22d52d67b184bb7a662a721ffa86c6aed6 Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Fri, 27 Sep 2024 14:59:15 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8C=E8=AE=A1=E7=AE=97=E6=97=B6=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../school/study/service/impl/StudyExamServiceImpl.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java index 4bf148be..64362fc9 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/service/impl/StudyExamServiceImpl.java @@ -76,7 +76,6 @@ public class StudyExamServiceImpl implements IStudyExamService{ int progress = exam.getScore().intValue() >= exam.getPassLine() ? 100 : 0; //计算时长 LocalDateTime ldt=LocalDateTime.now(); - Integer studyDuration = Math.toIntExact(Duration.between(exam.getStartTime(), ldt).getSeconds()); if(obj==null) { StudyCourseItem sci=new StudyCourseItem(); @@ -94,7 +93,7 @@ public class StudyExamServiceImpl implements IStudyExamService{ sci.setLastStudyTime(0);//此项用户记录视频内容当前学习的时间点 sci.setLastTime(ldt); sci.setScore(exam.getScore()); - sci.setStudyDuration(studyDuration); + sci.setStudyDuration(exam.getTestDuration()); scItemDao.save(sci); exam.setStudyItemId(sci.getId()); dao.save(exam); @@ -113,11 +112,11 @@ public class StudyExamServiceImpl implements IStudyExamService{ if (cexam.getScoringType() == CourseExam.SCORINGTYPE_LAST) { scItemDao.updateMultiFieldById(exam.getStudyItemId(), UpdateBuilder.create("startTime", exam.getStartTime()), - UpdateBuilder.create("finishTime", LocalDateTime.now()), + UpdateBuilder.create("finishTime", ldt), UpdateBuilder.create("score", exam.getScore()), UpdateBuilder.create("progress", progress), UpdateBuilder.create("status", status), - UpdateBuilder.create("studyDuration", studyDuration) + UpdateBuilder.create("studyDuration", exam.getTestDuration()) ); }