/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEWCA0010004TPMA
*	ソースファイル名：JEWCA0010004TPMA.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.JPCModelConstant;
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.EWCA0010004CBSMsg;
import eo.ejb.cbs.cbsmsg.EWCA0010004CBSMsg1List;

public class JEWCA0010004TPMA implements TemplateMainHandler {
	
	
	// コンストラクタです。
	public JEWCA0010004TPMA() 
	{
		
	}
	
	// コマンド実行部品用
	public static void ctrlTnInfo(CAANMsg inCBSMsg, AgentDispatchContext inContext) 
	{
		Hashtable<String, Object > serviceMap = new Hashtable<String, Object>();
		
		
		// ＫＥＹ＿ＳＴＢ松下用グループＩＤ１
		String stb_grpcd_1 = inCBSMsg.getString(EWCA0010004CBSMsg.KEY_STB_MATSU_YO_GRPID1);
		
		if(stb_grpcd_1 != null)
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STB_MATSU_YO_GRPID1, stb_grpcd_1);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STB_MATSU_YO_GRPID1, "");
		}
		
		// ＫＥＹ＿ＳＴＢ松下用グループＩＤ２
		String stb_grpcd_2 = inCBSMsg.getString(EWCA0010004CBSMsg.KEY_STB_MATSU_YO_GRPID2);
		
		if(stb_grpcd_2 != null)
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STB_MATSU_YO_GRPID2, stb_grpcd_2);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STB_MATSU_YO_GRPID2, "");
		}
		

		// ＫＥＹ＿ＳＴＢ松下用グループＩＤ３
		String stb_grpcd_3 = inCBSMsg.getString(EWCA0010004CBSMsg.KEY_STB_MATSU_YO_GRPID3);
		
		if(stb_grpcd_3 != null)
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STB_MATSU_YO_GRPID3, stb_grpcd_3);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STB_MATSU_YO_GRPID3, "");
		}
		
		// ＫＥＹ＿ＳＴＢ松下用グループＩＤ４
		String stb_grpcd_4 = inCBSMsg.getString(EWCA0010004CBSMsg.KEY_STB_MATSU_YO_GRPID4);
		
		if(stb_grpcd_4 != null)
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STB_MATSU_YO_GRPID4, stb_grpcd_4);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STB_MATSU_YO_GRPID4, "");
		}
		
		// ＫＥＹ＿ＳＴＢ松下用グループＩＤ５
		String stb_grpcd_5 = inCBSMsg.getString(EWCA0010004CBSMsg.KEY_STB_MATSU_YO_GRPID5);
		
		if(stb_grpcd_5 != null)
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STB_MATSU_YO_GRPID5, stb_grpcd_5);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STB_MATSU_YO_GRPID5, "");
		}
		
		// ＫＥＹ＿ＳＴＢ松下用グループＩＤ６
		String stb_grpcd_6 = inCBSMsg.getString(EWCA0010004CBSMsg.KEY_STB_MATSU_YO_GRPID6);
		
		if(stb_grpcd_6 != null)
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STB_MATSU_YO_GRPID6, stb_grpcd_6);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.KEY_STB_MATSU_YO_GRPID6, "");
		}
		
		// 表示件数
		String dsp_num = inCBSMsg.getString(EWCA0010004CBSMsg.DISPLAY_NUM);
		
		if(dsp_num != null)
		{
			serviceMap.put(JWCCtrlTnInfo.DSP_NUM, dsp_num);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.DSP_NUM, "");
		}
		
		// ページ番号
		String page_no = inCBSMsg.getString(EWCA0010004CBSMsg.DISPLAY_PAGE_NUM);
		
		if(page_no != null)
		{
			serviceMap.put(JWCCtrlTnInfo.PAGE_NO, page_no);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.PAGE_NO, "");
		}
		
		// 最大取得件数 
		String total_search_num = inCBSMsg.getString(EWCA0010004CBSMsg.MAX_SEARCH_NUM);
		
		if(total_search_num != null)
		{
			serviceMap.put(JWCCtrlTnInfo.MAX_STKU_CNT, total_search_num);
		}
		else
		{
			serviceMap.put(JWCCtrlTnInfo.MAX_STKU_CNT, "");
		}

	//operatorID
		String operatorId = inCBSMsg.getString(EWCA0010004CBSMsg.OPERATORID);
		if(operatorId != null)
		{
			serviceMap.put(EWCA0010004CBSMsg.OPERATORID, operatorId);
		}
		else
		{
			serviceMap.put(EWCA0010004CBSMsg.OPERATORID, "");
		}
		
		//operatorDateTime
		String operatoDateTime = inCBSMsg.getString(EWCA0010004CBSMsg.OPERATEDATETIME);
		if(operatoDateTime != null)
		{
			serviceMap.put(EWCA0010004CBSMsg.OPERATEDATETIME, operatoDateTime);
		}
		else
		{
			serviceMap.put(EWCA0010004CBSMsg.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_ewca001004csvmsglist = null;

			// 宅内機器連携部品を呼び出す。
			Hashtable ret = instance.ctrlTnInfo_WCA0004(serviceMap);
			
			inCBSMsg.set(EWCA0010004CBSMsg.ERROR_LEVEL, ret.get("errorLevel"));
			inCBSMsg.set(EWCA0010004CBSMsg.RETURN_CD, ret.get("returnCode"));
			inCBSMsg.set(EWCA0010004CBSMsg.RETURN_MESSAGE, ret.get("returnMessage"));

			if(ret.get(JWCStrConst.CMD_RESULT_CD) != null && ret.get(JWCStrConst.CMD_RESULT_CD).equals("1"))
			{
				inCBSMsg.set(EWCA0010004CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
				return;
			}
				
			//エラーレベルが000より大きければ処理を終了する。
			if(ret.get("errorLevel") != null && !((String)ret.get("errorLevel")).equals("000") && !((String)ret.get("errorLevel")).equals("444")) {
				inCBSMsg.set(EWCA0010004CBSMsg.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(EWCA0010004CBSMsg.STATUS, StatusCodes.SINGLEDATA_ERR);
				}
				else if(("1100").equals((String)ret.get("returnCode")))
				{
					inCBSMsg.set(EWCA0010004CBSMsg.STATUS, StatusCodes.ITEM_RELATION_ERR);
				}
				else
				{
					inCBSMsg.set(EWCA0010004CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
				}
				

				if(ret.get("KEY_STB_MATSU_YO_GRPID1_ERR") != null)
				{
					inCBSMsg.set(EWCA0010004CBSMsg.KEY_STB_MATSU_YO_GRPID1_ERR,(String)ret.get("KEY_STB_MATSU_YO_GRPID1_ERR"));
				}
				if(ret.get("KEY_STB_MATSU_YO_GRPID2_ERR") != null)
				{
					inCBSMsg.set(EWCA0010004CBSMsg.KEY_STB_MATSU_YO_GRPID2_ERR,(String)ret.get("KEY_STB_MATSU_YO_GRPID2_ERR"));
				}
				if(ret.get("KEY_STB_MATSU_YO_GRPID3_ERR") != null)
				{
					inCBSMsg.set(EWCA0010004CBSMsg.KEY_STB_MATSU_YO_GRPID3_ERR,(String)ret.get("KEY_STB_MATSU_YO_GRPID3_ERR"));
				}
				if(ret.get("KEY_STB_MATSU_YO_GRPID4_ERR") != null)
				{
					inCBSMsg.set(EWCA0010004CBSMsg.KEY_STB_MATSU_YO_GRPID4_ERR,(String)ret.get("KEY_STB_MATSU_YO_GRPID4_ERR"));
				}
				if(ret.get("KEY_STB_MATSU_YO_GRPID5_ERR") != null)
				{
					inCBSMsg.set(EWCA0010004CBSMsg.KEY_STB_MATSU_YO_GRPID5_ERR,(String)ret.get("KEY_STB_MATSU_YO_GRPID5_ERR"));
				}
				if(ret.get("KEY_STB_MATSU_YO_GRPID6_ERR") != null)
				{
					inCBSMsg.set(EWCA0010004CBSMsg.KEY_STB_MATSU_YO_GRPID6_ERR,(String)ret.get("KEY_STB_MATSU_YO_GRPID6_ERR"));
				}
				return;
			}		
			// 取得した戻り値を元に、inCBSMsgのアウト項目に値を設定して返す
			ArrayList<Hashtable<String, Object>> list = (ArrayList<Hashtable<String, Object>>)ret.get(JWCCtrlTnInfo.EWCA0010004CBSMSG1LIST);
			// うまくいけば戻りの電文を設定して終了する。
			l_ewca001004csvmsglist =  new CAANMsg[list.size()];
			if(list != null && !list.isEmpty())
			{
				int iTotal = Integer.parseInt((String)ret.get(JWCCtrlTnInfo.TTL_NUM));
				int iDispNum = Integer.parseInt(inCBSMsg.getString(EWCA0010004CBSMsg.DISPLAY_NUM));
				int iDispPageNum = Integer.parseInt(inCBSMsg.getString(EWCA0010004CBSMsg.DISPLAY_PAGE_NUM));
				
				// 総ページ数、エラーフラグ設定
				int iSearchDivDisp =  iTotal / iDispNum;
				int iRest =  iTotal % iDispNum;
				
				// 割り切れない場合は総ページ数を増やす
				if (0 != iRest)
				{
					iSearchDivDisp ++;
				}
				inCBSMsg.set(EWCA0010004CBSMsg.TOTAL_PAGE_NUM, Integer.toString(iSearchDivDisp));
				inCBSMsg.set(EWCA0010004CBSMsg.TOTAL_SEARCH_NUM, Integer.toString(iTotal));
				
				// 検索件数が0件の場合、エラーフラグに"1"を設定して処理終了
				if (0 == iTotal)
				{
					inCBSMsg.set(EWCA0010004CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_ZERO);
					return;
				}
				// 検索件数が最大検索件数を超えた場合、エラーフラグに"2"を設定して処理終了
				if (Integer.parseInt(inCBSMsg.getString(EWCA0010004CBSMsg.MAX_SEARCH_NUM)) < iTotal)
				{
					inCBSMsg.set(EWCA0010004CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_OVERMAX);
					return;
				}
				// 表示ページに該当するデータがない場合、エラーフラグに"3"を設定して処理終了
				if (iSearchDivDisp < iDispPageNum)
				{
					inCBSMsg.set(EWCA0010004CBSMsg.SEARCH_ERR_FLG, JPCModelConstant.SEARCH_ERR_FLG_NODATA);
					return;
				}

				
				//int setNum = iEndNum - iStartNum + 1;
				//l_ewca001004csvmsglist =  new CAANMsg[setNum];

				int listCnt = 0;
				for(int i = 0 ; i < list.size() ; i ++)
					//int j = 0;
					//for(int i = iStartNum ; i <= iEndNum ; i ++)
				{
					//if(list.size() < i)
					//{
					//	break;
					//}
					Hashtable data = list.get(i);
					if(!data.isEmpty())
					{
						listCnt++;
					};
					
					CAANMsg msg = l_ewca001004csvmsglist[i];
					//CAANMsg msg = l_ewca001004csvmsglist[j];
					msg = new CAANMsg("eo.ejb.cbs.cbsmsg.EWCA0010004CBSMsg1List");
					
					l_ewca001004csvmsglist[i] = msg;
					//l_ewca001004csvmsglist[j] = msg;

					// 
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_KK_SEIZO_NO, (String)data.get(EWCA0010004CBSMsg1List.STB_KK_SEIZO_NO));
					// 
					msg.set(EWCA0010004CBSMsg1List.STBID, (String)data.get(EWCA0010004CBSMsg1List.STBID));
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_STAT_CD, (String)data.get(EWCA0010004CBSMsg1List.STB_STAT_CD));
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_NAIZOCAS_CD, (String)data.get(EWCA0010004CBSMsg1List.STB_NAIZOCAS_CD));
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_MATSU_YO_GRPID1, (String)data.get(EWCA0010004CBSMsg1List.STB_MATSU_YO_GRPID1));
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_MATSU_YO_GRPID2, (String)data.get(EWCA0010004CBSMsg1List.STB_MATSU_YO_GRPID2));
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_MATSU_YO_GRPID3, (String)data.get(EWCA0010004CBSMsg1List.STB_MATSU_YO_GRPID3));
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_MATSU_YO_GRPID4, (String)data.get(EWCA0010004CBSMsg1List.STB_MATSU_YO_GRPID4));
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_MATSU_YO_GRPID5, (String)data.get(EWCA0010004CBSMsg1List.STB_MATSU_YO_GRPID5));
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_MATSU_YO_GRPID6, (String)data.get(EWCA0010004CBSMsg1List.STB_MATSU_YO_GRPID6));
					// 
					msg.set(EWCA0010004CBSMsg1List.KR_KEY_STA_YMD, (String)data.get(EWCA0010004CBSMsg1List.KR_KEY_STA_YMD));
					// 
					msg.set(EWCA0010004CBSMsg1List.CTL_AREA_CD, (String)data.get(EWCA0010004CBSMsg1List.CTL_AREA_CD));
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_MAKER_KOYU_CTL_MDL_CD, (String)data.get(EWCA0010004CBSMsg1List.STB_MAKER_KOYU_CTL_MDL_CD));
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_MAKER_KK_MDL_NO, (String)data.get(EWCA0010004CBSMsg1List.STB_MAKER_KK_MDL_NO));
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_MDL_NM, (String)data.get(EWCA0010004CBSMsg1List.STB_MDL_NM));
	
					msg.set(EWCA0010004CBSMsg1List.CCAS_CARD_STAT_CD, (String)data.get(EWCA0010004CBSMsg1List.CCAS_CARD_STAT_CD));
					// 
					msg.set(EWCA0010004CBSMsg1List.CCAS_CAS_CARD_SBT_CD, (String)data.get(EWCA0010004CBSMsg1List.CCAS_CAS_CARD_SBT_CD));
					// 
					msg.set(EWCA0010004CBSMsg1List.STB_UPD_DTTM, (String)data.get(EWCA0010004CBSMsg1List.STB_UPD_DTTM));
					// 
					msg.set(EWCA0010004CBSMsg1List.CAS_UPD_DTTM, (String)data.get(EWCA0010004CBSMsg1List.CAS_UPD_DTTM));

					//j++;
				}
				if(listCnt != 0)
				{
					inCBSMsg.set(EWCA0010004CBSMsg.EWCA0010004CBSMSG1LIST, l_ewca001004csvmsglist);
				}
			}
			
		}
		catch(Exception e) 
		{
			// エラーを返却する必要がある
			e.printStackTrace();
//			inCBSMsg.set(EWCA0010004CBSMsg.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(EWCA0010004CBSMsg.EWCA0010004CBSMSG1LIST);

			if (templateArray != null) {
				for (int i = 0; i < templateArray.length; i++) {
					CAANMsg childTemplate = templateArray[i];
					if (!childTemplate.isNull(EWCA0010004CBSMsg1List.STB_STAT_CD) && !"".equals(childTemplate.getString(EWCA0010004CBSMsg1List.STB_STAT_CD))) {
						getCd = childTemplate.getString(EWCA0010004CBSMsg1List.STB_STAT_CD);
						getNM = JWCGetCdNameUtil.getCdName(JZM0171Constant.CD00363, getCd);
						childTemplate.set(EWCA0010004CBSMsg1List.STB_STAT_NM, getNM);
						getCd = "";
						getNM = "";
					}
					if (!childTemplate.isNull(EWCA0010004CBSMsg1List.STB_NAIZOCAS_CD) && !"".equals(childTemplate.getString(EWCA0010004CBSMsg1List.STB_NAIZOCAS_CD))) {
						getCd = childTemplate.getString(EWCA0010004CBSMsg1List.STB_NAIZOCAS_CD);
						getNM = JWCGetCdNameUtil.getCdName(JZM0171Constant.CD00368, getCd);
						childTemplate.set(EWCA0010004CBSMsg1List.STB_NAIZOCAS_NM, getNM);
						getCd = "";
						getNM = "";
					}
					if (!childTemplate.isNull(EWCA0010004CBSMsg1List.CCAS_CARD_STAT_CD) && !"".equals(childTemplate.getString(EWCA0010004CBSMsg1List.CCAS_CARD_STAT_CD))) {
						getCd = childTemplate.getString(EWCA0010004CBSMsg1List.CCAS_CARD_STAT_CD);
						getNM = JWCGetCdNameUtil.getCdName(JZM0171Constant.CD00364, getCd);
						childTemplate.set(EWCA0010004CBSMsg1List.CCAS_CARD_STAT_NM, getNM);
						getCd = "";
						getNM = "";
					}
				}
			}
			
		}
		catch(Exception e) 
		{
			// エラーを返却する必要がある
			e.printStackTrace();
			inCBSMsg.set(EWCA0010004CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
		}
	}
}
