CollegesDictServiceImpl.java 8.85 KB
package com.subsidy.service.impl;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.subsidy.common.constant.*;
import com.subsidy.common.exception.HttpException;
import com.subsidy.dto.college.ExportCollegeDTO;
import com.subsidy.dto.project.ExportProjectDTO;
import com.subsidy.dto.project.ProjectCollegeListDTO;
import com.subsidy.mapper.*;
import com.subsidy.model.*;
import com.subsidy.service.CollegesDictService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.subsidy.util.JwtUtil;
import com.subsidy.util.Localstorage;
import com.subsidy.util.PDFUtil;
import com.subsidy.util.RandomUtil;
import com.subsidy.util.excel.ExcelUtil;
import com.subsidy.vo.college.CollegesVO;
import com.subsidy.vo.college.ExcelFieldVO;
import com.subsidy.vo.college.ExportSchoolProjectSummaryVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 院校字典表 服务实现类
 * </p>
 *
 * @author Tuyp
 * @since 2025-01-08
 */
@Service
public class CollegesDictServiceImpl extends ServiceImpl<CollegesDictMapper, CollegesDictDO> implements CollegesDictService {

    @Autowired
    private ProjectMapper projectMapper;

    @Autowired
    private MatchDictMapper matchDictMapper;

    @Autowired
    private ProjectMembersMapper projectMembersMapper;

    @Autowired
    private TeacherMapper teacherMapper;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public CollegesVO login(CollegesDictDO collegesDictDO) {
        CollegesVO collegesVO = new CollegesVO();
        CollegesDictDO collegesDict = this.baseMapper.selectOne(new QueryWrapper<CollegesDictDO>().lambda()
                .eq(CollegesDictDO::getAccount, collegesDictDO.getAccount()));
        if (collegesDict == null) {
            throw new HttpException(10060);
        }

        if (!collegesDict.getPassword().equals(collegesDictDO.getPassword())) {
            throw new HttpException(10061);
        }

        if (collegesDict.getLoginStatus() == 0) {
            throw new HttpException(10067);
        }

        BeanUtils.copyProperties(collegesDict, collegesVO);
        if (collegesDict.getLoginTime() != null) {
            collegesVO.setIsLogin(1);
        } else {
            collegesVO.setIsLogin(0);
        }

        String token = JwtUtil.generateToken(collegesDict.getId(), Platform.school);
        collegesVO.setToken(token);
        return collegesVO;
    }

    @Override
    public void addContact(CollegesDictDO collegesDictDO) {
        collegesDictDO.setLoginTime(LocalDateTime.now());
        this.baseMapper.updateById(collegesDictDO);
    }

    @Override
    public void createColleges(CollegesDictDO collegesDictDO) {
        CollegesDictDO collegesDict = this.baseMapper.selectOne(new QueryWrapper<CollegesDictDO>().lambda()
                .eq(CollegesDictDO::getAccount, collegesDictDO.getAccount()));
        if (collegesDict != null) {
            throw new HttpException(10062);
        }

        if (collegesDictDO.getName().equals(collegesDict.getName())) {
            throw new HttpException(10063);
        }

        if (collegesDictDO.getCode().equals(collegesDict.getCode())) {
            throw new HttpException(10064);
        }

        collegesDictDO.setAccount("shzc" + collegesDictDO.getCode());
        collegesDictDO.setPassword(RandomUtil.randomPass(8));
        this.baseMapper.insert(collegesDictDO);
    }

    @Override
    public void exportCollege() {
        List<ExcelFieldVO> field = ExcelUtil.getField(ExportCollegeDTO.class);
        List<Map> data = new ArrayList<>();
        List<CollegesDictDO> list = this.baseMapper.selectList(new QueryWrapper<>());
        if (list != null && list.size() > 0) {
            for (CollegesDictDO collegesDictDO : list) {
                data.add(JSON.parseObject(JSON.toJSONString(collegesDictDO), Map.class));
            }
        }
        ExcelUtil.writeExcel(field, data);
    }

