/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEWCA0010003TPMA
*	ソースファイル名：JEWCA0010003TPMA.java
*	作成者			：富士通
*	日付			：2012年02月16日
*＜機能概要＞
*	STB情報更新用独自処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ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.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.ejb.common.JCCModelCommon;
import eo.ejb.common.JWCCtrlTnInfo;
import eo.ejb.cbm.entity.WC0011ETMsg;
import eo.ejb.cbs.cbsmsg.EWCA0010003CBSMsg;

public class JEWCA0010003TPMA implements TemplateMainHandler {
	
	
	// コンストラクタです。
	public JEWCA0010003TPMA() 
	{
		
	}
	
	// コマンド実行部品用
	public static void ctrlTnInfo(CAANMsg inCBSMsg, AgentDispatchContext inContext) 
	{
		Hashtable<String, Object > serviceMap = new Hashtable<String, Object>();
		
		
		// ＳＴＢ宅内機器型式コード
		String stb_tk_mdl_cd = inCBSMsg.getString(EWCA0010003CBSMsg.STB_TK_MDL_CD);
		
		if(stb_tk_mdl_cd != null)
		{
			serviceMap.put(JWCCtrlTnInfo.TK_MDL_CD, stb_tk_mdl_cd);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.TK_MDL_CD, "");
		}
		
