某大型商超即将上马指纹考勤管理,面临问题如下:
1.此商超集团有人力资源管理系统(用友NC),希望考勤打卡数据自动上传到NC
2.超过500家门店,手工在每台考勤机上录入人员信息太麻烦,希望将NC中人员信息直接导入考勤机。
最终方案实现效果:
1.在NC中对人员进行操作后,如新增、离职、跨部门调动后,人员数据能自动同步到对应考勤机。
2.NC可自动导入机器考勤记录到系统中。
解决方案:
1.在NC数据库中新增一个中间表ZJB,写一个jobs用于定时保存考勤档案表中变动人员的信息。
2.中控考勤机或科密考勤机系统能定时将zjb数据导出,并下发到考勤机中(导入后清空表zjb,避免重复导入数据)。
3.每天考勤机系统能将考勤数据导出到指定目录下(文件名称可用当天日期),我们要做的是首先在NC“考勤规则”中设置存放考勤记录的文件夹保存路径,然后我们在NC的任务中心——后台任务管理,新建任务“考勤机数据采集定时执行导入”。
我用的数据库时oracle,相关操作语句
//1.创建中间表zjb,包含列考勤卡号、姓名、部门号、部门名称、人员类型。表结构如下:
create table zjb ( timecardid number(15) , psnname varchar2(10), deptcode varchar2(15), deptname varchar2(50), jobtype number(4) ) //2.创建存储过程,目的是将变动人员信息插入到中间表中.(其中jobtype为2的约定为离职,0约定为在职) CREATE OR REPLACE PROCEDURE zjb_proc IS BEGIN delete from zjb; INSERT INTO zjb(timecardid,psnname,deptcode,deptname,jobtype) select tbm_psndoc.timecardid,psnname,deptcode,deptname ,(case when to_date(enddate,'yyyy-mm-dd')=trunc(sysdate, 'DD') then '2' when to_date(enddate,'yyyy-mm-dd')=to_date('9999-01-01', 'yyyy-mm-dd') then '0' end) as jobtype from tbm_psndoc left join bd_psndoc on tbm_psndoc.pk_psndoc=bd_psndoc.pk_psndoc left join bd_deptdoc on bd_psndoc.pk_deptdoc=bd_deptdoc.pk_deptdoc where (to_date(tbm_psndoc.ts,'yyyy-mm-dd hh24:mi:ss')>=trunc(sysdate, 'DD') or to_date(bd_psndoc.ts,'yyyy-mm-dd hh24:mi:ss')>=trunc(sysdate, 'DD')) and tbm_psndoc.tbm_prop='2' and tbm_psndoc.timecardid!=' ' ; COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Exception happened,data was rollback'); ROLLBACK; END; //3.创建jobs,每间隔一段时间就往zjb中插入数据。这样能将发生变动人员的信息及时同步到考勤机中。(下面设置为2分钟执行一次存储过程) SQL> var job_num number; SQL> begin 2 dbms_job.submit(:job_num,'zjb_proc;',sysdate,'sysdate+2/24/60'); 3 end; 4 /