/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEWC0011C010TPMA
*	ソースファイル名：JEWC0011C010TPMA.java
*	作成者			：FJ
*	日付			：2011年06月13日
*＜機能概要＞
*	視聴制御オーダ送信用独自処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/

package eo.ejb.cbs.mainproc;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;
import eo.ejb.cbs.cbsmsg.EWC0011C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EWC0011D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EWC0011D010CBSMsg2List;
import eo.ejb.cbs.cbsmsg.EWC0011D010CBSMsg3List;
import eo.ejb.cbs.cbsmsg.EWC0011D010CBSMsg4List;
import eo.ejb.cbs.cbsmsg.EWC0011D010CBSMsg5List;
import eo.ejb.cbs.cbsmsg.EWC0011D010CBSMsg6List;
import eo.ejb.common.JCCModelCommon;
import eo.common.util.JWCCmdHakko;
import eo.common.constant.JWCStrConst;

/**
 * <p>
 * 視聴制御オーダ送信独自処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEWC0011C010TPMA implements TemplateMainHandler
{

	/**
	 * 視聴制御オーダ送信用顧客独自処理
	 * 
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 
	 */
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{

		
		// 視聴制御用コマンド発行用
		HashMap<Object, Object> webInfoList = new HashMap< Object, Object>();

		// 視聴制御オーダコード
		webInfoList.put(JWCStrConst.WCTRL_ORDER_CD, inCBSMsg.getString(EWC0011C010CBSMsg.WCTRL_ORDER_CD));
		
		// 局コード
		if(inCBSMsg.getString(EWC0011C010CBSMsg.KYOKU_CD) != null) 
		{
			webInfoList.put(JWCStrConst.KYOKU_CD, inCBSMsg.getString(EWC0011C010CBSMsg.KYOKU_CD));
		}
		
		// 制御エリア
		if(inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_AREA_CD) != null) 
		{
			//制御エリア４桁対応
			//webInfoList.put(JWCStrConst.CTRL_AREA_CD, inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_AREA_CD));
			webInfoList.put(JWCStrConst.CTRL_AREA_CD, inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_AREA_CD).substring(2, 6));
		}
		// 制御要求キー
		if(inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_YOKYU_KEY) != null) 
		{
			webInfoList.put(JWCStrConst.CTRL_YOKYU_KEY, inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_YOKYU_KEY));
		}
		
		// 制御タイプ
		if(inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_TYPE_CD) != null) 
		{
			webInfoList.put(JWCStrConst.CTRL_TYPE_CD, inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_TYPE_CD));
		}
		// 制御モード
		if(inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_MODE_CD) != null) 
		{
			webInfoList.put(JWCStrConst.CTRL_MODE_CD, inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_MODE_CD));
		}
		
		// STB ID
		if(inCBSMsg.getString(EWC0011C010CBSMsg.STB_ID) != null) 
		{
			webInfoList.put(JWCStrConst.STB_ID, inCBSMsg.getString(EWC0011C010CBSMsg.STB_ID));
		}
		// 製造番号
		if(inCBSMsg.getString(EWC0011C010CBSMsg.STB_KIKI_SEIZO_NO) != null) 
		{
			webInfoList.put(JWCStrConst.STB_KIKI_SEIZO_NO, inCBSMsg.getString(EWC0011C010CBSMsg.STB_KIKI_SEIZO_NO));
		}
		// 制御用機種コード   
		if(inCBSMsg.getString(EWC0011C010CBSMsg.STB_CTRL_MODEL_CD) != null) 
		{
			webInfoList.put(JWCStrConst.STB_CTRL_MODEL_CD, inCBSMsg.getString(EWC0011C010CBSMsg.STB_CTRL_MODEL_CD));
		}
		// C-CAS内蔵タイプSTB
		if(inCBSMsg.getString(EWC0011C010CBSMsg.STB_CAS_NAIZO_FLG) != null) 
		{
			webInfoList.put(JWCStrConst.STB_CAS_NAIZO_FLG, inCBSMsg.getString(EWC0011C010CBSMsg.STB_CAS_NAIZO_FLG));
		}
		// C-CAS ID
		if(inCBSMsg.getString(EWC0011C010CBSMsg.CCAS_CARD_NO) != null) 
		{
			webInfoList.put(JWCStrConst.CCAS_CARD_NO, inCBSMsg.getString(EWC0011C010CBSMsg.CCAS_CARD_NO));
		}

		// B-CAS ID
		if(inCBSMsg.getString(EWC0011C010CBSMsg.BCAS_CARD_NO) != null) 
		{
			webInfoList.put(JWCStrConst.BCAS_CARD_NO, inCBSMsg.getString(EWC0011C010CBSMsg.BCAS_CARD_NO));
		}

		// デジタルティア(Remux)明細
		ArrayList<HashMap<Object, Object>> list1 = new ArrayList<HashMap<Object, Object>>();
		
		CAANMsg[] msg1 = inCBSMsg.getCAANMsgList(EWC0011C010CBSMsg.EWC0011D010CBSMSG1LIST);
		if(msg1 != null) 
		{
			for(CAANMsg msglist:msg1) {
				HashMap<Object, Object>cd1 = new HashMap<Object, Object>();
				cd1.put(JWCStrConst.DGTIA_CD1, msglist.getString(EWC0011D010CBSMsg1List.DGTIA_CD1));
				list1.add(cd1);
			}
			webInfoList.put(JWCStrConst.EWC0011D010CBSMSG1LIST,list1);
		}

		// デジタルティア(TM)領域０明細
		ArrayList<HashMap<Object, Object>> list2 = new ArrayList<HashMap<Object, Object>>();
		
		CAANMsg[] msg2 = inCBSMsg.getCAANMsgList(EWC0011C010CBSMsg.EWC0011D010CBSMSG2LIST);
		if(msg2 != null) 
		{
			for(CAANMsg msglist:msg2) {
				HashMap<Object, Object>cd1 = new HashMap<Object, Object>();
				cd1.put(JWCStrConst.DGTIA_CD2, msglist.getString(EWC0011D010CBSMsg2List.DGTIA_CD2));
				list2.add(cd1);
			}
			webInfoList.put(JWCStrConst.EWC0011D010CBSMSG2LIST,list2);
		}
		
		// デジタルティア(TM)領域１明細
		ArrayList<HashMap<Object, Object>> list3 = new ArrayList<HashMap<Object, Object>>();
		
		CAANMsg[] msg3 = inCBSMsg.getCAANMsgList(EWC0011C010CBSMsg.EWC0011D010CBSMSG3LIST);
		if(msg3 != null) 
		{
			for(CAANMsg msglist:msg3) {
				HashMap<Object, Object>cd1 = new HashMap<Object, Object>();
				cd1.put(JWCStrConst.DGTIA_CD3, msglist.getString(EWC0011D010CBSMsg3List.DGTIA_CD3));
				list3.add(cd1);
			}
			webInfoList.put(JWCStrConst.EWC0011D010CBSMSG3LIST,list3);
		}
		
		// デジタルティア(TM)領域２明細
		ArrayList<HashMap<Object, Object>> list4 = new ArrayList<HashMap<Object, Object>>();
		
		CAANMsg[] msg4 = inCBSMsg.getCAANMsgList(EWC0011C010CBSMsg.EWC0011D010CBSMSG4LIST);
		if(msg4 != null) 
		{
			for(CAANMsg msglist:msg4) {
				HashMap<Object, Object>cd1 = new HashMap<Object, Object>();
				cd1.put(JWCStrConst.DGTIA_CD4, msglist.getString(EWC0011D010CBSMsg4List.DGTIA_CD4));
				list4.add(cd1);
			}
			webInfoList.put(JWCStrConst.EWC0011D010CBSMSG4LIST,list4);
		}
		
		// デジタルティア(TM)領域３明細
		ArrayList<HashMap<Object, Object>> list5 = new ArrayList<HashMap<Object, Object>>();
		
		CAANMsg[] msg5 = inCBSMsg.getCAANMsgList(EWC0011C010CBSMsg.EWC0011D010CBSMSG5LIST);
		if(msg5 != null)
		{
			for(CAANMsg msglist:msg5) {
				HashMap<Object, Object>cd1 = new HashMap<Object, Object>();
				cd1.put(JWCStrConst.DGTIA_CD5, msglist.getString(EWC0011D010CBSMsg5List.DGTIA_CD5));
				list5.add(cd1);
			}
			webInfoList.put(JWCStrConst.EWC0011D010CBSMSG5LIST,list5);
		}
		
		// 課金フラグ
		if(inCBSMsg.getString(EWC0011C010CBSMsg.CHRG_FLG) != null) 
		{
			webInfoList.put(JWCStrConst.CHRG_FLG, inCBSMsg.getString(EWC0011C010CBSMsg.CHRG_FLG));
		}
		// グループＩＤ明細
		ArrayList<HashMap<Object, Object>> list6 = new ArrayList<HashMap<Object, Object>>();
		
		CAANMsg[] msg6 = inCBSMsg.getCAANMsgList(EWC0011C010CBSMsg.EWC0011D010CBSMSG6LIST);
		if(msg6 != null)
		{
			for(CAANMsg msglist:msg6) {
				HashMap<Object, Object>cd1 = new HashMap<Object, Object>();
				cd1.put(JWCStrConst.GRP_ID, msglist.getString(EWC0011D010CBSMsg6List.GRP_ID));
				list6.add(cd1);
			}
			webInfoList.put(JWCStrConst.EWC0011D010CBSMSG6LIST,list6);
		}

		// C-CAS初期化コマンド発行有無
		if(inCBSMsg.getString(EWC0011C010CBSMsg.CCAS_SHKKA_CMD_HAK_FLG) != null) 
		{
			webInfoList.put(JWCStrConst.CCAS_SHKKA_CMD_HAK_FLG, inCBSMsg.getString(EWC0011C010CBSMsg.CCAS_SHKKA_CMD_HAK_FLG));
		}
		
		// 再設定フラグ
		if(inCBSMsg.getString(EWC0011C010CBSMsg.RE_SETTE_FLG) != null) 
		{
			webInfoList.put(JWCStrConst.RE_SETTE_FLG, inCBSMsg.getString(EWC0011C010CBSMsg.RE_SETTE_FLG));
		}
		
		
		//　ＵＲＬを設定します
		if(JCMAPLConstMgr.getString("WC_PKG_URL") != null && !"".equals(JCMAPLConstMgr.getString("WC_PKG_URL")))
		{
			webInfoList.put(JWCStrConst.CMD_URL, JCMAPLConstMgr.getString("WC_PKG_URL"));
		}
		
		//ログ出力(SQL文の出力)
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "視聴制御オーダ開始");
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "視聴制御オーダコード：" + inCBSMsg.getString(EWC0011C010CBSMsg.WCTRL_ORDER_CD));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "局コード            ：" + inCBSMsg.getString(EWC0011C010CBSMsg.KYOKU_CD));
		//JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "制御エリア          ：" + inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_AREA_CD));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "制御エリア          ：" + inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_AREA_CD).substring(2, 6));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "制御要求キー        ：" + inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_YOKYU_KEY));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "制御タイプ          ：" + inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_TYPE_CD));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "制御モード          ：" + inCBSMsg.getString(EWC0011C010CBSMsg.CTRL_MODE_CD));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "STB ID              ：" + inCBSMsg.getString(EWC0011C010CBSMsg.STB_ID));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "製造番号            ：" + inCBSMsg.getString(EWC0011C010CBSMsg.STB_KIKI_SEIZO_NO));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "制御用機種コード    ：" + inCBSMsg.getString(EWC0011C010CBSMsg.STB_CTRL_MODEL_CD));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "C-CAS内蔵タイプSTB  ：" + inCBSMsg.getString(EWC0011C010CBSMsg.STB_CAS_NAIZO_FLG));
		if(inCBSMsg.getString(EWC0011C010CBSMsg.STB_CAS_NAIZO_FLG) != null && JWCStrConst.CD_DIV_CAS_NAIZO_FLG_HINAIZO.equals(inCBSMsg.getString(EWC0011C010CBSMsg.STB_CAS_NAIZO_FLG)))
		{
			JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "C-CAS ID            ：" + inCBSMsg.getString(EWC0011C010CBSMsg.CCAS_CARD_NO));
		}
		else 
		{
			JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "C-CAS ID            ：" + " ");
		}
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "B-CAS ID            ：" + inCBSMsg.getString(EWC0011C010CBSMsg.BCAS_CARD_NO));

		CAANMsg[] msg11= inCBSMsg.getCAANMsgList(EWC0011C010CBSMsg.EWC0011D010CBSMSG1LIST);
		if(msg11 != null) 
		{
			for(CAANMsg msglist:msg11) {
				JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "デジタルティア(Remux)：" + msglist.getString(EWC0011D010CBSMsg1List.DGTIA_CD1));
			}
		}

		CAANMsg[] msg12= inCBSMsg.getCAANMsgList(EWC0011C010CBSMsg.EWC0011D010CBSMSG2LIST);
		if(msg12 != null) 
		{
			for(CAANMsg msglist:msg12) {
				JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "デジタルティア(TM0)：" + msglist.getString(EWC0011D010CBSMsg2List.DGTIA_CD2));
			}
		}
		

		CAANMsg[] msg13 = inCBSMsg.getCAANMsgList(EWC0011C010CBSMsg.EWC0011D010CBSMSG3LIST);
		if(msg13 != null) 
		{
			for(CAANMsg msglist:msg13) {
				JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "デジタルティア(TM1)：" + msglist.getString(EWC0011D010CBSMsg3List.DGTIA_CD3));
			}
		}
		

		CAANMsg[] msg14 = inCBSMsg.getCAANMsgList(EWC0011C010CBSMsg.EWC0011D010CBSMSG4LIST);
		if(msg14 != null) 
		{
			for(CAANMsg msglist:msg14) {
				JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "デジタルティア(TM2)：" + msglist.getString(EWC0011D010CBSMsg4List.DGTIA_CD4));
			}
		}
		

		CAANMsg[] msg15 = inCBSMsg.getCAANMsgList(EWC0011C010CBSMsg.EWC0011D010CBSMSG5LIST);
		if(msg15 != null) 
		{
			for(CAANMsg msglist:msg15) {
				JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "デジタルティア(TM3)：" + msglist.getString(EWC0011D010CBSMsg5List.DGTIA_CD5));
			}
		}

		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "C-CAS初期化CMD発行有無：" + inCBSMsg.getString(EWC0011C010CBSMsg.CCAS_SHKKA_CMD_HAK_FLG));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "再設定フラグ        ：" + inCBSMsg.getString(EWC0011C010CBSMsg.RE_SETTE_FLG));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "課金フラグ          ：" + inCBSMsg.getString(EWC0011C010CBSMsg.CHRG_FLG));

		CAANMsg[] msg66 = inCBSMsg.getCAANMsgList(EWC0011C010CBSMsg.EWC0011D010CBSMSG6LIST);
		if(msg66 != null) 
		{
			for(CAANMsg msglist:msg66) {
				JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "グループIＤ     ：" + msglist.getString(EWC0011D010CBSMsg6List.GRP_ID));
			}
		}
		
		try {
			HashMap<Object, Object>result = JWCCmdHakko.WctrlCmdHakko( webInfoList );
			
			if("1".equals(result.get(JWCStrConst.CMD_RESULT_CD))) {
				String errmsg = (String)result.get(JWCStrConst.CMD_ERROR_MESSAGE);

				JSYejbLog.outlog(inContext, JSYejbLog.ERROR , this.getClass(), "エラーメッセージ：" + (String)result.get(JWCStrConst.CMD_ERROR_MESSAGE));
				JSYejbLog.outlog(inContext, JSYejbLog.ERROR , this.getClass(), "視聴制御オーダ異常終了");

				inCBSMsg.set(EWC0011C010CBSMsg.WCTRL_ORDER_STAT, String.format("%03d", Integer.parseInt(JWCStrConst.CD_DIV_WATCH_ORDER_FLG_ABNORMAL))); // 視聴制御オーダステータス
				inCBSMsg.set(EWC0011C010CBSMsg.ORDER_SEND_DTM, JCCModelCommon.getSysDateTimeStamp()); // オーダ送信年月日時分秒
				inCBSMsg.set(EWC0011C010CBSMsg.CTRL_CMD_HAKKO_ZUMI_FLG, JWCStrConst.CD_DIV_WATCH_CMD_HAKKO_FLG_HAKKOZUMI); // 制御コマンド発行済フラグ

				String run_rslt_cd = JWCStrConst.CD_DIV_WCTRL_RSLT_CMD_NAIBUABNORMAL;
				if(result.containsKey(JWCStrConst.CMD_ERROR_CD))
				{
					String pkg_err_cd = result.get(JWCStrConst.CMD_ERROR_CD).toString();
					if(JWCStrConst.PKG_ERR_CD_ERR0101.equals(pkg_err_cd) || 
							JWCStrConst.PKG_ERR_CD_ERR0102.equals(pkg_err_cd) || 
							JWCStrConst.PKG_ERR_CD_ERR0103.equals(pkg_err_cd) || 
							JWCStrConst.PKG_ERR_CD_ERR9999.equals(pkg_err_cd)
					)
					{
						run_rslt_cd = JWCStrConst.CD_DIV_WCTRL_RSLT_CMD_RETRY_MATI;
					}
					else
					{
						run_rslt_cd = JWCStrConst.CD_DIV_WCTRL_RSLT_CMD_NAIBUABNORMAL;
					}
				}

				inCBSMsg.set(EWC0011C010CBSMsg.RUN_RSLT_CD, run_rslt_cd); // 制御コマンド発行済フラグ

				return;
			}
		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
			inCBSMsg.set(EWC0011C010CBSMsg.WCTRL_ORDER_STAT, String.format("%03d", Integer.parseInt(JWCStrConst.CD_DIV_WATCH_ORDER_FLG_ABNORMAL))); // 視聴制御オーダステータス
			inCBSMsg.set(EWC0011C010CBSMsg.ORDER_SEND_DTM, JCCModelCommon.getSysDateTimeStamp()); // オーダ送信年月日時分秒
			inCBSMsg.set(EWC0011C010CBSMsg.CTRL_CMD_HAKKO_ZUMI_FLG, JWCStrConst.CD_DIV_WATCH_CMD_HAKKO_FLG_HAKKOZUMI); // 制御コマンド発行済フラグ
			inCBSMsg.set(EWC0011C010CBSMsg.RUN_RSLT_CD, JWCStrConst.CD_DIV_WCTRL_RSLT_CMD_RETRY_MATI); // 実行結果コード

			return;
		}

		inCBSMsg.set(EWC0011C010CBSMsg.WCTRL_ORDER_STAT, String.format("%03d", Integer.parseInt(JWCStrConst.CD_DIV_WATCH_ORDER_FLG_NORMAL))); // 視聴制御オーダステータス
		inCBSMsg.set(EWC0011C010CBSMsg.ORDER_SEND_DTM, JCCModelCommon.getSysDateTimeStamp()); // オーダ送信年月日時分秒
		inCBSMsg.set(EWC0011C010CBSMsg.CTRL_CMD_HAKKO_ZUMI_FLG , JWCStrConst.CD_DIV_WATCH_CMD_HAKKO_FLG_HAKKOZUMI); // 制御コマンド発行済フラグ
		inCBSMsg.set(EWC0011C010CBSMsg.RUN_RSLT_CD, JWCStrConst.CD_DIV_WCTRL_RSLT_CMD_CTR_CHU); // 制御コマンド発行済フラグ

		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "視聴制御オーダ正常終了");
	}

}
