CourseDictServiceImpl.java 14.4 KB
package com.subsidy.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.subsidy.common.exception.HttpException;
import com.subsidy.dto.course.AddCourseDTO;
import com.subsidy.dto.course.QueryCoursesDTO;
import com.subsidy.dto.course.UpdateCoursesDTO;
import com.subsidy.dto.field.QueryFieldsDTO;
import com.subsidy.mapper.CategoryMapper;
import com.subsidy.mapper.CourseCategoryMappingMapper;
import com.subsidy.mapper.CourseDictMapper;
import com.subsidy.mapper.CourseFieldMappingMapper;
import com.subsidy.mapper.CourseJobMappingMapper;
import com.subsidy.mapper.CourseRankMappingMapper;
import com.subsidy.mapper.FieldDictMapper;
import com.subsidy.mapper.JobDictMapper;
import com.subsidy.mapper.PaperDictMapper;
import com.subsidy.mapper.RankDictMapper;
import com.subsidy.mapper.RoleAdministerMappingMapper;
import com.subsidy.model.CategoryDO;
import com.subsidy.model.CourseCategoryMappingDO;
import com.subsidy.model.CourseDictDO;
import com.subsidy.model.CourseFieldMappingDO;
import com.subsidy.model.CourseJobMappingDO;
import com.subsidy.model.CourseRankMappingDO;
import com.subsidy.model.FieldDictDO;
import com.subsidy.model.JobDictDO;
import com.subsidy.model.PaperDictDO;
import com.subsidy.model.RankDictDO;
import com.subsidy.model.RoleAdministerMappingDO;
import com.subsidy.service.CourseDictService;
import com.subsidy.util.ConstantUtils;
import com.subsidy.util.excel.ExcelUtil;
import com.subsidy.vo.course.QueryCoursesVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author DengMin
 * @since 2021-10-11
 */
@Service
public class CourseDictServiceImpl extends ServiceImpl<CourseDictMapper, CourseDictDO> implements CourseDictService {


    @Autowired
    private FieldDictMapper fieldDictMapper;

    @Autowired
    private CategoryMapper categoryMapper;

    @Autowired
    private JobDictMapper jobDictMapper;

    @Autowired
    private CourseDictMapper courseDictMapper;

    @Autowired
    private PaperDictMapper paperDictMapper;

    @Autowired
    private CourseFieldMappingMapper courseFieldMappingMapper;

    @Autowired
    private CourseJobMappingMapper courseJobMappingMapper;

    @Autowired
    private CourseCategoryMappingMapper courseCategoryMappingMapper;

    @Autowired
    private CourseRankMappingMapper courseRankMappingMapper;

    @Autowired
    private RankDictMapper rankDictMapper;

