/*
 *========================================================================
 *
 *   시스템명 : 요금징수 시스템
 *   파 일 명 : wrk_data_lb.pc
 *   작 성 자 : 조보용
 *   작 성 일 : 2012.10.08
 *   수 정 일 :
 *   설    명 :
 *
 *========================================================================
*/

#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <strings.h>
#include <string.h>
#include "bas_tbl.h"
#include "fare_tbl.h"
#include "tcs_inst_sql.h"
/*
exec sql include "tcs_db_def.h";
*/
#include "tcs_db_def.h"
#include "tcs_sel_sql.h"
#include "wrk_data_def.h"

/*
 *========================================================================
 * 전역 변수 정의
 *========================================================================
*/

//EXEC SQL INCLUDE SQLCA;

/*
 *========================================================================
 *
 *   함 수 명 : chk_lane_stat
 *   작 성 자 : 조보용
 *   작 성 일 : 2012.10.08
 *   수 정 일 :
 *   설    명 : 해당일자/근무번호의 종료처리 여부를 CHECK하여 처리상태를 정수형태
 *              로 반환(호출이전에 DB CONNECT되어 있을것)
 *
 *========================================================================
*/

int chk_lane_stat(struct rcv_lane_data *rd)
{
    int     rtn = 0;
//EXEC SQL BEGIN DECLARE SECTION;
    char    tlast[14+1], wlast[14];
    char    plz_id[2+1], lane_no[2+1];
//EXEC SQL END DECLARE SECTION;
    memset(tlast, 0x00, sizeof(tlast));
    memset(wlast, 0x00, sizeof(wlast));

    snprintf(plz_id, 2+1, "%.2s", rd->plz_id);
    snprintf(lane_no, 2+1, "%2s", rd->lane_no);
    sprintf(wlast, "%.14s", rd->wrk_datetm);
/*
    EXEC SQL
    SELECT NVL(LAST_RECV_DATE, '0') INTO :tlast
     FROM TB_CFS_LANESTAT
    WHERE FARE_OFFICE_ID = :plz_id
      AND BOOTH_ID = :lane_no;
*/
    if (SQLCODE == 100)
    {
        proc_log( "SELECT OPRO_LANE_STAT [%d]\n", SQLCODE );
        return(0);
    }
    if (SQLCODE != 0)
    {
        proc_log( "SELECT OPRO_LANE_STAT [%d]\n", SQLCODE );
        return(1);
    }

    if(!strncmp(wlast, tlast, sizeof(wlast)))
        rtn = 2;
    else if(atoi(wlast)>atoi(tlast))
        rtn = 3;
    else
        rtn = 4;

    return(rtn);
}

/*
 *========================================================================
 *
 *   함 수 명 : chk_wrk_endhnd_yn
 *   작 성 자 : 조보용
 *   작 성 일 : 2012.10.08
 *   수 정 일 :
 *   설    명 : 해당일자/근무번호의 종료처리 여부를 CHECK하여 처리상태를 정수형태
 *              로 반환(호출이전에 DB CONNECT되어 있을것)
 *
 *========================================================================
*/

int chk_wrk_endhnd_yn(struct rcv_lane_data *rd)
{
//EXEC SQL BEGIN DECLARE SECTION;
    char    n_date[8+1], n_wrk_no[4+1];
    char    plz_id[2+1];
    int     wrk_stat;
//EXEC SQL END DECLARE SECTION;
    memset(n_date, 0x00, sizeof(n_date));
    memset(n_wrk_no, 0x00, sizeof(n_wrk_no));
    memset(plz_id, 0x00, sizeof(plz_id));

    snprintf(plz_id, 2+1, "%.2s", rd->plz_id);
    sprintf(n_date, "%.8s", rd->wrk_datetm);
    sprintf(n_wrk_no, "%.4s", rd->wrk_no);

    /* WRK_END_STAT 0:미개시, 1:개시, 2:종료중, 3:종료 4:근무마감중, 5:근무마감완료 */
    wrksvr_log("PLZ_ID[%.2s][%.2s]\n", plz_id, rd->plz_id);
    wrksvr_log("WRK_DATE[%.8s][%.8s]\n", n_date, rd->wrk_datetm);
    wrksvr_log("WRK_NO[%.4s][%.4s]\n", n_wrk_no, rd->wrk_no);
/*
    EXEC SQL SELECT TO_NUMBER(NVL(END_WORK_TIME, '0')) INTO :wrk_stat
           FROM WORK_INFO
          WHERE FARE_OFFICE_ID = :plz_id
            AND YEAR || MONTH || DAY = :n_date
            AND WRK_NO = :n_wrk_no;

    if (SQLCODE == 100)
    {
    	wrksvr_log( "SELECT pubo_work_state 0 [%d]\n", SQLCODE );
        return(0);
    }
    if (SQLCODE != 0)
    {
    	wrksvr_log( "SELECT pubo_work_state Error [%d]\n", SQLCODE );
        return(-1);
    }
*/
    return(wrk_stat);
}

/*
 *========================================================================
 *
 *   함 수 명 : fsave_write_info
 *   작 성 자 : 조보용
 *   작 성 일 : 2012.10.08
 *   수 정 일 :
 *   설    명 : winfo를 file에 저장한다.
 *
 *========================================================================
*/

int fsave_write_info(struct write_info *wf)
{
    char    cPath[128];
    int    fd;
    int    ret;

    proc_log( "FILE에 WINFO 저장  [%.4s] 근무종류 = %d\n",
        wf->wrk_no, wf->knd);

    sprintf(cPath, "%s/%s/WRKPQUEUE", DIR_TCS, DIR_TEMP);

    fd = open(cPath, O_WRONLY|O_CREAT|O_APPEND, 0666);
    if (fd < 0)
        return(-1);

    ret = write(fd, wf, sizeof(struct write_info));
    close(fd);

    if (ret != sizeof(struct write_info)) return(-1);
    return(0);
}
