package com.gkhy.exam.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.common.api.CommonPage; import com.gkhy.exam.common.config.MinioConfig; import com.gkhy.exam.common.constant.UserConstant; import com.gkhy.exam.common.domain.entity.SysUser; import com.gkhy.exam.common.enums.ApproveStatusEnum; import com.gkhy.exam.common.enums.UserTypeEnum; import com.gkhy.exam.common.exception.ApiException; import com.gkhy.exam.common.utils.PageUtils; import com.gkhy.exam.common.utils.SecurityUtils; import com.gkhy.exam.system.domain.ExCourseChapter; import com.gkhy.exam.system.domain.ExCourseChapterPeriod; import com.gkhy.exam.system.domain.ExResource; import com.gkhy.exam.system.mapper.ExCourseChapterMapper; import com.gkhy.exam.system.mapper.ExCourseChapterPeriodMapper; import com.gkhy.exam.system.mapper.ExCourseMapper; import com.gkhy.exam.system.service.ExCourseChapterService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** *

* 课程章节表 服务实现类 *

* * @author kzy * @since 2024-06-05 15:07:36 */ @Service public class ExCourseChapterServiceImpl extends ServiceImpl implements ExCourseChapterService { @Autowired private ExCourseChapterPeriodMapper courseChapterPeriodMapper; @Autowired private ExCourseMapper courseMapper; @Autowired private MinioConfig minioConfig; @Override public CommonPage selectChapterList(ExCourseChapter chapter) { if(chapter.getCourseId()==null){ throw new ApiException("课程id不能为空"); } PageUtils.startPage(); List chapterList=baseMapper.selectChapterList(chapter); return CommonPage.restPage(chapterList); } @Override public ExCourseChapter selectChapterById(Long chapterId) { return baseMapper.selectChapterById(chapterId); } @Override @Transactional(rollbackFor = RuntimeException.class) public int insertChapter(ExCourseChapter chapter) { checkUserAllowed(chapter); if(!checkNameUnique(chapter)){ throw new ApiException("章节名称已存在"); } SysUser user= SecurityUtils.getLoginUser().getUser(); Long companyId=!user.getUserType().equals(UserTypeEnum.SYSTEM_USER)?user.getCompanyId():null; chapter.setCompanyId(companyId); int row=baseMapper.insert(chapter); if(row<1){ throw new ApiException("新增章节失败"); } return row; } @Override @Transactional(rollbackFor = RuntimeException.class) public int updateChapter(ExCourseChapter chapter) { checkUserAllowed(chapter); if(!checkNameUnique(chapter)){ throw new ApiException("章节名称已存在"); } chapter.setUpdateBy(SecurityUtils.getUsername()); int row=baseMapper.updateById(chapter); if(row<1){ throw new ApiException("更新章节失败"); } return row; } @Override @Transactional(rollbackFor = RuntimeException.class) public int deleteChapterById(Long chapterId) { //校验课程是否已被分配 ,章节下面是否存在课时 checkUserAllowed(baseMapper.selectById(chapterId)); int periodCount=baseMapper.selectPeriodCountById(chapterId); if(periodCount>0){ throw new ApiException("章节下已绑定课时,不能删除"); } int row=baseMapper.deleteById(chapterId); if(row<1){ throw new ApiException("删除章节失败"); } courseChapterPeriodMapper.deletePeriodByChapterId(chapterId); return row; } @Override public boolean checkNameUnique(ExCourseChapter chapter) { if(chapter.getCourseId()==null){ throw new ApiException("课程id不能为空"); } Long chapterId=chapter.getId()==null?-1L:chapter.getId(); ExCourseChapter cc= baseMapper.checkNameUnique(chapter.getName(),chapter.getCourseId()); if(cc!=null&&cc.getId().longValue()!=chapterId.longValue()){ return UserConstant.NOT_UNIQUE; } return UserConstant.UNIQUE; } @Override public List selectChapterByCourseId(Long courseId,Integer status) { List courseChapterList= baseMapper.selectChapterByCourseId(courseId,null); for(ExCourseChapter courseChapter:courseChapterList){ if(courseChapter.getChapterPeriods()!=null&& !courseChapter.getChapterPeriods().isEmpty()){ List courseChapterPeriodList=courseChapter.getChapterPeriods(); for(ExCourseChapterPeriod courseChapterPeriod:courseChapterPeriodList){ if(courseChapterPeriod.getResource()!=null){ ExResource resource=courseChapterPeriod.getResource(); resource.setResourcePath(minioConfig.getEndpoint()+minioConfig.getBucketName()+"/"+resource.getResourcePath()); } } } } return courseChapterList; } public void checkUserAllowed(ExCourseChapter courseChapter) { SysUser currentUser= SecurityUtils.getLoginUser().getUser(); if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){ return; } if(currentUser.getUserType().equals(UserTypeEnum.STUDENT.getCode())){ throw new ApiException("没有权限操作"); } if(courseChapter.getCompanyId()!=null&&!currentUser.getCompanyId().equals(courseChapter.getCompanyId())){ throw new ApiException("没有权限操作其他企业课程"); } int state=courseMapper.selectCourseState(courseChapter.getCourseId()); if(state==ApproveStatusEnum.APPROVED.getCode()){ throw new ApiException("已审批的课程不能再操作"); } if(state==ApproveStatusEnum.APPROVING.getCode()){ throw new ApiException("待审批的课程不能再操作"); } } }