yubo
2025-09-24 d89118c8c2f83e4d39f05b774e9019141f0a6341
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpBaseInfoServiceImpl.java
@@ -28,6 +28,7 @@
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -98,12 +99,13 @@
        //设置部门
        // List<EmpBaseInfo> list = setDeptName(iPage.getRecords());
        List<EmpBaseInfo> list = iPage.getRecords();
        List<EmpBaseInfo> newList = new ArrayList<>();
        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.setEmpCardStatusName("0".equals(p.getEmpCardStatus()) ? "未发" : "已发");
            p.setHandbookStatusName("0".equals(p.getHandbookStatus()) ? "未发" : "已发");
            p.setEmpStatusName("0".equals(p.getEmpStatus()) ? "在职" : "离职");
            //保险类型
            p.setInsuranceTypeName(dicItems.stream()
@@ -157,8 +159,23 @@
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse(""));
            p.setCertificateListName(getCertificateListName(p.getCertificateList(),dicItems));
            p.setCertificateListName(getCertificateListName(p.getCertificateList(), dicItems));
        });
        // if (StringUtils.isNotBlank(empBaseInfo.getCertificateList())) {
        //     String[] certificates = empBaseInfo.getCertificateList().split(",");
        //     list.forEach(k -> {
        //         String[] dbCertificates = k.getCertificateList().split(",");
        //         for (String certificate : certificates) {
        //             if (Arrays.asList(dbCertificates).contains(certificate)) {
        //                 newList.add(k);
        //                 break;
        //             }
        //         }
        //     });
        //     iPage.setRecords(newList);
        // } else {
        //     iPage.setRecords(list);
        // }
        iPage.setRecords(list);
        return iPage;
    }
@@ -194,12 +211,28 @@
        empBaseInfo.setModifier(operatorId);
        this.saveOrUpdate(empBaseInfo);
        addEmpDimissLog(empBaseInfo, operatorId, empId);
    }
    /**
     * 增加员工后同步增加入职记录
     * <p>
     * date 2021-07-30 09:12
     *
     * @param empBaseInfo 员工信息
     * @param operatorId  操作员Id
     * @param empId       员工Id
     * @return void
     * @author: luoyibo
     */
    private void addEmpDimissLog(EmpBaseInfo empBaseInfo, String operatorId, Long empId) {
        EmpDimissionLog dimissionLog = new EmpDimissionLog();
        dimissionLog.setCloseId(SequenceUtil.generateId(0L, ModuleCode.HR_EMPLOYEE));
        dimissionLog.setEmpId(empId);
        dimissionLog.setEntryDate(empBaseInfo.getEntryDate());
        dimissionLog.setDimissionType("20");
        dimissionLog.setRemark(empBaseInfo.getRemark());
        dimissionLog.setDeptName(empBaseInfo.getAllDeptName());
        dimissionLog.setCreator(operatorId);
        dimissionLog.setModifier(operatorId);
@@ -324,6 +357,10 @@
        String operatorId = Optional.of(FebsUtil.getUserId()).orElse("1");
        String[] str = ids.split(",");
        List<String> list = new ArrayList<>(Arrays.asList(str));
//        for (int i = 0, j = str.length; i < j; i++) {
//            EmpBaseInfo emp = this.getById(str[i]);
//            addEmpDimissLog(emp, operatorId, Long.valueOf(str[i]));
//        }
        return empBaseInfoMapper.momentToNormal(list, operatorId) > 0;
    }
@@ -349,6 +386,7 @@
    public boolean closeEmpArchives(EmpDimissionLog empDimissionLog) {
        String operatorId = Optional.of(FebsUtil.getUserId()).orElse("1");
        String[] str = empDimissionLog.getEmpIds().split(",");
        String[] empDeptNames = empDimissionLog.getDeptNames().split(",");
        List<String> list = new ArrayList<>(Arrays.asList(str));
        String[] strDate = empDimissionLog.getEntryDates().split(",");
@@ -365,6 +403,7 @@
            dimissionLog.setReporter(empDimissionLog.getReporter());
            dimissionLog.setCreator(operatorId);
            dimissionLog.setModifier(operatorId);
            dimissionLog.setDeptName(empDeptNames[i]);
            dimissionLogService.save(dimissionLog);
        }
@@ -456,6 +495,10 @@
            }
            if (this.count(new LambdaQueryWrapper<EmpBaseInfo>().eq(EmpBaseInfo::getEmpNumb, list.get(1).toString()).ne(EmpBaseInfo::getDelFlag, 1)) > 0) {
                returnList.add(StrUtil.format("导入员工基本信息异常: 出现位置第{}行, 原因:{}员工编号重复", listObject.indexOf(list) + 1, list.get(1).toString()));
                continue;
            }
            if (this.count(new LambdaQueryWrapper<EmpBaseInfo>().eq(EmpBaseInfo::getCertificateNumb, list.get(1).toString()).ne(EmpBaseInfo::getDelFlag, 1)) > 0) {
                returnList.add(StrUtil.format("导入员工基本信息异常: 出现位置第{}行, 原因:{}身份证号重复", listObject.indexOf(list) + 1, list.get(1).toString()));
                continue;
            }
            EmpBaseInfo empBaseInfo = new EmpBaseInfo();
