实现班级内课程查询功能

dev
zhangyue 2026-01-26 09:10:05 +08:00
parent 1e03229ac4
commit 7290042ed8
15 changed files with 139 additions and 16 deletions

View File

@ -9,10 +9,7 @@ import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext; import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.edu.api.study.ClassCurriculumServiceI; import com.zcloud.edu.api.study.ClassCurriculumServiceI;
import com.zcloud.edu.dto.clientobject.study.ClassCurriculumCO; import com.zcloud.edu.dto.clientobject.study.ClassCurriculumCO;
import com.zcloud.edu.dto.study.ClassCurriculumAddCmd; import com.zcloud.edu.dto.study.*;
import com.zcloud.edu.dto.study.ClassCurriculumBatchAddCmd;
import com.zcloud.edu.dto.study.ClassCurriculumPageQry;
import com.zcloud.edu.dto.study.ClassCurriculumUpdateCmd;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -56,8 +53,8 @@ public class ClassCurriculumController {
@ApiOperation("所有数据") @ApiOperation("所有数据")
@GetMapping("/listAll") @GetMapping("/listAll")
public MultiResponse<ClassCurriculumCO> listAll() { public MultiResponse<ClassCurriculumCO> listAll(@RequestBody ClassCurriculumQry qry) {
return MultiResponse.of(new ArrayList<ClassCurriculumCO>()); return classCurriculumService.listAll(qry);
} }
@ApiOperation("详情") @ApiOperation("详情")

View File

@ -1,5 +1,6 @@
package com.zcloud.edu.command.query.study; package com.zcloud.edu.command.query.study;
import com.alibaba.cola.dto.MultiResponse;
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.command.convertor.study.ClassCurriculumChapterCoConvertor; import com.zcloud.edu.command.convertor.study.ClassCurriculumChapterCoConvertor;
@ -8,6 +9,7 @@ import com.zcloud.edu.domain.gateway.study.ClassCurriculumChapterGateway;
import com.zcloud.edu.dto.clientobject.study.ClassCurriculumCO; import com.zcloud.edu.dto.clientobject.study.ClassCurriculumCO;
import com.zcloud.edu.dto.clientobject.study.ClassCurriculumChapterCO; import com.zcloud.edu.dto.clientobject.study.ClassCurriculumChapterCO;
import com.zcloud.edu.dto.study.ClassCurriculumPageQry; import com.zcloud.edu.dto.study.ClassCurriculumPageQry;
import com.zcloud.edu.dto.study.ClassCurriculumQry;
import com.zcloud.edu.persistence.dataobject.study.ClassCurriculumChapterDO; import com.zcloud.edu.persistence.dataobject.study.ClassCurriculumChapterDO;
import com.zcloud.edu.persistence.dataobject.study.ClassCurriculumDO; import com.zcloud.edu.persistence.dataobject.study.ClassCurriculumDO;
import com.zcloud.edu.persistence.repository.study.ClassCurriculumChapterRepository; import com.zcloud.edu.persistence.repository.study.ClassCurriculumChapterRepository;
@ -21,6 +23,7 @@ import org.springframework.util.ObjectUtils;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
@ -62,10 +65,26 @@ public class ClassCurriculumQueryExe {
BeanUtils.copyProperties(classCurriculumDO, classCurriculumCO); BeanUtils.copyProperties(classCurriculumDO, classCurriculumCO);
List<ClassCurriculumChapterCO> classCurriculumChapterCOList = classCurriculumChapterCoConvertor.converDOsToCOs(classCurriculumChapterDOList); List<ClassCurriculumChapterCO> classCurriculumChapterCOList = classCurriculumChapterCoConvertor.converDOsToCOs(classCurriculumChapterDOList);
long videoCount = classCurriculumChapterCOList.stream().filter(bean -> !ObjectUtils.isEmpty(bean.getVideoCoursewareId())).count(); long videoCount = classCurriculumChapterCOList.stream().filter(bean -> !ObjectUtils.isEmpty(bean.getVideoCoursewareId())).count();
Tools.buildEntityTree(classCurriculumChapterCOList, "curriculumChapterId", "parentId", "childCurriculumChapterCOList", "0"); Tools.buildEntityTree(classCurriculumChapterCOList, "classCurriculumChapterId", "parentId", "childCurriculumChapterCOList", "0");
classCurriculumCO.setCurriculumChapterCOList(classCurriculumChapterCOList); classCurriculumCO.setCurriculumChapterCOList(classCurriculumChapterCOList);
classCurriculumCO.setVideoCount(videoCount); classCurriculumCO.setVideoCount(videoCount);
return SingleResponse.of(classCurriculumCO); return SingleResponse.of(classCurriculumCO);
} }
public MultiResponse<ClassCurriculumCO> executeListAll(ClassCurriculumQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
List<ClassCurriculumDO> curList = classCurriculumRepository.listAll(params);
List<String> classCurriculumIds = curList.stream().map(ClassCurriculumDO::getClassCurriculumId).collect(Collectors.toList());
List<ClassCurriculumChapterDO> chapterList = classCurriculumChapterRepository.listByClassCurriculumIds(classCurriculumIds);
List<ClassCurriculumChapterCO> chapterCoList = classCurriculumChapterCoConvertor.converDOsToCOs(chapterList);
Tools.buildEntityTree(chapterCoList, "classCurriculumChapterId", "parentId", "childCurriculumChapterCOList", "0");
Map<String, List<ClassCurriculumChapterCO>> chapterMap = chapterCoList.stream().collect(Collectors.groupingBy(ClassCurriculumChapterCO::getClassCurriculumId));
List<ClassCurriculumCO> curriculumList = classCurriculumCoConvertor.converDOsToCOs(curList);
curriculumList.stream().forEach(bean -> {
bean.setCurriculumChapterCOList(chapterMap.get(bean.getClassCurriculumId()));
});
return MultiResponse.of(curriculumList);
}
} }

