package com.eactive.eai.batch.logger;

import java.util.ArrayList;
import java.util.Properties;

import com.eactive.eai.batch.common.CalendarUtil;
import com.eactive.eai.batch.common.StringUtil;
import com.eactive.eai.batch.doc.BatchDoc;
import com.eactive.eai.batch.osd.OutsideManager;
import com.eactive.eai.batch.osd.OutsideVO;
import com.eactive.eai.batch.rule.dirInfo.BatchJobInfoVO;
import com.eactive.eai.batch.rule.dirInfo.DirInfoManager;
import com.eactive.eai.batch.scheduler.JobFileTransferVO;
import com.eactive.eai.common.dao.DAOException;
import com.eactive.eai.common.dao.DAOFactory;
import com.eactive.eai.common.exception.ExceptionUtil;
import com.eactive.eai.common.property.PropManager;
import com.eactive.eai.common.util.Logger;


public class LogManager
{


	//JPD 를 호출할때 인자를 결합하기위한 DELIMITER
	//(LogSender.jpd, LogListener.jpd 에서 사용함)
	//public static final String JPD_LOG_DELIMITER                 = "^||^";

	//로그타입 정의
	public static final String LOG_TYPE_QUEUE                    = "Q";	//수행대기로그, DB에 들어가는 값임(1자리, 수정불가)
	public static final String LOG_TYPE_START                    = "S";	//시작로그, DB에 들어가는 값임(1자리, 수정불가)
	//public static final String LOG_TYPE_CONTINUE                 = "P";	//진행로그
	public static final String LOG_TYPE_END                      = "T";	//종료로그(정상종료), DB에 들어가는 값임(1자리, 수정불가)
	public static final String LOG_TYPE_ERROR                    = "E";	//에러로그(비정상종료), DB에 들어가는 값임(1자리, 수정불가)
	public static final String LOG_TYPE_CANCEL                   = "C";	//사용자중지로그, DB에 들어가는 값임(1자리, 수정불가)
	public static final String LOG_TYPE_NOFILE                   = "N";	//요구수신파일없음, DB에 들어가는 값임(1자리, 수정불가)
	                                                                    // 송수신파일없음으로 변경 2008.12.30
	public static final String LOG_TYPE_UPDATE_MASTER            = "U";	//Master로그UPDATE

	//배치메시지 DB로그 레벨
	public static final String PROP_GROUP_NAME_BATCH_DBLOG      = "BatchDBLogInfo";
	public static final String PROP_NAME_BATCH_DBLOG_LEVEL      = "batch.dblog.level";

	//'batch.dblog.level' 프라퍼티가 가질 수 있는 값들
	public static final String BATCH_DBLOG_LEVEL_ALL             = "1";	//전문저장
	public static final String BATCH_DBLOG_LEVEL_EXCEPT_TELEGRAM = "2";	//전문미저장

	public static String mBatchDBLogLevel;


	//디버그용 로그유틸
	private static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);



	//singleton 객체 생성
	private static LogManager instance = new LogManager();
	//singleton 객체 리턴
    public static LogManager getInstance() {
        return instance;
    }

	//생성자
	private LogManager() {
		//DB로그 레벨 설정 (프라퍼티 정보 조회)
		String dbLogLevel = null;
		try {

			dbLogLevel = PropManager.getInstance().getProperty(PROP_GROUP_NAME_BATCH_DBLOG, PROP_NAME_BATCH_DBLOG_LEVEL);
			if (dbLogLevel == null) throw new Exception("BECEAICLG002");  //배치 DB로그 레벨 프라퍼티 정보를 읽어올 수 없습니다.

			if (!dbLogLevel.equals(BATCH_DBLOG_LEVEL_ALL) &&
			    !dbLogLevel.equals(BATCH_DBLOG_LEVEL_EXCEPT_TELEGRAM)) throw new Exception("BECEAICLG003");  //배치 DB로그 레벨 프라퍼티 정보 값이 잘못 설정되어 있습니다.

		} catch (Exception ex) {
			//에러로그 기록
			String errMsg = ExceptionUtil.getErrorCode(ex, "BECEAICLG001");  //배치 DB로그 프라퍼티 정보를 읽어올 수 없습니다.
			logger.error(errMsg, ex);

			//디폴트 '전문저장' 설정
			dbLogLevel = BATCH_DBLOG_LEVEL_ALL;
		}

		mBatchDBLogLevel = dbLogLevel;
	}



    /**
    * 1. 기능 : 배치JOB의 시작 로그를 DB에 저장한다.
    * 2. 처리 개요 :
    * 3. 주의사항
    *
    * @param		msgDoc		배치메시지 Document
	* @return		Master, Stage 로그 테이블의 반영 Row 수 합계
    * @exception	Exception	필수 항목이 없는 경우, 해당 로그가 존재 또는 미존재 하는 경우, DB에 로그 저장이 실패한 경우
    **/
	public int setLogStart(BatchDoc msgDoc) throws Exception {

		long srtTime = 0;
		srtTime = System.currentTimeMillis();

		logger.info("[ DB로그 ] ■ JOB Start DB로그 호출됨. ["+ msgDoc.getBatchMsg().getHeader().getUUID() 
                                                        +" / "+ msgDoc.getBatchMsg().getBody().getSubUUID() +"]");
		//==========================================
		//1. 필수 항목 체크
		//==========================================
		checkMandatoryFiled(msgDoc, LOG_TYPE_START, null);

        LogDAO dao = (LogDAO)DAOFactory.newInstance().create(LogDAO.class);
		int resultCnt = 0;

		//==========================================
		//2. INSERT 로그 Master (디폴트 단계종료시간:공백, 처리구분코드:S, 에러메시지:공백 설정)
		//==========================================
		resultCnt += dao.insertLogMaster(msgDoc);

		//==========================================
		//3. INSERT 로그 Stage
		//==========================================
		resultCnt += dao.insertLogStage(msgDoc, LOG_TYPE_END, " ");

		logger.info("[ DB로그 ] JOB Start DB로그 종료. [수행시간 : "+ ((System.currentTimeMillis() - srtTime)/1000.0) +" Sec]");
		return resultCnt;
	}


    /**
    * 1. 기능 : 배치JOB의 진행 로그를 DB에 저장한다.
    * 2. 처리 개요 :
    * 3. 주의사항
    *
    * @param		msgDoc		배치메시지 Document
	* @return		Master, Stage 로그 테이블의 반영 Row 수 합계
    * @exception	Exception	필수 항목이 없는 경우, 해당 로그가 존재 또는 미존재 하는 경우, DB에 로그 저장이 실패한 경우
    **/
	public int setLogStage(BatchDoc msgDoc) throws Exception {

		long srtTime = 0;
		srtTime = System.currentTimeMillis();

		logger.info("[ DB로그 ] ■ JOB Stage DB로그 호출됨. ["+ msgDoc.getBatchMsg().getHeader().getUUID()
		                                                 +" / "+ msgDoc.getBatchMsg().getBody().getSubUUID()
														 +" / "+ msgDoc.getBatchMsg().getHeader().getLayerCode()
														 +" / "+ msgDoc.getBatchMsg().getBody().getSubLayerCode()
														 +" / "+ msgDoc.getBatchMsg().getBody().getNodeCount()
														 +"] ["+ (msgDoc.getBatchMsg().getPhaseinfo()==null? "" : msgDoc.getBatchMsg().getPhaseinfo().getRuleCode())
														 +" / "+ (msgDoc.getBatchMsg().getPhaseinfo()==null? "" : msgDoc.getBatchMsg().getPhaseinfo().getPhaseCode()) +"]");
		//==========================================
		//1. 필수 항목 체크
		//==========================================
		checkMandatoryFiled(msgDoc, "", null);

        LogDAO dao = (LogDAO)DAOFactory.newInstance().create(LogDAO.class);
		int resultCnt = 0;

		//==========================================
		//3. INSERT 로그 Stage
		//==========================================
		resultCnt += dao.insertLogStage(msgDoc, LOG_TYPE_END, " ");

		logger.info("[ DB로그 ] Stage DB로그 종료. [수행시간 : "+ ((System.currentTimeMillis() - srtTime)/1000.0) +" Sec]");
		return resultCnt;
	}


    /**
    * 1. 기능 : 배치JOB의 (정상)종료 로그를 DB에 저장한다.
    * 2. 처리 개요 :
    * 3. 주의사항
    *
    * @param		msgDoc		배치메시지 Document
	* @return		Master, Stage 로그 테이블의 반영 Row 수 합계
    * @exception	Exception	필수 항목이 없는 경우, 해당 로그가 존재 또는 미존재 하는 경우, DB에 로그 저장이 실패한 경우
    **/
	public int setLogEnd(BatchDoc msgDoc) throws Exception {
		logger.info("[ DB로그 ] ■ JOB End DB로그 호출됨. ["+ msgDoc.getBatchMsg().getHeader().getUUID()
                                                      +" / "+ msgDoc.getBatchMsg().getBody().getSubUUID() +"]");
		//String processType     = StringUtil.nvlTrim(msgDoc.getEAIBatchMessage().getHeader().getProcessType()    );     //작업유형구분코드
		String fileName        = StringUtil.nvlTrim(msgDoc.getBatchMsg().getHeader().getFileName()       );     //파일명
		/*
		if (processType.equals(CommonKeys.PROCESS_REQUEST_RECEIVE) && fileName.equals("")) {
			logger.info("[ DB로그 ] ★ 요구수신 작업 완료후 파일 미수신으로 판단됨. (batchMsgDoc 에 파일명 없음)");
			return setLogFinish(msgDoc, LOG_TYPE_NOFILE, null);
		}
		*/
		// 요구/응답 송수신 모든 경우에 대하여 송수신 파일이 없으면 송수신 파일 없음으로 세팅
		if (fileName.equals("")) {
			return setLogFinish(msgDoc, LOG_TYPE_NOFILE, null);
		}
		return setLogFinish(msgDoc, LOG_TYPE_END, null);
	}

	public int setLogError(BatchDoc msgDoc, String errorDesc) throws Exception {
		logger.info("[ DB로그 ] ■ JOB Error DB로그 호출됨. ["+ msgDoc.getBatchMsg().getHeader().getUUID()
                                                        +" / "+ msgDoc.getBatchMsg().getBody().getSubUUID() +"]");
		return setLogFinish(msgDoc, LOG_TYPE_ERROR, errorDesc);
	}

	public int setLogCancel(BatchDoc msgDoc, String errorDesc) throws Exception {
		logger.info("[ DB로그 ] ■ JOB Cancel DB로그 호출됨. ["+ msgDoc.getBatchMsg().getHeader().getUUID()
                                                         +" / "+ msgDoc.getBatchMsg().getBody().getSubUUID() +"]");
		return setLogFinish(msgDoc, LOG_TYPE_CANCEL, errorDesc);
	}

    /**
    * 1. 기능 : 배치JOB의 에러(비정상종료) 로그를 DB에 저장한다.
    * 2. 처리 개요 :
    * 3. 주의사항
    *
    * @param		msgDoc		배치메시지 Document
    * @param		logType		로그단계(start, terminate, error, cancel 값 중 하나)
    * @param		errorDesc	에러메시지
	* @return		Master, Stage 로그 테이블의 반영 Row 수 합계
    * @exception	Exception	필수 항목이 없는 경우, 해당 로그가 존재 또는 미존재 하는 경우, DB에 로그 저장이 실패한 경우
    **/
	private int setLogFinish(BatchDoc msgDoc, String logType, String errorDesc) throws Exception {

		long srtTime = 0;
		srtTime = System.currentTimeMillis();

		//==========================================
		//1. 필수 항목 체크
		//==========================================
		checkMandatoryFiled(msgDoc, logType, errorDesc);
		if (errorDesc == null || errorDesc.trim().equals("")) errorDesc = " ";	//종료 로그인경우 null 대신 space 입력

        LogDAO dao = (LogDAO)DAOFactory.newInstance().create(LogDAO.class);
		int resultCnt = 0;
		checkJobCode(msgDoc);
		
		//==========================================
		//2. '종료' 로그가 아닌경우 Master,Stage,File 로그가 존재하지 않으면 INSERT (시작단계에서 에러 또는 중지가 발생한 경우)
		//==========================================
		boolean existLogMaster = false;
		boolean existLogStage  = false;
		boolean existLogFile   = false;
		String fileName = StringUtil.nvlTrim(msgDoc.getBatchMsg().getHeader().getFileName());

		if (logType != LOG_TYPE_END) {
			int[] existLogCnt = dao.existLogCount(msgDoc);
			existLogMaster    = (existLogCnt[0] > 0)? true : false;
			existLogStage     = (existLogCnt[1] > 0)? true : false;
			existLogFile      = (existLogCnt[2] > 0)? true : false;
			if (!existLogMaster) resultCnt += dao.insertLogMaster(msgDoc);
			if (!existLogStage)  resultCnt += dao.insertLogStage(msgDoc, logType, errorDesc);
			if (!fileName.equals("")) {
				if (!existLogFile) resultCnt += dao.insertLogFile(msgDoc);
				resultCnt += dao.updateLogFileFinish(msgDoc, logType, errorDesc);
			}
		}

		//==========================================
		//3. UPDATE 로그 Master (종료시간, 거래처리구분, 장애발생원인 필드)
		//==========================================
		resultCnt += dao.updateLogMasterFinish(msgDoc, logType, errorDesc);

		logger.info("[ DB로그 ] JOB Finish DB로그 종료. [수행시간 : "+ ((System.currentTimeMillis() - srtTime)/1000.0) +" Sec]");
		return resultCnt;
	}

	public int updateLogMaster(BatchDoc msgDoc) throws Exception {

		long srtTime = 0;
		srtTime = System.currentTimeMillis();

		logger.info("[ DB로그 ] ■ JOB Update DB로그 호출됨. [UUID: "+ msgDoc.getBatchMsg().getHeader().getUUID() +"], [SUB_UUID: "+ msgDoc.getBatchMsg().getBody().getSubUUID() +"]");
 		//==========================================
		//1. UPDATE 로그 Master (시작단계 이후 로그 Master의 필드가 결정되는 경우 update)
		//==========================================
		LogDAO dao = (LogDAO)DAOFactory.newInstance().create(LogDAO.class);
		int resultCnt = dao.updateLogMaster(msgDoc);

		logger.info("[ DB로그 ] JOB Update DB로그 종료. [수행시간 : "+ ((System.currentTimeMillis() - srtTime)/1000.0) +" Sec]");
		return resultCnt;
	}


	public int setLogFileStart(BatchDoc msgDoc) throws Exception {

		long srtTime = 0;
		srtTime = System.currentTimeMillis();

		logger.info("[ DB로그 ] ■ FILE Start DB로그 호출됨. ["+ msgDoc.getBatchMsg().getHeader().getUUID()
                                                         +" / "+ msgDoc.getBatchMsg().getBody().getSubUUID()
                                                         +" / "+ msgDoc.getBatchMsg().getHeader().getFileName() +"]");
		//==========================================
		//1. 필수 항목 체크
		//==========================================
		//checkMandatoryFiled(msgDoc, LOG_TYPE_CONTINUE, null);
		String fileName        = StringUtil.nvlTrim(msgDoc.getBatchMsg().getHeader().getFileName()            );  //실제파일명
		if (fileName.equals("")) throw new Exception(ExceptionUtil.getErrorCode("BECEAICLG017", new String[] {"FileName"}));

        LogDAO dao = (LogDAO)DAOFactory.newInstance().create(LogDAO.class);
		int resultCnt = 0;
		checkJobCode(msgDoc);

		//==========================================
		//3. INSERT 로그 File
		//==========================================
		if (dao.existLogFileCount(msgDoc) == 0) {   //최초시도시 INSERT
			resultCnt += dao.insertLogFile(msgDoc);
		} else {                                    //Timeout 발생후 재시도시 UPDATE
			resultCnt += dao.updateLogFileRetry(msgDoc);
		}

		logger.info("[ DB로그 ] FILE Start DB로그 종료. [수행시간 : "+ ((System.currentTimeMillis() - srtTime)/1000.0) +" Sec]");
		return resultCnt;
	}


	public int setLogFileEnd(BatchDoc msgDoc) throws Exception {

		long srtTime = 0;
		srtTime = System.currentTimeMillis();

		logger.info("[ DB로그 ] ■ FILE End DB로그 호출됨. ["+ msgDoc.getBatchMsg().getHeader().getUUID()
                                                       +" / "+ msgDoc.getBatchMsg().getBody().getSubUUID()
                                                       +" / "+ msgDoc.getBatchMsg().getHeader().getFileName() +"]");
		//==========================================
		//1. 필수 항목 체크
		//==========================================
		//checkMandatoryFiled(msgDoc, logType, errorDesc);
		String fileName        = StringUtil.nvlTrim(msgDoc.getBatchMsg().getHeader().getFileName()            );  //실제파일명
		if (fileName.equals("")) throw new Exception(ExceptionUtil.getErrorCode("BECEAICLG017", new String[] {"FileName"}));

        LogDAO dao = (LogDAO)DAOFactory.newInstance().create(LogDAO.class);
		int resultCnt = 0;

		//==========================================
		//3. UPDATE 로그 File (종료시간, 거래처리구분, 장애발생원인 필드)
		//==========================================
		resultCnt += dao.updateLogFileFinish(msgDoc, LOG_TYPE_END, " ");

		logger.info("[ DB로그 ] FILE End DB로그 종료. [수행시간 : "+ ((System.currentTimeMillis() - srtTime)/1000.0) +" Sec]");
		return resultCnt;
	}



    /**
    * 1. 기능 : 배치메시지 DB로그 시 배치메시지 내 필수항목을 체크하고 해당 메시지 존재여부를 체크한다.
    * 2. 처리 개요 :
    * 3. 주의사항
    *
    * @param		msgDoc		배치메시지 Document
    * @param		logType		로그단계(start, terminate, error, cancel 값 중 하나)
    * @param		errorDesc	에러메시지 (로그단계가 error, cancel 인 경우 체크)
    * @exception	Exception	필수 항목이 없는 경우
    **/
	private void checkMandatoryFiled(BatchDoc msgDoc, String logType, String errorDesc) throws Exception {

		if (msgDoc == null) throw new Exception("BECEAICLG016");  //배치 DB로그 저장시 배치메시지 객체 파라미터가 null 입니다.

		//==========================================
		//1. 공통 필수 항목 체크
		//==========================================
		//Log Master 테이블 PK : uuid, subUuid
		//Log Stage  테이블 PK : uuid, subUuid, layerCode, flowPhaseCode, stageSeq
		String uuid            = StringUtil.nvlTrim(msgDoc.getBatchMsg().getHeader().getUUID()           );     //UUID
		String subUuid         = StringUtil.nvlTrim(msgDoc.getBatchMsg().getBody().getSubUUID()          );     //sub UUID
		String layerCode       = StringUtil.nvlTrim(msgDoc.getBatchMsg().getHeader().getLayerCode()      );     //Layer구분코드
		String subLayerCode    = StringUtil.nvlTrim(msgDoc.getBatchMsg().getBody().getSubLayerCode()     );     //SubLayer코드
		String phaseStartTime  = StringUtil.nvlTrim(msgDoc.getBatchMsg().getBody().getPhaseStartTime()   );     //단계시작시간
		String phaseEndTime    = StringUtil.nvlTrim(msgDoc.getBatchMsg().getBody().getPhaseEndTime()     );     //단계종료시간
		errorDesc              = StringUtil.nvlTrim(errorDesc);


		if (uuid            .equals("")) throw new Exception(ExceptionUtil.getErrorCode("BECEAICLG017", new String[] {"UUID"}));  //배치 DB로그 저장시 배치 메시지 객체의 '?' 항목이 null 또는 공백입니다.
		if (subUuid         .equals("")) throw new Exception(ExceptionUtil.getErrorCode("BECEAICLG017", new String[] {"SubUUID"}));
		if (layerCode       .equals("")) throw new Exception(ExceptionUtil.getErrorCode("BECEAICLG017", new String[] {"LayerCode"}));
		if (subLayerCode    .equals("")) throw new Exception(ExceptionUtil.getErrorCode("BECEAICLG017", new String[] {"subLayerCode"}));
		if (phaseStartTime  .equals("")) throw new Exception(ExceptionUtil.getErrorCode("BECEAICLG017", new String[] {"PhaseStartTime"}));
		if (phaseEndTime    .equals("")) msgDoc.getBatchMsg().getBody().setPhaseEndTime(CalendarUtil.getCurrentTimeNoDash()); 


		//==========================================
		//2. 단계별 필수 항목 체크
		//==========================================
		//에러 로그, 중지 로그인 경우 에러메시지 항목 체크
		if (logType.equals(LOG_TYPE_ERROR) || logType.equals(LOG_TYPE_CANCEL)) {
			if (errorDesc.equals("")) throw new Exception("BECEAICLG018");  //배치 DB로그 저장시 에러메시지 파라미터가 null 또는 공백입니다.
		}

	}
    /**
	    * 1. 기능 : 배치메시지 DB로그 시 배치메시지 내 필수항목을 체크하고 해당 메시지 존재여부를 체크한다.
	    * 2. 처리 개요 :
	    * 3. 주의사항
	    *
	    * @param		msgDoc		배치메시지 Document
	    * @param		logType		로그단계(start, terminate, error, cancel 값 중 하나)
	    * @param		errorDesc	에러메시지 (로그단계가 error, cancel 인 경우 체크)
	    * @exception	Exception	필수 항목이 없는 경우
	    **/
		private void checkJobCode(BatchDoc msgDoc) {
			String jobCode = msgDoc.getBatchMsg().getHeader().getJobCode();
			if ( jobCode == null || jobCode.trim().equals("") ){
				String processCode = msgDoc.getBatchMsg().getHeader().getProcessCode();
				String institutionCode = msgDoc.getBatchMsg().getHeader().getInstitutionCode();

				//거래구분 코드 설정
				int bizCodeStartIndex = 0;
				int bizCodeEndIndex   = 0;
				int orgIndex          = 0;
				ArrayList<OutsideVO> organList = OutsideManager.getInstance().getOutsideInfo(processCode);
				for (int i=0; organList!=null && i<organList.size(); i++) {
					OutsideVO organInfo = organList.get(i);
					if ( institutionCode.equals(organInfo.getOsdCode()) ) {
						bizCodeStartIndex = organInfo.getBizCdStartIdx();
						bizCodeEndIndex   = organInfo.getBizCdEndIdx();
						orgIndex          = organInfo.getBizCdEndIdx();
						break;
					}
				}

				String fileName = msgDoc.getBatchMsg().getHeader().getFileName();
							
				if (bizCodeStartIndex <= 0 || bizCodeStartIndex >= fileName.length()) bizCodeStartIndex = 0;
	    		if (bizCodeEndIndex   == 0 || bizCodeEndIndex   >  fileName.length()) bizCodeEndIndex = fileName.length();
	    		if (bizCodeEndIndex   < 0 &&  0  <  fileName.length() + bizCodeEndIndex ) bizCodeEndIndex = fileName.length() + bizCodeEndIndex;

				
		        String bizCode = "";
		        
		        try {
		        	bizCode = fileName.substring(bizCodeStartIndex, bizCodeEndIndex);
		        }catch ( Exception e ){
		        	logger.warn(e.getLocalizedMessage(), e);
		        }
		        		        		
		        // 거래 구분 코드 길이가 가변인 경우( END INDEX가 0인 경우)
		        if ( orgIndex == 0 ){
			        String delStr = null;
			        try {
			        	Properties orgInfo = PropManager.getInstance().getProperties( 
			        			"TelegramInfo{" + processCode + "_" + institutionCode + "}");
			            delStr = orgInfo.getProperty( "del.string" );
						
					} catch (Exception e) {}

			        if ( delStr != null && !delStr.trim().equals("")){
			        
			        	int delIndex = bizCode.indexOf(delStr);

			        	if ( delIndex > -1 ) {
			        		bizCode = bizCode.substring(0, delIndex );
			        	}
			        }
		        }
		        String msgBizCode = msgDoc.getBatchMsg().getHeader().getBizCode();
		        if ( msgBizCode == null || msgBizCode.trim().equals("") ){
		        	msgDoc.getBatchMsg().getHeader().setBizCode( bizCode ) ;
		        }
		        BatchJobInfoVO info = DirInfoManager.getInstance().getFileInfoByDstcd(processCode, bizCode);
		        
		        if ( info != null ){
					msgDoc.getBatchMsg().getHeader().setJobCode( info.getMsgDstCode() );
		        }
			}

		}

	    public ArrayList<JobFileTransferVO> getFileLogSuccess() throws DAOException {
	    	LogDAO dao = (LogDAO)DAOFactory.newInstance().create(LogDAO.class);
	        return dao.getFileLogSuccess();
		}

	    public String getFileNameSeq(String procCode, String instiCode, String fileName, boolean flag)throws DAOException{
	    	LogDAO dao = (LogDAO)DAOFactory.newInstance().create(LogDAO.class);
	        return dao.getFileNameSeq( procCode, instiCode, fileName, flag);
	    }

	    public boolean getFileLogSuccessCheck(String procCode, String instiCode, String bizCode, String fileName)throws DAOException{
	    	LogDAO dao = (LogDAO)DAOFactory.newInstance().create(LogDAO.class);
	        return dao.getFileLogSuccessCheck( procCode, instiCode, bizCode, fileName);
	    }
}
