(B站云e办)SpringBoot开发项目实战记录(七)
一、员工管理
1.1 准备工作(分页配置类、日期格式化类)
1. mybatisplus配置类分页
package com.jzq.server.config.mybatispuls;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
/**
* Mybatis分页配置
*/
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
2. 日期格式化类(converter)
package com.jzq.server.util.converter;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* 日期转换
*/
@Component
public class DateConverter implements Converter<String, LocalDate> {
@Override
public LocalDate convert(String source) {
try {
LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
3. 分页结果类封装
package com.jzq.server.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 公共分页对象
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RespPageBean {
/**
* 总条数
*/
private Long total;
/**
* 数据List
*/
private List<?> data;
}
1.2 分页查询所有员工
1. pojo层
/**
* <p>
*
* </p>
*
* @author seven
* @since 2022-01-02
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_employee")
@ApiModel(value="Employee对象", description="")
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "员工编号")
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty(value = "员工姓名")
private String name;
@ApiModelProperty(value = "性别")
private String gender;
@ApiModelProperty(value = "出生日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
private LocalDate birthday;
@ApiModelProperty(value = "身份证号")
private String idCard;
@ApiModelProperty(value = "婚姻状况")
private String wedlock;
@ApiModelProperty(value = "民族")
private Integer nationId;
@ApiModelProperty(value = "籍贯")
private String nativePlace;
@ApiModelProperty(value = "政治面貌")
private Integer politicId;
@ApiModelProperty(value = "邮箱")
private String email;
@ApiModelProperty(value = "电话号码")
private String phone;
@ApiModelProperty(value = "联系地址")
private String address;
@ApiModelProperty(value = "所属部门")
private Integer departmentId;
@ApiModelProperty(value = "职称ID")
private Integer jobLevelId;
@ApiModelProperty(value = "职位ID")
private Integer posId;
@ApiModelProperty(value = "聘用形式")
private String engageForm;
@ApiModelProperty(value = "最高学历")
private String tiptopDegree;
@ApiModelProperty(value = "所属专业")
private String specialty;
@ApiModelProperty(value = "毕业院校")
private String school;
@ApiModelProperty(value = "入职日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
private LocalDate beginDate;
@ApiModelProperty(value = "在职状态")
private String workState;
@ApiModelProperty(value = "工号")
private String workID;
@ApiModelProperty(value = "合同期限")
private Double contractTerm;
@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;
@ApiModelProperty(value = "工龄")
private Integer workAge;
@ApiModelProperty(value = "工资账套ID")
private Integer salaryId;
@ApiModelProperty(value = "政治面貌")
@TableField(exist = false)
private PoliticsStatus politicsStatus;
@ApiModelProperty(value = "部门")
@TableField(exist = false)
private Department department;
@ApiModelProperty(value = "职称")
@TableField(exist = false)
private Joblevel joblevel;
@ApiModelProperty(value = "职位")
@TableField(exist = false)
private Position position;
@ApiModelProperty(value = "种族")
@TableField(exist = false)
private Nation nation;
}
2. controller层
@ApiOperation("获取所有的员工(分页)")
@GetMapping("/")
public RespPageBean getEmployee(@RequestParam(defaultValue = "1") Integer currentPage,
@RequestParam(defaultValue = "10") Integer size,
Employee employee,
LocalDate[] beginDateScope) {
return employeeService.getEmployee(currentPage, size, employee, beginDateScope);
}
3. service层(⭐分页的知识点)
⭐知识点:
- 创建分页
Page<Employee> page = new Page<>(currentPage, size);
2. 查询分页数据 IPage\ employeeByPage = employeeMapper.getEmployeeByPage(page, employee, beginDateScope);
3. 封装到我们封装好的分页结果类返回 RespPageBean respPageBean = new RespPageBean(employeeByPage.getTotal(), employeeByPage.getRecords());其中getTotal():是获取总条数,getRecords():获取总的记录数
/**
* 获取员工(分页)
* @param currentPage
* @param size
* @param employee
* @param beginDateScope
* @return
*/
@Override
public RespPageBean getEmployee(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;
}
4. mapper的xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jzq.server.mapper.EmployeeMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.jzq.server.pojo.Employee">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="gender" property="gender" />
<result column="birthday" property="birthday" />
<result column="idCard" property="idCard" />
<result column="wedlock" property="wedlock" />
<result column="nationId" property="nationId" />
<result column="nativePlace" property="nativePlace" />
<result column="politicId" property="politicId" />
<result column="email" property="email" />
<result column="phone" property="phone" />
<result column="address" property="address" />
<result column="departmentId" property="departmentId" />
<result column="jobLevelId" property="jobLevelId" />
<result column="posId" property="posId" />
<result column="engageForm" property="engageForm" />
<result column="tiptopDegree" property="tiptopDegree" />
<result column="specialty" property="specialty" />
<result column="school" property="school" />
<result column="beginDate" property="beginDate" />
<result column="workState" property="workState" />
<result column="workID" property="workID" />
<result column="contractTerm" property="contractTerm" />
<result column="conversionTime" property="conversionTime" />
<result column="notWorkDate" property="notWorkDate" />
<result column="beginContract" property="beginContract" />
<result column="endContract" property="endContract" />
<result column="workAge" property="workAge" />
<result column="salaryId" property="salaryId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, name, gender, birthday, idCard, wedlock, nationId, nativePlace, politicId, email, phone, address, departmentId, jobLevelId, posId, engageForm, tiptopDegree, specialty, school, beginDate, workState, workID, contractTerm, conversionTime, notWorkDate, beginContract, endContract, workAge, salaryId
</sql>
<resultMap id="EmployeeInfo" type="com.jzq.server.pojo.Employee" extends="BaseResultMap">
<association property="nation" javaType="com.jzq.server.pojo.Nation">
<id column="nid" property="id"></id>
<result column="nname" property="name"></result>
</association>
<association property="politicsStatus" javaType="com.jzq.server.pojo.PoliticsStatus">
<id column="pid" property="id"></id>
<result column="pname" property="name"></result>
</association>
<association property="department" javaType="com.jzq.server.pojo.Department">
<id column="did" property="id"></id>
<result column="dname" property="name"></result>
</association>
<association property="joblevel" javaType="com.jzq.server.pojo.Joblevel">
<id column="jid" property="id"></id>
<result column="jname" property="name"></result>
</association>
<association property="position" javaType="com.jzq.server.pojo.Position">
<id column="posid" property="id"></id>
<result column="posname" property="name"></result>
</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,
j.id as jid,
j.`name` as jname,
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!=employee.name and ''!=employee.name">
AND e.`name` LIKE CONCAT("%",#{empolyee.name}, "%")
</if>
<if test="null!=employee.politicId">
AND e.politicId = #{empolyee.politicId}
</if>
<if test="null!=employee.nationId">
AND e.nationId = #{empolyee.nationId}
</if>
<if test="null!=employee.jobLevelId">
AND e.jobLevelId = #{empolyee.jobLevelId}
</if>
<if test="null!=employee.posId">
AND e.posId = #{empolyee.posId}
</if>
<if test="null!=employee.engageForm and ''!=employee.engageForm">
AND e.engageForm = #{empolyee.engageForm}
</if>
<if test="null!=employee.departmentId">
AND e.departmentId = #{empolyee.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>
</mapper>
示例:
1.3 增加员工
1. controller层
@ApiOperation(value = "添加员工")
@PostMapping("/")
public RespBean addEmp(@RequestBody Employee employee) {
return employeeService.addEmp(employee);
}
2. service层
@Override
public RespBean addEmp(Employee employee) {
// 处理合同期限
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.warning("添加员工失败");
}
1.4 修改员工
1. controller层
@ApiOperation(value = "更新员工")
@PutMapping("/")
public RespBean updateEmp(@RequestBody Employee employee) {
if (employeeService.updateById(employee)) {
return RespBean.success("更新员工成功");
}
return RespBean.warning("更新员工失败");
}
1.5 删除员工
1. controller层
@ApiOperation(value = "删除员工")
@DeleteMapping("/{id}")
public RespBean deleteEmp(@PathVariable Integer id) {
if (employeeService.removeById(id)) {
return RespBean.success("删除员工成功");
}
return RespBean.warning("删除员工失败");
}