    @Transactional(rollbackFor = Exception.class)
    public String addCourse(AddCourseDTO addCourseDTO) {

        int count;

        if (null != addCourseDTO.getCompanyId()) {
            count = this.baseMapper.selectCount(new QueryWrapper<CourseDictDO>()
                    .lambda()
                    .eq(CourseDictDO::getCourseName, addCourseDTO.getCourseName())
                    .isNull(CourseDictDO::getCompanyId));

        } else {
            count = this.baseMapper.selectCount(new QueryWrapper<CourseDictDO>()
                    .lambda()
                    .eq(CourseDictDO::getCourseName, addCourseDTO.getCourseName())
                    .eq(CourseDictDO::getCompanyId, addCourseDTO.getCompanyId()));
        }

        if (count > 0) {
            throw new HttpException(20001);
        }

        CourseDictDO courseDictDO = new CourseDictDO();
        BeanUtils.copyProperties(addCourseDTO, courseDictDO);
        courseDictDO.setOpenStatus(0);
        this.baseMapper.insert(courseDictDO);

        if (null != addCourseDTO.getCategoryDOS()) {
            List<Long> categoryDOS = addCourseDTO.getCategoryDOS();
            for (Long lg : categoryDOS) {
                CourseCategoryMappingDO courseCategoryMappingDO = new CourseCategoryMappingDO();
                courseCategoryMappingDO.setCategoryId(lg);
                courseCategoryMappingDO.setCourseId(courseDictDO.getId());
                courseCategoryMappingMapper.insert(courseCategoryMappingDO);
            }
        }

        if (null != addCourseDTO.getJobDictDOS()) {
            List<Long> jobDictDOS = addCourseDTO.getJobDictDOS();
            for (Long lg : jobDictDOS) {
                CourseJobMappingDO courseJobMappingDO = new CourseJobMappingDO();
                courseJobMappingDO.setJobId(lg);
                courseJobMappingDO.setCourseId(courseDictDO.getId());
                courseJobMappingMapper.insert(courseJobMappingDO);
            }
        }


        if (null != addCourseDTO.getFieldDictDOS()) {
            List<Long> fieldDictDOS = addCourseDTO.getFieldDictDOS();
            for (Long lg : fieldDictDOS) {
                CourseFieldMappingDO courseFieldMappingDO = new CourseFieldMappingDO();
                courseFieldMappingDO.setCourseId(courseDictDO.getId());
                courseFieldMappingDO.setFieldId(lg);
                courseFieldMappingMapper.insert(courseFieldMappingDO);
            }
        }

        if (null != addCourseDTO.getRankDictDOS()) {
            List<Long> rankDictDOS = addCourseDTO.getRankDictDOS();
            for (Long lg : rankDictDOS) {
                CourseRankMappingDO courseRankMappingDO = new CourseRankMappingDO();
                courseRankMappingDO.setCourseId(courseDictDO.getId());
                courseRankMappingDO.setRankId(lg);
                courseRankMappingMapper.insert(courseRankMappingDO);
            }
        }

        return ConstantUtils.ADD_SUCCESS;
    }

    public String deleteCourse(CourseDictDO courseDictDO) {
        this.baseMapper.deleteById(courseDictDO.getId());

        //行业关联
        courseFieldMappingMapper.delete(new QueryWrapper<CourseFieldMappingDO>()
                .lambda()
                .eq(CourseFieldMappingDO::getCourseId, courseDictDO.getId()));

        //课程类目关联
        courseCategoryMappingMapper.delete(new QueryWrapper<CourseCategoryMappingDO>()
                .lambda()
                .eq(CourseCategoryMappingDO::getCourseId, courseDictDO.getId()));

        //岗位关联
        courseJobMappingMapper.delete(new QueryWrapper<CourseJobMappingDO>()
                .lambda()
                .eq(CourseJobMappingDO::getCourseId, courseDictDO.getId()));

        paperDictMapper.delete(new QueryWrapper<PaperDictDO>()
                .lambda()
                .eq(PaperDictDO::getCourseId, courseDictDO.getId()));

        return ConstantUtils.DELETE_SUCCESS;
    }

