孔祥富
2021-03-08 c5a10bec4d25f25464105233bebfaf8c791aba17
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpBaseInfoServiceImpl.java
@@ -1,11 +1,9 @@
package cc.mrbird.febs.server.hr.service.impl;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.*;
import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import cc.mrbird.febs.common.core.entity.constant.StringConstant;
import cc.mrbird.febs.common.core.entity.system.SysConfig;
@@ -13,16 +11,17 @@
import cc.mrbird.febs.common.core.utils.MyUtil;
import cc.mrbird.febs.server.hr.entity.EmpDimissionLog;
import cc.mrbird.febs.server.hr.entity.EmpJobChange;
import cc.mrbird.febs.server.hr.feign.IRemoteDicItemService;
import cc.mrbird.febs.server.hr.feign.IRemoteUserService;
import cc.mrbird.febs.server.hr.mapper.EmpContractInfoMapper;
import cc.mrbird.febs.server.hr.mapper.*;
import cc.mrbird.febs.server.hr.properties.FebsServerHrProperties;
import cc.mrbird.febs.server.hr.service.IEmpContractInfoService;
import cc.mrbird.febs.server.hr.service.IEmpDimissionLogService;
import cc.mrbird.febs.server.hr.service.IEmpJobChangeService;
import cc.mrbird.febs.server.hr.service.*;
import cc.mrbird.febs.server.hr.util.PoiExportExcel;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cc.mrbird.febs.server.hr.entity.*;
import cn.hutool.core.util.StrUtil;
import io.prometheus.client.Collector;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@@ -45,8 +44,6 @@
import cc.mrbird.febs.common.redis.service.RedisService;
import cc.mrbird.febs.server.hr.entity.EmpBaseInfo;
import cc.mrbird.febs.server.hr.feign.IRemoteDeptService;
import cc.mrbird.febs.server.hr.mapper.EmpBaseInfoMapper;
import cc.mrbird.febs.server.hr.service.IEmpBaseInfoService;
import lombok.RequiredArgsConstructor;
import org.springframework.util.FileSystemUtils;
import org.springframework.validation.annotation.Validated;
@@ -74,9 +71,20 @@
    private final EmpContractInfoMapper empContractInfoMapper;
    private final FebsServerHrProperties properties;
    private final IRemoteDeptService remoteDeptService;
    private final String operatorId = Optional.ofNullable(FebsUtil.getCurrentUser())
            .map(u -> u.getUserId().toString())
            .orElse("1");
    private final EmpWorkExperienceMapper empWorkExperienceMapper;
    private final EmpPhysicalExamMapper empPhysicalExamMapper;
    private final EmpJobChangeMapper empJobChangeMapper;
    private final EmpLeaveInfoMapper empLeaveInfoMapper;
    private final EmpUnemploymentMapper empUnemploymentMapper;
    private final EmpDimissionAttendMapper empDimissionAttendMapper;
    private final EmpInsuranceMapper empInsuranceMapper;
    private final EmpAccidentCasesMapper empAccidentCasesMapper;
    private final EmpLaborTroubleMapper empLaborTroubleMapper;
    private final EmpBadRecordMapper empBadRecordMapper;
    private final EmpRemarkInfoMapper empRemarkInfoMapper;
    private final IRemoteDicItemService remoteDicItemService;
    private final String operatorId = Optional.of(FebsUtil.getUserId()).orElse("1");
    @Override
    public IPage<EmpBaseInfo> findEmpBaseInfos(QueryRequest request, EmpBaseInfo empBaseInfo) {
@@ -106,7 +114,7 @@
                    .filter(k -> DicCode.EMPTYPE.equals(k.getDicCode()) && k.getDicItemCode().equals(p.getEmpType()))
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse("汉族"));
                    .orElse("正式工"));
            // 设置民族
            p.setNationName(dicItems.stream()
                    .filter(k -> DicCode.NATION.equals(k.getDicCode()) && k.getDicItemCode().equals(p.getNation()))
@@ -847,6 +855,12 @@
        } else {
            queryWrapper.in("a.EmpStatus", 0);
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEmpCardStatus())) {
            queryWrapper.in("a.empCardStatus", empBaseInfo.getEmpCardStatus().split(","));
        }
        if (StringUtils.isNotBlank(empBaseInfo.getHandbookStatus())) {
            queryWrapper.in("a.handBookStatus", empBaseInfo.getHandbookStatus().split(","));
        }
        // 下面的条件就是人员的属性条件,条件之间是或的关系
        if (this.checkQueryCondition(empBaseInfo)) {
            queryWrapper.and(p -> {
@@ -861,45 +875,6 @@
                }
                if (StringUtils.isNotBlank(empBaseInfo.getCertificateNumb())) {
                    p.or().like("a.CertificateNumb", empBaseInfo.getCertificateNumb());
                }
                if (StringUtils.isNotBlank(empBaseInfo.getEntryDateStr())) {
                    p.or().between("a.EntryDate", empBaseInfo.getEntryDateStr().split(",")[0], empBaseInfo.getEntryDateStr().split(",")[1]);
                }
                if (StringUtils.isNotBlank(empBaseInfo.getDimissionDateStr())) {
                    p.or().between("a.DimissionDate", empBaseInfo.getDimissionDateStr().split(",")[0], empBaseInfo.getDimissionDateStr().split(",")[1]);
                }
                if (StringUtils.isNotBlank(empBaseInfo.getSex())) {
                    p.or().in("a.Sex", empBaseInfo.getSex().split(","));
                }
                if (StringUtils.isNotBlank(empBaseInfo.getEducation())) {
                    p.or().in("a.Education", empBaseInfo.getEducation().split(","));
                }
                if (StringUtils.isNotBlank(empBaseInfo.getPolitics())) {
                    p.or().in("a.Politics", empBaseInfo.getPolitics().split(","));
                }
                if (StringUtils.isNotBlank(empBaseInfo.getAgeStr())) {
                    String[] ages = empBaseInfo.getAgeStr().split(",");
                    Consumer<QueryWrapper<EmpBaseInfo>> consumer = new Consumer<QueryWrapper<EmpBaseInfo>>() {
                        public void accept(QueryWrapper<EmpBaseInfo> wrapper) {
                            for (int i = 0; i < ages.length; i++) {
                                String ageBtn = ages[i];
                                wrapper.or().between("a.Age", ageBtn.split("-")[0], ageBtn.split("-")[1]);
                            }
                        }
                    };
                    p.or().and(consumer);
                }
                if (StringUtils.isNotBlank(empBaseInfo.getArchivesStatus())) {
                    p.or().in("a.ArchivesStatus", empBaseInfo.getArchivesStatus().split(","));
                }
                if (StringUtils.isNotBlank(empBaseInfo.getInsuranceType())) {
                    p.or().in("a.InsuranceType", empBaseInfo.getInsuranceType().split(","));
                }
                if (StringUtils.isNotBlank(empBaseInfo.getHandbookStatus())) {
                    p.or().in("a.HandbookStatus", empBaseInfo.getHandbookStatus().split(","));
                }
                if (StringUtils.isNotBlank(empBaseInfo.getEmpCardStatus())) {
                    p.or().in("a.EmpCardStatus", empBaseInfo.getEmpCardStatus().split(","));
                }
            });
        }