View File

@ -1,5 +1,6 @@
package com.zcloud.edu.service.study; package com.zcloud.edu.service.study;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse; 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;
@ -9,10 +10,7 @@ import com.zcloud.edu.command.study.ClassCurriculumAddExe;
import com.zcloud.edu.command.study.ClassCurriculumRemoveExe; import com.zcloud.edu.command.study.ClassCurriculumRemoveExe;
import com.zcloud.edu.command.study.ClassCurriculumUpdateExe; import com.zcloud.edu.command.study.ClassCurriculumUpdateExe;
import com.zcloud.edu.dto.clientobject.study.ClassCurriculumCO; import com.zcloud.edu.dto.clientobject.study.ClassCurriculumCO;
import com.zcloud.edu.dto.study.ClassCurriculumAddCmd; import com.zcloud.edu.dto.study.*;
import com.zcloud.edu.dto.study.ClassCurriculumBatchAddCmd;
import com.zcloud.edu.dto.study.ClassCurriculumPageQry;
import com.zcloud.edu.dto.study.ClassCurriculumUpdateCmd;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -70,5 +68,10 @@ public class ClassCurriculumServiceImpl implements ClassCurriculumServiceI {
classCurriculumAddExe.executeBatchAdd(cmd); classCurriculumAddExe.executeBatchAdd(cmd);
return Response.buildSuccess(); return Response.buildSuccess();
} }
@Override
public MultiResponse<ClassCurriculumCO> listAll(ClassCurriculumQry qry) {
return classCurriculumQueryExe.executeListAll(qry);
}
} }

View File

