天天看點

JavaEE項目實戰(OA系統)之二十_流程審批之三

  JavaEE項目實戰(OA系統)之二十_流程審批之三

  OA系統中有些查詢是比較複雜的,需要花一些心思去思考。

  在這一節中,我們将給出一些測試資料,然後要求大家來編寫相應的SQL語句。

  一、測試資料

  1. 部門表(tbl_dept):

JavaEE項目實戰(OA系統)之二十_流程審批之三

  2. 員工表(tbl_user):

JavaEE項目實戰(OA系統)之二十_流程審批之三

  我們特意設計了這樣的員工資料:

  編号為4的部門(總經理辦公室)中有4個員工,1号2号員工(張三和李四)是普通員工,3号員工(王五)是部門經理,4号員工(趙六)是總經理。

  另有一個員工“小二”跟他們不是一個部門。

  這樣測試時,可以讓張三、李四、小二各寫一個請假單,看王五這個部門經理是否隻會審批本部門的請假單。

  3. 流程表(tbl_flow):

JavaEE項目實戰(OA系統)之二十_流程審批之三

  表中有兩套流程:請假流程和報帳流程。其中flow_id和flow_no作用不一樣,flow_id作為主鍵,由序列生成,而flow_no作為流程号,是由公司規定的。我們使用後者作為主要關聯字段。後面的示例中,請假表的流程号就是5了。

  4. 流程節點表(tbl_flow_node):

JavaEE項目實戰(OA系統)之二十_流程審批之三

  表中暫時隻加了請假流程的節點,節點有3個,從編寫請假單到部門經理審批,再到總經理審批。這裡的flow_node_role是流程節點角色,例如部門經理、總經理等。

  5. 流程線表(tbl_flow_line):

JavaEE項目實戰(OA系統)之二十_流程審批之三

  流程線是兩個節點之間的連線。圖論中有點有線。每根線都有前節點和後節點。

  要知道流程的下一步該怎麼走,就要查這張表。

  如果一個節點有兩個分支,就有兩條記錄,這種情況下界面上需要提示使用者選擇流程分支。

  本案例為線性流程,沒有分支。

  6. 流程角色-員工表(tbl_flow_role_user):

JavaEE項目實戰(OA系統)之二十_流程審批之三

  這個表指定哪些人是部門經理,哪些人是總經理。

  另有兩張表内容為空,暫無資料,後面要求寫入資料。

  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語句。

  提示:如查詢過于複雜,可建立視圖簡化查詢。

  在下一節中公布答案。