diff --git a/web-adapter/src/main/java/com/zcloud/edu/web/QuestionController.java b/web-adapter/src/main/java/com/zcloud/edu/web/QuestionController.java index 5b299e4..7558340 100644 --- a/web-adapter/src/main/java/com/zcloud/edu/web/QuestionController.java +++ b/web-adapter/src/main/java/com/zcloud/edu/web/QuestionController.java @@ -19,8 +19,7 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; - -import java.util.ArrayList; +import org.springframework.web.multipart.MultipartFile; /** * web-adapter @@ -81,5 +80,12 @@ public class QuestionController { return SingleResponse.buildSuccess(); } + @ApiOperation("导入题目-视频课件") + @PostMapping("/importQuestionVideoTable") + public Response importQuestionVideoTable(@RequestPart(value = "file") MultipartFile file, @RequestParam(value = "videoCoursewareId") String videoCoursewareId) { + questionService.importQuestionVideoTable(file, videoCoursewareId); + return SingleResponse.buildSuccess(); + } + } diff --git a/web-adapter/src/main/java/com/zcloud/edu/web/VideoCoursewareController.java b/web-adapter/src/main/java/com/zcloud/edu/web/VideoCoursewareController.java index b3cb982..8e4fce2 100644 --- a/web-adapter/src/main/java/com/zcloud/edu/web/VideoCoursewareController.java +++ b/web-adapter/src/main/java/com/zcloud/edu/web/VideoCoursewareController.java @@ -2,11 +2,7 @@ package com.zcloud.edu.web; import com.zcloud.edu.api.VideoCoursewareServiceI; -import com.zcloud.edu.dto.VideoCoursewareAddCmd; -import com.zcloud.edu.dto.VideoCoursewarePageQry; -import com.zcloud.edu.dto.VideoCoursewareListQry; -import com.zcloud.edu.dto.VideoCoursewareUpdateCmd; -import com.zcloud.edu.dto.VideoCoursewareRemoveCmd; +import com.zcloud.edu.dto.*; import com.zcloud.edu.dto.clientobject.VideoCoursewareCO; import com.alibaba.cola.dto.MultiResponse; import com.alibaba.cola.dto.PageResponse; @@ -49,6 +45,13 @@ public class VideoCoursewareController { return SingleResponse.buildSuccess(); } + @ApiOperation("启用/禁用") + @PutMapping("/editState") + public SingleResponse editState(@Validated @RequestBody VideoCoursewareUpdateStateCmd cmd) { + videoCoursewareService.editState(cmd); + return SingleResponse.buildSuccess(); + } + @ApiOperation("分页") @PostMapping("/list") public PageResponse page(@RequestBody VideoCoursewarePageQry qry) { diff --git a/web-app/src/main/java/com/zcloud/edu/command/QuestionAddExe.java b/web-app/src/main/java/com/zcloud/edu/command/QuestionAddExe.java index b4097b2..4d2b3bd 100644 --- a/web-app/src/main/java/com/zcloud/edu/command/QuestionAddExe.java +++ b/web-app/src/main/java/com/zcloud/edu/command/QuestionAddExe.java @@ -1,13 +1,19 @@ package com.zcloud.edu.command; +import cn.hutool.core.bean.BeanUtil; import com.zcloud.edu.domain.gateway.QuestionGateway; import com.zcloud.edu.domain.model.QuestionE; import com.zcloud.edu.dto.QuestionAddCmd; import com.alibaba.cola.exception.BizException; +import com.zcloud.edu.persistence.dataobject.QuestionDO; +import com.zcloud.edu.persistence.repository.QuestionRepository; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; /** @@ -20,11 +26,14 @@ import org.springframework.transaction.annotation.Transactional; @AllArgsConstructor public class QuestionAddExe { private final QuestionGateway questionGateway; + private final QuestionRepository questionRepository; @Transactional(rollbackFor = Exception.class) public boolean execute(QuestionAddCmd cmd) { QuestionE questionE = new QuestionE(); BeanUtils.copyProperties(cmd, questionE); + questionE.checkQuestion(questionE); + boolean res = false; try { res = questionGateway.add(questionE); @@ -36,5 +45,23 @@ public class QuestionAddExe { } return true; } + + @Transactional(rollbackFor = Exception.class) + public void importQuestionVideoTable(MultipartFile file, String videoCoursewareId){ + QuestionE questionE = new QuestionE(); + Integer maxQuestionNumber = questionRepository.getMaxQuestionNumber(videoCoursewareId); + List questionES = questionE.parseImportTemplateData(file, videoCoursewareId, maxQuestionNumber); + + // 批量插入 + boolean res = false; + try { + res = questionRepository.saveBatch(BeanUtil.copyToList(questionES, QuestionDO.class)); + } catch (Exception e) { + throw new RuntimeException(e); + } + if (!res) { + throw new BizException("导入失败"); + } + } } diff --git a/web-app/src/main/java/com/zcloud/edu/command/QuestionUpdateExe.java b/web-app/src/main/java/com/zcloud/edu/command/QuestionUpdateExe.java index f21fe6e..78dcbf6 100644 --- a/web-app/src/main/java/com/zcloud/edu/command/QuestionUpdateExe.java +++ b/web-app/src/main/java/com/zcloud/edu/command/QuestionUpdateExe.java @@ -25,6 +25,7 @@ public class QuestionUpdateExe { public void execute(QuestionUpdateCmd cmd) { QuestionE questionE = new QuestionE(); BeanUtils.copyProperties(cmd, questionE); + questionE.checkQuestion(questionE); boolean res = questionGateway.update(questionE); if (!res) { throw new BizException("修改失败"); diff --git a/web-app/src/main/java/com/zcloud/edu/command/TeacherRemoveExe.java b/web-app/src/main/java/com/zcloud/edu/command/TeacherRemoveExe.java index 4f2aa4a..777cd6c 100644 --- a/web-app/src/main/java/com/zcloud/edu/command/TeacherRemoveExe.java +++ b/web-app/src/main/java/com/zcloud/edu/command/TeacherRemoveExe.java @@ -4,9 +4,12 @@ import cn.hutool.core.collection.CollUtil; import com.alibaba.cola.dto.SingleResponse; import com.zcloud.edu.domain.gateway.TeacherGateway; import com.alibaba.cola.exception.BizException; +import com.zcloud.edu.domain.model.TeacherE; import com.zcloud.edu.persistence.dataobject.TeacherDO; +import com.zcloud.edu.persistence.dataobject.VideoCoursewareDO; import com.zcloud.edu.persistence.repository.TeacherCertificateRepository; import com.zcloud.edu.persistence.repository.TeacherRepository; +import com.zcloud.edu.persistence.repository.VideoCoursewareRepository; import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -28,6 +31,7 @@ public class TeacherRemoveExe { private final TeacherGateway teacherGateway; private final TeacherRepository teacherRepository; private final TeacherCertificateRepository teacherCertificateRepository; + private final VideoCoursewareRepository videoCoursewareRepository; @Transactional(rollbackFor = Exception.class) public boolean execute(Long id) { @@ -37,6 +41,10 @@ public class TeacherRemoveExe { throw new BizException("数据不存在"); } + TeacherE teacherE = new TeacherE(); + List videoCoursewareDOS = videoCoursewareRepository.listByTeacherId(teacherDO.getData().getTeacherId()); + teacherE.checkList(videoCoursewareDOS == null ? 0 : videoCoursewareDOS.size()); + boolean res = teacherGateway.deletedTeacherById(id); if(res){ String teacherId = teacherDO.getData().getTeacherId(); @@ -55,10 +63,14 @@ public class TeacherRemoveExe { throw new BizException("数据不存在"); } + List teacherIds = teacherDOS.stream().map(TeacherDO::getTeacherId).collect(Collectors.toList()); + List videoCoursewareDOS = videoCoursewareRepository.listByTeacherIds(teacherIds); + TeacherE teacherE = new TeacherE(); + teacherE.checkList(videoCoursewareDOS == null ? 0 : videoCoursewareDOS.size()); + boolean res = teacherGateway.deletedTeacherByIds(ids); if(res){ - List teacherIds = teacherDOS.stream().map(TeacherDO::getTeacherId).collect(Collectors.toList()); teacherCertificateRepository.removeByTeacherIds(teacherIds); } if (!res) { diff --git a/web-app/src/main/java/com/zcloud/edu/command/VideoCoursewareUpdateExe.java b/web-app/src/main/java/com/zcloud/edu/command/VideoCoursewareUpdateExe.java index c65576a..57c73a5 100644 --- a/web-app/src/main/java/com/zcloud/edu/command/VideoCoursewareUpdateExe.java +++ b/web-app/src/main/java/com/zcloud/edu/command/VideoCoursewareUpdateExe.java @@ -4,6 +4,7 @@ import com.alibaba.cola.exception.BizException; import com.zcloud.edu.domain.gateway.VideoCoursewareGateway; import com.zcloud.edu.domain.model.VideoCoursewareE; import com.zcloud.edu.dto.VideoCoursewareUpdateCmd; +import com.zcloud.edu.dto.VideoCoursewareUpdateStateCmd; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; @@ -30,5 +31,15 @@ public class VideoCoursewareUpdateExe { throw new BizException("修改失败"); } } + + @Transactional(rollbackFor = Exception.class) + public void execute(VideoCoursewareUpdateStateCmd cmd) { + VideoCoursewareE videoCoursewareE = new VideoCoursewareE(); + BeanUtils.copyProperties(cmd, videoCoursewareE); + boolean res = videoCoursewareGateway.update(videoCoursewareE); + if (!res) { + throw new BizException("修改失败"); + } + } } diff --git a/web-app/src/main/java/com/zcloud/edu/service/QuestionServiceImpl.java b/web-app/src/main/java/com/zcloud/edu/service/QuestionServiceImpl.java index 4df0ce9..6f667c7 100644 --- a/web-app/src/main/java/com/zcloud/edu/service/QuestionServiceImpl.java +++ b/web-app/src/main/java/com/zcloud/edu/service/QuestionServiceImpl.java @@ -16,6 +16,7 @@ import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.SingleResponse; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; /** * web-app @@ -66,5 +67,10 @@ public class QuestionServiceImpl implements QuestionServiceI { public void removeBatch(Long[] ids) { questionRemoveExe.execute(ids); } + + @Override + public void importQuestionVideoTable(MultipartFile file, String videoCoursewareId) { + questionAddExe.importQuestionVideoTable(file, videoCoursewareId); + } } diff --git a/web-app/src/main/java/com/zcloud/edu/service/VideoCoursewareServiceImpl.java b/web-app/src/main/java/com/zcloud/edu/service/VideoCoursewareServiceImpl.java index b66efbd..a837791 100644 --- a/web-app/src/main/java/com/zcloud/edu/service/VideoCoursewareServiceImpl.java +++ b/web-app/src/main/java/com/zcloud/edu/service/VideoCoursewareServiceImpl.java @@ -6,10 +6,7 @@ import com.zcloud.edu.command.VideoCoursewareAddExe; import com.zcloud.edu.command.VideoCoursewareRemoveExe; import com.zcloud.edu.command.VideoCoursewareUpdateExe; import com.zcloud.edu.command.query.VideoCoursewareQueryExe; -import com.zcloud.edu.dto.VideoCoursewareAddCmd; -import com.zcloud.edu.dto.VideoCoursewarePageQry; -import com.zcloud.edu.dto.VideoCoursewareListQry; -import com.zcloud.edu.dto.VideoCoursewareUpdateCmd; +import com.zcloud.edu.dto.*; import com.zcloud.edu.dto.clientobject.VideoCoursewareCO; import com.alibaba.cola.dto.PageResponse; @@ -57,6 +54,11 @@ public class VideoCoursewareServiceImpl implements VideoCoursewareServiceI { videoCoursewareUpdateExe.execute(cmd); } + @Override + public void editState(VideoCoursewareUpdateStateCmd cmd) { + videoCoursewareUpdateExe.execute(cmd); + } + @Override public void remove(Long id) { videoCoursewareRemoveExe.execute(id); diff --git a/web-client/src/main/java/com/zcloud/edu/api/QuestionServiceI.java b/web-client/src/main/java/com/zcloud/edu/api/QuestionServiceI.java index 441eb45..df354a9 100644 --- a/web-client/src/main/java/com/zcloud/edu/api/QuestionServiceI.java +++ b/web-client/src/main/java/com/zcloud/edu/api/QuestionServiceI.java @@ -9,6 +9,7 @@ import com.zcloud.edu.dto.clientobject.QuestionCO; import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.SingleResponse; +import org.springframework.web.multipart.MultipartFile; /** * web-client @@ -30,5 +31,7 @@ public interface QuestionServiceI { void remove(Long id); void removeBatch(Long[] ids); + + void importQuestionVideoTable(MultipartFile file, String videoCoursewareId); } diff --git a/web-client/src/main/java/com/zcloud/edu/api/VideoCoursewareServiceI.java b/web-client/src/main/java/com/zcloud/edu/api/VideoCoursewareServiceI.java index 39a4a2e..e24d698 100644 --- a/web-client/src/main/java/com/zcloud/edu/api/VideoCoursewareServiceI.java +++ b/web-client/src/main/java/com/zcloud/edu/api/VideoCoursewareServiceI.java @@ -1,10 +1,7 @@ package com.zcloud.edu.api; import com.alibaba.cola.dto.MultiResponse; -import com.zcloud.edu.dto.VideoCoursewareAddCmd; -import com.zcloud.edu.dto.VideoCoursewarePageQry; -import com.zcloud.edu.dto.VideoCoursewareListQry; -import com.zcloud.edu.dto.VideoCoursewareUpdateCmd; +import com.zcloud.edu.dto.*; import com.zcloud.edu.dto.clientobject.VideoCoursewareCO; import com.alibaba.cola.dto.PageResponse; @@ -27,6 +24,8 @@ public interface VideoCoursewareServiceI { void edit(VideoCoursewareUpdateCmd cmd); + void editState(VideoCoursewareUpdateStateCmd cmd); + void remove(Long id); void removeBatch(Long[] ids); diff --git a/web-client/src/main/java/com/zcloud/edu/dto/QuestionAddCmd.java b/web-client/src/main/java/com/zcloud/edu/dto/QuestionAddCmd.java index 563c215..98ca4b0 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/QuestionAddCmd.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/QuestionAddCmd.java @@ -20,44 +20,31 @@ import javax.validation.constraints.*; @NoArgsConstructor @AllArgsConstructor public class QuestionAddCmd extends Command { - @ApiModelProperty(value = "课件id", name = "videoCoursewareId", required = true) - @NotEmpty(message = "课件id不能为空") + + @ApiModelProperty(value = "课件id", name = "videoCoursewareId") private String videoCoursewareId; - @ApiModelProperty(value = "试卷id", name = "examPaperId", required = true) - @NotEmpty(message = "试卷id不能为空") + @ApiModelProperty(value = "试卷id", name = "examPaperId") private String examPaperId; - @ApiModelProperty(value = "题号", name = "questionNumber", required = true) - @NotNull(message = "题号不能为空") - private Integer questionNumber; - - @ApiModelProperty(value = "试题类型(单选题、多选题、判断题、填空题)", name = "questionType", required = true) - @NotEmpty(message = "试题类型(单选题、多选题、判断题、填空题)不能为空") + @ApiModelProperty(value = "试题类型(1单选题、2多选题、3判断题)", name = "questionType", required = true) + @NotEmpty(message = "试题类型(单选题、多选题、判断题)不能为空") private String questionType; - @ApiModelProperty(value = "试题类型名称", name = "questionTypeName", required = true) - @NotEmpty(message = "试题类型名称不能为空") - private String questionTypeName; - @ApiModelProperty(value = "题干", name = "questionDry", required = true) @NotEmpty(message = "题干不能为空") private String questionDry; @ApiModelProperty(value = "选项A", name = "optionA", required = true) - @NotEmpty(message = "选项A不能为空") private String optionA; @ApiModelProperty(value = "选项B", name = "optionB", required = true) - @NotEmpty(message = "选项B不能为空") private String optionB; @ApiModelProperty(value = "选项C", name = "optionC", required = true) - @NotEmpty(message = "选项C不能为空") private String optionC; @ApiModelProperty(value = "选项D", name = "optionD", required = true) - @NotEmpty(message = "选项D不能为空") private String optionD; @ApiModelProperty(value = "答案", name = "answer", required = true) @@ -68,12 +55,10 @@ public class QuestionAddCmd extends Command { @NotNull(message = "课件类型(1:视频课件、2:试卷习题)不能为空") private Integer coursewareType; - @ApiModelProperty(value = "答案解析", name = "descr", required = true) - @NotEmpty(message = "答案解析不能为空") + @ApiModelProperty(value = "答案解析", name = "descr") private String descr; - @ApiModelProperty(value = "分值", name = "score", required = true) - @NotEmpty(message = "分值不能为空") + @ApiModelProperty(value = "分值", name = "score") private String score; } diff --git a/web-client/src/main/java/com/zcloud/edu/dto/QuestionPageQry.java b/web-client/src/main/java/com/zcloud/edu/dto/QuestionPageQry.java index ee76d1a..33895e5 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/QuestionPageQry.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/QuestionPageQry.java @@ -1,8 +1,11 @@ package com.zcloud.edu.dto; import com.alibaba.cola.dto.PageQuery; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotNull; + /** * web-client @@ -23,6 +26,11 @@ public class QuestionPageQry extends PageQuery { * - `le`: 小于等于比较查询 * - `ne`: 不等比较查询,对应SQL的!=操作符 */ - private String likeQuestionId; + + @ApiModelProperty(value = "视频课件id、2:试卷习题)", name = "eqVideoCoursewareId", required = true) + private String eqVideoCoursewareId; + + @ApiModelProperty(value = "试卷id", name = "eqExamPaperId", required = true) + private String eqExamPaperId; } diff --git a/web-client/src/main/java/com/zcloud/edu/dto/QuestionUpdateCmd.java b/web-client/src/main/java/com/zcloud/edu/dto/QuestionUpdateCmd.java index 2ed1dd1..52b36de 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/QuestionUpdateCmd.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/QuestionUpdateCmd.java @@ -20,53 +20,52 @@ import javax.validation.constraints.*; @NoArgsConstructor @AllArgsConstructor public class QuestionUpdateCmd extends Command { - @ApiModelProperty(value = "${column.comment}", name = "id", required = true) - @NotNull(message = "${column.comment}不能为空") + @ApiModelProperty(value = "id", name = "id", required = true) + @NotNull(message = "id不能为空") private Long id; - @ApiModelProperty(value = "业务主键id", name = "questionId", required = true) - @NotEmpty(message = "业务主键id不能为空") + + @ApiModelProperty(value = "主键id", name = "questionNumber", required = true) + @NotEmpty(message = "主键id不能为空") private String questionId; - @ApiModelProperty(value = "课件id", name = "videoCoursewareId", required = true) - @NotEmpty(message = "课件id不能为空") + + @ApiModelProperty(value = "课件id", name = "videoCoursewareId") private String videoCoursewareId; - @ApiModelProperty(value = "试卷id", name = "examPaperId", required = true) - @NotEmpty(message = "试卷id不能为空") + + @ApiModelProperty(value = "试卷id", name = "examPaperId") private String examPaperId; - @ApiModelProperty(value = "题号", name = "questionNumber", required = true) - @NotNull(message = "题号不能为空") - private Integer questionNumber; - @ApiModelProperty(value = "试题类型(单选题、多选题、判断题、填空题)", name = "questionType", required = true) - @NotEmpty(message = "试题类型(单选题、多选题、判断题、填空题)不能为空") + + @ApiModelProperty(value = "试题类型(1单选题、2多选题、3判断题)", name = "questionType", required = true) + @NotEmpty(message = "试题类型(单选题、多选题、判断题)不能为空") private String questionType; - @ApiModelProperty(value = "试题类型名称", name = "questionTypeName", required = true) - @NotEmpty(message = "试题类型名称不能为空") - private String questionTypeName; + @ApiModelProperty(value = "题干", name = "questionDry", required = true) @NotEmpty(message = "题干不能为空") private String questionDry; + @ApiModelProperty(value = "选项A", name = "optionA", required = true) - @NotEmpty(message = "选项A不能为空") private String optionA; + @ApiModelProperty(value = "选项B", name = "optionB", required = true) - @NotEmpty(message = "选项B不能为空") private String optionB; + @ApiModelProperty(value = "选项C", name = "optionC", required = true) - @NotEmpty(message = "选项C不能为空") private String optionC; + @ApiModelProperty(value = "选项D", name = "optionD", required = true) - @NotEmpty(message = "选项D不能为空") private String optionD; + @ApiModelProperty(value = "答案", name = "answer", required = true) @NotEmpty(message = "答案不能为空") private String answer; + @ApiModelProperty(value = "课件类型(1:视频课件、2:试卷习题)", name = "coursewareType", required = true) @NotNull(message = "课件类型(1:视频课件、2:试卷习题)不能为空") private Integer coursewareType; - @ApiModelProperty(value = "答案解析", name = "descr", required = true) - @NotEmpty(message = "答案解析不能为空") + + @ApiModelProperty(value = "答案解析", name = "descr") private String descr; - @ApiModelProperty(value = "分值", name = "score", required = true) - @NotEmpty(message = "分值不能为空") + + @ApiModelProperty(value = "分值", name = "score") private String score; } diff --git a/web-client/src/main/java/com/zcloud/edu/dto/TeacherListQry.java b/web-client/src/main/java/com/zcloud/edu/dto/TeacherListQry.java index dddbbfe..af65563 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/TeacherListQry.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/TeacherListQry.java @@ -1,8 +1,11 @@ package com.zcloud.edu.dto; import com.alibaba.cola.dto.PageQuery; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotNull; + /** * web-client @@ -24,5 +27,9 @@ public class TeacherListQry extends PageQuery { * - `ne`: 不等比较查询,对应SQL的!=操作符 */ private String eqCorpinfoId; + + @ApiModelProperty(name = "corpFlag 监管端1,企业端2", value = "corpFlag", required = true) + @NotNull(message = "监管/企业标识不能为空") + private Integer corpFlag; } diff --git a/web-client/src/main/java/com/zcloud/edu/dto/TeacherPageQry.java b/web-client/src/main/java/com/zcloud/edu/dto/TeacherPageQry.java index cd94261..2ac9185 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/TeacherPageQry.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/TeacherPageQry.java @@ -4,6 +4,9 @@ import com.alibaba.cola.dto.PageQuery; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + /** * web-client @@ -32,5 +35,9 @@ public class TeacherPageQry extends PageQuery { @ApiModelProperty(name = "qualificationType", value = "资格类型") private String qualificationType; + + @ApiModelProperty(name = "corpFlag 监管端1,企业端2", value = "corpFlag", required = true) + @NotNull(message = "监管/企业标识不能为空") + private Integer corpFlag; } diff --git a/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewareAddCmd.java b/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewareAddCmd.java index dceddcc..4a89123 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewareAddCmd.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewareAddCmd.java @@ -20,8 +20,11 @@ import javax.validation.constraints.*; @NoArgsConstructor @AllArgsConstructor public class VideoCoursewareAddCmd extends Command { - @ApiModelProperty(value = "企业ID", name = "corpinfoId", required = true) - @NotNull(message = "企业ID不能为空") + + @ApiModelProperty(value = "课件id", name = "videoCoursewareId") + private String videoCoursewareId; + + @ApiModelProperty(value = "企业ID", name = "corpinfoId") private Long corpinfoId; @ApiModelProperty(value = "课件名称", name = "coursewareName", required = true) @@ -44,14 +47,6 @@ public class VideoCoursewareAddCmd extends Command { @NotEmpty(message = "课件描述不能为空") private String coursewareIntroduce; - @ApiModelProperty(value = "课件状态 0未启用, 1-启用", name = "state", required = true) - @NotNull(message = "课件状态 0未启用, 1-启用不能为空") - private Integer state; - - @ApiModelProperty(value = "学时,单位分钟", name = "classHour", required = true) - @NotEmpty(message = "学时,单位分钟不能为空") - private String classHour; - @ApiModelProperty(value = "课件时长(视频时间)-分钟", name = "videoTime", required = true) @NotEmpty(message = "课件时长(视频时间)-分钟不能为空") private String videoTime; diff --git a/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewareListQry.java b/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewareListQry.java index 4f1d2d8..f4d9c78 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewareListQry.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewareListQry.java @@ -23,6 +23,6 @@ public class VideoCoursewareListQry extends PageQuery { * - `le`: 小于等于比较查询 * - `ne`: 不等比较查询,对应SQL的!=操作符 */ - private String likeVideoCoursewareId; + private String eqCorpinfoId; } diff --git a/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewarePageQry.java b/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewarePageQry.java index ccd323a..d2cec51 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewarePageQry.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewarePageQry.java @@ -1,6 +1,7 @@ package com.zcloud.edu.dto; import com.alibaba.cola.dto.PageQuery; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -23,6 +24,14 @@ public class VideoCoursewarePageQry extends PageQuery { * - `le`: 小于等于比较查询 * - `ne`: 不等比较查询,对应SQL的!=操作符 */ - private String likeVideoCoursewareId; + + @ApiModelProperty(value = "课件名称") + private String likeCoursewareName; + + @ApiModelProperty(value = "培训类型") + private String eqTrainingTypeId; + + @ApiModelProperty(value = "启用:1, 禁用:0") + private Integer eqState; } diff --git a/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewareUpdateStateCmd.java b/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewareUpdateStateCmd.java new file mode 100644 index 0000000..3a0f55b --- /dev/null +++ b/web-client/src/main/java/com/zcloud/edu/dto/VideoCoursewareUpdateStateCmd.java @@ -0,0 +1,34 @@ +package com.zcloud.edu.dto; + +import com.alibaba.cola.dto.Command; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * web-client + * + * @Author SondonYong + * @Date 2025-11-27 14:05:32 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +public class VideoCoursewareUpdateStateCmd extends Command { + + @ApiModelProperty(value = "id", name = "id", required = true) + @NotNull(message = "id不能为空") + private Long id; + + @ApiModelProperty(value = "课件状态:启用传1,禁用传0", name = "state", required = true) + @NotNull(message = "课件状态不能为空") + private Integer state; + +} + diff --git a/web-client/src/main/java/com/zcloud/edu/dto/clientobject/QuestionCO.java b/web-client/src/main/java/com/zcloud/edu/dto/clientobject/QuestionCO.java index 5764f2d..28224a3 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/clientobject/QuestionCO.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/clientobject/QuestionCO.java @@ -35,13 +35,9 @@ public class QuestionCO extends ClientObject { private Integer questionNumber; //试题类型(单选题、多选题、判断题、填空题) - @ApiModelProperty(value = "试题类型(单选题、多选题、判断题、填空题)") + @ApiModelProperty(value = "试题类型(1单选题、2多选题、3判断题)") private String questionType; - //试题类型名称 - @ApiModelProperty(value = "试题类型名称") - - private String questionTypeName; //题干 @ApiModelProperty(value = "题干") diff --git a/web-client/src/main/java/com/zcloud/edu/dto/clientobject/VideoCoursewareCO.java b/web-client/src/main/java/com/zcloud/edu/dto/clientobject/VideoCoursewareCO.java index 2d8ec19..2fd9324 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/clientobject/VideoCoursewareCO.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/clientobject/VideoCoursewareCO.java @@ -18,47 +18,56 @@ import java.time.LocalDate; public class VideoCoursewareCO extends ClientObject { //id @ApiModelProperty(value = "id") - private Long id; + //业务主键id @ApiModelProperty(value = "业务主键id") - private String videoCoursewareId; + //企业ID @ApiModelProperty(value = "企业ID") - private Long corpinfoId; + + @ApiModelProperty(value = "企业名称") + private String corpName; + //课件名称 @ApiModelProperty(value = "课件名称") - private String coursewareName; + //培训类型id @ApiModelProperty(value = "培训类型id") - private String trainingTypeId; + + //培训类型名称 + @ApiModelProperty(value = "培训类型名称") + private String trainingTypeName; + //教师id @ApiModelProperty(value = "教师id") - private String teacherId; + + @ApiModelProperty(value = "教师名称") + private String teacherName; + //课件文件路径 @ApiModelProperty(value = "课件文件路径") - private String videoFiles; + //课件描述 @ApiModelProperty(value = "课件描述") - private String coursewareIntroduce; + //课件状态 0未启用, 1-启用 @ApiModelProperty(value = "课件状态 0未启用, 1-启用") - private Integer state; + //学时,单位分钟 @ApiModelProperty(value = "学时,单位分钟") - private String classHour; + //课件时长(视频时间)-分钟 @ApiModelProperty(value = "课件时长(视频时间)-分钟") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime videoTime; } diff --git a/web-domain/src/main/java/com/zcloud/edu/domain/enums/QuestionTypeEnum.java b/web-domain/src/main/java/com/zcloud/edu/domain/enums/QuestionTypeEnum.java new file mode 100644 index 0000000..a7b873a --- /dev/null +++ b/web-domain/src/main/java/com/zcloud/edu/domain/enums/QuestionTypeEnum.java @@ -0,0 +1,22 @@ +package com.zcloud.edu.domain.enums; + +import lombok.Getter; + +/** + * 试题类型(1单选题、2多选题、3判断题) + */ +@Getter +public enum QuestionTypeEnum { + + CHOICE("1","单选题"), + MULTIPLE("2","多选题"), + JUDGE("3","判断题"), + ; + private final String code; + private final String name; + + QuestionTypeEnum(String code, String name) { + this.code = code; + this.name = name; + } +} diff --git a/web-domain/src/main/java/com/zcloud/edu/domain/model/QuestionE.java b/web-domain/src/main/java/com/zcloud/edu/domain/model/QuestionE.java index 925e1ff..8713958 100644 --- a/web-domain/src/main/java/com/zcloud/edu/domain/model/QuestionE.java +++ b/web-domain/src/main/java/com/zcloud/edu/domain/model/QuestionE.java @@ -1,9 +1,22 @@ package com.zcloud.edu.domain.model; +import cn.hutool.core.collection.CollUtil; +import com.alibaba.cloud.commons.lang.StringUtils; +import com.alibaba.cola.exception.BizException; import com.jjb.saas.framework.domain.model.BaseE; +import com.zcloud.edu.domain.enums.QuestionTypeEnum; +import com.zcloud.gbscommon.excelEntity.QuestionVideoChoiceExcelImportEntity; +import com.zcloud.gbscommon.excelEntity.QuestionVideoJudgeExcelImportEntity; +import com.zcloud.gbscommon.excelEntity.QuestionVideoMultiselectExcelImportEntity; +import com.zcloud.gbscommon.excelEntity.RiskPointExcelImportEntity; +import com.zcloud.gbscommon.utils.ExcelUtils; +import com.zcloud.gbscommon.utils.UuidUtil; import lombok.Data; +import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** * web-domain @@ -24,8 +37,6 @@ public class QuestionE extends BaseE { private Integer questionNumber; //试题类型(单选题、多选题、判断题、填空题) private String questionType; - //试题类型名称 - private String questionTypeName; //题干 private String questionDry; //选项A @@ -44,5 +55,196 @@ public class QuestionE extends BaseE { private String descr; //分值 private String score; -} + public void checkQuestion(QuestionE questionE) { + if (questionE.getCoursewareType() == 1) { + // 视频课件 + if (questionE.getVideoCoursewareId() == null) { + throw new RuntimeException("请选择正确的视频课件"); + } + } else if (questionE.getCoursewareType() == 2) { + // 试卷习题 + if (questionE.getExamPaperId() == null) { + throw new RuntimeException("请选择正确的试卷"); + } + if (StringUtils.isEmpty(questionE.getScore())) { + throw new RuntimeException("请填写正确的分值"); + } + } else { + throw new RuntimeException("请选择正确的课件类型"); + } + + if (questionE.getQuestionType().equals("1")) { + // 单选题 + if (questionE.getOptionA() == null || questionE.getOptionB() == null || questionE.getOptionC() == null || questionE.getOptionD() == null) { + throw new RuntimeException("单选题选项不能为空"); + } + } else if (questionE.getQuestionType().equals("2")) { + // 多选题 + if (questionE.getOptionA() == null || questionE.getOptionB() == null || questionE.getOptionC() == null || questionE.getOptionD() == null) { + throw new RuntimeException("多选题选项不能为空"); + } + } else if (questionE.getQuestionType().equals("3")) { + // 判断题 + if (questionE.getOptionA() == null || questionE.getOptionB() == null) { + throw new RuntimeException("判断题选项不能为空"); + } + } + } + + public List parseImportTemplateData(MultipartFile file, String videoCoursewareId, Integer maxQuestionNumber) { + List videoChoiceList = new ArrayList<>(); + List videoMultiselectList = new ArrayList<>(); + List videoJudgeList = new ArrayList<>(); + try { + ExcelUtils.readBatchBySheetAndRow(file, QuestionVideoChoiceExcelImportEntity.class, videoChoiceList, 0, 1); + ExcelUtils.readBatchBySheetAndRow(file, QuestionVideoMultiselectExcelImportEntity.class, videoMultiselectList, 1, 1); + ExcelUtils.readBatchBySheetAndRow(file, QuestionVideoJudgeExcelImportEntity.class, videoJudgeList, 2, 1); + } catch (Exception e) { + throw new BizException("文件解析失败"); + } + + // 错误消息集合 + List errList = new ArrayList<>(); + // 校验 + if (CollUtil.isNotEmpty(videoChoiceList)) { + for (int i = 0; i < videoChoiceList.size(); i++) { + QuestionVideoChoiceExcelImportEntity entity = videoChoiceList.get(i); + if (entity == null) { + errList.add("单选题第" + (i + 2) + "行数据为空"); + continue; + } + if (StringUtils.isEmpty(entity.getQuestionDry())) { + errList.add("单选题第" + (i + 2) + "行单选题目不能为空"); + } + if (StringUtils.isEmpty(entity.getOptionA())) { + errList.add("单选题第" + (i + 2) + "行单选选项A不能为空"); + } + if (StringUtils.isEmpty(entity.getOptionB())) { + errList.add("单选题第" + (i + 2) + "行单选选项B不能为空"); + } + if (StringUtils.isEmpty(entity.getOptionC())) { + errList.add("单选题第" + (i + 2) + "行单选选项C不能为空"); + } + if (StringUtils.isEmpty(entity.getOptionD())) { + errList.add("单选题第" + (i + 2) + "行单选选项D不能为空"); + } + if (StringUtils.isEmpty(entity.getAnswer())) { + errList.add("单选题第" + (i + 2) + "行单选答案不能为空"); + } + if (StringUtils.isEmpty(entity.getDescr())) { + errList.add("单选题第" + (i + 2) + "行答案解析不能为空"); + } + } + } + if (CollUtil.isNotEmpty(videoMultiselectList)) { + for (int i = 0; i < videoMultiselectList.size(); i++) { + QuestionVideoMultiselectExcelImportEntity entity = videoMultiselectList.get(i); + if (entity == null) { + errList.add("多选题第" + (i + 2) + "行数据为空"); + continue; + } + if (StringUtils.isEmpty(entity.getQuestionDry())) { + errList.add("多选题第" + (i + 2) + "行多选题目不能为空"); + } + if (StringUtils.isEmpty(entity.getOptionA())) { + errList.add("多选题第" + (i + 2) + "行多选选项A不能为空"); + } + if (StringUtils.isEmpty(entity.getOptionB())) { + errList.add("多选题第" + (i + 2) + "行多选选项B不能为空"); + } + if (StringUtils.isEmpty(entity.getOptionC())) { + errList.add("多选题第" + (i + 2) + "行多选选项C不能为空"); + } + if (StringUtils.isEmpty(entity.getOptionD())) { + errList.add("多选题第" + (i + 2) + "行多选选项D不能为空"); + } + if (StringUtils.isEmpty(entity.getAnswer())) { + errList.add("多选题第" + (i + 2) + "行多选答案不能为空"); + } + if (StringUtils.isEmpty(entity.getDescr())) { + errList.add("多选题第" + (i + 2) + "行答案解析不能为空"); + } + } + } + if (CollUtil.isNotEmpty(videoJudgeList)) { + for (int i = 0; i < videoJudgeList.size(); i++) { + QuestionVideoJudgeExcelImportEntity entity = videoJudgeList.get(i); + if (entity == null) { + errList.add("判断题第" + (i + 2) + "行数据为空"); + continue; + } + if (StringUtils.isEmpty(entity.getQuestionDry())) { + errList.add("判断题第" + (i + 2) + "行判断题目不能为空"); + } + if (StringUtils.isEmpty(entity.getAnswer())) { + errList.add("判断题第" + (i + 2) + "行判断答案不能为空"); + } + if (StringUtils.isEmpty(entity.getDescr())) { + errList.add("判断题第" + (i + 2) + "行答案解析不能为空"); + } + } + } + + if (CollUtil.isNotEmpty(errList)) { + throw new BizException("导入信息有误,请检查后重新导入。错误信息:" + String.join("", errList)); + } + + Integer questionNumber = maxQuestionNumber + 1; + // 赋值 + List questionEList = new ArrayList<>(); + if (CollUtil.isNotEmpty(videoChoiceList)) { + for (QuestionVideoChoiceExcelImportEntity entity : videoChoiceList) { + QuestionE questionE = new QuestionE(); + questionE.setQuestionId(UuidUtil.get32UUID()); + questionE.setVideoCoursewareId(videoCoursewareId); + questionE.setQuestionNumber(questionNumber++); + questionE.setQuestionType(QuestionTypeEnum.CHOICE.getCode()); + questionE.setQuestionDry(entity.getQuestionDry()); + questionE.setOptionA(entity.getOptionA()); + questionE.setOptionB(entity.getOptionB()); + questionE.setOptionC(entity.getOptionC()); + questionE.setOptionD(entity.getOptionD()); + questionE.setAnswer(entity.getAnswer()); + questionE.setDescr(entity.getDescr()); + questionE.setCoursewareType(1); + questionEList.add(questionE); + } + } + if (CollUtil.isNotEmpty(videoMultiselectList)) { + for (QuestionVideoMultiselectExcelImportEntity entity : videoMultiselectList) { + QuestionE questionE = new QuestionE(); + questionE.setQuestionId(UuidUtil.get32UUID()); + questionE.setVideoCoursewareId(videoCoursewareId); + questionE.setQuestionNumber(questionNumber++); + questionE.setQuestionType(QuestionTypeEnum.MULTIPLE.getCode()); + questionE.setQuestionDry(entity.getQuestionDry()); + questionE.setOptionA(entity.getOptionA()); + questionE.setOptionB(entity.getOptionB()); + questionE.setOptionC(entity.getOptionC()); + questionE.setOptionD(entity.getOptionD()); + questionE.setAnswer(entity.getAnswer()); + questionE.setDescr(entity.getDescr()); + questionE.setCoursewareType(1); + questionEList.add(questionE); + } + } + if (CollUtil.isNotEmpty(videoJudgeList)) { + for (QuestionVideoJudgeExcelImportEntity entity : videoJudgeList) { + QuestionE questionE = new QuestionE(); + questionE.setQuestionId(UuidUtil.get32UUID()); + questionE.setVideoCoursewareId(videoCoursewareId); + questionE.setQuestionNumber(questionNumber++); + questionE.setQuestionType(QuestionTypeEnum.JUDGE.getCode()); + questionE.setQuestionDry(entity.getQuestionDry()); + questionE.setAnswer(entity.getAnswer()); + questionE.setDescr(entity.getDescr()); + questionE.setCoursewareType(1); + questionEList.add(questionE); + } + } + return questionEList; + + } + +} diff --git a/web-domain/src/main/java/com/zcloud/edu/domain/model/TeacherE.java b/web-domain/src/main/java/com/zcloud/edu/domain/model/TeacherE.java index afeaad6..aa45173 100644 --- a/web-domain/src/main/java/com/zcloud/edu/domain/model/TeacherE.java +++ b/web-domain/src/main/java/com/zcloud/edu/domain/model/TeacherE.java @@ -1,6 +1,7 @@ package com.zcloud.edu.domain.model; import cn.hutool.core.collection.CollUtil; +import com.alibaba.cola.exception.BizException; import com.jjb.saas.framework.domain.model.BaseE; import com.zcloud.gbscommon.utils.UuidUtil; import lombok.Data; @@ -76,5 +77,14 @@ public class TeacherE extends BaseE { return teacherList; } + /** + * 教师是否被使用 + */ + public void checkList(int size){ + if(size > 0){ + throw new BizException("该教师有负责的课件,无法删除。"); + } + } + } diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/gatewayimpl/QuestionGatewayImpl.java b/web-infrastructure/src/main/java/com/zcloud/edu/gatewayimpl/QuestionGatewayImpl.java index 01e6d71..bcd048b 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/gatewayimpl/QuestionGatewayImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/gatewayimpl/QuestionGatewayImpl.java @@ -1,13 +1,16 @@ package com.zcloud.edu.gatewayimpl; +import com.alibaba.cloud.commons.lang.StringUtils; import com.zcloud.edu.domain.gateway.QuestionGateway; import com.zcloud.edu.domain.model.QuestionE; import com.zcloud.edu.persistence.dataobject.QuestionDO; import com.zcloud.edu.persistence.repository.QuestionRepository; +import com.zcloud.gbscommon.utils.UuidUtil; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.util.Arrays; import java.util.Collections; /** @@ -21,10 +24,24 @@ import java.util.Collections; public class QuestionGatewayImpl implements QuestionGateway { private final QuestionRepository questionRepository; + @Override public Boolean add(QuestionE questionE) { QuestionDO d = new QuestionDO(); BeanUtils.copyProperties(questionE, d); + + if(StringUtils.isEmpty(d.getQuestionId())){ + d.setQuestionId(UuidUtil.get32UUID()); + } + + // 题号 + Integer maxQuestionNumber = 0; + if(d.getCoursewareType() == 1){ + maxQuestionNumber = questionRepository.getMaxQuestionNumber(d.getVideoCoursewareId()); + }else if(d.getCoursewareType() == 2){ + // TODO 试卷类型 + } + d.setQuestionNumber(maxQuestionNumber + 1); questionRepository.save(d); return true; } @@ -44,7 +61,7 @@ public class QuestionGatewayImpl implements QuestionGateway { @Override public Boolean deletedQuestionByIds(Long[] ids) { - return questionRepository.removeByIds(Collections.singletonList(ids)); + return questionRepository.removeByIds(Arrays.asList(ids)); } } diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/gatewayimpl/VideoCoursewareGatewayImpl.java b/web-infrastructure/src/main/java/com/zcloud/edu/gatewayimpl/VideoCoursewareGatewayImpl.java index b68dc3b..a4a936e 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/gatewayimpl/VideoCoursewareGatewayImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/gatewayimpl/VideoCoursewareGatewayImpl.java @@ -1,13 +1,19 @@ package com.zcloud.edu.gatewayimpl; +import com.alibaba.cloud.commons.lang.StringUtils; +import com.alibaba.cola.exception.BizException; +import com.jjb.saas.framework.auth.utils.AuthContext; import com.zcloud.edu.domain.gateway.VideoCoursewareGateway; import com.zcloud.edu.domain.model.VideoCoursewareE; import com.zcloud.edu.persistence.dataobject.VideoCoursewareDO; import com.zcloud.edu.persistence.repository.VideoCoursewareRepository; +import com.zcloud.gbscommon.utils.UuidUtil; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.Collections; /** @@ -25,6 +31,36 @@ public class VideoCoursewareGatewayImpl implements VideoCoursewareGateway { public Boolean add(VideoCoursewareE videoCoursewareE) { VideoCoursewareDO d = new VideoCoursewareDO(); BeanUtils.copyProperties(videoCoursewareE, d); + + if(StringUtils.isEmpty(d.getVideoCoursewareId())){ + d.setVideoCoursewareId(UuidUtil.get32UUID()); + } + if(d.getCorpinfoId() == null){ + d.setCorpinfoId(AuthContext.getTenantId()); + } + d.setState(1); + // 计算课时 + if(StringUtils.isNotEmpty(d.getVideoTime())){ + String videoTime = d.getVideoTime(); + try { + // 将字符串转换为数字(分钟) + double minutes = Double.parseDouble(videoTime); + + // 除以45,每45分钟为一课时 + double classHours = minutes / 45.0; + + // 四舍五入保留两位小数 + BigDecimal result = new BigDecimal(classHours) + .setScale(2, RoundingMode.HALF_UP); + + // 使用结果 + d.setClassHour(result.toString()); + } catch (NumberFormatException e) { + // 处理数字格式错误 + throw new BizException("视频时间格式错误: " + videoTime); + } + } + videoCoursewareRepository.save(d); return true; } diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/QuestionDO.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/QuestionDO.java index 3b38e96..b4a691b 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/QuestionDO.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/QuestionDO.java @@ -31,11 +31,8 @@ public class QuestionDO extends BaseDO { @ApiModelProperty(value = "题号") private Integer questionNumber; //试题类型(单选题、多选题、判断题、填空题) - @ApiModelProperty(value = "试题类型(单选题、多选题、判断题、填空题)") + @ApiModelProperty(value = "试题类型(1单选题、2多选题、3判断题)") private String questionType; - //试题类型名称 - @ApiModelProperty(value = "试题类型名称") - private String questionTypeName; //题干 @ApiModelProperty(value = "题干") private String questionDry; diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/VideoCoursewareDO.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/VideoCoursewareDO.java index 7829d03..d279d7e 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/VideoCoursewareDO.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/VideoCoursewareDO.java @@ -24,15 +24,19 @@ public class VideoCoursewareDO extends BaseDO { //企业ID @ApiModelProperty(value = "企业ID") private Long corpinfoId; + private String corpName; //课件名称 @ApiModelProperty(value = "课件名称") private String coursewareName; //培训类型id @ApiModelProperty(value = "培训类型id") private String trainingTypeId; + //培训类型名称 + private String trainingTypeName; //教师id @ApiModelProperty(value = "教师id") private String teacherId; + private String teacherName; //课件文件路径 @ApiModelProperty(value = "课件文件路径") private String videoFiles; diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/mapper/VideoCoursewareMapper.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/mapper/VideoCoursewareMapper.java index 2563e1f..b0e3d7d 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/mapper/VideoCoursewareMapper.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/mapper/VideoCoursewareMapper.java @@ -1,8 +1,13 @@ package com.zcloud.edu.persistence.mapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.zcloud.edu.persistence.dataobject.VideoCoursewareDO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * web-infrastructure @@ -13,5 +18,12 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface VideoCoursewareMapper extends BaseMapper { + VideoCoursewareDO getInfoById(@Param("id") Long id); + + IPage getVideoCoursewarePage(IPage page, @Param("ew") QueryWrapper queryWrapper); + + List getVideoCoursewareList(@Param("ew") QueryWrapper queryWrapper); + + } diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/QuestionRepository.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/QuestionRepository.java index 420e152..21efb8c 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/QuestionRepository.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/QuestionRepository.java @@ -20,6 +20,10 @@ public interface QuestionRepository extends BaseRepository { List list(Map params); + Integer getMaxQuestionNumber(String videoCoursewareId); + SingleResponse getInfoById(Long id); + + boolean saveBatch(List list); } diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/VideoCoursewareRepository.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/VideoCoursewareRepository.java index 1bf8b93..4ede425 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/VideoCoursewareRepository.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/VideoCoursewareRepository.java @@ -20,6 +20,10 @@ public interface VideoCoursewareRepository extends BaseRepository list(Map params); + List listByTeacherId(String teacherId); + + List listByTeacherIds(List teacherIds); + SingleResponse getInfoById(Long id); } diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/QuestionRepositoryImpl.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/QuestionRepositoryImpl.java index e506061..ff7881d 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/QuestionRepositoryImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/QuestionRepositoryImpl.java @@ -33,7 +33,7 @@ public class QuestionRepositoryImpl extends BaseRepositoryImpl iPage = new Query().getPage(params); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper = PageQueryHelper.createPageQueryWrapper(queryWrapper, params); - queryWrapper.orderByDesc("create_time"); + queryWrapper.orderByAsc("question_number"); IPage result = questionMapper.selectPage(iPage, queryWrapper); return PageHelper.pageToResponse(result, result.getRecords()); } @@ -47,9 +47,22 @@ public class QuestionRepositoryImpl extends BaseRepositoryImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("video_courseware_id", videoCoursewareId); + return list(queryWrapper).stream().mapToInt(QuestionDO::getQuestionNumber).max().orElse(0); + } + @Override public SingleResponse getInfoById(Long id) { return SingleResponse.of(questionMapper.selectById(id)); } + + @Override + public boolean saveBatch(List list) { + saveBatch(list); + return true; + } } diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/TeacherRepositoryImpl.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/TeacherRepositoryImpl.java index e3868e0..08aa5df 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/TeacherRepositoryImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/TeacherRepositoryImpl.java @@ -1,5 +1,6 @@ package com.zcloud.edu.persistence.repository.impl; +import com.jjb.saas.framework.auth.utils.AuthContext; import com.jjb.saas.framework.repository.common.PageHelper; import com.zcloud.edu.persistence.dataobject.TeacherDO; import com.zcloud.edu.persistence.mapper.TeacherMapper; @@ -32,6 +33,12 @@ public class TeacherRepositoryImpl extends BaseRepositoryImpl listPage(Map params) { + if(params.get("corpFlag") != null){ + Integer corpFlag = (Integer)params.get("corpFlag"); + if(corpFlag == 2){ + params.put("eqCorpinfoId", AuthContext.getTenantId()); + } + } IPage iPage = new Query().getPage(params); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper = PageQueryHelper.createPageQueryWrapper(queryWrapper, params, "a."); @@ -53,6 +60,12 @@ public class TeacherRepositoryImpl extends BaseRepositoryImpl list(Map params) { + if(params.get("corpFlag") != null){ + Integer corpFlag = (Integer)params.get("corpFlag"); + if(corpFlag == 2){ + params.put("eqCorpinfoId", AuthContext.getTenantId()); + } + } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper = PageQueryHelper.createPageQueryWrapper(queryWrapper, params, "a."); queryWrapper.eq("a.delete_enum", "FALSE"); diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/VideoCoursewareRepositoryImpl.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/VideoCoursewareRepositoryImpl.java index 46806bd..d0f1a7f 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/VideoCoursewareRepositoryImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/VideoCoursewareRepositoryImpl.java @@ -14,6 +14,7 @@ import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.Map; import java.util.List; @@ -32,24 +33,40 @@ public class VideoCoursewareRepositoryImpl extends BaseRepositoryImpl listPage(Map params) { IPage iPage = new Query().getPage(params); QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper = PageQueryHelper.createPageQueryWrapper(queryWrapper, params); - queryWrapper.orderByDesc("create_time"); - IPage result = videoCoursewareMapper.selectPage(iPage, queryWrapper); + queryWrapper = PageQueryHelper.createPageQueryWrapper(queryWrapper, params, "a."); + queryWrapper.eq("a.delete_enum", "FALSE"); + queryWrapper.orderByDesc("a.create_time"); + IPage result = videoCoursewareMapper.getVideoCoursewarePage(iPage, queryWrapper); return PageHelper.pageToResponse(result, result.getRecords()); } @Override public List list(Map params) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper = PageQueryHelper.createPageQueryWrapper(queryWrapper, params); - queryWrapper.orderByDesc("create_time"); - List result = videoCoursewareMapper.selectList(queryWrapper); + queryWrapper = PageQueryHelper.createPageQueryWrapper(queryWrapper, params, "a."); + queryWrapper.eq("a.delete_enum", "FALSE"); + queryWrapper.orderByDesc("a.create_time"); + List result = videoCoursewareMapper.getVideoCoursewareList(queryWrapper); return result; } + @Override + public List listByTeacherId(String teacherId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("teacher_id", teacherId); + return list(queryWrapper); + } + + @Override + public List listByTeacherIds(List teacherIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("teacher_id", teacherIds); + return list(queryWrapper); + } + @Override public SingleResponse getInfoById(Long id) { - return SingleResponse.of(videoCoursewareMapper.selectById(id)); + return SingleResponse.of(videoCoursewareMapper.getInfoById(id)); } } diff --git a/web-infrastructure/src/main/resources/mapper/VideoCoursewareMapper.xml b/web-infrastructure/src/main/resources/mapper/VideoCoursewareMapper.xml index 52d0c61..61f1902 100644 --- a/web-infrastructure/src/main/resources/mapper/VideoCoursewareMapper.xml +++ b/web-infrastructure/src/main/resources/mapper/VideoCoursewareMapper.xml @@ -3,5 +3,51 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + +