/*
 *========================================================================
 *
 *   시스템명 : 요금징수 시스템
 *   파 일 명 : manager.pc
 *   작 성 자 : 오효섭 (catacath@neighbor21.co.kr)
 *   작 성 일 : 2012.10.11
 *   수 정 일 : 
 *   설    명 : 
 *
 *========================================================================
*/

#include    <stdio.h>
#include    <signal.h>
#include    <sys/wait.h>
#include    <sys/errno.h>
#include    <sys/types.h>
#include    <sys/ipc.h>
#include    <sys/msg.h>
#include    <time.h>

#include "dir_path.h"
#include "path_def.h"
#include "chg_struc.h"
#include "def_set.h"
#include "crd_def.h"
#include "MessageSender.h"

//#define _ORACLE_

// 2020.05.13 개정번호 변경 수동에 따라 테이블 구분 정의 추가
#define RVS_BAS 1
#define RVS_WRKR 2
#define RVS_HDAY 3
#define RVS_TCRD_BIN 4
#define RVS_IMM_CARNO 5
#define RVS_RFID 6
#define RVS_BEF 7
#define RVS_TCRD_PL 8
#define RVS_TCRD_BL 9
#define RVS_CARNO_DC 10

long  glRunning     = PROC_RUNNING;

extern int f_errno;
extern int f_recnum;

#ifdef _ORACLE_
EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE ORACA;
#endif

/*
 *========================================================================
 *
 *   함 수 명 : SIG_term
 *   작 성 자 : 오효섭 (catacath@neighbor21.co.kr)
 *   작 성 일 : 2012.10.10
 *   수 정 일 :
 *   설    명 : 
 *
 *========================================================================
*/

void SIG_term(int sig)
{
#ifdef _ORACLE_
    disconnect_db();
#endif
    exit(0);
}

/*
 *========================================================================
 *
 *   함 수 명 : main
 *   작 성 자 : 오효섭 (catacath@neighbor21.co.kr)
 *   작 성 일 : 2012.10.10
 *   수 정 일 :
 *   설    명 : 
 *
 *========================================================================
*/

int main(int argc, char *argv[])
{
    char uid[20];
    char pwd[20];
    char host[20];
    char plz_id[2];
    char s_date[16];
    char e_date[8+1];
    char f_date[16];
    char wrk_dir[128];
    char save_dir[128];
    char msg[1024];
    char oMsg[1024];
    char run_path[64];
    char bin_path[64];
    char spath[128];
    char tpath[128];
    char upid_bl_snd_yn[1+1];
//EXEC SQL BEGIN DECLARE SECTION;
    int  rvs_basic, rvs_wrkr, rvs_immcarno, rvs_rfid, rvs_bef, rvs_bin, rvs_pl;
    char fare_id[2+1];
	char tmp_rvs[2+1];
	char tmp_rvs2[2+1];
	char sToday[8+1];
    char st_date[14+1];
    char ed_date[14+1];
	int  result;
//EXEC SQL END DECLARE SECTION;
    int    i, status, size;
    int    sckm = 0;
    FILE   *fp = NULL;
    time_t ctime;
	time_t btime;
    struct tm *ctm;
	struct tm *btm;
    int    nResult, blno;
    char   ch;
    char   *p;
    char   *pData;
    char   *pProc[10] = { NULL, };
    struct chg_struc cs;
    struct write_info wi;
    //struct basic_tbl bs;
    int seq, ret;
    //pid_t prc_id[99];
    int maxPrcnt = 0;
    int makePL = 0;
    //int procPid[99];
    pid_t pid;
    pid_t pid_child;
    struct {
        pid_t prc_id;
        int procPid;
    } proc_stat[99];

    p = argv[0];
    nResult = InitMessageSenderConfig(p);

    if (nResult != MQ_ERR_SUCCESS)
    {
        printf("Program terminated!!!\n");
        return -1;
    }

    sprintf(wrk_dir, "%s/manager", LOG_DIR);
    mkdir(wrk_dir, 0755);
    chdir(wrk_dir);

    signal(SIGTERM, SIG_term);
    sprintf(uid, "%s", lb_get_inifile(INI_FILE,"ORACLE","UID"));
    sprintf(pwd, "%s", lb_get_inifile(INI_FILE,"ORACLE","PWD"));
    sprintf(host,"%s", lb_get_inifile(INI_FILE,"ORACLE","HOST"));  

    sprintf(plz_id, "%.2s", PLZ_CODE2);
    memcpy(fare_id, plz_id, 2);
	fare_id[2] = '\0';
    memset(run_path, 0x00, sizeof(run_path));
    
    sprintf(run_path, "%s/PROCESS.CFG", INI_DIR);
    fp = fopen(run_path, "r+");

    sckm = 1;
    fclose(fp);

    while(1)
    {
        ctime = time(NULL);
        ctm = localtime(&ctime);

        if((ctm->tm_hour == 0) && (ctm->tm_min == 5) && (ctm->tm_sec == 10))
        {
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/sstop", DIR_BIN);
            system(msg);

            sleep(3);
            maxPrcnt = 0;
            sckm = 0;

            memset(msg, 0x00, sizeof(msg));
#if 0
            sprintf(msg, "%s/sstart", DIR_BIN);
#else
            sprintf(msg, "%s/wrk_svr &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/oltp_svr &", DIR_BIN);
            system(msg);
            sleep(10);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/RestfulConverter &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/plmake &", DIR_BIN);
            system(msg);
            sleep(10);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/back01 -p 01 -l 01 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/back02 -p 01 -l 02 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/back03 -p 01 -l 03 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/back04 -p 01 -l 04 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/back05 -p 01 -l 05 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/back06 -p 01 -l 06 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/back07 -p 01 -l 07 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/back08 -p 01 -l 08 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/lane_run -p 01 -l 01 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/lane_run -p 01 -l 02 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/lane_run -p 01 -l 03 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/lane_run -p 01 -l 04 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/lane_run -p 01 -l 05 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/lane_run -p 01 -l 06 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/lane_run -p 01 -l 07 &", DIR_BIN);
            system(msg);
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/lane_run -p 01 -l 08 &", DIR_BIN);
            system(msg);
#endif
            makePL = 0;
            sckm = 1;
        }

        if((ctm->tm_hour == 3) && (ctm->tm_min == 23) && (ctm->tm_sec == 10))
        {
#if 0
            //2019.12.24 이그린 반송확인(?) 신규추가(남산3호터널 작업)
            memset(msg, 0x00, sizeof(msg));
            memset(oMsg, 0x00, sizeof(oMsg));
			memset(s_date, 0x00, sizeof(s_date));
			memset(e_date, 0x00, sizeof(e_date));
            get_current_time(s_date);
			lb_oper_date(s_date, '-', 1, e_date);
			sprintf(msg, "%.8s%.8s%c", e_date, e_date, '\0');
            MessageSender(FNO_EGREEN_RTN, msg, p, oMsg);

            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);
#endif
#ifdef _ORACLE_
            if(c_DbConnect()<0)
            {
                proc_log("DB 접속에러 %d", sqlca.sqlcode);
                continue; 
            }

            EXEC SQL
            SELECT WRKR_RVS_NO, BAS_RVS_NO
            INTO  :tmp_rvs2,
                  :tmp_rvs
            FROM TB_CFS_TABLENOM
            WHERE FARE_OFFICE_ID = :fare_id
            ;

            if(sqlca.sqlcode < 0)
            {
                proc_log("기초사항 조회 에러[%d]", sqlca.sqlcode);
                continue;
            }

            rvs_basic = lb_data2atoi(tmp_rvs, 2);
			rvs_wrkr = lb_data2atoi(tmp_rvs2, 2);
			
            if(rvs_basic >= 99)
                rvs_basic = 0;

            if(rvs_wrkr >= 99)
                rvs_wrkr = 0;

            sprintf(tmp_rvs, "%02d", rvs_basic+1);
			sprintf(tmp_rvs2, "%02d", rvs_wrkr+1);

            EXEC SQL
            UPDATE TB_CFS_TABLENOM
            SET BAS_RVS_NO = :tmp_rvs,
                BAS_UPDATE_DATE = sysdate,
                BAS_APPLY_DATE = sysdate,
                WRKR_RVS_NO = :tmp_rvs2,
                WRKR_UPDATE_DATE = sysdate,
                WRKR_APPLY_DATE = sysdate
            WHERE FARE_OFFICE_ID = :fare_id
            ;

            if(sqlca.sqlcode < 0)
            {
                proc_log("개정번호 변경 오류[%d]", sqlca.sqlcode);
                EXEC SQL ROLLBACK WORK;
                continue;
            }
            
            EXEC SQL COMMIT WORK;

            disconnect_db();
            memset(msg, 0x00, sizeof(msg));

            sprintf(msg, "java -jar %s/basicRebuild.jar", DIR_BIN);
            system(msg);
#else
            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_WRKR, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ WORKER 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0091%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_WRKRINFO, msg, p, oMsg);
            proc_log("############ 근무자 송신 결과 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_BAS, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ BASIC 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0092%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_BASICTBL, msg, p, oMsg);
            proc_log("############ 기초 송신 결과 [%s]\n", oMsg);
#endif
        }
#if 0
        if((ctm->tm_hour == 1) && (ctm->tm_min == 22) && (ctm->tm_sec == 10))
#else
        if((ctm->tm_hour == 2) && (ctm->tm_min == 3) && (ctm->tm_sec == 10))
#endif
        {
#if 0 //남산 3호터널에서 생성해서 FTP로 옮김
             //면제정보 파일 생성 시작
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/sqlExempt.sh", DIR_BIN);
            system(msg);

            proc_log("면제정보 파일 완료\n");
            //남산1호터널 송신
			memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/mput.sh 150.50.50.240 tcs tcs %s/%s %s/%s ExemptPL.bin 22", DIR_BIN, DIR_TCS, DIR_BASEINFO, DIR_TCS, DIR_BASEINFO);
            system(msg);
#endif
#ifdef _ORACLE_
            memset(spath, 0x00, sizeof(spath));
            memset(tpath, 0x00, sizeof(tpath));
            sprintf(spath, "%s/%s/ExemptPL.bin", DIR_TCS, DIR_BASEINFO);
            sprintf(tpath, "%s/%s/IMMCARNO", DIR_TCS, DIR_BASEINFO);
            lb_rename(spath, tpath);

            if(c_DbConnect()<0)
            {
                proc_log("DB 접속에러 %d", sqlca.sqlcode);
                continue; 
            }
            
            EXEC SQL
            SELECT IMM_CARNO_RVS_NO, BAS_RVS_NO
            INTO :tmp_rvs,
				 :tmp_rvs2
            FROM TB_CFS_TABLENOM
            WHERE FARE_OFFICE_ID = :fare_id
            ;

            if(sqlca.sqlcode < 0)
            {
                proc_log("기초사항 조회 에러[%d]", sqlca.sqlcode);
                continue;
            }

            rvs_immcarno = lb_data2atoi(tmp_rvs, 2);
			rvs_basic = lb_data2atoi(tmp_rvs2, 2);

            if(rvs_immcarno >= 99)
                rvs_immcarno = 0;

			if(rvs_basic >= 99)
                rvs_basic = 0;

			sprintf(tmp_rvs, "%02d", rvs_immcarno+1);
			sprintf(tmp_rvs2, "%02d", rvs_basic+1);

            EXEC SQL
            UPDATE TB_CFS_TABLENOM
            SET IMM_CARNO_RVS_NO = :tmp_rvs,
                IMM_CARNO_UPDATE_DATE = sysdate,
                IMM_CARNO_APPLY_DATE = sysdate,
				BAS_RVS_NO = :tmp_rvs2,
                BAS_UPDATE_DATE = sysdate,
                BAS_APPLY_DATE = sysdate
            WHERE FARE_OFFICE_ID = :fare_id
            ;

            if(sqlca.sqlcode < 0)
            {
                proc_log("개정번호 변경 오류[%d]", sqlca.sqlcode);
                EXEC SQL ROLLBACK WORK;
                continue;
            }
            
            EXEC SQL COMMIT WORK;
            
            disconnect_db();
			
			memset(msg, 0x00, sizeof(msg));
			sprintf(msg, "java -jar %s/basicRebuild.jar", DIR_BIN);
            system(msg);
#else
            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);
#if 0 //남산 3호터널에서 수신
            proc_log("############ 면제 마스터 송신 시간 [%s]\n", s_date);
            sprintf(msg, "%.8s0%c", s_date, '\0');
            MessageSender(FNO_MST_CHK, msg, p, oMsg);
            proc_log("############ 면제 마스터 확인 송신 결과 [%s]\n", oMsg);
#endif

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_IMM_CARNO, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ IMM_CARNO 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_WRKR, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ WORKER 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0091%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_WRKRINFO, msg, p, oMsg);
            proc_log("############ 근무자 송신 결과 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_BAS, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ BASIC 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0092%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_BASICTBL, msg, p, oMsg);
            proc_log("############ 기초 송신 결과 [%s]\n", oMsg);
#endif
        }

        if((ctm->tm_hour == 2) && (ctm->tm_min == 13) && (ctm->tm_sec == 7))
        {
            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_BEF, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ 사전등록결제 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_WRKR, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ WORKER 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0091%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_WRKRINFO, msg, p, oMsg);
            proc_log("############ 근무자 송신 결과 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_BAS, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ BASIC 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0092%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_BASICTBL, msg, p, oMsg);
            proc_log("############ 기초 송신 결과 [%s]\n", oMsg);
        }

        if((ctm->tm_hour == 2) && (ctm->tm_min == 23) && (ctm->tm_sec == 7))
        {
            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_CARNO_DC, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ CARNO_DC 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_WRKR, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ WORKER 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0091%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_WRKRINFO, msg, p, oMsg);
            proc_log("############ 근무자 송신 결과 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_BAS, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ BASIC 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0092%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_BASICTBL, msg, p, oMsg);
            proc_log("############ 기초 송신 결과 [%s]\n", oMsg);
        }

        if((ctm->tm_hour == 3) && (ctm->tm_min == 3) && (ctm->tm_sec == 10))
        {
            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);
            proc_log("############ 면제 마스터 송신 시간 [%s]\n", s_date);
            sprintf(msg, "%.8s0%c", s_date, '\0');
            MessageSender(FNO_MST_CHK, msg, p, oMsg);
            proc_log("############ 면제 마스터 확인 송신 결과 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_IMM_CARNO, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ IMM_CARNO 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_WRKR, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ WORKER 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0091%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_WRKRINFO, msg, p, oMsg);
            proc_log("############ 근무자 송신 결과 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_BAS, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ BASIC 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0092%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_BASICTBL, msg, p, oMsg);
            proc_log("############ 기초 송신 결과 [%s]\n", oMsg);
        }

        if((ctm->tm_hour == 3) && (ctm->tm_min == 13) && (ctm->tm_sec == 7))
        {
            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_BEF, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ 사전등록결제 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_WRKR, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ WORKER 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0091%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_WRKRINFO, msg, p, oMsg);
            proc_log("############ 근무자 송신 결과 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_BAS, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ BASIC 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0092%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_BASICTBL, msg, p, oMsg);
            proc_log("############ 기초 송신 결과 [%s]\n", oMsg);
        }

        if((ctm->tm_hour == 3) && (ctm->tm_min == 23) && (ctm->tm_sec == 7))
        {
            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_CARNO_DC, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ CARNO_DC 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_WRKR, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ WORKER 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0091%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_WRKRINFO, msg, p, oMsg);
            proc_log("############ 근무자 송신 결과 [%s]\n", oMsg);

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_BAS, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ BASIC 개정정보 변경 [%s]\n", oMsg);

            sprintf(msg, "0092%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_BASICTBL, msg, p, oMsg);
            proc_log("############ 기초 송신 결과 [%s]\n", oMsg);
        }

        if((ctm->tm_hour == 5) && (ctm->tm_min == 30) && (ctm->tm_sec == 10))
        {
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_RFID, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ RFID 개정정보 변경 [%s]\n", oMsg);
#if 0
//2020.02.20 WebServer로 RFID_CARS_INFO 테이블의 CSV파일 송신 로직 반영
//2020.03.17 RFID WAS 등록 구조 변경에 따라 삭제 (남산 3호터널에서 작업)
			memset(msg, 0x00, sizeof(msg));
			sprintf(msg, "%s/putRFID.sh", DIR_BIN);
            system(msg);
			
			memset(msg, 0x00, sizeof(msg));
			get_current_time(s_date);
			sprintf(msg, "%.8s0%c", s_date, '\0');
			MessageSender(FNO_WEB_CHK, msg, p, oMsg);
            proc_log("############ WebServer File Check[RFID] [%s]\n", oMsg);
#endif
#if 0
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/sqlRFID.sh", DIR_BIN);
            system(msg);

            proc_log("저공해/요일제 파일 완료\n");
            
            memset(spath, 0x00, sizeof(spath));
            memset(tpath, 0x00, sizeof(tpath));
            sprintf(spath, "%s/%s/RfidCarPL.bin", DIR_TCS, DIR_BASEINFO);
            sprintf(tpath, "%s/%s/IMMRFID", DIR_TCS, DIR_BASEINFO);
            lb_rename(spath, tpath);

            if(c_DbConnect()<0)
            {
                proc_log("DB 접속에러 %d", sqlca.sqlcode);
                continue; 
            }
            
            EXEC SQL
            SELECT RFID_RVS_NO, BAS_RVS_NO
            INTO :tmp_rvs,
                 :tmp_rvs2
            FROM TB_CFS_TABLENOM
            WHERE FARE_OFFICE_ID = :fare_id
            ;

            if(sqlca.sqlcode < 0)
            {
                proc_log("기초사항 조회 에러[%d]", sqlca.sqlcode);
                continue;
            }

			rvs_rfid = lb_data2atoi(tmp_rvs, 2);
			rvs_basic = lb_data2atoi(tmp_rvs2, 2);

            if(rvs_rfid >= 99)
                rvs_rfid = 0;

			if(rvs_basic >= 99)
                rvs_basic = 0;

			sprintf(tmp_rvs, "%02d", rvs_rfid+1);
			sprintf(tmp_rvs2, "%02d", rvs_basic+1);

            EXEC SQL
            UPDATE TB_CFS_TABLENOM
            SET RFID_RVS_NO = :tmp_rvs,
                RFID_UPDATE_DATE = sysdate,
                RFID_APPLY_DATE = sysdate,
				BAS_RVS_NO = :tmp_rvs2,
                BAS_UPDATE_DATE = sysdate,
                BAS_APPLY_DATE = sysdate
            WHERE FARE_OFFICE_ID = :fare_id
            ;

            if(sqlca.sqlcode < 0)
            {
                proc_log("개정번호 변경 오류[%d]", sqlca.sqlcode);
                EXEC SQL ROLLBACK WORK;
                continue;
            }
            
            EXEC SQL COMMIT WORK;
            
            disconnect_db();
			
			memset(msg, 0x00, sizeof(msg));
			sprintf(msg, "java -jar %s/basicRebuild.jar", DIR_BIN);
            system(msg);
#endif
        }
#if 0
        if((ctm->tm_hour == 14) && (ctm->tm_min == 30) && (ctm->tm_sec == 10))
#else
        if((ctm->tm_hour == 16) && (ctm->tm_min == 20) && (ctm->tm_sec == 10))
#endif
        {
			proc_log("발행사 시작\n");

            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%s/issftp.sh", DIR_BIN);
            system(msg);

            ret = searchFile(0);

            if(ret < 0)
            {
                proc_log("교통카드 발행사 파일처리 실패\n");
                continue;
#if 1
            }else if(ret == 1)
            {
                proc_log("교통카드 발행사 파일 없음\n");
                continue;
#endif
            }else
            {
                memset(spath, 0x00, sizeof(spath));
                memset(tpath, 0x00, sizeof(tpath));

                sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_TCRD_BIN, '\0');
                MessageSender(FNO_RVS_UPT, msg, p, oMsg);
                proc_log("############ 기초 개정정보 변경 [%s]\n", oMsg);

                sprintf(spath, "%s/%s/ISSTBL_S", DIR_TCS, DIR_BASEINFO);
                sprintf(tpath, "%s/%s/ISSTBL", DIR_TCS, DIR_BASEINFO);
                lb_rename(spath, tpath);
#ifdef _ORACLE_
                if(c_DbConnect()<0)
                {
                    proc_log("DB 접속에러 %d", sqlca.sqlcode);
                    continue; 
                }

                EXEC SQL
                SELECT TCRD_BIN_RVS_NO
                INTO  :tmp_rvs
                FROM TB_CFS_TABLENOM
                WHERE FARE_OFFICE_ID = :fare_id
                ;

                if(sqlca.sqlcode < 0)
                {
                    proc_log("기초사항 조회 에러[%d]", sqlca.sqlcode);
                    continue;
                }

                rvs_bin = lb_data2atoi(tmp_rvs, 2);

                if(rvs_bin >= 99)
                    rvs_bin = 0;

                sprintf(tmp_rvs, "%02d", rvs_bin+1);

                EXEC SQL
                UPDATE TB_CFS_TABLENOM
                SET TCRD_BIN_RVS_NO = :tmp_rvs,
                    TCRD_BIN_UPDATE_DATE = sysdate,
                    TCRD_BIN_APPLY_DATE = sysdate
                WHERE FARE_OFFICE_ID = :fare_id
                ;

                if(sqlca.sqlcode < 0)
                {
                    proc_log("개정번호 변경 오류[%d]", sqlca.sqlcode);
                    EXEC SQL ROLLBACK WORK;
                    continue;
                }
                
                EXEC SQL COMMIT WORK;

                disconnect_db();
#else
				memset(msg, 0x00, sizeof(msg));
				get_current_time(s_date);
				sprintf(msg, "%.8s1%c", s_date, '\0');
				MessageSender(FNO_WEB_CHK, msg, p, oMsg);
				proc_log("############ WebServer File Check[Issue] [%s]\n", oMsg);

                sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_WRKR, '\0');
                MessageSender(FNO_RVS_UPT, msg, p, oMsg);
                proc_log("############ WORKER 개정정보 변경 [%s]\n", oMsg);

                sprintf(msg, "0091%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
                MessageSender(FNO_WRKRINFO, msg, p, oMsg);
                proc_log("############ 근무자 송신 결과 [%s]\n", oMsg);

                sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_BAS, '\0');
                MessageSender(FNO_RVS_UPT, msg, p, oMsg);
                proc_log("############ BASIC 개정정보 변경 [%s]\n", oMsg);

                sprintf(msg, "0092%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
                MessageSender(FNO_BASICTBL, msg, p, oMsg);
                proc_log("############ 기초 송신 결과 [%s]\n", oMsg);
#endif
            }
            proc_log("교통카드 발행사 파일처리 완료\n");
        }
#ifdef _ORACLE_
        if((ctm->tm_hour == 22) && (ctm->tm_min == 20) && (ctm->tm_sec == 40))
        {
            proc_log("미납 수정 처리 시작\n");

            get_current_time(s_date);
			
            if(c_DbConnect()<0)
            {
                proc_log("DB 접속에러 %d", sqlca.sqlcode);
                continue; 
            }
            
			snprintf(sToday, 8+1, "%s", s_date);
			
            EXEC SQL EXECUTE
            BEGIN SP_DEFAULT_MODI(:sToday, :result);
            END;
            END-EXEC;

            if(sqlca.sqlcode < 0)
            {
                proc_log("개정번호 변경 오류[%d]", sqlca.sqlcode);
                EXEC SQL ROLLBACK WORK;
                continue;
            }

            proc_log("미납 수정 처리 완료[%d]\n", sqlca.sqlcode);
            disconnect_db();
        }
#endif
#if 0
        if((ctm->tm_hour == 5) && (ctm->tm_min == 0) && (ctm->tm_sec == 10))
        {
            proc_log("사전등록결제 일마감 집계 시작\n");

            get_current_time(s_date);
            //get_current_time(e_date);
			lb_oper_date(s_date, '-', 1, e_date);
			
			memset(msg, 0x00, sizeof(msg));
			memset(oMsg, 0x00, sizeof(oMsg));
			sprintf(msg, "BRSMC0300001006%.14s%.8s%.8s%c", s_date, e_date, e_date, '\0');

            MessageSender(FNO_DAYMNGT, msg, p, oMsg);

            proc_log("사전등록결제 일마감 집계 완료[%s]\n", oMsg);
        }

        if((ctm->tm_hour == 5) && (ctm->tm_min == 3) && (ctm->tm_sec == 40))
        {
            proc_log("사전등록결제 일마감 반송 시작\n");

            get_current_time(s_date);
			lb_oper_date(s_date, '-', 1, e_date);
			
			memset(msg, 0x00, sizeof(msg));
			memset(oMsg, 0x00, sizeof(oMsg));
			sprintf(msg, "BRSMC0300001018%.14s%.8s%.8s%c", s_date, e_date, e_date, '\0');

            MessageSender(FNO_DAY_RTN, msg, p, oMsg);

            proc_log("사전등록결제 일마감 반송 완료[%s]\n", oMsg);
        }
