diff --git a/src/main/java/com/peanut/modules/common/controller/ClassController.java b/src/main/java/com/peanut/modules/common/controller/ClassController.java index a9675002..4a5a1036 100644 --- a/src/main/java/com/peanut/modules/common/controller/ClassController.java +++ b/src/main/java/com/peanut/modules/common/controller/ClassController.java @@ -122,12 +122,24 @@ public class ClassController { return R.ok().put("result",classEntityService.getClassInfo(params)); } + //查询未加入小班 + @RequestMapping("/getClassNoUser") + public R getClassNoUser(){ + return R.ok().put("result",classEntityService.getClassNoUser()); + } + //查询包含课程的小班(登陆人未加入) @RequestMapping("/getClassByCourseIdNoUser") public R getClassByCourseIdNoUser(@RequestBody Map params){ return R.ok().put("result",classEntityService.getClassByCourseIdNoUser(params)); } + //查询登陆人已加入小班 + @RequestMapping("/getClassByUser") + public R getClassByUser(@RequestBody Map params){ + return R.ok().put("result",classEntityService.getClassByUser(params)); + } + //加入小班 @RequestMapping("/joinClass") public R joinClass(@RequestBody Map params){ diff --git a/src/main/java/com/peanut/modules/common/controller/ClassExamController.java b/src/main/java/com/peanut/modules/common/controller/ClassExamController.java index 72c05e55..8be2b117 100644 --- a/src/main/java/com/peanut/modules/common/controller/ClassExamController.java +++ b/src/main/java/com/peanut/modules/common/controller/ClassExamController.java @@ -4,15 +4,21 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.peanut.common.utils.R; import com.peanut.modules.common.entity.ClassExamOption; import com.peanut.modules.common.entity.ClassExamSubject; +import com.peanut.modules.common.service.ClassExamOptionService; import com.peanut.modules.common.service.ClassExamService; +import com.peanut.modules.common.service.ClassExamSubjectService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.usermodel.*; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import java.util.Map; +import java.io.InputStream; +import java.util.*; @Slf4j @RestController("commonClassExam") @@ -21,10 +27,98 @@ public class ClassExamController { @Autowired private ClassExamService classExamService; + @Autowired + private ClassExamSubjectService classExamSubjectService; + @Autowired + private ClassExamOptionService classExamOptionService; //导入考试题 @RequestMapping("/importSubject") + @Transactional public R importSubject(@RequestParam("file") MultipartFile file, @RequestParam("courseId") int courseId) { + try (InputStream fis = file.getInputStream()) { + Workbook workbook = WorkbookFactory.create(fis); + Sheet sheet = workbook.getSheetAt(0); + Date date = new Date(); + List subjectList = new ArrayList<>(); + List optionList = new ArrayList<>(); + // 遍历行 + for (Row row : sheet) { + if (!isRowEmpty(row)){ + if (row.getRowNum()==0){ + continue; + } + ClassExamSubject subject = new ClassExamSubject(); + subject.setCourseId(courseId); + //类型 + String type = row.getCell(0)==null?"":row.getCell(0).toString(); + if (type.contains("单选")){ + subject.setType(0); + }else if (type.contains("多选")){ + subject.setType(1); + }else { + System.out.println(row.getRowNum()+"此题无题目类型"); + } + //题目 + subject.setContent(row.getCell(1)==null?"":row.getCell(1).toString()); + //所属章节 + subject.setChapter(row.getCell(13)==null?"":row.getCell(13).toString()); + //音视频序号 + subject.setMedia(row.getCell(14)==null?"":row.getCell(14).toString()); + //音视频时间 + subject.setMediaTime(row.getCell(15)==null?"":row.getCell(15).toString()); + //出题人 + subject.setCreateUser(row.getCell(16)==null?"":row.getCell(16).toString()); + classExamSubjectService.save(subject); + //选项1-6 + for (int i=2; i<=7;i++) { + if (row.getCell(i)!=null&&!"".equals(row.getCell(i).toString())){ + ClassExamOption option = new ClassExamOption(); + option.setSubjectId(subject.getId()); + String content = row.getCell(i).toString(); + String raw = row.getCell(8)==null?"":row.getCell(8).toString(); + if (raw.contains(content.substring(0,1))){ + option.setRightWrong(1); + }else { + option.setRightWrong(0); + } + char[] c = content.toCharArray(); + if (c.length>1){ + if (c[1]=='、'||c[1]==':'||c[1]==';'||c[1]==':'||c[1]==';'||c[1]==' '||c[1]=='.'){ + content = content.substring(2); + }else { + content = content.substring(1); + } + }else { + content = ""; + } + if (StringUtils.isNotBlank(content)){ + option.setContent(content); + optionList.add(option); + } + } + } + } + } + classExamOptionService.saveBatch(optionList); + System.out.println("结束"+(new Date().getTime()-date.getTime())); + } catch (Exception e) { + e.printStackTrace(); + } + return R.ok(); + } + private static boolean isRowEmpty(Row row) { + for (Cell cell : row) { + if (cell.getCellTypeEnum() != CellType.BLANK) { + return false; + } + } + return true; + } + + //导入考试题 + @RequestMapping("/importSubject1") + public R importSubject1(@RequestParam("file") MultipartFile file, @RequestParam("courseId") int courseId) { String res = classExamService.importSubject(file,courseId); if (res==null){ return R.ok(); diff --git a/src/main/java/com/peanut/modules/common/entity/ClassTaskAndQuesReply.java b/src/main/java/com/peanut/modules/common/entity/ClassTaskAndQuesReply.java index 6e063821..9a4f5b53 100644 --- a/src/main/java/com/peanut/modules/common/entity/ClassTaskAndQuesReply.java +++ b/src/main/java/com/peanut/modules/common/entity/ClassTaskAndQuesReply.java @@ -15,6 +15,8 @@ public class ClassTaskAndQuesReply { @TableId private Integer id; + private Integer classId; + private Integer relationId; private String type;//类型0任务1课后题 diff --git a/src/main/java/com/peanut/modules/common/service/ClassEntityService.java b/src/main/java/com/peanut/modules/common/service/ClassEntityService.java index e983c46b..45f03739 100644 --- a/src/main/java/com/peanut/modules/common/service/ClassEntityService.java +++ b/src/main/java/com/peanut/modules/common/service/ClassEntityService.java @@ -37,8 +37,12 @@ public interface ClassEntityService extends IService { Object getClassInfo(Map params); + List getClassNoUser(); + List getClassByCourseIdNoUser(Map params); + ClassEntity getClassByUser(Map params); + R joinClass(Map params); void quitClass(Map params); diff --git a/src/main/java/com/peanut/modules/common/service/ClassExamOptionService.java b/src/main/java/com/peanut/modules/common/service/ClassExamOptionService.java new file mode 100644 index 00000000..b7db023e --- /dev/null +++ b/src/main/java/com/peanut/modules/common/service/ClassExamOptionService.java @@ -0,0 +1,7 @@ +package com.peanut.modules.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.peanut.modules.common.entity.ClassExamOption; + +public interface ClassExamOptionService extends IService { +} diff --git a/src/main/java/com/peanut/modules/common/service/ClassExamSubjectService.java b/src/main/java/com/peanut/modules/common/service/ClassExamSubjectService.java new file mode 100644 index 00000000..c2731c11 --- /dev/null +++ b/src/main/java/com/peanut/modules/common/service/ClassExamSubjectService.java @@ -0,0 +1,7 @@ +package com.peanut.modules.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.peanut.modules.common.entity.ClassExamSubject; + +public interface ClassExamSubjectService extends IService { +} diff --git a/src/main/java/com/peanut/modules/common/service/impl/ClassEntityServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/ClassEntityServiceImpl.java index 46fd7d84..b2a78a3f 100644 --- a/src/main/java/com/peanut/modules/common/service/impl/ClassEntityServiceImpl.java +++ b/src/main/java/com/peanut/modules/common/service/impl/ClassEntityServiceImpl.java @@ -495,6 +495,17 @@ public class ClassEntityServiceImpl extends ServiceImpl getClassNoUser() { + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.selectAll(ClassEntity.class); + String classSql = "select 1 from ( select c.id from class c left join class_course cc on cc.model_id = c.model_id left join class_user cu on cu.class_id = c.id where c.del_flag = 0 and cc.del_flag = 0 and cu.del_flag = 0 and cu.user_id = "+ShiroUtils.getUId()+" ) s where s.id = t.id"; + String courseSql = "select 1 from (select cc.model_id from class_course cc where cc.del_flag = 0 and cc.course_id in (select cc.course_id from class_course cc left join class_model cm on cm.id = cc.model_id left join class c on c.model_id = cm.id left join class_user cu on cu.class_id = c.id where cc.del_flag = 0 and cm.del_flag = 0 and c.del_flag = 0 and cu.del_flag = 0 and cu.user_id = "+ShiroUtils.getUId()+")) q where q.model_id = t.model_id"; + wrapper.notExists(classSql); + wrapper.notExists(courseSql); + return this.baseMapper.selectList(wrapper); + } + @Override public List getClassByCourseIdNoUser(Map params) { MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); @@ -504,7 +515,7 @@ public class ClassEntityServiceImpl extends ServiceImpl classesUser = this.baseMapper.selectList(wrapper); if (classesUser.size() > 0){ return new ArrayList<>(); @@ -513,18 +524,26 @@ public class ClassEntityServiceImpl extends ServiceImpl params) { + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.selectAll(ClassEntity.class); + wrapper.leftJoin(ClassModel.class,ClassModel::getId,ClassEntity::getModelId); + wrapper.leftJoin(ClassCourse.class,ClassCourse::getModelId,ClassModel::getId); + wrapper.leftJoin(ClassUser.class,ClassUser::getClassId,ClassEntity::getId); + wrapper.eq(ClassCourse::getCourseId,params.get("courseId")); + wrapper.eq(ClassUser::getUserId,ShiroUtils.getUId()); + wrapper.ne(ClassEntity::getState,"2"); + return this.baseMapper.selectOne(wrapper); + } + public List getClassByCourseId(Map params) { MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); wrapper.selectAll(ClassEntity.class); wrapper.leftJoin(ClassModel.class,ClassModel::getId,ClassEntity::getModelId); wrapper.leftJoin(ClassCourse.class,ClassCourse::getModelId,ClassModel::getId); wrapper.eq(ClassCourse::getCourseId,params.get("courseId")); - if (StringUtils.isNotEmpty(params.get("state").toString())){ - wrapper.eq(ClassEntity::getState,params.get("state")); - } - if (StringUtils.isNotEmpty(params.get("type").toString())){ - wrapper.eq(ClassModel::getType,params.get("type")); - } + wrapper.ne(ClassEntity::getState,"2"); List classes = this.baseMapper.selectList(wrapper); if (classes.size() > 0){ for (ClassEntity classEntity:classes){ @@ -655,7 +674,7 @@ public class ClassEntityServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ClassTask::getClassId,params.get("classId")); if (StringUtils.isNotEmpty(params.get("type").toString())){ + if ("2".equals(params.get("type").toString())){ + wrapper.orderByAsc(ClassTask::getScoreSuccess); + } wrapper.eq(ClassTask::getType,params.get("type")); } if (StringUtils.isNotEmpty(params.get("title").toString())){ wrapper.like(ClassTask::getTitle,params.get("title")); } - wrapper.orderByAsc(ClassTask::getScoreSuccess); wrapper.orderByAsc(ClassTask::getSort); + wrapper.orderByDesc(ClassTask::getId); Page classTaskPage = classTaskDao.selectPage(new Page<>(page, limit), wrapper); for (ClassTask classTask:classTaskPage.getRecords()){ int alreadyReply = classTaskAndQuesReplyDao.selectCount(new LambdaQueryWrapper() .eq(ClassTaskAndQuesReply::getRelationId,classTask.getId())); int noScore = classTaskAndQuesReplyDao.selectCount(new LambdaQueryWrapper() .eq(ClassTaskAndQuesReply::getRelationId,classTask.getId()) - .eq(ClassTaskAndQuesReply::getScoreSuccess,0)); + .lt(ClassTaskAndQuesReply::getScoreSuccess,2)); Map result = new HashMap<>(); result.put("setGiveHomeWorkNumber",alreadyReply); result.put("setNoGiveScoreNumber",noScore); @@ -882,6 +904,7 @@ public class ClassEntityServiceImpl extends ServiceImpl replyWrap = new MPJLambdaWrapper<>(); replyWrap.leftJoin(CourseCatalogueChapterEntity.class,CourseCatalogueChapterEntity::getId,ClassTaskAndQuesReply::getRelationId); replyWrap.leftJoin(ClassCourse.class,ClassCourse::getCourseId,CourseCatalogueChapterEntity::getCourseId); + replyWrap.leftJoin(CourseEntity.class,CourseEntity::getId,ClassCourse::getCourseId); replyWrap.leftJoin(ClassEntity.class,ClassEntity::getModelId,ClassCourse::getModelId); replyWrap.eq(ClassEntity::getId,params.get("classId")); replyWrap.eq(ClassTaskAndQuesReply::getType,"1"); @@ -892,6 +915,8 @@ public class ClassEntityServiceImpl extends ServiceImpl> replyPage = classTaskAndQuesReplyDao.selectMapsPage(new Page<>(page, limit), replyWrap); @@ -911,7 +936,7 @@ public class ClassEntityServiceImpl extends ServiceImpl task0Replys = classTaskAndQuesReplyDao.selectList(task0wrapper); if (task0Replys.size() > 0) { for (ClassTaskAndQuesReply reply : task0Replys) { - if (reply.getScoreSuccess()>=1){ + if (reply.getScoreSuccess()>1){ task0Score += reply.getScore(); } } @@ -926,7 +951,7 @@ public class ClassEntityServiceImpl extends ServiceImpl task1Replys = classTaskAndQuesReplyDao.selectList(task1wrapper); if (task1Replys.size() > 0) { for (ClassTaskAndQuesReply reply : task1Replys) { - if (reply.getScoreSuccess()>=1){ + if (reply.getScoreSuccess()>1){ task1Score += reply.getScore(); } } @@ -953,6 +978,7 @@ public class ClassEntityServiceImpl extends ServiceImpl questionReplys = classTaskAndQuesReplyDao.selectList(questionWrapper); if (questionReplys.size() > 0) { for (ClassTaskAndQuesReply reply : questionReplys) { diff --git a/src/main/java/com/peanut/modules/common/service/impl/ClassExamOptionServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/ClassExamOptionServiceImpl.java new file mode 100644 index 00000000..b20174ef --- /dev/null +++ b/src/main/java/com/peanut/modules/common/service/impl/ClassExamOptionServiceImpl.java @@ -0,0 +1,13 @@ +package com.peanut.modules.common.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.peanut.modules.common.dao.ClassExamOptionDao; +import com.peanut.modules.common.entity.ClassExamOption; +import com.peanut.modules.common.service.ClassExamOptionService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service("commonClassExamOptionService") +public class ClassExamOptionServiceImpl extends ServiceImpl implements ClassExamOptionService { +} diff --git a/src/main/java/com/peanut/modules/common/service/impl/ClassExamServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/ClassExamServiceImpl.java index d8aa10a3..8f660204 100644 --- a/src/main/java/com/peanut/modules/common/service/impl/ClassExamServiceImpl.java +++ b/src/main/java/com/peanut/modules/common/service/impl/ClassExamServiceImpl.java @@ -40,6 +40,7 @@ public class ClassExamServiceImpl extends ServiceImpl i try (InputStream fis = file.getInputStream()) { Workbook workbook = WorkbookFactory.create(fis); Sheet sheet = workbook.getSheetAt(0); + Date date = new Date(); // 遍历行 for (Row row : sheet) { if (!isRowEmpty(row)){ @@ -98,6 +99,7 @@ public class ClassExamServiceImpl extends ServiceImpl i } } } + System.out.println("结束"+(new Date().getTime()-date.getTime())); } catch (IOException | InvalidFormatException e) { e.printStackTrace(); } diff --git a/src/main/java/com/peanut/modules/common/service/impl/ClassExamSubjectServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/ClassExamSubjectServiceImpl.java new file mode 100644 index 00000000..a9c07add --- /dev/null +++ b/src/main/java/com/peanut/modules/common/service/impl/ClassExamSubjectServiceImpl.java @@ -0,0 +1,13 @@ +package com.peanut.modules.common.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.peanut.modules.common.dao.ClassExamSubjectDao; +import com.peanut.modules.common.entity.ClassExamSubject; +import com.peanut.modules.common.service.ClassExamSubjectService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service("commonClassExamSubjectService") +public class ClassExamSubjectServiceImpl extends ServiceImpl implements ClassExamSubjectService { +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a2abff49..5c5fc067 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -16,7 +16,7 @@ spring: type: com.alibaba.druid.pool.DruidDataSource druid: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://rm-2zev4157t67trxuu3yo.mysql.rds.aliyuncs.com:3306/e_book_test + url: jdbc:mysql://rm-2zev4157t67trxuu3yo.mysql.rds.aliyuncs.com:3306/e_book_test?rewriteBatchedStatements=true # username: root # password: HSXY1234hsxy # password: Jgll2023Nutty diff --git a/src/main/resources/application-dev1.yml b/src/main/resources/application-dev1.yml index 11f371fe..a9235196 100644 --- a/src/main/resources/application-dev1.yml +++ b/src/main/resources/application-dev1.yml @@ -16,7 +16,7 @@ spring: type: com.alibaba.druid.pool.DruidDataSource druid: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://rm-2zev4157t67trxuu3yo.mysql.rds.aliyuncs.com:3306/e_book_test + url: jdbc:mysql://rm-2zev4157t67trxuu3yo.mysql.rds.aliyuncs.com:3306/e_book_test?rewriteBatchedStatements=true # username: root # password: HSXY1234hsxy # password: Jgll2023Nutty diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 3e3e84be..ea60ddae 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -16,7 +16,7 @@ spring: type: com.alibaba.druid.pool.DruidDataSource druid: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://rm-2zev4157t67trxuu3yo.mysql.rds.aliyuncs.com:3306/e_book + url: jdbc:mysql://rm-2zev4157t67trxuu3yo.mysql.rds.aliyuncs.com:3306/e_book?rewriteBatchedStatements=true # username: root # password: HSXY1234hsxy # password: Jgll2023Nutty diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 4f782244..3f2f7d5f 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -16,7 +16,7 @@ spring: type: com.alibaba.druid.pool.DruidDataSource druid: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://rm-2zev4157t67trxuu3yo.mysql.rds.aliyuncs.com:3306/e_book_test + url: jdbc:mysql://rm-2zev4157t67trxuu3yo.mysql.rds.aliyuncs.com:3306/e_book_test?rewriteBatchedStatements=true # username: root # password: HSXY1234hsxy # password: Jgll2023Nutty