    public IPage<QueryCoursesVO> queryCourses(QueryCoursesDTO queryCoursesDTO) {
        Page pager = new Page(queryCoursesDTO.getPageNum(), queryCoursesDTO.getPageSize());
        IPage<QueryCoursesVO> iPage = this.baseMapper.queryCourses(pager, queryCoursesDTO.getCourseName(), queryCoursesDTO.getFieldId(), queryCoursesDTO.getCategoryId(), queryCoursesDTO.getJobId(), queryCoursesDTO.getRankId(), queryCoursesDTO.getCourseType(), null, queryCoursesDTO.getOpenStatus());

        List<QueryCoursesVO> queryCoursesVOS = iPage.getRecords();
        for (QueryCoursesVO queryCoursesVO : queryCoursesVOS) {

            //课程类目
            List<CategoryDO> categoryDOS = categoryMapper.queryCourseCategory(queryCoursesVO.getId());
            queryCoursesVO.setCategoryDOS(categoryDOS);

            //适用岗位
            List<JobDictDO> jobDictDOS = jobDictMapper.queryCourseJobs(queryCoursesVO.getId());
            queryCoursesVO.setJobDictDOS(jobDictDOS);

            //职级
            List<RankDictDO> rankDictDOS = rankDictMapper.queryCourseRanks(queryCoursesVO.getId());
            queryCoursesVO.setRankDictDOS(rankDictDOS);

            //行业范围
            List<FieldDictDO> fieldDictDOS = fieldDictMapper.queryCourseFields(queryCoursesVO.getId());
            queryCoursesVO.setFieldDictDOS(fieldDictDOS);

            //课时
            Integer vodCnt = courseDictMapper.queryCourseCnt(queryCoursesVO.getId());
            queryCoursesVO.setVodCounts(vodCnt);

            //课程总时长
            Integer vodPlayLength = courseDictMapper.queryCoursePlayLength(queryCoursesVO.getId());
            queryCoursesVO.setVodLength(vodPlayLength);

            //测试数
            Integer paperCnt = paperDictMapper.queryCoursePapersCnt(queryCoursesVO.getId());
            queryCoursesVO.setPaperCount(paperCnt);
        }

        return iPage;
    }

    public String updateCourses(UpdateCoursesDTO updateCoursesDTO) {
        int count;

        if (null != updateCoursesDTO.getCompanyId()) {
            count = this.baseMapper.selectCount(new QueryWrapper<CourseDictDO>()
                    .lambda()
                    .eq(CourseDictDO::getCourseName, updateCoursesDTO.getCourseName())
                    .ne(CourseDictDO::getId, updateCoursesDTO.getCompanyId()));

        } else {
            count = this.baseMapper.selectCount(new QueryWrapper<CourseDictDO>()
                    .lambda()
                    .eq(CourseDictDO::getCourseName, updateCoursesDTO.getCourseName())
                    .isNull(CourseDictDO::getCompanyId)
                    .ne(CourseDictDO::getId, updateCoursesDTO.getId()));
        }

        if (count > 0) {
            throw new HttpException(20001);
        }
        CourseDictDO courseDictDO = this.baseMapper.selectById(updateCoursesDTO.getId());
        BeanUtils.copyProperties(updateCoursesDTO, courseDictDO);
        this.baseMapper.updateById(courseDictDO);

        //行业
        if (null != updateCoursesDTO.getFieldDictDOS()) {
            courseFieldMappingMapper.delete(new QueryWrapper<CourseFieldMappingDO>()
                    .lambda()
                    .eq(CourseFieldMappingDO::getCourseId, updateCoursesDTO.getId()));

            List<Long> fieldDictDOS = updateCoursesDTO.getFieldDictDOS();
            for (Long lg : fieldDictDOS) {
                CourseFieldMappingDO courseFieldMappingDO = new CourseFieldMappingDO();
                courseFieldMappingDO.setCourseId(updateCoursesDTO.getId());
                courseFieldMappingDO.setFieldId(lg);
                courseFieldMappingMapper.insert(courseFieldMappingDO);
            }
        }

        //类目
        if (null != updateCoursesDTO.getCategoryDOS()) {
            courseCategoryMappingMapper.delete(new QueryWrapper<CourseCategoryMappingDO>()
                    .lambda()
                    .eq(CourseCategoryMappingDO::getCourseId, updateCoursesDTO.getId()));

            List<Long> categoryDOS = updateCoursesDTO.getCategoryDOS();
            for (Long lg : categoryDOS) {
                CourseCategoryMappingDO courseCategoryMappingDO = new CourseCategoryMappingDO();
                courseCategoryMappingDO.setCourseId(updateCoursesDTO.getId());
                courseCategoryMappingDO.setCategoryId(lg);
                courseCategoryMappingMapper.insert(courseCategoryMappingDO);
            }
        }

        //岗位
        if (null != updateCoursesDTO.getJobDictDOS()) {
            courseJobMappingMapper.delete(new QueryWrapper<CourseJobMappingDO>()
                    .lambda()
                    .eq(CourseJobMappingDO::getCourseId, updateCoursesDTO.getId()));

            List<Long> jobDictDOS = updateCoursesDTO.getJobDictDOS();
            for (Long lg : jobDictDOS) {
                CourseJobMappingDO courseJobMappingDO = new CourseJobMappingDO();
                courseJobMappingDO.setCourseId(updateCoursesDTO.getId());
                courseJobMappingDO.setJobId(lg);
                courseJobMappingMapper.insert(courseJobMappingDO);
            }
        }

        //职级
        if (null != updateCoursesDTO.getRankDictDOS()) {
            courseRankMappingMapper.delete(new QueryWrapper<CourseRankMappingDO>()
                    .lambda()
                    .eq(CourseRankMappingDO::getCourseId, updateCoursesDTO.getId()));

            List<Long> rankDictDOS = updateCoursesDTO.getRankDictDOS();
            for (Long lg : rankDictDOS) {
                CourseRankMappingDO courseRankMappingDO = new CourseRankMappingDO();
                courseRankMappingDO.setCourseId(updateCoursesDTO.getId());
                courseRankMappingDO.setRankId(lg);
                courseRankMappingMapper.insert(courseRankMappingDO);
            }
        }
        return ConstantUtils.DELETE_SUCCESS;
    }

