教育资源修改

dev
zhaokai 2026-01-22 08:42:30 +08:00
parent bc2aacc3be
commit 916ec7e066
34 changed files with 387 additions and 52 deletions

View File

@ -5,10 +5,7 @@ import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.edu.api.resource.ExamPaperServiceI;
import com.zcloud.edu.dto.resource.ExamPaperAddCmd;
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.resource.*;
import com.zcloud.edu.dto.clientobject.resource.ExamPaperCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -32,9 +29,14 @@ public class ExamPaperController {
@ApiOperation("新增试卷")
@PostMapping("/save")
public SingleResponse<ExamPaperCO> add(@Validated ExamPaperAddCmd cmd) {
public SingleResponse<ExamPaperCO> add(@Validated @RequestBody ExamPaperAddCmd cmd) {
return examPaperService.add(cmd);
}
@ApiOperation("新增继承试卷")
@PostMapping("/saveInherit")
public SingleResponse<ExamPaperCO> saveInherit(@Validated @RequestBody ExamPaperAddInheritCmd cmd) {
return examPaperService.saveInherit(cmd);
}
@ApiOperation("试卷分页")
@PostMapping("/list")
@ -51,8 +53,8 @@ public class ExamPaperController {
@ApiOperation("上架,下架")
@PostMapping("/editSellFlag")
public SingleResponse editSellFlag(@Validated @RequestBody ExamPaperUpdateCmd examPaperUpdateCmd) {
examPaperService.editSellFlag(examPaperUpdateCmd);
public SingleResponse editSellFlag(@Validated @RequestBody ExamPaperUpdateSellFlagCmd examPaperUpdateSellFlagCmd) {
examPaperService.editSellFlag(examPaperUpdateSellFlagCmd);
return SingleResponse.buildSuccess();
}

View File

@ -1,6 +1,8 @@
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.resource.QuestionAddInheritCmd;
import com.zcloud.edu.persistence.dataobject.QuestionDO;
import org.mapstruct.Mapper;
@ -20,5 +22,7 @@ public interface QuestionCoConvertor {
* @return
*/
List<QuestionCO> converDOsToCOs(List<QuestionDO> questionDOs);
List<QuestionE> converCmdsToEs(List<QuestionAddInheritCmd> questionList);
}

View File

@ -1,19 +1,24 @@
package com.zcloud.edu.command.query.resource;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.edu.command.convertor.resource.CurriculumChapterCoConvertor;
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.dto.clientobject.resource.VideoCoursewareCO;
import com.zcloud.edu.dto.resource.CurriculumPageQry;
import com.zcloud.edu.dto.clientobject.resource.CurriculumCO;
import com.zcloud.edu.dto.clientobject.resource.CurriculumChapterCO;
import com.zcloud.edu.persistence.dataobject.CorpInfoDO;
import com.zcloud.edu.persistence.dataobject.CurriculumChapterDO;
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.CurriculumChapterRepository;
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.Tools;
import lombok.AllArgsConstructor;
@ -22,6 +27,7 @@ import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -39,6 +45,8 @@ public class CurriculumQueryExe {
private final CurriculumChapterRepository curriculumChapterRepository;
private final CurriculumChapterCoConvertor curriculumChapterCoConvertor;
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());
}
List<CurriculumCO> examCenterCOS = curriculumCoConvertor.converDOsToCOs(pageResponse.getData());
examCenterCOS.forEach(examCenterCO -> {
if(AuthContext.getUserId().equals(examCenterCO.getCreateId())){
//是本人
examCenterCO.setIsUserCreate(true);
examCenterCOS.forEach(videoCoursewareCO -> {
//如果是企业,可以看本企业下所有的,如果是个人,只能看个人的,判断登录的账号是企业主账号还是个人
Boolean isCorpAccount = corpInfoRepository.checkCorp();
// 企业账户检查租户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());
}
public CurriculumCO getInfoById(Long id) {
CurriculumDO curriculumDO = curriculumRepository.getById(id);
CurriculumDO curriculumDO = curriculumRepository.getInfoById(id);
if(curriculumDO == null){
return null;
}
@ -84,9 +99,42 @@ public class CurriculumQueryExe {
List<CurriculumChapterDO> curriculumChapterDOList = curriculumChapterRepository.getListByCurriculumId(curriculumCO.getCurriculumId());
List<CurriculumChapterCO> curriculumChapterCOList = curriculumChapterCoConvertor.converDOsToCOs(curriculumChapterDOList);
setVideoCoursewareInfo(curriculumChapterCOList);
List<CurriculumChapterCO> treeList = Tools.buildEntityTree(curriculumChapterCOList, "curriculumChapterId", "parentId", "childCurriculumChapterCOList", "0");
curriculumCO.setCurriculumChapterCOList(treeList);
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));
}
});
}
}

View File

@ -61,14 +61,24 @@ public class ExamPaperQueryExe {
params.put("inCorpinfoId", inCorpinfoId);
}
PageResponse<ExamPaperDO> pageResponse = examPaperRepository.listPage(params);
List<ExamPaperCO> examCenterCOS = examPaperCoConvertor.converDOsToCOs(pageResponse.getData());
examCenterCOS.forEach(examCenterCO -> {
if(AuthContext.getUserId().equals(examCenterCO.getCreateId())){
//是本人
examCenterCO.setIsUserCreate(true);
List<ExamPaperCO> videoCoursewareCOList = examPaperCoConvertor.converDOsToCOs(pageResponse.getData());
videoCoursewareCOList.forEach(videoCoursewareCO -> {
//如果是企业,可以看本企业下所有的,如果是个人,只能看个人的,判断登录的账号是企业主账号还是个人
Boolean isCorpAccount = corpInfoRepository.checkCorp();
// 企业账户检查租户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) {

View File

@ -2,13 +2,17 @@ package com.zcloud.edu.command.query.resource;
import cn.hutool.core.bean.BeanUtil;
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.domain.enums.CorpTypeEnum;
import com.zcloud.edu.dto.resource.TeacherListQry;
import com.zcloud.edu.dto.resource.TeacherPageQry;
import com.zcloud.edu.dto.clientobject.resource.TeacherCO;
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.TeacherDO;
import com.zcloud.edu.persistence.repository.resource.CorpInfoRepository;
import com.zcloud.edu.persistence.repository.resource.TeacherCertificateRepository;
import com.zcloud.edu.persistence.repository.resource.TeacherRepository;
import com.zcloud.gbscommon.utils.PageQueryHelper;
@ -18,8 +22,10 @@ import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.beans.BeanUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -34,6 +40,7 @@ public class TeacherQueryExe {
private final TeacherRepository teacherRepository;
private final TeacherCoConvertor teacherCoConvertor;
private final TeacherCertificateRepository teacherCertificateRepository;
private final CorpInfoRepository corpInfoRepository;
/**
*
@ -49,6 +56,12 @@ public class TeacherQueryExe {
public MultiResponse<TeacherCO> execute(TeacherListQry 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<TeacherCO> examCenterCOS = teacherCoConvertor.converDOsToCOs(list);
return MultiResponse.of(examCenterCOS);

View File

@ -61,17 +61,31 @@ public class VideoCoursewareQueryExe {
if(pageResponse.getData() == null){
return PageResponse.of(null, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
}
List<VideoCoursewareCO> examCenterCOS = videoCoursewareCoConvertor.converDOsToCOs(pageResponse.getData());
examCenterCOS.forEach(examCenterCO -> {
if(examCenterCO.getCreateId().equals(AuthContext.getUserId())){
//是本人
examCenterCO.setIsUserCreate(true);
List<VideoCoursewareCO> videoCoursewareCOList = videoCoursewareCoConvertor.converDOsToCOs(pageResponse.getData());
videoCoursewareCOList.forEach(videoCoursewareCO -> {
//如果是企业,可以看本企业下所有的,如果是个人,只能看个人的,判断登录的账号是企业主账号还是个人
Boolean isCorpAccount = corpInfoRepository.checkCorp();
// 企业账户检查租户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) {

View File

@ -125,7 +125,7 @@ public class CurriculumUpdateExe {
public void editState(CurriculumUpdateStateCmd cmd) {
List<String> errorList = new ArrayList<>();
for (Long id : cmd.getId()) {
for (Long id : cmd.getIds()) {
CurriculumDO curriculumDO = curriculumRepository.getById(id);
//企业端禁用:所属单位为股份的不能禁用
//股份端禁用:所属单位为各企业的不能禁用
@ -153,7 +153,7 @@ public class CurriculumUpdateExe {
if(CollUtil.isNotEmpty(errorList)){
throw new BizException(errorList+"不能修改状态");
}
curriculumRepository.updateState(cmd.getId(), cmd.getSellFlag());
curriculumRepository.updateState(cmd.getIds(), cmd.getSellFlag());
}
}

View File

@ -2,11 +2,14 @@ package com.zcloud.edu.command.resource;
import cn.hutool.core.bean.BeanUtil;
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.gateway.resource.ExamPaperGateway;
import com.zcloud.edu.domain.model.resource.ExamPaperE;
import com.zcloud.edu.domain.model.resource.QuestionE;
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.repository.resource.QuestionRepository;
import lombok.AllArgsConstructor;
@ -29,6 +32,7 @@ import java.util.List;
public class ExamPaperAddExe {
private final ExamPaperGateway examPaperGateway;
private final QuestionRepository questionRepository;
private final QuestionCoConvertor questionCoConvertor;
@Transactional(rollbackFor = Exception.class)
public boolean execute(ExamPaperAddCmd cmd) {
@ -65,5 +69,45 @@ public class ExamPaperAddExe {
}
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;
}
}

View File

@ -68,7 +68,7 @@ public class ExamPaperRemoveExe {
@Transactional(rollbackFor = Exception.class)
public boolean execute(ExamPaperRemoveCmd examPaperRemoveCmd) {
List<ExamPaperDO> examPaperDOList =examPaperRepository.getListByIdList(examPaperRemoveCmd.getId());
List<ExamPaperDO> examPaperDOList =examPaperRepository.getListByIdList(examPaperRemoveCmd.getIds());
if(CollUtil.isEmpty(examPaperDOList)){
throw new RuntimeException("试卷不存在");
}
@ -100,7 +100,7 @@ public class ExamPaperRemoveExe {
}
boolean res = examPaperGateway.deletedExamPaperByIds(examPaperRemoveCmd.getId());
boolean res = examPaperGateway.deletedExamPaperByIds(examPaperRemoveCmd.getIds());
if (!res) {
throw new BizException("删除失败");
}

View File

@ -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.QuestionE;
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.QuestionDO;
import com.zcloud.edu.persistence.repository.resource.CorpInfoRepository;
@ -52,8 +53,8 @@ public class ExamPaperUpdateExe {
}
public void editSellFlag(ExamPaperUpdateCmd examPaperUpdateCmd) {
ExamPaperDO examPaperDO = examPaperRepository.getById(examPaperUpdateCmd.getId());
public void editSellFlag(ExamPaperUpdateSellFlagCmd examPaperUpdateSellFlagCmd) {
ExamPaperDO examPaperDO = examPaperRepository.getById(examPaperUpdateSellFlagCmd.getId());
//企业端禁用:所属单位为股份的不能禁用
//股份端禁用:所属单位为各企业的不能禁用
Boolean b = corpInfoRepository.checkSupper(examPaperDO.getCorpinfoId());
@ -70,7 +71,7 @@ public class ExamPaperUpdateExe {
}
ExamPaperE examPaperE = new ExamPaperE();
BeanUtils.copyProperties(examPaperUpdateCmd, examPaperE);
BeanUtils.copyProperties(examPaperUpdateSellFlagCmd, examPaperE);
boolean res = examPaperGateway.update(examPaperE);
}
}

View File

@ -7,10 +7,7 @@ import com.zcloud.edu.command.resource.ExamPaperAddExe;
import com.zcloud.edu.command.resource.ExamPaperRemoveExe;
import com.zcloud.edu.command.resource.ExamPaperUpdateExe;
import com.zcloud.edu.command.query.resource.ExamPaperQueryExe;
import com.zcloud.edu.dto.resource.ExamPaperAddCmd;
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.resource.*;
import com.zcloud.edu.dto.clientobject.resource.ExamPaperCO;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@ -64,8 +61,14 @@ public class ExamPaperServiceImpl implements ExamPaperServiceI {
}
@Override
public void editSellFlag(ExamPaperUpdateCmd examPaperUpdateCmd) {
examPaperUpdateExe.editSellFlag(examPaperUpdateCmd);
public void editSellFlag(ExamPaperUpdateSellFlagCmd examPaperUpdateSellFlagCmd) {
examPaperUpdateExe.editSellFlag(examPaperUpdateSellFlagCmd);
}
@Override
public SingleResponse<ExamPaperCO> saveInherit(ExamPaperAddInheritCmd cmd) {
examPaperAddExe.saveInherit(cmd);
return SingleResponse.buildSuccess();
}
}

View File

@ -2,10 +2,7 @@ package com.zcloud.edu.api.resource;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.edu.dto.resource.ExamPaperAddCmd;
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.resource.*;
import com.zcloud.edu.dto.clientobject.resource.ExamPaperCO;
import org.springframework.web.multipart.MultipartFile;
@ -28,6 +25,8 @@ public interface ExamPaperServiceI {
ExamPaperCO getInfoById(Long id);
void editSellFlag(ExamPaperUpdateCmd examPaperUpdateCmd);
void editSellFlag(ExamPaperUpdateSellFlagCmd examPaperUpdateSellFlagCmd);
SingleResponse<ExamPaperCO> saveInherit(ExamPaperAddInheritCmd cmd);
}

View File

@ -1,8 +1,11 @@
package com.zcloud.edu.dto.clientobject.resource;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@ -51,14 +54,17 @@ public class CurriculumCO {
@ApiModelProperty(value = "课件数量")
private Integer chapterCount;
//总视频时长
@ApiModelProperty(value = "总视频时长")
private Integer videoTime;
@ApiModelProperty(value = "是否是当前用户创建的数据")
private Boolean isUserCreate = false;
@ApiModelProperty(value = "课程目录")
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;
}

View File

@ -35,6 +35,8 @@ public class CurriculumChapterCO {
//上级ID
@ApiModelProperty(value = "上级ID")
private String parentId;
@ApiModelProperty(value = "课件信息")
private VideoCoursewareCO videoCoursewareCO;
@ApiModelProperty(value = "子课程目录")
private List<CurriculumChapterCO> childCurriculumChapterCOList;

View File

@ -68,6 +68,7 @@ public class ExamPaperCO {
@ApiModelProperty(value = "是否是当前用户创建的数据")
private Boolean isUserCreate = false;
// private List<QuestionCO> questionCOList;
private Long tenantId;
}

View File

@ -77,5 +77,9 @@ public class VideoCoursewareCO extends ClientObject {
private LocalDateTime createTime;
@ApiModelProperty(value = "习题数")
private Integer questionCount;
@ApiModelProperty(value = "用户id")
private Long userId;
private Long tenantId;
}

View File

@ -21,7 +21,7 @@ public class CurriculumUpdateStateCmd {
@ApiModelProperty(value = "id", name = "id", required = true)
@NotNull(message = "id不能为空")
private List<Long> id;
private List<Long> ids;
@ApiModelProperty(value = "课程状态 1-上架 0-下架", name = "state", required = true)
@NotNull(message = "课程状态不能为空")

View File

@ -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;
}

View File

@ -26,6 +26,9 @@ public class ExamPaperPageQry extends PageQuery {
* - `le`:
* - `ne`: SQL!=
*/
@ApiModelProperty(value = "企业id")
private Long corpinfoId;
@ApiModelProperty(value = "试卷名称")
private String examPaperName;
@ApiModelProperty(value = "试卷总分数")
@ -40,5 +43,7 @@ public class ExamPaperPageQry extends PageQuery {
//上传结束时间
@ApiModelProperty(value = "上传结束时间")
private String uploadEndTime;
@ApiModelProperty(value = "试卷类型 1-自建试卷 2-班级中自动生成试卷")
private Integer type;
}

View File

@ -26,7 +26,7 @@ public class ExamPaperRemoveCmd {
* - `ne`: SQL!=
*/
@ApiModelProperty(value = "试卷id list")
private List<Long> id;
private List<Long> ids;
}

View File

@ -32,10 +32,10 @@ public class ExamPaperUpdateCmd extends Command {
@NotEmpty(message = "试卷名称不能为空")
private String examName;
@ApiModelProperty(value = "试卷总分数", name = "examScore", required = true)
@NotEmpty(message = "试卷总分数不能为空")
@NotNull(message = "试卷总分数不能为空")
private BigDecimal examScore;
@ApiModelProperty(value = "合格分数", name = "passScore", required = true)
@NotEmpty(message = "合格分数不能为空")
@NotNull(message = "合格分数不能为空")
private BigDecimal passScore;
@ApiModelProperty(value = "是否上架0否 1是", name = "sellFlag", required = true)
@NotNull(message = "是否上架0否 1是不能为空")

View File

@ -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;
}

View File

@ -26,6 +26,13 @@ public class QuestionListQry extends PageQuery {
*/
@ApiModelProperty(value = "企业id", name = "eqCorpinfoId", required = true)
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判断题")
private Integer eqQuestionType;
//题干

View File

@ -68,6 +68,9 @@ public class VideoCoursewareDO extends BaseDO {
@ApiModelProperty(value = "习题数")
@TableField(exist = false)
private Integer questionCount;
@ApiModelProperty(value = "用户id")
@TableField(exist = false)
private Long userId;
public VideoCoursewareDO(String videoCoursewareId) {
this.videoCoursewareId = videoCoursewareId;

View File

@ -18,5 +18,7 @@ import java.util.Map;
public interface CurriculumMapper extends BaseMapper<CurriculumDO> {
IPage<CurriculumDO> getListPage(IPage<CurriculumDO> iPage, Map<String, Object> params);
CurriculumDO getInfoById(Long id);
}

View File

@ -82,5 +82,14 @@ public class CorpInfoRepositoryImpl extends BaseRepositoryImpl<CorpInfoMapper, C
return true;
return false;
}
/**
*
* @return
*/
@Override
public Boolean checkCorp() {
return AuthContext.getUserId().equals(AuthContext.getTenantId());
}
}

View File

@ -51,5 +51,10 @@ public class CurriculumRepositoryImpl extends BaseRepositoryImpl<CurriculumMappe
curriculumDO.setSellFlag(sellFlag);
return update(curriculumDO, queryWrapper);
}
@Override
public CurriculumDO getInfoById(Long id) {
return curriculumMapper.getInfoById(id);
}
}

View File

@ -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);
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);
}
}

View File

@ -25,5 +25,7 @@ public interface CorpInfoRepository extends BaseRepository<CorpInfoDO> {
boolean isSupper();
Boolean checkSupper(Long corpinfoId);
Boolean checkCorp();
}

View File

@ -20,5 +20,7 @@ public interface CurriculumRepository extends BaseRepository<CurriculumDO> {
Long getListByTraingId(String trainingTypeId);
boolean updateState(@NotNull(message = "id不能为空") List<Long> id, @NotNull(message = "课程状态不能为空") Integer sellFlag);
CurriculumDO getInfoById(Long id);
}

View File

@ -30,5 +30,7 @@ public interface VideoCoursewareRepository extends BaseRepository<VideoCoursewar
Long getListByTraingId(String trainingTypeId);
BigDecimal getVideoTotalTime(List<String> videoCoursewareIds);
List<VideoCoursewareDO> getListByVideoIdList(List<String> videoCoursewareIdList);
}

View File

@ -14,7 +14,7 @@
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 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
on cc.video_courseware_id = vc.video_courseware_id and vc.delete_enum = 'FALSE' and vc.state = 1
where c.delete_enum = 'FALSE'
@ -46,5 +46,20 @@
group by c.id
order by c.create_time asc
</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>

View File

@ -14,6 +14,9 @@
#{corpinfoId}
</foreach>
</if>
<if test="params.corpinfoId != null">
AND ep.corpinfo_id = #{params.corpinfoId}
</if>
<if test="params.examPaperName != null and params.examPaperName!=''">
AND ep.exam_name LIKE CONCAT('%',#{params.examPaperName},'%')
</if>
@ -26,6 +29,9 @@
<if test="params.sellFlag != null">
AND ep.sell_flag = #{params.sellFlag}
</if>
<if test="params.type != null">
AND ep.type = #{params.type}
</if>
<if test="params.uploadStartTime != null and params.uploadEndTime!=''">
and DATE(ep.create_time) <![CDATA[>=]]> #{params.uploadStartTime}
</if>

View File

@ -26,7 +26,8 @@
u.name as teacherName,
c.corp_name as corpName,
count(q.id) as questionCount,
c.type as corpType
c.type as corpType,
u.id as userId
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 teacher t on a.teacher_id = t.teacher_id and t.delete_enum = 'FALSE'