플랫폼 개발팀 기술 블로그

JAVA를 이용해 세콤 출입기록 가져오기 본문

카테고리 없음

JAVA를 이용해 세콤 출입기록 가져오기

panpid 2019. 4. 4. 19:13

사내에서 출입관리시스템으로 세콤을 사용하고 있다. 

세콤에서 지급한 카드를 태그하면 출입문이 열리는 식이다. 

출입문 옆에는 세콤의 단말기가 있고 여기에 카드를 태그하면 사내에 있는 세콤 서버에 태그정보가 저장이 된다.

세콤에서 제공하는 전용프로그램으로 이 세콤 서버에 접속을 하면 출입기록을 조회할 수 있다.

 

이 태그 기록을 이용하면 직원들의 근태기록을 관리할 수 없을까 하는 생각을 했다.

그래서 다른곳에서는 어떻게 사용하는지 검색해보았다.

 

찾아보니 유료로 제공되는 솔루션들이 많았다.

상용 그룹웨어 대부분에서 세콤의 출입기록과 근태관리 시스템의 연동을 지원하고 있었다.

 

하지만 여러가지 이유로 연동을 직접 구축 하기로 정하였다.

 

 

근태정보 파일 가져오기

세콤에서는 출입기록을 어디에 남기는지 찾아보았다. 

  1. 세콤 서버에 접속하는 방법 : 접속 방법 자체를 알기 힘들어서 포기.

  2. 세콤 전용프로그램 : 전용프로그램에서 기록을 남기는 폴더가 따로 있었다. 이곳의 파일을 가져오기로 결정!

세콤 전용프로그램에서 남기는 파일 중 아래 위치에서 출입기록이 담겨있었다.

세콤설치폴더/DataBase/MainDB/Alarm/ALARM_YYYYMMDD.VMD

 

이곳에 있는 VMD 파일은 MdbPlus 라는 프로그램을 이용하여 오픈하였다.

http://www.alexnolan.net/software/mdb_viewer_plus.htm

 

이 VMD 파일은 MS Access 형식으로 되어있다. 

 

JAVA에서 JDBC를 이용해 MS Access 형식의 파일DB 에 접속하여 데이터를 가져가기 위해서 ucanaccess 라는 라이브러리를 이용하였다.

아래는 ucanaccess 라이브러리를 메이븐에서 추가하기 위한 코드이다.

<dependency>
  <groupId>net.sf.ucanaccess</groupId>
  <artifactId>ucanaccess</artifactId>
  <version>4.0.2</version>
</dependency>

 

VMD 데이터 사용하기

vmd 파일을 열어보면 다양한 컬럼들이 있다. 

이중에 시간, 카드번호, 고유값 정도의 정보를 확인하여서 사용중이다.

단말기 이름 등 정보가 다양하게 들어가 있으니 필요에 따라 더 가져다가 사용해도 좋을것이다.

 

id : 고유값. 1개의 VMD 파일 안에서만 고유한듯.

atime : 태그한 시간

cardnum : 카드 고유번호

 

결론으로 다가가자.

파일DB에 접속해서 쿼리를 보내고 결과를 받아오는 코드이다.

try {

  String secomQuery = "SELECT [ID],[ATime],[CardNum],[EqCode],[Master],[Param],[Ack],[AckUser],[AckTime]," +

       "[AckContent],[Transfer],[State]FROM [Alarm] ORDER BY [ATime]";

  String conUrl = "jdbc:ucanaccess://C:\[세콤설치위치]\DataBase\MainDB\Alarm\ALARM_날짜.VMD";

  Connection conn = DriverManager.getConnection(conUrl);

  Statement s = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,

          ResultSet.CONCUR_READ_ONLY);

  ResultSet rs = s.executeQuery(secomQuery);

  while (rs.next()) {

    //가져온 결과를 처리하는 로직..

  }

} catch (UcanaccessSQLException ex) {
  //파일DB 연결 및 쿼리 관련 Exception 처리
} catch (Exception ex) {
  //일반 Exception 처리
}

rs 에 받아온 결과를 가져다가 처리하면 된다. 

나의 경우는 이걸 30초에 한번씩 호출하고 있다.

 

가져온 정보는 별도 DB에 저장하고, 저장한 내역을 토대로 새로 들어온 데이터만 쌓고 있다.

[ID] 컬럼은 파일(1일치)안에서 고유한 값이니, 날짜 정보와 함께 저장해 두었다가 중복검사 할 때 활용하면 좋다.

Comments