紧接着上一篇,接下来我们实现员工管理模块。
目录
- 1.员工管理
- 1.1.准备工作
- 1.2.实现功能
- 1.3.测试功能
员工模块功能同样简单,麻烦的就是涉及到的字段比较多,还需要通过员工的id获取其他的表(籍贯、政治面貌等)。员工展示涉及到分页,所以需要配置分页,十分简单,还需要新建分页公共返回实体类对象。
分页
MyBatisPlusConfig.java
@Configuration
public class MyBatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
新建分页公共返回实体类对象
RespPageBean.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RespPageBean {
/**
* 总条数
*/
private Long total;
/**
* 数据list
*/
private List<?> data;
}
修改pojo类,在Employee类中所有有关日期的属性上添加日期格式
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_employee")
@ApiModel(value="Employee对象", description="")
public class Employee implements Serializable {
......
@ApiModelProperty(value = "出生日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
private LocalDate birthday;
@ApiModelProperty(value = "入职日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
private LocalDate beginDate;
@ApiModelProperty(value = "转正日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
private LocalDate conversionTime;
@ApiModelProperty(value = "离职日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
private LocalDate notWorkDate;
@ApiModelProperty(value = "合同起始日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
private LocalDate beginContract;
@ApiModelProperty(value = "合同终止日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
private LocalDate endContract;
......
}
由于employee表中有许多外键id,这些外键id都要对应到单独的表,那么这些表对应employee实体类里面就是对象,所以我们将他作为对象放在属性里面。
在Employee表中添加对应属性
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_employee")
@ApiModel(value="Employee对象", description="")
public class Employee implements Serializable {
......
@ApiModelProperty(value = "部门")
@TableField(exist = false)
private Department department;
@ApiModelProperty(value = "职称")
@TableField(exist = false)
private Joblevel joblevel;
@ApiModelProperty(value = "职位")
@TableField(exist = false)
private Position position;
}
1.2.1.Mapper接口
EmployeeMapper.java
public interface EmployeeMapper extends BaseMapper<Employee> {
/**
* 获取所有员工(分页)
*
* @param page
* @param employee
* @param beginDateScope
* @return
*/
IPage<Employee> getEmployeeByPage(Page<Employee> page,
@Param("employee") Employee employee,
@Param("beginDateScope") LocalDate[] beginDateScope);
/**
* 查询员工
*
* @param id
* @return
*/
List<Employee> getEmployee(Integer id);
}
1.2.2.对应映射文件
<resultMap id="EmployeeInfo" type="com.kt.pojo.Employee" extends="BaseResultMap">
<association property="nation" javaType="com.kt.pojo.Nation">
<id column="nid" property="id"/>
<result column="nname" property="name"/>
association>
<association property="politicsStatus" javaType="com.kt.pojo.PoliticsStatus">
<id column="pid" property="id"/>
<result column="pname" property="name"/>
association>
<association property="department" javaType="com.kt.pojo.Department">
<id column="did" property="id"/>
<result column="dname" property="name"/>
association>
<association property="joblevel" javaType="com.kt.pojo.Joblevel">
<id column="jid" property="id"/>
<result column="jname" property="name"/>
association>
<association property="position" javaType="com.kt.pojo.Position">
<id column="posid" property="id"/>
<result column="posname" property="name"/>
association>
resultMap>
<select id="getEmployeeByPage" resultMap="EmployeeInfo">
SELECT
e.*,
n.id AS nid,
n.`name` AS nname,
p.id AS pid,
p.`name` AS pname,
d.id AS did,
d.`name` AS dname,
pos.id AS posid,
pos.`name` AS posname,
j.id AS jid,
j.`name` AS jname
FROM
t_employee e,
t_nation n,
t_politics_status p,
t_department d,
t_joblevel j,
t_position pos
WHERE
e.nationId = n.id
AND e.politicId = p.id
AND e.departmentId = d.id
AND e.jobLevelId = j.id
AND e.posId = pos.id
<if test="null!=employee.name and ''!=employee.name">
AND e.`name` LIKE CONCAT( '%', #{employee.name}, '%' )
if>
<if test="null!=employee.politicId">
AND e.politicId = #{employee.politicId}
if>
<if test="null!=employee.nationId">
AND e.nationId = #{employee.nationId}
if>
<if test="null!=employee.jobLevelId">
AND e.jobLevelId = #{employee.jobLevelId}
if>
<if test="null!=employee.posId">
AND e.posId = #{employee.posId}
if>
<if test="null!=employee.engageForm and ''!=employee.engageForm">
AND e.engageForm = #{employee.engageForm}
if>
<if test="null!=employee.departmentId">
AND e.departmentId = #{employee.departmentId}
if>
<if test="null!=beginDateScope and 2==beginDateScope.length">
AND e.beginDate BETWEEN #{beginDateScope[0]} AND #{beginDateScope[1]}
if>
ORDER BY
e.id
select>
<select id="getEmployee" resultMap="EmployeeInfo">
SELECT
e.*,
n.id AS nid,
n.`name` AS nname,
p.id AS pid,
p.`name` AS pname,
j.id AS jid,
j.`name` AS jname,
d.id AS did,
d.`name` AS dname,
pos.id AS posid,
pos.`name` AS posname
FROM
t_employee e,
t_nation n,
t_politics_status p,
t_department d,
t_joblevel j,
t_position pos
WHERE
e.nationId = n.id
AND e.politicId = p.id
AND e.departmentId = d.id
AND e.jobLevelId = j.id
AND e.posId = pos.id
<if test="null!=id">
AND e.id = #{id}
if>
ORDER BY
e.id
select>
1.2.3.服务类
IEmployeeService.java
public interface IEmployeeService extends IService<Employee> {
/**
* 获取所有员工(分页)
*
* @param currentPage
* @param size
* @param employee
* @param beginDateScope
* @return
*/
RespPageBean getEmployeeByPage(Integer currentPage, Integer size, Employee employee, LocalDate[] beginDateScope);
/**
* 获取工号
*
* @return
*/
RespBean maxWorkID();
/**
* 添加员工
*
* @param employee
* @return
*/
RespBean addEmp(Employee employee);
/**
* 查询员工
* @param id
* @return
*/
List<Employee> getEmployee(Integer id);
}
1.2.4.服务实现类
EmployeeServiceImpl.java
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements IEmployeeService {
@Resource
private EmployeeMapper employeeMapper;
@Override
public RespPageBean getEmployeeByPage(Integer currentPage, Integer size, Employee employee, LocalDate[] beginDateScope) {
// 开启分页
Page<Employee> page = new Page<>(currentPage, size);
IPage<Employee> employeeByPage = employeeMapper.getEmployeeByPage(page, employee, beginDateScope);
RespPageBean respPageBean = new RespPageBean(employeeByPage.getTotal(), employeeByPage.getRecords());
return respPageBean;
}
@Override
public RespBean maxWorkID() {
List<Map<String, Object>> maps = employeeMapper.selectMaps(new QueryWrapper<Employee>().select("max(workID)"));
return RespBean.success(null,
String.format("%08d", Integer.parseInt(maps.get(0).get("max(workID)").toString()) + 1));
}
@Override
public RespBean addEmp(Employee employee) {
// 处理合同期限,保留2位小数
LocalDate beginContract = employee.getBeginContract();
LocalDate endContract = employee.getEndContract();
long days = beginContract.until(endContract, ChronoUnit.DAYS);
DecimalFormat decimalFormat = new DecimalFormat("##.00");
employee.setContractTerm(Double.parseDouble(decimalFormat.format(days / 365.00)));
if (1 == employeeMapper.insert(employee)) {
return RespBean.success("添加成功!");
}
return RespBean.error("添加失败!");
}
@Override
public List<Employee> getEmployee(Integer id) {
return employeeMapper.getEmployee(id);
}
}
1.2.5.控制层
EmployeeController.java
@RestController
@RequestMapping("/employee/basic")
public class EmployeeController {
@Resource
private IEmployeeService employeeService;
@Resource
private IPositionService positionService;
@Resource
private IDepartmentService departmentService;
@Resource
private IJoblevelService joblevelService;
@Resource
private INationService nationService;
@Resource
private IPoliticsStatusService politicsStatusService;
@ApiOperation(value = "获取所有员工(分页)")
@GetMapping("/")
public RespPageBean getEmployee(@RequestParam(defaultValue = "1") Integer currentPage,
@RequestParam(defaultValue = "10") Integer size,
Employee employee, LocalDate[] beginDateScope) {
return employeeService.getEmployeeByPage(currentPage, size, employee, beginDateScope);
}
@ApiOperation(value = "获取所有职位")
@GetMapping("/positions")
public List<Position> getAllPositions() {
return positionService.list();
}
@ApiOperation(value = "获取所有职称")
@GetMapping("/joblevels")
public List<Joblevel> getAllJobLevels() {
return joblevelService.list();
}
@ApiOperation(value = "获取所有民族")
@GetMapping("/nations")
public List<Nation> getAllNations() {
return nationService.list();
}
@ApiOperation(value = "获取所有政治面貌")
@GetMapping("/politicsStatus")
public List<PoliticsStatus> getAllPoliticsStatus() {
return politicsStatusService.list();
}
@ApiOperation(value = "获取所有部门")
@GetMapping("/deps")
public List<Department> getAllDepartments() {
return departmentService.getAllDepartments();
}
@ApiOperation(value = "获取工号")
@GetMapping("/maxWorkID")
public RespBean maxWorkID() {
return employeeService.maxWorkID();
}
@ApiOperation(value = "添加员工")
@PostMapping("/")
public RespBean addEmp(@RequestBody Employee employee) {
return employeeService.addEmp(employee);
}
@ApiOperation(value = "更新员工")
@PutMapping("/")
public RespBean updateEmp(@RequestBody Employee employee) {
if (employeeService.updateById(employee)) {
return RespBean.success("更新成功!");
}
return RespBean.error("更新失败!");
}
@ApiOperation(value = "删除员工")
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public RespBean deleteEmp(@PathVariable Integer id) {
if (employeeService.removeById(id)) {
return RespBean.success("删除成功!");
}
return RespBean.error("删除失败!");
}
}
获取所有员工(分页):
获取所有部门:
获取所有职称:
添加员工:
参数
{
"name": "测试",
"gender": "女",
"birthday": "1993-03-13",
"idCard": "451200193609248217",
"wedlock": "已婚",
"nationId": 1,
"nativePlace": "丽丽市",
"politicId": 13,
"email": "[email protected]",
"phone": "13091676162",
"address": "澳门特别行政区东莞市高港关岭街Z座 113957",
"departmentId": 9,
"jobLevelId": 3,
"posId": 1,
"engageForm": "劳务合同",
"tiptopDegree": "博士",
"specialty": "护理学",
"school": "清华大学",
"beginDate": "2015-08-09",
"workState": "在职",
"workID": "00000107",
"conversionTime": "2016-08-08",
"beginContract": "2017-09-04",
"endContract": "2019-06-23",
"workAge": null,
"salaryId": 4
}
删除员工:
到这里员工管理模块就完成了,下一篇博客实现数据的导入和导出:
Easy POI实现数据导入导出