		// ＳＴＢ機器製造番号
		String stb_kk_seizo_no = inCBSMsg.getString(EWCA0010003CBSMsg.STB_KK_SEIZO_NO);
		
		
		if(stb_kk_seizo_no != null)
		{
			serviceMap.put(JWCCtrlTnInfo.KK_SEIZO_NO, stb_kk_seizo_no);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.KK_SEIZO_NO, "");
		}
		
		// ＳＴＢ宅内機器種別コード
		String stb_tk_sbt_cd = inCBSMsg.getString(EWCA0010003CBSMsg.STB_TK_SBT_CD);
		
		if(stb_tk_sbt_cd != null)
		{
			serviceMap.put(JWCCtrlTnInfo.TK_SBT_CD, stb_tk_sbt_cd);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.TK_SBT_CD, "");
		}
		
		// ＳＴＢステータスコード
		String stb_stat_cd = inCBSMsg.getString(EWCA0010003CBSMsg.STB_STAT_CD);
		
		if(stb_stat_cd != null)
		{
			serviceMap.put(JWCCtrlTnInfo.STB_STAT_CD, stb_stat_cd);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.STB_STAT_CD, "");
		}

		// ＳＴＢ松下用グループＩＤ１
		String stb_matsu_yo_grpid1 = inCBSMsg.getString(EWCA0010003CBSMsg.STB_MATSU_YO_GRPID1);
		
		if(stb_matsu_yo_grpid1 != null)
		{
			serviceMap.put(JWCCtrlTnInfo.STB_MATSU_YO_GRPID1, stb_matsu_yo_grpid1);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.STB_MATSU_YO_GRPID1, "");
		}

		// ＳＴＢ松下用グループＩＤ２
		String stb_matsu_yo_grpid2 = inCBSMsg.getString(EWCA0010003CBSMsg.STB_MATSU_YO_GRPID2);
		
		if(stb_matsu_yo_grpid2 != null)
		{
			serviceMap.put(JWCCtrlTnInfo.STB_MATSU_YO_GRPID2, stb_matsu_yo_grpid2);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.STB_MATSU_YO_GRPID2, "");
		}

		// ＳＴＢ松下用グループＩＤ３
		String stb_matsu_yo_grpid3 = inCBSMsg.getString(EWCA0010003CBSMsg.STB_MATSU_YO_GRPID3);
		
		if(stb_matsu_yo_grpid2 != null)
		{
			serviceMap.put(JWCCtrlTnInfo.STB_MATSU_YO_GRPID3, stb_matsu_yo_grpid3);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.STB_MATSU_YO_GRPID3, "");
		}

		// ＳＴＢ松下用グループＩＤ４
		String stb_matsu_yo_grpid4 = inCBSMsg.getString(EWCA0010003CBSMsg.STB_MATSU_YO_GRPID4);
		
		if(stb_matsu_yo_grpid4 != null)
		{
			serviceMap.put(JWCCtrlTnInfo.STB_MATSU_YO_GRPID4, stb_matsu_yo_grpid4);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.STB_MATSU_YO_GRPID4, "");
		}

		// ＳＴＢ松下用グループＩＤ５
		String stb_matsu_yo_grpid5 = inCBSMsg.getString(EWCA0010003CBSMsg.STB_MATSU_YO_GRPID5);
		
		if(stb_matsu_yo_grpid5 != null)
		{
			serviceMap.put(JWCCtrlTnInfo.STB_MATSU_YO_GRPID5, stb_matsu_yo_grpid5);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.STB_MATSU_YO_GRPID5, "");
		}

		// ＳＴＢ松下用グループＩＤ６
		String stb_matsu_yo_grpid6 = inCBSMsg.getString(EWCA0010003CBSMsg.STB_MATSU_YO_GRPID6);
		
		if(stb_matsu_yo_grpid6 != null)
		{
			serviceMap.put(JWCCtrlTnInfo.STB_MATSU_YO_GRPID6, stb_matsu_yo_grpid6);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.STB_MATSU_YO_GRPID6, "");
		}

		// 制御エリアコード
		String ctl_area_cd = inCBSMsg.getString(EWCA0010003CBSMsg.CTL_AREA_CD);
		
		if(ctl_area_cd != null)
		{
			serviceMap.put(JWCCtrlTnInfo.CTL_AREA_CD, ctl_area_cd);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.CTL_AREA_CD, "");
		}

		// Ｃ−ＣＡＳカードステータスコード
		String ccas_card_stat_cd = inCBSMsg.getString(EWCA0010003CBSMsg.CCAS_CARD_STAT_CD);
		
		if(ccas_card_stat_cd != null)
		{
			serviceMap.put(JWCCtrlTnInfo.CCAS_CARD_STAT_CD, ccas_card_stat_cd);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.CCAS_CARD_STAT_CD, "");
		}

		// ＳＴＢ宅内機器更新日付
		String stb_upd_dttm = inCBSMsg.getString(EWCA0010003CBSMsg.STB_UPD_DTTM);
		
		if(stb_upd_dttm != null)
		{
			serviceMap.put(JWCCtrlTnInfo.STB_UPD_DTTM, stb_upd_dttm);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.STB_UPD_DTTM, "");
		}

		// Ｃ−ＣＡＳ宅内機器更新日付
		String ccas_upd_dttm = inCBSMsg.getString(EWCA0010003CBSMsg.CCAS_UPD_DTTM);
		
		if(ccas_upd_dttm != null)
		{
			serviceMap.put(JWCCtrlTnInfo.C_CAS_UPD_DTTM, ccas_upd_dttm);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.C_CAS_UPD_DTTM, "");
		}
		
		
		//operatorID
		String operatorId = inCBSMsg.getString(EWCA0010003CBSMsg.OPERATORID);
		if(operatorId != null)
		{
			serviceMap.put(JWCCtrlTnInfo.OPERATORID, operatorId);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.OPERATORID, "");
		}
		
		//operatorDateTime
		String operatoDateTime = inCBSMsg.getString(EWCA0010003CBSMsg.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_WCA0003(serviceMap);
		
			// 取得した戻り値を元に、inCBSMsgのアウト項目に値を設定して返す
			// うまくいけば戻りの電文を設定して終了する。
			l_ewca001001csvmsglist =  new CAANMsg[ret.size()];
//			Hashtable data = (Hashtable)ret.get(EWCA0010003CBSMsg.class.getName());
			
			
//			CAANMsg msg =  new CAANMsg("eo.ejb.cbs.cbsmsg.EWCA0010003CBSMsg");
//			// 
//			msg.set(EWCA0010003CBSMsg.ERROR_LEVEL, (String)data.get(EWCA0010003CBSMsg.ERROR_LEVEL));
//			// 
//			msg.set(EWCA0010003CBSMsg.RETURN_CD, (String)data.get(EWCA0010003CBSMsg.RETURN_CD));
//			// 
//			msg.set(EWCA0010003CBSMsg.RETURN_MESSAGE, (String)data.get(EWCA0010003CBSMsg.RETURN_MESSAGE));

			if(ret.get(JWCStrConst.CMD_RESULT_CD) != null && ret.get(JWCStrConst.CMD_RESULT_CD).equals("1"))
			{
				inCBSMsg.set(EWCA0010003CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
				return;
			}
			
			inCBSMsg.set(EWCA0010003CBSMsg.ERROR_LEVEL, ret.get("errorLevel"));
			inCBSMsg.set(EWCA0010003CBSMsg.RETURN_CD, ret.get("returnCode"));
			inCBSMsg.set(EWCA0010003CBSMsg.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(EWCA0010003CBSMsg.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(EWCA0010003CBSMsg.STATUS, StatusCodes.SINGLEDATA_ERR);
				}
				else if(("1100").equals((String)ret.get("returnCode")))
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STATUS, StatusCodes.ITEM_RELATION_ERR);
				}
				else
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
				}
				

				if(ret.get("STB_TK_MDL_CD_ERR") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STB_TK_MDL_CD_ERR,(String)ret.get("STB_TK_MDL_CD_ERR"));
				}
				if(ret.get("STB_KK_SEIZO_NO_ERR") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STB_KK_SEIZO_NO_ERR,(String)ret.get("STB_KK_SEIZO_NO_ERR"));
				}
				if(ret.get("STB_TK_SBT_CD_ERR") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STB_TK_SBT_CD_ERR,(String)ret.get("STB_TK_SBT_ERR_CD"));
				}
				if(ret.get("STB_UPD_DTTM_ERR_CD") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STB_UPD_DTTM_ERR,(String)ret.get("STB_UPD_DTTM_ERR_CD"));
				}
				if(ret.get("CCAS_CAST_UPD_DTTM_ERR_CD") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.CCAS_UPD_DTTM_ERR,(String)ret.get("CCAS_CAST_UPD_DTTM_ERR_CD"));
				}
				if(ret.get("STB_STAT_ERR_CD") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STB_STAT_CD_ERR,(String)ret.get("STB_STAT_ERR_CD"));
				}
				if(ret.get("STB_MATSU_YO_GRPID1_ERR_CD") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STB_MATSU_YO_GRPID1_ERR,(String)ret.get("STB_MATSU_YO_GRPID1_ERR_CD"));
				}
				if(ret.get("STB_MATSU_YO_GRPID2_ERR_CD") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STB_MATSU_YO_GRPID2_ERR,(String)ret.get("STB_MATSU_YO_GRPID2_ERR_CD"));
				}
				if(ret.get("STB_MATSU_YO_GRPID3_ERR_CD") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STB_MATSU_YO_GRPID3_ERR,(String)ret.get("STB_MATSU_YO_GRPID3_ERR_CD"));
				}
				if(ret.get("STB_MATSU_YO_GRPID4_ERR_CD") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STB_MATSU_YO_GRPID4_ERR,(String)ret.get("STB_MATSU_YO_GRPID4_ERR_CD"));
				}
				if(ret.get("STB_MATSU_YO_GRPID5_ERR_CD") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STB_MATSU_YO_GRPID5_ERR,(String)ret.get("STB_MATSU_YO_GRPID5_ERR_CD"));
				}
				if(ret.get("STB_MATSU_YO_GRPID6_ERR_CD") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.STB_MATSU_YO_GRPID6_ERR,(String)ret.get("STB_MATSU_YO_GRPID6_ERR_CD"));
				}
				if(ret.get("CTL_AREA_ERR_CD") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.CTL_AREA_CD_ERR,(String)ret.get("CTL_AREA_ERR_CD"));
				}
				if(ret.get("CCAS_CARD_STAT_ERR_CD") != null)
				{
					inCBSMsg.set(EWCA0010003CBSMsg.CCAS_CARD_STAT_CD_ERR,(String)ret.get("CCAS_CARD_STAT_ERR_CD"));
				}
				return;
			}
			
			inCBSMsg.set(EWCA0010003CBSMsg.class.getName(), l_ewca001001csvmsglist);
		}
		catch(Exception e) 
		{
			// エラーを返却する必要がある
			e.printStackTrace();
			inCBSMsg.set(EWCA0010003CBSMsg.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
	}

}
