JavaEE项目实战(OA系统)之二十_流程审批之三
OA系统中有些查询是比较复杂的,需要花一些心思去思考。
在这一节中,我们将给出一些测试数据,然后要求大家来编写相应的SQL语句。
一、测试数据
1. 部门表(tbl_dept):
2. 员工表(tbl_user):
我们特意设计了这样的员工数据:
编号为4的部门(总经理办公室)中有4个员工,1号2号员工(张三和李四)是普通员工,3号员工(王五)是部门经理,4号员工(赵六)是总经理。
另有一个员工“小二”跟他们不是一个部门。
这样测试时,可以让张三、李四、小二各写一个请假单,看王五这个部门经理是否只会审批本部门的请假单。
3. 流程表(tbl_flow):
表中有两套流程:请假流程和报销流程。其中flow_id和flow_no作用不一样,flow_id作为主键,由序列生成,而flow_no作为流程号,是由公司规定的。我们使用后者作为主要关联字段。后面的示例中,请假表的流程号就是5了。
4. 流程节点表(tbl_flow_node):
表中暂时只加了请假流程的节点,节点有3个,从编写请假单到部门经理审批,再到总经理审批。这里的flow_node_role是流程节点角色,例如部门经理、总经理等。
5. 流程线表(tbl_flow_line):
流程线是两个节点之间的连线。图论中有点有线。每根线都有前节点和后节点。
要知道流程的下一步该怎么走,就要查这张表。
如果一个节点有两个分支,就有两条记录,这种情况下界面上需要提示用户选择流程分支。
本案例为线性流程,没有分支。
6. 流程角色-员工表(tbl_flow_role_user):
这个表指定哪些人是部门经理,哪些人是总经理。
另有两张表内容为空,暂无数据,后面要求写入数据。
7. 请假表(tbl_leave):
字段名 | 数据类型 | 备注 |
---|---|---|
leave_id | int | id,主键 |
user_id | int | 请假人的员工id |
user_name | varchar2(100) | 请假人姓名 |
leave_type | varchar2(100) | 请假类型(病假、事假等) |
leave_reason | varchar2(500) | 请假事由 |
start_date | date | 假期开始日期 |
end_date | date | 假期结束日期 |
add_date | date | 提交请假单日期 |
flow_no | int | 流程号 |
current_no | int | 当前节点(流程走到哪步) |
state | int | 状态,0草稿1审批中2审批结束 |
8. 请假审批表(tbl_leave_audit):
字段名 | 数据类型 | 备注 |
---|---|---|
audit_id | int | id,主键 |
leave_id | int | 请假单id |
flow_node_id | int | 流程节点id |
user_id | int | 审批人的员工id |
user_name | varchar2(100) | 审批人姓名 |
audit_info | varchar2(100) | 审批内容 |
audit_date | date | 审批日期 |
根据以上数据,下面,我们尝试完成下述任务:
1. 员工张三填写一个请假单,请编写sql语句,向请假表中插入数据。
2. 部门经理王五审核员工张三的请假单,审批通过,请编写相应的sql语句。
3. 部门经理王五审核员工张三的请假单,审批不通过,请编写相应的sql语句。
4. 总经理赵六审核员工张三的请假单,审批通过,请编写相应的sql语句。
5. 总经理赵六审核员工张三的请假单,审批不通过,请编写相应的sql语句。
6. 部门经理登录系统,要显示待审批事项的列表,请编写相应的sql语句。
提示:如查询过于复杂,可创建视图简化查询。
在下一节中公布答案。