OA系统开发(十二)

107 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

创建请假单和流程单

业务流程说明

//1.持久化form表单数据,8级以下员工表单状态为processing,8级(总经理)状态为approved
//2.增加第一条流程数据,说明表单已提交,状态为complete
//3.分情况创建其余流程数据
//3.1 7级以下员工,生成部门经理审批任务,请假时间大于72小时,还需生成总经理审批任务
//3.2 7级员工,生成总经理审批任务
//3.3 8级员工,生成总经理审批任务,系统自动通过

1.设置变量

请假超过72小时,需要总经理审批

package com.imooc.oa.service;
public class BusinessConstants {
    public static final int MANAGER_AUDIT_HOUR= 72;
}

2.定义查找部门经理

image.png

public Employee selectLeader(@Param("emp") Employee employee);

代码说明:我们这边传参为实体,所以使用@Param

3.mapper

image.png

<select id="selectLeader" parameterType="com.imooc.oa.entity.Employee" resultType="com.imooc.oa.entity.Employee" >
    select  * from adm_employee where
      <if test="emp.level &lt; 7">
            level = 7 and department_id=#{emp.departmentId}
      </if>
    <if test="emp.level==7">
        level = 8
    </if>
     <if test="emp.level==8">
         employee_id=#{emp.employeeId}
     </if>

</select>

代码说明:

  • 等级小于7,直接查找和当前登录用户同部门的领导
  • 等级为7,直接查找等级为8的领导
  • 等级为8,直接返回自己

4.新增service

image.png

public LeaveForm createLeaveForm(LeaveForm form){
    LeaveForm savedForm = (LeaveForm) MybatisUtils.executeUpdate(sqlSession -> {
        EmployeeDao employeeDao = sqlSession.getMapper(EmployeeDao.class);
       Employee employee = employeeDao.selectById(form.getEmployeeId());
       if(employee.getLevel()==8){
           form.setState("approved");
       }else{
           form.setState("processing");
       }
       //写入请假单
       LeaveFormDao leaveFormDao = sqlSession.getMapper(LeaveFormDao.class);
       leaveFormDao.insert(form);
       //写入流程
        ProcessFlowDao processFlowDao = sqlSession.getMapper(ProcessFlowDao.class);
        ProcessFlow flow1 = new ProcessFlow();

        flow1.setFormId(form.getFormId());
        flow1.setOperatorId(employee.getEmployeeId());
        flow1.setAction("apply");
        flow1.setCreateTime(new Date());
        flow1.setOrderNo(1l);
        flow1.setState("complete");
        flow1.setIsLast(0L);
        processFlowDao.insert(flow1);
        if(employee.getLevel()<7){
           Employee leader =  employeeDao.selectLeader(employee);
           ProcessFlowDao flow2 = sqlSession.getMapper(ProcessFlowDao.class);
           ProcessFlow p2 = new ProcessFlow();
           p2.setFormId(form.getFormId());
           p2.setOperatorId(leader.getEmployeeId());
           p2.setAction("audit");
           p2.setCreateTime(new Date());
           p2.setOrderNo(2l);
           p2.setState("process");
           Long diff = form.getEndTime().getTime()-form.getStartTime().getTime();
           Float hour = diff/(1000*60*60)*1f;
           if(hour> BusinessConstants.MANAGER_AUDIT_HOUR){
               p2.setIsLast(0l);
               Employee m1 = employeeDao.selectById(leader.getEmployeeId());
               Employee manager =  employeeDao.selectLeader(m1);
               ProcessFlowDao flow3 = sqlSession.getMapper(ProcessFlowDao.class);
               ProcessFlow p3 = new ProcessFlow();
               p3.setOperatorId(manager.getEmployeeId());
               p3.setFormId(form.getFormId());
               p3.setAction("audit");
               p3.setCreateTime(new Date());
               p3.setOrderNo(3l);
               p3.setState("ready");
               p3.setIsLast(1l);
               flow3.insert(p3);

           }else{
               p2.setIsLast(1l);
           }
           flow2.insert(p2);
        }else if(employee.getLevel()==7){
            Employee leader = employeeDao.selectById(employee.getEmployeeId());
            Employee manager = employeeDao.selectLeader(leader);

            ProcessFlowDao flow4 = sqlSession.getMapper(ProcessFlowDao.class);
            ProcessFlow p4 = new ProcessFlow();
            p4.setOperatorId(manager.getEmployeeId());
            p4.setFormId(form.getFormId());
            p4.setAction("audit");
            p4.setCreateTime(new Date());
            p4.setOrderNo(2l);
            p4.setState("process");
            p4.setIsLast(0l);
            flow4.insert(p4);

        }else{
            Employee leader = employeeDao.selectById(employee.getEmployeeId());
            Employee manager = employeeDao.selectLeader(leader);
            ProcessFlowDao flow4 = sqlSession.getMapper(ProcessFlowDao.class);
            ProcessFlow p4 = new ProcessFlow();
            p4.setOperatorId(manager.getEmployeeId());
            p4.setFormId(form.getFormId());
            p4.setAction("audit");
            p4.setResult("approved");
            p4.setCreateTime(new Date());
            p4.setOrderNo(2l);
            p4.setState("complete");
            p4.setIsLast(1l);
            flow4.insert(p4);
        }

        return form;
    });
    return savedForm;
}

5.重启项目测试

员工employee_id=8 请假天数超过72小时 image.png image.png 部门经理employee_id=2 image.png image.png 总经理 image.png image.png