孔祥富
2021-02-27 4e94fa3ebf98bb8a9a6eda39a7324461fc4ebb40
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpBaseInfoServiceImpl.java
@@ -5,11 +5,13 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.util.*;
import java.util.function.Consumer;
import cc.mrbird.febs.common.core.entity.system.SysConfig;
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.IRemoteUserService;
import cc.mrbird.febs.server.hr.properties.FebsServerHrProperties;
import cc.mrbird.febs.server.hr.service.IEmpDimissionLogService;
import cc.mrbird.febs.server.hr.service.IEmpJobChangeService;
@@ -60,7 +62,7 @@
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
class EmpBaseInfoServiceImpl extends ServiceImpl<EmpBaseInfoMapper, EmpBaseInfo> implements IEmpBaseInfoService {
    private final RedisService redisService;
    private final IRemoteDeptService remoteDeptService;
    private final IRemoteUserService iRemoteUserService;
    private final EmpBaseInfoMapper empBaseInfoMapper;
    private final IEmpDimissionLogService dimissionLogService;
    private final IEmpJobChangeService jobChangeService;
@@ -71,153 +73,21 @@
    @Override
    public IPage<EmpBaseInfo> findEmpBaseInfos(QueryRequest request, EmpBaseInfo empBaseInfo) {
        LambdaQueryWrapper<EmpBaseInfo> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EmpBaseInfo::getDelFlag, empBaseInfo.getDelFlag());
        if (StringUtils.isNotBlank(empBaseInfo.getEmpNumb())) {
            queryWrapper.like(EmpBaseInfo::getEmpNumb, empBaseInfo.getEmpNumb());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEmpName())) {
            queryWrapper.like(EmpBaseInfo::getEmpName, empBaseInfo.getEmpName());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getCertificateNumb())) {
            queryWrapper.like(EmpBaseInfo::getCertificateNumb, empBaseInfo.getCertificateNumb());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getDeptName())) {
            queryWrapper.like(EmpBaseInfo::getDeptName, empBaseInfo.getDeptName());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEntryDateStr())) {
           queryWrapper.between(EmpBaseInfo::getEntryDate, empBaseInfo.getEntryDateStr().split(",")[0],  empBaseInfo.getEntryDateStr().split(",")[1]);
        }
        if (StringUtils.isNotBlank(empBaseInfo.getDimissionDateStr())) {
           queryWrapper.between(EmpBaseInfo::getDimissionDate, empBaseInfo.getDimissionDateStr().split(",")[0],  empBaseInfo.getDimissionDateStr().split(",")[1]);
        }
        if (StringUtils.isNotBlank(empBaseInfo.getSex())) {
            queryWrapper.eq(EmpBaseInfo::getSex, empBaseInfo.getSex());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEducation())) {
            queryWrapper.like(EmpBaseInfo::getEducation, empBaseInfo.getEducation());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getPolitics())) {
            queryWrapper.like(EmpBaseInfo::getPolitics, empBaseInfo.getPolitics());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getAgeStr())) {
           queryWrapper.between(EmpBaseInfo::getAge, empBaseInfo.getAgeStr().split(",")[0],  empBaseInfo.getAgeStr().split(",")[1]);
        }
        if (StringUtils.isNotBlank(empBaseInfo.getArchivesStatus())) {
            queryWrapper.eq(EmpBaseInfo::getArchivesStatus, empBaseInfo.getArchivesStatus());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getInsuranceType())) {
            queryWrapper.eq(EmpBaseInfo::getInsuranceType, empBaseInfo.getInsuranceType());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEmpStatus())) {
            queryWrapper.eq(EmpBaseInfo::getEmpStatus, empBaseInfo.getEmpStatus());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getHandbookStatus())) {
            queryWrapper.eq(EmpBaseInfo::getHandbookStatus, empBaseInfo.getHandbookStatus());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEmpCardStatus())) {
            queryWrapper.eq(EmpBaseInfo::getEmpCardStatus, empBaseInfo.getEmpCardStatus());
        }
        Page<EmpBaseInfo> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<EmpBaseInfo> iPage = this.page(page, queryWrapper);
        //设置部门
        List<EmpBaseInfo> list = setDeptName(iPage.getRecords());
        List<DicItem> dicItems = CastUtil.castList(redisService.get("dicItems"), DicItem.class);
        list.forEach(p -> {
            p.setSexName("1".equals(p.getSex()) ? "男" : "女");
            p.setEmpTypeName("1".equals(p.getEmpType()) ? "正式工" : "临时工");
            p.setInsuranceTypeName("1".equals(p.getInsuranceType()) ? "(深户)五险一档" : "(非深户)五险一档");
            p.setArchivesStatusName("0".equals(p.getArchivesStatus()) ? "未移交" : "已移交");
            // 设置民族
            p.setNationName(dicItems.stream()
                    .filter(k -> DicCode.NATION.equals(k.getDicCode()) && k.getDicItemCode().equals(p.getNation()))
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse("汉族"));
            // 设置政治面貌
            p.setPoliticsName(dicItems.stream()
                    .filter(k -> DicCode.PLITICAL.equals(k.getDicCode()) && k.getDicItemCode().equals(p.getPolitics()))
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse("群众"));
            // 设置婚姻状况
            p.setMarriageName(dicItems.stream()
                    .filter(k -> DicCode.MARRIAGE.equals(k.getDicCode()) && k.getDicItemCode().equals(p.getMarriage()))
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse("未婚"));
            // 设置学历
            p.setEducationName(dicItems.stream()
                    .filter(k -> DicCode.EDUCATION.equals(k.getDicCode()) && k.getDicItemCode().equals(p.getEducation()))
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse("无学历"));
            // 设置籍贯
            p.setNativePlaceName(dicItems.stream()
                    .filter(k -> DicCode.NATIVEPLACE.equals(k.getDicCode()) && k.getDicItemCode().equals(p.getNativePlace()))
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse("未知"));
        });
        iPage.setRecords(list);
        return iPage;
        return this.findZsEmpBaseInfos(request, empBaseInfo);
    }
    @Override
    public IPage<EmpBaseInfo> findZsEmpBaseInfos(QueryRequest request, EmpBaseInfo empBaseInfo) {
        LambdaQueryWrapper<EmpBaseInfo> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EmpBaseInfo::getDelFlag, empBaseInfo.getDelFlag());
        if (StringUtils.isNotBlank(empBaseInfo.getEmpNumb())) {
            queryWrapper.like(EmpBaseInfo::getEmpNumb, empBaseInfo.getEmpNumb());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEmpName())) {
            queryWrapper.like(EmpBaseInfo::getEmpName, empBaseInfo.getEmpName());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getCertificateNumb())) {
            queryWrapper.like(EmpBaseInfo::getCertificateNumb, empBaseInfo.getCertificateNumb());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getDeptName())) {
            queryWrapper.like(EmpBaseInfo::getDeptName, empBaseInfo.getDeptName());
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEntryDateStr())) {
           queryWrapper.between(EmpBaseInfo::getEntryDate, empBaseInfo.getEntryDateStr().split(",")[0],  empBaseInfo.getEntryDateStr().split(",")[1]);
        }
        if (StringUtils.isNotBlank(empBaseInfo.getDimissionDateStr())) {
           queryWrapper.between(EmpBaseInfo::getDimissionDate, empBaseInfo.getDimissionDateStr().split(",")[0],  empBaseInfo.getDimissionDateStr().split(",")[1]);
        }
        if (StringUtils.isNotBlank(empBaseInfo.getSex())) {
            queryWrapper.in(EmpBaseInfo::getSex, empBaseInfo.getSex().split(","));
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEducation())) {
            queryWrapper.in(EmpBaseInfo::getEducation, empBaseInfo.getEducation().split(","));
        }
        if (StringUtils.isNotBlank(empBaseInfo.getPolitics())) {
            queryWrapper.in(EmpBaseInfo::getPolitics, empBaseInfo.getPolitics().split(","));
        }
        if (StringUtils.isNotBlank(empBaseInfo.getAgeStr())) {
           String[] ages=empBaseInfo.getAgeStr().split(",");
           for (int i = 0; i < ages.length; i++) {
            String ageBtn=ages[i];
            queryWrapper.between(EmpBaseInfo::getAge, ageBtn.split("-")[0],  ageBtn.split("-")[1]);
         }
        }
        if (StringUtils.isNotBlank(empBaseInfo.getArchivesStatus())) {
            queryWrapper.in(EmpBaseInfo::getArchivesStatus, empBaseInfo.getArchivesStatus().split(","));
        }
        if (StringUtils.isNotBlank(empBaseInfo.getInsuranceType())) {
            queryWrapper.in(EmpBaseInfo::getInsuranceType, empBaseInfo.getInsuranceType().split(","));
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEmpStatus())) {
            queryWrapper.in(EmpBaseInfo::getEmpStatus, empBaseInfo.getEmpStatus().split(","));
        }
        Page<EmpBaseInfo> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<EmpBaseInfo> iPage = this.page(page, queryWrapper);
        IPage<EmpBaseInfo> iPage = this.page(page, createQueryWrapper(empBaseInfo));
        //设置部门
        List<EmpBaseInfo> list = setDeptName(iPage.getRecords());
        List<DicItem> dicItems = CastUtil.castList(redisService.get("dicItems"), DicItem.class);
        list.forEach(p -> {
            p.setSexName("1".equals(p.getSex()) ? "男" : "女");
            p.setArchivesStatusName("0".equals(p.getArchivesStatus()) ? "未移交" : "已移交");
            p.setEmpCardStatusName("1".equals(p.getEmpCardStatus()) ? "未发" : "已发");
            p.setHandbookStatusName("1".equals(p.getHandbookStatus()) ? "未发" : "已发");
            //保险类型
            p.setInsuranceTypeName(dicItems.stream()
                    .filter(k -> DicCode.INSURANCETYPE.equals(k.getDicCode()) && k.getDicItemCode().equals(p.getInsuranceType()))
@@ -285,7 +155,8 @@
            String path = properties.getEmpBaseInfoPath()+empBaseInfo.getEmpId()+".png";
            if (  MyUtil.generateImage(empBaseInfo.getImagePath(),path)) {
                empBaseInfo.setImagePath(empBaseInfo.getEmpId()+".png");
            };
            }
            ;
        }
        empBaseInfo.setCreator(operatorId);
        empBaseInfo.setModifier(operatorId);
@@ -384,14 +255,15 @@
        }
        return this.getOne(queryWrapper);
    }
    /**
     *
     * 关闭员工档案
     *
     * <p>
     * date 2021-02-18 12:54
     * @author: luoyibo
     *
     * @param empDimissionLog
     * @return boolean
     * @author: luoyibo
     */
    @Override
    public boolean closeEmpArchives(EmpDimissionLog empDimissionLog) {
@@ -411,19 +283,22 @@
            dimissionLog.setReporter(empDimissionLog.getReporter());
            dimissionLog.setCreator(operatorId);
            dimissionLog.setModifier(operatorId);
            dimissionLogService.save(dimissionLog);
        }
        EmpBaseInfo empBaseInfo = this.getById(dimissionLog.getEmpId());
        //禁用账户
        iRemoteUserService.updateStatus(empBaseInfo.getCertificateNumb());
        return empBaseInfoMapper.closeEmpArchives(list, empDimissionLog.getDimissionType(), empDimissionLog.getDimissionDate(), empDimissionLog.getRemark(), operatorId)>0;
    }
    /**
     *
     * 员工岗位变更
     *
     * <p>
     * date 2021-02-18 20:32
     * @author: luoyibo
     *
     * @param empJobChange 1
     * @return boolean
     * @author: luoyibo
     */
    @Override
    public boolean changeEmpJob(EmpJobChange empJobChange) {
@@ -465,6 +340,7 @@
    /**
     * 导入员工
     *
     * @param listObject
     */
    @Override
@@ -540,7 +416,6 @@
            out.write(buff);
        }
    }
    @Override
    public IPage<EmpBaseInfo> baseInfoList(String index, String btime, String etime, String pageSize, String pageNum, String number, String name) {
@@ -864,4 +739,122 @@
        }
        return stringObjectMap;
    }
    /**
     *
     * 检查是否是带条件查询
     *
     * date 2021-02-26 13:49
     * @author: luoyibo
     * @param empBaseInfo 人员参数
     * @return boolean
     */
    private  boolean checkQueryCondition(EmpBaseInfo empBaseInfo){
        int hasCondition = 0;
        if (StringUtils.isNotBlank(empBaseInfo.getEmpNumb())) {
            hasCondition = hasCondition|1;
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEmpName())) {
            hasCondition = hasCondition|1;
        }
        if (StringUtils.isNotBlank(empBaseInfo.getDeptName())) {
            hasCondition = hasCondition|1;
        }
        if (StringUtils.isNotBlank(empBaseInfo.getCertificateNumb())) {
            hasCondition = hasCondition|1;
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEntryDateStr())) {
            hasCondition = hasCondition|1;
        }
        if (StringUtils.isNotBlank(empBaseInfo.getDimissionDateStr())) {
            hasCondition = hasCondition|1;
        }
        if (StringUtils.isNotBlank(empBaseInfo.getSex())) {
            hasCondition = hasCondition|1;
        }
        if (StringUtils.isNotBlank(empBaseInfo.getEducation())) {
            hasCondition = hasCondition|1;
        }
        if (StringUtils.isNotBlank(empBaseInfo.getPolitics())) {
            hasCondition = hasCondition|1;
        }
        if (StringUtils.isNotBlank(empBaseInfo.getAgeStr())) {
            hasCondition = hasCondition|1;
        }
        if (StringUtils.isNotBlank(empBaseInfo.getArchivesStatus())) {
            hasCondition = hasCondition|1;
        }
        if (StringUtils.isNotBlank(empBaseInfo.getInsuranceType())) {
            hasCondition = hasCondition|1;
        }
        return hasCondition==1;
    }
    private LambdaQueryWrapper<EmpBaseInfo> createQueryWrapper(EmpBaseInfo empBaseInfo){
        LambdaQueryWrapper<EmpBaseInfo> queryWrapper = new LambdaQueryWrapper<>();
        //记录的状态,0-正常 1-删除 2-暂存
        if(StringUtils.isNotBlank(empBaseInfo.getDelFlag().toString())) {
            queryWrapper.eq(EmpBaseInfo::getDelFlag, empBaseInfo.getDelFlag());
        } else{
            queryWrapper.eq(EmpBaseInfo::getDelFlag, 0);
        }
        //人员的状态,0-在职 1-离职 2-退休
        if (StringUtils.isNotBlank(empBaseInfo.getEmpStatus())) {
            queryWrapper.in(EmpBaseInfo::getEmpStatus, empBaseInfo.getEmpStatus().split(","));
        } else{
            queryWrapper.in(EmpBaseInfo::getEmpStatus, 0);
        }
        // 下面的条件就是人员的属性条件,条件之间是或的关系
        if(this.checkQueryCondition(empBaseInfo)){
            queryWrapper.and(p -> {
                if (StringUtils.isNotBlank(empBaseInfo.getEmpNumb())) {
                    p.like(EmpBaseInfo::getEmpNumb, empBaseInfo.getEmpNumb());
                }
                if (StringUtils.isNotBlank(empBaseInfo.getEmpName())) {
                    p.or().like(EmpBaseInfo::getEmpName, empBaseInfo.getEmpName());
                }
                if (StringUtils.isNotBlank(empBaseInfo.getDeptName())) {
                    p.or().like(EmpBaseInfo::getDeptName, empBaseInfo.getDeptName());
                }
                if (StringUtils.isNotBlank(empBaseInfo.getCertificateNumb())) {
                    p.or().like(EmpBaseInfo::getCertificateNumb, empBaseInfo.getCertificateNumb());
                }
                if (StringUtils.isNotBlank(empBaseInfo.getEntryDateStr())) {
                    p.or().between(EmpBaseInfo::getEntryDate, empBaseInfo.getEntryDateStr().split(",")[0], empBaseInfo.getEntryDateStr().split(",")[1]);
                }
                if (StringUtils.isNotBlank(empBaseInfo.getDimissionDateStr())) {
                    p.or().between(EmpBaseInfo::getDimissionDate, empBaseInfo.getDimissionDateStr().split(",")[0], empBaseInfo.getDimissionDateStr().split(",")[1]);
                }
                if (StringUtils.isNotBlank(empBaseInfo.getSex())) {
                    p.or().in(EmpBaseInfo::getSex, empBaseInfo.getSex().split(","));
                }
                if (StringUtils.isNotBlank(empBaseInfo.getEducation())) {
                    p.or().in(EmpBaseInfo::getEducation, empBaseInfo.getEducation().split(","));
                }
                if (StringUtils.isNotBlank(empBaseInfo.getPolitics())) {
                    p.or().in(EmpBaseInfo::getPolitics, empBaseInfo.getPolitics().split(","));
                }
                if (StringUtils.isNotBlank(empBaseInfo.getAgeStr())) {
                    String[] ages = empBaseInfo.getAgeStr().split(",");
                    Consumer<LambdaQueryWrapper<EmpBaseInfo>> consumer = new Consumer<LambdaQueryWrapper<EmpBaseInfo>>() {
                        @Override
                        public void accept(LambdaQueryWrapper<EmpBaseInfo> wrapper) {
                            for (int i = 0; i < ages.length; i++) {
                                String ageBtn = ages[i];
                                wrapper.or().between(EmpBaseInfo::getAge, ageBtn.split("-")[0], ageBtn.split("-")[1]);
                            }
                        }
                    };
                    p.or().and(consumer);
                }
                if (StringUtils.isNotBlank(empBaseInfo.getArchivesStatus())) {
                    p.or().in(EmpBaseInfo::getArchivesStatus, empBaseInfo.getArchivesStatus().split(","));
                }
                if (StringUtils.isNotBlank(empBaseInfo.getInsuranceType())) {
                    p.or().in(EmpBaseInfo::getInsuranceType, empBaseInfo.getInsuranceType().split(","));
                }
            });
        }
        return queryWrapper;
    }
}