@ -1,14 +1,13 @@
package com.zcloud.edu.api.study; package com.zcloud.edu.api.study;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse; 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.dto.clientobject.study.ClassCurriculumCO; import com.zcloud.edu.dto.clientobject.study.ClassCurriculumCO;
import com.zcloud.edu.dto.study.ClassCurriculumAddCmd; import com.zcloud.edu.dto.study.*;
import com.zcloud.edu.dto.study.ClassCurriculumBatchAddCmd;
import com.zcloud.edu.dto.study.ClassCurriculumPageQry;
import com.zcloud.edu.dto.study.ClassCurriculumUpdateCmd;
import java.nio.channels.MulticastChannel;
import java.util.List; import java.util.List;
/** /**
@ -31,5 +30,9 @@ public interface ClassCurriculumServiceI {
SingleResponse<ClassCurriculumCO> getInfoById(Long id); SingleResponse<ClassCurriculumCO> getInfoById(Long id);
Response batchAdd(ClassCurriculumBatchAddCmd cmd); Response batchAdd(ClassCurriculumBatchAddCmd cmd);
MultiResponse<ClassCurriculumCO> listAll(ClassCurriculumQry qry);
} }

View File

@ -44,6 +44,9 @@ public class ClassCurriculumCO extends ClientObject {
@ApiModelProperty(value = "章节目录") @ApiModelProperty(value = "章节目录")
private List<ClassCurriculumChapterCO> curriculumChapterCOList; private List<ClassCurriculumChapterCO> curriculumChapterCOList;
//目录级别 1-一级目录 2-二级目录
@ApiModelProperty(value = "目录级别 1-一级目录 2-二级目录")
private Integer catalogueLevel;
@ApiModelProperty(value = "所属单位id") @ApiModelProperty(value = "所属单位id")
@TableField(exist = false) @TableField(exist = false)

View File

@ -43,6 +43,11 @@ public class ClassCurriculumAddCmd extends Command {
@NotNull(message = "课程总时长不能为空") @NotNull(message = "课程总时长不能为空")
private double videoTotalTime; private double videoTotalTime;
//目录级别 1-一级目录 2-二级目录
@ApiModelProperty(value = "目录级别 1-一级目录 2-二级目录")
@NotNull(message = "课程总时长不能为空")
private Integer catalogueLevel;
@ApiModelProperty(value = "课程目录", name = "curriculumChapterAddCmdList", required = true) @ApiModelProperty(value = "课程目录", name = "curriculumChapterAddCmdList", required = true)
@NotNull(message = "课程目录") @NotNull(message = "课程目录")

View File

@ -0,0 +1,29 @@
package com.zcloud.edu.dto.study;
import com.alibaba.cola.dto.PageQuery;
import lombok.Data;
/**
* web-client
*
* @Author zhangyue
* @Date 2026-01-16 09:54:33
*/
@Data
public class ClassCurriculumQry {
/**
* ,
* - `like`: SQLLIKE
* - `eq`: SQL=
* - `gt`:
* - `lt`:
* - `ge`:
* - `le`:
* - `ne`: SQL!=
*/
private String likeClassCurriculumId;
private String eqClassId;
}

View File

@ -3,8 +3,10 @@ package com.zcloud.edu.domain.model.study;
import com.google.type.Decimal; import com.google.type.Decimal;
import com.jjb.saas.framework.domain.model.BaseE; import com.jjb.saas.framework.domain.model.BaseE;
import com.zcloud.gbscommon.utils.Tools; import com.zcloud.gbscommon.utils.Tools;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
@ -42,7 +44,7 @@ public class ClassCurriculumE extends BaseE {
private List<ClassCurriculumChapterE> curriculumChapterAddCmdList; private List<ClassCurriculumChapterE> curriculumChapterAddCmdList;
private Integer catalogueLevel;
//租户id //租户id
private Long tenantId; private Long tenantId;
//单位id //单位id

View File

@ -9,6 +9,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@ -39,6 +40,9 @@ public class ClassCurriculumDO extends BaseDO {
@ApiModelProperty(value = "课程总时长") @ApiModelProperty(value = "课程总时长")
private BigDecimal videoTotalTime; private BigDecimal videoTotalTime;
//目录级别 1-一级目录 2-二级目录
@ApiModelProperty(value = "目录级别 1-一级目录 2-二级目录")
private Integer catalogueLevel;
@ApiModelProperty(value = "所属单位id") @ApiModelProperty(value = "所属单位id")
@TableField(exist = false) @TableField(exist = false)
private long corpinfoId; private long corpinfoId;
@ -63,5 +67,6 @@ public class ClassCurriculumDO extends BaseDO {
@TableField(exist = false) @TableField(exist = false)
private String coverPath; private String coverPath;
} }

View File

@ -16,5 +16,7 @@ import java.util.List;
public interface ClassCurriculumChapterMapper extends BaseMapper<ClassCurriculumChapterDO> { public interface ClassCurriculumChapterMapper extends BaseMapper<ClassCurriculumChapterDO> {
List<ClassCurriculumChapterDO> listByClassCurriculumId(String classCurriculumId); List<ClassCurriculumChapterDO> listByClassCurriculumId(String classCurriculumId);
List<ClassCurriculumChapterDO> listByClassCurriculumIds(List<String> classCurriculumIds);
} }

View File

@ -61,5 +61,14 @@ public class ClassCurriculumChapterRepositoryImpl extends BaseRepositoryImpl<Cla
updateWrapper.set("delete_enum", "TRUE"); updateWrapper.set("delete_enum", "TRUE");
return classCurriculumChapterMapper.delete(updateWrapper); return classCurriculumChapterMapper.delete(updateWrapper);
} }
@Override
public List<ClassCurriculumChapterDO> listByClassCurriculumIds(List<String> classCurriculumIds) {
QueryWrapper<ClassCurriculumChapterDO> queryWrapper = new QueryWrapper<>();
queryWrapper.in("class_curriculum_id", classCurriculumIds);
queryWrapper.eq("delete_enum", "FALSE");
return classCurriculumChapterMapper.selectList(queryWrapper);
}
} }

