/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEWC0031C020TPMA
*	ソースファイル名：JEWC0031C020TPMA.java
*	作成者			：FJ
*	日付			：2011年06月13日
*＜機能概要＞
*	STBメッセージオーダ用独自処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/

package eo.ejb.cbs.mainproc;

import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.ejb.cbs.cbsmsg.EWC0011C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EWC0031C020CBSMsg;
import eo.common.util.JWCCmdHakko;
import eo.common.constant.JWCStrConst;

/**
 * <p>
 * STBメッセージオーダ用独自処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEWC0031C020TPMA implements TemplateMainHandler
{

	/**
	 * STBメッセージオーダ用顧客独自処理
	 * 
	 * @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(EWC0031C020CBSMsg.WCTRL_ORDER_CD));

		// STBメッセージオーダ種別コード
		if(inCBSMsg.getString(EWC0031C020CBSMsg.STB_MSG_ORDER_SBT_CD) != null) {
			webInfoList.put(JWCStrConst.STB_MSG_ORDER_SBT_CD, inCBSMsg.getString(EWC0031C020CBSMsg.STB_MSG_ORDER_SBT_CD));
		}
		// 局コード
		if(inCBSMsg.getString(EWC0031C020CBSMsg.KYOKU_CD) != null) {
			webInfoList.put(JWCStrConst.KYOKU_CD, inCBSMsg.getString(EWC0031C020CBSMsg.KYOKU_CD));
		}
		// 制御エリア
		if(inCBSMsg.getString(EWC0031C020CBSMsg.CTRL_AREA_CD) != null) {
			//webInfoList.put(JWCStrConst.CTRL_AREA_CD, inCBSMsg.getString(EWC0031C020CBSMsg.CTRL_AREA_CD))
			webInfoList.put(JWCStrConst.CTRL_AREA_CD, inCBSMsg.getString(EWC0031C020CBSMsg.CTRL_AREA_CD).substring(2, 6));;
		}
		// 制御要求キー
		if(inCBSMsg.getString(EWC0031C020CBSMsg.CTRL_YOKYU_KEY) != null) {
			webInfoList.put(JWCStrConst.CTRL_YOKYU_KEY, inCBSMsg.getString(EWC0031C020CBSMsg.CTRL_YOKYU_KEY));
		}
		// 制御タイプ
		if(inCBSMsg.getString(EWC0031C020CBSMsg.CTRL_TYPE_CD) != null) {
			webInfoList.put(JWCStrConst.CTRL_TYPE_CD, inCBSMsg.getString(EWC0031C020CBSMsg.CTRL_TYPE_CD));
		}
		// グループID値域コード
		if(inCBSMsg.getString(EWC0031C020CBSMsg.GRP_ID_RANGE_CD) != null) {
			webInfoList.put(JWCStrConst.GRP_ID_RANGE_CD, inCBSMsg.getString(EWC0031C020CBSMsg.GRP_ID_RANGE_CD));
		}
		// STBグループID
		if(inCBSMsg.getString(EWC0031C020CBSMsg.STB_GRP_ID) != null) {
			webInfoList.put(JWCStrConst.STB_GRP_ID, inCBSMsg.getString(EWC0031C020CBSMsg.STB_GRP_ID));
		}
		// STB ID
		if(inCBSMsg.getString(EWC0031C020CBSMsg.STB_ID) != null) {
			webInfoList.put(JWCStrConst.STB_ID, inCBSMsg.getString(EWC0031C020CBSMsg.STB_ID));
		}
		// STB機器製造番号
		if(inCBSMsg.getString(EWC0031C020CBSMsg.STB_KIKI_SEIZO_NO) != null) {
			webInfoList.put(JWCStrConst.STB_KIKI_SEIZO_NO, inCBSMsg.getString(EWC0031C020CBSMsg.STB_KIKI_SEIZO_NO));
		}
		// HEメッセージID
		if(inCBSMsg.getString(EWC0031C020CBSMsg.HE_MSG_ID) != null) {
			webInfoList.put(JWCStrConst.HE_MSG_ID, inCBSMsg.getString(EWC0031C020CBSMsg.HE_MSG_ID));
		}
		// メッセージ送出年月日時分秒
		if(inCBSMsg.getString(EWC0031C020CBSMsg.MSG_SEND_DTM) != null) {
			webInfoList.put(JWCStrConst.MSG_SEND_DTM, inCBSMsg.getString(EWC0031C020CBSMsg.MSG_SEND_DTM));
		}
		// メッセージ停止年月日時分秒
		if(inCBSMsg.getString(EWC0031C020CBSMsg.MSG_STP_DTM) != null) {
			webInfoList.put(JWCStrConst.MSG_STP_DTM, inCBSMsg.getString(EWC0031C020CBSMsg.MSG_STP_DTM));
		}
		// STBメッセージ内容
		if(inCBSMsg.getString(EWC0031C020CBSMsg.STB_MSG_NAIYO) != null) {
			webInfoList.put(JWCStrConst.STB_MSG_NAIYO, inCBSMsg.getString(EWC0031C020CBSMsg.STB_MSG_NAIYO));
		}

		//　ＵＲＬを設定します
		if(JCMAPLConstMgr.getString("WC_PKG_URL") != null && !"".equals(JCMAPLConstMgr.getString("WC_PKG_URL")))
		{
			webInfoList.put(JWCStrConst.CMD_URL, JCMAPLConstMgr.getString("WC_PKG_URL"));
		}
		
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "STBメッセージオーダ開始");
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "視聴制御オーダーコード：" + inCBSMsg.getString(EWC0031C020CBSMsg.WCTRL_ORDER_CD));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "STBメッセージオーダ種別コード：" + inCBSMsg.getString(EWC0031C020CBSMsg.STB_MSG_ORDER_SBT_CD));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "局コード                  ：" + inCBSMsg.getString(EWC0031C020CBSMsg.KYOKU_CD));
//		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "制御エリア                ：" + inCBSMsg.getString(EWC0031C020CBSMsg.CTRL_AREA_CD));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "制御エリア                ：" + inCBSMsg.getString(EWC0031C020CBSMsg.CTRL_AREA_CD).substring(2, 6));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "制御要求キー              ：" + inCBSMsg.getString(EWC0031C020CBSMsg.CTRL_YOKYU_KEY));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "グループID値域コード      ：" + inCBSMsg.getString(EWC0031C020CBSMsg.GRP_ID_RANGE_CD));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "STBグループID             ：" + inCBSMsg.getString(EWC0031C020CBSMsg.STB_GRP_ID));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "STB ID                    ：" + inCBSMsg.getString(EWC0031C020CBSMsg.STB_ID));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "STB機器製造番号           ：" + inCBSMsg.getString(EWC0031C020CBSMsg.STB_KIKI_SEIZO_NO));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "HEメッセージID            ：" + inCBSMsg.getString(EWC0031C020CBSMsg.HE_MSG_ID));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "メッセージ送出年月日時分秒：" + inCBSMsg.getString(EWC0031C020CBSMsg.MSG_SEND_DTM));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "メッセージ停止年月日時分秒：" + inCBSMsg.getString(EWC0031C020CBSMsg.MSG_STP_DTM));
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), " STBメッセージ内容        ：" + inCBSMsg.getString(EWC0031C020CBSMsg.STB_MSG_NAIYO));

		try {
			HashMap<Object, Object>result = JWCCmdHakko.StbMsgCmdHakko( 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(), "STBメッセージオーダ異常終了");

				inCBSMsg.set(EWC0031C020CBSMsg.STB_MSG_ORDER_STAT , String.format("%03d", Integer.parseInt(JWCStrConst.CD_DIV_WATCH_ORDER_FLG_ABNORMAL))); // 視聴制御オーダステータス

				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(EWC0031C020CBSMsg.RUN_RSLT_CD, run_rslt_cd);

				return;
			}
		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
			inCBSMsg.set(EWC0031C020CBSMsg.STB_MSG_ORDER_STAT , String.format("%03d", Integer.parseInt(JWCStrConst.CD_DIV_WATCH_ORDER_FLG_ABNORMAL))); // 視聴制御オーダステータス
			inCBSMsg.set(EWC0011C010CBSMsg.RUN_RSLT_CD, JWCStrConst.CD_DIV_WCTRL_RSLT_CMD_RETRY_MATI); // 実行結果コード

			return;
		}

		inCBSMsg.set(EWC0031C020CBSMsg.STB_MSG_ORDER_STAT , String.format("%03d", Integer.parseInt(JWCStrConst.CD_DIV_WATCH_ORDER_FLG_NORMAL))); // 視聴制御オーダステータス
		inCBSMsg.set(EWC0011C010CBSMsg.RUN_RSLT_CD, JWCStrConst.CD_DIV_WCTRL_RSLT_CMD_CTR_CHU); // 
		//		inCBSMsg.set("0", EWC0031C020CBSMsg.CCAS_SHKKA_CMD_HAK_FLG); // 制御コマンド発行済フラグ
		JSYejbLog.outlog(inContext, JSYejbLog.EXECUTION , this.getClass(), "STBメッセージオーダ正常終了");

	}

}
