exam-system/src/main/java/com/gkhy/exam/institutionalaccess/config/ExecutorConfig.java
对比新文件 @@ -0,0 +1,80 @@ package com.gkhy.exam.institutionalaccess.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.lang.reflect.Method; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; @Configuration @EnableAsync public class ExecutorConfig implements AsyncConfigurer { private Logger logger = LoggerFactory.getLogger(ExecutorConfig.class); /** * 最小线程数(核心线程数) */ @Value("${threadPool.corePoolSize}") private int corePoolSize; /** * 最大线程数 */ @Value("${threadPool.maxPoolSize}") private int maxPoolSize; /** * 等待队列(队列最大长度) */ @Value("${threadPool.queueCapacity}") private int queueCapacity; @Bean(name = "SocketTaskExecutor") public Executor asyncServiceExecutor() { logger.info("start asyncServiceExecutor"); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); //配置核心线程数 executor.setCorePoolSize(corePoolSize); //配置最大线程数 executor.setMaxPoolSize(maxPoolSize); //配置队列大小 executor.setQueueCapacity(queueCapacity); //配置线程池中的线程的名称前缀 executor.setThreadNamePrefix("async-service-"); // rejection-policy:当pool已经达到max size的时候,如何处理新任务 // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); //所有任务完成在关闭线程池 executor.setWaitForTasksToCompleteOnShutdown(true); //执行初始化 executor.initialize(); return executor; } /** * 异步异常处理 * * @return */ @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return new SpringAsyncExceptionHandler(); } class SpringAsyncExceptionHandler implements AsyncUncaughtExceptionHandler { @Override public void handleUncaughtException(Throwable throwable, Method method, Object... obj) { logger.error("Exception occurs in async method:%s,异常信息如下:", method.getName()); throwable.printStackTrace(); } } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/controller/ThCourseManagerController.java
@@ -29,4 +29,9 @@ public AjaxResult findById(@PathVariable Long id) { return AjaxResult.success(courseManagerService.findById(id)); } @GetMapping("/student/{courseUuid}") public AjaxResult getStudent(@PathVariable String courseUuid) { return AjaxResult.success(courseManagerService.getSutdent(courseUuid)); } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/controller/TripartiteInterfaceController.java
@@ -1,24 +1,17 @@ package com.gkhy.exam.institutionalaccess.controller; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.TypeReference; import com.gkhy.exam.institutionalaccess.enums.*; import com.gkhy.exam.institutionalaccess.model.req.*; import com.gkhy.exam.institutionalaccess.service.TripartiteInterfaceService; import com.ruoyi.common.annotation.RepeatedClick; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.signature.AESUtils; import org.springframework.beans.factory.annotation.Autowired; 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.RestController; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.UUID; @RequestMapping("/gov-server/receive") @@ -28,41 +21,51 @@ private TripartiteInterfaceService tripartiteInterfaceService; @PostMapping("/question/bank") @RepeatedClick public AjaxResult receiveQuestionBank(@RequestBody JSONObject jsonObject){ return success(tripartiteInterfaceService.receiveQuestionBank(jsonObject)); } @PostMapping("/course") @RepeatedClick public AjaxResult receiveCourse(@RequestBody JSONObject jsonObject){ return tripartiteInterfaceService.receiveCourse(jsonObject); } @PostMapping("/course/delete") @RepeatedClick public AjaxResult receiveCourseDelete(@RequestBody JSONObject jsonObject){ return tripartiteInterfaceService.receiveCourseDelete(jsonObject); } @PostMapping("/batch") @RepeatedClick public AjaxResult receiveBatch(@RequestBody JSONObject jsonObject){ return tripartiteInterfaceService.receiveBatch(jsonObject); } @PostMapping("/batch/open") @RepeatedClick public AjaxResult receiveBatchOpen(@RequestBody JSONObject jsonObject){ return tripartiteInterfaceService.receiveBatchOpen(jsonObject); } @PostMapping("/student") @RepeatedClick public AjaxResult receiveStudent(@RequestBody JSONObject jsonObject){ return tripartiteInterfaceService.receiveStudent(jsonObject); } @PostMapping("/study/detail") @RepeatedClick public AjaxResult receiveStudyDetail(@RequestBody JSONObject jsonObject){ return tripartiteInterfaceService.receiveStudyDetail(jsonObject); } @RepeatedClick @PostMapping("/exam/record") public AjaxResult receiveExamRecord(@RequestBody JSONObject jsonObject){ return tripartiteInterfaceService.receiveExamRecord(jsonObject); } @RepeatedClick @PostMapping("/batch/end") public AjaxResult receiveBarchEnd(@RequestBody JSONObject jsonObject){ return tripartiteInterfaceService.receiveBarchEnd(jsonObject); public AjaxResult receiveBatchEnd(@RequestBody JSONObject jsonObject){ return tripartiteInterfaceService.receiveBatchEnd(jsonObject); } /** @@ -94,6 +97,7 @@ * @param args */ /*public static void main(String[] args) { List<ThCourseReqDTO> list = new ArrayList<>(); ThCourseReqDTO thCourseReqDTO = new ThCourseReqDTO(); thCourseReqDTO.setUuid("20bded7f-660c-4380-b7f9-00f3976e1875"); thCourseReqDTO.setCourseCode("java001111"); @@ -105,41 +109,46 @@ //章 ThCourseChapterReqDTO chapterReqDTO1 = new ThCourseChapterReqDTO(); chapterReqDTO1.setUuid("9d470732-6233-4820-82f7-37c80fe8ae68"); //chapterReqDTO1.setDelFlag((byte)0); chapterReqDTO1.setDelFlag((byte)0); chapterReqDTO1.setChapterCode("001"); chapterReqDTO1.setChapterName("第一章节 基础理论"); chapterReqDTO1.setHaveResource((byte)10); chapterReqDTO1.setHaveResource((byte)0); chapterReqDTO1.setSerialno(1); chapterReqDTO1.setLessonNum(new BigDecimal(10)); List<ThCourseChapterReqDTO> childList = new ArrayList<>(); //节 ThCourseChapterReqDTO child11 = new ThCourseChapterReqDTO(); child11.setUuid("d5cd3b26-be11-4ffe-8a34-283c49c85253"); child11.setUrl("https://www.baidu.com"); //child11.setDelFlag((byte)2); child11.setDelFlag((byte)2); child11.setChapterCode("1.1"); child11.setChapterName("1.1类"); child11.setHaveResource((byte)20); child11.setHaveResource((byte)1); child11.setSerialno(1); child11.setDuration(1800l); child11.setResourceType((byte)0); child11.setLessonNum(new BigDecimal(1)); ThCourseChapterReqDTO child12= new ThCourseChapterReqDTO(); child12.setUuid("eb7167be-5716-43d0-8e27-12bb43d1dded"); child12.setUrl("https://www.baidu.com1213231"); //child12.setDelFlag((byte)0); child12.setDelFlag((byte)0); child12.setChapterCode("1.2"); child12.setChapterName("1.2接口"); child12.setHaveResource((byte)20); child12.setHaveResource((byte)1); child12.setLessonNum(new BigDecimal(1.5)); child12.setDuration(4500l); child12.setResourceType((byte)0); child12.setSerialno(2); ThCourseChapterReqDTO child13= new ThCourseChapterReqDTO(); child13.setUuid(UUID.randomUUID().toString()); child13.setUuid("d684081a-6a09-42ce-86b1-58df94d18f6b"); child13.setUrl("https://www.baidu.com3333"); //child13.setDelFlag((byte)0); child13.setDelFlag((byte)2); child13.setChapterCode("1.3"); child13.setChapterName("1.3多态"); child13.setHaveResource((byte)20); child13.setHaveResource((byte)1); child13.setLessonNum(new BigDecimal(1.5)); child13.setDuration(1800l); child13.setSerialno(3); child13.setResourceType((byte)0); childList.add(child11); childList.add(child12); @@ -147,20 +156,18 @@ chapterReqDTO1.setChildren(childList); chapterList.add(chapterReqDTO1); thCourseReqDTO.setChapters(chapterList); String jsonString = JSONObject.toJSONString(thCourseReqDTO); list.add(thCourseReqDTO); String jsonString = JSONObject.toJSONString(list); String encrypt = AESUtils.encrypt(jsonString); System.out.println(encrypt); String decrypt = AESUtils.decrypt("3G5/kr4d9CCjK6/q8LWZ1TZK6SF/GINWmeKzfmtvPZo0W/4Ydd7qti1VaOO4LQcKNNN67kvSfjCx3xUS1iAiUcWaVllWpVeNW8FWHt/1OQ+coFyslHVXDdCbQIVYpzF/0Q4jdBXpydtEmVsxifazo3l5/a2NBG319hhCXFNJmY5DgF2SUq7t6niKaEom6QbcFTENqV1KNZ87QeI7dl18UveADgxP91XpaRb+4M0JGIYpiXnr/LEDNAYM13eU6LSK+mBc38QQ+WcxijYGFvk1U6rlMYui3aLisyPLaFEwlhZ9Mscsrdw3t+XNJNp6SKiTG4HCOvSBYOGHp2PHhFQBNHzluOlcA5L8a4nogDpThwcl47O474VXnp0WG2+9DYVUTXW/UddZSc/aCCIhe/DTfA7WoZkOnMO8k8fHlXQ0exHnfPxBTxozG3UKyQ6hGHyjWqrfk/oVRcfOcPCQavIwwu9YLQeUpqL88VntE2+sBUPJtGOQrvq6A5No2RHgEGqptrUboMuL/OimEGjTAPdnRKQL+8JqqZf9HSPTCnoSYpTxKAfFf8hKEyMvW8SZzr3BS1MOL11HOTKeaD7kVuCYxEugfrdIzcAFsX9lxHSO2ubHadXektkdpLdMPd8WuLDzUknJqvYPDHBxcIzMea0XAQ=="); String decrypt = AESUtils.decrypt("lE7/ryHW69pxuwuttBk8edBc7j30BwVoO3j0hl0933QQGMEYUgfVRhD0KlSGJcZoXh5NLQC6k08lJEsRSi8N59ydUG4qPdvk40Txc+O6xaudXHuMBzSePAKqYxQmG7hENVx8+Oarp+Nd4YsUxgcD9pE8RywRd7etZfowZapsbV1azNXjX7e2A0lhfkF1q5cmeQGB+YI0G9zoBeAXPAH+izmdtAnHr8GlB5dnwH7y0ObCWhpxa0o4gAlEn5zw8UNqYHnVpvgjFE15N7XSJqIauSVcmxMK6OMEEwfrzJ4kzDz8WHLoOWz1vXzUYFhb2yR/rp33cOYfTNOSVGWD14BKd2pLNleHp7TUFo4sG4+IwN4nMSYQstROI21BaSrBNQz2EjsB56BCbyc9nSxCBRA2MTxPRxKkjx/pVXUa7IG7wG8lxp7M+noeXygBBfoVFG5pwk0ux73+xZtKQiHi7yFW3kAbeMT16G9J0MzsWd3T3XJt1rDCO192SPNf9x/DFNp/xmMa1hnc18hguoeooTZPiGnkMze29Bp4P0Xn/XYrR1rlpZwkkcwWaw2/XXOiU5cWbzg6VKay6bj8IgKF7iKXcrM1UbgNkHnkb5XMrFG6lBcfI8KsBLPtaNOLWyMfJc+Wk7nSy50W5TkVLcNBDzpEgODNorl/70wYifupz+IRDQWgYw8IEQzUV6iy1RocFwg9SePvQgKsEYdEKYbPTv/wXpN+HgsGRXVb0K0gUl1BvPoXkwejXDIfuCw+6tdihFJdGFJZf4/26PCGkjBbfcMoLRW4chhvjbnFhXO7Kqz2Ah5e5GkXrCMuYWhMLtbP3W+q70Vrk+8CQSr3Q0cWt0vxYPQZjEYkpMLkAdA5x17AIrTvt/CrYTBwHTIKpKaBjv6CmEI9pHWUKERQEuSpuP75JG9cRX8UIQLFtA+tvh4jU/m1X5hqaudRQnIZL5FUJrMoPkBBfZ5LManiMk5jC/UDbozihOuxIgb+tvMONbhejgBk7tGfvqFz53PZNp7dx6VWI4RsYCDcKduCnjKQuOdmSClPbaCphZXu8qObvareOV4pwDD3gyBNn+nkzVgdxU+dy/wdK5HQWrqvelGSUx1SkRyRPh2fbB+33esmaJDUPL3mKQxIaQ06ZK5N9OJeiJcPuv+NPxgcQi/rxUkGNA+yA5luwNm7IMqya9LOyiG1kELwNNHGdcsvB4hsr4C44zMlT9hmHtk/2p/h1LO6A3KSqR+02VSU7+4CCC6lxHEkrufE4FpQN1dofIlkYD9KGjey"); System.out.println(decrypt); ThCourseReqDTO questionBankReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThCourseReqDTO>() {}); System.out.println(questionBankReqDTO); }*/ /** * 课程删除 */ /*public static void main(String[] args) { /* public static void main(String[] args) { ThCourseDeleteReqDTO thQuestionBankReqDTO = new ThCourseDeleteReqDTO(); thQuestionBankReqDTO.setCourseUuid("20bded7f-660c-4380-b7f9-00f3976e1875"); String jsonString = JSONObject.toJSONString(thQuestionBankReqDTO); @@ -178,14 +185,42 @@ */ /*public static void main(String[] args) { ThBatchReqDTO thBatchReqDTO = new ThBatchReqDTO(); thBatchReqDTO.setUuid(UUID.randomUUID().toString()); thBatchReqDTO.setUuid("5096d539-9ec4-499e-a7ef-3fc1c688ba55"); thBatchReqDTO.setBatchName("第一期2024"); thBatchReqDTO.setTrainOrgName("测试机构"); thBatchReqDTO.setHaveExam(HaveExam.YES.getStatus()); thBatchReqDTO.setOpenStatus(OpenStatus.NO.getStatus()); List<String> courseList = new ArrayList<>(); courseList.add(new String("20bded7f-660c-4380-b7f9-00f3976e1875")); thBatchReqDTO.setCourseUuidList(courseList); thBatchReqDTO.setStatus(OpenStatus.NO.getStatus()); thBatchReqDTO.setDelFlag((byte)0); thBatchReqDTO.setBatchLessonNum(new BigDecimal(40)); List<ThBatchCourseReqDTO> courseList = new ArrayList<>(); ThBatchCourseReqDTO courseReqDTO = new ThBatchCourseReqDTO(); courseReqDTO.setCourseUuid("20bded7f-660c-4380-b7f9-00f3976e1875"); courseReqDTO.setDelFlag((byte) 0); courseReqDTO.setCourseLessonNum(new BigDecimal(20)); //章 List<ThBatchCourseChapterReqDTO> chapterList = new ArrayList<>(); ThBatchCourseChapterReqDTO chapterReqDTO = new ThBatchCourseChapterReqDTO(); chapterReqDTO.setChapterUuid("9d470732-6233-4820-82f7-37c80fe8ae68"); chapterReqDTO.setDelFlag((byte) 0); chapterReqDTO.setChapterLessonNum(new BigDecimal(2)); //节 List<ThBatchCourseChapterReqDTO> sectionList = new ArrayList<>(); ThBatchCourseChapterReqDTO sectionReqDTO1 = new ThBatchCourseChapterReqDTO(); sectionReqDTO1.setChapterUuid("d5cd3b26-be11-4ffe-8a34-283c49c85253"); sectionReqDTO1.setDelFlag((byte) 0); sectionReqDTO1.setChapterLessonNum(new BigDecimal(1)); ThBatchCourseChapterReqDTO sectionReqDTO2 = new ThBatchCourseChapterReqDTO(); sectionReqDTO2.setChapterUuid("eb7167be-5716-43d0-8e27-12bb43d1dded"); sectionReqDTO2.setDelFlag((byte) 0); sectionReqDTO2.setChapterLessonNum(new BigDecimal(1)); sectionList.add(sectionReqDTO2); sectionList.add(sectionReqDTO1); chapterReqDTO.setChildren(sectionList); chapterList.add(chapterReqDTO); courseReqDTO.setChapterList(chapterList); courseList.add(courseReqDTO); thBatchReqDTO.setCourseList(courseList); String jsonString = JSONObject.toJSONString(thBatchReqDTO); String encrypt = AESUtils.encrypt(jsonString); @@ -198,17 +233,19 @@ /** * 学生信息上报 */ /* public static void main(String[] args) { /* public static void main(String[] args) { ThStudentReqDTO thStudentReqDTO = new ThStudentReqDTO(); thStudentReqDTO.setName("李四"); thStudentReqDTO.setIdcard("11111"); thStudentReqDTO.setUuid("5096d539-9ec4-499e-a7ef-3fc1c688ba51"); thStudentReqDTO.setName("李四fafas"); thStudentReqDTO.setIdcard("11112"); thStudentReqDTO.setIndustry("ceshj"); thStudentReqDTO.setPost("post"); thStudentReqDTO.setPhone("111111"); thStudentReqDTO.setPhone("111111fafdsafa"); thStudentReqDTO.setSex(StudentSex.BOY.getStatus()); thStudentReqDTO.setTrainOrgName("测试机构"); thStudentReqDTO.setAuthPhoto("http://baidu.om"); thStudentReqDTO.setBatchUuid("cc90070e-8d30-4c55-b696-7af25fd98900"); thStudentReqDTO.setBatchUuid("5096d539-9ec4-499e-a7ef-3fc1c688ba55"); thStudentReqDTO.setDelFlag((byte) 0); List<ThStudentReqDTO> studentList = new ArrayList<>(); studentList.add(thStudentReqDTO); String jsonString = JSONObject.toJSONString(studentList); @@ -223,9 +260,9 @@ /** * 开班 * */ /*public static void main(String[] args) { /* public static void main(String[] args) { ThBatchOpenReqDTO thBatchOpenReqDTO = new ThBatchOpenReqDTO(); thBatchOpenReqDTO.setBatchUuid("b1b70bce-06dc-40b0-a3a1-dd595572eaa1"); thBatchOpenReqDTO.setBatchUuid("5096d539-9ec4-499e-a7ef-3fc1c688bad1"); String jsonString = JSONObject.toJSONString(thBatchOpenReqDTO); String encrypt = AESUtils.encrypt(jsonString); System.out.println(encrypt); @@ -236,8 +273,7 @@ * */ /* public static void main(String[] args) { ThBatchEndReqDTO thBatchOpenReqDTO = new ThBatchEndReqDTO(); thBatchOpenReqDTO.setBatchUuid("cc90070e-8d30-4c55-b696-7af25fd98900"); thBatchOpenReqDTO.setIdcard("11111"); thBatchOpenReqDTO.setBatchUuid("5096d539-9ec4-499e-a7ef-3fc1c688bad1"); String jsonString = JSONObject.toJSONString(thBatchOpenReqDTO); String encrypt = AESUtils.encrypt(jsonString); System.out.println(encrypt); @@ -248,13 +284,12 @@ * 考试记录 */ /*public static void main(String[] args) { List<ThExamRecordReqDTO> list = new ArrayList<>(); ThExamRecordReqDTO thExamRecordReqDTO = new ThExamRecordReqDTO(); thExamRecordReqDTO.setUuid(UUID.randomUUID().toString()); thExamRecordReqDTO.setIdcard("1111"); thExamRecordReqDTO.setIdcard("11111"); thExamRecordReqDTO.setExamName("考试1"); thExamRecordReqDTO.setExamNum(1); thExamRecordReqDTO.setCourseUuid("20bded7f-660c-4380-b7f9-00f3976e1875"); thExamRecordReqDTO.setBatchUuid("cc90070e-8d30-4c55-b696-7af25fd98900"); thExamRecordReqDTO.setBatchUuid("5096d539-9ec4-499e-a7ef-3fc1c688ba55"); thExamRecordReqDTO.setExamPassScore(new BigDecimal(80)); thExamRecordReqDTO.setExamIsPass(ExamIsPass.YES.getStatus()); thExamRecordReqDTO.setExamUserScore(new BigDecimal(90)); @@ -262,7 +297,8 @@ thExamRecordReqDTO.setExamSubmitTime(LocalDateTime.now()); thExamRecordReqDTO.setTrainOrgName("测试"); thExamRecordReqDTO.setExamTotalScore(new BigDecimal(100)); String jsonString = JSONObject.toJSONString(thExamRecordReqDTO); list.add(thExamRecordReqDTO); String jsonString = JSONObject.toJSONString(list); String encrypt = AESUtils.encrypt(jsonString); System.out.println(encrypt); @@ -270,11 +306,12 @@ /** * */ /* public static void main(String[] args) { /*public static void main(String[] args) { List<ThStudyDetailReqDTO> list = new ArrayList<>(); ThStudyDetailReqDTO thStudyDetailReqDTO = new ThStudyDetailReqDTO(); thStudyDetailReqDTO.setUuid(UUID.randomUUID().toString()); thStudyDetailReqDTO.setUuid("8c061cb1-8560-43b8-abe4-04ae8e763f59"); thStudyDetailReqDTO.setIdcard("11111"); thStudyDetailReqDTO.setBatchUuid("cc90070e-8d30-4c55-b696-7af25fd98900"); thStudyDetailReqDTO.setBatchUuid("5096d539-9ec4-499e-a7ef-3fc1c688ba55"); thStudyDetailReqDTO.setCourseUuid("20bded7f-660c-4380-b7f9-00f3976e1875"); thStudyDetailReqDTO.setFinishStatus((byte)0); thStudyDetailReqDTO.setStartPosition(0l); @@ -288,7 +325,7 @@ thStudyDetailReqDTO.setLessonReportUrl("hht"); List<ThStudyTrackReqDTO> thStudyTrackReqDTOList = new ArrayList<>(); ThStudyTrackReqDTO thStudyTrackReqDTO = new ThStudyTrackReqDTO(); thStudyTrackReqDTO.setUuid(UUID.randomUUID().toString()); thStudyTrackReqDTO.setUuid("3162d570-9099-4dfb-b2fa-ec705f53758c"); thStudyTrackReqDTO.setStartTime(LocalDateTime.now()); thStudyTrackReqDTO.setEndTime(LocalDateTime.now()); thStudyTrackReqDTO.setTimeInterval(789878l); @@ -296,21 +333,22 @@ List<ThStudytAuthReqDTO> thStudytAuthReqDTOList = new ArrayList<>(); ThStudytAuthReqDTO thStudytAuthReqDTO = new ThStudytAuthReqDTO(); thStudytAuthReqDTO.setUuid(UUID.randomUUID().toString()); thStudytAuthReqDTO.setAuthPostion(0l); thStudytAuthReqDTO.setAuthPosition(0l); thStudytAuthReqDTO.setAuthTime(LocalDateTime.now()); thStudytAuthReqDTO.setApprovePhoto("454l"); thStudytAuthReqDTO.setFaceType(FaceType.AUTH.getType()); thStudytAuthReqDTOList.add(thStudytAuthReqDTO); thStudyDetailReqDTO.setTrackList(thStudyTrackReqDTOList); thStudyDetailReqDTO.setStudentAuthList(thStudytAuthReqDTOList); String jsonString = JSONObject.toJSONString(thStudyDetailReqDTO); thStudyDetailReqDTO.setAuthList(thStudytAuthReqDTOList); list.add(thStudyDetailReqDTO); String jsonString = JSONObject.toJSONString(list); String encrypt = AESUtils.encrypt(jsonString); System.out.println(encrypt); }*/ public static void main(String[] args) { String decrypt = AESUtils.decrypt("PmvIbOPyVJ2pYqmGer1YBAij35Tfdk8lufUv+Y2CyqAds/iyh6PwS4dsnUzNO3El4Sk/WXXwbPGQ7UdaV8jznT/3YPqTeLdkxQ/1/6r9pvxuD2tyds8jo9DIBZYVxHpX3/9Z5Byp1UvszWeTWeaiDN+paKNO5v/TcXrosdce2dMGXLwY0i3GYA1JIbWWTTrvoWKJK+k5VW+5NnnDo+2Gj5CNSNv4c2wT7f3hTRy6B66RrRN3xkucCw4VRJZ+r+RK"); /* public static void main(String[] args) { String decrypt = AESUtils.decrypt(""); System.out.println(decrypt); } }*/ } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThBatch.java
@@ -7,6 +7,7 @@ import lombok.Data; import nonapi.io.github.classgraph.json.Id; import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -23,9 +24,10 @@ private Long institutionId; private String institutionName; private Byte haveExam; private Byte openStatus; private Byte status; private String trainOrgName; // private Byte finishStatus; private BigDecimal batchLessonNum; // private Byte finishStatus; //删除标志(0代表存在 2代表删除) private Byte delFlag; exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThBatchCourse.java
@@ -3,8 +3,12 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import nonapi.io.github.classgraph.json.Id; import java.math.BigDecimal; import java.time.LocalDateTime; @TableName("th_batch_course") @Data @@ -17,4 +21,21 @@ private String batchUuid; private Byte delFlag; private Long institutionId; private BigDecimal courseLessonNum; private String courseName; private String trainOrgName; /** 创建者 */ private String createBy; /** 创建时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; /** 更新者 */ private String updateBy; /** 更新时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThBatchCourseChapter.java
对比新文件 @@ -0,0 +1,54 @@ package com.gkhy.exam.institutionalaccess.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import nonapi.io.github.classgraph.json.Id; import java.math.BigDecimal; import java.time.LocalDateTime; @Data @TableName("th_batch_course_chapter") public class ThBatchCourseChapter { @Id @TableId(type = IdType.AUTO) private Long id; private String batchUuid; private String courseUuid; private String chapterUuid; private String chapterCode; private String chapterName; //有无资源(10无,20有) private Byte haveResource; //资源类型(0视频,1音频) private Byte resourceType; private BigDecimal lessonNum; private Long duration; //视频路径 private String url; private String parentUuid; private Long institutionId; //删除标志(0代表存在 2代表删除) private Byte delFlag; /** 创建者 */ private String createBy; /** 创建时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; /** 更新者 */ private String updateBy; /** 更新时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; private Integer serialno; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThCourseChapter.java
@@ -46,5 +46,8 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; private Integer serialno; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThCourseDO.java
对比新文件 @@ -0,0 +1,7 @@ package com.gkhy.exam.institutionalaccess.entity; import lombok.Data; @Data public class ThCourseDO { } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThExamRecord.java
@@ -21,7 +21,6 @@ private Long id; private String uuid; private String idcard; private String courseUuid; private String batchUuid; private Long institutionId; private String institutionName; @@ -35,7 +34,6 @@ private BigDecimal examTotalScore; private BigDecimal examPassScore; private Byte examIsPass; private Integer examNum; //删除标志(0代表存在 2代表删除) private Byte delFlag; exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThStudentBatch.java
文件名从 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThStudentCourse.java 修改 @@ -9,14 +9,14 @@ import java.time.LocalDateTime; @TableName("th_student_course") @TableName("th_student_batch") @Data public class ThStudentCourse { public class ThStudentBatch { @Id @TableId(type = IdType.AUTO) private Long id; private String uuid; private String idcard; private String courseUuid; private String batchUuid; private String name; private Byte sex; @@ -37,4 +37,7 @@ /** 创建时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; private String updateBy; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/enums/OpenStatus.java
@@ -2,9 +2,10 @@ public enum OpenStatus { //开班(0否,1是) NO((byte)0,"否"), YES((byte)1,"是"), //开班(0未开班,1开班,2结束) NO((byte)0,"未开班"), START((byte)1,"开班"), END((byte)2,"结束") ; private Byte status; exam-system/src/main/java/com/gkhy/exam/institutionalaccess/enums/StudentSex.java
@@ -2,9 +2,10 @@ public enum StudentSex { NNKNOWN((byte)0,"未知"), BOY((byte)1,"男"), GIRL((byte)2,"女"), BOY((byte)0,"男"), GIRL((byte)1,"女"), ; private Byte status; exam-system/src/main/java/com/gkhy/exam/institutionalaccess/mapper/ThBatchCourseChapterMapper.java
对比新文件 @@ -0,0 +1,21 @@ package com.gkhy.exam.institutionalaccess.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.gkhy.exam.institutionalaccess.entity.ThBatchCourseChapter; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @Repository @Mapper public interface ThBatchCourseChapterMapper extends BaseMapper<ThBatchCourseChapter> { void deleteByBatchUuid(@Param("batchUuid") String batchUuid); List<ThBatchCourseChapter> getByBatchUuids(@Param("batchUuids")List<String> batchUuids); Integer insertBatch(@Param("batchCourseChapterList") List<ThBatchCourseChapter> batchCourseChapterList); Integer updateBatch(@Param("batchCourseChapterList") List<ThBatchCourseChapter> batchCourseChapterList); List<ThBatchCourseChapter> getByChapterUuids(@Param("chapterUuids") List<String> chapterUuids); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/mapper/ThBatchCourseMapper.java
@@ -14,7 +14,14 @@ public interface ThBatchCourseMapper extends BaseMapper<ThBatchCourse> { void deleteByBatchUuidAndCourseUuid(@Param("list") List<ThBatchCourse> deleteBatchCourseList); List<ThBatchCourseVO> getListByBatchUuids(@Param("batchUuids")List<String> batchUuids); List<ThBatchCourseVO> getListByBatchUuid(@Param("batchUuid")String batchUuid); void deleteByBatchUuid(@Param("batchUuid")String batchUuid); List<ThBatchCourse> getByBatchUuids(@Param("batchUuids") List<String> batchUuids); Integer insertBatch(@Param("courseList") List<ThBatchCourse> courseList); Integer updateBatch(@Param("courseList") List<ThBatchCourse> courseList); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/mapper/ThBatchMapper.java
@@ -14,4 +14,10 @@ @Mapper public interface ThBatchMapper extends BaseMapper<ThBatch> { List<ThBatchVO> listByPage(@Param("query") ThBatchQuery query); List<ThBatch> getByUuids(@Param("batchUuids") List<String> batchUuids); Integer insertBatch(@Param("batchList") List<ThBatch> batchList); Integer updateBatch(@Param("batchList") List<ThBatch> batchList); List<ThBatch> getBatchNameByUuids(@Param("batchUuids")List<String> batchUuids); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/mapper/ThCourseChapterMapper.java
@@ -15,4 +15,11 @@ List<ThCourseChapterVO> listByCourseUuids(@Param("courseUuids") List<String> courseUuids); List<ThCourseChapterVO> listByCourseUuid(@Param("courseUuid")String courseUuid); List<ThCourseChapter> getByUuids(@Param("chapterUuids") List<String> chapterUuids); Integer insertBatch(@Param("courseChapterList")List<ThCourseChapter> courseChapterList); Integer updateBatch(@Param("courseChapterList")List<ThCourseChapter> courseChapterList); List<ThCourseChapter> getChapterNameByUuids(@Param("chapterUuids")List<String> chapterUuids); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/mapper/ThCourseMapper.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.gkhy.exam.institutionalaccess.entity.ThCourse; import com.gkhy.exam.institutionalaccess.model.query.ThCourseQuery; import com.gkhy.exam.institutionalaccess.model.resp.ThCourseRespDTO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -12,5 +13,13 @@ @Repository @Mapper public interface ThCourseMapper extends BaseMapper<ThCourse> { List<ThCourse> listByPage(@Param("query") ThCourseQuery query); List<ThCourseRespDTO> listByPage(@Param("query") ThCourseQuery query); List<ThCourse> getByUuidList(@Param("courseUuids") List<String> courseUuids); Integer insertBatch(@Param("courseList") List<ThCourse> courseList); Integer updateBatch(@Param("courseList") List<ThCourse> courseList); List<ThCourse> getCourseNameByUuids(@Param("courseUuids")List<String> courseUuids); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/mapper/ThExamRecordMapper.java
@@ -15,4 +15,7 @@ @Mapper public interface ThExamRecordMapper extends BaseMapper<ThExamRecord> { List<ThExamRecordVO> listByPage(@Param("query") ThExamRecordQuery query); List<ThExamRecord> getByUuids(@Param("examUuids") List<String> examUuids); Integer insertBatch(@Param("list") List<ThExamRecord> list); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/mapper/ThStudentBatchMapper.java
对比新文件 @@ -0,0 +1,38 @@ package com.gkhy.exam.institutionalaccess.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.gkhy.exam.institutionalaccess.entity.ThStudentBatch; import com.gkhy.exam.institutionalaccess.model.vo.ThStatisticStudentVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudentBatchCourseVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudentBatchVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudentCourseVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @Mapper @Repository public interface ThStudentBatchMapper extends BaseMapper<ThStudentBatch> { List<ThStatisticStudentVO> statisticByBatchUuid(); List<ThStatisticStudentVO> statisticByCourseUuid(); List<ThStudentBatchCourseVO> getStudentBatchCourseVOByBatchUuid(@Param("batchUuid") String batchUuid); void updateByBatchUuid(@Param("batchUuid")String batchUuid); void updateFinishStatusByBatchUuid(@Param("batchUuid")String batchUuid); Integer insertBatch(@Param("list") List<ThStudentBatch> saveThStudentBatchList); Integer updateBatch(@Param("list") List<ThStudentBatch> updateThStudentBatchList); List<ThStudentBatchVO> getStudentBatchVOByBatchUuid(@Param("batchUuid") String batchUuid); List<ThStudentBatch> getByIdCards(@Param("idcards") List<String> idcards); List<ThStudentBatchVO> getStudentBatchVOByCourseUuid(@Param("courseUuid") String courseUuid); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/mapper/ThStudentCourseMapper.java
文件已删除 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/mapper/ThStudentMapper.java
@@ -11,7 +11,12 @@ @RequestMapping @Mapper public interface ThStudentMapper extends BaseMapper<ThStudent> { int updateByIdcard(@Param("list") List<ThStudent> list); Integer updateBatch(@Param("list") List<ThStudent> list); Integer insertBatch(@Param("list") List<ThStudent> saveSudentList); List<ThStudent> getByIdCards(@Param("idcards") List<String> idcards); List<ThStudent> getNameByIdcards(@Param("idcards")List<String> idcards); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/mapper/ThStudyAuthMapper.java
@@ -12,4 +12,7 @@ @Mapper public interface ThStudyAuthMapper extends BaseMapper<ThStudyAuth> { List<String> getUuidByStudyDetaiId(@Param("studyDetaiId") String studyDetaiId); List<ThStudyAuth> getByStudyDetaiUuids(@Param("studyUuids") List<String> studyUuids); Integer insertBatch(@Param("list") List<ThStudyAuth> list); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/mapper/ThStudyDetailMapper.java
@@ -20,4 +20,12 @@ List<ThStudyVO> statisticDurationByIdcard(@Param("batchUuid") String batchUuid); List<ThStudyDetailVO> listByBatchUuid(@Param("batchUuid") String batchUuid); List<ThStudyDetail> getByUuids(@Param("studyUuids") List<String> studyUuids); Integer insertBatch(@Param("list") List<ThStudyDetail> list); Integer updateBatch(@Param("list") List<ThStudyDetail> list); List<ThStudyDetailVO> listByCourseUuid(@Param("courseUuid")String courseUuid); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/mapper/ThStudyTrackMapper.java
@@ -13,4 +13,6 @@ public interface ThStudyTrackMapper extends BaseMapper<ThStudyTrack> { List<String> getUuidByStudyDetaiId(@Param("studyDetaiId") String studyDetaiId); List<ThStudyTrack> getByStudyDetaiUuids(@Param("studyUuids") List<String> studyUuids); Integer insertBatch(@Param("list") List<ThStudyTrack> list); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/query/ThStudyDetailQuery.java
@@ -15,4 +15,10 @@ private Date startTime; @JsonFormat(pattern = "yyyy-MM-dd") private Date endTime; private Integer pageNum; /** 每页显示记录数 */ private Integer pageSize; private Integer startSize; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/req/ThBatchCourseChapterReqDTO.java
对比新文件 @@ -0,0 +1,17 @@ package com.gkhy.exam.institutionalaccess.model.req; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data public class ThBatchCourseChapterReqDTO { private String chapterUuid; private BigDecimal chapterLessonNum; //删除标志(0代表存在 2代表删除) private Byte delFlag; //孩子 private List<ThBatchCourseChapterReqDTO> children; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/req/ThBatchCourseReqDTO.java
对比新文件 @@ -0,0 +1,17 @@ package com.gkhy.exam.institutionalaccess.model.req; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data public class ThBatchCourseReqDTO { private String courseUuid; //删除标志(0代表存在 2代表删除) private Byte delFlag; private BigDecimal courseLessonNum; private List<ThBatchCourseChapterReqDTO> chapterList; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/req/ThBatchEndReqDTO.java
@@ -5,5 +5,5 @@ @Data public class ThBatchEndReqDTO { private String batchUuid; private String idcard; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/req/ThBatchReqDTO.java
@@ -1,7 +1,9 @@ package com.gkhy.exam.institutionalaccess.model.req; import com.gkhy.exam.institutionalaccess.entity.ThCourse; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data @@ -12,7 +14,8 @@ private String institutionName; private String trainOrgName; private Byte haveExam; private Byte openStatus; //private Byte delFlag; private List<String> courseUuidList; private Byte status; private BigDecimal batchLessonNum; private Byte delFlag; private List<ThBatchCourseReqDTO> courseList; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/req/ThCourseChapterReqDTO.java
@@ -22,7 +22,8 @@ //视频路径 private String url; //删除标志(0代表存在 2代表删除) //private Byte delFlag; private Byte delFlag; private Integer serialno; //孩子 private List<ThCourseChapterReqDTO> children; exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/req/ThExamRecordReqDTO.java
@@ -10,7 +10,6 @@ public class ThExamRecordReqDTO { private String uuid; private String idcard; private String courseUuid; private String batchUuid; private String institutionId; private String institutionName; @@ -24,5 +23,4 @@ private BigDecimal examTotalScore; private BigDecimal examPassScore; private Byte examIsPass; private Integer examNum; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/req/ThStudentReqDTO.java
@@ -6,6 +6,7 @@ @Data public class ThStudentReqDTO { private String uuid; private String name; private Byte sex; private String phone; @@ -16,4 +17,5 @@ private String post; private String trainOrgName; private String batchUuid; private Byte delFlag; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/resp/ThCourseChapterRespDTO.java
@@ -19,6 +19,7 @@ private Long duration; //视频路径 private String url; private Integer serialno; private List<ThCourseChapterRespDTO> children; exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/resp/ThPlatformBatchRespDTO.java
对比新文件 @@ -0,0 +1,27 @@ package com.gkhy.exam.institutionalaccess.model.resp; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @Data public class ThPlatformBatchRespDTO { //(批次)班级编号 private String batchUuid; //(批次)班级名称 private String batchName; //班级状态 private Byte batchStatus; //班级总学时 private BigDecimal batchLessonNum; //班级已完成学时 private BigDecimal bCompleteLessonNum; //考试 private Byte haveExam; //创建时间 private LocalDateTime createTime; //包含课程 private List<ThPlatformCourseRespDTO> courseList; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/resp/ThPlatformChapterRespDTO.java
对比新文件 @@ -0,0 +1,22 @@ package com.gkhy.exam.institutionalaccess.model.resp; import lombok.Data; import java.math.BigDecimal; @Data public class ThPlatformChapterRespDTO { //章节uuid private String chapterUuid; //章节名称 private String chapterName; //完成状态 private Byte chapterStatus; private BigDecimal chapterLessonNum; //章节视频总时长 private BigDecimal chapterDuration; //已完成 private BigDecimal chCompleteDuration; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/resp/ThPlatformCourseRespDTO.java
对比新文件 @@ -0,0 +1,23 @@ package com.gkhy.exam.institutionalaccess.model.resp; import lombok.Data; import java.util.List; import java.math.BigDecimal; @Data public class ThPlatformCourseRespDTO { //课程uuid private String courseUuid; //课程名称 private String courseName; //课程编号 private String courseCode; //课程总学时 private BigDecimal courseLessonNum; //课程已完成学时 private BigDecimal coCompleteLessonNum; //章节 private List<ThPlatformChapterRespDTO> chapterList; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/resp/ThPlatformStudentRespDTO.java
对比新文件 @@ -0,0 +1,13 @@ package com.gkhy.exam.institutionalaccess.model.resp; import lombok.Data; import java.util.List; @Data public class ThPlatformStudentRespDTO { private String studentUuid; private String name; private String idcard; private List<ThPlatformBatchRespDTO> batchList; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/resp/ThStudentStudyRespDTO.java
@@ -3,14 +3,18 @@ import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; @Data public class ThStudentStudyRespDTO { private String idcard; private String name; //完成 private BigDecimal lessonNum; private BigDecimal lessonTocal; //所有 private BigDecimal batchLessonNum; private BigDecimal courseLessonNum; private Byte finishStatus; private String url; private String courseName; private String batchUuid; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/vo/ThBatchCourseChapterVO.java
对比新文件 @@ -0,0 +1,28 @@ package com.gkhy.exam.institutionalaccess.model.vo; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data public class ThBatchCourseChapterVO { private Long id; private String batchUuid; private String courseUuid; private String chapterUuid; private String chapterCode; private String chapterName; //有无资源(10无,20有) private Byte haveResource; //资源类型(0视频,1音频) private Byte resourceType; private BigDecimal lessonNum; private Long duration; //视频路径 private String url; private String parentUuid; private Integer serialno; private List<ThBatchCourseChapterVO> children; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/vo/ThBatchCourseVO.java
@@ -3,17 +3,24 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.gkhy.exam.institutionalaccess.entity.ThBatchCourse; import com.gkhy.exam.institutionalaccess.entity.ThBatchCourseChapter; import lombok.Data; import nonapi.io.github.classgraph.json.Id; @TableName("th_batch_course") import java.math.BigDecimal; import java.util.List; @Data public class ThBatchCourseVO { private Long id; private String courseUuid; private String batchUuid; private BigDecimal courseLessonNum; private String courseName; private String trainOrgName; private List<ThBatchCourseChapterVO> chapterList; //视频时长 private Long duration; exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/vo/ThBatchVO.java
@@ -14,7 +14,7 @@ private Long institutionId; private String institutionName; private Byte haveExam; private Byte openStatus; private Byte status; private String trainOrgName; private Integer studentCount; //删除标志(0代表存在 2代表删除) exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/vo/ThCourseChapterVO.java
@@ -21,4 +21,5 @@ private String parentUuid; private Long institutionId; private String courseUuid; private Integer serialno; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/vo/ThExamRecordVO.java
@@ -28,7 +28,6 @@ private BigDecimal examTotalScore; private BigDecimal examPassScore; private Byte examIsPass; private Integer examNum; //删除标志(0代表存在 2代表删除) private Byte delFlag; exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/vo/ThStudentBatchCourseVO.java
对比新文件 @@ -0,0 +1,11 @@ package com.gkhy.exam.institutionalaccess.model.vo; import lombok.Data; @Data public class ThStudentBatchCourseVO { private String idcard; private String name; private String batchUuid; private String courseUuid; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/vo/ThStudentBatchVO.java
对比新文件 @@ -0,0 +1,25 @@ package com.gkhy.exam.institutionalaccess.model.vo; import lombok.Data; import java.math.BigDecimal; @Data public class ThStudentBatchVO { private Long id; private String idcard; private String batchUuid; private String name; private Byte sex; private String phone; private String authPhoto; private Long institutionId; private String institutionName; private String trainOrgName; private String industry; private String occupation; private String post; private Byte finishStatus; private BigDecimal batchLessonNum; private BigDecimal courseLessonNum; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/vo/ThStudyDetailVO.java
@@ -25,7 +25,7 @@ private String batchUuid; private String batchName; private String chapterUuid; private String catalogName; private String chapterName; private Byte finishStatus; private Long duration; private String durationDesc; exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/vo/ThStudyVO.java
@@ -7,4 +7,5 @@ private String idcard; private String name; private Long duration; private String courseUuid; } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThBatchCourseChapterService.java
对比新文件 @@ -0,0 +1,25 @@ package com.gkhy.exam.institutionalaccess.service; import com.baomidou.mybatisplus.extension.service.IService; import com.gkhy.exam.institutionalaccess.entity.ThBatchCourseChapter; import com.gkhy.exam.institutionalaccess.entity.ThCourseChapter; import org.springframework.scheduling.annotation.Async; import java.util.List; public interface ThBatchCourseChapterService extends IService<ThBatchCourseChapter> { void deleteByBatchUuid(String batchUuid); List<ThBatchCourseChapter> getByBatchUuid(String batchUuid); ThBatchCourseChapter getByUuid(String batchUuid, String courseUuid, String chapterUuid); List<ThBatchCourseChapter> getListByBatchUuids(List<String> batchUuids); //@Async("SocketTaskExecutor") Integer insertBatch(List<ThBatchCourseChapter> chapterList); //@Async("SocketTaskExecutor") Integer updateBatch(List<ThBatchCourseChapter> chapterList); List<ThBatchCourseChapter> getByChapterUuids(List<String> chapterUuids); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThBatchCourseService.java
@@ -3,24 +3,29 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.gkhy.exam.institutionalaccess.entity.ThBatchCourse; import com.gkhy.exam.institutionalaccess.entity.ThStudentCourse; import com.gkhy.exam.institutionalaccess.model.vo.ThBatchCourseVO; import com.gkhy.exam.institutionalaccess.model.vo.ThBatchVO; import org.springframework.scheduling.annotation.Async; import java.util.List; public interface ThBatchCourseService extends IService<ThBatchCourse> { List<ThBatchCourse> getByBatchUuid(String uuid); List<ThBatchCourse> getByBatchUuid(String batchUuid); List<String> getCourseUuisByBatchUuid(String batchUuid); void deleteByBatchUuidAndCourseUuid(List<ThBatchCourse> deleteBatchCourseList); List<ThBatchCourseVO> getListByBatchUuids(List<String> batchUuids); List<ThBatchCourse> getListByBatchUuids(List<String> batchUuids); List<ThBatchCourseVO> getListByBatchUuid(String batchUuid); boolean isExsit(String courseUuid); List<ThBatchCourse> listByInstitutionId(Long InstitutionId); void deleteByBatchUuid(String batchUuid); //@Async("SocketTaskExecutor") Integer insertBatch(List<ThBatchCourse> courseList); //@Async("SocketTaskExecutor") Integer updateBatch(List<ThBatchCourse> courseList); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThBatchManagerService.java
@@ -1,9 +1,11 @@ package com.gkhy.exam.institutionalaccess.service; import com.gkhy.exam.institutionalaccess.entity.ThBatch; import com.gkhy.exam.institutionalaccess.entity.ThBatchCourse; import com.gkhy.exam.institutionalaccess.model.query.ThBatchQuery; import com.gkhy.exam.institutionalaccess.model.resp.ThBatchCourseRespDTO; import com.gkhy.exam.institutionalaccess.model.resp.ThStudentStudyRespDTO; import com.gkhy.exam.institutionalaccess.model.vo.ThBatchCourseVO; import com.gkhy.exam.institutionalaccess.model.vo.ThBatchVO; import java.util.List; @@ -14,4 +16,5 @@ List<ThBatchCourseRespDTO> period(String batchUuid); List<ThStudentStudyRespDTO> getStudent(String batchUuid); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThBatchService.java
@@ -4,6 +4,7 @@ import com.gkhy.exam.institutionalaccess.entity.ThBatch; import com.gkhy.exam.institutionalaccess.model.query.ThBatchQuery; import com.gkhy.exam.institutionalaccess.model.vo.ThBatchVO; import org.springframework.scheduling.annotation.Async; import java.util.List; @@ -13,4 +14,13 @@ List<ThBatch> listByInstitutionId(Long institutionId); List<ThBatchVO> listByPage(ThBatchQuery query); List<ThBatch> getByUuids(List<String> batchUuids); //@Async("SocketTaskExecutor") Integer insertBatch(List<ThBatch> batchList); //@Async("SocketTaskExecutor") Integer updateBatch(List<ThBatch> batchList); List<ThBatch> getBatchNameByUuids(List<String> batchUuids); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThCourseChapterService.java
@@ -3,6 +3,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.gkhy.exam.institutionalaccess.entity.ThCourseChapter; import com.gkhy.exam.institutionalaccess.model.vo.ThCourseChapterVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStatisticStudentVO; import org.springframework.scheduling.annotation.Async; import java.util.List; public interface ThCourseChapterService extends IService<ThCourseChapter> { @@ -14,4 +17,12 @@ ThCourseChapter getByUuid(String batchUuid); List<ThCourseChapter> getByUuids(List<String> reqAllChapterIds); //@Async("SocketTaskExecutor") Integer insertBatch(List<ThCourseChapter> courseChapterList); //@Async("SocketTaskExecutor") Integer updateBatch(List<ThCourseChapter> courseChapterList); List<ThCourseChapter> getChapterNameByUuids(List<String> chapterUuids); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThCourseManagerService.java
@@ -1,7 +1,10 @@ package com.gkhy.exam.institutionalaccess.service; import com.gkhy.exam.institutionalaccess.entity.ThStudent; import com.gkhy.exam.institutionalaccess.entity.ThStudentBatch; import com.gkhy.exam.institutionalaccess.model.query.ThCourseQuery; import com.gkhy.exam.institutionalaccess.model.resp.ThCourseRespDTO; import com.gkhy.exam.institutionalaccess.model.resp.ThStudentStudyRespDTO; import java.util.List; @@ -9,4 +12,8 @@ List<ThCourseRespDTO> listByPage(ThCourseQuery query); ThCourseRespDTO findById(Long id); List<ThStudentStudyRespDTO> getSutdent(String courseUuid); //List<ThStudentBatchR> getStudent(String ); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThCourseService.java
@@ -3,12 +3,14 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.gkhy.exam.institutionalaccess.entity.ThCourse; import com.gkhy.exam.institutionalaccess.model.query.ThCourseQuery; import com.gkhy.exam.institutionalaccess.model.resp.ThCourseRespDTO; import org.apache.ibatis.annotations.Param; import org.springframework.scheduling.annotation.Async; import java.util.List; public interface ThCourseService extends IService<ThCourse> { List<ThCourse> listByPage(@Param("query") ThCourseQuery query); List<ThCourseRespDTO> listByPage(@Param("query") ThCourseQuery query); ThCourse getByUuid(String uuid); @@ -16,4 +18,13 @@ List<ThCourse> listByInstitutionId(Long institutionId); List<ThCourse> getByUuidList(List<String> courseUuids); //@Async("SocketTaskExecutor") Integer insertBatch(List<ThCourse> courseList); //@Async("SocketTaskExecutor") Integer updateBatch(List<ThCourse> courseList); List<ThCourse> getCourseNameByUuids(List<String> courseUuids); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThExamRecordService.java
@@ -4,6 +4,7 @@ import com.gkhy.exam.institutionalaccess.entity.ThExamRecord; import com.gkhy.exam.institutionalaccess.model.query.ThExamRecordQuery; import com.gkhy.exam.institutionalaccess.model.vo.ThExamRecordVO; import org.springframework.scheduling.annotation.Async; import java.util.List; @@ -11,4 +12,8 @@ List<ThExamRecord> listByInstitutionId(Long institutionId); List<ThExamRecordVO> listByPage(ThExamRecordQuery query); List<ThExamRecord> getByUuids(List<String> examUuids); //@Async("SocketTaskExecutor") Integer insertBatch(List<ThExamRecord> examRecordList); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThStudentBatchService.java
对比新文件 @@ -0,0 +1,39 @@ package com.gkhy.exam.institutionalaccess.service; import com.baomidou.mybatisplus.extension.service.IService; import com.gkhy.exam.institutionalaccess.entity.ThStudentBatch; import com.gkhy.exam.institutionalaccess.model.vo.ThStatisticStudentVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudentBatchCourseVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudentBatchVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudentCourseVO; import org.springframework.scheduling.annotation.Async; import java.util.List; public interface ThStudentBatchService extends IService<ThStudentBatch> { List<ThStudentBatch> getByIdCards(List<String> idcards); List<ThStatisticStudentVO> statisticByBatchUuid(); List<ThStudentBatch> listByInstitutionId(Long id); List<ThStatisticStudentVO> statisticByCourseUuid(); List<ThStudentBatchCourseVO> getStudentBatchCourseVOByBatchUuid(String batchUuid); void updateByBatchUuid(String batchUuid); ThStudentBatch getByIdcardAndBatchUuid(String idcard, String batchUuid); List<ThStudentBatch> getByBatchUuid(String batchUuid); void updateFinishStatusByBatchUuid(String batchUuid); //@Async("SocketTaskExecutor") Integer insertBatch(List<ThStudentBatch> saveThStudentBatchList); //@Async("SocketTaskExecutor") Integer updateBatch(List<ThStudentBatch> updateThStudentBatchList); List<ThStudentBatchVO> getStudentBatchVOByBatchUuid(String batchUuid); List<ThStudentBatchVO> getStudentBatchVOByCourseUuid(String courseUuid); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThStudentCourseService.java
文件已删除 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThStudentService.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.gkhy.exam.institutionalaccess.entity.ThStudent; import com.gkhy.exam.institutionalaccess.model.vo.ThStatisticStudentVO; import org.springframework.scheduling.annotation.Async; import java.util.List; @@ -11,8 +12,11 @@ ThStudent getByIdcard(String idcard); List<ThStudent> getByIdcards(List<String> idcards); //@Async("SocketTaskExecutor") Integer updateBatch(List<ThStudent> updateStudentList); int updateByIdcard(List<ThStudent> updateStudentList); //@Async("SocketTaskExecutor") Integer insertBatch(List<ThStudent> saveSudentList); List<ThStudent> getNameByIdcards(List<String> idcards); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThStudyAuthService.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.gkhy.exam.institutionalaccess.entity.ThStudyAuth; import com.gkhy.exam.institutionalaccess.model.vo.ThStudyAuthVO; import org.springframework.scheduling.annotation.Async; import java.util.List; @@ -10,5 +11,8 @@ List<String> getUuidByStudyDetaiId(String studyDetaiId); List<ThStudyAuth> getListByStudyDetaiIds(List<String> detailUuids); List<ThStudyAuth> getByStudyDetaiUuids(List<String> studyUuids); //@Async("SocketTaskExecutor") Integer insetBatch(List<ThStudyAuth> thStudyAuthList); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThStudyDetailService.java
@@ -18,4 +18,11 @@ List<ThStudyVO> statisticDurationByIdcard(String batchUuid); List<ThStudyDetailVO> listByBatchUuid(String batchUuid); List<ThStudyDetail> getByUuids(List<String> studyUuids); Integer insertBatch(List<ThStudyDetail> list); Integer updateBatch(List<ThStudyDetail> list); List<ThStudyDetailVO> listByCourseUuid(String courseUuid); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThStudyTrackService.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.gkhy.exam.institutionalaccess.entity.ThStudyTrack; import org.springframework.scheduling.annotation.Async; import java.util.List; @@ -9,4 +10,7 @@ List<String> getUuidByStudyDetaiId(String studyDetaiId); List<ThStudyTrack> getListByStudyDetaiIds(List<String> detailUuids); //@Async("SocketTaskExecutor") Integer insertBatch(List<ThStudyTrack> list); List<ThStudyTrack> getByStudyDetailUuids(List<String> studyUuids); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/TripartiteInterfaceService.java
@@ -21,5 +21,5 @@ AjaxResult receiveBatchOpen(JSONObject jsonObject); AjaxResult receiveBarchEnd(JSONObject jsonObject); AjaxResult receiveBatchEnd(JSONObject jsonObject); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThBatchCourseChapterServiceImpl.java
对比新文件 @@ -0,0 +1,72 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import cn.hutool.core.collection.ListUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.institutionalaccess.entity.ThBatchCourse; import com.gkhy.exam.institutionalaccess.entity.ThBatchCourseChapter; import com.gkhy.exam.institutionalaccess.entity.ThCourseChapter; import com.gkhy.exam.institutionalaccess.mapper.ThBatchCourseChapterMapper; import com.gkhy.exam.institutionalaccess.service.ThBatchCourseChapterService; import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; @Service("ThBatchCourseChapterService") public class ThBatchCourseChapterServiceImpl extends ServiceImpl<ThBatchCourseChapterMapper, ThBatchCourseChapter> implements ThBatchCourseChapterService { @Override public void deleteByBatchUuid(String batchUuid) { baseMapper.deleteByBatchUuid(batchUuid); } @Override public List<ThBatchCourseChapter> getByBatchUuid(String batchUuid) { return baseMapper.selectList(new LambdaQueryWrapper<ThBatchCourseChapter>() .eq(ThBatchCourseChapter::getBatchUuid, batchUuid) .eq(ThBatchCourseChapter::getDelFlag, DeleteStatusEnum.NO.getStatus())); } @Override public ThBatchCourseChapter getByUuid(String batchUuid, String courseUuid, String chapterUuid) { return baseMapper.selectOne(new LambdaQueryWrapper<ThBatchCourseChapter>() .eq(ThBatchCourseChapter::getBatchUuid, batchUuid) .eq(ThBatchCourseChapter::getCourseUuid, courseUuid) .eq(ThBatchCourseChapter::getChapterUuid, chapterUuid) .eq(ThBatchCourseChapter::getDelFlag, DeleteStatusEnum.NO.getStatus())); } @Override public List<ThBatchCourseChapter> getListByBatchUuids(List<String> batchUuids) { List<ThBatchCourseChapter> allBatchCourseChapterList = new ArrayList<>(); List<List<String>> split = ListUtil.split(batchUuids, 900); for (List<String> list : split) { List<ThBatchCourseChapter> thBatchCourseChapterList = baseMapper.getByBatchUuids(list); allBatchCourseChapterList.addAll(thBatchCourseChapterList); } return allBatchCourseChapterList; } @Override public Integer insertBatch(List<ThBatchCourseChapter> chapterList) { return baseMapper.insertBatch(chapterList); } @Override public Integer updateBatch(List<ThBatchCourseChapter> chapterList) { return baseMapper.updateBatch(chapterList); } @Override public List<ThBatchCourseChapter> getByChapterUuids(List<String> chapterUuids) { List<ThBatchCourseChapter> allBatchCourseChapterList = new ArrayList<>(); List<List<String>> split = ListUtil.split(chapterUuids, 900); for (List<String> list : split) { List<ThBatchCourseChapter> thBatchCourseChapterList = baseMapper.getByChapterUuids(list); allBatchCourseChapterList.addAll(thBatchCourseChapterList); } return allBatchCourseChapterList; } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThBatchCourseServiceImpl.java
@@ -1,9 +1,9 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import cn.hutool.core.collection.ListUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.institutionalaccess.entity.ThBatchCourse; import com.gkhy.exam.institutionalaccess.entity.ThStudentCourse; import com.gkhy.exam.institutionalaccess.mapper.ThBatchCourseMapper; import com.gkhy.exam.institutionalaccess.model.vo.ThBatchCourseVO; import com.gkhy.exam.institutionalaccess.service.ThBatchCourseService; @@ -43,8 +43,14 @@ } @Override public List<ThBatchCourseVO> getListByBatchUuids(List<String> batchUuids) { return batchCourseMapper.getListByBatchUuids(batchUuids); public List<ThBatchCourse> getListByBatchUuids(List<String> batchUuids) { List<ThBatchCourse> allBatchCourseList = new ArrayList<>(); List<List<String>> split = ListUtil.split(batchUuids, 900); for (List<String> list : split) { List<ThBatchCourse> thBatchCourseList = batchCourseMapper.getByBatchUuids(list); allBatchCourseList.addAll(thBatchCourseList); } return allBatchCourseList; } @Override public List<ThBatchCourseVO> getListByBatchUuid(String batchUuid) { @@ -66,4 +72,19 @@ return batchCourseMapper.selectList(new LambdaQueryWrapper<ThBatchCourse>() .eq(ThBatchCourse::getInstitutionId,institutionId).eq(ThBatchCourse::getDelFlag,DeleteStatusEnum.NO.getStatus())); } @Override public void deleteByBatchUuid(String batchUuid) { batchCourseMapper.deleteByBatchUuid(batchUuid); } @Override public Integer insertBatch(List<ThBatchCourse> courseList) { return batchCourseMapper.insertBatch(courseList); } @Override public Integer updateBatch(List<ThBatchCourse> courseList) { return batchCourseMapper.updateBatch(courseList); } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThBatchManagerServiceImpl.java
@@ -1,10 +1,14 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import com.gkhy.exam.institutionalaccess.entity.ThBatchCourse; import com.gkhy.exam.institutionalaccess.entity.ThBatchCourseChapter; import com.gkhy.exam.institutionalaccess.entity.ThStudentBatch; import com.gkhy.exam.institutionalaccess.entity.ThStudyDetail; import com.gkhy.exam.institutionalaccess.enums.FinishStatus; import com.gkhy.exam.institutionalaccess.model.query.ThBatchQuery; import com.gkhy.exam.institutionalaccess.model.resp.ThBatchCourseRespDTO; import com.gkhy.exam.institutionalaccess.model.resp.ThCourseChapterRespDTO; import com.gkhy.exam.institutionalaccess.model.resp.ThStudentCourseRespDTO; import com.gkhy.exam.institutionalaccess.model.resp.ThStudentStudyRespDTO; import com.gkhy.exam.institutionalaccess.model.vo.*; @@ -29,21 +33,44 @@ @Autowired private ThBatchCourseService thBatchCourseService; @Autowired private ThStudentCourseService thStudentCourseService; private ThStudentBatchService thStudentBatchService; @Autowired private ThStudyDetailService thStudyDetailService; @Autowired private ThBatchCourseChapterService thBatchCourseChapterService; @Override public List<ThBatchVO> listByPage(ThBatchQuery query) { List<ThBatchVO> thBatchVOS = thBatchService.listByPage(query); //统计学员 List<ThStatisticStudentVO> thStatisticStudentVOS = thStudentCourseService.statisticByBatchUuid(); List<ThStatisticStudentVO> thStatisticStudentVOS = thStudentBatchService.statisticByBatchUuid(); if (!CollectionUtils.isEmpty(thBatchVOS)) { List<String> batchUuids = thBatchVOS.stream().map(ThBatchVO::getUuid).collect(Collectors.toList()); List<ThBatchCourseVO> batchCourseVOS = thBatchCourseService.getListByBatchUuids(batchUuids); List<ThBatchCourse> batchCourseList = thBatchCourseService.getListByBatchUuids(batchUuids); //章节 List<ThBatchCourseChapter> chapterList = thBatchCourseChapterService.getListByBatchUuids(batchUuids); for (ThBatchVO thBatchVO : thBatchVOS) { //课程 List<ThBatchCourseVO> collect = batchCourseVOS.stream().filter(bc -> bc.getBatchUuid().equals(thBatchVO.getUuid())).collect(Collectors.toList()); List<ThBatchCourseVO> collect = batchCourseList.stream() .filter(bc -> bc.getBatchUuid().equals(thBatchVO.getUuid())) .map(bc -> { ThBatchCourseVO thBatchCourseVO = new ThBatchCourseVO(); BeanUtils.copyProperties(bc, thBatchCourseVO); List<ThBatchCourseChapterVO> chapterVOs = chapterList.stream(). filter(cc -> cc.getCourseUuid().equals(bc.getCourseUuid()) && cc.getParentUuid().equals("0")) .map(cc -> { ThBatchCourseChapterVO thBatchCourseChapterVO = new ThBatchCourseChapterVO(); BeanUtils.copyProperties(cc, thBatchCourseChapterVO); thBatchCourseChapterVO.setChildren(getChildren(chapterList,cc.getChapterUuid())); return thBatchCourseChapterVO; }) .collect(Collectors.toList()); thBatchCourseVO.setChapterList(chapterVOs); return thBatchCourseVO; }) .collect(Collectors.toList()); //学员 List<ThStatisticStudentVO> ssList = thStatisticStudentVOS.stream().filter(ss -> ss.getBatchUuid().equals(thBatchVO.getUuid())).collect(Collectors.toList()); if(ssList.size() > 0) { @@ -57,12 +84,27 @@ return thBatchVOS; } //获取章节 private List<ThBatchCourseChapterVO> getChildren(List<ThBatchCourseChapter> chapterList, String parentUuid) { List<ThBatchCourseChapterVO> sectionList = chapterList .stream() .filter(cc -> cc.getParentUuid().equals(parentUuid)) .map(cc -> { ThBatchCourseChapterVO thBatchCourseChapterVO = new ThBatchCourseChapterVO(); BeanUtils.copyProperties(cc, thBatchCourseChapterVO); return thBatchCourseChapterVO; }) .collect(Collectors.toList()); return sectionList; } @Override public List<ThBatchCourseRespDTO> period(String batchUuid) { //获取批次关联课程 //获取批次关联课程(课程的视频总时长) List<ThBatchCourseVO> batchCourseVOS = thBatchCourseService.getListByBatchUuid(batchUuid); //获取关联学生 List<ThStudentCourseVO> thStudentCourseVOS = thStudentCourseService.getListByBatchUuid(batchUuid); //获取关联学生(学时) List<ThStudentBatchCourseVO> thStudentCourseVOS = thStudentBatchService.getStudentBatchCourseVOByBatchUuid(batchUuid); //根据批次获取学习记录 List<ThStudyVO> studyVOS = thStudyDetailService.statisticDurationByIdcard(batchUuid); List<ThBatchCourseRespDTO> batchCourseRespDTOS = new ArrayList<>(); @@ -75,11 +117,11 @@ //过滤学生 List<ThStudentCourseRespDTO> studentList = thStudentCourseVOS .stream() .filter(sc -> sc.getBatchUuid().equals(VO.getBatchUuid())) .filter(sc -> sc.getCourseUuid().equals(VO.getCourseUuid())) .map(sc -> { ThStudentCourseRespDTO thStudentCourseRespDTO = new ThStudentCourseRespDTO(); BeanUtils.copyProperties(sc, thStudentCourseRespDTO); List<ThStudyVO> collect = studyVOS.stream().filter(s -> s.getIdcard().equals(sc.getIdcard())).collect(Collectors.toList()); List<ThStudyVO> collect = studyVOS.stream().filter(s -> s.getIdcard().equals(sc.getIdcard()) && s.getCourseUuid().equals(VO.getCourseUuid())).collect(Collectors.toList()); if(collect.size() > 0) { thStudentCourseRespDTO.setDuration(collect.get(0).getDuration()); }else { @@ -100,17 +142,18 @@ @Override public List<ThStudentStudyRespDTO> getStudent(String batchUuid) { //获取学生信息 List<ThStudentCourseVO> thStudentCourseVOS = thStudentCourseService.getListByBatchUuid(batchUuid); List<ThStudentBatchVO> thStudentBatches = thStudentBatchService.getStudentBatchVOByBatchUuid(batchUuid); //获取学生学习记录 List<ThStudyDetailVO> studyDetails = thStudyDetailService.listByBatchUuid(batchUuid); List<ThStudentStudyRespDTO> respDTOS = new ArrayList<>(); if (!CollectionUtils.isEmpty(thStudentCourseVOS)) { for (ThStudentCourseVO VO : thStudentCourseVOS) { if (!CollectionUtils.isEmpty(thStudentBatches)) { for (ThStudentBatchVO VO : thStudentBatches) { ThStudentStudyRespDTO thStudentStudyRespDTO = new ThStudentStudyRespDTO(); thStudentStudyRespDTO.setIdcard(VO.getIdcard()); thStudentStudyRespDTO.setName(VO.getName()); thStudentStudyRespDTO.setCourseName(VO.getCourseName()); thStudentStudyRespDTO.setLessonTocal(VO.getLessTotal()); thStudentStudyRespDTO.setBatchLessonNum(VO.getBatchLessonNum()); thStudentStudyRespDTO.setFinishStatus(VO.getFinishStatus()); thStudentStudyRespDTO.setBatchUuid(VO.getBatchUuid()); BigDecimal lessNum = new BigDecimal(0); List<ThStudyDetailVO> collect = studyDetails @@ -121,7 +164,7 @@ for (ThStudyDetailVO studyDetail : collect) { //是否完成 if(studyDetail.getFinishStatus().equals(FinishStatus.YES.getStatus())){ lessNum.add(studyDetail.getLessonNum()); lessNum = lessNum.add(studyDetail.getLessonNum()); } //是否有学时报告 if(!StringUtils.isEmpty(studyDetail.getLessonReportUrl())){ @@ -132,7 +175,6 @@ stringBuffer.deleteCharAt(stringBuffer.length()-1); } thStudentStudyRespDTO.setUrl(stringBuffer.toString()); thStudentStudyRespDTO.setFinishStatus(VO.getFinishStatus()); thStudentStudyRespDTO.setLessonNum(lessNum); respDTOS.add(thStudentStudyRespDTO); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThBatchServiceImpl.java
@@ -1,5 +1,6 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import cn.hutool.core.collection.ListUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.institutionalaccess.entity.ThBatch; @@ -11,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -32,4 +34,30 @@ public List<ThBatchVO> listByPage(ThBatchQuery query) { return batchMapper.listByPage(query); } @Override public List<ThBatch> getByUuids(List<String> batchUuids) { List<ThBatch> allBatchList = new ArrayList<>(); List<List<String>> split = ListUtil.split(batchUuids, 900); for (List<String> splitBatchUuids : split) { List<ThBatch> batchList = batchMapper.getByUuids(splitBatchUuids); allBatchList.addAll(batchList); } return allBatchList; } @Override public Integer insertBatch(List<ThBatch> batchList) { return batchMapper.insertBatch(batchList); } @Override public Integer updateBatch(List<ThBatch> batchList) { return batchMapper.updateBatch(batchList); } @Override public List<ThBatch> getBatchNameByUuids(List<String> batchUuids) { return batchMapper.getBatchNameByUuids(batchUuids); } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThCourseChapterServiceImpl.java
@@ -1,16 +1,20 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import cn.hutool.core.collection.ListUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.institutionalaccess.entity.ThCourse; import com.gkhy.exam.institutionalaccess.entity.ThCourseChapter; import com.gkhy.exam.institutionalaccess.mapper.ThCourseChapterMapper; import com.gkhy.exam.institutionalaccess.model.vo.ThCourseChapterVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStatisticStudentVO; import com.gkhy.exam.institutionalaccess.service.ThCourseChapterService; import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -38,4 +42,33 @@ public ThCourseChapter getByUuid(String batchUuid) { return courseChapterMapper.selectOne(new LambdaQueryWrapper<ThCourseChapter>().eq(ThCourseChapter::getUuid, batchUuid).eq(ThCourseChapter::getDelFlag, DeleteStatusEnum.NO.getStatus())); } @Override public List<ThCourseChapter> getByUuids(List<String> chapterUuids) { List<ThCourseChapter> allList = new ArrayList<>(); //分批量查询 List<List<String>> list = ListUtil.split(chapterUuids, 900); for (List<String> uuids : list) { List<ThCourseChapter> courseListList = courseChapterMapper.getByUuids(uuids); allList.addAll(courseListList); } return allList; } @Override public Integer insertBatch(List<ThCourseChapter> courseChapterList) { return courseChapterMapper.insertBatch(courseChapterList); } @Override public Integer updateBatch(List<ThCourseChapter> courseChapterList) { return courseChapterMapper.updateBatch(courseChapterList); } @Override public List<ThCourseChapter> getChapterNameByUuids(List<String> chapterUuids) { return courseChapterMapper.getChapterNameByUuids(chapterUuids); } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThCourseManagerServiceImpl.java
@@ -1,19 +1,28 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import com.gkhy.exam.institutionalaccess.entity.ThBatchCourse; import com.gkhy.exam.institutionalaccess.entity.ThCourse; import com.gkhy.exam.institutionalaccess.entity.ThCourseChapter; import com.gkhy.exam.institutionalaccess.entity.ThStudentBatch; import com.gkhy.exam.institutionalaccess.enums.FinishStatus; import com.gkhy.exam.institutionalaccess.model.query.ThCourseQuery; import com.gkhy.exam.institutionalaccess.model.resp.ThCourseChapterRespDTO; import com.gkhy.exam.institutionalaccess.model.resp.ThCourseRespDTO; import com.gkhy.exam.institutionalaccess.model.resp.ThStudentStudyRespDTO; import com.gkhy.exam.institutionalaccess.model.vo.ThCourseChapterVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStatisticStudentVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudentBatchVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudyDetailVO; import com.gkhy.exam.institutionalaccess.service.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -25,32 +34,34 @@ @Autowired private ThCourseChapterService courseChapterService; @Autowired private ThStudentCourseService studentCourseService; private ThStudentBatchService studentBatchService; @Autowired private ThStudentBatchService thStudentBatchService; @Autowired private ThStudyDetailService studyDetailService; @Override public List<ThCourseRespDTO> listByPage(ThCourseQuery query) { List<ThCourse> courseList = courseService.listByPage(query); List<ThCourseRespDTO> courseList = courseService.listByPage(query); //分许获取数据 List<ThStatisticStudentVO> thStatisticStudentVOS = studentCourseService.statisticByCourseUuid(); List<ThStatisticStudentVO> thStatisticStudentVOS = studentBatchService.statisticByCourseUuid(); List<ThCourseRespDTO> courseRespDTOList = new ArrayList<>(); //List<ThCourseRespDTO> courseRespDTOList = new ArrayList<>(); if(!CollectionUtils.isEmpty(courseList)){ //根据courseids获取所有章节 List<ThCourseChapterVO> courseChapterVOS = new ArrayList<>(); List<String> courseUuids = courseList.stream().map(ThCourse::getUuid).collect(Collectors.toList()); List<String> courseUuids = courseList.stream().map(ThCourseRespDTO::getUuid).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(courseUuids)){ courseChapterVOS = courseChapterService.listByCourseUuids(courseUuids); } for (ThCourse course : courseList) { ThCourseRespDTO courseRespDTO = new ThCourseRespDTO(); BeanUtils.copyProperties(course, courseRespDTO); for (ThCourseRespDTO courseRespDTO : courseList) { //获取章 List<ThCourseChapterVO> finalCourseChapterVOS = courseChapterVOS; List<ThCourseChapterRespDTO> chapterList = courseChapterVOS .stream() .filter(cc -> course.getUuid().equals(cc.getCourseUuid()) && cc.getParentUuid().equals("0")) .filter(cc -> courseRespDTO.getUuid().equals(cc.getCourseUuid()) && cc.getParentUuid().equals("0")) .map(cc -> { ThCourseChapterRespDTO courseChapterRespDTO = new ThCourseChapterRespDTO(); BeanUtils.copyProperties(cc, courseChapterRespDTO); @@ -60,17 +71,16 @@ .collect(Collectors.toList()); courseRespDTO.setOutline(chapterList); //学员数量 List<ThStatisticStudentVO> statisticList = thStatisticStudentVOS.stream().filter(s -> s.getCourseUuid().equals(course.getUuid())).collect(Collectors.toList()); List<ThStatisticStudentVO> statisticList = thStatisticStudentVOS.stream().filter(s -> s.getCourseUuid().equals(courseRespDTO.getUuid())).collect(Collectors.toList()); if(statisticList.size()>0){ ThStatisticStudentVO thStatisticStudentVO = statisticList.get(0); courseRespDTO.setStudentCount(thStatisticStudentVO.getCount()); }else { courseRespDTO.setStudentCount(0); } courseRespDTOList.add(courseRespDTO); } } return courseRespDTOList; return courseList; } //获取单条课程 @@ -92,6 +102,51 @@ return thCourseRespDTO; } @Override public List<ThStudentStudyRespDTO> getSutdent(String courseUuid) { //获取该课程下所有学生 //获取学生信息 List<ThStudentBatchVO> thStudentBatches = thStudentBatchService.getStudentBatchVOByCourseUuid(courseUuid); //获取学生学习记录 List<ThStudyDetailVO> studyDetails = studyDetailService.listByCourseUuid(courseUuid); List<ThStudentStudyRespDTO> respDTOS = new ArrayList<>(); if (!CollectionUtils.isEmpty(thStudentBatches)) { for (ThStudentBatchVO VO : thStudentBatches) { ThStudentStudyRespDTO thStudentStudyRespDTO = new ThStudentStudyRespDTO(); thStudentStudyRespDTO.setIdcard(VO.getIdcard()); thStudentStudyRespDTO.setName(VO.getName()); thStudentStudyRespDTO.setBatchLessonNum(VO.getBatchLessonNum()); thStudentStudyRespDTO.setFinishStatus(VO.getFinishStatus()); thStudentStudyRespDTO.setBatchUuid(VO.getBatchUuid()); thStudentStudyRespDTO.setCourseLessonNum(VO.getCourseLessonNum()); BigDecimal lessNum = new BigDecimal(0); List<ThStudyDetailVO> collect = studyDetails .stream() .filter(sd -> sd.getIdcard().equals(VO.getIdcard())) .collect(Collectors.toList()); StringBuffer stringBuffer = new StringBuffer(); for (ThStudyDetailVO studyDetail : collect) { //是否完成 if(studyDetail.getFinishStatus().equals(FinishStatus.YES.getStatus())){ lessNum = lessNum.add(studyDetail.getLessonNum()); } //是否有学时报告 if(!StringUtils.isEmpty(studyDetail.getLessonReportUrl())){ stringBuffer.append(studyDetail.getLessonReportUrl()).append(","); } } if(!StringUtils.isEmpty(stringBuffer.toString())){ stringBuffer.deleteCharAt(stringBuffer.length()-1); } thStudentStudyRespDTO.setUrl(stringBuffer.toString()); thStudentStudyRespDTO.setLessonNum(lessNum); respDTOS.add(thStudentStudyRespDTO); } } return respDTOS; } //获取章节 private List<ThCourseChapterRespDTO> getChildren(List<ThCourseChapterVO> courseChapterVOS, String parentUuid) { List<ThCourseChapterRespDTO> chapterList = courseChapterVOS exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThCourseServiceImpl.java
@@ -1,15 +1,19 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import cn.hutool.core.collection.ListUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.institutionalaccess.entity.ThCourse; import com.gkhy.exam.institutionalaccess.mapper.ThCourseMapper; import com.gkhy.exam.institutionalaccess.model.query.ThCourseQuery; import com.gkhy.exam.institutionalaccess.model.resp.ThCourseRespDTO; import com.gkhy.exam.institutionalaccess.service.ThCourseService; import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -19,7 +23,7 @@ private ThCourseMapper courseMapper; @Override public List<ThCourse> listByPage(ThCourseQuery query) { public List<ThCourseRespDTO> listByPage(ThCourseQuery query) { return courseMapper.listByPage(query); } @@ -45,4 +49,34 @@ ); return list; } @Override public List<ThCourse> getByUuidList(List<String> courseUuids) { List<ThCourse> allList = new ArrayList<>(); //分批量查询 List<List<String>> list = ListUtil.split(courseUuids, 900); for (List<String> uuids : list) { List<ThCourse> courseListList = courseMapper.getByUuidList(uuids); allList.addAll(courseListList); } return allList; } @Override public Integer insertBatch(List<ThCourse> courseList) { return courseMapper.insertBatch(courseList); } @Override public Integer updateBatch(List<ThCourse> courseList) { return courseMapper.updateBatch(courseList); } @Override public List<ThCourse> getCourseNameByUuids(List<String> courseUuids) { List<ThCourse> courseListList = courseMapper.getCourseNameByUuids(courseUuids); return courseListList; } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThExamRecordServiceImpl.java
@@ -1,5 +1,6 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import cn.hutool.core.collection.ListUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.institutionalaccess.entity.ThExamRecord; @@ -10,6 +11,9 @@ import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; @Service("ThExamRecordService") @@ -25,4 +29,20 @@ public List<ThExamRecordVO> listByPage(ThExamRecordQuery query) { return thExamRecordMapper.listByPage(query); } @Override public List<ThExamRecord> getByUuids(List<String> examUuids) { List<ThExamRecord> allExamRecordList = new ArrayList<>(); List<List<String>> split = ListUtil.split(examUuids, 900); for (List<String> list : split) { List<ThExamRecord> examRecordList = thExamRecordMapper.getByUuids(list); allExamRecordList.addAll(examRecordList); } return allExamRecordList; } @Override public Integer insertBatch(List<ThExamRecord> examRecordList){ return baseMapper.insertBatch(examRecordList); } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudentBatchServiceImpl.java
对比新文件 @@ -0,0 +1,104 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import cn.hutool.core.collection.ListUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.institutionalaccess.entity.ThStudentBatch; import com.gkhy.exam.institutionalaccess.mapper.ThStudentBatchMapper; import com.gkhy.exam.institutionalaccess.model.vo.ThStatisticStudentVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudentBatchCourseVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudentBatchVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudentCourseVO; import com.gkhy.exam.institutionalaccess.service.ThStudentBatchService; import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; @Service("ThStudentBatchService") public class ThStudentBatchServiceImpl extends ServiceImpl<ThStudentBatchMapper, ThStudentBatch> implements ThStudentBatchService { @Autowired private ThStudentBatchMapper studentBatchMapper; @Override public List<ThStudentBatch> getByIdCards(List<String> idcards) { List<ThStudentBatch> allStudentBatchList = new ArrayList<>(); List<List<String>> split = ListUtil.split(idcards, 900); for (List<String> list : split) { List<ThStudentBatch> studentBatchList = studentBatchMapper.getByIdCards(list); allStudentBatchList.addAll(studentBatchList); } return allStudentBatchList; } @Override public List<ThStatisticStudentVO> statisticByBatchUuid() { return studentBatchMapper.statisticByBatchUuid(); } @Override public List<ThStudentBatch> listByInstitutionId(Long institutionId) { return studentBatchMapper.selectList(new LambdaQueryWrapper<ThStudentBatch>().eq(ThStudentBatch::getInstitutionId, institutionId) .eq(ThStudentBatch::getDelFlag,DeleteStatusEnum.NO.getStatus())); } @Override public List<ThStatisticStudentVO> statisticByCourseUuid() { return studentBatchMapper.statisticByCourseUuid(); } @Override public List<ThStudentBatchCourseVO> getStudentBatchCourseVOByBatchUuid(String batchUuid) { return studentBatchMapper.getStudentBatchCourseVOByBatchUuid(batchUuid); } @Override public void updateByBatchUuid(String batchUuid) { studentBatchMapper.updateByBatchUuid(batchUuid); } @Override public ThStudentBatch getByIdcardAndBatchUuid(String idcard, String batchUuid) { ThStudentBatch thStudentCourse = studentBatchMapper.selectOne(new LambdaQueryWrapper<ThStudentBatch>().eq(ThStudentBatch::getIdcard, idcard) .eq(ThStudentBatch::getBatchUuid, batchUuid).eq(ThStudentBatch::getDelFlag, DeleteStatusEnum.NO.getStatus())); return thStudentCourse; } @Override public List<ThStudentBatch> getByBatchUuid(String batchUuid) { List<ThStudentBatch> thStudentCourse = studentBatchMapper.selectList(new LambdaQueryWrapper<ThStudentBatch>() .eq(ThStudentBatch::getBatchUuid, batchUuid).eq(ThStudentBatch::getDelFlag, DeleteStatusEnum.NO.getStatus())); return thStudentCourse; } @Override public void updateFinishStatusByBatchUuid(String batchUuid) { studentBatchMapper.updateFinishStatusByBatchUuid(batchUuid); } @Override public Integer insertBatch(List<ThStudentBatch> saveThStudentBatchList) { return studentBatchMapper.insertBatch(saveThStudentBatchList); } @Override public Integer updateBatch(List<ThStudentBatch> updateThStudentBatchList) { return studentBatchMapper.updateBatch(updateThStudentBatchList); } @Override public List<ThStudentBatchVO> getStudentBatchVOByBatchUuid(String batchUuid) { return studentBatchMapper.getStudentBatchVOByBatchUuid(batchUuid); } @Override public List<ThStudentBatchVO> getStudentBatchVOByCourseUuid(String courseUuid) { return studentBatchMapper.getStudentBatchVOByCourseUuid(courseUuid); } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudentCourseServiceImpl.java
文件已删除 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudentManagerServiceImpl.java
@@ -22,6 +22,6 @@ return thStudentService.list(new LambdaQueryWrapper<ThStudent>() .eq(!StringUtils.isEmpty(query.getIdcard()),ThStudent::getIdcard,query.getIdcard()) .like(!StringUtils.isEmpty(query.getName()),ThStudent::getName, query.getName()) .eq(ThStudent::getDelFlag, DeleteStatusEnum.NO.getStatus())); .eq(ThStudent::getDelFlag, DeleteStatusEnum.NO.getStatus()).orderByDesc(ThStudent::getUpdateTime)); } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudentServiceImpl.java
@@ -1,8 +1,10 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import cn.hutool.core.collection.ListUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.institutionalaccess.entity.ThStudent; import com.gkhy.exam.institutionalaccess.entity.ThStudentBatch; import com.gkhy.exam.institutionalaccess.mapper.ThStudentMapper; import com.gkhy.exam.institutionalaccess.model.vo.ThStatisticStudentVO; import com.gkhy.exam.institutionalaccess.service.ThStudentService; @@ -10,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -27,13 +30,29 @@ @Override public List<ThStudent> getByIdcards(List<String> idcards) { List<ThStudent> students = studentMapper.selectList(new LambdaQueryWrapper<ThStudent>().in(ThStudent::getIdcard, idcards).eq(ThStudent::getDelFlag, DeleteStatusEnum.NO.getStatus())); return students; List<ThStudent> allStudentList = new ArrayList<>(); List<List<String>> split = ListUtil.split(idcards, 900); for (List<String> list : split) { List<ThStudent> studentList = studentMapper.getByIdCards(list); allStudentList.addAll(studentList); } return allStudentList; } @Override public int updateByIdcard(List<ThStudent> updateStudentList) { return studentMapper.updateByIdcard(updateStudentList); public Integer updateBatch(List<ThStudent> updateStudentList) { return studentMapper.updateBatch(updateStudentList); } @Override public Integer insertBatch(List<ThStudent> saveSudentList) { return studentMapper.insertBatch(saveSudentList); } @Override public List<ThStudent> getNameByIdcards(List<String> idcards) { return studentMapper.getNameByIdcards(idcards); } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudyAuthServiceImpl.java
@@ -1,5 +1,6 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import cn.hutool.core.collection.ListUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.institutionalaccess.entity.ThStudyAuth; @@ -9,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -23,7 +25,21 @@ } @Override public List<ThStudyAuth> getListByStudyDetaiIds(List<String> detailUuids) { return thStudyAuthMapper.selectList(new LambdaQueryWrapper<ThStudyAuth>().in(ThStudyAuth::getStudyDetailUuid, detailUuids)); public List<ThStudyAuth> getByStudyDetaiUuids(List<String> studyUuids) { List<ThStudyAuth> allAuthList = new ArrayList<>(); List<List<String>> split = ListUtil.split(studyUuids, 900); for (List<String> list : split) { List<ThStudyAuth> authList = thStudyAuthMapper.getByStudyDetaiUuids(list); allAuthList.addAll(authList); } return allAuthList; } @Override public Integer insetBatch(List<ThStudyAuth> thStudyAuthList) { return baseMapper.insertBatch(thStudyAuthList); } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudyDetailServiceImpl.java
@@ -1,5 +1,6 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import cn.hutool.core.collection.ListUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.institutionalaccess.entity.ThStudyDetail; @@ -12,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -45,4 +47,30 @@ public List<ThStudyDetailVO> listByBatchUuid(String batchUuid) { return thStudyDetailMapper.listByBatchUuid(batchUuid); } @Override public List<ThStudyDetail> getByUuids(List<String> studyUuids) { List<ThStudyDetail> allStudyDetailList = new ArrayList<>(); List<List<String>> split = ListUtil.split(studyUuids, 900); for (List<String> list : split) { List<ThStudyDetail> studyDetailList = thStudyDetailMapper.getByUuids(list); allStudyDetailList.addAll(studyDetailList); } return allStudyDetailList; } @Override public Integer insertBatch(List<ThStudyDetail> list) { return baseMapper.insertBatch(list); } @Override public Integer updateBatch(List<ThStudyDetail> list) { return baseMapper.updateBatch(list); } @Override public List<ThStudyDetailVO> listByCourseUuid(String courseUuid) { return baseMapper.listByCourseUuid(courseUuid); } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudyRecordManagerServiceImpl.java
@@ -1,15 +1,11 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import com.gkhy.exam.institutionalaccess.entity.ThStudyAuth; import com.gkhy.exam.institutionalaccess.entity.ThStudyTrack; import com.gkhy.exam.institutionalaccess.entity.*; import com.gkhy.exam.institutionalaccess.model.query.ThStudyDetailQuery; import com.gkhy.exam.institutionalaccess.model.vo.ThStudyAuthVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudyDetailVO; import com.gkhy.exam.institutionalaccess.model.vo.ThStudyTrackVO; import com.gkhy.exam.institutionalaccess.service.ThStudyAuthService; import com.gkhy.exam.institutionalaccess.service.ThStudyDetailService; import com.gkhy.exam.institutionalaccess.service.ThStudyRecordManagerService; import com.gkhy.exam.institutionalaccess.service.ThStudyTrackService; import com.gkhy.exam.institutionalaccess.service.*; import com.gkhy.exam.institutionalaccess.utils.ConvertTimeUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -28,18 +24,39 @@ private ThStudyTrackService thStudyTrackService; @Autowired private ThStudyAuthService thStudyAuthService; @Autowired private ThCourseChapterService thCourseChapterService;; @Autowired private ThCourseService thCourseService; @Autowired private ThBatchService thBatchService; @Autowired private ThStudentService studentService;; @Override public List<ThStudyDetailVO> listByPage(ThStudyDetailQuery query) { query.setStartSize((query.getPageNum()-1)*query.getPageSize()); List<ThStudyDetailVO> thStudyDetailVOS = thStudyDetailService.listByPage(query); if(!CollectionUtils.isEmpty(thStudyDetailVOS)){ List<String> detailUuids = thStudyDetailVOS.stream().map(ThStudyDetailVO::getUuid).collect(Collectors.toList()); //获取认证记录 List<ThStudyAuth> authList = thStudyAuthService.getListByStudyDetaiIds(detailUuids); List<ThStudyAuth> authList = thStudyAuthService.getByStudyDetaiUuids(detailUuids); //获取轨迹 List<ThStudyTrack> trackList = thStudyTrackService.getListByStudyDetaiIds(detailUuids); //获取章节名称 List<String> chapterUuids = thStudyDetailVOS.stream().map(ThStudyDetailVO::getChapterUuid).collect(Collectors.toList()); List<ThCourseChapter> chapterList = thCourseChapterService.getChapterNameByUuids(chapterUuids); //获取课程名称 List<String> courseUuids = thStudyDetailVOS.stream().map(ThStudyDetailVO::getCourseUuid).collect(Collectors.toList()); List<ThCourse> courseList = thCourseService.getCourseNameByUuids(courseUuids); //获取批次名称 List<String> batchUuids = thStudyDetailVOS.stream().map(ThStudyDetailVO::getBatchUuid).collect(Collectors.toList()); List<ThBatch> batchList = thBatchService.getBatchNameByUuids(batchUuids); //学生信息 List<String> idcards = thStudyDetailVOS.stream().map(ThStudyDetailVO::getIdcard).collect(Collectors.toList()); List<ThStudent> studentList = studentService.getNameByIdcards(idcards); for(ThStudyDetailVO thStudyDetailVO : thStudyDetailVOS){ thStudyDetailVO.setDurationDesc(ConvertTimeUtils.convertTimeToString(thStudyDetailVO.getDuration())); thStudyDetailVO.setStartPositionDesc(ConvertTimeUtils.convertTimeToString(thStudyDetailVO.getStartPosition())); @@ -61,6 +78,23 @@ }).collect(Collectors.toList()); thStudyDetailVO.setAuthList(thStudyAuthVOList); thStudyDetailVO.setTrackList(trackVOList); List<ThCourseChapter> chapterSelectList = chapterList.stream().filter(chapter -> chapter.getUuid().equals(thStudyDetailVO.getChapterUuid())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(chapterSelectList)){ thStudyDetailVO.setChapterName(chapterSelectList.get(0).getChapterName()); } List<ThCourse> courseSelectList = courseList.stream().filter(c -> c.getUuid().equals(thStudyDetailVO.getCourseUuid())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(courseSelectList)){ thStudyDetailVO.setCourseName(courseSelectList.get(0).getCourseName()); } List<ThBatch> batchSelectList = batchList.stream().filter(b -> b.getUuid().equals(thStudyDetailVO.getBatchUuid())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(batchSelectList)){ thStudyDetailVO.setBatchName(batchSelectList.get(0).getBatchName()); } List<ThStudent> studentSelectList = studentList.stream().filter(thStudent -> thStudent.getIdcard().equals(thStudyDetailVO.getIdcard())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(studentSelectList)){ thStudyDetailVO.setName(studentSelectList.get(0).getName()); } } } return thStudyDetailVOS; exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudyTrackServiceImpl.java
@@ -26,4 +26,13 @@ public List<ThStudyTrack> getListByStudyDetaiIds(List<String> detailUuids) { return thStudyTrackMapper.selectList(new LambdaQueryWrapper<ThStudyTrack>().in(ThStudyTrack::getStudyDetailUuid, detailUuids)); } @Override public List<ThStudyTrack> getByStudyDetailUuids(List<String> studyUuids){ return thStudyTrackMapper.getByStudyDetaiUuids(studyUuids); } @Override public Integer insertBatch(List<ThStudyTrack> list) { return thStudyTrackMapper.insertBatch(list); } } exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/TripartiteInterfaceServiceImpl.java
@@ -1,9 +1,11 @@ package com.gkhy.exam.institutionalaccess.service.serviceImpl; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.TypeReference; import com.gkhy.exam.institutionalaccess.config.ExecutorConfig; import com.gkhy.exam.institutionalaccess.entity.*; import com.gkhy.exam.institutionalaccess.enums.*; import com.gkhy.exam.institutionalaccess.model.req.*; @@ -20,6 +22,8 @@ import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.uuid.UUID; import com.ruoyi.framework.security.context.ThreeInContextHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -32,6 +36,8 @@ @Service("TripartiteInterfaceService") public class TripartiteInterfaceServiceImpl implements TripartiteInterfaceService { private Logger logger = LoggerFactory.getLogger(TripartiteInterfaceServiceImpl.class); @Autowired private ThQuestionBankService questionBankService; @Autowired @@ -45,7 +51,7 @@ @Autowired private ThBatchCourseService batchCourseService; @Autowired private ThStudentCourseService studentCourseService; private ThStudentBatchService studentBatchService; @Autowired private ThStudyAuthService studyAuthService; @Autowired @@ -54,6 +60,9 @@ private ThStudyDetailService studyDetailService; @Autowired private ThExamRecordService examRecordService; @Autowired private ThBatchCourseChapterService batchCourseChapterService; @Override public boolean receiveQuestionBank(JSONObject jsonObject) { @@ -71,7 +80,16 @@ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } //反序列化 ThQuestionBankReqDTO questionBankReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThQuestionBankReqDTO>() {}); ThQuestionBankReqDTO questionBankReqDTO = null; try { questionBankReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThQuestionBankReqDTO>() {}); }catch (Exception e){ logger.error("组卷反序列化失败!"); throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR); } //参数校验 validateQuestion(questionBankReqDTO); //根据uuid查询数据 @@ -88,7 +106,7 @@ qb.setUpdateTime(LocalDateTime.now()); qb.setCreateBy(institutionUser.getInstitutionalName()); qb.setUpdateBy(institutionUser.getInstitutionalName()); qb.setDelFlag(DeleteStatusEnum.NO.getStatus()); //qb.setDelFlag(DeleteStatusEnum.NO.getStatus()); i = questionBankService.save(qb); }else { //修改 @@ -113,162 +131,340 @@ }catch (Exception e){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } List<ThCourseReqDTO> courseReqDTOList = new ArrayList<>(); //反序列化 ThCourseReqDTO courseReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThCourseReqDTO>() {}); //校验 validateCourse(courseReqDTO); //获取数据 ThCourse course= courseService.getByUuid(courseReqDTO.getUuid()); if(course == null){ //新增 //课程 course = new ThCourse(); BeanUtils.copyProperties(courseReqDTO, course); course.setId(IdUtil.getSnowflake(0,0).nextId()); course.setCreateTime(LocalDateTime.now()); course.setUpdateTime(LocalDateTime.now()); course.setCreateBy(institutionUser.getInstitutionalName()); course.setUpdateBy(institutionUser.getInstitutionalName()); course.setInstitutionId(institutionUser.getId()); course.setDelFlag(DeleteStatusEnum.NO.getStatus()); course.setInstitutionName(institutionUser.getInstitutionalName()); try { courseReqDTOList = JSONObject.parseObject(decrypt, new TypeReference<List<ThCourseReqDTO>>() {}); //章节(章) List<ThCourseChapter> chapterList = new ArrayList<>(); for (ThCourseChapterReqDTO chapterReqDTO : courseReqDTO.getChapters()) { ThCourseChapter chapter = new ThCourseChapter(); BeanUtils.copyProperties(chapterReqDTO, chapter); chapter.setCourseUuid(course.getUuid()); chapter.setId(IdUtil.getSnowflake(0,0).nextId()); chapter.setParentUuid("0"); chapter.setInstitutionId(institutionUser.getId()); chapter.setCreateTime(LocalDateTime.now()); chapter.setUpdateTime(LocalDateTime.now()); chapter.setDelFlag(DeleteStatusEnum.NO.getStatus()); chapter.setCreateBy(institutionUser.getInstitutionalName()); chapter.setUpdateBy(institutionUser.getInstitutionalName()); chapterList.add(chapter); //章节(节) for (ThCourseChapterReqDTO child : chapterReqDTO.getChildren()) { ThCourseChapter section = new ThCourseChapter(); BeanUtils.copyProperties(child, section); section.setCourseUuid(course.getUuid()); section.setId(IdUtil.getSnowflake(0,0).nextId()); section.setParentUuid(chapter.getUuid()); section.setInstitutionId(institutionUser.getId()); section.setCreateTime(LocalDateTime.now()); section.setUpdateTime(LocalDateTime.now()); section.setDelFlag(DeleteStatusEnum.NO.getStatus()); section.setCreateBy(institutionUser.getInstitutionalName()); section.setUpdateBy(institutionUser.getInstitutionalName()); chapterList.add(section); }catch (Exception e){ logger.error("课程反序列化失败!"); throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR); } if(CollectionUtils.isEmpty(courseReqDTOList)){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_ERROR,"数据推送不可以为空"); } //暂时不限制不能超过1000条 List<String> reqAllCourseIds = new ArrayList<>(); List<String> reqAllChapterIds = new ArrayList<>(); List<ThErrorDataRespDTO> errorDataRespDTOS = new ArrayList<>(); List<ThCourseReqDTO> saveCourseReqDTOList = new ArrayList<>(); for (ThCourseReqDTO courseReqDTO : courseReqDTOList) { if(StringUtils.isEmpty(courseReqDTO.getUuid()) || !UUID.checkIsUuid(courseReqDTO.getUuid())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"课程uuid不符合规范")); continue; } if(StringUtils.isEmpty(courseReqDTO.getCourseCode())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"课程标识不可为空")); continue; } if(StringUtils.isEmpty(courseReqDTO.getCourseName())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"课程名称不可为空")); continue; } if(StringUtils.isEmpty(courseReqDTO.getTrainOrgName())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"培训机构名称不可为空")); continue; } if(courseReqDTO.getLessonNum() == null){ errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"课程总课时不可为空")); continue; } if(CollectionUtils.isEmpty(courseReqDTO.getChapters())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"课程大纲(大章)不可为空")); continue; } //章 boolean errorflag = false; List<String> chapterIds = new ArrayList<>(); for (ThCourseChapterReqDTO chapter : courseReqDTO.getChapters()) { if(StringUtils.isEmpty(chapter.getUuid()) || !UUID.checkIsUuid(chapter.getUuid())){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章uuid("+chapter.getUuid()+")不符合规范")); break; } } courseService.save(course); if(chapterList.size() > 0){ courseChapterService.saveBatch(chapterList); } }else { //获取所有章节 List<ThCourseChapterVO> courseChapterVOS = courseChapterService.listByCourseUuid(course.getUuid()); //修改 //章 List<ThCourseChapter> saveChapterList = new ArrayList<>(); List<ThCourseChapter> updateChapterList = new ArrayList<>(); //章 for (ThCourseChapterReqDTO chapterReqDTO : courseReqDTO.getChapters()) { List<ThCourseChapterVO> chapterSelectList = courseChapterVOS.stream().filter(cc -> cc.getUuid().equals(chapterReqDTO.getUuid())).collect(Collectors.toList()); if(chapterSelectList.size() > 0){ ThCourseChapterVO courseChapterVO = chapterSelectList.get(0); //修改 ThCourseChapter chapter = new ThCourseChapter(); BeanUtils.copyProperties(chapterReqDTO, chapter); chapter.setId(courseChapterVO.getId()); chapter.setUpdateBy(institutionUser.getInstitutionalName()); chapter.setUpdateTime(LocalDateTime.now()); updateChapterList.add(chapter); for (ThCourseChapterReqDTO child : chapterReqDTO.getChildren()) { List<ThCourseChapterVO> sectionSelectList = courseChapterVOS.stream().filter(cc -> cc.getUuid().equals(child.getUuid()) && cc.getParentUuid().equals(courseChapterVO.getUuid())).collect(Collectors.toList()); if(sectionSelectList.size() > 0){ //修改 ThCourseChapterVO sectionChapterVO = sectionSelectList.get(0); ThCourseChapter section = new ThCourseChapter(); BeanUtils.copyProperties(child, section); section.setId(sectionChapterVO.getId()); section.setUpdateBy(institutionUser.getInstitutionalName()); section.setUpdateTime(LocalDateTime.now()); updateChapterList.add(section); }else { //新增 ThCourseChapter sectionChapter= new ThCourseChapter(); BeanUtils.copyProperties(child, sectionChapter); sectionChapter.setId(IdUtil.getSnowflake(0,0).nextId()); sectionChapter.setCourseUuid(course.getUuid()); sectionChapter.setParentUuid(courseChapterVO.getUuid()); sectionChapter.setInstitutionId(institutionUser.getId()); sectionChapter.setDelFlag(DeleteStatusEnum.NO.getStatus()); sectionChapter.setUpdateBy(institutionUser.getInstitutionalName()); sectionChapter.setUpdateTime(LocalDateTime.now()); sectionChapter.setCreateBy(institutionUser.getInstitutionalName()); sectionChapter.setCreateTime(LocalDateTime.now()); saveChapterList.add(sectionChapter); } if(StringUtils.isEmpty(chapter.getChapterCode())){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(大章)("+chapter.getUuid()+")标识不可为空")); break; } if(StringUtils.isEmpty(chapter.getChapterName())){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(大章)("+chapter.getUuid()+")名称不可为空")); break; } if(chapter.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(chapter.getDelFlag()) == null ){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(大章)("+chapter.getUuid()+")删除标识不符合规范")); break; } if (chapter.getLessonNum() == null){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(大章)("+chapter.getUuid()+")课时(保留1位小数)不可为空")); break; } if (chapter.getSerialno() == null){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(大章)("+chapter.getUuid()+")序号不可为空")); break; } if(chapter.getHaveResource() == null || CourseHaveResourse.get(chapter.getHaveResource()) == null){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(大章)("+chapter.getUuid()+")是否有资源不符合规范")); break; } if(CollectionUtils.isEmpty(chapter.getChildren())){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(大章)("+chapter.getUuid()+")包含的章节(小节)列表不可为空")); break; } List<String> sectionIds = new ArrayList<>(); for (ThCourseChapterReqDTO child : chapter.getChildren()) { if(StringUtils.isEmpty(child.getUuid()) || !UUID.checkIsUuid(child.getUuid())){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(小节)uuid("+child.getUuid()+")不符合规范")); break; } }else { //新增 if(StringUtils.isEmpty(child.getChapterCode())){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(小节)("+child.getUuid()+")标识不可为空")); break; } if(StringUtils.isEmpty(child.getChapterName())){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(小节)("+child.getUuid()+")名称不可为空")); break; } if(child.getDuration() == null){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(小节)("+child.getUuid()+")视频时长(秒)不可为空")); break; } if (chapter.getSerialno() == null){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(小节)("+child.getUuid()+")序号不可为空")); break; } if (child.getLessonNum() == null){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(小节)("+child.getUuid()+")课时(保留1位小数)不可为空")); break; } if(child.getResourceType() == null || CourseResourceType.get(child.getResourceType()) == null){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(小节)"+child.getUuid()+"资源类型不规范")); break; } if(child.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(child.getDelFlag()) == null ){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(小节)("+child.getUuid()+")删除标识不符合规范")); break; } if(child.getHaveResource() == null || CourseHaveResourse.get(child.getHaveResource()) == null){ errorflag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(courseReqDTO.getUuid(),"章节(小节)("+chapter.getUuid()+")是否有资源不符合规范")); break; } sectionIds.add(child.getUuid()); } if(errorflag){ break; } //章 chapterIds.add(chapter.getUuid()); //节 chapterIds.addAll(sectionIds); } if(errorflag){ continue; } reqAllCourseIds.add(courseReqDTO.getUuid()); reqAllChapterIds.addAll(chapterIds); saveCourseReqDTOList.add(courseReqDTO); } //获取课程数据 List<ThCourse> oldCourseList = courseService.getByUuidList(reqAllCourseIds); //获取章节数据 List<ThCourseChapter> oldCourseChapterList = courseChapterService.getByUuids(reqAllChapterIds); //变量 List<ThCourse> saveCourseList = new ArrayList<>(); List<ThCourse> updateCourseList = new ArrayList<>(); List<ThCourseChapter> updateCourseChapterList = new ArrayList<>(); List<ThCourseChapter> saveCourseChapterList = new ArrayList<>(); //获取数据 for (ThCourseReqDTO courseReqDTO : saveCourseReqDTOList){ List<ThCourse> oCourseSelectList = oldCourseList.stream().filter(oc -> oc.getUuid().equals(courseReqDTO.getUuid())).collect(Collectors.toList()); if(oCourseSelectList.size() == 0){ //新增 //课程 ThCourse course = new ThCourse(); BeanUtils.copyProperties(courseReqDTO, course); course.setId(IdUtil.getSnowflake(0,0).nextId()); course.setCreateTime(LocalDateTime.now()); course.setUpdateTime(LocalDateTime.now()); course.setCreateBy(institutionUser.getInstitutionalName()); course.setUpdateBy(institutionUser.getInstitutionalName()); course.setInstitutionId(institutionUser.getId()); course.setDelFlag(DeleteStatusEnum.NO.getStatus()); course.setInstitutionName(institutionUser.getInstitutionalName()); saveCourseList.add(course); //章节(章) for (ThCourseChapterReqDTO chapterReqDTO : courseReqDTO.getChapters()) { ThCourseChapter chapter = new ThCourseChapter(); BeanUtils.copyProperties(chapterReqDTO, chapter); chapter.setCourseUuid(course.getUuid()); chapter.setId(IdUtil.getSnowflake(0,0).nextId()); chapter.setParentUuid("0"); chapter.setCourseUuid(course.getUuid()); chapter.setInstitutionId(institutionUser.getId()); chapter.setDelFlag(DeleteStatusEnum.NO.getStatus()); chapter.setCreateTime(LocalDateTime.now()); chapter.setUpdateTime(LocalDateTime.now()); //chapter.setDelFlag(DeleteStatusEnum.NO.getStatus()); chapter.setCreateBy(institutionUser.getInstitutionalName()); chapter.setUpdateBy(institutionUser.getInstitutionalName()); saveChapterList.add(chapter); saveCourseChapterList.add(chapter); //章节(节) for (ThCourseChapterReqDTO child : chapterReqDTO.getChildren()) { ThCourseChapter section = new ThCourseChapter(); BeanUtils.copyProperties(child, section); section.setCourseUuid(course.getUuid()); section.setId(IdUtil.getSnowflake(0,0).nextId()); section.setParentUuid(chapter.getUuid()); section.setCourseUuid(course.getUuid()); section.setDelFlag(DeleteStatusEnum.NO.getStatus()); section.setInstitutionId(institutionUser.getId()); section.setCreateTime(LocalDateTime.now()); section.setUpdateTime(LocalDateTime.now()); //section.setDelFlag(DeleteStatusEnum.NO.getStatus()); section.setCreateBy(institutionUser.getInstitutionalName()); section.setUpdateBy(institutionUser.getInstitutionalName()); saveChapterList.add(section); saveCourseChapterList.add(section); } } }else { ThCourse course = oCourseSelectList.get(0); //课程 course.setCourseCode(courseReqDTO.getCourseCode()); course.setCourseName(courseReqDTO.getCourseName()); course.setLessonNum(courseReqDTO.getLessonNum()); //course.setDelFlag(DeleteStatusEnum.NO.getStatus()); course.setUpdateBy(institutionUser.getInstitutionalName()); course.setUpdateTime(LocalDateTime.now()); updateCourseList.add(course); //过滤该课程所有章节 List<ThCourseChapter> oldCourseChapterSelectList = oldCourseChapterList.stream().filter(occ -> occ.getCourseUuid().equals(course.getUuid())).collect(Collectors.toList()); //修改 //章 /* List<ThCourseChapter> saveChapterList = new ArrayList<>(); List<ThCourseChapter> updateChapterList = new ArrayList<>();*/ //章 for (ThCourseChapterReqDTO chapterReqDTO : courseReqDTO.getChapters()) { List<ThCourseChapter> chapterSelectList = oldCourseChapterSelectList.stream().filter(cc -> cc.getUuid().equals(chapterReqDTO.getUuid())).collect(Collectors.toList()); if(chapterSelectList.size() > 0){ //存在,修改 ThCourseChapter chapter = chapterSelectList.get(0); BeanUtils.copyProperties(chapterReqDTO, chapter); chapter.setUpdateBy(institutionUser.getInstitutionalName()); chapter.setUpdateTime(LocalDateTime.now()); updateCourseChapterList.add(chapter); if(chapterReqDTO.getDelFlag().equals(DeleteStatusEnum.NO.getStatus())){ //非删除(章) for (ThCourseChapterReqDTO child : chapterReqDTO.getChildren()) { List<ThCourseChapter> sectionSelectList = oldCourseChapterSelectList.stream().filter(cc -> cc.getUuid().equals(child.getUuid()) && cc.getParentUuid().equals(chapter.getUuid())).collect(Collectors.toList()); if(sectionSelectList.size() > 0){ //修改 ThCourseChapter section = sectionSelectList.get(0); BeanUtils.copyProperties(child, section); section.setUpdateBy(institutionUser.getInstitutionalName()); section.setUpdateTime(LocalDateTime.now()); updateCourseChapterList.add(section); }else { //新增 ThCourseChapter section= new ThCourseChapter(); BeanUtils.copyProperties(child, section); section.setId(IdUtil.getSnowflake(0,0).nextId()); section.setCourseUuid(course.getUuid()); section.setParentUuid(chapter.getUuid()); section.setInstitutionId(institutionUser.getId()); //section.setDelFlag(DeleteStatusEnum.NO.getStatus()); section.setUpdateBy(institutionUser.getInstitutionalName()); section.setUpdateTime(LocalDateTime.now()); section.setCreateBy(institutionUser.getInstitutionalName()); section.setCreateTime(LocalDateTime.now()); saveCourseChapterList.add(section); } } }else{ //删除(章) List<ThCourseChapter> sectionSelectList = oldCourseChapterSelectList .stream() .filter(cc -> cc.getParentUuid().equals(chapter.getUuid())) .collect(Collectors.toList()); sectionSelectList.forEach(section ->{ section.setUpdateBy(institutionUser.getInstitutionalName()); section.setUpdateTime(LocalDateTime.now()); section.setDelFlag(DeleteStatusEnum.YES.getStatus()); }); updateCourseChapterList.addAll(sectionSelectList); } }else { //不存在,新增 ThCourseChapter chapter = new ThCourseChapter(); BeanUtils.copyProperties(chapterReqDTO, chapter); chapter.setId(IdUtil.getSnowflake(0,0).nextId()); chapter.setParentUuid("0"); chapter.setCourseUuid(course.getUuid()); chapter.setInstitutionId(institutionUser.getId()); //chapter.setDelFlag(chapter.getDelFlag()); chapter.setCreateTime(LocalDateTime.now()); chapter.setUpdateTime(LocalDateTime.now()); chapter.setCreateBy(institutionUser.getInstitutionalName()); chapter.setUpdateBy(institutionUser.getInstitutionalName()); saveCourseChapterList.add(chapter); //章节(节) for (ThCourseChapterReqDTO child : chapterReqDTO.getChildren()) { ThCourseChapter section = new ThCourseChapter(); BeanUtils.copyProperties(child, section); section.setId(IdUtil.getSnowflake(0,0).nextId()); section.setParentUuid(chapter.getUuid()); section.setCourseUuid(course.getUuid()); //section.setDelFlag(child.getDelFlag()); section.setInstitutionId(institutionUser.getId()); section.setCreateTime(LocalDateTime.now()); section.setUpdateTime(LocalDateTime.now()); section.setCreateBy(institutionUser.getInstitutionalName()); section.setUpdateBy(institutionUser.getInstitutionalName()); saveCourseChapterList.add(section); } } } } //课程 course.setCourseCode(courseReqDTO.getCourseCode()); course.setCourseName(courseReqDTO.getCourseName()); course.setLessonNum(courseReqDTO.getLessonNum()); course.setDelFlag(DeleteStatusEnum.NO.getStatus()); course.setUpdateBy(institutionUser.getInstitutionalName()); course.setUpdateTime(LocalDateTime.now()); courseService.updateById(course); //新增章节 if(saveChapterList.size() > 0){ courseChapterService.saveBatch(saveChapterList); } //修改章节 if(updateChapterList.size() > 0){ courseChapterService.updateBatchById(updateChapterList); } } return AjaxResult.success(); //数据插入 //课程插入 List<List<ThCourse>> splitSaveCourseList = ListUtil.split(saveCourseList, 500); for(List<ThCourse> courseList : splitSaveCourseList){ courseService.insertBatch(courseList); } //修改课程 List<List<ThCourse>> splitUpdateCourseList = ListUtil.split(updateCourseList, 500); for(List<ThCourse> courseList : splitUpdateCourseList){ courseService.updateBatch(courseList); } //插入章节 List<List<ThCourseChapter>> splitSaveChapterList = ListUtil.split(saveCourseChapterList, 500); for(List<ThCourseChapter> chapterList : splitSaveChapterList){ courseChapterService.insertBatch(chapterList); } //修改章节 List<List<ThCourseChapter>> splitUpdateChapterList = ListUtil.split(updateCourseChapterList, 500); for(List<ThCourseChapter> chapterList : splitUpdateChapterList){ courseChapterService.updateBatch(chapterList); } return AjaxResult.success(errorDataRespDTOS); } @Transactional @@ -288,95 +484,99 @@ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } //反序列化 List<ThStudentReqDTO> studentReqDTOs = JSONObject.parseObject(decrypt, new TypeReference<List<ThStudentReqDTO>>() {}); //获取批次课程 List<ThBatchCourse> batchCourseList = batchCourseService.listByInstitutionId(institutionUser.getId()); //获取批次学生 List<ThStudentCourse> studentCourseList = studentCourseService.listByInstitutionId(institutionUser.getId()); List<ThStudentReqDTO> studentReqDTOs = new ArrayList<>(); try { studentReqDTOs = JSONObject.parseObject(decrypt, new TypeReference<List<ThStudentReqDTO>>() {}); }catch (Exception e){ logger.error("学员序列化失败!"); throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR); } //参数校验 if(CollectionUtils.isEmpty(studentReqDTOs)){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"学生信息不可为空"); } List<String> idcardList = new ArrayList<>(); List<String> batchUuidList = new ArrayList<>(); for(ThStudentReqDTO studentReqDTO : studentReqDTOs){ //去重 if(!idcardList.contains(studentReqDTO.getIdcard()) && StringUtils.isNotEmpty(studentReqDTO.getIdcard())){ idcardList.add(studentReqDTO.getIdcard()); } if(!batchUuidList.contains(studentReqDTO.getBatchUuid()) && StringUtils.isNotEmpty(studentReqDTO.getBatchUuid())){ batchUuidList.add(studentReqDTO.getBatchUuid()); } } //获取批次 List<ThBatch> batchList = batchService.getByUuids(batchUuidList); //获取批次学生 List<ThStudentBatch> studentBatchList = studentBatchService.getByIdCards(idcardList); //获取学生表学生 List<ThStudent> students = studentService.getByIdcards(idcardList); //错误 List<ThErrorDataRespDTO> errorDataRespDTOS = new ArrayList<>(); List<ThStudentReqDTO> studentReqDTOList = new ArrayList<>(); List<ThStudentReqDTO> saveStudentReqDTOList = new ArrayList<>(); for (ThStudentReqDTO studentReqDTO : studentReqDTOs) { if(StringUtils.isEmpty(studentReqDTO.getUuid()) || !UUID.checkIsUuid(studentReqDTO.getUuid())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getUuid(),"学生uuid不符合规范")); continue; } if(StringUtils.isEmpty(studentReqDTO.getIdcard())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getIdcard(),"身份证不可为空")); errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getUuid(),"身份证不可为空")); continue; } if(StringUtils.isEmpty(studentReqDTO.getName())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getIdcard(),"姓名不可为空")); errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getUuid(),"姓名不可为空")); continue; } if(StringUtils.isEmpty(studentReqDTO.getPhone())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getIdcard(),"手机号不可为空")); errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getUuid(),"手机号不可为空")); continue; } if(studentReqDTO.getSex() == null || StudentSex.get(studentReqDTO.getSex()) == null){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getIdcard(),"性别不可为空")); errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getUuid(),"性别不可为空")); continue; } if(StringUtils.isEmpty(studentReqDTO.getAuthPhoto())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getIdcard(),"实名认证照不可为空")); errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getUuid(),"实名认证照不可为空")); continue; } if(studentReqDTO.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(studentReqDTO.getDelFlag()) == null ){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"学生删除标识不符合规范"); } if (StringUtils.isEmpty(studentReqDTO.getTrainOrgName())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getIdcard(),"培训机构名称不可为空")); errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getUuid(),"培训机构名称不可为空")); continue; } if(StringUtils.isEmpty(studentReqDTO.getBatchUuid())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getIdcard(),"关联批次(班级)不可为空")); errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getUuid(),"关联批次(班级)不可为空")); continue; } List<ThBatchCourse> collect = batchCourseList.stream().filter(batchCourse -> batchCourse.getBatchUuid().equals(studentReqDTO.getBatchUuid())).collect(Collectors.toList()); List<ThBatch> collect = batchList.stream().filter(batchCourse -> batchCourse.getUuid().equals(studentReqDTO.getBatchUuid())).collect(Collectors.toList()); if (CollectionUtils.isEmpty(collect)) { errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getIdcard(), "批次(班级)不存在,请先添加批次(班级)")); errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getUuid(), "批次(班级)不存在,请先添加批次(班级)")); continue; } List<ThStudentCourse> collect1 = studentCourseList.stream().filter(student -> student.getBatchUuid().equals(studentReqDTO.getBatchUuid()) && student.getIdcard().equals(studentReqDTO.getIdcard())).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(collect1)) { errorDataRespDTOS.add(new ThErrorDataRespDTO(studentReqDTO.getIdcard(), "学生不可重复加入批次(班级)")); continue; } studentReqDTOList.add(studentReqDTO); saveStudentReqDTOList.add(studentReqDTO); } if(CollectionUtils.isEmpty(studentReqDTOList)){ return AjaxResult.success(errorDataRespDTOS); } //根据idcards查询 List<String> idcards = studentReqDTOList.stream().map(ThStudentReqDTO::getIdcard).collect(Collectors.toList()); List<ThStudent> students = studentService.getByIdcards(idcards); //List<ThStudentCourse> thStudentCourseList = studentCourseService.getByIdCards(idcards); List<ThStudent> saveSudentList = new ArrayList<>(); List<ThStudentCourse> saveThStudentCourseList = new ArrayList<>(); List<ThStudent> updateStudentList = new ArrayList<>(); for (ThStudentReqDTO studentReqDTO : studentReqDTOList) { List<ThStudentBatch> saveThStudentBatchList = new ArrayList<>(); List<ThStudentBatch> updateThStudentBatchList = new ArrayList<>(); for (ThStudentReqDTO studentReqDTO : saveStudentReqDTOList) { //学生表中过滤 List<ThStudent> collect = students.stream().filter(s -> s.getIdcard().equals(studentReqDTO.getIdcard())).collect(Collectors.toList()); if(collect.size() > 0){ //修改 ThStudent student = collect.get(0); //修改 BeanUtils.copyProperties(studentReqDTO, student); student.setUpdateBy(institutionUser.getInstitutionalName()); student.setUpdateTime(LocalDateTime.now()); student.setInstitutionId(institutionUser.getId()); student.setInstitutionName(institutionUser.getInstitutionalName()); updateStudentList.add(student); List<ThBatchCourse> scSelectList = batchCourseList.stream().filter(batchCourse -> batchCourse.getBatchUuid().equals(studentReqDTO.getBatchUuid())).collect(Collectors.toList()); for (ThBatchCourse thStudentCourse : scSelectList) { //新增 ThStudentCourse sc = new ThStudentCourse(); BeanUtils.copyProperties(student, sc); sc.setId(IdUtil.getSnowflake(0,0).nextId()); sc.setCourseUuid(thStudentCourse.getCourseUuid()); sc.setBatchUuid(thStudentCourse.getBatchUuid()); sc.setFinishStatus(FinishStatus.NO.getStatus()); saveThStudentCourseList.add(sc); } }else { //新增 ThStudent student = new ThStudent(); @@ -390,27 +590,64 @@ student.setInstitutionName(institutionUser.getInstitutionalName()); student.setDelFlag(DeleteStatusEnum.NO.getStatus()); saveSudentList.add(student); List<ThBatchCourse> scSelectList = batchCourseList.stream().filter(batchCourse -> batchCourse.getBatchUuid().equals(studentReqDTO.getBatchUuid())).collect(Collectors.toList()); for (ThBatchCourse batchCourse : scSelectList) { ThStudentCourse thStudentCourse = new ThStudentCourse(); BeanUtils.copyProperties(student, thStudentCourse); thStudentCourse.setId(IdUtil.getSnowflake(0,0).nextId()); thStudentCourse.setCourseUuid(batchCourse.getCourseUuid()); thStudentCourse.setBatchUuid(batchCourse.getBatchUuid()); thStudentCourse.setFinishStatus(FinishStatus.NO.getStatus()); saveThStudentCourseList.add(thStudentCourse); } //获取班级学生 List<ThStudentBatch> selectBatchStudentList = studentBatchList.stream() .filter(sb -> sb.getBatchUuid().equals(studentReqDTO.getBatchUuid()) && sb.getIdcard().equals(studentReqDTO.getIdcard())) .collect(Collectors.toList()); //判断是否存在(已经加入过该班级) if(selectBatchStudentList.size() > 0){ ThStudentBatch thStudentBatch = selectBatchStudentList.get(0); //存在 if(studentReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ //删除(学生退出班级) thStudentBatch.setDelFlag(DeleteStatusEnum.YES.getStatus()); updateThStudentBatchList.add(thStudentBatch); }else { //修改 BeanUtils.copyProperties(studentReqDTO, thStudentBatch); thStudentBatch.setUpdateBy(institutionUser.getInstitutionalName()); thStudentBatch.setUpdateTime(LocalDateTime.now()); updateThStudentBatchList.add(thStudentBatch); } }else { //不存在,新增 ThStudentBatch thStudentBatch = new ThStudentBatch(); BeanUtils.copyProperties(studentReqDTO, thStudentBatch); thStudentBatch.setId(IdUtil.getSnowflake(0,0).nextId()); thStudentBatch.setUpdateBy(institutionUser.getInstitutionalName()); thStudentBatch.setUpdateTime(LocalDateTime.now()); thStudentBatch.setCreateBy(institutionUser.getInstitutionalName()); thStudentBatch.setCreateTime(LocalDateTime.now()); thStudentBatch.setInstitutionId(institutionUser.getId()); thStudentBatch.setInstitutionName(institutionUser.getInstitutionalName()); thStudentBatch.setFinishStatus(FinishStatus.NO.getStatus()); thStudentBatch.setDelFlag(DeleteStatusEnum.NO.getStatus()); saveThStudentBatchList.add(thStudentBatch); } } if(saveSudentList.size() > 0){ studentService.saveBatch(saveSudentList); //学生表新增 List<List<ThStudent>> splitSaveStudentList = ListUtil.split(saveSudentList, 500); for (List<ThStudent> studentList : splitSaveStudentList) { studentService.insertBatch(studentList); } if(updateStudentList.size() > 0){ studentService.updateByIdcard(updateStudentList); //学生表更新 List<List<ThStudent>> splitUpdateStudentList = ListUtil.split(updateStudentList, 500); for (List<ThStudent> studentList : splitUpdateStudentList) { studentService.updateBatch(studentList); } if(saveThStudentCourseList.size() > 0){ studentCourseService.saveBatch(saveThStudentCourseList); //学生关联班级表 List<List<ThStudentBatch>> splitSaveThStudentBatchList = ListUtil.split(saveThStudentBatchList, 500); for (List<ThStudentBatch> studentBatcheList : splitSaveThStudentBatchList) { studentBatchService.insertBatch(studentBatcheList); } //学生关联班级表修改 List<List<ThStudentBatch>> splitUpdateThStudentBatchList = ListUtil.split(updateThStudentBatchList, 500); for (List<ThStudentBatch> studentBatcheList : splitUpdateThStudentBatchList) { studentBatchService.updateBatch(studentBatcheList); } return AjaxResult.success(errorDataRespDTOS); } @@ -437,81 +674,573 @@ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } //反序列化 ThBatchReqDTO batchReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThBatchReqDTO>() {}); //参数校验 validateBatch(batchReqDTO); //获取数据 ThBatch batch = batchService.getByUuid(batchReqDTO.getUuid()); if(batch != null){ //修改 List<String> oldCourseUuids = batchCourseService.getCourseUuisByBatchUuid(batch.getUuid()); BeanUtils.copyProperties(batchReqDTO, batch); batch.setUpdateBy(institutionUser.getInstitutionalName()); batch.setUpdateTime(LocalDateTime.now()); batch.setInstitutionId(institutionUser.getId()); batch.setInstitutionName(institutionUser.getInstitutionalName()); batchService.updateById(batch); //关联课程 //差集(old-new)| 删除 List<ThBatchCourse> deleteBatchCourseList = oldCourseUuids .stream() .filter(item -> !batchReqDTO.getCourseUuidList().contains(item)) .map(item -> { ThBatchCourse batchCourse = new ThBatchCourse(); batchCourse.setBatchUuid(batchReqDTO.getUuid()); batchCourse.setCourseUuid(item); List<ThBatchReqDTO> batchReqDTOList = new ArrayList<>(); try { batchReqDTOList = JSONObject.parseObject(decrypt, new TypeReference<List<ThBatchReqDTO>>() {}); }catch (Exception e){ logger.error("班级序列化失败!"); throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR); } if(CollectionUtils.isEmpty(batchReqDTOList)){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"批次(班级)集合不可为空"); } //过滤出本次请求所有班级课程章节 List<String> reqAllBatchUuids = new ArrayList<>(); List<String> reqCourseUuids = new ArrayList<>(); List<String> reqChapterUuids = new ArrayList<>(); for(ThBatchReqDTO batchReqDTO : batchReqDTOList){ if(!reqAllBatchUuids.contains(batchReqDTO.getUuid()) && StringUtils.isNotEmpty(batchReqDTO.getUuid())){ reqAllBatchUuids.add(batchReqDTO.getUuid()); } if(!CollectionUtils.isEmpty(batchReqDTO.getCourseList())){ for (ThBatchCourseReqDTO thCourseReqDTO : batchReqDTO.getCourseList()){ if(!reqCourseUuids.contains(thCourseReqDTO.getCourseUuid()) && StringUtils.isNotEmpty(thCourseReqDTO.getCourseUuid())){ reqCourseUuids.add(thCourseReqDTO.getCourseUuid()); } if(!CollectionUtils.isEmpty(thCourseReqDTO.getChapterList())){ for (ThBatchCourseChapterReqDTO chapter : thCourseReqDTO.getChapterList()){ //去重 if(!reqChapterUuids.contains(chapter.getChapterUuid()) && StringUtils.isNotEmpty(chapter.getChapterUuid())){ reqChapterUuids.add(chapter.getChapterUuid()); } if(!CollectionUtils.isEmpty(chapter.getChildren())){ for (ThBatchCourseChapterReqDTO section : chapter.getChildren()){ //去重 if(!reqChapterUuids.contains(section.getChapterUuid()) && StringUtils.isNotEmpty(section.getChapterUuid())){ reqChapterUuids.add(section.getChapterUuid()); } } } } } } } } //获取已存在班级 List<ThBatch> oldBatchList = batchService.getByUuids(reqAllBatchUuids); //获取已存在班级课程 List<ThBatchCourse> oldbatchCourseList = batchCourseService.getListByBatchUuids(reqAllBatchUuids); //获取已存在班级课程章节 List<ThBatchCourseChapter> oldbatchCourseChapterList = batchCourseChapterService.getListByBatchUuids(reqAllBatchUuids); //获取课程 List<ThCourse> thCourseList = courseService.getByUuidList(reqCourseUuids); //获取章节 List<ThCourseChapter> thCourseChapterList = courseChapterService.getByUuids(reqChapterUuids); //校验 List<ThErrorDataRespDTO> errorDataRespDTOS = new ArrayList<>(); List<ThBatchReqDTO> saveBatchReqDTOList = new ArrayList<>(); for (ThBatchReqDTO batchReqDTO : batchReqDTOList) { //获取该机构所有课程和章节 //参数校验 if(StringUtils.isEmpty(batchReqDTO.getUuid()) || !UUID.checkIsUuid(batchReqDTO.getUuid())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"批次(班级)uuid不符合规范")); continue; } if(StringUtils.isEmpty(batchReqDTO.getBatchName())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"班次(班级)名称不可为空")); continue; } if(StringUtils.isEmpty(batchReqDTO.getTrainOrgName())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"培训机构名称不可为空")); continue; } if(batchReqDTO.getHaveExam() == null || HaveExam.get(batchReqDTO.getHaveExam()) == null){ errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"有无考试不规范")); continue; } if(batchReqDTO.getStatus() == null || OpenStatus.get(batchReqDTO.getStatus()) == null ){ errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"批次(班级)状态标识不符合规范")); continue; } if(batchReqDTO.getBatchLessonNum() == null){ errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"批次(班级)课时不可为空")); continue; } if(batchReqDTO.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(batchReqDTO.getDelFlag()) == null ){ errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"批次(班级)删除标识不符合规范")); continue; } if(CollectionUtils.isEmpty(batchReqDTO.getCourseList())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"关联课程不可为空")); continue; } boolean errorFlag = false; //校验课程 for (ThBatchCourseReqDTO thBatchCourseReqDTO : batchReqDTO.getCourseList()) { if(StringUtils.isEmpty(thBatchCourseReqDTO.getCourseUuid()) || !UUID.checkIsUuid(thBatchCourseReqDTO.getCourseUuid())){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"课程uuid("+thBatchCourseReqDTO.getCourseUuid()+")不符合规范")); break; } if(thBatchCourseReqDTO.getCourseLessonNum() == null){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"课程("+thBatchCourseReqDTO.getCourseUuid()+")课时不可为空")); break; } List<ThCourse> selectCourseList = thCourseList.stream().filter(c -> c.getUuid().equals(thBatchCourseReqDTO.getCourseUuid())).collect(Collectors.toList()); if(selectCourseList.size() == 0){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"课程("+thBatchCourseReqDTO.getCourseUuid()+")不存在")); break; } if(thBatchCourseReqDTO.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(thBatchCourseReqDTO.getDelFlag()) == null ){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"课程("+thBatchCourseReqDTO.getCourseUuid()+")删除标识不符合规范")); break; } if(CollectionUtils.isEmpty(thBatchCourseReqDTO.getChapterList())){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"课程("+thBatchCourseReqDTO.getCourseUuid()+")章节(大章)不可为空")); break; } //校验章节(大) for (ThBatchCourseChapterReqDTO chapter : thBatchCourseReqDTO.getChapterList()) { if(StringUtils.isEmpty(chapter.getChapterUuid()) || !UUID.checkIsUuid(chapter.getChapterUuid())){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"章节(大章)uuid("+chapter.getChapterUuid()+")不符合规范")); break; } if(chapter.getChapterLessonNum() == null){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"章节(大章)("+chapter.getChapterUuid()+")课时不可为空")); break; } if(chapter.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(chapter.getDelFlag()) == null ){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"章节(大章)("+chapter.getChapterUuid()+")删除标识不符合规范")); break; } //校验章节存在否 List<ThCourseChapter> chapterSelectList = thCourseChapterList .stream() .filter(courseChapter -> courseChapter.getUuid().equals(chapter.getChapterUuid()) && courseChapter.getCourseUuid().equals(thBatchCourseReqDTO.getCourseUuid()) && courseChapter.getParentUuid().equals("0") ).collect(Collectors.toList()); if(chapterSelectList.size() == 0){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"章节(大章)("+chapter.getChapterUuid()+")不存在")); break; } if(CollectionUtils.isEmpty(chapter.getChildren())){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"大章("+chapter.getChapterUuid()+")包含章节(小节)不可为空")); break; } for (ThBatchCourseChapterReqDTO child : chapter.getChildren()) { if(StringUtils.isEmpty(child.getChapterUuid()) || !UUID.checkIsUuid(child.getChapterUuid())){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"章节(小节)uuid("+child.getChapterUuid()+")不符合规范")); break; } if(child.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(child.getDelFlag()) == null ){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"章节(小节)("+child.getChapterUuid()+")删除标识不符合规范")); break; } List<ThCourseChapter> sectionSelectList = thCourseChapterList .stream() .filter(courseChapter -> courseChapter.getUuid().equals(child.getChapterUuid()) && courseChapter.getCourseUuid().equals(thBatchCourseReqDTO.getCourseUuid()) && courseChapter.getParentUuid().equals(chapter.getChapterUuid()) ).collect(Collectors.toList()); if(sectionSelectList.size() == 0){ errorFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(batchReqDTO.getUuid(),"章节(小节)("+child.getChapterUuid()+")不存在")); break; } } if(errorFlag){ break; } } if(errorFlag){ break; } } if(errorFlag){ continue; } saveBatchReqDTOList.add(batchReqDTO); } //数据填充 List<ThBatch> saveBatchList = new ArrayList<>(); List<ThBatch> updateBatchList = new ArrayList<>(); List<ThBatchCourse> saveBatchCourseList = new ArrayList<>(); List<ThBatchCourse> updateBatchCourseList = new ArrayList<>(); List<ThBatchCourseChapter> saveBatchCourseChapterList = new ArrayList<>(); List<ThBatchCourseChapter> updateBatchCourseChapterList = new ArrayList<>(); for (ThBatchReqDTO batchReqDTO : saveBatchReqDTOList) { List<ThBatch> oldBatchSelectList = oldBatchList.stream().filter(ob -> ob.getUuid().equals(batchReqDTO.getUuid())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(oldBatchSelectList)){ ThBatch batch = oldBatchSelectList.get(0); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ //删除班级 batch.setDelFlag(batchReqDTO.getDelFlag()); batch.setUpdateBy(institutionUser.getInstitutionalName()); batch.setUpdateTime(LocalDateTime.now()); updateBatchList.add(batch); List<ThBatchCourse> delectBatchCourseList = oldbatchCourseList .stream() .filter(obc -> obc.getBatchUuid().equals(batch.getUuid())) .collect(Collectors.toList()); delectBatchCourseList.forEach(item -> { item.setDelFlag(DeleteStatusEnum.YES.getStatus()); item.setUpdateBy(institutionUser.getInstitutionalName()); item.setUpdateTime(LocalDateTime.now()); }); updateBatchCourseList.addAll(delectBatchCourseList); List<ThBatchCourseChapter> deleteBatchCourseChapterList = oldbatchCourseChapterList .stream() .filter(obcc -> obcc.getBatchUuid().equals(batch.getUuid())) .collect(Collectors.toList()); deleteBatchCourseChapterList.forEach(item -> { item.setDelFlag(DeleteStatusEnum.YES.getStatus()); item.setUpdateBy(institutionUser.getInstitutionalName()); item.setUpdateTime(LocalDateTime.now()); }); updateBatchCourseChapterList.addAll(deleteBatchCourseChapterList); }else { //非删除 BeanUtils.copyProperties(batchReqDTO,batch); batch.setUpdateBy(institutionUser.getInstitutionalName()); batch.setUpdateTime(LocalDateTime.now()); updateBatchList.add(batch); //修改课程 for(ThBatchCourseReqDTO courseReqDTO : batchReqDTO.getCourseList()){ List<ThBatchCourse> oldBatchCourseSelectList = oldbatchCourseList.stream().filter(c -> c.getCourseUuid().equals(courseReqDTO.getCourseUuid())).collect(Collectors.toList()); if(CollectionUtils.isEmpty(oldBatchCourseSelectList)){ //获取该课程信息 List<ThCourse> courseInfoList = thCourseList.stream().filter(c -> c.getUuid().equals(courseReqDTO.getCourseUuid())).collect(Collectors.toList()); //插入课程 ThBatchCourse batchCourse = new ThBatchCourse(); BeanUtils.copyProperties(courseReqDTO,batchCourse); batchCourse.setCourseName(courseInfoList.get(0).getCourseName()); batchCourse.setBatchUuid(batch.getUuid()); //batchCourse.setCourseUuid(courseReqDTO.getCouserUuid()); batchCourse.setInstitutionId(institutionUser.getId()); batchCourse.setCreateBy(institutionUser.getInstitutionalName()); batchCourse.setCreateTime(LocalDateTime.now()); batchCourse.setUpdateBy(institutionUser.getInstitutionalName()); batchCourse.setUpdateTime(LocalDateTime.now()); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ batchCourse.setDelFlag(DeleteStatusEnum.YES.getStatus()); } saveBatchCourseList.add(batchCourse); //插入章 for(ThBatchCourseChapterReqDTO chapterReqDTO : courseReqDTO.getChapterList()){ //获取其章 List<ThCourseChapter> chapterInfoList = thCourseChapterList.stream().filter(cc -> cc.getCourseUuid().equals(batchCourse.getCourseUuid()) && cc.getUuid().equals(chapterReqDTO.getChapterUuid())).collect(Collectors.toList()); ThBatchCourseChapter chapter = new ThBatchCourseChapter(); BeanUtils.copyProperties(chapterInfoList.get(0),chapter); chapter.setBatchUuid(batch.getUuid()); chapter.setLessonNum(chapterReqDTO.getChapterLessonNum()); chapter.setId(IdUtil.getSnowflake(0,0).nextId()); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || courseReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ chapter.setDelFlag(DeleteStatusEnum.YES.getStatus()); }else { chapter.setDelFlag(chapterReqDTO.getDelFlag()); } chapter.setDelFlag(DeleteStatusEnum.YES.getStatus()); chapter.setChapterUuid(chapterReqDTO.getChapterUuid()); chapter.setCreateBy(institutionUser.getInstitutionalName()); chapter.setCreateTime(LocalDateTime.now()); chapter.setUpdateBy(institutionUser.getInstitutionalName()); chapter.setUpdateTime(LocalDateTime.now()); saveBatchCourseChapterList.add(chapter); //插入节 for(ThBatchCourseChapterReqDTO sectionReqDTO : chapterReqDTO.getChildren()){ //获取节 List<ThCourseChapter> sectionInfoList = thCourseChapterList.stream() .filter(cc -> cc.getCourseUuid().equals(batchCourse.getCourseUuid()) && cc.getUuid().equals(sectionReqDTO.getChapterUuid())).collect(Collectors.toList()); ThBatchCourseChapter section = new ThBatchCourseChapter(); BeanUtils.copyProperties(sectionInfoList.get(0),section); section.setBatchUuid(batch.getUuid()); section.setLessonNum(sectionReqDTO.getChapterLessonNum()); section.setId(IdUtil.getSnowflake(0,0).nextId()); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || courseReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || chapterReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ section.setDelFlag(DeleteStatusEnum.YES.getStatus()); }else { section.setDelFlag(sectionReqDTO.getDelFlag()); } section.setChapterUuid(sectionReqDTO.getChapterUuid()); section.setCreateBy(institutionUser.getInstitutionalName()); section.setCreateTime(LocalDateTime.now()); section.setUpdateBy(institutionUser.getInstitutionalName()); section.setUpdateTime(LocalDateTime.now()); saveBatchCourseChapterList.add(section); } } }else { //修改 ThBatchCourse batchCourse = oldBatchCourseSelectList.get(0); batchCourse.setDelFlag(courseReqDTO.getDelFlag()); batchCourse.setCourseLessonNum(courseReqDTO.getCourseLessonNum()); batchCourse.setUpdateBy(institutionUser.getInstitutionalName()); batchCourse.setUpdateTime(LocalDateTime.now()); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ batchCourse.setDelFlag(DeleteStatusEnum.YES.getStatus()); } updateBatchCourseList.add(batchCourse); //章 for(ThBatchCourseChapterReqDTO chapterReqDTO : courseReqDTO.getChapterList()){ List<ThBatchCourseChapter> oldChapterInfoList = oldbatchCourseChapterList.stream().filter(ochapter -> ochapter.getCourseUuid().equals(batchCourse.getCourseUuid()) && ochapter.getChapterUuid().equals(chapterReqDTO.getChapterUuid())).collect(Collectors.toList()); //章是否存在 if(!CollectionUtils.isEmpty(oldChapterInfoList)){ //存在修改 ThBatchCourseChapter chapter = oldChapterInfoList.get(0); BeanUtils.copyProperties(chapterReqDTO,chapter); chapter.setLessonNum(chapterReqDTO.getChapterLessonNum()); chapter.setUpdateBy(institutionUser.getInstitutionalName()); chapter.setUpdateTime(LocalDateTime.now()); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || courseReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ chapter.setDelFlag(DeleteStatusEnum.YES.getStatus()); } updateBatchCourseChapterList.add(chapter); for(ThBatchCourseChapterReqDTO sectionReqDTO : chapterReqDTO.getChildren()){ List<ThBatchCourseChapter> oldsectionInfoList = oldbatchCourseChapterList.stream().filter(section -> section.getCourseUuid().equals(batchCourse.getCourseUuid()) && section.getChapterUuid().equals(sectionReqDTO.getChapterUuid())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(oldsectionInfoList)){ //存在,修改 ThBatchCourseChapter section = oldsectionInfoList.get(0); BeanUtils.copyProperties(sectionReqDTO,section); section.setLessonNum(sectionReqDTO.getChapterLessonNum()); section.setUpdateBy(institutionUser.getInstitutionalName()); section.setUpdateTime(LocalDateTime.now()); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || courseReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || chapterReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ section.setDelFlag(DeleteStatusEnum.YES.getStatus()); } updateBatchCourseChapterList.add(section); }else { //不存在,新增 //获取节 List<ThCourseChapter> sectionInfoList = thCourseChapterList.stream() .filter(cc -> cc.getCourseUuid().equals(batchCourse.getCourseUuid()) && cc.getUuid().equals(sectionReqDTO.getChapterUuid())).collect(Collectors.toList()); ThBatchCourseChapter section = new ThBatchCourseChapter(); BeanUtils.copyProperties(sectionInfoList.get(0),section); section.setBatchUuid(batch.getUuid()); section.setChapterUuid(sectionInfoList.get(0).getUuid()); section.setLessonNum(sectionReqDTO.getChapterLessonNum()); section.setId(IdUtil.getSnowflake(0,0).nextId()); section.setDelFlag(sectionReqDTO.getDelFlag()); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || courseReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || chapterReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ section.setDelFlag(DeleteStatusEnum.YES.getStatus()); } section.setCreateBy(institutionUser.getInstitutionalName()); section.setCreateTime(LocalDateTime.now()); section.setUpdateBy(institutionUser.getInstitutionalName()); section.setUpdateTime(LocalDateTime.now()); saveBatchCourseChapterList.add(section); } } }else { //不存在,新增 //获取其章 List<ThCourseChapter> chapterInfoList = thCourseChapterList.stream().filter(cc -> cc.getCourseUuid().equals(batchCourse.getCourseUuid()) && cc.getUuid().equals(chapterReqDTO.getChapterUuid())).collect(Collectors.toList()); ThBatchCourseChapter chapter = new ThBatchCourseChapter(); BeanUtils.copyProperties(chapterInfoList.get(0),chapter); chapter.setChapterUuid(chapterInfoList.get(0).getUuid()); chapter.setBatchUuid(batch.getUuid()); chapter.setLessonNum(chapterReqDTO.getChapterLessonNum()); chapter.setId(IdUtil.getSnowflake(0,0).nextId()); chapter.setDelFlag(chapterReqDTO.getDelFlag()); chapter.setCreateBy(institutionUser.getInstitutionalName()); chapter.setCreateTime(LocalDateTime.now()); chapter.setUpdateBy(institutionUser.getInstitutionalName()); chapter.setUpdateTime(LocalDateTime.now()); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || courseReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ chapter.setDelFlag(DeleteStatusEnum.YES.getStatus()); } saveBatchCourseChapterList.add(chapter); //插入节 for(ThBatchCourseChapterReqDTO sectionReqDTO : chapterReqDTO.getChildren()){ //获取节 List<ThCourseChapter> sectionInfoList = thCourseChapterList.stream() .filter(cc -> cc.getCourseUuid().equals(batchCourse.getCourseUuid()) && cc.getUuid().equals(sectionReqDTO.getChapterUuid())).collect(Collectors.toList()); ThBatchCourseChapter section = new ThBatchCourseChapter(); BeanUtils.copyProperties(sectionInfoList.get(0),section); section.setChapterUuid(sectionInfoList.get(0).getUuid()); section.setBatchUuid(batch.getUuid()); section.setLessonNum(sectionReqDTO.getChapterLessonNum()); section.setId(IdUtil.getSnowflake(0,0).nextId()); section.setDelFlag(sectionReqDTO.getDelFlag()); section.setCreateBy(institutionUser.getInstitutionalName()); section.setCreateTime(LocalDateTime.now()); section.setUpdateBy(institutionUser.getInstitutionalName()); section.setUpdateTime(LocalDateTime.now()); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || courseReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || chapterReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ section.setDelFlag(DeleteStatusEnum.YES.getStatus()); } saveBatchCourseChapterList.add(section); } } } } } } }else { //新增 //班次新增 ThBatch batch = new ThBatch(); BeanUtils.copyProperties(batchReqDTO, batch); batch.setUpdateBy(institutionUser.getInstitutionalName()); batch.setUpdateTime(LocalDateTime.now()); batch.setCreateBy(institutionUser.getInstitutionalName()); batch.setCreateTime(LocalDateTime.now()); batch.setInstitutionId(institutionUser.getId()); batch.setInstitutionName(institutionUser.getInstitutionalName()); saveBatchList.add(batch); for(ThBatchCourseReqDTO courseReqDTO : batchReqDTO.getCourseList()) { //获取该课程信息 List<ThCourse> courseInfoList = thCourseList.stream().filter(c -> c.getUuid().equals(courseReqDTO.getCourseUuid())).collect(Collectors.toList()); //插入课程 ThBatchCourse batchCourse = new ThBatchCourse(); BeanUtils.copyProperties(courseReqDTO, batchCourse); batchCourse.setCourseName(courseInfoList.get(0).getCourseName()); batchCourse.setBatchUuid(batch.getUuid()); //batchCourse.setCourseUuid(courseReqDTO.getCouserUuid()); batchCourse.setInstitutionId(institutionUser.getId()); batchCourse.setCreateBy(institutionUser.getInstitutionalName()); batchCourse.setCreateTime(LocalDateTime.now()); batchCourse.setUpdateBy(institutionUser.getInstitutionalName()); batchCourse.setUpdateTime(LocalDateTime.now()); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || courseReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ batchCourse.setDelFlag(DeleteStatusEnum.YES.getStatus()); return batchCourse; }) .collect(Collectors.toList()); //差集(new-old) | 新增 List<ThBatchCourse> saveBatchCourseList = batchReqDTO.getCourseUuidList().stream() .filter(item -> !oldCourseUuids.contains(item)) .map(item -> { ThBatchCourse batchCourse = new ThBatchCourse(); batchCourse.setBatchUuid(batchReqDTO.getUuid()); batchCourse.setCourseUuid(item); }else { batchCourse.setDelFlag(DeleteStatusEnum.NO.getStatus()); batchCourse.setInstitutionId(institutionUser.getId()); return batchCourse; }).collect(Collectors.toList()); if(saveBatchCourseList.size() > 0){ batchCourseService.saveBatch(saveBatchCourseList); } if (deleteBatchCourseList.size() > 0){ batchCourseService.deleteByBatchUuidAndCourseUuid(deleteBatchCourseList); } }else { //新增 //班次新增 batch = new ThBatch(); BeanUtils.copyProperties(batchReqDTO, batch); batch.setUpdateBy(institutionUser.getInstitutionalName()); batch.setUpdateTime(LocalDateTime.now()); batch.setDelFlag(DeleteStatusEnum.NO.getStatus()); batch.setCreateBy(institutionUser.getInstitutionalName()); batch.setCreateTime(LocalDateTime.now()); batch.setInstitutionId(institutionUser.getId()); batch.setInstitutionName(institutionUser.getInstitutionalName()); //batch.setFinishStatus(FinishStatus.NO.getStatus()); batchService.save(batch); //关联课程 List<ThBatchCourse> batchCourseList = new ArrayList<>(); for (String uuid : batchReqDTO.getCourseUuidList()) { ThBatchCourse batchCourse = new ThBatchCourse(); batchCourse.setBatchUuid(batch.getUuid()); batchCourse.setCourseUuid(uuid); batchCourse.setDelFlag(DeleteStatusEnum.NO.getStatus()); batchCourse.setInstitutionId(institutionUser.getId()); batchCourseList.add(batchCourse); } if(batchCourseList.size() > 0){ batchCourseService.saveBatch(batchCourseList); } saveBatchCourseList.add(batchCourse); //插入章 for (ThBatchCourseChapterReqDTO chapterReqDTO : courseReqDTO.getChapterList()) { //获取其章 List<ThCourseChapter> chapterInfoList = thCourseChapterList.stream().filter(cc -> cc.getCourseUuid().equals(batchCourse.getCourseUuid()) && cc.getUuid().equals(chapterReqDTO.getChapterUuid())).collect(Collectors.toList()); ThBatchCourseChapter chapter = new ThBatchCourseChapter(); BeanUtils.copyProperties(chapterInfoList.get(0), chapter); chapter.setBatchUuid(batch.getUuid()); chapter.setLessonNum(chapterReqDTO.getChapterLessonNum()); chapter.setId(IdUtil.getSnowflake(0, 0).nextId()); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || courseReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || chapterReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ chapter.setDelFlag(DeleteStatusEnum.YES.getStatus()); }else { chapter.setDelFlag(DeleteStatusEnum.NO.getStatus()); } chapter.setChapterUuid(chapterReqDTO.getChapterUuid()); chapter.setChapterUuid(chapterReqDTO.getChapterUuid()); saveBatchCourseChapterList.add(chapter); //插入节 for (ThBatchCourseChapterReqDTO sectionReqDTO : chapterReqDTO.getChildren()) { //获取节 List<ThCourseChapter> sectionInfoList = thCourseChapterList.stream() .filter(cc -> cc.getCourseUuid().equals(batchCourse.getCourseUuid()) && cc.getUuid().equals(sectionReqDTO.getChapterUuid())).collect(Collectors.toList()); ThBatchCourseChapter section = new ThBatchCourseChapter(); BeanUtils.copyProperties(sectionInfoList.get(0), section); section.setBatchUuid(batch.getUuid()); section.setLessonNum(sectionReqDTO.getChapterLessonNum()); section.setId(IdUtil.getSnowflake(0, 0).nextId()); if(batchReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || courseReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || chapterReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus()) || sectionReqDTO.getDelFlag().equals(DeleteStatusEnum.YES.getStatus())){ section.setDelFlag(DeleteStatusEnum.YES.getStatus()); }else { section.setDelFlag(DeleteStatusEnum.NO.getStatus()); } section.setChapterUuid(sectionReqDTO.getChapterUuid()); section.setCreateBy(institutionUser.getInstitutionalName()); section.setCreateTime(LocalDateTime.now()); section.setUpdateBy(institutionUser.getInstitutionalName()); section.setUpdateTime(LocalDateTime.now()); section.setBatchUuid(batch.getUuid()); section.setChapterUuid(sectionReqDTO.getChapterUuid()); saveBatchCourseChapterList.add(section); } } } } } return AjaxResult.success(); //插入班级数据 List<List<ThBatch>> splitSaveBatchList = ListUtil.split(saveBatchList, 500); for (List<ThBatch> batchList : splitSaveBatchList) { batchService.insertBatch(batchList); } //修改班级数据 List<List<ThBatch>> splitUpdateBatchList = ListUtil.split(updateBatchList, 500); for (List<ThBatch> batchList : splitUpdateBatchList) { batchService.updateBatch(batchList); } //插入课程 List<List<ThBatchCourse>> splitSaveBatchCourseList = ListUtil.split(saveBatchCourseList, 500); for (List<ThBatchCourse> courseList : splitSaveBatchCourseList) { batchCourseService.insertBatch(courseList); } //修改课程 List<List<ThBatchCourse>> splitUpdateBatchCourseList = ListUtil.split(updateBatchCourseList, 500); for (List<ThBatchCourse> courseList : splitUpdateBatchCourseList) { batchCourseService.updateBatch(courseList); } //插入章节 List<List<ThBatchCourseChapter>> splitSaveBatchCourseChapterList = ListUtil.split(saveBatchCourseChapterList, 500); for (List<ThBatchCourseChapter> chapterList : splitSaveBatchCourseChapterList) { batchCourseChapterService.insertBatch(chapterList); } //修改章节 List<List<ThBatchCourseChapter>> splitUpdateBatchCourseChapterList = ListUtil.split(updateBatchCourseChapterList, 500); for (List<ThBatchCourseChapter> chapterList : splitUpdateBatchCourseChapterList) { batchCourseChapterService.updateBatch(chapterList); } return AjaxResult.success(errorDataRespDTOS); } @Transactional @@ -531,82 +1260,279 @@ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } //反序列化 ThStudyDetailReqDTO studyDetailReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThStudyDetailReqDTO>() {}); //参数校验 validateStudyDetail(studyDetailReqDTO); ThStudyDetail thStudyDetail = studyDetailService.getByUuid(studyDetailReqDTO.getUuid()); if(thStudyDetail == null){ //新增学习清单 thStudyDetail = new ThStudyDetail(); BeanUtils.copyProperties(studyDetailReqDTO, thStudyDetail); thStudyDetail.setUpdateBy(institutionUser.getInstitutionalName()); thStudyDetail.setUpdateTime(LocalDateTime.now()); thStudyDetail.setCreateBy(institutionUser.getInstitutionalName()); thStudyDetail.setCreateTime(LocalDateTime.now()); thStudyDetail.setInstitutionId(institutionUser.getId()); thStudyDetail.setInstitutionName(institutionUser.getInstitutionalName()); thStudyDetail.setDelFlag(DeleteStatusEnum.NO.getStatus()); thStudyDetail.setSerialNum(generateSerialNum()); //新增认证记录 List<ThStudyAuth> thStudyAuthList = studyDetailReqDTO.getAuthList().stream().map(sa -> { ThStudyAuth thStudyAuth = new ThStudyAuth(); BeanUtils.copyProperties(sa, thStudyAuth); thStudyAuth.setStudyDetailUuid(studyDetailReqDTO.getUuid()); return thStudyAuth; }).collect(Collectors.toList()); //新增学习轨迹 List<ThStudyTrack> thStudyTrackList = studyDetailReqDTO.getTrackList().stream().map(track -> { ThStudyTrack thStudyTrack = new ThStudyTrack(); BeanUtils.copyProperties(track, thStudyTrack); thStudyTrack.setStudyDetailUuid(studyDetailReqDTO.getUuid()); return thStudyTrack; }).collect(Collectors.toList()); studyDetailService.save(thStudyDetail); if(thStudyAuthList.size() > 0){ studyAuthService.saveBatch(thStudyAuthList); } if(thStudyTrackList.size() > 0){ studyTrackService.saveBatch(thStudyTrackList); } }else { //获取轨迹数据 //获取认证数据 List<String> oldAuthIdList = studyAuthService.getUuidByStudyDetaiId(thStudyDetail.getUuid()); List<String> oldTrackIdList = studyTrackService.getUuidByStudyDetaiId(thStudyDetail.getUuid()); //修改 BeanUtils.copyProperties(studyDetailReqDTO, thStudyDetail); thStudyDetail.setUpdateBy(institutionUser.getInstitutionalName()); thStudyDetail.setUpdateTime(LocalDateTime.now()); List<ThStudyAuth> saveAuthList = studyDetailReqDTO.getAuthList().stream() .filter(a -> oldAuthIdList.contains(a.getUuid())) .map(a -> { ThStudyAuth thStudyAuth = new ThStudyAuth(); BeanUtils.copyProperties(a, thStudyAuth); thStudyAuth.setStudyDetailUuid(studyDetailReqDTO.getUuid()); return thStudyAuth; }) .collect(Collectors.toList()); List<ThStudyTrack> saveTrackList = studyDetailReqDTO.getTrackList().stream() .filter(t -> oldTrackIdList.contains(t.getUuid())) .map(t -> { ThStudyTrack thStudyTrack = new ThStudyTrack(); BeanUtils.copyProperties(t, thStudyTrack); thStudyTrack.setStudyDetailUuid(studyDetailReqDTO.getUuid()); return thStudyTrack; }).collect(Collectors.toList()); studyDetailService.updateById(thStudyDetail); studyAuthService.saveBatch(saveAuthList); studyTrackService.saveBatch(saveTrackList); List<ThStudyDetailReqDTO> thStudyDetailReqDTOS = new ArrayList<>(); try { thStudyDetailReqDTOS = JSONObject.parseObject(decrypt, new TypeReference<List<ThStudyDetailReqDTO>>() {}); }catch (Exception e){ logger.error("学习记录序列化失败!"); throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR); } return AjaxResult.success(); //参数校验 if(CollectionUtils.isEmpty(thStudyDetailReqDTOS)){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"学习记录清单不可为空"); } //获取班级学生以及章节 List<String> chapterUuids = new ArrayList<>(); List<String> idcards = new ArrayList<>(); List<String> studyUuids = new ArrayList<>(); for (ThStudyDetailReqDTO studentDetailReqDTO : thStudyDetailReqDTOS) { if(!idcards.contains(studentDetailReqDTO.getIdcard()) && StringUtils.isNotEmpty(studentDetailReqDTO.getIdcard())){ idcards.add(studentDetailReqDTO.getIdcard()); } if(!chapterUuids.contains(studentDetailReqDTO.getChapterUuid()) && StringUtils.isNotEmpty(studentDetailReqDTO.getChapterUuid())){ chapterUuids.add(studentDetailReqDTO.getChapterUuid()); } studyUuids.add(studentDetailReqDTO.getUuid()); } List<ThStudentBatch> thStudentBatches = studentBatchService.getByIdCards(idcards); List<ThBatchCourseChapter> batchCourseChapters = batchCourseChapterService.getByChapterUuids(chapterUuids); //校验 List<ThErrorDataRespDTO> errorDataRespDTOS = new ArrayList<>(); List<ThStudyDetailReqDTO> saveStudyDetailReqDTOS = new ArrayList<>(); for (ThStudyDetailReqDTO studentDetailReqDTO : thStudyDetailReqDTOS) { if(StringUtils.isEmpty(studentDetailReqDTO.getUuid()) || !UUID.checkIsUuid(studentDetailReqDTO.getUuid())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"学习记录uuid标识不规范")); continue; } if(StringUtils.isEmpty(studentDetailReqDTO.getIdcard())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"学生身份证不可为空")); continue; } if(StringUtils.isEmpty(studentDetailReqDTO.getCourseUuid())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"课程不可为空")); continue; } if(StringUtils.isEmpty(studentDetailReqDTO.getBatchUuid())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"批次不可为空")); continue; } if(StringUtils.isEmpty(studentDetailReqDTO.getChapterUuid())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"章节不可为空")); continue; } //获取该平台课程 List<ThStudentBatch> StudentBatchSelectList = thStudentBatches.stream().filter(sb -> sb.getIdcard().equals(studentDetailReqDTO.getIdcard()) && sb.getBatchUuid().equals(studentDetailReqDTO.getBatchUuid())).collect(Collectors.toList()); studentBatchService.getByIdcardAndBatchUuid(studentDetailReqDTO.getIdcard(),studentDetailReqDTO.getBatchUuid()); List<ThBatchCourseChapter> chapterSelectList = batchCourseChapters.stream().filter(bcc -> bcc.getChapterUuid().equals(studentDetailReqDTO.getChapterUuid()) && bcc.getCourseUuid().equals(studentDetailReqDTO.getCourseUuid()) && bcc.getBatchUuid().equals(studentDetailReqDTO.getBatchUuid())).collect(Collectors.toList()); if(StudentBatchSelectList.size() == 0){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"批次(班级)中学生信息不存在")); continue; } if(chapterSelectList.size() == 0){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"课程章节不存在")); continue; } if(StringUtils.isEmpty(studentDetailReqDTO.getTrainOrgName())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"培训机构名称不可为空")); continue; } if(studentDetailReqDTO.getFinishStatus() == null || FinishStatus.get(studentDetailReqDTO.getFinishStatus()) == null){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"完成状态不规范")); continue; } if(studentDetailReqDTO.getDuration() == null){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"学习时长(秒)不可为空")); continue; } if(studentDetailReqDTO.getStartTime() == null){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"开始时间不可为空")); continue; } if(studentDetailReqDTO.getFinishTime() == null){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"结束时间不可为空")); continue; } if(studentDetailReqDTO.getStartPosition() == null){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"开始位置不可为空")); continue; } if(studentDetailReqDTO.getFinishPosition() == null){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"结束位置不可为空")); continue; } if(StringUtils.isEmpty(studentDetailReqDTO.getLessonReportUrl())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"学时报告不可为空")); continue; } //认证记录集合 // if(CollectionUtils.isEmpty(studentDetailReqDTO.getAuthList())){ // errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"认证记录集合不可为空")); // continue; // } //学习轨迹集合 if(CollectionUtils.isEmpty(studentDetailReqDTO.getTrackList())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"学习轨迹集合不可为空")); continue; } /*boolean authFlag = false; for(ThStudytAuthReqDTO item : studentDetailReqDTO.getAuthList()){ if(StringUtils.isEmpty(item.getUuid()) || !UUID.checkIsUuid(item.getUuid())){ authFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"认证记录uuid("+item.getUuid()+")不符合规范")); break; } if(StringUtils.isEmpty(item.getApprovePhoto())){ authFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"认证记录uuid("+item.getUuid()+"),认证照片不可为空")); break; } if(item.getAuthPosition() == null){ authFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"认证记录uuid("+item.getUuid()+"),认证位置不可为空")); break; } if(item.getAuthTime() == null){ authFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"认证记录uuid("+item.getUuid()+"),认证时间不可为空")); break; } if(item.getFaceType() == null || FaceType.get(item.getFaceType()) == null){ authFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"认证记录uuid("+item.getUuid()+"),认证类型不规范")); break; } } if(authFlag){ continue; }*/ boolean trackFlag = false; for(ThStudyTrackReqDTO item : studentDetailReqDTO.getTrackList()){ if(StringUtils.isEmpty(item.getUuid()) || !UUID.checkIsUuid(item.getUuid())){ trackFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"学习轨迹uuid("+item.getUuid()+")不符合规范")); break; } if(item.getStartTime() == null){ trackFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"学习轨迹uuid("+item.getUuid()+"),轨迹开始时间不可为空")); break; } if(item.getEndTime() == null){ trackFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"学习轨迹uuid("+item.getUuid()+"),轨迹结束时间不可为空")); break; } if(item.getTimeInterval() == null) { trackFlag = true; errorDataRespDTOS.add(new ThErrorDataRespDTO(studentDetailReqDTO.getUuid(),"学习轨迹uuid("+item.getUuid()+"),时间间隔(秒)不可为空")); break; } } if(trackFlag){ continue; } saveStudyDetailReqDTOS.add(studentDetailReqDTO); } //获取历史记录 List<ThStudyDetail> oldThStudyDetails = studyDetailService.getByUuids(studyUuids); List<ThStudyAuth> oldStudyAuthList = studyAuthService.getByStudyDetaiUuids(studyUuids); List<ThStudyTrack> oldStudyTrackList = studyTrackService.getByStudyDetailUuids(studyUuids); List<ThStudyDetail> saveStudyDetailList = new ArrayList<>(); List<ThStudyDetail> updateStudyDetailList = new ArrayList<>(); List<ThStudyAuth> saveStudyAuthList = new ArrayList<>(); List<ThStudyTrack> saveStudyTrackList = new ArrayList<>(); for(ThStudyDetailReqDTO studyDetailReqDTO : saveStudyDetailReqDTOS){ List<ThStudyDetail> oldStudyDetailList = oldThStudyDetails .stream() .filter(sd -> sd.getUuid().equals(studyDetailReqDTO.getUuid())) .collect(Collectors.toList()); if(oldStudyDetailList.size() == 0){ //新增学习清单 ThStudyDetail thStudyDetail = new ThStudyDetail(); BeanUtils.copyProperties(studyDetailReqDTO, thStudyDetail); thStudyDetail.setUpdateBy(institutionUser.getInstitutionalName()); thStudyDetail.setUpdateTime(LocalDateTime.now()); thStudyDetail.setCreateBy(institutionUser.getInstitutionalName()); thStudyDetail.setCreateTime(LocalDateTime.now()); thStudyDetail.setInstitutionId(institutionUser.getId()); thStudyDetail.setInstitutionName(institutionUser.getInstitutionalName()); thStudyDetail.setDelFlag(DeleteStatusEnum.NO.getStatus()); thStudyDetail.setSerialNum(generateSerialNum()); saveStudyDetailList.add(thStudyDetail); //新增认证记录 List<ThStudyAuth> thStudyAuthList = studyDetailReqDTO.getAuthList().stream().map(sa -> { ThStudyAuth thStudyAuth = new ThStudyAuth(); BeanUtils.copyProperties(sa, thStudyAuth); thStudyAuth.setStudyDetailUuid(studyDetailReqDTO.getUuid()); return thStudyAuth; }).collect(Collectors.toList()); saveStudyAuthList.addAll(thStudyAuthList); //新增学习轨迹 List<ThStudyTrack> thStudyTrackList = studyDetailReqDTO.getTrackList().stream().map(track -> { ThStudyTrack thStudyTrack = new ThStudyTrack(); BeanUtils.copyProperties(track, thStudyTrack); thStudyTrack.setStudyDetailUuid(studyDetailReqDTO.getUuid()); return thStudyTrack; }).collect(Collectors.toList()); saveStudyTrackList.addAll(thStudyTrackList); }else { ThStudyDetail thStudyDetail = oldStudyDetailList.get(0); //修改 BeanUtils.copyProperties(studyDetailReqDTO, thStudyDetail); thStudyDetail.setUpdateBy(institutionUser.getInstitutionalName()); thStudyDetail.setUpdateTime(LocalDateTime.now()); updateStudyDetailList.add(thStudyDetail); //过滤该记录的认证记录 List<String> authUuids = oldStudyAuthList .stream() .filter(a -> a.getStudyDetailUuid().equals(thStudyDetail.getUuid())) .map(ThStudyAuth::getUuid).collect(Collectors.toList()); //过滤出记录的轨迹记录 List<String> trackUuids = oldStudyTrackList .stream() .filter(t -> t.getStudyDetailUuid().equals(thStudyDetail.getUuid())) .map(ThStudyTrack::getUuid).collect(Collectors.toList()); List<ThStudyAuth> saveAuthList = studyDetailReqDTO.getAuthList().stream() .filter(a -> !authUuids.contains(a.getUuid())) .map(a -> { ThStudyAuth thStudyAuth = new ThStudyAuth(); BeanUtils.copyProperties(a, thStudyAuth); thStudyAuth.setStudyDetailUuid(studyDetailReqDTO.getUuid()); return thStudyAuth; }) .collect(Collectors.toList()); saveStudyAuthList.addAll(saveAuthList); List<ThStudyTrack> saveTrackList = studyDetailReqDTO.getTrackList().stream() .filter(t -> !trackUuids.contains(t.getUuid())) .map(t -> { ThStudyTrack thStudyTrack = new ThStudyTrack(); BeanUtils.copyProperties(t, thStudyTrack); thStudyTrack.setStudyDetailUuid(studyDetailReqDTO.getUuid()); return thStudyTrack; }).collect(Collectors.toList()); saveStudyTrackList.addAll(saveTrackList); } } //插入学习记录 List<List<ThStudyDetail>> splitSaveDetailList = ListUtil.split(saveStudyDetailList, 500); for (List<ThStudyDetail> thStudyDetails : splitSaveDetailList) { studyDetailService.insertBatch(thStudyDetails); } //修改学习记录 List<List<ThStudyDetail>> splitUpdateDetailList = ListUtil.split(updateStudyDetailList, 500); for (List<ThStudyDetail> thStudyDetails : splitUpdateDetailList) { studyDetailService.updateBatch(thStudyDetails); } //插入认证记录 List<List<ThStudyAuth>> splitSaveAuthList = ListUtil.split(saveStudyAuthList, 500); for (List<ThStudyAuth> thStudyAuths : splitSaveAuthList) { studyAuthService.insetBatch(thStudyAuths); } //插入学习轨迹 List<List<ThStudyTrack>> splitSaveTrackList = ListUtil.split(saveStudyTrackList, 500); for (List<ThStudyTrack> thStudyTracks : splitSaveTrackList) { studyTrackService.insertBatch(thStudyTracks); } return AjaxResult.success(errorDataRespDTOS); } @Transactional @@ -626,17 +1552,34 @@ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } //反序列化 List<ThExamRecordReqDTO> examRecordReqDTOS = JSONObject.parseObject(decrypt, new TypeReference<List<ThExamRecordReqDTO>>() {}); //参数校验 //获取该平台课程 List<ThStudentCourse> studentCourseList = studentCourseService.listByInstitutionId(institutionUser.getId()); List<ThExamRecord> oldExamRecordList = examRecordService.listByInstitutionId(institutionUser.getId()); List<ThErrorDataRespDTO> errorDataRespDTOS = new ArrayList<>(); List<ThExamRecord> saveExamRecordList = new ArrayList<>(); List<ThExamRecord> updateExamRecordList = new ArrayList<>(); List<ThExamRecordReqDTO> examRecordReqDTOS = new ArrayList<>(); try { examRecordReqDTOS = JSONObject.parseObject(decrypt, new TypeReference<List<ThExamRecordReqDTO>>() {}); }catch (Exception e){ logger.error("考试记录序列化失败!"); throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR); } if (CollectionUtils.isEmpty(examRecordReqDTOS)) { throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"考试记录不可为空"); } List<String> idcards = new ArrayList<>(); //List<String> batchUuids = new ArrayList<>(); List<String> examUuids = new ArrayList<>(); for (ThExamRecordReqDTO examRecordReqDTO : examRecordReqDTOS) { if(!idcards.contains(examRecordReqDTO.getIdcard())){ idcards.add(examRecordReqDTO.getIdcard()); } /*if(!batchUuids.contains(examRecordReqDTO.getBatchUuid())){ batchUuids.add(examRecordReqDTO.getBatchUuid()); }*/ examUuids.add(examRecordReqDTO.getUuid()); } //参数校验 List<ThStudentBatch> studentBatchList = studentBatchService.getByIdCards(idcards); List<ThExamRecord> oldExamRecordList = examRecordService.getByUuids(examUuids); List<ThErrorDataRespDTO> errorDataRespDTOS = new ArrayList<>(); List<ThExamRecord> saveExamRecordList = new ArrayList<>(); for (ThExamRecordReqDTO examRecordReqDTO : examRecordReqDTOS) { if(StringUtils.isEmpty(examRecordReqDTO.getUuid()) || !UUID.checkIsUuid(examRecordReqDTO.getUuid())){ @@ -647,20 +1590,16 @@ errorDataRespDTOS.add(new ThErrorDataRespDTO(examRecordReqDTO.getUuid(),"身份证不可为空")); continue; } if(StringUtils.isEmpty(examRecordReqDTO.getCourseUuid())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(examRecordReqDTO.getUuid(),"课程不可为空")); continue; } if(StringUtils.isEmpty(examRecordReqDTO.getBatchUuid())){ errorDataRespDTOS.add(new ThErrorDataRespDTO(examRecordReqDTO.getUuid(),"批次不可为空")); errorDataRespDTOS.add(new ThErrorDataRespDTO(examRecordReqDTO.getUuid(),"批次(班级)不可为空")); continue; } List<ThStudentCourse> thStudentCourses = studentCourseList.stream().filter(sc -> sc.getCourseUuid().equals(examRecordReqDTO.getCourseUuid()) && sc.getBatchUuid().equals(examRecordReqDTO.getBatchUuid()) List<ThStudentBatch> thStudentCourses = studentBatchList.stream().filter(sc -> sc.getBatchUuid().equals(examRecordReqDTO.getBatchUuid()) && sc.getIdcard().equals(examRecordReqDTO.getIdcard())).collect(Collectors.toList()); if(thStudentCourses.size() == 0){ errorDataRespDTOS.add(new ThErrorDataRespDTO(examRecordReqDTO.getUuid(),"无该学生培训信息")); errorDataRespDTOS.add(new ThErrorDataRespDTO(examRecordReqDTO.getUuid(),"无学生"+examRecordReqDTO.getIdcard()+"培训信息")); continue; } if(StringUtils.isEmpty(examRecordReqDTO.getTrainOrgName())){ @@ -696,18 +1635,9 @@ errorDataRespDTOS.add(new ThErrorDataRespDTO(examRecordReqDTO.getUuid(),"是否通过考试状态不规范")); continue; } if(examRecordReqDTO.getExamNum() == null){ errorDataRespDTOS.add(new ThErrorDataRespDTO(examRecordReqDTO.getUuid(),"考试次数不可为空")); continue; } List<ThExamRecord> examRecordSelectList = oldExamRecordList.stream().filter(e -> e.getUuid().equals(examRecordReqDTO.getUuid())).collect(Collectors.toList()); if(examRecordSelectList.size() > 0){ ThExamRecord thExamRecord = examRecordSelectList.get(0); BeanUtils.copyProperties(examRecordReqDTO,thExamRecord); thExamRecord.setUpdateTime(LocalDateTime.now()); thExamRecord.setUpdateBy(institutionUser.getInstitutionalName()); updateExamRecordList.add(thExamRecord); }else { if(examRecordSelectList.size() == 0){ //新增 ThExamRecord thExamRecord = new ThExamRecord(); BeanUtils.copyProperties(examRecordReqDTO,thExamRecord); @@ -721,11 +1651,9 @@ saveExamRecordList.add(thExamRecord); } } if(saveExamRecordList.size() > 0){ examRecordService.saveBatch(saveExamRecordList); } if(updateExamRecordList.size() > 0){ examRecordService.updateBatchById(updateExamRecordList); List<List<ThExamRecord>> splitSaveExamList = ListUtil.split(saveExamRecordList, 500); for (List<ThExamRecord> list : splitSaveExamList) { examRecordService.saveBatch(list); } return AjaxResult.success(errorDataRespDTOS); } @@ -746,7 +1674,19 @@ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } //反序列化 ThCourseDeleteReqDTO thCourseDeleteReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThCourseDeleteReqDTO>() {}); ThCourseDeleteReqDTO thCourseDeleteReqDTO = null; try { thCourseDeleteReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThCourseDeleteReqDTO>() {}); }catch (Exception e){ logger.error("课程删除反序列化失败!"); throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR); } if(thCourseDeleteReqDTO == null){ throw new BusinessException(ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } if(StringUtils.isEmpty(thCourseDeleteReqDTO.getCourseUuid())){ throw new BusinessException(ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } @@ -770,6 +1710,7 @@ thCourseChapter.setDelFlag(DeleteStatusEnum.YES.getStatus()); return thCourseChapter; }).collect(Collectors.toList()); courseService.updateById(thCourse); //删除章节 if(thCourseChapters.size() > 0){ courseChapterService.updateBatchById(thCourseChapters); @@ -793,7 +1734,16 @@ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } //反序列化 ThBatchOpenReqDTO thBatchOpenReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThBatchOpenReqDTO>() {}); ThBatchOpenReqDTO thBatchOpenReqDTO = null; try { thBatchOpenReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThBatchOpenReqDTO>() {}); }catch (Exception e){ logger.error("班级开始反序列化失败!"); throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR); } if(thBatchOpenReqDTO == null){ throw new BusinessException(this.getClass(),ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"批次(班级)不可为空"); } if(StringUtils.isEmpty(thBatchOpenReqDTO.getBatchUuid())){ throw new BusinessException(this.getClass(),ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"批次(班级)不可为空"); } @@ -801,7 +1751,10 @@ if(thBatch == null){ throw new BusinessException(ResultConstants.BATCH_IS_NOT_EXIST); } thBatch.setOpenStatus(OpenStatus.YES.getStatus()); if(!thBatch.getStatus().equals(OpenStatus.NO.getStatus())){ throw new BusinessException(this.getClass(),ResultConstants.THREE_INSTITUTION_OTHER_ERROR,"已开班或已结束不可重新开班"); } thBatch.setStatus(OpenStatus.START.getStatus()); thBatch.setUpdateTime(LocalDateTime.now()); thBatch.setUpdateBy(institutionUser.getInstitutionalName()); batchService.updateById(thBatch); @@ -809,7 +1762,7 @@ } @Transactional @Override public AjaxResult receiveBarchEnd(JSONObject jsonObject) { public AjaxResult receiveBatchEnd(JSONObject jsonObject) { InstitutionUser institutionUser = ThreeInContextHolder.getContext(); String data = jsonObject.getString("data"); @@ -824,31 +1777,35 @@ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL); } //反序列化 ThBatchEndReqDTO thBatchEndReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThBatchEndReqDTO>() {}); ThBatchEndReqDTO thBatchEndReqDTO = null; try { thBatchEndReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThBatchEndReqDTO>() {}); }catch (Exception e){ logger.error("班级结束反序列化失败!"); throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR); } if(thBatchEndReqDTO == null){ throw new BusinessException(this.getClass(),ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"批次(班级)不可为空"); } if(StringUtils.isEmpty(thBatchEndReqDTO.getBatchUuid())){ throw new BusinessException(this.getClass(),ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"批次(班级)不可为空"); } if(StringUtils.isEmpty(thBatchEndReqDTO.getIdcard())){ throw new BusinessException(this.getClass(),ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"学生身份证不可为空"); ThBatch thBatch = batchService.getByUuid(thBatchEndReqDTO.getBatchUuid()); if(thBatch == null){ throw new BusinessException(ResultConstants.BATCH_IS_NOT_EXIST); } List<ThStudentCourse> thStudentCourses = studentCourseService.getByIdcardAndBatchUuid(thBatchEndReqDTO.getIdcard(), thBatchEndReqDTO.getBatchUuid()); if(CollectionUtils.isEmpty(thStudentCourses)){ throw new BusinessException(ResultConstants.BATCH_STUDENT_IS_NOT_EXIST); } thStudentCourses.stream().forEach(sc -> { sc.setFinishStatus(FinishStatus.YES.getStatus()); }); studentCourseService.updateBatchById(thStudentCourses); thBatch.setStatus(OpenStatus.END.getStatus()); thBatch.setUpdateTime(LocalDateTime.now()); thBatch.setUpdateBy(institutionUser.getInstitutionalName()); batchService.updateById(thBatch); studentBatchService.updateFinishStatusByBatchUuid(thBatchEndReqDTO.getBatchUuid()); return AjaxResult.success(); } private void validateStudyDetail(ThStudyDetailReqDTO studentDetailReqDTO) { //获取该平台课程 ThCourse course = courseService.getByUuid(studentDetailReqDTO.getCourseUuid()); ThBatch batch = batchService.getByUuid(studentDetailReqDTO.getBatchUuid()); ThCourseChapter chapter = courseChapterService.getByUuid(studentDetailReqDTO.getChapterUuid()); if (studentDetailReqDTO == null) { throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"学习记录清单不可为空"); @@ -862,20 +1819,21 @@ if(StringUtils.isEmpty(studentDetailReqDTO.getCourseUuid())){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"课程不可为空"); } if(course == null){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"课程不存在"); } if(StringUtils.isEmpty(studentDetailReqDTO.getBatchUuid())){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"批次不可为空"); } if(batch == null){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"批次不存在"); } if(StringUtils.isEmpty(studentDetailReqDTO.getChapterUuid())){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"章节不可为空"); } //获取该平台课程 ThStudentBatch thStudentBatch = studentBatchService.getByIdcardAndBatchUuid(studentDetailReqDTO.getIdcard(),studentDetailReqDTO.getBatchUuid()); ThBatchCourseChapter chapter = batchCourseChapterService.getByUuid(studentDetailReqDTO.getBatchUuid(),studentDetailReqDTO.getCourseUuid(),studentDetailReqDTO.getChapterUuid()); if(thStudentBatch == null){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"批次(班级)中学生信息不存在"); } if(chapter == null){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"章节不存在"); throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"课程章节不存在"); } if(StringUtils.isEmpty(studentDetailReqDTO.getTrainOrgName())){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"培训机构名称不可为空"); @@ -948,32 +1906,7 @@ * @param batchReqDTO */ private void validateBatch(ThBatchReqDTO batchReqDTO) { if(StringUtils.isEmpty(batchReqDTO.getUuid()) || !UUID.checkIsUuid(batchReqDTO.getUuid())){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"uuid不符合规范"); } if(StringUtils.isEmpty(batchReqDTO.getBatchName())){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"班次名称不可为空"); } if(StringUtils.isEmpty(batchReqDTO.getTrainOrgName())){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"培训机构名称不可为空"); } if(batchReqDTO.getHaveExam() == null || HaveExam.get(batchReqDTO.getHaveExam()) == null){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"有无考试不规范"); } if(batchReqDTO.getOpenStatus() == null || OpenStatus.get(batchReqDTO.getOpenStatus()) == null ){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"开班标识不符合规范"); } // if(batchReqDTO.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(batchReqDTO.getDelFlag()) == null ){ // throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"删除标识不符合规范"); // } if(CollectionUtils.isEmpty(batchReqDTO.getCourseUuidList())){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"关联课程不可为空"); } List<ThCourse> courseList = courseService.selectByUuid(batchReqDTO.getCourseUuidList()); if(courseList.size() != batchReqDTO.getCourseUuidList().size()){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"关联课程不存在,请先上报课程"); } } /** @@ -1055,12 +1988,12 @@ if(StringUtils.isEmpty(chapter.getChapterName())){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"章节(大章)名称不可为空"); } /*if(chapter.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(chapter.getDelFlag()) == null ){ if(chapter.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(chapter.getDelFlag()) == null ){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"章节(大章)删除标识不符合规范"); } if (chapter.getLessonNum() == null){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"章节(大章)课时(保留1位小数)不可为空"); }*/ } if(chapter.getHaveResource() == null || CourseHaveResourse.get(chapter.getHaveResource()) == null){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"是否有资源不符合规范"); } @@ -1085,15 +2018,13 @@ if(child.getResourceType() == null || CourseResourceType.get(child.getResourceType()) == null){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"资源类型不规范"); } /*if(child.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(child.getDelFlag()) == null ){ if(child.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(child.getDelFlag()) == null ){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"章节(小节)删除标识不符合规范"); }*/ } if(child.getHaveResource() == null || CourseHaveResourse.get(child.getHaveResource()) == null){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"是否有资源不符合规范"); } } } } @@ -1131,9 +2062,9 @@ if(questionBankReqDTO.getMonth() == null){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"年月不可为空"); } /* if(questionBankReqDTO.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(questionBankReqDTO.getDelFlag()) == null ){ if(questionBankReqDTO.getDelFlag() == null || DeleteStatusEnum.getDeleteStatusEnum(questionBankReqDTO.getDelFlag()) == null ){ throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"删除标识不符合规范"); }*/ } } private String generateSerialNum() { Long count = studyDetailService.getCount(); exam-system/src/main/resources/mapper/institutionaccess/ThBatchCourseChapterMapper.xml
对比新文件 @@ -0,0 +1,115 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gkhy.exam.institutionalaccess.mapper.ThBatchCourseChapterMapper"> <update id="deleteByBatchUuid"> UPDATE th_batch_course_chapter set del_flag = 2 where batch_uuid = #{batchUuid} </update> <select id="getListByBatchUuid" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThBatchCourseVO"> SELECT bc.*, c.course_name , (SELECT sum(cc.duration) from th_course_chapter cc where cc.course_uuid = bc.course_uuid) duration FROM th_batch_course bc LEFT JOIN th_course c ON c.uuid = bc.course_uuid WHERE bc.del_flag = 0 AND bc.batch_uuid = #{batchUuid} </select> <select id="getByBatchUuids" resultType="com.gkhy.exam.institutionalaccess.entity.ThBatchCourseChapter"> select id, chapter_uuid, chapter_code,chapter_name,lesson_num,have_resource, duration, institution_id,resource_type,course_uuid ,parent_uuid, url,batch_uuid,serialno from th_batch_course_chapter where del_flag = 0 and batch_uuid in <foreach collection="batchUuids" item="batchUuid" index ="index" open="(" close=")" separator=","> #{batchUuid} </foreach> order by serialno </select> <select id="getByChapterUuids" resultType="com.gkhy.exam.institutionalaccess.entity.ThBatchCourseChapter"> select id, chapter_uuid, chapter_code,chapter_name,lesson_num,have_resource, duration, institution_id,resource_type,course_uuid ,parent_uuid, url,batch_uuid,serialno from th_batch_course_chapter where del_flag = 0 and chapter_uuid in <foreach collection="chapterUuids" item="chapterUuid" index ="index" open="(" close=")" separator=","> #{chapterUuid} </foreach> </select> <insert id="insertBatch"> INSERT INTO th_batch_course_chapter ( chapter_uuid, chapter_code,chapter_name,lesson_num,have_resource, duration, institution_id,resource_type,course_uuid ,parent_uuid, url, del_flag,create_time,update_time,create_by,update_by,batch_uuid,serialno) VALUES <foreach collection="batchCourseChapterList" separator="," item="item"> (#{item.chapterUuid},#{item.chapterCode},#{item.chapterName},#{item.lessonNum},#{item.haveResource},#{item.duration}, #{item.institutionId},#{item.resourceType},#{item.courseUuid}, #{item.parentUuid},#{item.url},#{item.delFlag},#{item.createTime}, #{item.updateTime},#{item.createBy},#{item.updateBy},#{item.batchUuid},#{item.serialno}) </foreach> </insert> <!--批量修改--> <update id="updateBatch" parameterType="java.util.List" > <foreach collection="batchCourseChapterList" item="item" index="index" separator=";"> UPDATE th_batch_course_chapter <set> <if test="item.chapterUuid != null and item.chapterUuid != ''" > chapter_uuid = #{item.chapterUuid}, </if> <if test="item.chapterCode != null and item.chapterCode != ''" > chapter_code = #{item.chapterCode}, </if> <if test="item.chapterName != null and item.chapterName != ''" > chapter_name = #{item.chapterName}, </if> <if test="item.lessonNum != null" > lesson_num = #{item.lessonNum}, </if> <if test="item.haveResource != null" > have_resource = #{item.haveResource}, </if> <if test="item.duration != null" > duration = #{item.duration}, </if> <if test="item.institutionId != null" > institution_id = #{item.institutionId}, </if> <if test="item.resourceType != null" > resource_type = #{item.resourceType}, </if> <if test="item.serialno != null" > serialno = #{item.serialno}, </if> <if test="item.courseUuid != null and item.courseUuid != ''" > course_uuid = #{item.courseUuid}, </if> <if test="item.parentUuid != null and item.parentUuid != ''" > parent_uuid = #{item.parentUuid}, </if> <if test="item.url != null and item.url != ''" > url = #{item.url}, </if> <if test="item.delFlag != null" > del_flag = #{item.delFlag}, </if> <if test="item.updateBy != null and item.updateBy != ''" > update_by = #{item.updateBy}, </if> <if test="item.updateTime != null" > update_time = #{item.updateTime}, </if> <if test="item.batchUuid != null and item.batchUuid != ''" > batch_uuid = #{item.batchUuid} </if> </set> where id = #{item.id} </foreach> </update> </mapper> exam-system/src/main/resources/mapper/institutionaccess/ThBatchCourseMapper.xml
@@ -4,7 +4,7 @@ <update id="deleteByBatchUuidAndCourseUuid" parameterType="java.util.List" > <foreach collection="list" item="item" index="index" separator=";"> UPDATE batch_course UPDATE th_batch_course <set> <if test="item.delFlag != null" > del_flag = #{item.delFlag} @@ -14,28 +14,92 @@ and course_uuid = #{item.courseUuid} </foreach> </update> <update id="deleteByBatchUuid" > <select id="getListByBatchUuids" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThBatchCourseVO"> select bc.*,c.course_name from th_batch_course bc left join th_course c on c.uuid = bc.course_uuid where bc.del_flag = 0 and bc.batch_uuid in <foreach collection="batchUuids" item="batchUuid" open="(" close=")" separator=","> #{batchUuid} </foreach> </select> UPDATE th_batch_course set del_flag = 2 where batch_uuid = #{batchUuid} </update> <select id="getListByBatchUuid" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThBatchCourseVO"> SELECT bc.*, c.course_name , (SELECT sum(cc.duration) from th_course_chapter cc where cc.course_uuid = bc.course_uuid) duration ( SELECT sum( cc.duration ) FROM th_batch_course_chapter cc WHERE cc.course_uuid = bc.course_uuid AND cc.del_flag = 0 AND cc.batch_uuid = bc.batch_uuid ) duration FROM th_batch_course bc LEFT JOIN th_course c ON c.uuid = bc.course_uuid WHERE bc.del_flag = 0 AND bc.batch_uuid = #{batchUuid} </select> <!--批量插入--> <insert id="insertBatch"> INSERT INTO th_batch_course (id, course_uuid,course_name,course_lesson_num,batch_uuid, institution_id, train_org_name, del_flag,create_time,update_time,create_by,update_by) VALUES <foreach collection="courseList" separator="," item="item"> (#{item.id},#{item.courseUuid},#{item.courseName},#{item.courseLessonNum}, #{item.batchUuid},#{item.institutionId}, #{item.trainOrgName},#{item.delFlag},#{item.createTime}, #{item.updateTime},#{item.createBy},#{item.updateBy}) </foreach> </insert> <!--批量修改--> <update id="updateBatch" parameterType="java.util.List" > <foreach collection="courseList" item="item" index="index" separator=";"> UPDATE th_batch_course <set> <if test="item.courseUuid != null and item.courseUuid != ''" > course_uuid = #{item.courseUuid}, </if> <if test="item.courseName != null and item.courseName != ''" > course_name = #{item.courseName}, </if> <if test="item.courseLessonNum != null" > course_lesson_num = #{item.courseLessonNum}, </if> <if test="item.batchUuid != null and item.batchUuid != ''" > batch_uuid = #{item.batchUuid}, </if> <if test="item.institutionId != null" > institution_id = #{item.institutionId}, </if> <if test="item.trainOrgName != null and item.trainOrgName != ''" > train_org_name = #{item.trainOrgName}, </if> <if test="item.delFlag != null" > del_flag = #{item.delFlag}, </if> <if test="item.updateBy != null and item.updateBy != ''" > update_by = #{item.updateBy}, </if> <if test="item.updateTime != null" > update_time = #{item.updateTime} </if> </set> where id = #{item.id} </foreach> </update> <select id="getByBatchUuids" resultType="com.gkhy.exam.institutionalaccess.entity.ThBatchCourse"> select id, course_uuid,course_name,course_lesson_num,batch_uuid, institution_id,train_org_name from th_batch_course where del_flag = 0 and batch_uuid in <foreach collection="batchUuids" item="batchUuid" index ="index" open="(" close=")" separator=","> #{batchUuid} </foreach> </select> </mapper> exam-system/src/main/resources/mapper/institutionaccess/ThBatchMapper.xml
@@ -2,7 +2,18 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gkhy.exam.institutionalaccess.mapper.ThBatchMapper"> <select id="listByPage" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThBatchVO"> select * from th_batch where del_flag = 0 select id, uuid, batch_name, institution_id, institution_name, have_exam, status, del_flag, create_time, update_time from th_batch where del_flag = 0 <if test="query.institutionId != null"> and institution_id = #{query.institutionId} </if> @@ -15,8 +26,118 @@ <if test="query.endTime != null"><!-- 结束时间检索 --> and date_format(d.create_time,'%y-%m-%d') <= date_format(#{query.endTime},'%y-%m-%d') </if> order by id desc </select> <!--批量插入--> <insert id="insertBatch"> INSERT INTO th_batch (id, uuid, institution_id, institution_name,batch_name,have_exam,status, batch_lesson_num,train_org_name, del_flag,create_time,update_time,create_by,update_by) VALUES <foreach collection="batchList" separator="," item="item"> (#{item.id},#{item.uuid},#{item.institutionId},#{item.institutionName},#{item.batchName},#{item.haveExam},#{item.status}, #{item.batchLessonNum},#{item.trainOrgName},#{item.delFlag},#{item.createTime}, #{item.updateTime},#{item.createBy},#{item.updateBy}) </foreach> </insert> <!--批量修改--> <update id="updateBatch" parameterType="java.util.List" > <foreach collection="batchList" item="item" index="index" separator=";"> UPDATE th_batch <set> <if test="item.batchName != null and item.batchName != ''" > `batch_name` = #{item.batchName}, </if> <if test="item.uuid != null and item.uuid != ''" > uuid = #{item.uuid}, </if> <if test="item.haveExam != null" > have_exam = #{item.haveExam}, </if> <if test="item.status != null" > status = #{item.status}, </if> <if test="item.batchLessonNum != null" > batch_lesson_num = #{item.batchLessonNum}, </if> <if test="item.delFlag != null" > del_flag = #{item.delFlag}, </if> <if test="item.trainOrgName != null and item.trainOrgName != ''" > train_org_name = #{item.trainOrgName}, </if> <if test="item.institutionId != null" > institution_id = #{item.institutionId}, </if> <if test="item.institutionName != null and item.institutionName != ''" > institution_name = #{item.institutionName}, </if> <if test="item.updateBy != null and item.updateBy != ''" > update_by = #{item.updateBy}, </if> <if test="item.updateTime != null" > update_time = #{item.updateTime} </if> </set> where id = #{item.id} </foreach> </update> <!-- <update id="updateBatch" parameterType="java.util.List" > <foreach collection="batchList" item="item" index="index" separator=";"> UPDATE th_batch <set> <if test="item.batchName != null and item.batchName != ''" > batch_name = #{item.batchName}, </if> <if test="item.haveExam != null" > have_exam = #{item.haveExam}, </if> <if test="item.status != null" > status = #{item.status}, </if> <if test="item.delFlag != null" > del_flag = #{item.delFlag}, </if> <if test="item.trainOrgName != null and item.trainOrgName != ''" > train_org_name = #{item.trainOrgName}, </if> <if test="item.institutionId != null" > institution_id = #{item.institutionId}, </if> <if test="item.institutionName != null and item.institutionName != ''" > institution_name = #{item.institutionName}, </if> <if test="item.updateBy != null and item.updateBy != ''" > update_by = #{item.updateBy}, </if> <if test="item.updateTime != null" > update_time = #{item.updateTime} </if> </set> where id = #{item.id} </foreach> </update> --> <select id="getByUuids" resultType="com.gkhy.exam.institutionalaccess.entity.ThBatch"> select id, uuid, institution_id, institution_name,batch_name,have_exam,status, batch_lesson_num,train_org_name from th_batch where del_flag = 0 and uuid in <foreach collection="batchUuids" item="uuid" index ="index" open="(" close=")" separator=","> #{uuid} </foreach> </select> <select id="getBatchNameByUuids" resultType="com.gkhy.exam.institutionalaccess.entity.ThBatch"> select id, uuid, batch_name from th_batch where del_flag = 0 and uuid in <foreach collection="batchUuids" item="uuid" index ="index" open="(" close=")" separator=","> #{uuid} </foreach> </select> </mapper> exam-system/src/main/resources/mapper/institutionaccess/ThCourseChapterMapper.xml
@@ -14,11 +14,24 @@ cc.have_resource, cc.course_uuid, cc.parent_uuid, cc.serialno, cc.url from th_course_chapter cc where cc.del_flag = 0 and cc.course_uuid in <foreach collection="courseUuids" item="courseUuid" open="(" close=")" separator=","> #{courseUuid} </foreach> order by serialno </select> <select id="getChapterNameByUuids" resultType="com.gkhy.exam.institutionalaccess.entity.ThCourseChapter"> select cc.id, cc.uuid, cc.chapter_name from th_course_chapter cc where cc.del_flag = 0 and cc.uuid in <foreach collection="chapterUuids" item="chapterUuid" open="(" close=")" separator=","> #{chapterUuid} </foreach> </select> @@ -34,9 +47,83 @@ cc.have_resource, cc.course_uuid, cc.parent_uuid, cc.serialno, cc.url from th_course_chapter cc where cc.del_flag = 0 and cc.course_uuid = #{courseUuid} order by serialno </select> <select id="getByUuids" resultType="com.gkhy.exam.institutionalaccess.entity.ThCourseChapter"> select id, uuid, chapter_code,chapter_name,lesson_num,have_resource, duration, institution_id,resource_type,course_uuid ,parent_uuid,serialno, url from th_course_chapter where del_flag = 0 and uuid in <foreach collection="chapterUuids" item="uuid" index ="index" open="(" close=")" separator=","> #{uuid} </foreach> </select> <insert id="insertBatch"> INSERT INTO th_course_chapter (id, uuid, chapter_code,chapter_name,lesson_num,have_resource, duration, institution_id,resource_type,course_uuid ,parent_uuid, url, del_flag,create_time,update_time,create_by,update_by,serialno) VALUES <foreach collection="courseChapterList" separator="," item="item"> (#{item.id},#{item.uuid},#{item.chapterCode},#{item.chapterName},#{item.lessonNum},#{item.haveResource},#{item.duration}, #{item.institutionId},#{item.resourceType},#{item.courseUuid}, #{item.parentUuid},#{item.url},#{item.delFlag},#{item.createTime}, #{item.updateTime},#{item.createBy},#{item.updateBy},#{item.serialno}) </foreach> </insert> <!--批量修改--> <update id="updateBatch" parameterType="java.util.List" > <foreach collection="courseChapterList" item="item" index="index" separator=";"> UPDATE th_course_chapter <set> <if test="item.chapterCode != null and item.chapterCode != ''" > chapter_code = #{item.chapterCode}, </if> <if test="item.chapterName != null and item.chapterName != ''" > chapter_name = #{item.chapterName}, </if> <if test="item.lessonNum != null" > lesson_num = #{item.lessonNum}, </if> <if test="item.haveResource != null" > have_resource = #{item.haveResource}, </if> <if test="item.duration != null" > duration = #{item.duration}, </if> <if test="item.institutionId != null" > institution_id = #{item.institutionId}, </if> <if test="item.resourceType != null" > resource_type = #{item.resourceType}, </if> <if test="item.serialno != null" > serialno = #{item.serialno}, </if> <if test="item.courseUuid != null and item.courseUuid != ''" > course_uuid = #{item.courseUuid}, </if> <if test="item.parentUuid != null and item.parentUuid != ''" > parent_uuid = #{item.parentUuid}, </if> <if test="item.url != null and item.url != ''" > url = #{item.url}, </if> <if test="item.delFlag != null" > del_flag = #{item.delFlag}, </if> <if test="item.updateBy != null and item.updateBy != ''" > update_by = #{item.updateBy}, </if> <if test="item.updateTime != null" > update_time = #{item.updateTime} </if> </set> where id = #{item.id} </foreach> </update> </mapper> exam-system/src/main/resources/mapper/institutionaccess/ThCourseMapper.xml
@@ -2,12 +2,114 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gkhy.exam.institutionalaccess.mapper.ThCourseMapper"> <select id="listByPage" resultType="com.gkhy.exam.institutionalaccess.entity.ThCourse"> <select id="listByPage" resultType="com.gkhy.exam.institutionalaccess.model.resp.ThCourseRespDTO"> select c.* from th_course c where c.del_flag = 0 <if test="query.institutionId != null"> and c.institution_id = #{query.institutionId} </if> order by c.create_time desc </select> <!--批量插入--> <insert id="insertBatch"> INSERT INTO th_course (id, uuid, course_code, institution_id, institution_name,course_name, lesson_num,train_org_name, del_flag,create_time,update_time,create_by,update_by) VALUES <foreach collection="courseList" separator="," item="item"> (#{item.id},#{item.uuid},#{item.courseCode},#{item.institutionId},#{item.institutionName},#{item.courseName}, #{item.lessonNum},#{item.trainOrgName},#{item.delFlag},#{item.createTime}, #{item.updateTime},#{item.createBy},#{item.updateBy}) </foreach> </insert> <!--批量修改--> <update id="updateBatch" parameterType="java.util.List" > <foreach collection="courseList" item="item" index="index" separator=";"> UPDATE th_course <set> <if test="item.courseCode != null and item.courseCode != ''" > course_code = #{item.courseCode}, </if> <if test="item.courseName != null and item.courseName != ''" > course_name = #{item.courseName}, </if> <if test="item.lessonNum != null" > lesson_num = #{item.lessonNum}, </if> <if test="item.delFlag != null" > del_flag = #{item.delFlag}, </if> <if test="item.trainOrgName != null and item.trainOrgName != ''" > train_org_name = #{item.trainOrgName}, </if> <if test="item.institutionId != null" > institution_id = #{item.institutionId}, </if> <if test="item.institutionName != null and item.institutionName != ''" > institution_name = #{item.institutionName}, </if> <if test="item.updateBy != null and item.updateBy != ''" > update_by = #{item.updateBy}, </if> <if test="item.updateTime != null" > update_time = #{item.updateTime} </if> </set> where id = #{item.id} </foreach> </update> <!--<update id="updateBatch" parameterType="java.util.List" > <foreach collection="courseList" item="item" index="index" separator=";"> UPDATE th_course <set> <if test="item.courseCode != null and item.courseCode != ''" > course_code = #{item.courseCode}, </if> <if test="item.courseName != null and item.courseName != ''" > course_name = #{item.courseName}, </if> <if test="item.lessonNum != null" > lesson_num = #{item.lessonNum}, </if> <if test="item.delFlag != null" > del_flag = #{item.delFlag}, </if> <if test="item.trainOrgName != null and item.trainOrgName != ''" > train_org_name = #{item.trainOrgName}, </if> <if test="item.institutionId != null" > institution_id = #{item.institutionId}, </if> <if test="item.institutionName != null and item.institutionName != ''" > institution_name = #{item.institutionName}, </if> <if test="item.updateBy != null and item.updateBy != ''" > update_by = #{item.updateBy}, </if> <if test="item.updateTime != null" > update_time = #{item.updateTime} </if> </set> where id = #{item.id} </foreach> </update>--> <select id="getByUuidList" resultType="com.gkhy.exam.institutionalaccess.entity.ThCourse"> select id, uuid, course_code, institution_id, institution_name,course_name, lesson_num,train_org_name from th_course where del_flag = 0 and uuid in <foreach collection="courseUuids" item="uuid" index ="index" open="(" close=")" separator=","> #{uuid} </foreach> </select> <select id="getCourseNameByUuids" resultType="com.gkhy.exam.institutionalaccess.entity.ThCourse"> select id, uuid,course_name from th_course where del_flag = 0 and uuid in <foreach collection="courseUuids" item="uuid" index ="index" open="(" close=")" separator=","> #{uuid} </foreach> </select> </mapper> exam-system/src/main/resources/mapper/institutionaccess/ThExamRecordMapper.xml
@@ -1,32 +1,50 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gkhy.exam.institutionalaccess.mapper.ThExamRecordMapper"> <select id="listByPage" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThExamRecordVO"> SELECT <select id="listByPage" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThExamRecordVO"> SELECT e.*, s.`name`, c.course_name, b.batch_name FROM FROM th_exam_record e LEFT JOIN th_student s ON s.idcard = e.idcard LEFT JOIN th_course c ON c.uuid = e.course_uuid LEFT JOIN th_batch b ON b.uuid = e.batch_uuid WHERE e.del_flag = 0 <if test="query.idcard != null and query.idcard != ''"> and e.idcard = #{query.idcard} </if> <if test="query.name != null and query.name != ''"> and s.name like concat('%', #{query.name}, '%') </if> <if test="query.startTime != null"><!-- 开始时间检索 --> and date_format(e.exam_start_time,'%y-%m-%d') >= date_format(#{query.startTime},'%y-%m-%d') </if> <if test="query.endTime != null"><!-- 结束时间检索 --> and date_format(e.exam_start_time,'%y-%m-%d') <= date_format(#{query.endTime},'%y-%m-%d') </if> order by e.create_time desc </select> LEFT JOIN th_student s ON s.idcard = e.idcard LEFT JOIN th_batch b ON b.uuid = e.batch_uuid WHERE e.del_flag = 0 <if test="query.idcard != null and query.idcard != ''"> and e.idcard = #{query.idcard} </if> <if test="query.name != null and query.name != ''"> and s.name like concat('%', #{query.name}, '%') </if> <if test="query.startTime != null"><!-- 开始时间检索 --> and date_format(e.exam_start_time,'%y-%m-%d') >= date_format(#{query.startTime},'%y-%m-%d') </if> <if test="query.endTime != null"><!-- 结束时间检索 --> and date_format(e.exam_start_time,'%y-%m-%d') <= date_format(#{query.endTime},'%y-%m-%d') </if> order by e.create_time desc </select> <insert id="insertBatch"> INSERT INTO th_exam_record (id,uuid,idcard,batch_uuid, institution_id, institution_name,train_org_name,exam_name, exam_start_time,exam_submit_time,exam_user_score,exam_total_score,exam_pass_score,exam_is_pass, del_flag,create_time,update_time,create_by,update_by) VALUES <foreach collection="list" separator="," item="item"> (#{item.id},#{item.uuid},#{item.idcard},#{item.batchUuid},#{item.institutionId},#{item.institutionName},#{item.trainOrgName}, #{item.examName},#{item.examStartTime},#{item.examSubmitTime},#{item.examUserScore},#{item.examTotalScore},#{item.examPassScore},#{item.examIsPass},#{item.delFlag},#{item.createTime}, #{item.updateTime},#{item.createBy},#{item.updateBy},#{item.finishStatus}) </foreach> </insert> <select id="getByUuids" resultType="com.gkhy.exam.institutionalaccess.entity.ThExamRecord" > select id,uuid,idcard,batch_uuid, institution_id, institution_name,train_org_name,exam_name, exam_start_time,exam_submit_time,exam_user_score,exam_total_score,exam_pass_score,exam_is_pass from th_exam_record where del_flag = 0 and idcard in <foreach collection="examUuids" item="examUuid" index ="index" open="(" close=")" separator=","> #{examUuid} </foreach> </select> </mapper> exam-system/src/main/resources/mapper/institutionaccess/ThStudentBatchMapper.xml
对比新文件 @@ -0,0 +1,151 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gkhy.exam.institutionalaccess.mapper.ThStudentBatchMapper"> <insert id="insertBatch"> INSERT INTO th_student_batch (uuid,idcard, name, sex, phone, auth_photo,train_org_name, institution_id, institution_name, industry,occupation,post,del_flag,create_time,update_time,create_by,update_by,finish_status,batch_uuid) VALUES <foreach collection="list" separator="," item="item"> (#{item.uuid},#{item.idcard},#{item.name},#{item.sex},#{item.phone},#{item.authPhoto},#{item.trainOrgName},#{item.institutionId},#{item.institutionName}, #{item.industry},#{item.occupation},#{item.post},#{item.delFlag},#{item.createTime}, #{item.updateTime},#{item.createBy},#{item.updateBy},#{item.finishStatus},#{item.batchUuid}) </foreach> </insert> <update id="updateBatch" parameterType="java.util.List" > <foreach collection="list" item="item" index="index" separator=";"> UPDATE th_student_batch <set> <if test="item.uuid != null and item.uuid != ''" > uuid = #{item.uuid}, </if> <if test="item.name != null and item.name != ''" > name = #{item.name}, </if> <if test="item.idcard != null and item.idcard != ''" > idcard = #{item.idcard}, </if> <if test="item.sex != null" > sex = #{item.sex}, </if> <if test="item.phone != null and item.phone != ''" > phone = #{item.phone}, </if> <if test="item.authPhoto != null and item.authPhoto != ''" > auth_photo = #{item.authPhoto}, </if> <if test="item.trainOrgName != null and item.trainOrgName != ''" > train_org_name = #{item.trainOrgName}, </if> <if test="item.institutionId != null" > institution_id = #{item.institutionId}, </if> <if test="item.institutionName != null and item.institutionName != ''" > institution_name = #{item.institutionName}, </if> <if test="item.industry != null and item.industry != ''" > industry = #{item.industry}, </if> <if test="item.occupation != null and item.occupation != ''" > occupation = #{item.occupation}, </if> <if test="item.post != null and item.post != ''" > post = #{item.post}, </if> <if test="item.batchUuid != null and item.batchUuid != ''" > batch_uuid = #{item.batchUuid}, </if> <if test="item.delFlag != null" > del_flag = #{item.delFlag}, </if> <if test="item.finishStatus != null" > finish_status = #{item.finishStatus}, </if> <if test="item.updateBy != null and item.updateBy != ''" > update_by = #{item.updateBy}, </if> <if test="item.updateTime != null" > update_time = #{item.updateTime} </if> </set> where id = #{item.id} </foreach> </update> <select id="statisticByCourseUuid" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThStatisticStudentVO"> SELECT c.course_uuid, count(s.idcard) as count FROM th_student_batch s INNER JOIN th_batch_course c ON s.batch_uuid = c.batch_uuid WHERE s.del_flag = 0 AND c.del_flag = 0 GROUP BY c.course_uuid </select> <select id="statisticByBatchUuid" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThStatisticStudentVO"> SELECT s.batch_uuid, count( s.idcard ) AS count FROM th_student_batch s WHERE s.del_flag = 0 GROUP BY s.batch_uuid </select> <select id="getStudentBatchCourseVOByBatchUuid" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThStudentBatchCourseVO"> SELECT sb.idcard, sb.batch_uuid, sb.`name`, bc.course_uuid FROM th_student_batch sb INNER JOIN th_batch_course bc ON bc.batch_uuid = sb.batch_uuid WHERE sb.del_flag = 0 AND bc.del_flag = 0 AND sb.batch_uuid = #{batchUuid} </select> <update id="updateByBatchUuid"> update th_student_batch set finish_status = 1 where batch_uuid = #{batchUuid} </update> <update id="updateFinishStatusByBatchUuid"> update th_student_batch set finish_status = 1 where batch_uuid = #{batchUuid} </update> <select id="getStudentBatchVOByBatchUuid" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThStudentBatchVO"> select sb.*, b.batch_lesson_num from th_student_batch sb INNER JOIN th_batch b ON sb.batch_uuid = b.uuid where sb.del_flag = 0 and sb.batch_uuid = #{batchUuid} </select> <select id="getByIdCards" resultType="com.gkhy.exam.institutionalaccess.entity.ThStudentBatch" > select idcard, name, sex, phone, auth_photo,train_org_name, institution_id, institution_name, industry,occupation,post,finish_status,batch_uuid from th_student_batch where del_flag = 0 and idcard in <foreach collection="idcards" item="idcard" index ="index" open="(" close=")" separator=","> #{idcard} </foreach> </select> <select id="getStudentBatchVOByCourseUuid" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThStudentBatchVO"> SELECT sb.*, b.batch_lesson_num, bc.course_lesson_num FROM th_student_batch sb INNER JOIN th_batch b ON sb.batch_uuid = b.uuid INNER JOIN th_batch_course bc ON bc.batch_uuid = b.uuid WHERE sb.del_flag = 0 AND bc.course_uuid = #{courseUuid} </select> </mapper> exam-system/src/main/resources/mapper/institutionaccess/ThStudentCourseMapper.xml
文件已删除 exam-system/src/main/resources/mapper/institutionaccess/ThStudentMapper.xml
@@ -2,7 +2,19 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gkhy.exam.institutionalaccess.mapper.ThStudentMapper"> <update id="updateByIdcard" parameterType="java.util.List" > <insert id="insertBatch"> INSERT INTO th_student (idcard, name, sex, phone, auth_photo,train_org_name, institution_id, institution_name, industry,occupation,post,del_flag,create_time,update_time,create_by,update_by) VALUES <foreach collection="list" separator="," item="item"> (#{item.idcard},#{item.name},#{item.sex},#{item.phone},#{item.authPhoto},#{item.trainOrgName},#{item.institutionId},#{item.institutionName}, #{item.industry},#{item.occupation},#{item.post},#{item.delFlag},#{item.createTime}, #{item.updateTime},#{item.createBy},#{item.updateBy}) </foreach> </insert> <update id="updateBatch" parameterType="java.util.List" > <foreach collection="list" item="item" index="index" separator=";"> UPDATE th_student <set> @@ -28,7 +40,7 @@ institution_id = #{item.institutionId}, </if> <if test="item.institutionName != null and item.institutionName != ''" > institution_name = #{item.phone}, institution_name = #{item.institutionName}, </if> <if test="item.industry != null and item.industry != ''" > industry = #{item.industry}, @@ -36,6 +48,10 @@ <if test="item.occupation != null and item.occupation != ''" > occupation = #{item.occupation}, </if> <if test="item.post != null and item.post != ''" > post = #{item.post}, </if> <if test="item.updateBy != null and item.updateBy != ''" > update_by = #{item.updateBy}, </if> @@ -43,10 +59,23 @@ update_time = #{item.updateTime} </if> </set> where idcard = #{item.idcard} where id = #{item.id} </foreach> </update> <select id="getByIdCards" resultType="com.gkhy.exam.institutionalaccess.entity.ThStudent" > select idcard, name, sex, phone, auth_photo,train_org_name, institution_id, institution_name, industry,occupation,post from th_student where del_flag = 0 and idcard in <foreach collection="idcards" item="idcard" index ="index" open="(" close=")" separator=","> #{idcard} </foreach> </select> <select id="getNameByIdcards" resultType="com.gkhy.exam.institutionalaccess.entity.ThStudent" > select idcard, name from th_student where del_flag = 0 and idcard in <foreach collection="idcards" item="idcard" index ="index" open="(" close=")" separator=","> #{idcard} </foreach> </select> </mapper> exam-system/src/main/resources/mapper/institutionaccess/ThStudyAuthMapper.xml
@@ -4,6 +4,19 @@ <select id="getUuidByStudyDetaiId" resultType="java.lang.String"> select uuid from th_study_auth where study_detail_uuid = #{studyDetaiId} </select> <insert id="insertBatch"> INSERT INTO th_study_auth (id,uuid,approve_photo, auth_position,auth_time, face_type,study_detail_uuid, auth_video) VALUES <foreach collection="list" separator="," item="item"> (#{item.id},#{item.uuid},#{item.approvePhoto},#{item.authPosition},#{item.authTime},#{item.faceType},#{item.studyDetailUuid},#{item.authVideo}) </foreach> </insert> <select id="getByStudyDetaiUuids" resultType="com.gkhy.exam.institutionalaccess.entity.ThStudyAuth" > select id,uuid,approve_photo, auth_position,auth_time, face_type,study_detail_uuid, auth_video from th_study_auth where 1=1 and study_detail_uuid in <foreach collection="studyUuids" item="studyUuid" index ="index" open="(" close=")" separator=","> #{studyUuid} </foreach> </select> </mapper> exam-system/src/main/resources/mapper/institutionaccess/ThStudyDetailMapper.xml
@@ -3,17 +3,26 @@ <mapper namespace="com.gkhy.exam.institutionalaccess.mapper.ThStudyDetailMapper"> <select id="listByPage" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThStudyDetailVO"> SELECT d.*, s.name, b.batch_name, c.course_name, cc.chapter_name d.id, d.uuid, d.serial_num, d.idcard, d.institution_name, d.course_uuid, d.train_org_name, d.batch_uuid, d.chapter_uuid, d.finish_status, d.duration, d.start_time, d.finish_time, d.start_position, d.finish_position, d.video_url, d.lesson_report_url, d.create_time FROM th_study_detail d LEFT JOIN th_student s ON s.idcard = d.idcard LEFT JOIN th_batch b ON b.uuid = d.batch_uuid LEFT JOIN th_course c ON c.uuid = d.course_uuid LEFT JOIN th_course_chapter cc ON cc.uuid = d.chapter_uuid where d.del_flag = 0 <if test="query.idcard != null and query.idcard != ''"> and d.idcard = #{query.idcard} @@ -21,21 +30,21 @@ <if test="query.courseUuid != null and query.courseUuid != ''"> and d.course_uuid = #{query.courseUuid} </if> <if test="query.name != null and query.name != ''"> and s.name like concat('%', #{query.name}, '%') </if> <if test="query.startTime != null"><!-- 开始时间检索 --> and date_format(d.create_time,'%y-%m-%d') >= date_format(#{query.startTime},'%y-%m-%d') </if> <if test="query.endTime != null"><!-- 结束时间检索 --> and date_format(d.create_time,'%y-%m-%d') <= date_format(#{query.endTime},'%y-%m-%d') </if> order by d.create_time desc ORDER BY d.id DESC </select> <select id="statisticDurationByIdcard" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThStudyVO"> SELECT d.idcard, d.course_uuid, sum( d.duration ) duration FROM th_study_detail d @@ -43,7 +52,8 @@ d.del_flag = 0 AND d.batch_uuid = #{batchUuid} GROUP BY d.idcard d.idcard, d.course_uuid </select> <select id="listByBatchUuid" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThStudyDetailVO"> SELECT @@ -58,5 +68,104 @@ AND d.batch_uuid = #{batchUuid} </select> <insert id="insertBatch"> INSERT INTO th_study_detail (id,uuid,serial_num, idcard,institution_id, institution_name,course_uuid, train_org_name,batch_uuid,chapter_uuid, finish_status,duration,start_time,finish_time,start_position,finish_position,video_url,lesson_report_url,del_flag,create_time,update_time,create_by,update_by) VALUES <foreach collection="list" separator="," item="item"> (#{item.id},#{item.uuid},#{item.serialNum},#{item.idcard},#{item.institutionId},#{item.institutionName},#{item.courseUuid},#{item.trainOrgName},#{item.batchUuid},#{item.chapterUuid}, #{item.finishStatus},#{item.duration},#{item.startTime}, #{item.finishTime},#{item.startPosition},#{item.finishPosition},#{item.videoUrl},#{item.lessonReportUrl},#{item.delFlag},#{item.createTime}, #{item.updateTime},#{item.createBy},#{item.updateBy}) </foreach> </insert> <update id="updateBatch" parameterType="java.util.List" > <foreach collection="list" item="item" index="index" separator=";"> UPDATE th_study_detail <set> <if test="item.uuid != null and item.uuid != ''" > uuid = #{item.uuid}, </if> <if test="item.serialNum != null" > serial_num = #{item.serialNum}, </if> <if test="item.idcard != null and item.idcard != ''" > idcard = #{item.idcard}, </if> <if test="item.institutionId != null" > institution_id = #{item.institutionId}, </if> <if test="item.institutionName != null and item.institutionName != ''" > institution_name = #{item.institutionName}, </if> <if test="item.courseUuid != null and item.courseUuid != ''" > course_uuid = #{item.courseUuid}, </if> <if test="item.trainOrgName != null and item.trainOrgName != ''" > train_org_name = #{item.trainOrgName}, </if> <if test="item.batchUuid != null and item.batchUuid != ''" > batch_uuid = #{item.batchUuid}, </if> <if test="item.chapterUuid != null and item.chapterUuid != ''" > chapter_uuid = #{item.chapterUuid}, </if> <if test="item.finishStatus != null" > finish_status = #{item.finishStatus}, </if> <if test="item.duration != null" > duration = #{item.duration}, </if> <if test="item.startTime != null" > start_time = #{item.startTime}, </if> <if test="item.finishTime != null" > finish_time = #{item.finishTime}, </if> <if test="item.startPosition != null" > start_position = #{item.startPosition}, </if> <if test="item.finishPosition != null" > finish_position = #{item.finishPosition}, </if> <if test="item.videoUrl != null and item.videoUrl != ''" > video_url = #{item.videoUrl}, </if> <if test="item.lessonReportUrl != null and item.lessonReportUrl != ''" > lesson_report_url = #{item.lessonReportUrl}, </if> <if test="item.delFlag != null" > del_flag = #{item.delFlag}, </if> <if test="item.updateBy != null and item.updateBy != ''" > update_by = #{item.updateBy}, </if> <if test="item.updateTime != null" > update_time = #{item.updateTime} </if> </set> where id = #{item.id} </foreach> </update> <select id="getByUuids" resultType="com.gkhy.exam.institutionalaccess.entity.ThStudyDetail" > select id,uuid,serial_num, idcard,institution_id, institution_name,course_uuid, train_org_name,batch_uuid,chapter_uuid, finish_status,duration,start_time,finish_time,start_position,finish_position,video_url,lesson_report_url from th_study_detail where del_flag = 0 and uuid in <foreach collection="studyUuids" item="studyUuid" index ="index" open="(" close=")" separator=","> #{studyUuid} </foreach> </select> <select id="listByCourseUuid" resultType="com.gkhy.exam.institutionalaccess.model.vo.ThStudyDetailVO"> SELECT d.*, cc.chapter_name, cc.lesson_num FROM th_study_detail d INNER JOIN th_batch_course bc on bc.batch_uuid = d.batch_uuid LEFT JOIN th_course_chapter cc ON cc.uuid = d.chapter_uuid WHERE d.del_flag = 0 AND bc.course_uuid = #{courseUuid} </select> </mapper> exam-system/src/main/resources/mapper/institutionaccess/ThStudyTrackMapper.xml
@@ -1,9 +1,21 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gkhy.exam.institutionalaccess.mapper.ThStudyTrackMapper"> <select id="getUuidByStudyDetaiId" resultType="java.lang.String"> select uuid from th_study_track where study_detail_uuid = #{studyDetaiId} </select> <select id="getUuidByStudyDetaiId" resultType="java.lang.String"> select uuid from th_study_track where study_detail_uuid = #{studyDetaiId} </select> <insert id="insertBatch"> INSERT INTO th_study_track (id,uuid,start_time, end_time,time_interval, study_detail_uuid) VALUES <foreach collection="list" separator="," item="item"> (#{item.id},#{item.uuid},#{item.startTime},#{item.endTime},#{item.timeInterval},#{item.studyDetailUuid}) </foreach> </insert> <select id="getByStudyDetaiUuids" resultType="com.gkhy.exam.institutionalaccess.entity.ThStudyTrack" > select id,uuid,start_time, end_time,time_interval, study_detail_uuid from th_study_track where 1=1 and study_detail_uuid in <foreach collection="studyUuids" item="studyUuid" index ="index" open="(" close=")" separator=","> #{studyUuid} </foreach> </select> </mapper> ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ThreeAccessController.java
@@ -25,12 +25,24 @@ public static void main(String[] args) { AccessReqDTO accessReqDTO = new AccessReqDTO(); accessReqDTO.setAccessKey("Opq98lRKQ0NbBR59Ddi0"); accessReqDTO.setSecretKey("AKKYCSZCYGCxCmxR7bsO"); /* accessReqDTO.setAccessKey("Opq98lRKQ0NbBR59Ddi0"); accessReqDTO.setSecretKey("AKKYCSZCYGCxCmxR7bsO");*/ accessReqDTO.setAccessKey("lJyzhvt87v3o7M0Ic6cT"); accessReqDTO.setSecretKey("93ED9pfi8fuk8ZVmxSNQ"); String jsonString = JSONObject.toJSONString(accessReqDTO); String encrypt = AESUtils.encrypt(jsonString); System.out.println(encrypt); String decrypt = AESUtils.decrypt("ASg/NElcGyKiKSUu334t5DXcYjgpxb11mFr5YSf6sHICkQCrZ++NSQ55ZoMw1p+hKgFiuNEPXsDLp2lOtR52zDGaFLFKSQIqEgSJ7IL6YBCExaF3fQSqIFZFX62KygHb"); String decrypt = AESUtils.decrypt("BhSazFtvofCRelDGgefpPJ5ObweXFr5qU7vhnjZvhGwK1LuCX1ErNvERLfOx1WKbIIYqHe8ZmpwnfTf6k6eaRZtIJ2HJJMspNDWQUdxPKAqETJRfIm/H+u7awqB6IE//e7YEwlIvp/DWqhsmQH5b/g=="); System.out.println(decrypt); } /*public static void main(String[] args) { String jsonString = "{\"uuid\":\"1edb2886-fc5e-6519-8210-1b89dd2c32b8\",\"batchName\":\"自动推荐二\",\"haveExam\":1,\"status\":2,\"trainOrgName\":\"吉林省安金环境安全技术有限公司\",\"courseList\":[{\"courseUuid\":\"f3386e2c-4c44-11ec-ac7c-00ff07067ec4\",\"courseLessonNum\":50.80,\"delFlag\":0}],\"chapterList\":[{\"chapterUuid\":\"7b251404-4c51-11ec-ac7c-00ff07067ec4\",\"chapterLessonNum\":2.05,\"delFlag\":0,\"children\":[{\"chapterUuid\":\"7b255c0a-4c51-11ec-ac7c-00ff07067ec4\",\"chapterLessonNum\":0.74,\"delFlag\":0,\"children\":null},{\"chapterUuid\":\"7b2570f5-4c51-11ec-ac7c-00ff07067ec4\",\"chapterLessonNum\":0.50,\"delFlag\":0,\"children\":null},{\"chapterUuid\":\"0bb6506a-ac46-11ed-b08c-00ff07067ec4\",\"chapterLessonNum\":0.81,\"delFlag\":0,\"children\":null}]}],\"batchLessonNum\":2.05,\"delFlag\":0}"; String encrypt = AESUtils.encrypt(jsonString); System.out.println(encrypt); String decrypt = AESUtils.decrypt("BhSazFtvofCRelDGgefpPEG4F49MgY8G3hs3mGPsaE8LO964ZGizG/MUov8g8W1rm+CBYy3WdWaWDOrglO6vitPeC+q4gCeIUHFSfEmic1pshDf6TcvHd0DTa5mMvmPKK8RH9e0EGUo/PggbziF3NQ=="); System.out.println(decrypt); }*/ } ruoyi-admin/src/main/resources/application-dev.yml
@@ -24,7 +24,7 @@ druid: # 主库数据源 master: url: jdbc:mysql://localhost:3306/swspkmas?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://localhost:3306/swspkmas?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true username: root password: root # 从库数据源 @@ -115,3 +115,11 @@ #用户模块 accountPath: /account/ #线程池配置 threadPool: corePoolSize: 20 maxPoolSize: 20 queueCapacity: 10000 scheduling: #控制线程是否执行 true:执行;false:不执行 enabled: true ruoyi-admin/src/main/resources/application-pro.yml
@@ -24,7 +24,7 @@ druid: # 主库数据源 master: url: jdbc:mysql://127.0.0.1:7006/swspkmas?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://127.0.0.1:7006/swspkmas?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true username: root password: 2farwL3yPXfbH2AP # 从库数据源 @@ -115,3 +115,11 @@ #用户模块 accountPath: /account/ #线程池配置 threadPool: corePoolSize: 20 maxPoolSize: 20 queueCapacity: 10000 scheduling: #控制线程是否执行 true:执行;false:不执行 enabled: true ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatedClick.java
对比新文件 @@ -0,0 +1,16 @@ package com.ruoyi.common.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface RepeatedClick { //2秒内都属于重复提交 int clickTime() default 1; String errorMessage() default "访问过于频繁,请稍候再试"; } ruoyi-common/src/main/java/com/ruoyi/common/constant/ResultConstants.java
@@ -62,7 +62,8 @@ BATCH_IS_NOT_EXIST(1012,"批次(班级)不存在"), BATCH_IS_NOT_OPEN(1013,"批次(班级)未开班,不可结束培训"), BATCH_STUDENT_IS_NOT_EXIST(1014,"该学生培训信息不存在"), BATCH_IS_OPEN_NO_DELETE(1015,"批次(班级)已开班或已结束,不可删除"), THREE_INSTITUTION_OTHER_ERROR(1016,"业务错误"), ; ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RepeatedClickAspect.java
对比新文件 @@ -0,0 +1,64 @@ package com.ruoyi.framework.aspectj; import com.ruoyi.common.annotation.RepeatedClick; import com.ruoyi.common.constant.ResultConstants; import com.ruoyi.common.core.domain.model.InstitutionUser; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.exception.BusinessException; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.framework.security.context.ThreeInContextHolder; import com.ruoyi.framework.web.service.TokenService; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.concurrent.TimeUnit; @Component @Aspect public class RepeatedClickAspect { @Autowired private RedisCache redisCache; @Before("@annotation(com.ruoyi.common.annotation.RepeatedClick)") @ResponseBody public void beforeRepeatedClick(JoinPoint joinPoint){ ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest arg = requestAttributes.getRequest(); MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); RepeatedClick annotation = methodSignature.getMethod().getAnnotation(RepeatedClick.class); if (annotation != null){ int clickTime = annotation.clickTime(); String errorMessage = annotation.errorMessage(); ThreeInContextHolder threeInContextHolder = new ThreeInContextHolder(); InstitutionUser institutionUser = threeInContextHolder.getContext(); if (institutionUser != null && institutionUser.getId() != null) { try { Long uid = institutionUser.getId(); String key = "institution_user_id:"+uid+"_"+ arg.getRequestURI() + "_" + arg.getMethod(); if (redisCache.hasKey(key)){ throw new ServiceException(errorMessage+" 频繁访问接口: "+ arg.getRequestURI()); }else { redisCache.setCacheObject(key, institutionUser, clickTime, TimeUnit.SECONDS); } } catch (NumberFormatException e) { throw new BusinessException(this.getClass(),ResultConstants.PARAM_ERROR.getCode(),"数据参数异常"); } } } } }