OA系统十七:请假申请三:【请假申请】这个内嵌界面中【提交请假表单数据】的Service层;(PS:在EmployeeDao中初次遇到@Param()参数设置)

本篇博客的主要内容是:

 本篇博客的需要注意的点有:

(1)根据业务需求,规划好整体的代码结构和编码逻辑;

(2)一种目前认可的编程小细节;(PS:随着以后经验增多,可能会抛弃这种想法,或者有其他理解)

(3)程序中的容易改变的常量,设置成外部调用的策略(以前做项目的时候遇到过,然后这也是非常常用的处理策略!!!!!)

(4)每写完一个Service模块,也及时进行单元测试!!!这一步很重要,步步为营;;;否则到最后,前台到后台都编写好后再测试,因为战线较长,一旦出错就比较难定位啦;

目录

一:创建 LeaveFormService类:实现请假申请业务逻辑

1.LeaveFormService

2.说明

(1)这些操作需要设置在一个事务机制下

(2)代码结构分析

(3)在Employee的Dao中,增加一个查询上级的方法:selectLeader()方法

(4)selectLeader()方法在employee.xml中的实现:动态SQL的分析

(5)程序中的容易改变的常量,设置成外部调用的策略(以前做项目的时候遇到过,然后这也是非常常用的处理策略!!!!!)

二:实际测试:

测试1:基层员工,请假72小时以上:

测试2:基层员工,请假72小时以内:

测试3:部门经理(这儿是研发部部门经理为例)

测试4:总经理


一:创建 LeaveFormService类:实现请假申请业务逻辑

创建LeaveFormService类:来实现请假申请的业务逻辑:

1.LeaveFormService

package com.imooc.oa.service;

import com.imooc.oa.dao.EmployeeDao;
import com.imooc.oa.dao.LeaveFormDao;
import com.imooc.oa.dao.ProcessFlowDao;
import com.imooc.oa.entity.Employee;
import com.imooc.oa.entity.LeaveForm;
import com.imooc.oa.entity.ProcessFlow;
import com.imooc.oa.utils.MybatisUtils;

import java.util.Date;

/**
 * 请假单流程服务
 */
public class LeaveFormService {
    /**
     *
     * @param form:前台界面提交过来的【请假表单数据】的LeaveForm对象;(是不包含formId属性的)
     * @return:将【请假表单数据】存储到数据库后,包含formId属性值的LeaveForm对象;
     */
    public LeaveForm createLeaveForm(LeaveForm form){
        LeaveForm savedForm = (LeaveForm) MybatisUtils.executeUpdate(sqlSession -> {
            //1.持久化form表单数据,8级以下员工表单state状态为processing,8级(总经理)state状态为approved
            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);//持久化form表单数据
            leaveFormDao.insert(form);
            //2.增加第一条流程数据,说明表单已提交,状态为complete
            ProcessFlowDao processFlowDao = sqlSession.getMapper(ProcessFlowDao.class);
            ProcessFlow flow1 = new ProcessFlow();
            flow1.setFormId(form.getFormId());//在上面持久化form表单后,form对象的formId属性就被初始化了
            flow1.setOperatorId(employee.getEmployeeId());
            flow1.setAction("apply");
            flow1.setCreateTime(new Date());
            flow1.setOrderNo(1);
            flow1.setState("complete");
            flow1.setIsLast(0);
            processFlowDao.insert(flow1);
            //3.分情况创建其余流程数据
            //3.1  7级以下员工,生成部门经理审批任务,请假时间大于36小时,还需生成总经理审批任务
            if (employee.getLevel() < 7) {
                Employee dmanager = employeeDao.selectLeader(employee);//查询上级领导(部门经理)
                ProcessFlow flow2 = new ProcessFlow();
                flow2.setFormId(form.getFormId());
                flow2.setOperatorId(dmanager.getEmployeeId());
                flow2.setAction("audit");
                flow2.setCreateTime(new Date());
                flow2.setOrderNo(2);
                flow2.setState("process");
                long diff = form.getEndTime().getTime() - form.getStartTime().getTime(); //获取请假的时间长度
                float hours = diff / (1000 * 60 * 60) * 1f;//请假时间:小时为单位
                if (hours >= BussinessConstants.MANAGER_AUDIT_HOURS){
                    flow2.setIsLast(0); //如果请假时间大于32小时,还需要总经理审批,自然这不是工作流程的最后一个
                    processFlowDao.insert(flow2);
                    // 总经理的部分
                    Employee manager = employeeDao.selectLeader(dmanager);
                    ProcessFlow flow3 = new ProcessFlow();
                    flow3.setFormId(form.getFormId());
                    flow3.setOperatorId(manager.getEmployeeId());
                    flow3.setAction("audit");
                    flow3.setCreateTime(new Date());
                    flow3.setOrderNo(3);
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值