    public IPage queryCompanyCourse(QueryCoursesDTO queryCoursesDTO) {
        Page pager = new Page(queryCoursesDTO.getPageNum(), queryCoursesDTO.getPageSize());
        IPage<QueryCoursesVO> iPage = this.baseMapper.queryCourses(pager, queryCoursesDTO.getCourseName(), null, queryCoursesDTO.getCategoryId(), queryCoursesDTO.getJobId(), queryCoursesDTO.getRankId(), null, queryCoursesDTO.getCompanyId(), queryCoursesDTO.getOpenStatus());

        List<QueryCoursesVO> queryCoursesVOS = iPage.getRecords();
        for (QueryCoursesVO queryCoursesVO : queryCoursesVOS) {

            //行业范围
            List<FieldDictDO> fieldDictDOS = fieldDictMapper.queryCourseFields(queryCoursesVO.getId());
            queryCoursesVO.setFieldDictDOS(fieldDictDOS);

            //课程类目
            List<CategoryDO> categoryDOS = categoryMapper.queryCourseCategory(queryCoursesVO.getId());
            queryCoursesVO.setCategoryDOS(categoryDOS);

            //适用岗位
            List<JobDictDO> jobDictDOS = jobDictMapper.queryCourseJobs(queryCoursesVO.getId());
            queryCoursesVO.setJobDictDOS(jobDictDOS);

            //职级
            List<RankDictDO> rankDictDOS = rankDictMapper.queryCourseRanks(queryCoursesVO.getId());
            queryCoursesVO.setRankDictDOS(rankDictDOS);

            //课时
            Integer vodCnt = courseDictMapper.queryCourseCnt(queryCoursesVO.getId());
            queryCoursesVO.setVodCounts(vodCnt);

            //课程总时长
            Integer vodPlayLength = courseDictMapper.queryCoursePlayLength(queryCoursesVO.getId());
            queryCoursesVO.setVodLength(vodPlayLength);

            //测试数
            Integer paperCnt = paperDictMapper.queryCoursePapersCnt(queryCoursesVO.getId());
            queryCoursesVO.setPaperCount(paperCnt);
        }
        return iPage;
    }

    public String updateOpenStatus(CourseDictDO courseDictDO) {
        this.baseMapper.updateOpenStatus(courseDictDO);
        return ConstantUtils.SET_SUCCESS;
    }

}