公司的老考勤机坏了,换成中控的S30考勤机了,考勤数据需要合并在一起,特写此存储过程,加入到每天的作业中让其自动执行。考勤统计仍然使用C6的,所以将考勤数据同步到C6的考勤里面。
------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------------
create procedure You_pro_Name
---- PengPeng at 2014
----考勤同步数据操作>>>> C6到考勤数据人员信息同步,主要就是讲C6系统表 RS_Emp的人员信息 同步到中控 USERINFO 表里面
--传入参数
AS
----变量
declare @card_no varchar(10) --ID卡号-10位
declare @isUpdate_BuMen bit --是否更新部门控制变量
declare @isUpdate_deleteUSERInfo bit ---删除离职的人员
declare @isUpdate_USERInfo bit --是否更新部门控制变量
declare @isUpdate_CardNo bit --更新员工卡号
declare @isUpdate_KQ_Result bit --是否同步考勤记录
----设置 默认值
set @card_no='0000000001'
set @isUpdate_BuMen=0 ---默认关闭部门更新
set @isUpdate_USERInfo=1 --更新员工 ,必须 默认打开
set @isUpdate_deleteUSERInfo=1 --默认开启
set @isUpdate_CardNo=1 ---更新员工卡号
set @isUpdate_KQ_Result=1 ---是否同步考勤记录 开启
-------///同步人员信息\\\--------
----第一 更新部门信息【此步可以不需要,这里只是起显示作用,只要人员信息能对上就可以了,部门可以再C6系统里面找】
----第二 更新员工信息【这里是必须的,将员工的编号信息要导入进来,这里员工信息有,有两个表,将USERINFO表里的离职员工放到USERINFO_OLD里面,将C6的新员工添加进来】
---- 2.1,将离职的员工移到USERINFO_OLD表里面,然后删除USerINFO里的员工数据,好跟考勤机同步,
if @isUpdate_deleteUSERInfo<>0 ---是否更新控制
begin
insert into USERINFO_OLD select * from USERINFO where SSN is not null and ltrim(rtrim(SSN)) not in (select ltrim(rtrim(EmpNo)) from CenterSix2012.dbo.RS_Emp) ---移动
delete USERINFO where SSN is not null and USERID in (select USERID from USERINFO_OLD) --删除已经离职的员工
end
else ----如果不删除旧员工也要将卡号清除
begin
update USERINFO set CardNo=NUll where ltrim(SSN) not in (select ltrim(EmpNo) from CenterSix2012.dbo.RS_Emp) ----將離職員工卡號清空
end
----go
---- 2.2,更新新进的员工
if @isUpdate_USERInfo<>0 --控制开关
begin
insert into USERINFO
(
BADGENUMBER , --考勤号码
SSN , --身份证/证件号
NAME , --姓名
GENDER , --性别
PAGER , --移动电话/传呼机
BIRTHDAY , --生日
HIREDDAY , --参加工作日期
STREET , --家庭地址
VERIFICATIONMETHOD , --验证方式
DEFAULTDEPTID , --所属部门ID号
ATT , --考勤有效
INLATE , --计迟到
OUTEARLY , --计早退
OVERTIME , --计加班
SEP , --
HOLIDAY , --假日休息
MINZU , --民族
LUNCHDURATION --有午休
)
select
replace(ltrim(EmpNo),'QX',''),---考勤号码
ltrim(EmpNo) AS EMPNO, --编号
EmpName,-- 姓名
case when EmpSexID=1 then 'M' else 'F' end,--性别 M男F女
EmpMobile,--移动电话
EmpBirthday,--生日
EmpGrpDate,--入职日期
EmpHomeAddr,--家庭地址
1,--验证方式
1,--部门ID
1,--考勤有效
0,
0,
1,
1,
1,
EmpNation,--民族
1 --午休
from CenterSix2012.dbo.RS_EMp
where ltrim(EmpNo) not in (select ltrim(SSN) from USERINFO where SSN is not NULL ) and EMPNO not in ('QX0001','QX0002','QX0007') ---这3个编号不加进去
order by EMPNO
end
----go
---- 2.3,更新员工所在部门和职位等无关紧要的信息,不是必须的
begin
update USERINFO set DEFAULTDEPTID=1 where DEFAULTDEPTID is NULL ----没有部门归到总公司
end
----第三 更新员工ID卡号码 【这里是全部更新,因为有补卡的情况和卡片改变的情况,每次全部更新比较简单】
if @isUpdate_CardNo<>0
begin
update USERINFO set CardNo=(
select replace('0000000001',RIGHT('0000000001',len(CenterSix2012.dbo.TX_EmpCard.CardFixNo)),CenterSix2012.dbo.TX_EmpCard.CardFixNo)
from CenterSix2012.dbo.RS_EMp,CenterSix2012.dbo.TX_EmpCard
where CenterSix2012.dbo.RS_EMp.EmpSYSID=CenterSix2012.dbo.TX_EmpCard.EmpSYSID
and CenterSix2012.dbo.TX_EmpCard.GUID=(
select top 1 AA.GUID from CenterSix2012.dbo.TX_EmpCard AA where CenterSix2012.dbo.RS_EMp.EmpSySID=AA.EmpSySID and AA.CardStatusID=20 order by AA.EmpSySID,AA.CardNewDay desc
) and ltrim(CenterSix2012.dbo.RS_EMp.EmpNo)=USERINFO.SSN
)
end
----go
----第四 删除设备上的离职员工。不会再打卡的员工[现在还是 需要在考勤机软件上操作]
select top 1 * from USERINFO where 1=2
----第五 上传人员信息 [现在还是 需要在考勤机软件上操作,尽量选在无人打开的时候进行,此时考勤机是打不了卡的,显示正在传输]
----go
------/////考勤人员信息同步完成\\\\\------
------/////下面是考勤记录同步\\\\\------
if @isUpdate_KQ_Result<>0
begin -----
---第A。下载考勤数据,这个考勤软件自动定时更新,也可随时人工更新【在考勤软件上下载考勤记录就可,可重复操纵,因为每次只下载新的记录】
---第B。将中控考勤数据更新到C6系统
---B-1,中控考勤记录表中没有人的编号,先更新编号,【可带来方便】
begin
update CHECKINOUT set Memoinfo=(select SSN from USERINFO where USERINFO.USERID=CHECKINOUT.USERID) where Memoinfo is null
if exists(select top 1 1 from CHECKINOUT where Memoinfo is null) ---如果在人员表里面没有找到,在旧的人员数据里找编号
begin
update CHECKINOUT set Memoinfo=(select SSN from USERINFO_OLD where USERINFO_OLD.USERID=CHECKINOUT.USERID) where Memoinfo is null
end
end
---- go
---B-2,将考勤数据导入C6 就是讲CHECKINOUT里的记录打卡数据插入到C6里的 KQ_KqData 表和 Mj_MjData 表里面 Mj_MjData表示打卡原始记录表,
------ KQ_KqData是根据Mj_MjData里的数据转来的,C6考勤系统依据它来分析考勤
---*--B-2-1 :先将没有导入的数据进行标记 先标记为1 表示那些数据要导入,在导入门禁表Mj_MjData后标记为2,再导入考勤表KQ_KqData ,最后标记为3表示完成。
----***----将要导入的记录进行标记 先标记为1
update checkinout set UserExtFmt=1 where Memoinfo is not NULL and UserExtFmt=0 ---一开始是0 变成1 进行标记
begin
----***----将第一标记的数据导入Mj_MjData-----------
insert into CenterSix2012.dbo.MJ_MjData(EmpSysID,DevID,CardID,CardDate,CardDay,DoorID,DoorName)
select
(select top 1 av.EmpSysID from CenterSix2012.dbo.TX_EmpCard av where ltrim(av.CardDispNo)=CHECKINOUT.Memoinfo order by av.CardNewDay desc),
10004,----设备编号设置为10004 便于区分
(select top 1 ax.CardID from CenterSix2012.dbo.TX_EmpCard ax where 1=1 and ltrim(ax.CardDispNo)=CHECKINOUT.Memoinfo order by ax.CardNewDay DESC),
dateadd(day,0,CONVERT(varchar(100), CHECKTIME, 23)) ,
CHECKTIME,
1,
'门区1'
from CHECKINOUT where Memoinfo is not NULL and UserExtFmt=1
----***----将要导入的记录进行第二次标记 标记为2表示第一步导入完成
update checkinout set UserExtFmt=2 where Memoinfo is not NULL and UserExtFmt=1 ---一开始是1 变成2 进行标记
end
---- go
begin
----***----导入数据到C6的考勤表
insert into CenterSix2012.dbo.KQ_KqData(EmpSysID,KqDate,KqTime,IsKeyin,IsKouKuan,IsModified,DevID,KeyinDay,CardID,SynchFlagID)
select
(select top 1 av.EmpSysID from CenterSix2012.dbo.TX_EmpCard av where ltrim(av.CardDispNo)=CHECKINOUT.Memoinfo order by av.CardNewDay desc),
dateadd(day,0,CONVERT(varchar(100), CHECKTIME, 23)) as TTT ,
DATEDIFF (ss,dateadd(day,0,CONVERT(varchar(100), CHECKTIME, 23)),CHECKTIME), --考勤时间
'N',
'N',
'N',
10004,---设备号10004区分
CHECKTIME,
(select top 1 ax.CardID from CenterSix2012.dbo.TX_EmpCard ax where 1=1 and ltrim(ax.CardDispNo)=CHECKINOUT.Memoinfo order by ax.CardNewDay DESC),
0
from CHECKINOUT where Memoinfo is not NULL and UserExtFmt=2
----***----将要导入的记录进行第三次标记 标记为3表示导入完成
update checkinout set UserExtFmt=3 where Memoinfo is not NULL and UserExtFmt=2 ---一开始是2 变成3 进行标记
end
end ---考勤记录同步结束
go
------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------------
---------
吐槽:我也不想这样做,只是一刷卡考勤机2k多是不是太坑爹了点啊