//package com.eactive.eai.agent.businessday; 
//
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.Properties;
//
//import com.eactive.eai.adapter.AdapterGroupVO;
//import com.eactive.eai.adapter.AdapterManager;
//import com.eactive.eai.adapter.AdapterPropManager;
//import com.eactive.eai.adapter.AdapterVO;
//import com.eactive.eai.adapter.ElinkAdapter;
//import com.eactive.eai.adapter.ElinkAdapterFactory;
//import com.eactive.eai.agent.AgentUtil;
//import com.eactive.eai.agent.command.Command;
//import com.eactive.eai.agent.command.CommandException;
//import com.eactive.eai.common.dao.DAOFactory;
//import com.eactive.eai.common.util.DatetimeUtil;
//import com.eactive.eai.common.util.Logger;
//import com.eactive.eai.common.util.UUIDGenerator;
//import com.ext.eai.common.stdmessage.STDMessage;
//import com.ext.eai.common.stdmessage.STDMessageManager;
//import com.ext.eai.common.stdmessage.parser.STDMessageParser;
//import com.ext.eai.common.stdmessage.parser.STDMessageParserFactory;
//import com.kbstar.eai.common.businessday.BusinessDayDAO;
//import com.kbstar.eai.common.businessday.EventSystemInfoVO;
//
///** 
//* 1. 기능 : 일자전환 통지 이벤트 Command
//* 2. 처리 개요 : EAI의 영업일자를 변경
//* 3. 주의사항 
//*
//* @author  
//* @version  v 1.0.0
//* @see  관련 기능을 참조
//* @since   
//*   
//*/
//public class CDEventCommand extends Command
//{ 
//    /**
//	 * 
//	 */
//	private static final long serialVersionUID = 1L;
//	/** 
//    * 1. 기능 :  UpdateBusinessDayCommand 생성자
//    * 2. 처리 개요 : 
//    * 3. 주의사항 
//    *
//    **/
//    public CDEventCommand(String name) {
//        super(name);
//    }
//    
//    public CDEventCommand() {
//        super("CDEventCommand");
//    }
//    /** 
//    * 1. 기능 : 일자전환 통지 이벤트 Command
//    * 2. 처리 개요 : EAI의 영업일자 변경이벤트를 전송
//    * 3. 주의사항 
//    *
//    * @exception CommandException	Argument Type이 다르거나 Command 수행중 Excpetion이 발생할 경우
//    **/
//    public Object execute() throws CommandException
//    {
//        Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
//        if (logger.isWarn()) logger.warn(this.name + " is executed");
//        
//        if( !(args instanceof String) ) {
//            String rspErrorCode = "RECEAIMIM001";
//            String msg = makeException(rspErrorCode, null);
//            if (logger.isError()) logger.error(msg);
//            throw new CommandException(msg);
//        }
//        
//        String orgMessage = (String) args;
//        String reqMessage = "";
//        String resMessage = null;
//        try{
//        	String eventSystem = "";
//        	// 테이블에서 이벤트 정보를  조회하여
//        	// 이벤트 전문을 발생하고 결과를 이벤트로그에 저장한다.
//        	
//        	// 1. Event Query
//        	DAOFactory factory = DAOFactory.newInstance();
//        	BusinessDayDAO dao = null;
//            dao = (BusinessDayDAO)factory.create(BusinessDayDAO.class);
//            HashMap eventInfo = dao.getEventSystemInfo();
//        	// 2. Event Send Loop
//            Iterator it = eventInfo.keySet().iterator();
//            EventSystemInfoVO vo = null;
//            
//            String sendDateTime = "";
//            String recvDateTime = "";
//            
//            byte[] resBytes = null;
//            
//            String eventStatus = "C";
//            
//            if(orgMessage.startsWith("prepare")) {
//            	eventStatus = "P";
//            }
//            
//            String result = "0";
//            
//            for(int i=0;it.hasNext();i++) {
//            	eventSystem = (String)it.next();
//            	vo = (EventSystemInfoVO)eventInfo.get(eventSystem);
//        		
//            	if( eventStatus.equals("P") && "1".equals(vo.getEAIEvntPrcssDstcd()) ) {
//            		continue;
//            	}
//            	
//            	if (logger.isWarn()) logger.warn(this.name + "] 이벤트 송신 - "+ eventSystem);
//        		sendDateTime = DatetimeUtil.getCurrentDateTime(); // getCurrentTimeMillis
//        		//--------------------------------------------------------------------
//        		// Send Event Message to Target System
//        		AdapterGroupVO adptGrpVO = null;
//        		
//        		try {
//    	            AdapterManager adapterManager = AdapterManager.getInstance();
//    	            adptGrpVO = adapterManager.getAdapterGroupVO(vo.getAdptrBzwkGroupName());        
//    	            AdapterVO adptVO = adptGrpVO.nextAdapterVO();
//    	            //PropManager manager = PropManager.getInstance();
//    	            AdapterPropManager manager = AdapterPropManager.getInstance();
//    	            
//    	            if(adptVO == null) throw new Exception("Adapter not found - " + vo.getAdptrBzwkGroupName());
//    	            
//    	            Properties adapterProp = manager.getProperties(adptVO.getPropGroupName());
//    	            
//    	            if(adapterProp == null) throw new Exception("AdapterProperty not found - " + adptVO.getPropGroupName());
//    	            String adptrMsgPtrnCd = adptGrpVO.getAdptrMsgPtrnCd();
//    	            String adptrMsgType = adptGrpVO.getMessageType();
//    	            
//    	            if (logger.isWarn()) {
//    	            	logger.warn(this.name + "] 이벤트 송신 Adapter ["+ vo.getAdptrBzwkGroupName()+"] adptrMsgPtrnCd["+adptrMsgPtrnCd+"] TYPE["+adptGrpVO.getType()+"]");
//    	            }
//    	            
//    	            if("K".equals(adptrMsgPtrnCd) && "XML".equals(adptrMsgType)) {
//    	            	STDMessageManager kbheaderManager = STDMessageManager.getInstance();
//    	            	STDMessage kbmsg = kbheaderManager.getSTDMessage(vo.getEvntRecvSysName());
//    	            	if(kbmsg == null) {
//    	            		logger.error(this.name + "] KB표준메시지미등록 - 키 : 이벤트수신시스템명 ["+ vo.getEvntRecvSysName()+"] ");
//    	            		
//    	            		recvDateTime = DatetimeUtil.getCurrentDateTime(); // getCurrentTimeMillis
//    	            		dao.addEventLog(vo.getEvntRecvSysName(), eventStatus, sendDateTime, recvDateTime, "0");
//    	            		
//    	            		continue;
//    	            	}
//    	            	kbmsg = setKBMessageDefaultValue(kbmsg);
//    	            	reqMessage = "<InData Req=\""+orgMessage.substring(0,7)+"\" Date=\""+orgMessage.substring(7,15)+"\"/>";
//    	            	reqMessage = kbmsg.toXMLString(reqMessage);
//    	            }
//    	            else {
//    	            	reqMessage = orgMessage;
//    	            }
//    	            
//    	            if (logger.isWarn()) {
//    	            	logger.warn(this.name + "] Event Message ["+reqMessage+"]");
//    	            }
//    	            
//    	            ElinkAdapter adapter = null;
//    	            adapter = ElinkAdapterFactory.newInstance().getElinkAdapter(adptGrpVO.getType());
//    	            resBytes = (byte[])adapter.callService(vo.getAdptrBzwkGroupName(), adapterProp, reqMessage.getBytes());
//    	            if (logger.isWarn()) {
//    	            	if(resBytes != null) {
//    	            		resMessage = new String(resBytes);
//    	            		logger.warn(this.name + "] 응답메시지 ["+resMessage+"]");
//    	            		
//    	            		if("K".equals(adptrMsgPtrnCd) && "XML".equals(adptrMsgType)) {
//    	            			//KBMessage resKbmsg = KBMessageUtil.convert(resMessage);
//    	            			STDMessageParser parser = STDMessageParserFactory.createPaserFactory(adptrMsgType);
//    	            			if(parser == null) throw new Exception("KBMessageParser not found - " + adptrMsgType);
//    	            			STDMessage resKbmsg = parser.convert(resMessage);
//    	            			
//    	            			String errCd = resKbmsg.getKBCommon().getErrcd();
//    	            			
//    	            			if(errCd == null || errCd.trim().length() == 0) {
//    	            				result = "1";
//    	            			}
//    	            			else {
//    	            				result = "0";
//    	            			}
//    	            			logger.warn(this.name + "] " + vo.getEvntRecvSysName() + " 응답메시지 KB표준 에러코드 ["+errCd+"]");
//    	            		}
//    	            		else {
//	    	            		if(resMessage.startsWith("succeeded")) {
//	    	            			result = "1";
//	    	            		}
//	    	            		else {
//	    	            			result = "0";
//	    	            		}
//    	            		}
//    	            	}
//    	            	else {
//    	            		logger.warn(this.name + "] 응답메시지  NULL");
//    	            		result = "0";
//    	            	}
//    	            }
//    	            
//                } catch(Exception e) {
//                	if (logger.isError()) {
//                		logger.warn(this.name + "] 이벤트 송신어댑터("+vo.getAdptrBzwkGroupName()+")가 정상이 아닙니다. ", e);
//                	}
//                	result = "0";
//                }
//        		//--------------------------------------------------------------------
//        		
//        		// 3. Event Result Logging
//        		recvDateTime = DatetimeUtil.getCurrentDateTime(); // getCurrentTimeMillis
//        		dao.addEventLog(vo.getEvntRecvSysName(), eventStatus, sendDateTime, recvDateTime, result);
//        	}
//            if (logger.isWarn()) logger.warn(this.name + " Finished");
//            
//        } catch (Exception e){
//            String rspErrorCode = "RECEAIMIM002";
//            String msg = makeException(rspErrorCode, e);
//            if (logger.isError()) logger.error(msg, e);
//            throw new CommandException(msg);
//        }
//        return "success";
//    }
//    
//    private STDMessage setKBMessageDefaultValue(STDMessage kbmessage) {
//    	
//		String currDate = DatetimeUtil.getCurrentDate();
//		
//		kbmessage.getKBHeader().setTranBaseYmd(currDate);
//
//		String guid = UUIDGenerator.getGUID(kbmessage.getKBCommon().getGroupCoCd());
//		kbmessage.getKBHeader().setGuIdNo(guid);
//		// 전문형식 - DEFAULT(1)
//		kbmessage.getKBHeader().setTelgmFmatDstcd("1");
//				
//        // 거래유형구분 - DEFAULT(1)
//        kbmessage.getKBCommon().setTranPtrnDstcd("1");
//        // 리바운드 거래여부 - DEFAULT(0)
//        kbmessage.getKBCommon().setRbndTranYn("0");
//        
//        // 은행코드 - 004
//        kbmessage.getKBCommon().setBnkCd("004");
//        // 거래부점코드 - 1706
//        kbmessage.getKBCommon().setTranBrncd ("1706");
//        
//        // 중계채널구분코드 - 02 (EAI)
//        kbmessage.getKBCommon().setRelayChnlDstcd("02");
//        
//        // 채널구분코드
//        String chnlDstcd = kbmessage.getKBCommon().getChnlDstcd();
//        if(chnlDstcd == null || chnlDstcd.trim().length() == 0) {
//        	kbmessage.getKBCommon().setChnlDstcd ("06");
//        }
//        
//        // 채널세부업무구분코드
//        String chnlDBzwkDstcd = kbmessage.getKBCommon().getChnlDBzwkDstcd();
//        if(chnlDBzwkDstcd == null || chnlDBzwkDstcd.trim().length() == 0) {
//        	kbmessage.getKBCommon().setChnlDBzwkDstcd ("00");
//        }
//        
//        // 매체구분코드
//        String mdiaDstcd = kbmessage.getKBCommon().getMdiaDstcd();
//        if(mdiaDstcd == null || mdiaDstcd.trim().length() == 0) {
//        	kbmessage.getKBCommon().setMdiaDstcd ("00");
//        }
//        //---------------------------------------
//        
//        // 언어구분코드 - KOR : 2008.07.16
//        kbmessage.getKBCommon().setLangDstcd ("KOR");
//        // 단말번호 - 000
//        kbmessage.getKBCommon().setTrmno     ("000");
//        // 사용자직원번호 - 0000000
//        kbmessage.getKBCommon().setUserEmpid ("0000000");
//                
//        //---------------------------------------------------
//        // KB메시지 입력메시지정보 Default
//		//---------------------------------------------------
//		// 입력메시지유형구분코드 - DEFAULT(11)
//        kbmessage.getKBCommon().setInptMsgPtrnDstcd("11");
//        
//        // 2009.01.05 한진호대리 요청사항
//        kbmessage.getKBCommon().setInptMsgSerno("000");  // (3 ) 입력메시지일련번호
//        
//        // 입력메시지 작성일시 (20)- 전문작성일시
//        kbmessage.getKBCommon().setInptMsgWritYms(DatetimeUtil.getCurrentTime()+"000");
//        
//        //---------------------------------------------------
//        // KB메시지 승인정보 Default
//		// 2008.05.21 강길수차장 요청
//        //---------------------------------------------------
//        // 승인완료구분코드 - 0
//        kbmessage.getKBCommon().setAthorFnshDstcd ("0");
//        // 책임자승인구분코드 - 0
//        kbmessage.getKBCommon().setSpvsrAthorDstcd ("0");
//        //---------------------------------------------------
//        
//        //---------------------------------------------------
//        // KB메시지 전행업무공통부 Default
//		// 2008.07.10 강길수차장 요청
//        //---------------------------------------------------
//        // (8 ) 기산년월일
//        kbmessage.getKBCommon().setIdtrek("00000000");
//        //(3 ) SOD영업점유형
//        kbmessage.getKBCommon().setSodBbrnPtrnDstcd("000")   ; 
//        //(2 ) SOD사용자유형
//        kbmessage.getKBCommon().setSodUserPtrnDstcd("00"); 
//    	//(1 ) 입출가능여부
//        kbmessage.getKBCommon().setInotAbilYn("0"); 
//        
//        // (1 ) 무자원대체가능사용자여부 : 2008.07.16
//        kbmessage.getKBCommon().setNoRtaUserYn("0"); 
//        
//        // (1 ) 거래중단요청여부 : 2008.07.16
//        kbmessage.getKBCommon().setTranDscnDmndYn("0"); 
//        
//        // (1) 취소유형코드 : 2008.07.16
//        kbmessage.getKBCommon().setCnclPtrnDstcd("0");
//
//        // (1 ) 개별데이터편집여부 : 2008.07.16
//        kbmessage.getKBCommon().setIdiviDataEdtYn("1");
//    	return kbmessage;
//    	
//    }
//
////	   public static void main(String args[]) throws Exception {
////	   test();
////}
//
//// private static void test() throws Exception {
////        String date = "prepare20090708";
////        Command command = new CDEventCommand("ChangeDateCommand");
////        command.setArgs(date);
////        AgentUtil.broadcast(command);
////    }
//} 
