云e办(后端)——员工管理
员工表:
关联表:外键id
- 1.员工表:名族类型是int,所以说是通过id找到民族表【t_nation】
- 2.政治面貌类型是int,通过id找到政治面貌表t_politics_status
- 3.还有部门、职称、职位等等
- 工龄:入职日期-离职日期
- 还有合同期限需要我们自己算出(结束日期-开始日期)
- 在数据库写好的区间。比如:已婚、未婚、离异
前端页面功能介绍:
普通搜索功能:
高级搜索:
并需要进行分页处理
查询所有员工:
1.mybatis分页配置类,分页插件
package com.xxxx.server.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Mybatis分页配置,分页插件
*
* 配置Bean
*/
@Configuration
public class MyBatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
}
2. 分页公共返回对象
package com.xxxx.server.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 分页公共返回对象
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RespPageBean {
//总条数
private Long total;
//数据
private List<?> data;
}
3.转换类:日期转换
package com.xxxx.server.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> {
/**
*
* @param source
* @return LocalDate
*/
@Override
public LocalDate convert(String source) {
try {
return LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
} catch (Exception e ){
e.printStackTrace();
}
return null;
}
}
4.pojo类修改:
外界id,都要对应到单独的表,表需要对应到POJO类中,对应到对象中。
@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 是为了前端的格式化
@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;
/**
* 表中有很多外界id,都需要对应外界的表中。
* 表需要对应pojo的对象中
*/
@ApiModelProperty(value = "民族")
//Tablefield(exist = false) 说明在员工表不存在的。
@TableField(exist=false)
private Nation nation;
@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;
}
5.controller
/**
* <p>
* 前端控制器
* </p>
*
* @author huyelin
* @since 2022-01-12
*/
@RestController
@RequestMapping("/employee/basic")
public class EmployeeController员工 {
@Autowired
private IEmployeeService iEmployeeService;
@ApiOperation(value = "获取所有的员工(员工)")
@GetMapping("/")
/**
* currentPage:打开时,默认当前是第几页
* size,每页有多少条数据
*/
public RespPageBean getEmployee(@RequestParam(defaultValue = "1" ) Integer currentPage,
@RequestParam(defaultValue = "10") Integer size,
Employee employee,
LocalDate[] beginDateScope
){
return iEmployeeService.getEmployeeByPage(currentPage,size,employee,beginDateScope);
}
}
6.service
/**
* 获取所有员工(分页)
* @param currentPage
* @param size
* @param employee
* @param beginDateScope
* @return
*/
RespPageBean getEmployeeByPage(Integer currentPage, Integer size, Employee employee, LocalDate[] beginDateScope);
-------------------
@Autowired
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;
}
7.mapper
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);
}
--------------
<resultMap id="EmployeeInfo" type="com.xxxx.server.pojo.Employee"
extends="BaseResultMap">
<association property="nation" javaType="com.xxxx.server.pojo.Nation">
<id column="nid" property="id"></id>
<result column="nname" property="name"></result>
</association>
<association property="politicsStatus"
javaType="com.xxxx.server.pojo.PoliticsStatus">
<id column="pid" property="id"></id>
<result column="pname" property="name"></result>
</association>
<association property="department"
javaType="com.xxxx.server.pojo.Department">
<id column="did" property="id"></id>
<result column="dname" property="name"></result>
</association>
<association property="joblevel"
javaType="com.xxxx.server.pojo.Joblevel">
<id column="jid" property="id"></id>
<result column="jname" property="name"></result>
</association>
<association property="position"
javaType="com.xxxx.server.pojo.Position">
<id column="posid" property="id"></id>
<result column="posname" property="name"></result>
</association>
</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>
<!--获取所有员工(分页)-->
<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( '%', #{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>
添加员工
- 政治面貌、籍贯、民族等等,是需要从数据库规定好的字段,进行选择。去单独的表中去查询。 而查出来是表中的id和名字,而添加名字时,是需要传一个employee对象,而其中employee有外键id,怎么把表中的id,和employee中的外键id相关联呢?
- 工号:正式进入公司,工号都是唯一的,业务中,是自动带过来,是不需要填写的。一般是当最大的工号id+1,就是现在添加员工的id
1.controller
package com.xxxx.server.controller;
import com.xxxx.server.pojo.*;
import com.xxxx.server.service.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.util.List;
@RestController
@RequestMapping("/employee/basic")
public class EmployeeController员工 {
@Autowired
private IEmployeeService iEmployeeService;
@ApiOperation(value = "获取所有的员工(员工)")
@GetMapping("/")
/**
* currentPage:打开时,默认当前是第几页
* size,每页有多少条数据
*/
public RespPageBean getEmployee(@RequestParam(defaultValue = "1" ) Integer currentPage,
@RequestParam(defaultValue = "10") Integer size,
Employee employee,
LocalDate[] beginDateScope
){
return iEmployeeService.getEmployeeByPage(currentPage,size,employee,beginDateScope);
}
@Autowired
private IPoliticsStatusService politicsStatusService;
@Autowired
private INationService nationService;
@Autowired
private IJoblevelService joblevelService;
@Autowired
private IPositionService positionService;
@Autowired
private IDepartmentService departmentService;
@ApiOperation(value = "获取所有政治面貌")
@GetMapping("/politicsstatus")
public List<PoliticsStatus> getAllPoliticsStatus() {
return politicsStatusService.list();
}
@ApiOperation(value = "获取所有民族")
@GetMapping("/nations")
public List<Nation> getAllNations() {
return nationService.list();
}
@ApiOperation(value = "获取所有职称")
@GetMapping("/joblevels")
public List<Joblevel> getAllJobLevels() {
return joblevelService.list();
}
@ApiOperation(value = "获取所有职位")
@GetMapping("/positions")
public List<Position> getAllPositions() {
return positionService.list();
}
@ApiOperation(value = "获取所有部门")
@GetMapping("/deps")
public List<Department> getAllDepartments(){
return departmentService.getAllDepartments();
}
@ApiOperation(value = "获取工号")
@GetMapping("/maxWorkID")
public RespBean maxWorkID() {
return iEmployeeService.maxWorkId();
}
@ApiOperation(value = "添加员工")
@PostMapping("/")
public RespBean addEmp(@RequestBody Employee employee) {
return iEmployeeService.insertEmployee(employee);
}
}
2.service
/**
* 获取工号
* @return
*/
RespBean maxWorkId();
/**
* 添加员工
* @param employee
* @return
*/
RespBean insertEmployee(Employee employee);
---------
/**
* 获取工号
* @return
*/
@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));
}
/**
* 添加员工
* @param employee
* @return
*/
@Override
public RespBean insertEmployee(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("添加失败!");
}
更新和删除员工
@ApiOperation(value = "更新员工")
@PutMapping("/")
public RespBean updateEmp(@RequestBody Employee employee){
if(iEmployeeService.updateById(employee)){
return RespBean.success("更新成功");
}
return RespBean.error("更新失败");
}
@ApiOperation(value = "删除员工")
@DeleteMapping("/{id}")
public RespBean deleteEmp(@PathVariable Integer id){
if (iEmployeeService.removeById(id)){
return RespBean.success("删除成功!");
}
return RespBean.error("删除失败!");
}