请假流程数据库设计
设计约束
根据请假流程设计约束
◆每一个请假单对应一个审批流程
◆请假单创建后按业务规则生成部门经理、总经理审批任务
◆审批任务的经办人只能审批自己辖区内的请假申请
◆所有审批任务”通过”,代表请假已经批准
◆任意审批任务”驳回”操作,其余审批任务取消,请假申请被驳回
◆请假流程中任意节点产生的操作都要生成对应的系统通知
请假申请表:
执行流程表:
执行过程:
员工申请→部门同意(请假时间超过三天)→经理审批
消息通知表:
通知过程:
开发请假申请UI界面
webapp下新建页面leave_form.html
引入zh-cn.js文件是因为日期格式改变为中文格式
rules="rules"
表示表单校验规则,一个是日期申请的,一个是请假原因,默认规则不能为空
formType: "1"
表示默认选择值为1的选项,在e-select标签中对应是事假
element-plus默认提供日期选择器即el-date-picker
app.use(ElementPlus, ElementPlus.lang.zhCn);
使用zhCn语言包
开发请假申请Mapper层
创建实体类LeaveForm.java
继续向前推进,mapper下新建接口LeaveFormMapper.java
资源目录下mappers新建leave_form.xml文件
可以在navicat自动生成sql语句,form_id字段因为设置为主键自增,所以不需要在insert语句写入,进行标签里绑定 useGeneratedKeys="true" keyProperty="formId" keyColumn="form_id"
然后就是进行mybatis-config.xml注册
我们快速生成测试
不用返回对象,直接return NULL
查看数据库,生成成功
请假单完成,接下来是请假流程
新建实体类ProcessFlow.java
记得重写toString方法
mapper下新增接口ProcessFlowMapper.java
然后配置sql语句,mappers新增process_flow.xml
书写一条垃圾数据,然后右键生成insert语句,即可直接粘贴到xml,同理上面的主键自增处理方法
进行注册
右键函数名生成单元测试用例
右键运行,测试成功
接下来同样方法快速处理系统通知表
新建实体Notice.java
为了实例化方便,额外添加一个带参构造方法
然后回到mapper上
继续新建NoticeMapper.java
配置sql.新建notice.xml
进行注册
进行测试用例
成功执行
我们完成了上述三张表的插入操作,接下来执行业务处理
开发请假申请的service层
如何将上面的逻辑联系在一起形成完整的业务逻辑?
service文件夹下创建LeaveFormService.java文件
setIsLast
表示是否是最后一位审批?大于72小时,总经理是最后一个审批,小于72小时,部门经理是最后一位审批
第三部分分情况时需要获取到上级部门操作,与员工相关,所以在EployeeService.java下,新增代码
小于7级员工查询部门经理,等于7级员工查询总经理,等于8级员工就是总经理自己,自动通过
后台要动态执行sql语句
回到EployeeMapper.java接口上,额外增加方法
根据params不同动态返回Eployee集合结果
然后打开employee.xml文件进行处理
对selectByParams方法进行测试用例
进行测试
情况一测试成功,请假单完成申请
审核流程也完成
部门经理处理中,最后一步由总经理完成,setlast为1,处于ready状态,等部门经理通过,ready状态变processing
开发请假Controller层
向上推演,开发contronller
contronller下创建LeaveFormServlet.java
输入localhost/api/leave/create?eid=2&formType=1&startTime=1623940149&endTime=1624026549&reason=测试
查看数据库
开发请假申请View层
前端页面如何与Servlet进行交互
回到我们的leave_form.html页面
我们的逻辑是通过获取员工的id,从而得到部门和名字岗位等信息,所以需要和登陆界面login.html进行绑定
输入总经理账号m8,密码test
可以看出我们需要将其进行动态改变
修改leave_form.html
运行后部门应该也要改变,现在快速开发部门功能
创建实体类department.java
创建DepartmentMapper.java文件
xml里进行sql书写
注册
从service对mapper调用,不要在servlet进行调用,不要跨层访问,违规
创建DepartmentService.java文件
继续向上推演,我们在UseInfoServlet.java中书写过员工编号,我们应该在里面继续书写部门编号
添加.put("department",department)
修改leave_form.html
绑定mounted
传入数据
进行绑定
重启tomcat,运行并登陆
继续开发leave_form.html文件,完成表单数据和申请按钮处理
捕捉日期,在el-date-picker标签中
在methods增加方法
登陆并运行
完整leave_form代码