    @Override
    public void exportProjectCollegeList(ProjectCollegeListDTO projectCollegeListDTO) {

        List<Map> data = new ArrayList<>();
        for (Long id : projectCollegeListDTO.getIds()) {
            ProjectDO projectDO = projectMapper.selectById(id);
            if (projectDO != null) {
                ExportProjectDTO project = new ExportProjectDTO();
                BeanUtils.copyProperties(projectDO, project);

                MatchDictDO matchDictDO = matchDictMapper.selectById(projectDO.getMatchId());
                if (matchDictDO != null) {
                    project.setMatchName(matchDictDO.getMatchName());
                }

                List<ProjectMembersDO> memberDOS = projectMembersMapper.selectList(new QueryWrapper<ProjectMembersDO>()
                        .lambda()
                        .eq(ProjectMembersDO::getProjectId, projectDO.getId()));

                String teamMember = "";

                for (ProjectMembersDO memberDO : memberDOS) {
                    if (Role.LEADER.equals(memberDO.getRole())) {
                        project.setName(memberDO.getUserName());
                        project.setMajor(memberDO.getMajor());
                        TeacherDO teacherDO = teacherMapper.selectById(projectDO.getTeacherId());
                        CollegesDictDO collegesDictDO = this.baseMapper.selectById(projectDO.getCollegeId());
                        project.setCollegeName(collegesDictDO.getName());
                        project.setTelephone(teacherDO.getTelephone());
                        project.setEducation(teacherDO.getEducation());
                        project.setPosition(teacherDO.getPosition());
                        project.setTitle(teacherDO.getTitle());
                        project.setProjectName(projectDO.getCourseName());
                        project.setProjectProgress(projectDO.getProjectGroup());
                        project.setDates(projectDO.getStartDate() + "~" + projectDO.getEndDate());
                        BeanUtils.copyProperties(projectDO, project);
                    } else {
                        teamMember += memberDO.getUserName() + ",";
                    }

                }

                if (StringUtils.isNotBlank(teamMember)) {
                    project.setTeamMembers(teamMember.substring(0, teamMember.length() - 1));
                } else {
                    project.setTeamMembers("");
                }

                data.add(JSON.parseObject(JSON.toJSONString(project), Map.class));
            }
        }
        ExcelUtil.writeExcel(ExcelUtil.getField(ExportProjectDTO.class), data);
    }


    @Override
    public void exportSchoolProjectSummary(ProjectDO projectDO1) {
        CollegesDictDO collegesDictDO = this.baseMapper.selectById(projectDO1.getCollegeId());

        MatchDictDO matchDictDO = matchDictMapper.selectOne(new QueryWrapper<MatchDictDO>()
                .lambda()
                .eq(MatchDictDO::getStatus, 1));
        if (matchDictDO == null) {
            throw new HttpException(10054);
        }

        List<ProjectDO> list = this.baseMapper.getPreliminaryProjectList(matchDictDO.getId(), ProjectSchedule.SEMI_FINAL_REVIEW, projectDO1.getCollegeId());
        List<Map> data = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(list)) {
            for (int i = 0; i < list.size(); i++) {
                ExportSchoolProjectSummaryVO eps = new ExportSchoolProjectSummaryVO();
                ProjectDO projectDO = list.get(i);
                BeanUtils.copyProperties(projectDO, eps);
                eps.setNumber(i + 1);

                TeacherDO teacherDO = teacherMapper.selectById(projectDO.getTeacherId());
                eps.setTelephone(teacherDO.getTelephone());
                eps.setCourseName(projectDO.getCourseName());
                eps.setCollegeName(collegesDictDO.getName());
                eps.setTeacherName(teacherDO.getUserName());
                eps.setGender(PDFUtil.idCard2Gender(teacherDO.getIdCard()));
                eps.setBirthDate(PDFUtil.idCard2BirthDate(teacherDO.getIdCard()));
                eps.setYears(projectDO.getYears());
                eps.setPosition(teacherDO.getPosition() + "/" + teacherDO.getTitle());
                eps.setEmail(teacherDO.getEmail());

                data.add(JSON.parseObject(JSON.toJSONString(eps), Map.class));
            }
        }

        String title = matchDictDO.getMatchName() + "汇总表";
        ExcelUtil.writeSchoolProjectExcel(title, collegesDictDO.getName(), collegesDictDO.getContactName(), collegesDictDO.getContactPhone(), ExcelUtil.getField(ExportSchoolProjectSummaryVO.class), data);
    }
}