#endif
#if 0
        if((ctm->tm_hour == 17) && (ctm->tm_min == 0) && (ctm->tm_sec == 10))
        {
            proc_log("기초데이터 생성 테스트 시작\n");

			memset(msg, 0x00, sizeof(msg));
			memset(oMsg, 0x00, sizeof(oMsg));
			sprintf(msg, "0099%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');

            MessageSender(FNO_BASICTBL, msg, p, oMsg);

            proc_log("기초데이터 생성 테스트 완료[%s]\n", oMsg);
        }
#endif

        if(checkTime4M(4, 12) == TRUE)
        {
			btime = ctime - 360;
			btm = localtime(&btime);

	        sprintf(st_date, "%04d%02d%02d%02d%02d%02d%c", btm->tm_year + 1900, btm->tm_mon + 1, btm->tm_mday, btm->tm_hour, btm->tm_min, btm->tm_sec, '\0');
            get_current_time(s_date);
			sprintf(ed_date, "%.14s%c", s_date);

proc_log("######### New ADV Start # [%.14s]\n", st_date);
proc_log("######### New ADV SEnd # [%.14s]\n", ed_date);

            memset(msg, 0x00, sizeof(msg));
			memset(oMsg, 0x00, sizeof(oMsg));
#if 0
            memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_RFID, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ RFID 개정정보 변경 [%s]\n", oMsg);
#endif
#if 0
            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_BAS, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ 기초 개정정보 변경 [%s]\n", oMsg);

			sprintf(msg, "0092%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_BASICTBL, msg, p, oMsg);
			proc_log("############ 기초 송신 결과 [%s]\n", oMsg);
#endif
#if 0
            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);
			proc_log("############ RFID 마스터 송신 시간 [%s]\n", s_date);
			sprintf(msg, "%.8s3%c", s_date, '\0');
            MessageSender(FNO_MST_CHK, msg, p, oMsg);
			proc_log("############ RFID 마스터 확인 송신 결과 [%s]\n", oMsg);
#endif
#if 0
            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);
			proc_log("############ 사전등록 마스터 송신 시간 [%s]\n", s_date);
			sprintf(msg, "%.8s2%c", s_date, '\0');
            MessageSender(FNO_MST_CHK, msg, p, oMsg);
			proc_log("############ 사전등록 마스터 확인 송신 결과 [%s]\n", oMsg);
#endif
#if 0
            ret = make_bef_change2(p, &st_date, &ed_date);
            if(ret < 0)
            {
                proc_log("사전등록결제 신 변경분 파일처리 실패\n");
            }
#endif

#if 0
//신규 사전등록 마스터 신규 방안으로 수정되어 사용 안함
            ret = make_bef_change(p, &st_date, &ed_date);

            if(ret < 0)
            {
                proc_log("사전등록결제 변경분 파일처리 실패\n");
//                continue;
            }
#endif
			memset(msg, 0x00, sizeof(msg));
            sprintf(msg, "sh %s/srchPrg", DIR_BIN);
            system(msg);
        }

        if(checkTime4M(30, 6) == TRUE)
        {
#if 0 //남산 3호터널에서 수신
            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);
            proc_log("############ 면제 마스터 송신 시간 [%s]\n", s_date);
            sprintf(msg, "%.8s0%c", s_date, '\0');
            MessageSender(FNO_MST_CHK, msg, p, oMsg);
            proc_log("############ 면제 마스터 확인 송신 결과 [%s]\n", oMsg);

            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);
			proc_log("############ 감면 마스터 송신 시간 [%s]\n", s_date);
			sprintf(msg, "%.8s1%c", s_date, '\0');
            MessageSender(FNO_MST_CHK, msg, p, oMsg);
			proc_log("############ 감면 마스터 확인 송신 결과 [%s]\n", oMsg);
#endif
#if 0
            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);
			proc_log("############ 사전등록 마스터 송신 시간 [%s]\n", s_date);
			sprintf(msg, "%.8s2%c", s_date, '\0');
            MessageSender(FNO_MST_CHK, msg, p, oMsg);
			proc_log("############ 사전등록 마스터 확인 송신 결과 [%s]\n", oMsg);
#endif
		}

        if((ctm->tm_hour == 5) && (ctm->tm_min >= 10) && (ctm->tm_min <= 40) && (checkTime4M(10, 6) == TRUE))
        {
#if 0 //남산 3호터널에서 수신
            memset(s_date, 0x00, sizeof(s_date));
            get_current_time(s_date);
			proc_log("############ RFID 마스터 송신 시간 [%s]\n", s_date);
			sprintf(msg, "%.8s3%c", s_date, '\0');
            MessageSender(FNO_MST_CHK, msg, p, oMsg);
			proc_log("############ RFID 마스터 확인 송신 결과 [%s]\n", oMsg);
#endif
        }

        if((ctm->tm_hour == 6) && (ctm->tm_min == 41) && (ctm->tm_sec == 55))
        {
            memset(s_date, 0x00, sizeof(s_date));

            sprintf(msg, "%.2s%02d07002100%c", PLZ_CODE2, RVS_BAS, '\0');
            MessageSender(FNO_RVS_UPT, msg, p, oMsg);
            proc_log("############ BASIC 개정정보 변경 [%s]\n", oMsg);

			sprintf(msg, "0092%.2s%.2s%c", PLZ_CODE2, PLZ_CODE2, '\0');
            MessageSender(FNO_BASICTBL, msg, p, oMsg);
			proc_log("############ 기초 송신 결과 [%s]\n", oMsg);
        }
		
        sleep(1);
    }
}
