云e办(后端)——员工管理

云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("删除失败!");
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真真最可爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值