持续创作,加速成长!这是我参与「掘金日新计划 · 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.定义查找部门经理
public Employee selectLeader(@Param("emp") Employee employee);
代码说明:我们这边传参为实体,所以使用@Param
3.mapper
<select id="selectLeader" parameterType="com.imooc.oa.entity.Employee" resultType="com.imooc.oa.entity.Employee" >
select * from adm_employee where
<if test="emp.level < 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
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小时
部门经理employee_id=2
总经理