View File

@ -14,6 +14,7 @@ import com.zcloud.gbscommon.utils.Query;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -66,5 +67,14 @@ public class ClassCurriculumRepositoryImpl extends BaseRepositoryImpl<ClassCurri
updateWrapper.eq("delete_enum", "FALSE"); updateWrapper.eq("delete_enum", "FALSE");
return classCurriculumMapper.delete(updateWrapper); return classCurriculumMapper.delete(updateWrapper);
} }
@Override
public List<ClassCurriculumDO> listAll(Map<String, Object> params) {
QueryWrapper<ClassCurriculumDO> queryWrapper = new QueryWrapper<>();
queryWrapper = PageQueryHelper.createPageQueryWrapper(queryWrapper, params);
queryWrapper.orderByDesc("create_time");
queryWrapper.eq("delete_enum", "FALSE");
return classCurriculumMapper.selectList(queryWrapper);
}
} }

View File

@ -21,5 +21,7 @@ public interface ClassCurriculumChapterRepository extends BaseRepository<ClassCu
Integer deleteByCurriculumId(String classCurriculumId); Integer deleteByCurriculumId(String classCurriculumId);
Integer deleteByClassId(String classId); Integer deleteByClassId(String classId);
List<ClassCurriculumChapterDO> listByClassCurriculumIds(List<String> classCurriculumIds);
} }

View File

@ -4,6 +4,7 @@ import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository; import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.edu.persistence.dataobject.study.ClassCurriculumDO; import com.zcloud.edu.persistence.dataobject.study.ClassCurriculumDO;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -22,5 +23,7 @@ public interface ClassCurriculumRepository extends BaseRepository<ClassCurriculu
ClassCurriculumDO getInfoById(long id); ClassCurriculumDO getInfoById(long id);
Integer deleteByClassId(String classId); Integer deleteByClassId(String classId);
List<ClassCurriculumDO> listAll(Map<String, Object> params);
} }

View File

@ -29,5 +29,36 @@
c.parent_id, c.parent_id,
c.sort c.sort
</select> </select>
<select id="listByClassCurriculumIds" resultType="com.zcloud.edu.persistence.dataobject.study.ClassCurriculumChapterDO">
SELECT
c.id,
c.curriculum_chapter_id,
c.class_id,
c.corpinfo_id,
c.class_curriculum_id,
c.name,
c.video_courseware_id,
c.sort,
c.parent_id,
v.courseware_name,
v.video_files,
v.courseware_introduce,
v.video_time,
v.screenshot_url
FROM
class_curriculum_chapter c
left join video_courseware v on v.video_courseware_id = c.video_courseware_id
<where>
AND c.delete_enum = 'FALSE'
AND c.class_curriculum_id in
<foreach item="item" index="index" collection="classCurriculumIds" open="(" separator="," close=")">
#{item}
</foreach>
</where>
ORDER BY
c.parent_id,
c.sort
</select>
</mapper> </mapper>