考勤机的打卡记录在联网情况下,会自动上传到EAS的打卡记录表中。
流程:考勤机-考勤同步中间件-EAS
没有同步的问题一般有以下多种情况,逐个排查:
1、查看考勤机是否联网,打卡记录是否上传。
在考勤后台能查到打卡记录,说明考勤机数据已上传。否则需要先让考勤机联网上传数据
正式考勤后台地址:http://172.18.2.75:8088/iclock/imanager#
2、EAS中查看打卡记录,是否有记录。
从下午可以看出,数据没有同步到EAS,那么可以确定问题出现在考勤同步中间件服务器上。需要联系网络组检查和提供信息。
3、考勤同步中间件
可能出现服务器重启,考勤同步中间件为启动导致数据未同步。也可能是数据有异常导致同步失败,此时需要网络组查看同步日志
4、从考勤同步中间件同步日志可以看出问题有2个,其中主要关注ORA-01722无效数字。
该问题需要查询数据库检查数据(找网络组提供考勤后端的数据库地址等信息)
-- 原同步过程获取的SQL SELECT nvl ( ic.ipaddress, '127.0.0.1' ) ip, to_number ( u.badgenumber ) ssn, u.userid pin, TO_CHAR ( c.checktime, 'yyyyMMddHH24miSS' ) timeid, c.checktime checktime, nvl ( ic.alias, '没有对应考勤机' ) alias, u.NAME FROM checkinout c INNER JOIN userinfo u ON c.userid = u.userid LEFT JOIN iclock ic ON ic.sn = c.sn WHERE c.isread = 0 AND c.verifycode IN ( 0, 1, 15 ) AND instr( u.badgenumber, 'S' ) = 0 AND u.badgenumber NOT IN ( '100000', '10000', '100001' ) AND u.NAME IS NOT NULL
从原SQL大概看出,sql中使用了to_number进行转换工号,那么很有可能就是工号有问题,那么修改语句并执行
执行检查的SQL
-- 修改原SQL进行执行和检查 SELECT nvl(ic.ipaddress, '127.0.0.1') ip, u.badgenumber ssn, -- to_number(u.badgenumber) ssn, u.userid pin, TO_CHAR(c.checktime, 'yyyyMMddHH24miSS') timeid, c.checktime checktime, nvl(ic.alias, '没有对应考勤机') alias, u.name FROM checkinout c INNER JOIN userinfo u ON c.userid = u.userid LEFT JOIN iclock ic ON ic.sn = c.sn WHERE c.isread = 0 AND c.verifycode IN (0, 1,15) AND instr(u.badgenumber, 'S') = 0 AND u.badgenumber NOT IN ( '100000', '10000', '100001' ) order by u.badgenumber desc
查询结果如下:
可以看出有工号Y1004进行了打卡/开门,进一步排查为外部人员。那么此工号的数据就是导致同步异常的原因。那么需要如何修改?
从系统设计上和以上的SQL中看出,SQL中有一行instr(u.badgenumber, 'S') = 0的代码,即这里过滤了工号为S开头的不同步。这其实就是用于外部人员/特殊人员使用的工号规则。
因此所有Y开头的工号,需要修改为S开头的工号后,再重新同步即可解决数据同步失败问题。
Add Comment