yubo
2026-03-10 538bdd36e4e0c43333e8090dab575cfa87af8f80
feat(hr): 添加员工导出和字典映射支持

- 新增性别常量DicCode.SEX
- EmpBaseInfo添加性别、籍贯、员工类型和学历名称映射
- EmpBaseInfoController新增退休和转正员工导出接口
- EmpBaseInfoServiceImpl完善导出数据的字典名称处理
- EmpContractInfo新增距到期天数和到期提醒字段
- EmpContractInfoController优化合同到期提醒导出功能,支持字段动态导出
- 修正部分注解说明和代码格式问题
6个文件已修改
111 ■■■■ 已修改文件
febs-common/febs-common-core/src/main/java/cc/mrbird/febs/common/core/constant/DicCode.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/controller/EmpBaseInfoController.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/controller/EmpContractInfoController.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/entity/EmpBaseInfo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/entity/EmpContractInfo.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpBaseInfoServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
febs-common/febs-common-core/src/main/java/cc/mrbird/febs/common/core/constant/DicCode.java
@@ -96,4 +96,9 @@
     * 转正状态
     */
    public final static String PROBATIONS_TATUS = "probationStatus";
    /**
     * 性别
     */
    public final static String SEX = "sex";
}
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/controller/EmpBaseInfoController.java
@@ -348,4 +348,32 @@
        String dateStr = DateUtil.formatDate(currentDate);
        boolean result = PoiExportExcel.exportCommonExcel(response, fileName + dateStr, fileName, allList);
    }
    @ApiOperation(value = "导出退休提醒员工")
    @PostMapping(value = "export/retirement")
    @ControllerEndpoint(operation = "导出退休提醒数据", exceptionMessage = "导出Excel失败")
    public void exportRetirementWithField(QueryRequest request, HttpServletResponse response, String exportField, EmpBaseInfo empBaseinfo) throws IOException {
        request.setPageSize(25535);
        request.setPageNum(1);
        List<EmpBaseInfo> exportList = this.empBaseInfoService.findRetirementEmpBaseInfos(request, empBaseinfo).getRecords();
        List<Map<String, Object>> allList = PoiExportExcel.getDataList(exportField, exportList, null);
        String fileName = "退休提醒员工列表";
        Date currentDate = new Date();
        String dateStr = DateUtil.formatDate(currentDate);
        boolean result = PoiExportExcel.exportCommonExcel(response, fileName + dateStr, fileName, allList);
    }
    @ApiOperation(value = "导出转正提醒员工")
    @PostMapping(value = "export/probation")
    @ControllerEndpoint(operation = "导出转正提醒数据", exceptionMessage = "导出Excel失败")
    public void exportProbationWithField(QueryRequest request, HttpServletResponse response, String exportField, EmpBaseInfo empBaseinfo) throws IOException {
        request.setPageSize(25535);
        request.setPageNum(1);
        List<EmpBaseInfo> exportList = this.empBaseInfoService.findProbationEmpBaseInfos(request, empBaseinfo).getRecords();
        List<Map<String, Object>> allList = PoiExportExcel.getDataList(exportField, exportList, null);
        String fileName = "转正提醒员工列表";
        Date currentDate = new Date();
        String dateStr = DateUtil.formatDate(currentDate);
        boolean result = PoiExportExcel.exportCommonExcel(response, fileName + dateStr, fileName, allList);
    }
}
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/controller/EmpContractInfoController.java
@@ -7,7 +7,8 @@
import cc.mrbird.febs.server.hr.annotation.ControllerEndpoint;
import cc.mrbird.febs.server.hr.entity.EmpContractInfo;
import cc.mrbird.febs.server.hr.service.IEmpContractInfoService;
import com.wuwenze.poi.ExcelKit;
import cc.mrbird.febs.server.hr.util.PoiExportExcel;
import cn.hutool.core.date.DateUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@@ -19,6 +20,8 @@
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -64,10 +67,18 @@
    @ApiOperation(value = "导出员工")
    @RequestMapping(value = "export", method = RequestMethod.POST)
    @ControllerEndpoint(operation = "导出用户数据", exceptionMessage = "导出Excel失败")
    public void export(QueryRequest request, EmpContractInfo empBaseinfo, HttpServletResponse response) {
        request.setPageSize(this.empContractinfoService.count());
        List<EmpContractInfo> records = this.empContractinfoService.findEmpContractinfos(request, empBaseinfo).getRecords();
        ExcelKit.$Export(EmpContractInfo.class, response).downXlsx(records, false);
    public void export(QueryRequest request, HttpServletResponse response,String exportField, EmpContractInfo empBaseInfo) throws IOException {
        // request.setPageSize(this.empContractinfoService.count());
        // List<EmpContractInfo> records = this.empContractinfoService.findEmpContractinfos(request, empBaseinfo).getRecords();
        // ExcelKit.$Export(EmpContractInfo.class, response).downXlsx(records, false);
        request.setPageSize(25535);
        request.setPageNum(1);
        List<EmpContractInfo> exportList = this.empContractinfoService.findRemindContractinfos(request, empBaseInfo).getRecords();
        List<Map<String, Object>> allList = PoiExportExcel.getDataList(exportField, exportList, null);
        String fileName = "合同到期提醒员工列表";
        Date currentDate = new Date();
        String dateStr = DateUtil.formatDate(currentDate);
        boolean result = PoiExportExcel.exportCommonExcel(response, fileName + dateStr, fileName, allList);
    }
    @PostMapping
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/entity/EmpBaseInfo.java
@@ -55,7 +55,7 @@
    @TableField("deptName")
    private String deptName = "";
    @NotBlank(message = "{required}")
    @FieldInfo(name = "empNumb", type = "varchar", explain = "编号")
    @TableField("empNumb")
    @ExcelField(value = "编号")
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/entity/EmpContractInfo.java
@@ -1,24 +1,23 @@
package cc.mrbird.febs.server.hr.entity;
import java.io.Serializable;
import java.util.Date;
import cc.mrbird.febs.common.core.annotation.FieldInfo;
import cc.mrbird.febs.common.core.converter.TimeConverter;
import cc.mrbird.febs.common.core.utils.DateDeSerializer;
import cc.mrbird.febs.common.core.utils.DateSerializer;
import cc.mrbird.febs.common.core.utils.DateTimeDeserializer;
import cc.mrbird.febs.common.core.utils.DateTimeSerializer;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.wuwenze.poi.annotation.Excel;
import com.wuwenze.poi.annotation.ExcelField;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.Version;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * name:EmpContractinfo
@@ -63,7 +62,7 @@
    @ExcelField(value = "身份证号码")
    private String certificateNumb = "";
    
    @FieldInfo(name = "signingDate", type = "date", explain = "合同签订日期")
    @FieldInfo(name = "signingDate", type = "date", explain = "签订日期")
    @TableField("signingDate")
    @JsonSerialize(using = DateSerializer.class)
    @JsonDeserialize(using = DateDeSerializer.class)
@@ -79,7 +78,7 @@
    @ExcelField(value = "合同结束日期", writeConverter = TimeConverter.class)
    private Date endDate;
    
    @FieldInfo(name = "contractPeriod", type = "varchar", explain = "合同期限(年)")
    @FieldInfo(name = "contractPeriod", type = "varchar", explain = "合同期限(年)")
    @TableField("contractPeriod")
    @ExcelField(value = "合同期限(年)")
    private String contractPeriod;
@@ -171,6 +170,7 @@
    // @Version
    private Integer version = 0;
    @FieldInfo(name = "diffDay", type = "varchar", explain = "距到期天数")
    @TableField("diffDay")
    private Integer diffDay = 0;
@@ -184,8 +184,6 @@
    private String endDateStr = "";
    @TableField(exist = false)
    @FieldInfo(name = "diffLabel", type = "varchar", explain = "到期提醒")
    private String diffLabel = "";
}
febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpBaseInfoServiceImpl.java
@@ -1507,6 +1507,26 @@
                    .filter(k -> DicCode.INSURANCETYPE.equals(k.getDicCode()) && k.getDicItemCode().equals(item.getInsuranceType()))
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse("未购保险"));
            item.setSexName(dicItems.stream()
                    .filter(k -> DicCode.SEX.equals(k.getDicCode()) && k.getDicItemCode().equals(item.getSex()))
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse("未知"));
            item.setNativePlaceName(dicItems.stream()
                    .filter(k -> DicCode.NATIVEPLACE.equals(k.getDicCode()) && k.getDicItemCode().equals(item.getNativePlace()))
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse("未知"));
            item.setEmpTypeName(dicItems.stream()
                    .filter(k -> DicCode.EMPTYPE.equals(k.getDicCode()) && k.getDicItemCode().equals(item.getEmpType()))
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse("未知"));
            item.setEducationName(dicItems.stream()
                    .filter(k -> DicCode.EDUCATION.equals(k.getDicCode()) && k.getDicItemCode().equals(item.getEducation()))
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse("未知"));
        });
        iPage.setRecords(list);
@@ -1518,7 +1538,18 @@
        Page<EmpBaseInfo> page = new Page<>(request.getPageNum(), request.getPageSize());
        SortUtil.handlePageSort(request, page, "birthDate", FebsConstant.ORDER_ASC, true);
        return empBaseInfoMapper.selectPageVo(page, createRetirementAlertQueryWrapper(empBaseInfo));
        IPage<EmpBaseInfo> iPage = empBaseInfoMapper.selectPageVo(page, createRetirementAlertQueryWrapper(empBaseInfo));
        List<EmpBaseInfo> list = iPage.getRecords();
        List<DicItem> dicItems = CastUtil.castList(redisService.get("dicItems"), DicItem.class);
        list.forEach(item -> {
            item.setSexName(dicItems.stream()
                    .filter(k -> DicCode.SEX.equals(k.getDicCode()) && k.getDicItemCode().equals(item.getSex()))
                    .findFirst()
                    .map(DicItem::getDicItemName)
                    .orElse("未知"));
        });
        iPage.setRecords(list);
        return iPage;
    }
    @Override