@@ -619,11 +662,13 @@
                empBaseInfo.setArchivesStatus(dicItem.getDicItemCode());
            }
            empBaseInfo.setEmpStatus("0");
            this.save(empBaseInfo);
            boolean saveResult = this.save(empBaseInfo);
            //新入职员工需要增加一条入职记录
            this.addEmpDimissLog(empBaseInfo, "2", empBaseInfo.getEmpId());
        }
    }
    @Override
    //    @Override
    public void getImage(String empId, HttpServletResponse response) throws Exception {
        EmpBaseInfo empBaseInfo = this.getById(empId);
        if (StrUtil.isBlank(empBaseInfo.getImagePath())) {
@@ -1151,8 +1196,8 @@
                @Override
                public void accept(QueryWrapper<EmpBaseInfo> wrapper) {
                    for (int i = 0; i < certificates.length; i++) {
                        String ageBtn = certificates[i];
                        wrapper.or().like("a.certificateList", ageBtn);
                        String ageBtn = "|" + certificates[i] + "|";
                        wrapper.gt("LOCATE('" + ageBtn + "',CONCAT('|',replace( certificateList, ',', '|,|'),'|'))", 0);
                    }
                }
            };
@@ -1387,11 +1432,92 @@
    @Override
    public boolean updateSeniority() {
        return empBaseInfoMapper.updateSeniority()>0;
        return empBaseInfoMapper.updateSeniority() > 0;
    }
    @Override
    public boolean updateDeptName() {
        return empBaseInfoMapper.updateDeptName()>0;
        return empBaseInfoMapper.updateDeptName() > 0;
    }
    @Override
    public boolean updateEmpAge(String userId) {
        List<EmpBaseInfo> empBaseInfoList = new ArrayList<>();
        if (StringUtils.isNotBlank(userId)) {
            EmpBaseInfo empBaseInfo = this.getById(userId);
            empBaseInfoList.add(empBaseInfo);
        } else {
            empBaseInfoList = this.list();
        }
        if (!empBaseInfoList.isEmpty()) {
            empBaseInfoList.parallelStream().forEach(p -> {
                p.setAge(DateUtil.ageOfNow(p.getBirthdate()));
                this.saveOrUpdate(p);
            });
        }
        return false;
    }
    @Override
    public void updateAnnualLeave(String userId) {
        EmpBaseInfo empBaseInfo = this.getById(userId);
        int holiday = calculateHoliday(empBaseInfo.getEntryDate());
        empBaseInfo.setAnnualLeave(holiday);
        baseMapper.update(null, new LambdaUpdateWrapper<EmpBaseInfo>()
                .set(EmpBaseInfo::getAnnualLeave, holiday)
                .eq(EmpBaseInfo::getEmpId, empBaseInfo.getEmpId()));
    }
    @Override
    public void updateAnnualLeave() {
        List<EmpBaseInfo> list = this.list();
        list.parallelStream().forEach(p -> {
            int holiday = calculateHoliday(p.getEntryDate());
            p.setAnnualLeave(holiday);
            baseMapper.update(null, new LambdaUpdateWrapper<EmpBaseInfo>()
                    .set(EmpBaseInfo::getAnnualLeave, holiday)
                    .eq(EmpBaseInfo::getEmpId, p.getEmpId()));
        });
    }
    @Override
    public void updateEmpBaseKeyInfo() {
        List<EmpBaseInfo> list = this.list();
        list.parallelStream().forEach(p -> {
            int holiday = calculateHoliday(p.getEntryDate());
            int age = calculateAge(p.getBirthdate());
            baseMapper.update(null, new LambdaUpdateWrapper<EmpBaseInfo>()
                    .set(EmpBaseInfo::getAnnualLeave, holiday)
                    .set(EmpBaseInfo::getAge, age)
                    .eq(EmpBaseInfo::getEmpId, p.getEmpId()));
        });
    }
    /**
     * 根据设置的参数计算员工的年假
     * @param date 入职日期
     * @return 年假天数
     */
    private int calculateHoliday(Date date) {
        int holiday = 0;
        int joinYear = DateUtil.ageOfNow(date);
        String configValue = redisService.get("annual_leave").toString();
        String[] values = StrUtil.split(configValue, "|");
        String[] condition = StrUtil.split(values[0], ",");
        String[] days = StrUtil.split(values[1], ",");
        if (condition.length == 2) {
            int one = Integer.parseInt(condition[0]);
            int two = Integer.parseInt(condition[1]);
            if (joinYear >= one && joinYear < two) {
                holiday = Integer.parseInt(days[0]);
            } else if (joinYear >= two) {
                holiday = Integer.parseInt(days[1]);
            }
        }
        return holiday;
    }
    private int  calculateAge(Date date){
        return DateUtil.ageOfNow(date);
    }
}