门禁高级控制范例:实现上班必须在考勤班次的有效时间内入厂、下班在按考勤按指纹后指定时间内出厂。
某些企业基于生产安全和财产安全考虑,会通过门禁/闸机控制员工进出生产厂区.
如张三上午上班的是8:00-12:00的班,允许提前30分钟内入厂,则在7:30-8:00时间范围内可以刷卡入厂,不在此时间范围内禁止入厂.
下班时,必须刷了下班卡后,并在刷下班卡后的10分钟以内通过门禁机离开厂区,未刷下班卡,或者未在刷卡10分钟内离开的,门禁机自动禁止其离开厂区.
同时,门禁机可设定每张员工卡在1分钟(可自由设定分钟数)只能刷一次卡,避免一张卡同时放行多个人的问题.
控制语句如下:
Create PROCEDURE [dbo].[Get_Emp_Door_Control] @ip_addr nvarchar(20),
@Door_Is_In varchar(1),@door_area varchar(20),@pre_time datetime,@Emp_List int,@emp_Id nvarchar(10),
@Org_No nvarchar(20),@Card_No nvarchar(10),@mj_last_date datetime,@kq_last_date datetime,@Msg nvarchar(40) output,@ireturn bit output as
begin
--輸入 @ipaddrno:機器IP地址,@Door_Is_In:0為出,1為進,2不分進出,@door_area:所在區域,@pre_time:門禁時間,@Emp_List:員工記錄號,@emp_Id:工號
--@Org_No:部門代號,@Card_No:員工卡號,@mj_last_date:門禁最後刷卡時間,@kq_last_date:考勤最後刷卡時間
--輸出 @Msg:出錯的提示,@ireturn:狀態(0失敗,1成功)
set @ireturn=0
--指定了不受控的人员
if exists(select null from pist20E where emp_list=@Emp_List and Door_Control=0)
set @ireturn=1
else
begin
if @door_is_in='1' --上班则检测是否在上班允许的时间段内,在则放行
begin
if exists(select null from Kq16ForDoor where emp_list=@Emp_List and
(@pre_time between in1_d_min and in1_d_max or @pre_time between in2_d_min and in2_d_max
or @pre_time between in3_d_min and in3_d_max or @pre_time between in4_d_min and in4_d_max))
set @ireturn=1
else
set @msg='非上班時間'
end
else --下班则检测是否有按刷考勤卡,且在考勤卡的有效时间范围内
begin
if @kq_last_date is null
set @Msg=' 未出勤'
else
begin
--间隔时间多少秒,*60是分钟转为秒
if (datediff(second,@kq_last_date,@pre_time)>10*60)
set @Msg=' 已下班'+cast(datediff(minute,@kq_last_date,@pre_time) as nvarchar(20))+'分鐘'
else
begin
--防止重复刷卡,现设置为1分钟
if (@mj_last_date is not null and datediff(second,@mj_last_date,@pre_time)<60)
set @Msg=' 重複刷卡'+cast(datediff(second,@mj_last_date,@pre_time) as nvarchar(20))+'秒'
else
set @ireturn=1
end
end
end
end
end
惠州市大帮手软件有限公司 广东省惠州市惠城区演达一路丽园新村10栋6D 电话:0752-2587641 2587640 E-mail:sales@helpersoft.cn值班QQ:365630986 HuiZhou Helper Software Co.,Ltd. |