MemberServiceImpl.java 6.43 KB
package com.subsidy.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.subsidy.dto.member.AddProjectMembersDTO;
import com.subsidy.dto.member.DownloadFailClassMembers;
import com.subsidy.dto.member.DownloadFailClassMembersDTO;
import com.subsidy.dto.member.ImportClassMemberDTO;
import com.subsidy.mapper.*;
import com.subsidy.model.GroupMemberMappingDO;
import com.subsidy.model.LaborGroupDictDO;
import com.subsidy.model.MemberDO;
import com.subsidy.model.ProjectDO;
import com.subsidy.service.MemberService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.subsidy.util.excel.ExcelUtil;
import com.subsidy.vo.member.GetMembersVO;
import com.subsidy.vo.member.GroupMembersVO;
import com.subsidy.vo.member.ImportClassMembersVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author Tuyp
 * @since 2024-07-18
 */
@Service
public class MemberServiceImpl extends ServiceImpl<MemberMapper, MemberDO> implements MemberService {

    @Autowired
    private LaborGroupDictMapper laborGroupDictMapper;

    @Autowired
    private GroupMemberMappingMapper groupMemberMappingMapper;

    @Autowired
    private ProjectMemberMappingMapper projectMemberMappingMapper;

    @Autowired
    private ProjectMapper projectMapper;

    @Autowired
    private MemberMapper memberMapper;

    public GetMembersVO getMembers(ProjectDO projectDO) {

        GetMembersVO getMembersVO = new GetMembersVO();

        ProjectDO projectDO1 = projectMapper.selectById(projectDO.getId());

        LaborGroupDictDO laborGroupDictDO1 = laborGroupDictMapper.selectOne(new QueryWrapper<LaborGroupDictDO>()
                .lambda()
                .eq(LaborGroupDictDO::getLaborId, projectDO1.getLaborServiceId())
                .isNull(LaborGroupDictDO::getParentId));

        //父节点
        getMembersVO.setId(laborGroupDictDO1.getId());
        getMembersVO.setGroupName(laborGroupDictDO1.getGroupName());
        //人
        List<GroupMembersVO> groupMembersVOS = groupMemberMappingMapper.groupMembers(laborGroupDictDO1.getId(),projectDO.getId());
        getMembersVO.setGroupMembersVOS(groupMembersVOS);

        //子节点
        List<LaborGroupDictDO> laborGroupDictDOS = laborGroupDictMapper.selectList(new QueryWrapper<LaborGroupDictDO>()
                .lambda()
                .eq(LaborGroupDictDO::getParentId, laborGroupDictDO1.getId()));

        List<GetMembersVO> getMembersVOS = new ArrayList<>();

        for (LaborGroupDictDO laborGroupDictDO2 : laborGroupDictDOS) {
            GetMembersVO getMembersVO1 = new GetMembersVO();
            List<GroupMembersVO> groupMembersVOS1 = groupMemberMappingMapper.groupMembers(laborGroupDictDO2.getId(),projectDO.getId());
            getMembersVO1.setGroupName(laborGroupDictDO2.getGroupName());
            getMembersVO1.setId(laborGroupDictDO2.getId());
            getMembersVO1.setGroupMembersVOS(groupMembersVOS1);
            getMembersVOS.add(getMembersVO1);
        }
        getMembersVO.setGetMembersVOS(getMembersVOS);

        return getMembersVO;
    }


    public ImportClassMembersVO importClassMembers(MultipartFile multipartFile, Long projectId) {

        ImportClassMembersVO importClassMembersVO = new ImportClassMembersVO();

        ProjectDO projectDO = projectMapper.selectById(projectId);

        List<ImportClassMemberDTO> importClassMemberDTOS = ExcelUtil.readExcel(null, ImportClassMemberDTO.class, multipartFile);

        //查找企业下所有的学员的手机号    手机 姓名 身份证
        List<String> companyMembers = groupMemberMappingMapper.allLaborMembers(projectDO.getLaborServiceId());
        //查找项目下已经存在的人
        List<String> projectMembers = groupMemberMappingMapper.allProjectMembers(projectDO.getId());

        List<ImportClassMemberDTO> successMembers = new ArrayList<>();
        List<ImportClassMemberDTO> failMembers = new ArrayList<>();

        //查看该学员是否该企业下的人,不是的话就要返回  是的话直接导入成功
        for (ImportClassMemberDTO imd : importClassMemberDTOS) {

            //这个人是否已经在项目里了,在的话就不属于失败
            if (null == imd.getUserName() || null == imd.getTelephone() || null == imd.getIdCard()) {
                imd.setReason("人员信息不完整");
                failMembers.add(imd);
            } else if (!companyMembers.contains(imd.getUserName() + imd.getIdCard())) {
                imd.setReason("企业内未查询到该成员信息");
                failMembers.add(imd);
            } else if (successMembers.contains(imd.getUserName() + imd.getIdCard())||projectMembers.contains(imd.getUserName() + imd.getIdCard())) {
                imd.setReason("人员信息重复");
                failMembers.add(imd);
            } else{
                MemberDO memberDO = memberMapper.selectOne(new QueryWrapper<MemberDO>()
                .lambda()
                .eq(MemberDO::getTelephone,imd.getTelephone()));
                imd.setId(memberDO.getId());
                imd.setLaborId(projectDO.getLaborServiceId());

                GroupMemberMappingDO groupMemberMappingDO = groupMemberMappingMapper.selectOne(new QueryWrapper<GroupMemberMappingDO>()
                .lambda()
                .eq(GroupMemberMappingDO::getMemberId,memberDO.getId()));
                imd.setGroupId(groupMemberMappingDO.getGroupId());
                successMembers.add(imd);
            }
        }
        importClassMembersVO.setSuccessMembers(successMembers);
        importClassMembersVO.setFailureMembers(failMembers);
        return importClassMembersVO;
    }

    public void downloadFailClassMembers(DownloadFailClassMembers downloadFailClassMembers) {
        List<DownloadFailClassMembersDTO> downloadFailClassMembersDTOS = downloadFailClassMembers.getDownloadFailClassMembersDTOS();
        ExcelUtil.writeExcel(downloadFailClassMembersDTOS, DownloadFailClassMembersDTO.class);
    }

    public void addProjectMembers(AddProjectMembersDTO addProjectMembersDTO) {
        addProjectMembersDTO.getProjectMemberMappingDOS().stream().forEach(x->{
            x.setProjectId(addProjectMembersDTO.getProjectId());
            x.setStatus(1);
            projectMemberMappingMapper.insert(x);
        });
    }

}