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.constant.UserConstant;
import com.gkhy.exam.common.domain.entity.SysUser;
import com.gkhy.exam.common.enums.ApproveStatusEnum;
import com.gkhy.exam.common.enums.PrivatizeEnum;
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.ExCourse;
import com.gkhy.exam.system.mapper.ExCourseChapterMapper;
import com.gkhy.exam.system.mapper.ExCourseMapper;
import com.gkhy.exam.system.mapper.ExCoursePhaseMapper;
import com.gkhy.exam.system.service.ExCourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
* 课程表 服务实现类
*
*
* @author kzy
* @since 2024-06-05 15:07:36
*/
@Service
public class ExCourseServiceImpl extends ServiceImpl implements ExCourseService {
@Autowired
private ExCourseChapterMapper courseChapterMapper;
@Autowired
private ExCoursePhaseMapper coursePhaseMapper;
@Override
public CommonPage selectCourseList(ExCourse course) {
SysUser user= SecurityUtils.getLoginUser().getUser();
if(!user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
course.setCompanyId(user.getCompanyId());
}
PageUtils.startPage();
List courseList=baseMapper.selectCourseList(course);
return CommonPage.restPage(courseList);
}
@Override
public CommonPage selectApproveCourseList(ExCourse course){
course.setState(ApproveStatusEnum.APPROVED.getCode());
return selectCourseList(course);
}
@Override
public ExCourse selectCourseById(Long courseId) {
ExCourse course= baseMapper.selectCourseById(courseId);
if(course.getPrivatize().equals(PrivatizeEnum.PUBLIC.getCode())){
return course;
}
SysUser currentUser=SecurityUtils.getLoginUser().getUser();
if(currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
return course;
}
if(!course.getCompanyId().equals(currentUser.getCompanyId())){
throw new ApiException("无权限查看其它企业课程");
}
return course;
}
@Override
public int insertCourse(ExCourse course) {
if(!checkNameUnique(course)){
throw new ApiException("课程名称已存在");
}
checkUserAllowed(course);
if(SecurityUtils.getLoginUser().getUser().getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
course.setState(ApproveStatusEnum.APPROVED.getCode());
course.setPrivatize(PrivatizeEnum.PUBLIC.getCode());
}else{
course.setState(ApproveStatusEnum.APPROVING.getCode());
}
int row =baseMapper.insert(course);
if(row<1){
throw new ApiException("新增课程失败");
}
return row;
}
@Override
public int updateCourse(ExCourse course) {
if(!checkNameUnique(course)){
throw new ApiException("课程名称已存在");
}
checkUserAllowed(baseMapper.selectById(course.getId()));
int row =baseMapper.updateById(course);
if(row<1){
throw new ApiException("更新课程失败");
}
return row;
}
public void checkUserAllowed(ExCourse course) {
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(!currentUser.getCompanyId().equals(course.getCompanyId())){
throw new ApiException("没有权限操作其他企业课程");
}
if(course.getId()!=null){
if(course.getState().equals(ApproveStatusEnum.APPROVED.getCode())){
throw new ApiException("已审批的课程不能再修改");
}
}
}
@Override
public int deleteCourseById(Long courseId) {
//校验课程是否被分配/是否存在字章节
checkUserAllowed(baseMapper.selectById(courseId));
Integer phaseCount= coursePhaseMapper.selectCountByCourseId(courseId);
if(phaseCount>0){
throw new ApiException("课程已分配,不能删除");
}
Integer chapterCount=courseChapterMapper.selectCountByCourseId(courseId);
if(chapterCount>0){
throw new ApiException("课程下存在章节,不能删除");
}
int row =baseMapper.deleteByCourseId(courseId);
if(row<1){
throw new ApiException("删除课程失败");
}
return row;
}
@Override
public boolean checkNameUnique(ExCourse course) {
Long courseId=course.getId()==null?-1L:course.getId();
ExCourse cou= baseMapper.checkNameUnique(course.getName());
if(cou!=null&&cou.getId().longValue()!=courseId.longValue()){
return UserConstant.NOT_UNIQUE;
}
return UserConstant.UNIQUE;
}
@Override
public int doApprove(ExCourse course) {
ExCourse existCourse=baseMapper.selectById(course.getId());
checkUserAllowed(existCourse);
int row=baseMapper.updateById(course);
if(row<1){
throw new ApiException("审批失败");
}
return row;
}
@Override
public int changeStatus(ExCourse course) {
if(course.getId()==null||course.getStatus()==null){
throw new ApiException("参数传参缺失");
}
ExCourse entity=new ExCourse().setId(course.getId()).setStatus(course.getStatus());
entity.setUpdateBy(SecurityUtils.getUsername());
return baseMapper.updateById(entity);
}
}