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語句。
提示:如查詢過于複雜,可建立視圖簡化查詢。
在下一節中公布答案。