课程增加字段

dev
zhaokai 2026-01-16 13:36:19 +08:00
parent 8c316c711b
commit 38ba8dbe41
13 changed files with 93 additions and 28 deletions

View File

@ -10,7 +10,9 @@ import com.zcloud.edu.domain.model.resource.CurriculumChapterE;
import com.zcloud.edu.domain.model.resource.CurriculumE;
import com.zcloud.edu.dto.resource.CurriculumAddCmd;
import com.zcloud.edu.dto.resource.CurriculumChapterAddCmd;
import com.zcloud.edu.persistence.dataobject.QuestionDO;
import com.zcloud.edu.persistence.repository.resource.CurriculumChapterRepository;
import com.zcloud.edu.persistence.repository.resource.CurriculumRepository;
import com.zcloud.edu.persistence.repository.resource.QuestionRepository;
import com.zcloud.edu.persistence.repository.resource.VideoCoursewareRepository;
import lombok.AllArgsConstructor;
@ -18,6 +20,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -33,6 +36,7 @@ import java.util.stream.Collectors;
@AllArgsConstructor
public class CurriculumAddExe {
private final CurriculumGateway curriculumGateway;
private final CurriculumRepository curriculumRepository;
private final CurriculumChapterGateway curriculumChapterGateway;
private final CurriculumChapterCoConvertor curriculumChapterCoConvertor;
private final CurriculumChapterRepository curriculumChapterRepository;
@ -42,17 +46,7 @@ public class CurriculumAddExe {
@Transactional(rollbackFor = Exception.class)
public boolean execute(CurriculumAddCmd cmd) {
CurriculumE curriculumE = new CurriculumE();
BeanUtils.copyProperties(cmd, curriculumE);
boolean res = false;
try {
res = curriculumGateway.add(curriculumE);
} catch (Exception e) {
throw new RuntimeException(e);
}
if (!res) {
throw new BizException("课程保存失败");
}
List<String> videoCoursewareIds =new ArrayList<>();
//判断课程习题数量大于5
if(CatalogueLevelEnum.FIRST_LEVEL.getCode().equals(cmd.getCatalogueLevel())){
@ -64,7 +58,6 @@ public class CurriculumAddExe {
//二级目录
List<CurriculumChapterAddCmd> curriculumChapterAddCmdList = cmd.getCurriculumChapterAddCmdList();
//curriculumChapterAddCmdList过滤掉"0".equals(curriculumChapterAddCmd.getParentId()) 的数据拿到videoCoursewareIds
// curriculumChapterAddCmdList.stream()
//curriculumChapterAddCmdList中curriculumChapterAddCmdList.get().getCurriculumChapterAddCmdList() 下所有的getVideoCoursewareId
List<String> finalVideoCoursewareIds = videoCoursewareIds;
curriculumChapterAddCmdList.forEach(info->{
@ -80,8 +73,28 @@ public class CurriculumAddExe {
if(videoCoursewareCount<5){
throw new BizException("课程习题数量不能小于5");
}
CurriculumE curriculumE = new CurriculumE();
BeanUtils.copyProperties(cmd, curriculumE);
BigDecimal videoTotalTime = videoCoursewareRepository.getVideoTotalTime(videoCoursewareIds);
//videoCoursewareCount中所有videoTime相加去掉空值
//获取总时长
curriculumE.setVideoTotalTime(videoTotalTime);
boolean res = false;
try {
res = curriculumGateway.add(curriculumE);
} catch (Exception e) {
throw new RuntimeException(e);
}
if (!res) {
throw new BizException("课程保存失败");
}
//处理课程章节
List<CurriculumChapterAddCmd> curriculumChapterAddCmdList = cmd.getCurriculumChapterAddCmdList();
List<String> videoCoursewareIds1 = videoCoursewareIds;
curriculumChapterAddCmdList.forEach(curriculumChapterAddCmd -> {
CurriculumChapterE curriculumChapterE = new CurriculumChapterE();
BeanUtils.copyProperties(curriculumChapterAddCmd, curriculumChapterE);

View File

@ -1,5 +1,6 @@
package com.zcloud.edu.command.resource;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.cola.exception.BizException;
import com.zcloud.edu.command.convertor.resource.CurriculumChapterCoConvertor;
import com.zcloud.edu.domain.enums.CatalogueLevelEnum;
@ -12,16 +13,17 @@ import com.zcloud.edu.dto.resource.CurriculumChapterAddCmd;
import com.zcloud.edu.dto.resource.CurriculumUpdateCmd;
import com.zcloud.edu.dto.resource.CurriculumUpdateStateCmd;
import com.zcloud.edu.persistence.dataobject.CurriculumDO;
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.*;
import com.zcloud.edu.persistence.repository.study.ClassCurriculumRepository;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
@ -40,6 +42,8 @@ public class CurriculumUpdateExe {
private final CurriculumChapterGateway curriculumChapterGateway;
private final CorpInfoRepository corpInfoRepository;
private final ClassCurriculumRepository classCurriculumRepository;
private final QuestionRepository questionRepository;
private final VideoCoursewareRepository videoCoursewareRepository;
@Transactional(rollbackFor = Exception.class)
public void execute(CurriculumUpdateCmd curriculumUpdateCmd) {
@ -62,9 +66,38 @@ public class CurriculumUpdateExe {
if(count>0){
throw new BizException("该课程已绑定班级,不能编辑");
}
List<String> videoCoursewareIds =new ArrayList<>();
//判断课程习题数量大于5
if(CatalogueLevelEnum.FIRST_LEVEL.getCode().equals(curriculumUpdateCmd.getCatalogueLevel())){
//一级目录
videoCoursewareIds = curriculumUpdateCmd.getCurriculumChapterAddCmdList().stream()
.filter(curriculumChapterAddCmd -> curriculumChapterAddCmd.getVideoCoursewareId() != null)
.map(CurriculumChapterAddCmd::getVideoCoursewareId).collect(Collectors.toList());
}else{
//二级目录
List<CurriculumChapterAddCmd> curriculumChapterAddCmdList = curriculumUpdateCmd.getCurriculumChapterAddCmdList();
//curriculumChapterAddCmdList过滤掉"0".equals(curriculumChapterAddCmd.getParentId()) 的数据拿到videoCoursewareIds
//curriculumChapterAddCmdList中curriculumChapterAddCmdList.get().getCurriculumChapterAddCmdList() 下所有的getVideoCoursewareId
List<String> finalVideoCoursewareIds = videoCoursewareIds;
curriculumChapterAddCmdList.forEach(info->{
List<String> collect = info.getCurriculumChapterAddCmdList().stream().filter(curriculumChapterAddCmd -> curriculumChapterAddCmd.getVideoCoursewareId() != null)
.map(CurriculumChapterAddCmd::getVideoCoursewareId).collect(Collectors.toList());
finalVideoCoursewareIds.addAll(collect);
});
}
if(CollUtil.isEmpty(videoCoursewareIds)){
throw new BizException("请选择课程");
}
Long videoCoursewareCount = questionRepository.getCountByVideoCoursewareList(videoCoursewareIds);
if(videoCoursewareCount<5){
throw new BizException("课程习题数量不能小于5");
}
CurriculumE curriculumE = new CurriculumE();
BeanUtils.copyProperties(curriculumUpdateCmd, curriculumE);
BigDecimal videoTotalTime = videoCoursewareRepository.getVideoTotalTime(videoCoursewareIds);
curriculumE.setVideoTotalTime(videoTotalTime);
boolean res = curriculumGateway.update(curriculumE);
if (!res) {
throw new BizException("修改失败");
@ -87,7 +120,6 @@ public class CurriculumUpdateExe {
}
});
}
public void editState(CurriculumUpdateStateCmd cmd) {

View File

@ -3,7 +3,6 @@ package com.zcloud.edu.command.study;
import com.alibaba.cola.exception.BizException;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.sun.org.apache.xml.internal.security.Init;
import com.zcloud.edu.domain.gateway.study.ClassGateway;
import com.zcloud.edu.domain.model.study.ClassE;
import com.zcloud.edu.dto.study.ClassAddCmd;

View File

@ -4,6 +4,8 @@ import com.alibaba.cola.dto.ClientObject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* web-client
@ -42,7 +44,7 @@ public class VideoCoursewareCO extends ClientObject {
private Integer state;
//课件时长(视频时间)-秒
@ApiModelProperty(value = "课件时长(视频时间)-秒")
private Integer videoTime;
private BigDecimal videoTime;
@ApiModelProperty(value = "课件截图url")
private String screenshotUrl;

View File

@ -9,6 +9,7 @@ import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* web-client
@ -49,7 +50,7 @@ public class VideoCoursewareAddCmd extends Command {
@ApiModelProperty(value = "课件时长(视频时间)-秒", name = "videoTime", required = true)
@NotNull(message = "课件时长(视频时间)-秒不能为空")
private Integer videoTime;
private BigDecimal videoTime;
@ApiModelProperty(value = "课件截图url")
private String screenshotUrl;

View File

@ -9,6 +9,7 @@ import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* web-client
@ -48,7 +49,7 @@ public class VideoCoursewareUpdateCmd extends Command {
private Integer state;
@ApiModelProperty(value = "课件时长(视频时间)-秒", name = "videoTime", required = true)
@NotNull(message = "课件时长(视频时间)-秒不能为空")
private Integer videoTime;
private BigDecimal videoTime;
@ApiModelProperty(value = "课件截图url")
private String screenshotUrl;
}

View File

@ -4,6 +4,7 @@ import com.jjb.saas.framework.domain.model.BaseE;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
@ -67,6 +68,6 @@ public class CurriculumE extends BaseE {
private Integer chapterCount;
//总视频时长
@ApiModelProperty(value = "总视频时长")
private Integer videoTime;
private BigDecimal videoTotalTime;
}

View File

@ -3,6 +3,8 @@ package com.zcloud.edu.domain.model.resource;
import com.jjb.saas.framework.domain.model.BaseE;
import lombok.Data;
import java.math.BigDecimal;
/**
* web-domain
*
@ -30,7 +32,7 @@ public class VideoCoursewareE extends BaseE {
//课件状态 0未启用, 1-启用
private Integer state;
//课件时长(视频时间)-秒
private Integer videoTime;
private BigDecimal videoTime;
//课件截图
private String screenshotUrl;

View File

@ -60,8 +60,7 @@ public class CurriculumDO extends BaseDO {
private Integer chapterCount;
//总视频时长
@ApiModelProperty(value = "总视频时长")
@TableField(exist = false)
private Integer videoTime;
private BigDecimal videoTotalTime;
public CurriculumDO(String curriculumId) {

View File

@ -8,6 +8,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* web-infrastructure
*
@ -45,7 +47,7 @@ public class VideoCoursewareDO extends BaseDO {
private Integer state;
//课件时长(视频时间)-秒
@ApiModelProperty(value = "课件时长(视频时间)-秒")
private Integer videoTime;
private BigDecimal videoTime;
@ApiModelProperty(value = "课件截图url")
private String screenshotUrl;
@ApiModelProperty(value = "企业名称")

View File

@ -13,6 +13,7 @@ import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Map;
import java.util.List;
@ -65,5 +66,14 @@ public class VideoCoursewareRepositoryImpl extends BaseRepositoryImpl<VideoCours
queryWrapper.eq("training_type_id", trainingTypeId);
return videoCoursewareMapper.selectCount(queryWrapper);
}
@Override
public BigDecimal getVideoTotalTime(List<String> videoCoursewareIds) {
QueryWrapper<VideoCoursewareDO> queryWrapper = new QueryWrapper<>();
queryWrapper.in("video_courseware_id", videoCoursewareIds);
List<VideoCoursewareDO> videoCoursewareDOList = list(queryWrapper);
BigDecimal videoTotalTime = videoCoursewareDOList.stream().map(VideoCoursewareDO::getVideoTime).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(1, BigDecimal.ROUND_HALF_UP);
return videoTotalTime;
}
}

View File

@ -5,6 +5,7 @@ import com.alibaba.cola.dto.SingleResponse;
import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository;
import java.math.BigDecimal;
import java.util.Map;
import java.util.List;
@ -27,5 +28,7 @@ public interface VideoCoursewareRepository extends BaseRepository<VideoCoursewar
SingleResponse<VideoCoursewareDO> getInfoById(Long id);
Long getListByTraingId(String trainingTypeId);
BigDecimal getVideoTotalTime(List<String> videoCoursewareIds);
}

View File

@ -8,8 +8,8 @@
select c.*,
corp.corp_name as corpName,
tt.name as trainingTypeName,
count(cc.id) as chapterCount,
sum(vc.video_time) as videoTime
count(cc.id) as chapterCount
from curriculum c
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'