Maison >développement back-end >tutoriel php >有哪位高手做过预约挂号医生排班的程序,给个思路
有谁做过预约挂号医生排班的程序,给个思路。
个一个在线预约挂号,在医生排排班的时候,可以自定义每个时间段可以预约的人数,当然时间段也可以自定义,我这里时间段是一个小时的,比如8:00-9:00.......17:00-18:00,一天8个小时分为8个时间段。排班时间是星期一到星期日。哪位给个具体思路,谢谢了。
------解决方案--------------------
首先用一個數組記錄時間段及每個時間段最多可以預約的人數,或者用數據表也可以。
例如每個時間段只能預約20個人。
$t = array(
array('08:00', '09:00', 20),
....
.....
array('17:00', '18:00', 20),
);
然後,用一張表記錄預約人數,大概字段如下
id 自增
mid 用戶id 或什麼唯一身份驗證的東西,或email也可以,用來檢查是否重複預約用。
date 日期
t 時間段標識,用數組標識也可
num 預約人數
當有用戶要預約,先判斷是否在允許預約時間段內,如果是,再判斷,該時間段內是否已經預約滿,如未滿則增加一條記錄。
例如有一個用戶在8:00-9:00 這個時間段預約,可以這樣判斷。
select num from table where date='2014-06-10' and t=0;
如返回的num小於 20,則insert。
如果要加上取消預約功能,可以也設一個取消預約限期,起碼在9:00前10分鐘不能取消,這樣較好。大概思路是這樣。
------解决方案--------------------
如果星期一和星期日等的可以預約時間不同,那$t這個數組則再分多一層做星期的key。如果是這樣建議做成數據表,方便管理。
$t = array(
'MON' => array(
array('08:00', '09:00', 20),
....
.....
array('17:00', '18:00', 20),
),
'TUE' => array(
)
);
------解决方案--------------------
既然复杂就用数据表来做,方便管理
数据表结构如下:
doctor 表,记录医生信息
doctor_id 医生id PK
name 医生名称
timeline 表,记录每个医生每天每个时段的能预约的信息,这个需要每隔一段时间做一次新增和删除,新增加新日期预约时间,删除过期的.星期没有用了,因为直接用日期来定比较好。
tid timeline id PK
doctor_id 医生id FK
date 日期
quota 允许预约的人数
starttime 时段开始语 例8:00
endtime 时段结束 例9:00
status 该时段是否允许预约 0 否 1允许
order 预约表,记录用户预约的情况
order_id 预约id PK
userid 用户id -> 会员系统这个你自己想 FK
tid 预约了的时段id FK
addtime 预约时间
流程:
首先先输入doctor 和 timeline 数据,如下
共有两个医生
doctor_id name
1 d1
2 d2
在2014-06-11这天的班表,doctor1别8个时间段全满,doctor2 则只有6个时间段需要工作
tid doctor_id date quota starttime endtime status
1 1 2014-06-11 10 08:00 09:00 1
2 1 2014-06-11 10 09:00 10:00 1
3 1 2014-06-11 10 10:00 11:00 1
4 1 2014-06-11 12 11:00 12:00 1
5 1 2014-06-11 12 14:00 15:00 1
6 1 2014-06-11 8 15:00 16:00 1
7 1 2014-06-11 10 16:00 17:00 1
8 1 2014-06-11 5 17:00 18:00 1
9 2 2014-06-11 10 08:00 09:00 1
10 2 2014-06-11 10 09:00 10:00 1
11 2 2014-06-11 10 10:00 11:00 1