@@ -927,4 +902,135 @@
        }
    }
    @Override
    public EmpBaseInfo getEmpBaseInfoByEmpNumb(String empNumb) {
        try {
            return this.getOne(new LambdaQueryWrapper<EmpBaseInfo>().eq(EmpBaseInfo::getEmpNumb,empNumb).ne(EmpBaseInfo::getDelFlag,1));
        }catch (Exception e){
            return  null;
        }
    }
    @Override
    public void exportEmpAll(HttpServletResponse response, EmpBaseInfo empBaseinfo) throws IOException {
        //获取字典
        List<DicItem> dicItemList = remoteDicItemService.getAllDicitemsAll();
        Map<String, Object> map = new HashMap<>();
        List<Long> itemCode = dicItemList.stream().map(i->i.getDicId()).distinct().collect(Collectors.toList());
        itemCode.stream().forEach(i->{
           List<DicItem> dicItems =  dicItemList.stream().filter(j->j.getDicId().equals(i)).collect(Collectors.toList());
            Map<String, Object> itemMap = new HashMap<>();
            dicItems.stream().forEach(dicItem -> itemMap.put(dicItem.getDicItemCode(),dicItem.getDicItemName()));
            map.put(dicItems.get(0).getDicCode().toLowerCase(),itemMap);
        });
        //基本信息
        QueryRequest request = new QueryRequest();
        request.setPageSize(25535);
        request.setPageNum(1);
        List<EmpBaseInfo> exportList = this.findZsEmpBaseInfos(request, empBaseinfo).getRecords();
        List<Map<String, Object>> listMapDicItem = new ArrayList();
        listMapDicItem.add(map);
        String exportField = FebsUtil. reflectAnnotation(EmpBaseInfo.class);
        List<Map<String, Object>> allList = PoiExportExcel.getDataList(exportField, exportList, listMapDicItem);
        Page<EmpBaseInfo> page = new Page<>(request.getPageNum(), request.getPageSize());
        List<Long> empIds = exportList.stream().map(i->i.getEmpId()).collect(Collectors.toList());
        //工作经历
        IPage<EmpWorkExperience> workExperienceIPage = empWorkExperienceMapper.selectPageVo(page,new QueryWrapper<EmpWorkExperience>().in("a.empId",empIds).ne("a.delFlag",1));
        exportField = FebsUtil. reflectAnnotation(EmpWorkExperience.class);
        List<Map<String, Object>> allListEmpWork = PoiExportExcel.getDataList(exportField, workExperienceIPage.getRecords(), listMapDicItem);
        allList.add(allListEmpWork.get(0));
        //体检信息
        IPage<EmpPhysicalExam> empPhysicalExamIPage = empPhysicalExamMapper.selectPageVo(page,new QueryWrapper<EmpPhysicalExam>().in("a.empId",empIds).ne("a.delFlag",1));
        exportField = FebsUtil. reflectAnnotation(EmpWorkExperience.class);
        List<Map<String, Object>> allListEmpPhysical = PoiExportExcel.getDataList(exportField, empPhysicalExamIPage.getRecords(), listMapDicItem);
        allList.add(allListEmpPhysical.get(0));
        //调岗记录
        IPage<EmpJobChange> jobChangeIPage = empJobChangeMapper.selectPageVoBean(page,new QueryWrapper<EmpJobChange>().in("a.empId",empIds).ne("a.delFlag",1));
        exportField = FebsUtil. reflectAnnotation(EmpJobChange.class);
        List<Map<String, Object>> allListjobChangeI = PoiExportExcel.getDataList(exportField, jobChangeIPage.getRecords(), listMapDicItem);
        allList.add(allListjobChangeI.get(0));
        //合同信息
        IPage<EmpContractInfo> empContractInfoIPage = empContractInfoMapper.selectPageVo(page,new QueryWrapper<EmpContractInfo>().in("a.empId",empIds).ne("a.delFlag",1));
        exportField = FebsUtil. reflectAnnotation(EmpContractInfo.class);
        List<Map<String, Object>> allListEmpContractInfo = PoiExportExcel.getDataList(exportField, empContractInfoIPage.getRecords(), listMapDicItem);
        allList.add(allListEmpContractInfo.get(0));
        //入离职记录
        IPage<EmpDimissionAttend> empDimissionAttendIPage = empDimissionAttendMapper.selectPageVo(page,new QueryWrapper<EmpDimissionAttend>().in("a.empId",empIds).ne("a.delFlag",1));
        exportField = FebsUtil. reflectAnnotation(EmpDimissionAttend.class);
        List<Map<String, Object>> allListEmpDimissionAtt = PoiExportExcel.getDataList(exportField, empDimissionAttendIPage.getRecords(), listMapDicItem);
        allList.add(allListEmpDimissionAtt.get(0));
        //请假记录
        IPage<EmpLeaveInfo> empLeaveInfoIPage = empLeaveInfoMapper.selectPageVo(page,new QueryWrapper<EmpLeaveInfo>().in("a.empId",empIds).ne("a.delFlag",1));
        exportField = FebsUtil. reflectAnnotation(EmpLeaveInfo.class);
        List<Map<String, Object>> allListEmpLoeaveInfo = PoiExportExcel.getDataList(exportField, empLeaveInfoIPage.getRecords(), listMapDicItem);
        allList.add(allListEmpLoeaveInfo.get(0));
        //失业金领取
        IPage<EmpUnemployment> empUnemploymentIPage = empUnemploymentMapper.selectPageVo(page,new QueryWrapper<EmpUnemployment>().in("a.empId",empIds).ne("a.delFlag",1));
        exportField = FebsUtil. reflectAnnotation(EmpUnemployment.class);
        List<Map<String, Object>> allListEmpUnemployment = PoiExportExcel.getDataList(exportField, empUnemploymentIPage.getRecords(), listMapDicItem);
        allList.add(allListEmpUnemployment.get(0));
        //社保申请
        IPage<EmpInsurance> empInsuranceIPage = empInsuranceMapper.selectPageVo(page,new QueryWrapper<EmpInsurance>().in("a.empId",empIds).ne("a.delFlag",1));
        exportField = FebsUtil. reflectAnnotation(EmpInsurance.class);
        List<Map<String, Object>> allListEmpInsurance = PoiExportExcel.getDataList(exportField, empInsuranceIPage.getRecords(), listMapDicItem);
        allList.add(allListEmpInsurance.get(0));
        //意外险案件
        IPage<EmpAccidentCases> empAccidentCasesIPage = empAccidentCasesMapper.selectPageVo(page,new QueryWrapper<EmpInsurance>().in("a.empId",empIds).ne("a.delFlag",1));
        exportField = FebsUtil. reflectAnnotation(EmpAccidentCases.class);
        List<Map<String, Object>> allListEmpAccidentCases = PoiExportExcel.getDataList(exportField, empAccidentCasesIPage.getRecords(), listMapDicItem);
        allList.add(allListEmpAccidentCases.get(0));
        //劳资案件
        IPage<EmpLaborTrouble> empLaborTroubleIPage = empLaborTroubleMapper.selectPageVo(page,new QueryWrapper<EmpInsurance>().in("a.empId",empIds).ne("a.delFlag",1));
        exportField = FebsUtil. reflectAnnotation(EmpLaborTrouble.class);
        List<Map<String, Object>> allListEmpLaborTrouble = PoiExportExcel.getDataList(exportField, empLaborTroubleIPage.getRecords(), listMapDicItem);
        allList.add(allListEmpLaborTrouble.get(0));
        //不良记录
        IPage<EmpBadRecord> empBadRecordIPage = empBadRecordMapper.selectPageVo(page,new QueryWrapper<EmpInsurance>().in("a.empId",empIds).ne("a.delFlag",1));
        exportField = FebsUtil. reflectAnnotation(EmpBadRecord.class);
        List<Map<String, Object>> allListEmpBadRecord = PoiExportExcel.getDataList(exportField, empBadRecordIPage.getRecords(), listMapDicItem);
        allList.add(allListEmpBadRecord.get(0));
        //备注信息
        IPage<EmpRemarkInfo> empRemarkInfoIPage = empRemarkInfoMapper.selectPageVo(page,new QueryWrapper<EmpRemarkInfo>().in("a.empId",empIds).ne("a.delFlag",1));
        exportField = FebsUtil. reflectAnnotation(EmpRemarkInfo.class);
        List<Map<String, Object>> allListEmpRemarkInfo = PoiExportExcel.getDataList(exportField, empRemarkInfoIPage.getRecords(), listMapDicItem);
        allList.add(allListEmpRemarkInfo.get(0));
        List<String> sheetNames = new ArrayList<>();
        sheetNames.add("基本信息");
        sheetNames.add("工作经历");
        sheetNames.add("体检信息");
        sheetNames.add("调岗记录");
        sheetNames.add("合同信息");
        sheetNames.add("入离职记录");
        sheetNames.add("请假记录");
        sheetNames.add("失业金领取");
        sheetNames.add("社保申请");
        sheetNames.add("意外险案件");
        sheetNames.add("工商案件");
        sheetNames.add("劳资案件");
        sheetNames.add("不良记录");
        sheetNames.add("备注信息");
        boolean result = PoiExportExcel.exportCommonExcelMultiSheet(response, "在职员工列表",allList,sheetNames);
    }
}