考勤机的打卡记录在联网情况下,会自动上传到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开头的工号后,再重新同步即可解决数据同步失败问题。


相关的文章


0 Comments

You are not logged in. Any changes you make will be marked as anonymous.