教育资源修改
parent
bc2aacc3be
commit
916ec7e066
|
|
@ -5,10 +5,7 @@ import com.alibaba.cola.dto.PageResponse;
|
||||||
import com.alibaba.cola.dto.Response;
|
import com.alibaba.cola.dto.Response;
|
||||||
import com.alibaba.cola.dto.SingleResponse;
|
import com.alibaba.cola.dto.SingleResponse;
|
||||||
import com.zcloud.edu.api.resource.ExamPaperServiceI;
|
import com.zcloud.edu.api.resource.ExamPaperServiceI;
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperAddCmd;
|
import com.zcloud.edu.dto.resource.*;
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperPageQry;
|
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperRemoveCmd;
|
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperUpdateCmd;
|
|
||||||
import com.zcloud.edu.dto.clientobject.resource.ExamPaperCO;
|
import com.zcloud.edu.dto.clientobject.resource.ExamPaperCO;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
|
@ -32,9 +29,14 @@ public class ExamPaperController {
|
||||||
|
|
||||||
@ApiOperation("新增试卷")
|
@ApiOperation("新增试卷")
|
||||||
@PostMapping("/save")
|
@PostMapping("/save")
|
||||||
public SingleResponse<ExamPaperCO> add(@Validated ExamPaperAddCmd cmd) {
|
public SingleResponse<ExamPaperCO> add(@Validated @RequestBody ExamPaperAddCmd cmd) {
|
||||||
return examPaperService.add(cmd);
|
return examPaperService.add(cmd);
|
||||||
}
|
}
|
||||||
|
@ApiOperation("新增继承试卷")
|
||||||
|
@PostMapping("/saveInherit")
|
||||||
|
public SingleResponse<ExamPaperCO> saveInherit(@Validated @RequestBody ExamPaperAddInheritCmd cmd) {
|
||||||
|
return examPaperService.saveInherit(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation("试卷分页")
|
@ApiOperation("试卷分页")
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
|
|
@ -51,8 +53,8 @@ public class ExamPaperController {
|
||||||
|
|
||||||
@ApiOperation("上架,下架")
|
@ApiOperation("上架,下架")
|
||||||
@PostMapping("/editSellFlag")
|
@PostMapping("/editSellFlag")
|
||||||
public SingleResponse editSellFlag(@Validated @RequestBody ExamPaperUpdateCmd examPaperUpdateCmd) {
|
public SingleResponse editSellFlag(@Validated @RequestBody ExamPaperUpdateSellFlagCmd examPaperUpdateSellFlagCmd) {
|
||||||
examPaperService.editSellFlag(examPaperUpdateCmd);
|
examPaperService.editSellFlag(examPaperUpdateSellFlagCmd);
|
||||||
return SingleResponse.buildSuccess();
|
return SingleResponse.buildSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package com.zcloud.edu.command.convertor.resource;
|
package com.zcloud.edu.command.convertor.resource;
|
||||||
|
|
||||||
|
import com.zcloud.edu.domain.model.resource.QuestionE;
|
||||||
import com.zcloud.edu.dto.clientobject.resource.QuestionCO;
|
import com.zcloud.edu.dto.clientobject.resource.QuestionCO;
|
||||||
|
import com.zcloud.edu.dto.resource.QuestionAddInheritCmd;
|
||||||
import com.zcloud.edu.persistence.dataobject.QuestionDO;
|
import com.zcloud.edu.persistence.dataobject.QuestionDO;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
|
|
||||||
|
|
@ -20,5 +22,7 @@ public interface QuestionCoConvertor {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<QuestionCO> converDOsToCOs(List<QuestionDO> questionDOs);
|
List<QuestionCO> converDOsToCOs(List<QuestionDO> questionDOs);
|
||||||
|
|
||||||
|
List<QuestionE> converCmdsToEs(List<QuestionAddInheritCmd> questionList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,24 @@
|
||||||
package com.zcloud.edu.command.query.resource;
|
package com.zcloud.edu.command.query.resource;
|
||||||
|
|
||||||
|
import com.alibaba.cloud.commons.lang.StringUtils;
|
||||||
import com.alibaba.cola.dto.PageResponse;
|
import com.alibaba.cola.dto.PageResponse;
|
||||||
import com.jjb.saas.framework.auth.utils.AuthContext;
|
import com.jjb.saas.framework.auth.utils.AuthContext;
|
||||||
import com.zcloud.edu.command.convertor.resource.CurriculumChapterCoConvertor;
|
import com.zcloud.edu.command.convertor.resource.CurriculumChapterCoConvertor;
|
||||||
import com.zcloud.edu.command.convertor.resource.CurriculumCoConvertor;
|
import com.zcloud.edu.command.convertor.resource.CurriculumCoConvertor;
|
||||||
|
import com.zcloud.edu.command.convertor.resource.VideoCoursewareCoConvertor;
|
||||||
import com.zcloud.edu.domain.enums.CorpTypeEnum;
|
import com.zcloud.edu.domain.enums.CorpTypeEnum;
|
||||||
|
import com.zcloud.edu.dto.clientobject.resource.VideoCoursewareCO;
|
||||||
import com.zcloud.edu.dto.resource.CurriculumPageQry;
|
import com.zcloud.edu.dto.resource.CurriculumPageQry;
|
||||||
import com.zcloud.edu.dto.clientobject.resource.CurriculumCO;
|
import com.zcloud.edu.dto.clientobject.resource.CurriculumCO;
|
||||||
import com.zcloud.edu.dto.clientobject.resource.CurriculumChapterCO;
|
import com.zcloud.edu.dto.clientobject.resource.CurriculumChapterCO;
|
||||||
import com.zcloud.edu.persistence.dataobject.CorpInfoDO;
|
import com.zcloud.edu.persistence.dataobject.CorpInfoDO;
|
||||||
import com.zcloud.edu.persistence.dataobject.CurriculumChapterDO;
|
import com.zcloud.edu.persistence.dataobject.CurriculumChapterDO;
|
||||||
import com.zcloud.edu.persistence.dataobject.CurriculumDO;
|
import com.zcloud.edu.persistence.dataobject.CurriculumDO;
|
||||||
|
import com.zcloud.edu.persistence.dataobject.VideoCoursewareDO;
|
||||||
import com.zcloud.edu.persistence.repository.resource.CorpInfoRepository;
|
import com.zcloud.edu.persistence.repository.resource.CorpInfoRepository;
|
||||||
import com.zcloud.edu.persistence.repository.resource.CurriculumChapterRepository;
|
import com.zcloud.edu.persistence.repository.resource.CurriculumChapterRepository;
|
||||||
import com.zcloud.edu.persistence.repository.resource.CurriculumRepository;
|
import com.zcloud.edu.persistence.repository.resource.CurriculumRepository;
|
||||||
|
import com.zcloud.edu.persistence.repository.resource.VideoCoursewareRepository;
|
||||||
import com.zcloud.gbscommon.utils.PageQueryHelper;
|
import com.zcloud.gbscommon.utils.PageQueryHelper;
|
||||||
import com.zcloud.gbscommon.utils.Tools;
|
import com.zcloud.gbscommon.utils.Tools;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
|
@ -22,6 +27,7 @@ import org.springframework.stereotype.Component;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -39,6 +45,8 @@ public class CurriculumQueryExe {
|
||||||
private final CurriculumChapterRepository curriculumChapterRepository;
|
private final CurriculumChapterRepository curriculumChapterRepository;
|
||||||
private final CurriculumChapterCoConvertor curriculumChapterCoConvertor;
|
private final CurriculumChapterCoConvertor curriculumChapterCoConvertor;
|
||||||
private final CorpInfoRepository corpInfoRepository;
|
private final CorpInfoRepository corpInfoRepository;
|
||||||
|
private final VideoCoursewareRepository videoCoursewareRepository;
|
||||||
|
private final VideoCoursewareCoConvertor videoCoursewareCoConvertor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页
|
* 分页
|
||||||
|
|
@ -65,17 +73,24 @@ public class CurriculumQueryExe {
|
||||||
return PageResponse.of(null, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
return PageResponse.of(null, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
||||||
}
|
}
|
||||||
List<CurriculumCO> examCenterCOS = curriculumCoConvertor.converDOsToCOs(pageResponse.getData());
|
List<CurriculumCO> examCenterCOS = curriculumCoConvertor.converDOsToCOs(pageResponse.getData());
|
||||||
examCenterCOS.forEach(examCenterCO -> {
|
examCenterCOS.forEach(videoCoursewareCO -> {
|
||||||
if(AuthContext.getUserId().equals(examCenterCO.getCreateId())){
|
//如果是企业,可以看本企业下所有的,如果是个人,只能看个人的,判断登录的账号是企业主账号还是个人
|
||||||
//是本人
|
Boolean isCorpAccount = corpInfoRepository.checkCorp();
|
||||||
examCenterCO.setIsUserCreate(true);
|
// 企业账户:检查租户ID匹配
|
||||||
|
if (isCorpAccount && AuthContext.getTenantId().equals(videoCoursewareCO.getTenantId())) {
|
||||||
|
videoCoursewareCO.setIsUserCreate(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 个人账户:检查创建者ID匹配
|
||||||
|
if (!isCorpAccount && videoCoursewareCO.getCreateId().equals(AuthContext.getUserId())) {
|
||||||
|
videoCoursewareCO.setIsUserCreate(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
public CurriculumCO getInfoById(Long id) {
|
public CurriculumCO getInfoById(Long id) {
|
||||||
CurriculumDO curriculumDO = curriculumRepository.getById(id);
|
CurriculumDO curriculumDO = curriculumRepository.getInfoById(id);
|
||||||
if(curriculumDO == null){
|
if(curriculumDO == null){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
@ -84,9 +99,42 @@ public class CurriculumQueryExe {
|
||||||
|
|
||||||
List<CurriculumChapterDO> curriculumChapterDOList = curriculumChapterRepository.getListByCurriculumId(curriculumCO.getCurriculumId());
|
List<CurriculumChapterDO> curriculumChapterDOList = curriculumChapterRepository.getListByCurriculumId(curriculumCO.getCurriculumId());
|
||||||
List<CurriculumChapterCO> curriculumChapterCOList = curriculumChapterCoConvertor.converDOsToCOs(curriculumChapterDOList);
|
List<CurriculumChapterCO> curriculumChapterCOList = curriculumChapterCoConvertor.converDOsToCOs(curriculumChapterDOList);
|
||||||
|
|
||||||
|
|
||||||
|
setVideoCoursewareInfo(curriculumChapterCOList);
|
||||||
List<CurriculumChapterCO> treeList = Tools.buildEntityTree(curriculumChapterCOList, "curriculumChapterId", "parentId", "childCurriculumChapterCOList", "0");
|
List<CurriculumChapterCO> treeList = Tools.buildEntityTree(curriculumChapterCOList, "curriculumChapterId", "parentId", "childCurriculumChapterCOList", "0");
|
||||||
curriculumCO.setCurriculumChapterCOList(treeList);
|
curriculumCO.setCurriculumChapterCOList(treeList);
|
||||||
return curriculumCO;
|
return curriculumCO;
|
||||||
}
|
}
|
||||||
|
private void setVideoCoursewareInfo(List<CurriculumChapterCO> chapterList) {
|
||||||
|
// 获取所有视频课件ID
|
||||||
|
List<String> videoCoursewareIdList = chapterList.stream()
|
||||||
|
.map(CurriculumChapterCO::getVideoCoursewareId)
|
||||||
|
.filter(StringUtils::isNotEmpty)
|
||||||
|
.distinct() // 去重
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (videoCoursewareIdList.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<VideoCoursewareDO> videoCoursewareDOList = videoCoursewareRepository.getListByVideoIdList(videoCoursewareIdList);
|
||||||
|
if (videoCoursewareDOList == null || videoCoursewareDOList.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建ID到对象的映射
|
||||||
|
Map<String, VideoCoursewareCO> videoCoursewareMap = videoCoursewareCoConvertor.converDOsToCOs(videoCoursewareDOList)
|
||||||
|
.stream()
|
||||||
|
.filter(vco -> vco.getVideoCoursewareId() != null)
|
||||||
|
.collect(Collectors.toMap(VideoCoursewareCO::getVideoCoursewareId, Function.identity()));
|
||||||
|
|
||||||
|
// 设置每个章节的视频课件信息
|
||||||
|
chapterList.forEach(chapter -> {
|
||||||
|
String videoId = chapter.getVideoCoursewareId();
|
||||||
|
if (StringUtils.isNotEmpty(videoId)) {
|
||||||
|
chapter.setVideoCoursewareCO(videoCoursewareMap.get(videoId));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,14 +61,24 @@ public class ExamPaperQueryExe {
|
||||||
params.put("inCorpinfoId", inCorpinfoId);
|
params.put("inCorpinfoId", inCorpinfoId);
|
||||||
}
|
}
|
||||||
PageResponse<ExamPaperDO> pageResponse = examPaperRepository.listPage(params);
|
PageResponse<ExamPaperDO> pageResponse = examPaperRepository.listPage(params);
|
||||||
List<ExamPaperCO> examCenterCOS = examPaperCoConvertor.converDOsToCOs(pageResponse.getData());
|
List<ExamPaperCO> videoCoursewareCOList = examPaperCoConvertor.converDOsToCOs(pageResponse.getData());
|
||||||
examCenterCOS.forEach(examCenterCO -> {
|
videoCoursewareCOList.forEach(videoCoursewareCO -> {
|
||||||
if(AuthContext.getUserId().equals(examCenterCO.getCreateId())){
|
//如果是企业,可以看本企业下所有的,如果是个人,只能看个人的,判断登录的账号是企业主账号还是个人
|
||||||
//是本人
|
Boolean isCorpAccount = corpInfoRepository.checkCorp();
|
||||||
examCenterCO.setIsUserCreate(true);
|
|
||||||
|
// 企业账户:检查租户ID匹配
|
||||||
|
if (isCorpAccount && AuthContext.getTenantId().equals(videoCoursewareCO.getTenantId())) {
|
||||||
|
videoCoursewareCO.setIsUserCreate(true);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 个人账户:检查创建者ID匹配
|
||||||
|
if (!isCorpAccount && videoCoursewareCO.getCreateId().equals(AuthContext.getUserId())) {
|
||||||
|
videoCoursewareCO.setIsUserCreate(true);
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
return PageResponse.of(videoCoursewareCOList, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
public ExamPaperCO getInfoById(Long id) {
|
public ExamPaperCO getInfoById(Long id) {
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,17 @@ package com.zcloud.edu.command.query.resource;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import com.alibaba.cola.dto.MultiResponse;
|
import com.alibaba.cola.dto.MultiResponse;
|
||||||
|
import com.jjb.saas.framework.auth.utils.AuthContext;
|
||||||
import com.zcloud.edu.command.convertor.resource.TeacherCoConvertor;
|
import com.zcloud.edu.command.convertor.resource.TeacherCoConvertor;
|
||||||
|
import com.zcloud.edu.domain.enums.CorpTypeEnum;
|
||||||
import com.zcloud.edu.dto.resource.TeacherListQry;
|
import com.zcloud.edu.dto.resource.TeacherListQry;
|
||||||
import com.zcloud.edu.dto.resource.TeacherPageQry;
|
import com.zcloud.edu.dto.resource.TeacherPageQry;
|
||||||
import com.zcloud.edu.dto.clientobject.resource.TeacherCO;
|
import com.zcloud.edu.dto.clientobject.resource.TeacherCO;
|
||||||
import com.zcloud.edu.dto.clientobject.resource.TeacherCertificateCO;
|
import com.zcloud.edu.dto.clientobject.resource.TeacherCertificateCO;
|
||||||
|
import com.zcloud.edu.persistence.dataobject.CorpInfoDO;
|
||||||
import com.zcloud.edu.persistence.dataobject.TeacherCertificateDO;
|
import com.zcloud.edu.persistence.dataobject.TeacherCertificateDO;
|
||||||
import com.zcloud.edu.persistence.dataobject.TeacherDO;
|
import com.zcloud.edu.persistence.dataobject.TeacherDO;
|
||||||
|
import com.zcloud.edu.persistence.repository.resource.CorpInfoRepository;
|
||||||
import com.zcloud.edu.persistence.repository.resource.TeacherCertificateRepository;
|
import com.zcloud.edu.persistence.repository.resource.TeacherCertificateRepository;
|
||||||
import com.zcloud.edu.persistence.repository.resource.TeacherRepository;
|
import com.zcloud.edu.persistence.repository.resource.TeacherRepository;
|
||||||
import com.zcloud.gbscommon.utils.PageQueryHelper;
|
import com.zcloud.gbscommon.utils.PageQueryHelper;
|
||||||
|
|
@ -18,8 +22,10 @@ import lombok.AllArgsConstructor;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -34,6 +40,7 @@ public class TeacherQueryExe {
|
||||||
private final TeacherRepository teacherRepository;
|
private final TeacherRepository teacherRepository;
|
||||||
private final TeacherCoConvertor teacherCoConvertor;
|
private final TeacherCoConvertor teacherCoConvertor;
|
||||||
private final TeacherCertificateRepository teacherCertificateRepository;
|
private final TeacherCertificateRepository teacherCertificateRepository;
|
||||||
|
private final CorpInfoRepository corpInfoRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页
|
* 分页
|
||||||
|
|
@ -49,6 +56,12 @@ public class TeacherQueryExe {
|
||||||
|
|
||||||
public MultiResponse<TeacherCO> execute(TeacherListQry qry) {
|
public MultiResponse<TeacherCO> execute(TeacherListQry qry) {
|
||||||
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
|
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
|
||||||
|
//判断企业是股份端还是企业端
|
||||||
|
boolean supper = corpInfoRepository.isSupper();
|
||||||
|
if(!supper){
|
||||||
|
//不是股份端,显示 本企业的
|
||||||
|
params.put("corpinfoId", AuthContext.getTenantId());
|
||||||
|
}
|
||||||
List<TeacherDO> list = teacherRepository.list(params);
|
List<TeacherDO> list = teacherRepository.list(params);
|
||||||
List<TeacherCO> examCenterCOS = teacherCoConvertor.converDOsToCOs(list);
|
List<TeacherCO> examCenterCOS = teacherCoConvertor.converDOsToCOs(list);
|
||||||
return MultiResponse.of(examCenterCOS);
|
return MultiResponse.of(examCenterCOS);
|
||||||
|
|
|
||||||
|
|
@ -61,17 +61,31 @@ public class VideoCoursewareQueryExe {
|
||||||
if(pageResponse.getData() == null){
|
if(pageResponse.getData() == null){
|
||||||
return PageResponse.of(null, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
return PageResponse.of(null, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
||||||
}
|
}
|
||||||
List<VideoCoursewareCO> examCenterCOS = videoCoursewareCoConvertor.converDOsToCOs(pageResponse.getData());
|
List<VideoCoursewareCO> videoCoursewareCOList = videoCoursewareCoConvertor.converDOsToCOs(pageResponse.getData());
|
||||||
examCenterCOS.forEach(examCenterCO -> {
|
videoCoursewareCOList.forEach(videoCoursewareCO -> {
|
||||||
if(examCenterCO.getCreateId().equals(AuthContext.getUserId())){
|
//如果是企业,可以看本企业下所有的,如果是个人,只能看个人的,判断登录的账号是企业主账号还是个人
|
||||||
//是本人
|
Boolean isCorpAccount = corpInfoRepository.checkCorp();
|
||||||
examCenterCO.setIsUserCreate(true);
|
|
||||||
|
// 企业账户:检查租户ID匹配
|
||||||
|
if (isCorpAccount && AuthContext.getTenantId().equals(videoCoursewareCO.getTenantId())) {
|
||||||
|
videoCoursewareCO.setIsUserCreate(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 个人账户:检查创建者ID匹配
|
||||||
|
if (!isCorpAccount && videoCoursewareCO.getCreateId().equals(AuthContext.getUserId())) {
|
||||||
|
videoCoursewareCO.setIsUserCreate(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 教师账户:检查用户ID匹配(允许编辑自己的课件)
|
||||||
|
if (AuthContext.getUserId().equals(videoCoursewareCO.getUserId())) {
|
||||||
|
videoCoursewareCO.setIsUserCreate(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
return PageResponse.of(videoCoursewareCOList, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
public MultiResponse<VideoCoursewareCO> execute(VideoCoursewareListQry qry) {
|
public MultiResponse<VideoCoursewareCO> execute(VideoCoursewareListQry qry) {
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,7 @@ public class CurriculumUpdateExe {
|
||||||
|
|
||||||
public void editState(CurriculumUpdateStateCmd cmd) {
|
public void editState(CurriculumUpdateStateCmd cmd) {
|
||||||
List<String> errorList = new ArrayList<>();
|
List<String> errorList = new ArrayList<>();
|
||||||
for (Long id : cmd.getId()) {
|
for (Long id : cmd.getIds()) {
|
||||||
CurriculumDO curriculumDO = curriculumRepository.getById(id);
|
CurriculumDO curriculumDO = curriculumRepository.getById(id);
|
||||||
//企业端禁用:所属单位为股份的不能禁用
|
//企业端禁用:所属单位为股份的不能禁用
|
||||||
//股份端禁用:所属单位为各企业的不能禁用
|
//股份端禁用:所属单位为各企业的不能禁用
|
||||||
|
|
@ -153,7 +153,7 @@ public class CurriculumUpdateExe {
|
||||||
if(CollUtil.isNotEmpty(errorList)){
|
if(CollUtil.isNotEmpty(errorList)){
|
||||||
throw new BizException(errorList+"不能修改状态");
|
throw new BizException(errorList+"不能修改状态");
|
||||||
}
|
}
|
||||||
curriculumRepository.updateState(cmd.getId(), cmd.getSellFlag());
|
curriculumRepository.updateState(cmd.getIds(), cmd.getSellFlag());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,14 @@ package com.zcloud.edu.command.resource;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import com.alibaba.cola.exception.BizException;
|
import com.alibaba.cola.exception.BizException;
|
||||||
|
import com.zcloud.edu.command.convertor.resource.QuestionCoConvertor;
|
||||||
import com.zcloud.edu.domain.enums.CoursewareTypeEnum;
|
import com.zcloud.edu.domain.enums.CoursewareTypeEnum;
|
||||||
import com.zcloud.edu.domain.gateway.resource.ExamPaperGateway;
|
import com.zcloud.edu.domain.gateway.resource.ExamPaperGateway;
|
||||||
import com.zcloud.edu.domain.model.resource.ExamPaperE;
|
import com.zcloud.edu.domain.model.resource.ExamPaperE;
|
||||||
import com.zcloud.edu.domain.model.resource.QuestionE;
|
import com.zcloud.edu.domain.model.resource.QuestionE;
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperAddCmd;
|
import com.zcloud.edu.dto.resource.ExamPaperAddCmd;
|
||||||
|
import com.zcloud.edu.dto.resource.ExamPaperAddInheritCmd;
|
||||||
|
import com.zcloud.edu.dto.resource.QuestionAddInheritCmd;
|
||||||
import com.zcloud.edu.persistence.dataobject.QuestionDO;
|
import com.zcloud.edu.persistence.dataobject.QuestionDO;
|
||||||
import com.zcloud.edu.persistence.repository.resource.QuestionRepository;
|
import com.zcloud.edu.persistence.repository.resource.QuestionRepository;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
|
@ -29,6 +32,7 @@ import java.util.List;
|
||||||
public class ExamPaperAddExe {
|
public class ExamPaperAddExe {
|
||||||
private final ExamPaperGateway examPaperGateway;
|
private final ExamPaperGateway examPaperGateway;
|
||||||
private final QuestionRepository questionRepository;
|
private final QuestionRepository questionRepository;
|
||||||
|
private final QuestionCoConvertor questionCoConvertor;
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean execute(ExamPaperAddCmd cmd) {
|
public boolean execute(ExamPaperAddCmd cmd) {
|
||||||
|
|
@ -65,5 +69,45 @@ public class ExamPaperAddExe {
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Boolean saveInherit(ExamPaperAddInheritCmd cmd) {
|
||||||
|
ExamPaperE examPaperE = new ExamPaperE();
|
||||||
|
BeanUtils.copyProperties(cmd, examPaperE);
|
||||||
|
boolean res = false;
|
||||||
|
try {
|
||||||
|
res = examPaperGateway.add(examPaperE);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
if (!res) {
|
||||||
|
throw new BizException("保存失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<QuestionAddInheritCmd> questionList = cmd.getQuestionList();
|
||||||
|
List<QuestionE> questionES =questionCoConvertor.converCmdsToEs(questionList);
|
||||||
|
questionES.forEach(info->{
|
||||||
|
info.setExamPaperId(examPaperE.getExamPaperId());
|
||||||
|
});
|
||||||
|
BigDecimal examScore = questionES.stream().map(QuestionE::getScore).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
//判断总分数量是否一致
|
||||||
|
if (examScore.compareTo(examPaperE.getExamScore())!=0) {
|
||||||
|
throw new BizException("总分数和试题分数不一致");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量插入
|
||||||
|
boolean questionRes = false;
|
||||||
|
try {
|
||||||
|
questionRes = questionRepository.saveBatch(BeanUtil.copyToList(questionES, QuestionDO.class));
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
if (!questionRes) {
|
||||||
|
throw new BizException("试题导入失败");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ public class ExamPaperRemoveExe {
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean execute(ExamPaperRemoveCmd examPaperRemoveCmd) {
|
public boolean execute(ExamPaperRemoveCmd examPaperRemoveCmd) {
|
||||||
|
|
||||||
List<ExamPaperDO> examPaperDOList =examPaperRepository.getListByIdList(examPaperRemoveCmd.getId());
|
List<ExamPaperDO> examPaperDOList =examPaperRepository.getListByIdList(examPaperRemoveCmd.getIds());
|
||||||
if(CollUtil.isEmpty(examPaperDOList)){
|
if(CollUtil.isEmpty(examPaperDOList)){
|
||||||
throw new RuntimeException("试卷不存在");
|
throw new RuntimeException("试卷不存在");
|
||||||
}
|
}
|
||||||
|
|
@ -100,7 +100,7 @@ public class ExamPaperRemoveExe {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
boolean res = examPaperGateway.deletedExamPaperByIds(examPaperRemoveCmd.getId());
|
boolean res = examPaperGateway.deletedExamPaperByIds(examPaperRemoveCmd.getIds());
|
||||||
if (!res) {
|
if (!res) {
|
||||||
throw new BizException("删除失败");
|
throw new BizException("删除失败");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import com.zcloud.edu.domain.gateway.resource.ExamPaperGateway;
|
||||||
import com.zcloud.edu.domain.model.resource.ExamPaperE;
|
import com.zcloud.edu.domain.model.resource.ExamPaperE;
|
||||||
import com.zcloud.edu.domain.model.resource.QuestionE;
|
import com.zcloud.edu.domain.model.resource.QuestionE;
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperUpdateCmd;
|
import com.zcloud.edu.dto.resource.ExamPaperUpdateCmd;
|
||||||
|
import com.zcloud.edu.dto.resource.ExamPaperUpdateSellFlagCmd;
|
||||||
import com.zcloud.edu.persistence.dataobject.ExamPaperDO;
|
import com.zcloud.edu.persistence.dataobject.ExamPaperDO;
|
||||||
import com.zcloud.edu.persistence.dataobject.QuestionDO;
|
import com.zcloud.edu.persistence.dataobject.QuestionDO;
|
||||||
import com.zcloud.edu.persistence.repository.resource.CorpInfoRepository;
|
import com.zcloud.edu.persistence.repository.resource.CorpInfoRepository;
|
||||||
|
|
@ -52,8 +53,8 @@ public class ExamPaperUpdateExe {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void editSellFlag(ExamPaperUpdateCmd examPaperUpdateCmd) {
|
public void editSellFlag(ExamPaperUpdateSellFlagCmd examPaperUpdateSellFlagCmd) {
|
||||||
ExamPaperDO examPaperDO = examPaperRepository.getById(examPaperUpdateCmd.getId());
|
ExamPaperDO examPaperDO = examPaperRepository.getById(examPaperUpdateSellFlagCmd.getId());
|
||||||
//企业端禁用:所属单位为股份的不能禁用
|
//企业端禁用:所属单位为股份的不能禁用
|
||||||
//股份端禁用:所属单位为各企业的不能禁用
|
//股份端禁用:所属单位为各企业的不能禁用
|
||||||
Boolean b = corpInfoRepository.checkSupper(examPaperDO.getCorpinfoId());
|
Boolean b = corpInfoRepository.checkSupper(examPaperDO.getCorpinfoId());
|
||||||
|
|
@ -70,7 +71,7 @@ public class ExamPaperUpdateExe {
|
||||||
}
|
}
|
||||||
|
|
||||||
ExamPaperE examPaperE = new ExamPaperE();
|
ExamPaperE examPaperE = new ExamPaperE();
|
||||||
BeanUtils.copyProperties(examPaperUpdateCmd, examPaperE);
|
BeanUtils.copyProperties(examPaperUpdateSellFlagCmd, examPaperE);
|
||||||
boolean res = examPaperGateway.update(examPaperE);
|
boolean res = examPaperGateway.update(examPaperE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,7 @@ import com.zcloud.edu.command.resource.ExamPaperAddExe;
|
||||||
import com.zcloud.edu.command.resource.ExamPaperRemoveExe;
|
import com.zcloud.edu.command.resource.ExamPaperRemoveExe;
|
||||||
import com.zcloud.edu.command.resource.ExamPaperUpdateExe;
|
import com.zcloud.edu.command.resource.ExamPaperUpdateExe;
|
||||||
import com.zcloud.edu.command.query.resource.ExamPaperQueryExe;
|
import com.zcloud.edu.command.query.resource.ExamPaperQueryExe;
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperAddCmd;
|
import com.zcloud.edu.dto.resource.*;
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperPageQry;
|
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperRemoveCmd;
|
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperUpdateCmd;
|
|
||||||
import com.zcloud.edu.dto.clientobject.resource.ExamPaperCO;
|
import com.zcloud.edu.dto.clientobject.resource.ExamPaperCO;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -64,8 +61,14 @@ public class ExamPaperServiceImpl implements ExamPaperServiceI {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void editSellFlag(ExamPaperUpdateCmd examPaperUpdateCmd) {
|
public void editSellFlag(ExamPaperUpdateSellFlagCmd examPaperUpdateSellFlagCmd) {
|
||||||
examPaperUpdateExe.editSellFlag(examPaperUpdateCmd);
|
examPaperUpdateExe.editSellFlag(examPaperUpdateSellFlagCmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SingleResponse<ExamPaperCO> saveInherit(ExamPaperAddInheritCmd cmd) {
|
||||||
|
examPaperAddExe.saveInherit(cmd);
|
||||||
|
return SingleResponse.buildSuccess();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,7 @@ package com.zcloud.edu.api.resource;
|
||||||
|
|
||||||
import com.alibaba.cola.dto.PageResponse;
|
import com.alibaba.cola.dto.PageResponse;
|
||||||
import com.alibaba.cola.dto.SingleResponse;
|
import com.alibaba.cola.dto.SingleResponse;
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperAddCmd;
|
import com.zcloud.edu.dto.resource.*;
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperPageQry;
|
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperRemoveCmd;
|
|
||||||
import com.zcloud.edu.dto.resource.ExamPaperUpdateCmd;
|
|
||||||
import com.zcloud.edu.dto.clientobject.resource.ExamPaperCO;
|
import com.zcloud.edu.dto.clientobject.resource.ExamPaperCO;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
|
@ -28,6 +25,8 @@ public interface ExamPaperServiceI {
|
||||||
|
|
||||||
ExamPaperCO getInfoById(Long id);
|
ExamPaperCO getInfoById(Long id);
|
||||||
|
|
||||||
void editSellFlag(ExamPaperUpdateCmd examPaperUpdateCmd);
|
void editSellFlag(ExamPaperUpdateSellFlagCmd examPaperUpdateSellFlagCmd);
|
||||||
|
|
||||||
|
SingleResponse<ExamPaperCO> saveInherit(ExamPaperAddInheritCmd cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,11 @@
|
||||||
package com.zcloud.edu.dto.clientobject.resource;
|
package com.zcloud.edu.dto.clientobject.resource;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -51,14 +54,17 @@ public class CurriculumCO {
|
||||||
|
|
||||||
@ApiModelProperty(value = "课件数量")
|
@ApiModelProperty(value = "课件数量")
|
||||||
private Integer chapterCount;
|
private Integer chapterCount;
|
||||||
//总视频时长
|
|
||||||
@ApiModelProperty(value = "总视频时长")
|
|
||||||
private Integer videoTime;
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "是否是当前用户创建的数据")
|
@ApiModelProperty(value = "是否是当前用户创建的数据")
|
||||||
private Boolean isUserCreate = false;
|
private Boolean isUserCreate = false;
|
||||||
|
|
||||||
@ApiModelProperty(value = "课程目录")
|
@ApiModelProperty(value = "课程目录")
|
||||||
private List<CurriculumChapterCO> curriculumChapterCOList;
|
private List<CurriculumChapterCO> curriculumChapterCOList;
|
||||||
|
@ApiModelProperty(value = "总视频时长")
|
||||||
|
private BigDecimal videoTotalTime;
|
||||||
|
private Long tenantId;
|
||||||
|
@ApiModelProperty(value = "创建时间")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime createTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,8 @@ public class CurriculumChapterCO {
|
||||||
//上级ID
|
//上级ID
|
||||||
@ApiModelProperty(value = "上级ID")
|
@ApiModelProperty(value = "上级ID")
|
||||||
private String parentId;
|
private String parentId;
|
||||||
|
@ApiModelProperty(value = "课件信息")
|
||||||
|
private VideoCoursewareCO videoCoursewareCO;
|
||||||
|
|
||||||
@ApiModelProperty(value = "子课程目录")
|
@ApiModelProperty(value = "子课程目录")
|
||||||
private List<CurriculumChapterCO> childCurriculumChapterCOList;
|
private List<CurriculumChapterCO> childCurriculumChapterCOList;
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,7 @@ public class ExamPaperCO {
|
||||||
@ApiModelProperty(value = "是否是当前用户创建的数据")
|
@ApiModelProperty(value = "是否是当前用户创建的数据")
|
||||||
private Boolean isUserCreate = false;
|
private Boolean isUserCreate = false;
|
||||||
|
|
||||||
// private List<QuestionCO> questionCOList;
|
|
||||||
|
private Long tenantId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -77,5 +77,9 @@ public class VideoCoursewareCO extends ClientObject {
|
||||||
private LocalDateTime createTime;
|
private LocalDateTime createTime;
|
||||||
@ApiModelProperty(value = "习题数")
|
@ApiModelProperty(value = "习题数")
|
||||||
private Integer questionCount;
|
private Integer questionCount;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "用户id")
|
||||||
|
private Long userId;
|
||||||
|
private Long tenantId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ public class CurriculumUpdateStateCmd {
|
||||||
|
|
||||||
@ApiModelProperty(value = "id", name = "id", required = true)
|
@ApiModelProperty(value = "id", name = "id", required = true)
|
||||||
@NotNull(message = "id不能为空")
|
@NotNull(message = "id不能为空")
|
||||||
private List<Long> id;
|
private List<Long> ids;
|
||||||
|
|
||||||
@ApiModelProperty(value = "课程状态 1-上架 0-下架", name = "state", required = true)
|
@ApiModelProperty(value = "课程状态 1-上架 0-下架", name = "state", required = true)
|
||||||
@NotNull(message = "课程状态不能为空")
|
@NotNull(message = "课程状态不能为空")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
package com.zcloud.edu.dto.resource;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* web-client
|
||||||
|
*
|
||||||
|
* @Author zhaokai
|
||||||
|
* @Date 2026-01-09 17:04:42
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ExamPaperAddInheritCmd {
|
||||||
|
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "试卷名称", name = "examName", required = true)
|
||||||
|
@NotEmpty(message = "试卷名称不能为空")
|
||||||
|
private String examName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "试卷总分数", name = "examScore", required = true)
|
||||||
|
@NotNull(message = "试卷总分数不能为空")
|
||||||
|
private BigDecimal examScore;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "合格分数", name = "passScore", required = true)
|
||||||
|
@NotNull(message = "合格分数不能为空")
|
||||||
|
private BigDecimal passScore;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "是否上架(0否 1是)", name = "sellFlag", required = true)
|
||||||
|
@NotNull(message = "是否上架(0否 1是)不能为空")
|
||||||
|
private Integer sellFlag;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "考试时长(分钟)", name = "examTime", required = true)
|
||||||
|
@NotNull(message = "考试时长(分钟)不能为空")
|
||||||
|
private Integer examTime;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "试卷类型 1-自建试卷 2-班级中自动生成试卷", name = "type", required = true)
|
||||||
|
@NotNull(message = "试卷类型 1-自建试卷 2-班级中自动生成试卷不能为空")
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "试卷信息", name = "type", required = true)
|
||||||
|
@NotNull(message = "试卷能为空")
|
||||||
|
private List<QuestionAddInheritCmd> questionList;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -26,6 +26,9 @@ public class ExamPaperPageQry extends PageQuery {
|
||||||
* - `le`: 小于等于比较查询
|
* - `le`: 小于等于比较查询
|
||||||
* - `ne`: 不等比较查询,对应SQL的!=操作符
|
* - `ne`: 不等比较查询,对应SQL的!=操作符
|
||||||
*/
|
*/
|
||||||
|
@ApiModelProperty(value = "企业id")
|
||||||
|
private Long corpinfoId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "试卷名称")
|
@ApiModelProperty(value = "试卷名称")
|
||||||
private String examPaperName;
|
private String examPaperName;
|
||||||
@ApiModelProperty(value = "试卷总分数")
|
@ApiModelProperty(value = "试卷总分数")
|
||||||
|
|
@ -40,5 +43,7 @@ public class ExamPaperPageQry extends PageQuery {
|
||||||
//上传结束时间
|
//上传结束时间
|
||||||
@ApiModelProperty(value = "上传结束时间")
|
@ApiModelProperty(value = "上传结束时间")
|
||||||
private String uploadEndTime;
|
private String uploadEndTime;
|
||||||
|
@ApiModelProperty(value = "试卷类型 1-自建试卷 2-班级中自动生成试卷")
|
||||||
|
private Integer type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ public class ExamPaperRemoveCmd {
|
||||||
* - `ne`: 不等比较查询,对应SQL的!=操作符
|
* - `ne`: 不等比较查询,对应SQL的!=操作符
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "试卷id list")
|
@ApiModelProperty(value = "试卷id list")
|
||||||
private List<Long> id;
|
private List<Long> ids;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,10 +32,10 @@ public class ExamPaperUpdateCmd extends Command {
|
||||||
@NotEmpty(message = "试卷名称不能为空")
|
@NotEmpty(message = "试卷名称不能为空")
|
||||||
private String examName;
|
private String examName;
|
||||||
@ApiModelProperty(value = "试卷总分数", name = "examScore", required = true)
|
@ApiModelProperty(value = "试卷总分数", name = "examScore", required = true)
|
||||||
@NotEmpty(message = "试卷总分数不能为空")
|
@NotNull(message = "试卷总分数不能为空")
|
||||||
private BigDecimal examScore;
|
private BigDecimal examScore;
|
||||||
@ApiModelProperty(value = "合格分数", name = "passScore", required = true)
|
@ApiModelProperty(value = "合格分数", name = "passScore", required = true)
|
||||||
@NotEmpty(message = "合格分数不能为空")
|
@NotNull(message = "合格分数不能为空")
|
||||||
private BigDecimal passScore;
|
private BigDecimal passScore;
|
||||||
@ApiModelProperty(value = "是否上架(0否 1是)", name = "sellFlag", required = true)
|
@ApiModelProperty(value = "是否上架(0否 1是)", name = "sellFlag", required = true)
|
||||||
@NotNull(message = "是否上架(0否 1是)不能为空")
|
@NotNull(message = "是否上架(0否 1是)不能为空")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
package com.zcloud.edu.dto.resource;
|
||||||
|
|
||||||
|
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;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* web-client
|
||||||
|
*
|
||||||
|
* @Author SondonYong
|
||||||
|
* @Date 2025-11-27 14:06:10
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class QuestionAddInheritCmd {
|
||||||
|
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "试题类型(1单选题、2多选题、3判断题)", name = "questionType", required = true)
|
||||||
|
@NotNull(message = "试题类型(单选题、多选题、判断题)不能为空")
|
||||||
|
private Integer questionType;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "题干", name = "questionDry", required = true)
|
||||||
|
@NotEmpty(message = "题干不能为空")
|
||||||
|
private String questionDry;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "选项A", name = "optionA", required = true)
|
||||||
|
private String optionA;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "选项B", name = "optionB", required = true)
|
||||||
|
private String optionB;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "选项C", name = "optionC", required = true)
|
||||||
|
private String optionC;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "选项D", name = "optionD", required = true)
|
||||||
|
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")
|
||||||
|
private String descr;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "分值", name = "score")
|
||||||
|
private BigDecimal score;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -26,6 +26,13 @@ public class QuestionListQry extends PageQuery {
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "企业id", name = "eqCorpinfoId", required = true)
|
@ApiModelProperty(value = "企业id", name = "eqCorpinfoId", required = true)
|
||||||
private String eqCorpinfoId;
|
private String eqCorpinfoId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "视频课件id、2:试卷习题)", name = "eqVideoCoursewareId", required = true)
|
||||||
|
private String eqVideoCoursewareId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "试卷id", name = "eqExamPaperId", required = true)
|
||||||
|
private String eqExamPaperId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "试题类型(1单选题、2多选题、3判断题)")
|
@ApiModelProperty(value = "试题类型(1单选题、2多选题、3判断题)")
|
||||||
private Integer eqQuestionType;
|
private Integer eqQuestionType;
|
||||||
//题干
|
//题干
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,9 @@ public class VideoCoursewareDO extends BaseDO {
|
||||||
@ApiModelProperty(value = "习题数")
|
@ApiModelProperty(value = "习题数")
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private Integer questionCount;
|
private Integer questionCount;
|
||||||
|
@ApiModelProperty(value = "用户id")
|
||||||
|
@TableField(exist = false)
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
public VideoCoursewareDO(String videoCoursewareId) {
|
public VideoCoursewareDO(String videoCoursewareId) {
|
||||||
this.videoCoursewareId = videoCoursewareId;
|
this.videoCoursewareId = videoCoursewareId;
|
||||||
|
|
|
||||||
|
|
@ -18,5 +18,7 @@ import java.util.Map;
|
||||||
public interface CurriculumMapper extends BaseMapper<CurriculumDO> {
|
public interface CurriculumMapper extends BaseMapper<CurriculumDO> {
|
||||||
|
|
||||||
IPage<CurriculumDO> getListPage(IPage<CurriculumDO> iPage, Map<String, Object> params);
|
IPage<CurriculumDO> getListPage(IPage<CurriculumDO> iPage, Map<String, Object> params);
|
||||||
|
|
||||||
|
CurriculumDO getInfoById(Long id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,5 +82,14 @@ public class CorpInfoRepositoryImpl extends BaseRepositoryImpl<CorpInfoMapper, C
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断是企业账号还是个人账号
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean checkCorp() {
|
||||||
|
return AuthContext.getUserId().equals(AuthContext.getTenantId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,5 +51,10 @@ public class CurriculumRepositoryImpl extends BaseRepositoryImpl<CurriculumMappe
|
||||||
curriculumDO.setSellFlag(sellFlag);
|
curriculumDO.setSellFlag(sellFlag);
|
||||||
return update(curriculumDO, queryWrapper);
|
return update(curriculumDO, queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CurriculumDO getInfoById(Long id) {
|
||||||
|
return curriculumMapper.getInfoById(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -75,5 +75,14 @@ public class VideoCoursewareRepositoryImpl extends BaseRepositoryImpl<VideoCours
|
||||||
BigDecimal videoTotalTime = videoCoursewareDOList.stream().map(VideoCoursewareDO::getVideoTime).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(1, BigDecimal.ROUND_HALF_UP);
|
BigDecimal videoTotalTime = videoCoursewareDOList.stream().map(VideoCoursewareDO::getVideoTime).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(1, BigDecimal.ROUND_HALF_UP);
|
||||||
return videoTotalTime;
|
return videoTotalTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<VideoCoursewareDO> getListByVideoIdList(List<String> videoCoursewareIdList) {
|
||||||
|
QueryWrapper<VideoCoursewareDO> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.in("video_courseware_id", videoCoursewareIdList);
|
||||||
|
queryWrapper.eq("state", 1);
|
||||||
|
|
||||||
|
return list(queryWrapper);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,5 +25,7 @@ public interface CorpInfoRepository extends BaseRepository<CorpInfoDO> {
|
||||||
boolean isSupper();
|
boolean isSupper();
|
||||||
|
|
||||||
Boolean checkSupper(Long corpinfoId);
|
Boolean checkSupper(Long corpinfoId);
|
||||||
|
|
||||||
|
Boolean checkCorp();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,5 +20,7 @@ public interface CurriculumRepository extends BaseRepository<CurriculumDO> {
|
||||||
Long getListByTraingId(String trainingTypeId);
|
Long getListByTraingId(String trainingTypeId);
|
||||||
|
|
||||||
boolean updateState(@NotNull(message = "id不能为空") List<Long> id, @NotNull(message = "课程状态不能为空") Integer sellFlag);
|
boolean updateState(@NotNull(message = "id不能为空") List<Long> id, @NotNull(message = "课程状态不能为空") Integer sellFlag);
|
||||||
|
|
||||||
|
CurriculumDO getInfoById(Long id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,5 +30,7 @@ public interface VideoCoursewareRepository extends BaseRepository<VideoCoursewar
|
||||||
Long getListByTraingId(String trainingTypeId);
|
Long getListByTraingId(String trainingTypeId);
|
||||||
|
|
||||||
BigDecimal getVideoTotalTime(List<String> videoCoursewareIds);
|
BigDecimal getVideoTotalTime(List<String> videoCoursewareIds);
|
||||||
|
|
||||||
|
List<VideoCoursewareDO> getListByVideoIdList(List<String> videoCoursewareIdList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
left join corp_info corp on c.corpinfo_id = corp.id
|
left join corp_info corp on c.corpinfo_id = corp.id
|
||||||
left join training_type tt on c.training_type_id = tt.training_type_id and tt.delete_enum = 'FALSE'
|
left join training_type tt on c.training_type_id = tt.training_type_id and tt.delete_enum = 'FALSE'
|
||||||
left join curriculum_chapter cc
|
left join curriculum_chapter cc
|
||||||
on c.curriculum_id = cc.curriculum_id and cc.delete_enum = 'FALSE' and cc.parent_id != '0'
|
on c.curriculum_id = cc.curriculum_id and cc.delete_enum = 'FALSE' and cc.video_courseware_id is not null
|
||||||
left join video_courseware vc
|
left join video_courseware vc
|
||||||
on cc.video_courseware_id = vc.video_courseware_id and vc.delete_enum = 'FALSE' and vc.state = 1
|
on cc.video_courseware_id = vc.video_courseware_id and vc.delete_enum = 'FALSE' and vc.state = 1
|
||||||
where c.delete_enum = 'FALSE'
|
where c.delete_enum = 'FALSE'
|
||||||
|
|
@ -46,5 +46,20 @@
|
||||||
group by c.id
|
group by c.id
|
||||||
order by c.create_time asc
|
order by c.create_time asc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="getInfoById" resultType="com.zcloud.edu.persistence.dataobject.CurriculumDO">
|
||||||
|
select c.*,
|
||||||
|
corp.corp_name,
|
||||||
|
tt.name as trainingTypeName,
|
||||||
|
count(cc.id) as chapterCount
|
||||||
|
from curriculum c
|
||||||
|
left join corp_info corp on c.corpinfo_id = corp.id and corp.delete_enum = 'FALSE'
|
||||||
|
left join training_type tt on c.training_type_id = tt.training_type_id and tt.delete_enum = 'FALSE'
|
||||||
|
left join curriculum_chapter cc
|
||||||
|
on c.curriculum_id = cc.curriculum_id and cc.delete_enum = 'FALSE' and cc.video_courseware_id is not null
|
||||||
|
where c.delete_enum = 'FALSE'
|
||||||
|
and c.id =#{id}
|
||||||
|
group by c.id
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,9 @@
|
||||||
#{corpinfoId}
|
#{corpinfoId}
|
||||||
</foreach>
|
</foreach>
|
||||||
</if>
|
</if>
|
||||||
|
<if test="params.corpinfoId != null">
|
||||||
|
AND ep.corpinfo_id = #{params.corpinfoId}
|
||||||
|
</if>
|
||||||
<if test="params.examPaperName != null and params.examPaperName!=''">
|
<if test="params.examPaperName != null and params.examPaperName!=''">
|
||||||
AND ep.exam_name LIKE CONCAT('%',#{params.examPaperName},'%')
|
AND ep.exam_name LIKE CONCAT('%',#{params.examPaperName},'%')
|
||||||
</if>
|
</if>
|
||||||
|
|
@ -26,6 +29,9 @@
|
||||||
<if test="params.sellFlag != null">
|
<if test="params.sellFlag != null">
|
||||||
AND ep.sell_flag = #{params.sellFlag}
|
AND ep.sell_flag = #{params.sellFlag}
|
||||||
</if>
|
</if>
|
||||||
|
<if test="params.type != null">
|
||||||
|
AND ep.type = #{params.type}
|
||||||
|
</if>
|
||||||
<if test="params.uploadStartTime != null and params.uploadEndTime!=''">
|
<if test="params.uploadStartTime != null and params.uploadEndTime!=''">
|
||||||
and DATE(ep.create_time) <![CDATA[>=]]> #{params.uploadStartTime}
|
and DATE(ep.create_time) <![CDATA[>=]]> #{params.uploadStartTime}
|
||||||
</if>
|
</if>
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,8 @@
|
||||||
u.name as teacherName,
|
u.name as teacherName,
|
||||||
c.corp_name as corpName,
|
c.corp_name as corpName,
|
||||||
count(q.id) as questionCount,
|
count(q.id) as questionCount,
|
||||||
c.type as corpType
|
c.type as corpType,
|
||||||
|
u.id as userId
|
||||||
from video_courseware a
|
from video_courseware a
|
||||||
left join training_type b on a.training_type_id = b.training_type_id and b.delete_enum = 'FALSE'
|
left join training_type b on a.training_type_id = b.training_type_id and b.delete_enum = 'FALSE'
|
||||||
left join teacher t on a.teacher_id = t.teacher_id and t.delete_enum = 'FALSE'
|
left join teacher t on a.teacher_id = t.teacher_id and t.delete_enum = 'FALSE'
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue