/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEWCA0010001TPMA
*	ソースファイル名：JEWCA0010001TPMA.java
*	作成者			：富士通
*	日付			：2012年02月16日
*＜機能概要＞
*	宅内機器一覧照会(4)用独自処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*	ｖ32.00.00  2017/05/26  FJ)河邊     【OM-2017-0000488】オープンカーソルエラー
*
********************************************************************************/
package eo.ejb.cbs.mainproc;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.Hashtable;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.common.constant.JWCStrConst;
import eo.common.constant.JZM0171Constant;
import eo.ejb.common.JCCModelCommon;
import eo.ejb.common.JWCCtrlTnInfo;
import eo.ejb.common.JWCGetCdNameUtil;
import eo.ejb.cbm.entity.WC0011ETMsg;
import eo.ejb.cbs.cbsmsg.EWCA0010001CBSMsg;
import eo.ejb.cbs.cbsmsg.EWCA0010001CBSMsg1List;

public class JEWCA0010001TPMA implements TemplateMainHandler {
	
	
	// コンストラクタです。
	public JEWCA0010001TPMA() 
	{
		
	}
	
	// コマンド実行部品用
	public static void ctrlTnInfo(CAANMsg inCBSMsg, AgentDispatchContext inContext) 
	{
		Hashtable<String, Object > serviceMap = new Hashtable<String, Object>();
		
		
		// ＫＥＹ＿宅内機器型式コード
		String tk_mk1_cd = inCBSMsg.getString(EWCA0010001CBSMsg.KEY_TK_MDL_CD);
		
		if(tk_mk1_cd != null)
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_TK_MDL_CD, tk_mk1_cd);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_TK_MDL_CD, "");
		}
		
		// ＫＥＹ＿機器製造番号
		String kk_seizo_no = inCBSMsg.getString(EWCA0010001CBSMsg.KEY_KK_SEIZO_NO);
		
		
		if(kk_seizo_no != null)
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_KK_SEIZO_NO, kk_seizo_no);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_KK_SEIZO_NO, "");
		}
		

		// ＫＥＹ＿ＳＴＢＩＤ
		String stbid= inCBSMsg.getString(EWCA0010001CBSMsg.KEY_STBID);

		if(stbid != null)
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STBID, stbid);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STBID, "");
		}
		
		
		// ＫＥＹ＿宅内機器種別コード
		String tk_sbt_cd = inCBSMsg.getString(EWCA0010001CBSMsg.KEY_TK_SBT_CD);
		
		if(tk_sbt_cd != null)
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_TK_SBT_CD, tk_sbt_cd);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_TK_SBT_CD, "");
		}
		
		//operatorID
		String operatorId = inCBSMsg.getString(EWCA0010001CBSMsg.OPERATORID);
		if(operatorId != null)
		{
			serviceMap.put(JWCCtrlTnInfo.OPERATORID, operatorId);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.OPERATORID, "");
		}
		
		//operatorDateTime
		String operatoDateTime = inCBSMsg.getString(EWCA0010001CBSMsg.OPERATEDATETIME);
		if(operatoDateTime != null)
		{
			serviceMap.put(JWCCtrlTnInfo.OPERATEDATETIME, operatoDateTime);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.OPERATEDATETIME, "");
		}
		
		
		// 宅内機器コマンド発行部品のスタブ用、
		int str_flag = Integer.parseInt(JCCModelCommon.getApplicationConst(JWCStrConst.TN_FLAG));
		JWCCtrlTnInfo instance = JWCCtrlTnInfo.getInstance(str_flag);
		
		// テーブルのコネクションを取得するして、部品に受け渡しを行う。
		Connection con = JSYejbConnection.getConnection(WC0011ETMsg.getTableName());
		instance.setConnection(con);
		
		try 
		{
			CAANMsg[] l_ewca001001csvmsglist = null;

			// 宅内機器連携部品を呼び出す。
			Hashtable ret = instance.ctrlTnInfo_WCA0001(serviceMap);
			
			if(ret.get(JWCStrConst.CMD_RESULT_CD) != null && ret.get(JWCStrConst.CMD_RESULT_CD).equals("1"))
			{
				inCBSMsg.set(EWCA0010001CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
				return;
			}	
					
			inCBSMsg.set(EWCA0010001CBSMsg.ERROR_LEVEL, ret.get("errorLevel"));
			inCBSMsg.set(EWCA0010001CBSMsg.RETURN_CD, ret.get("returnCode"));
			inCBSMsg.set(EWCA0010001CBSMsg.RETURN_MESSAGE, ret.get("returnMessage"));
			
			//エラーレベルが000より大きければ処理を終了する。
			if(ret.get("errorLevel") != null && !((String)ret.get("errorLevel")).equals("000") && !((String)ret.get("errorLevel")).equals("444")) {
				inCBSMsg.set(EWCA0010001CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
				return;
			}
			//リターンコードにあわせてステータスをセットする
			if(ret.get("returnCode") != null && !((String)ret.get("returnCode")).equals("0000")) 
			{
				if(("1000").equals((String)ret.get("returnCode")) || 
					("1050").equals((String)ret.get("returnCode")))
				{
					inCBSMsg.set(EWCA0010001CBSMsg.STATUS, StatusCodes.SINGLEDATA_ERR);
				}
				else if(("1100").equals((String)ret.get("returnCode")))
				{
					inCBSMsg.set(EWCA0010001CBSMsg.STATUS, StatusCodes.ITEM_RELATION_ERR);
				}
				else
				{
					inCBSMsg.set(EWCA0010001CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
				}
				

				if(ret.get("STB_TK_MDL_CD_ERR") != null)
				{
					inCBSMsg.set(EWCA0010001CBSMsg.KEY_TK_MDL_CD_ERR,(String)ret.get("STB_TK_MDL_CD_ERR"));
				}
				if(ret.get("STB_KK_SEIZO_NO_ERR") != null)
				{
					inCBSMsg.set(EWCA0010001CBSMsg.KEY_KK_SEIZO_NO_ERR,(String)ret.get("STB_KK_SEIZO_NO_ERR"));
				}
				if(ret.get("STBID_ERR") != null)
				{
					inCBSMsg.set(EWCA0010001CBSMsg.KEY_STBID_ERR,(String)ret.get("STBID_ERR"));
				}
				if(ret.get("STB_TK_SBT_CD_ERR") != null)
				{
					inCBSMsg.set(EWCA0010001CBSMsg.KEY_TK_SBT_CD_ERR,(String)ret.get("STB_TK_SBT_CD_ERR"));
				}
				return;
			}
			// 取得した戻り値を元に、inCBSMsgのアウト項目に値を設定して返す
			ArrayList<Hashtable<String, Object>> list = (ArrayList<Hashtable<String, Object>>)ret.get(EWCA0010001CBSMsg.EWCA0010001CBSMSG1LIST);
			// うまくいけば戻りの電文を設定して終了する。
			l_ewca001001csvmsglist =  new CAANMsg[list.size()];
			if(list != null && !list.isEmpty())
			{

				int listCnt = 0;
				for(int i = 0 ; i < list.size() ; i ++)
				{
					Hashtable data = list.get(i);
					if(!data.isEmpty())
					{
						listCnt++;
					};
					
					CAANMsg msg = l_ewca001001csvmsglist[i];
					msg = new CAANMsg("eo.ejb.cbs.cbsmsg.EWCA0010001CBSMsg1List");
					
					
					l_ewca001001csvmsglist[i] = msg;
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_TK_MDL_CD, (String)data.get(EWCA0010001CBSMsg1List.STB_TK_MDL_CD));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_KK_SEIZO_NO, (String)data.get(EWCA0010001CBSMsg1List.STB_KK_SEIZO_NO));
					// 
					msg.set(EWCA0010001CBSMsg1List.STBID, (String)data.get(EWCA0010001CBSMsg1List.STBID));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_STAT_CD, (String)data.get(EWCA0010001CBSMsg1List.STB_STAT_CD));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_NAIZOCAS_CD, (String)data.get(EWCA0010001CBSMsg1List.STB_NAIZOCAS_CD));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_MATSU_YO_GRPID1, (String)data.get(EWCA0010001CBSMsg1List.STB_MATSU_YO_GRPID1));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_MATSU_YO_GRPID2, (String)data.get(EWCA0010001CBSMsg1List.STB_MATSU_YO_GRPID2));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_MATSU_YO_GRPID3, (String)data.get(EWCA0010001CBSMsg1List.STB_MATSU_YO_GRPID3));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_MATSU_YO_GRPID4, (String)data.get(EWCA0010001CBSMsg1List.STB_MATSU_YO_GRPID4));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_MATSU_YO_GRPID5, (String)data.get(EWCA0010001CBSMsg1List.STB_MATSU_YO_GRPID5));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_MATSU_YO_GRPID6, (String)data.get(EWCA0010001CBSMsg1List.STB_MATSU_YO_GRPID6));
					// 
					msg.set(EWCA0010001CBSMsg1List.KR_KEY_STA_YMD, (String)data.get(EWCA0010001CBSMsg1List.KR_KEY_STA_YMD));
					// 
					msg.set(EWCA0010001CBSMsg1List.CTL_AREA_CD, (String)data.get(EWCA0010001CBSMsg1List.CTL_AREA_CD));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_MAKER_KOYU_CTL_MDL_CD, (String)data.get(EWCA0010001CBSMsg1List.STB_MAKER_KOYU_CTL_MDL_CD));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_MAKER_KK_MDL_NO, (String)data.get(EWCA0010001CBSMsg1List.STB_MAKER_KK_MDL_NO));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_MDL_NM, (String)data.get(EWCA0010001CBSMsg1List.STB_MDL_NM));
					// 
					msg.set(EWCA0010001CBSMsg1List.CCAS_TK_MDL_CD, (String)data.get(EWCA0010001CBSMsg1List.CCAS_TK_MDL_CD));
					// 
					msg.set(EWCA0010001CBSMsg1List.CCAS_KK_SEIZO_NO, (String)data.get(EWCA0010001CBSMsg1List.CCAS_KK_SEIZO_NO));
					// 
					msg.set(EWCA0010001CBSMsg1List.CCAS_CARD_STAT_CD, (String)data.get(EWCA0010001CBSMsg1List.CCAS_CARD_STAT_CD));
					// 
					msg.set(EWCA0010001CBSMsg1List.CCAS_CAS_CARD_SBT_CD, (String)data.get(EWCA0010001CBSMsg1List.CCAS_CAS_CARD_SBT_CD));
					// 
					msg.set(EWCA0010001CBSMsg1List.BCAS_TK_MDL_CD, (String)data.get(EWCA0010001CBSMsg1List.BCAS_TK_MDL_CD));
					// 
					msg.set(EWCA0010001CBSMsg1List.BCAS_KK_SEIZO_NO, (String)data.get(EWCA0010001CBSMsg1List.BCAS_KK_SEIZO_NO));
					// 
					msg.set(EWCA0010001CBSMsg1List.BCAS_CAS_CARD_SBT_CD, (String)data.get(EWCA0010001CBSMsg1List.BCAS_CAS_CARD_SBT_CD));
					// 
					msg.set(EWCA0010001CBSMsg1List.STB_UPD_DTTM, (String)data.get(EWCA0010001CBSMsg1List.STB_UPD_DTTM));
					// 
					msg.set(EWCA0010001CBSMsg1List.CCAS_CAST_UPD_DTTM, (String)data.get(EWCA0010001CBSMsg1List.CCAS_CAST_UPD_DTTM));
					// 
					msg.set(EWCA0010001CBSMsg1List.BCAS_CAST_UPD_DTTM, (String)data.get(EWCA0010001CBSMsg1List.BCAS_CAST_UPD_DTTM));

				}
				if(listCnt != 0)
				{
					inCBSMsg.set(EWCA0010001CBSMsg.EWCA0010001CBSMSG1LIST, l_ewca001001csvmsglist);
				}
			}
			
		}
		catch(Exception e) 
		{
			// エラーを返却する必要がある
			e.printStackTrace();
			inCBSMsg.set(EWCA0010001CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
//			inCBSMsg.set(EWCA0010001CBSMsg.STB_MSG_ORDER_STAT , String.format("%03d", Integer.parseInt(JWCStrConst.CD_DIV_WATCH_ORDER_FLG_ABNORMAL))); // 視聴制御オーダステータス
		}
		
// OM-2017-0000488 2017/05/26 ADD START
		finally
		{
			// 資源の解放
			if (con != null)
			{
				CAANConnectionMgr.getInstance().close(con);
			}
		}
// OM-2017-0000488 2017/05/26 ADD END
	}
	
	
	// コマンド実行部品用
	public static void getCdName(CAANMsg inCBSMsg, AgentDispatchContext inContext) 
	{
		// コード名称取得用コード種別コード
		String getCd = "";
		// コード名称取得名称
		String getNM = "";
		
		try 
		{
			
			CAANMsg[] templateArray = inCBSMsg.getCAANMsgList(EWCA0010001CBSMsg.EWCA0010001CBSMSG1LIST);

			if (templateArray != null) {
				for (int i = 0; i < templateArray.length; i++) {
					CAANMsg childTemplate = templateArray[i];
					if (!childTemplate.isNull(EWCA0010001CBSMsg1List.STB_STAT_CD) && !"".equals(childTemplate.getString(EWCA0010001CBSMsg1List.STB_STAT_CD))) {
						getCd = childTemplate.getString(EWCA0010001CBSMsg1List.STB_STAT_CD);
						getNM = JWCGetCdNameUtil.getCdName(JZM0171Constant.CD00363, getCd);
						childTemplate.set(EWCA0010001CBSMsg1List.STB_STAT_NM, getNM);
						getCd = "";
						getNM = "";
					}
					if (!childTemplate.isNull(EWCA0010001CBSMsg1List.STB_NAIZOCAS_CD) && !"".equals(childTemplate.getString(EWCA0010001CBSMsg1List.STB_NAIZOCAS_CD))) {
						getCd = childTemplate.getString(EWCA0010001CBSMsg1List.STB_NAIZOCAS_CD);
						getNM = JWCGetCdNameUtil.getCdName(JZM0171Constant.CD00368, getCd);
						childTemplate.set(EWCA0010001CBSMsg1List.STB_NAIZOCAS_NM, getNM);
						getCd = "";
						getNM = "";
					}
					if (!childTemplate.isNull(EWCA0010001CBSMsg1List.CCAS_CARD_STAT_CD) && !"".equals(childTemplate.getString(EWCA0010001CBSMsg1List.CCAS_CARD_STAT_CD))) {
						getCd = childTemplate.getString(EWCA0010001CBSMsg1List.CCAS_CARD_STAT_CD);
						getNM = JWCGetCdNameUtil.getCdName(JZM0171Constant.CD00364, getCd);
						childTemplate.set(EWCA0010001CBSMsg1List.CCAS_CARD_STAT_NM, getNM);
						getCd = "";
						getNM = "";
					}
				}
			}
			
		}
		catch(Exception e) 
		{
			// エラーを返却する必要がある
			e.printStackTrace();
		}
	}

}
