前言
本专栏前面的几篇已经实现了eladmin的基本操作,本篇开发简历维护模块,对简历表里面的内容进行操作。其中,因为存储的字段是工作开始时间和出生日期,而返回的数据需要展示工作年限和年龄,所以涉及到了增加两个返回参数。
数据表
保存了简历最基本的信息,而详细信息(比如工作经历、项目经验等)直接存储在了完整内容字段里面,同时有简历附件支持直接查看。
代码自动生成工具
不重复写了,可以参考前面的一篇:https://blog.csdn.net/m0_58095675/article/details/124656816
其中,生成代码的位置:系统工具–代码生成。
增加查询返回参数
默认情况下,分页查询的服务层代码:
@Override
public Map<String,Object> queryAll(ResumeQueryCriteria criteria, Pageable pageable){
criteria.setIsDelete(0);
Page<Resume> page = resumeRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(resumeMapper::toDto));
}
很短的几行代码,逻辑也比较清晰。
1. 查询出来Resume分页列表数据
2. 将Resume实体类转化为Dto
3. 将dto分页数据返回
如果要增加返回参数,可以在第二步后面增加一步:将Dto数据列表逐条取出来,然后添加上新的内容(用mybatis就方便多了,直接改sql语言,but我用的是jpa,各有优略吧)。
首先修改对应的dto,增加年龄和工作年限字段,用于赋值后返回。
package me.zhengjie.xingchenlie.business.service.dto;
import java.io.Serializable;
import java.sql.Timestamp;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.ToStringSerializer;
import lombok.Data;
/**
* @website https://el-admin.vip
* @description /
* @author lootaa
* @date 2022-05-10
**/
@Data
public class ResumeDto implements Serializable {
/** 主键 */
/** 防止精度丢失 */
@JSONField(serializeUsing = ToStringSerializer.class)
private Long zid;
/** 创建时间 */
private Timestamp createTime;
/** 更新时间 */
private Timestamp updateTime;
/** 删除标志 */
private Integer isDelete;
/** 简历附件 */
private String fileName;
/** 简历来源 */
private String source;
/** 姓名 */
private String name;
/** 电话 */
private String phoneNumber;
/** 邮箱 */
private String email;
/** 性别 */
private String gender;
/** 所在地 */
private String address;
/** 出生日期 */
private String brithDay;
/** 年龄 */
private Integer age;
/** 开始工作年份 */
private String workStartYear;
/** 工作年份 */
private Integer workYear;
/** 毕业院校 */
private String school;
/** 学历 */
private String degree;
/** 专业 */
private String major;
/** 当前公司 */
private String currentCompany;
/** 当前职位 */
private String currentPosition;
/** 当前薪资 */
private String currentSalary;
/** 期望薪资 */
private String desiredSalary;
/** 邮件Id */
private String fileId;
/** 简历语言 */
private String language;
/** 解析的完整内容 */
private String resumeRawtext;
}
然后修改服务层代码,计算两个数值并放到dto中(因为解析的完整内容特别长,同时前端列表也用不到,所以一并赋值为空了):
@Override
public Map<String,Object> queryAll(ResumeQueryCriteria criteria, Pageable pageable){
Page<Resume> page = resumeRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
Page<ResumeDto> dto = page.map(resumeMapper::toDto);
List<ResumeDto> resultDtos = dto.getContent();
for(ResumeDto resume : resultDtos) {
if(StringUtils.isNotBlank(resume.getBrithDay()) && resume.getBrithDay().length() >= 4) {
int age = Integer.parseInt(Dates.now().substring(0,4))-Integer.parseInt(resume.getBrithDay().substring(0,4));
resume.setAge(age);
}
if(StringUtils.isNotBlank(resume.getWorkStartYear()) && resume.getWorkStartYear().length() >= 4) {
int workYear = Integer.parseInt(Dates.now().substring(0,4))-Integer.parseInt(resume.getWorkStartYear().substring(0,4));
resume.setWorkYear(workYear);
}
resume.setResumeRawtext("");
}
return PageUtil.toPage(dto);
}
前端列表字段
前端将多返回的两个字段展示,直接修改el-table-column的prop和label即可。
列表最终展示效果(字段过多,有横线滚动条,后面的截图内容看不到):