/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUHikkosiNaviTakinoRouterShokaiCC
*   ソースファイル名：JFUHikkosiNaviTakinoRouterShokaiCC.java
*   作成者          ：富士通
*   日付            ：2012年06月12日
*＜機能概要＞
*   引越しナビ住所変更申込多機能ルーター情報取得コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v7.00.00	2013/11/25   FJ）谷本    新規作成【ANK-1578-00-00】多機能ルーター（機器追加）
*   v7.00.00    2014/02/07   FJ）谷本    変更【OM-2014-0000562】多機能ルーターの電話オプションの不具合 対応
*  v61.00.00    2023/04/03   FJ) 張本    変更【ANK-4315-00-00】【eo定期】eo光ホームゲートウェイ導入対応
*   
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.TreeMap;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0081B025CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B025CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0791A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0791A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811B503CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811B503CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg1List;

/**
 * 引越しナビ住所変更申込多機能ルーター情報取得コモンコンポーネント部品
 * 
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUHikkosiNaviTakinoRouterShokaiCC extends JFUBaseCC
{

	/** IN項目:SYSID */
	private static final String IN_PARAM_SYS_ID = "sysid";
	/** IN項目:サービス契約回線内訳番号 */
	private static final String IN_PARAM_SVC_KEI_KAISEN_UCWK_NO = "svc_kei_kaisen_ucwk_no";
	/** IN項目:料金コースコード（ネット変更後） */
	private static final String IN_PARAM_AFT_NET_PCRS_CD = "aft_net_pcrs_cd";
	/** IN項目:サービス契約番号（ネット） */
	private static final String IN_PARAM_NET_SVC_KEI_NO = "net_svc_kei_no";
	/** IN項目:整理番号 */
	private static final String IN_PARAM_SEIRI_NO = "seiri_no";

	/** フロント用共通関連チェック定義ファイルパス取得キー */
	private static final String KEY_XML_FILE_PATH = "FUROUTER_SPEED_SBT_SETTING_FILE_PATH";
	/** フロント用共通関連チェック定義ファイル */
	private static final String XML_FILE_PATH = JCCBPCommon.getApplicationConst(KEY_XML_FILE_PATH);

	/* ■□ EKK2811B503_機器オプションサービス契約一覧照会（フロント）SC ■□ */
	/** テンプレートID(機器オプションサービス契約一覧照会（フロント）) */
	private static final String TEMPLATE_ID_EKK2811B503 = "EKK2811B503";
	/** テンプレートID(機器オプションサービス契約一覧照会（フロント）明細) */
	private static final String TEMPLATE_ID_EKK2811B503_DETAIL = EKK2811B503CBSMsg.EKK2811B503CBSMSG1LIST;
	/** IN項目リスト(機器オプションサービス契約一覧照会（フロント）) */
	private static final List<String> ITEM_NM_LIST_EKK2811B503 =
			Arrays.asList(EKK2811B503CBSMsg.KEY_SYSID, EKK2811B503CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, EKK2811B503CBSMsg.KEY_TAKNKIKI_SBT_CD);
	/** SC実行結果取得キー(機器オプションサービス契約一覧照会（フロント）) */
	private static final String TEMP_TEMPLATE_KEY_EKK2811B503 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EKK2811B503 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0791A010_料金コース一意照会SC ■□ */
	/** テンプレートID(料金コース一意照会) */
	private static final String TEMPLATE_ID_EKK0791A010 = "EKK0791A010";
	/** テンプレートID(料金コース一意照会明細) */
	private static final String TEMPLATE_ID_EKK0791A010_DETAIL = EKK0791A010CBSMsg.EKK0791A010CBSMSG1LIST;
	/** IN項目リスト(料金コース一意照会) */
	private static final List<String> ITEM_NM_LIST_EKK0791A010 =
			Arrays.asList(EKK0791A010CBSMsg.KEY_PCRS_CD, EKK0791A010CBSMsg.KEY_GENE_ADD_DTM, EKK0791A010CBSMsg.KEY_RSV_APLY_YMD);
	/** SC実行結果取得キー(機器オプションサービス契約一覧照会（フロント）) */
	private static final String TEMP_TEMPLATE_KEY_EKK0791A010 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EKK0791A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0341B002_機器提供サービス契約一覧照会（サービス契約番号）SC ■□ */
	/** テンプレートID(機器提供サービス契約一覧照会（サービス契約番号）) */
	private static final String TEMPLATE_ID_EKK0341B002 = "EKK0341B002";
	/** テンプレートID(機器提供サービス契約一覧照会（サービス契約番号）明細) */
	private static final String TEMPLATE_ID_EKK0341B002_DETAIL = EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST;
	/** IN項目リスト(機器提供サービス契約一覧照会（サービス契約番号）) */
	private static final List<String> ITEM_NM_LIST_EKK0341B002 =
			Arrays.asList(EKK0341B002CBSMsg.KEY_SVC_KEI_NO, EKK0341B002CBSMsg.KEY_KKTK_SVC_CD, EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO,
					EKK0341B002CBSMsg.KEY_SORT_KBN);
	/** SC実行結果取得キー(機器提供サービス契約一覧照会（サービス契約番号）) */
	private static final String TEMP_TEMPLATE_KEY_EKK0341B002 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EKK0341B002 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EZM0411A010_宅内機器型式一意照会SC ■□ */
	/** テンプレートID(宅内機器型式一意照会) */
	private static final String TEMPLATE_ID_EZM0411A010 = "EZM0411A010";
	/** テンプレートID(宅内機器型式一意照会明細) */
	private static final String TEMPLATE_ID_EZM0411A010_DETAIL = EZM0411A010CBSMsg.EZM0411A010CBSMSG1LIST;
	/** IN項目リスト(宅内機器型式一意照会) */
	private static final List<String> ITEM_NM_LIST_EZM0411A010 = Arrays.asList(EZM0411A010CBSMsg.KEY_TAKNKIKI_MODEL_CD);
	/** SC実行結果取得キー(宅内機器型式一意照会) */
	private static final String TEMP_TEMPLATE_KEY_EZM0411A010 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EZM0411A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0081B025_サービス契約一覧照会（整理番号）SC ■□ */
	/** テンプレートID(サービス契約一覧照会（整理番号）) */
	private static final String TEMPLATE_ID_EKK0081B025 = "EKK0081B025";
	/** テンプレートID(サービス契約一覧照会（整理番号）明細) */
	private static final String TEMPLATE_ID_EKK0081B025_DETAIL = EKK0081B025CBSMsg.EKK0081B025CBSMSG1LIST;
	/** IN項目リスト(サービス契約一覧照会（整理番号）) */
	private static final List<String> ITEM_NM_LIST_EKK0081B025 = Arrays.asList(EKK0081B025CBSMsg.KEY_SEIRI_NO);
	/** SC実行結果取得キー(サービス契約一覧照会（整理番号）) */
	private static final String TEMP_TEMPLATE_KEY_EKK0081B025 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EKK0081B025 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK2811B503_機器オプションサービス契約一覧照会（フロント）SC ■□ */
	/** テンプレートID(機器オプションサービス契約一覧照会（フロント）) */
	private static final String TEMPLATE_ID_KKOP_SVKEI_LIST_SHOKAI = "EKK2811B503";
	/** テンプレートID(明細)(機器オプションサービス契約一覧照会（フロント）) */
	private static final String TEMPLATE_ID_DETAIL_KKOP_SVKEI_LIST_SHOKAI = EKK2811B503CBSMsg.EKK2811B503CBSMSG1LIST;
	/** IN項目リスト(機器オプションサービス契約一覧照会（フロント）) */
	private static final List<String> IN_COLUMN_LIST_KKOP_SVKEI_LIST_SHOKAI =
			Arrays.asList(EKK2811B503CBSMsg.KEY_SYSID, EKK2811B503CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, EKK2811B503CBSMsg.KEY_TAKNKIKI_SBT_CD);
	/** 関連チェックエラー項目(機器オプションサービス契約一覧照会（フロント）) */
	private static final String ERROR_COLUMN_KKOP_SVKEI_LIST_SHOKAI = EKK2811B503CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO_ERR;
	/** SC実行結果取得キー(機器オプションサービス契約一覧照会（フロント）) */
	private static final String TEMP_TEMPLATE_KEY_KKOP_SVKEI_LIST_SHOKAI =
			TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_KKOP_SVKEI_LIST_SHOKAI + TEMP_TEMPLATE_PRIFIX_SEP;

	/** 無効なサービス契約ステータス */
	private static final List<String> SVC_KEI_STAT_MUKO = Arrays.asList(JFUStrConst.CD00037_910, JFUStrConst.CD00037_920);
	/** 無効な機器提供サービス契約ステータス */
	private static final List<String> KKTK_SVC_KEI_STAT_MUKO = Arrays.asList(JFUStrConst.CD00056_910, JFUStrConst.CD00056_920);
	/** 無効な機器オプションサービス契約ステータス */
	private static final List<String> KKOP_SVC_KEI_STAT_MUKO = Arrays.asList(JFUStrConst.CD01616_910, JFUStrConst.CD01616_920);

	/**
	 * 引越しナビ住所変更申込多機能ルーター情報取得処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	public IRequestParameterReadWrite getResultData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// IN項目:SYSID
		String inParamSysID = (String)inMap.get(IN_PARAM_SYS_ID);
		// IN項目:サービス契約回線内訳番号
		String inParamSvcKeiKaisenUcwkNo = (String)inMap.get(IN_PARAM_SVC_KEI_KAISEN_UCWK_NO);
		// IN項目:料金コースコード（ネット変更後）
		String inParamAftNetPcrsCd = (String)inMap.get(IN_PARAM_AFT_NET_PCRS_CD);
		// IN項目:サービス契約番号（ネット）
		String inParamNetSvcKeiNo = (String)inMap.get(IN_PARAM_NET_SVC_KEI_NO);
		// IN項目:整理番号
		String inParamSeiriNo = (String)inMap.get(IN_PARAM_SEIRI_NO);

		// ● EKK2811B503_機器オプションサービス契約一覧照会（フロント）
		// 上りマッピング
		setInMapEKK2811B503(param, fixedText, inParamSysID, inParamSvcKeiKaisenUcwkNo);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_EKK2811B503, TEMPLATE_ID_EKK2811B503_DETAIL, ITEM_NM_LIST_EKK2811B503, BLANK);

		// 〇 保有多機能ルーター有無
		String outOwnTkrtUmu = JFUStrConst.CD00002_0;

		List<HashMap> kkopSvcKeiList = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EKK2811B503), TEMPLATE_ID_EKK2811B503_DETAIL);
		for (HashMap map : kkopSvcKeiList)
		{
			String kkopSvcKeiStat = (String)map.get(EKK2811B503CBSMsg1List.KKOP_SVC_KEI_STAT);

			if (!KKOP_SVC_KEI_STAT_MUKO.contains(kkopSvcKeiStat))
			{
				outOwnTkrtUmu = JFUStrConst.CD00002_1;
			}

		}
		// 〇 OUT項目設定（保有多機能ルーター有無）
		inMap.put("own_tkrt_umu", outOwnTkrtUmu);

		// ● EKK0791A010_料金コース一意照会
		// 上りマッピング
		setInMapEKK0791A010(param, fixedText, inParamAftNetPcrsCd);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0791A010, TEMPLATE_ID_EKK0791A010_DETAIL, ITEM_NM_LIST_EKK0791A010, BLANK);

		// 料金速度コード
		String pcrsSpeedCd =
				getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EKK0791A010), TEMPLATE_ID_EKK0791A010_DETAIL,
						EKK0791A010CBSMsg1List.PCRS_SPEED_CD, 0);
		// 〇 OUT項目設定（ルーター速度種別コード）
		inMap.put("net_aft_pcrs_router_speed_sbt_cd", getRouterSpeedSbt(pcrsSpeedCd, getRouterNodeList()));

		// ● EKK0341B002_機器提供サービス契約一覧照会（サービス契約番号）※ルーター取得用
		// 上りマッピング
		setInMapEKK0341B002(param, fixedText, inParamNetSvcKeiNo, JFUStrConst.KK0771_KKTK_SVC_CD_C014);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0341B002, TEMPLATE_ID_EKK0341B002_DETAIL, ITEM_NM_LIST_EKK0341B002, BLANK);
		// 宅内機器モデルコード（ルーター）
		String taknkikiModelCdRouter = null;
		TreeMap routerMap = new TreeMap();
		for (HashMap dataMap : getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EKK0341B002), TEMPLATE_ID_EKK0341B002_DETAIL))
		{
			// 機器提供サービス契約ステータス
			String kktkSvcKeiStat = (String)dataMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);

			// 無効な機器提供サービス契約ステータス以外（サービス契約ステータス＝"910"（解約）、"920"（キャンセル）以外） 
			// 且つ 世代登録年月日時分秒が後（複数ある場合）
			if (!KKTK_SVC_KEI_STAT_MUKO.contains(kktkSvcKeiStat))
			{
				routerMap.put((String)dataMap.get(EKK0341B002CBSMsg1List.GENE_ADD_DTM)
						, (String)dataMap.get(EKK0341B002CBSMsg1List.TAKNKIKI_MODEL_CD));
			}
			
		}
		// キー（世代登録年月日時分秒）が後の機器を有効とする。
		if (routerMap.size() != 0)
		{
			taknkikiModelCdRouter = (String)routerMap.get(routerMap.lastKey());
		}

		// 多機能ルータの情報取得
		initData(param, fixedText, IN_COLUMN_LIST_KKOP_SVKEI_LIST_SHOKAI);
		// 上りマッピング
		setInKkopSvkeiListShokai(param, fixedText);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_KKOP_SVKEI_LIST_SHOKAI, TEMPLATE_ID_DETAIL_KKOP_SVKEI_LIST_SHOKAI,
				IN_COLUMN_LIST_KKOP_SVKEI_LIST_SHOKAI, BLANK);
		
		for (HashMap dataMap : getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_KKOP_SVKEI_LIST_SHOKAI),
				TEMPLATE_ID_DETAIL_KKOP_SVKEI_LIST_SHOKAI))
		{
			String kkopSvcKeiStat = (String)dataMap.get(EKK2811B503CBSMsg1List.KKOP_SVC_KEI_STAT);
			if (KKOP_SVC_KEI_STAT_MUKO.contains(kkopSvcKeiStat))
			{
				continue;
			}
			taknkikiModelCdRouter = (String)dataMap.get(EKK2811B503CBSMsg1List.TAKNKIKI_MODEL_CD);
		}
		
		// 〇ルーター速度種別コード
		String routerSpeedSbtCd = "";
		if (!JFUBPCommon.isNull(taknkikiModelCdRouter))
		{
			// ● EZM0411A010_宅内機器型式一意照会※ルーター取得用
			// 上りマッピング
			setInMapEZM0411A010(param, fixedText, taknkikiModelCdRouter);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_EZM0411A010, TEMPLATE_ID_EZM0411A010_DETAIL, ITEM_NM_LIST_EZM0411A010, BLANK);
			// ルーター速度種別コード
			routerSpeedSbtCd =
					getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EZM0411A010), TEMPLATE_ID_EZM0411A010_DETAIL,
							EZM0411A010CBSMsg1List.ROUTER_SPEED_SBT_CD, 0);
		}

		// 〇OUT項目設定（保有ルーター速度種別コード）
		inMap.put("own_router_speed_sbt_cd", routerSpeedSbtCd);

		// サービス契約番号（電話）
		String telSvcKeiNo = "";

		// ● EKK0081B025_サービス契約一覧照会（整理番号）
		// 上りマッピング
		setInMapEKK0081B025(param, fixedText, inParamSeiriNo);
		// 検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0081B025, TEMPLATE_ID_EKK0081B025_DETAIL, ITEM_NM_LIST_EKK0081B025, BLANK);

		for (HashMap svcKeiMap : getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EKK0081B025), TEMPLATE_ID_EKK0081B025_DETAIL))
		{
			// 料金グループコード
			String prcGrpCd = (String)svcKeiMap.get(EKK0081B025CBSMsg1List.PRC_GRP_CD);
			// サービス契約ステータス
			String svcKeiStat = (String)svcKeiMap.get(EKK0081B025CBSMsg1List.SVC_KEI_STAT);

			// 料金グループコード＝"10"（eo光電話）かつ 無効なサービス契約ステータス以外（サービス契約ステータス＝"910"（解約）、"920"（キャンセル）以外）
			if (JFUStrConst.CD00133_10.equals(prcGrpCd) && !SVC_KEI_STAT_MUKO.contains(svcKeiStat))
			{
				telSvcKeiNo = (String)svcKeiMap.get(EKK0081B025CBSMsg1List.SVC_KEI_NO);
				;
			}
		}

		// ポート数を取得（複数ＶＡ時は、大きいものを使用）
		String ownVaPortCnt = JFUStrConst.EMPTY;
		if (!JFUBPCommon.isNull(telSvcKeiNo))
		{
			TreeMap vaMap = new TreeMap();
			
			// ● EKK0341B002_機器提供サービス契約一覧照会（サービス契約番号）※ＶＡ取得用
			// 上りマッピング
			setInMapEKK0341B002(param, fixedText, telSvcKeiNo, JFUStrConst.KK0771_KKTK_SVC_CD_C004);
			//検索エラーなし設定
			ignoreSearchError(param, fixedText);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0341B002, TEMPLATE_ID_EKK0341B002_DETAIL, ITEM_NM_LIST_EKK0341B002, BLANK);
			// 宅内機器モデルコード（ＶＡ）
			String taknkikiModelCdVa = null;
			for (HashMap dataMap : getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EKK0341B002), TEMPLATE_ID_EKK0341B002_DETAIL))
			{
				// 機器提供サービス契約ステータス
				String kktkSvcKeiStat = (String)dataMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);

				// 無効な機器提供サービス契約ステータス以外（サービス契約ステータス＝"910"（解約）、"920"（キャンセル）以外）
				if (!KKTK_SVC_KEI_STAT_MUKO.contains(kktkSvcKeiStat))
				{
					taknkikiModelCdVa = (String)dataMap.get(EKK0341B002CBSMsg1List.TAKNKIKI_MODEL_CD);

					// ● EZM0411A010_宅内機器型式一意照会※ＶＡ取得用
					// 上りマッピング
					setInMapEZM0411A010(param, fixedText, taknkikiModelCdVa);
					// サービスIF実行
					executeSC(handle, param, fixedText, TEMPLATE_ID_EZM0411A010, TEMPLATE_ID_EZM0411A010_DETAIL, ITEM_NM_LIST_EZM0411A010, BLANK);
					// ポート数
					String portCnt =
							getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EZM0411A010), TEMPLATE_ID_EZM0411A010_DETAIL,
									EZM0411A010CBSMsg1List.PORT_CNT, 0);
					
					// ポート数をセット
					vaMap.put(portCnt, portCnt);
				}
			}

			if (vaMap.size() != 0)
			{
				ownVaPortCnt = (String)vaMap.get(vaMap.lastKey());
			}
		}

		// 〇 OUT項目設定（保有ＶＡポート数）※複数ある場合はポート数の大きいものを使用
		inMap.put("own_va_port_cnt", ownVaPortCnt);

		return param;
	}

	/**
	 * 上りマッピング項目設定(EKK2811B503_機器オプションサービス契約一覧照会（フロント）)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param sysID SYSID
	 * @param svcKeiKaisenUcwkNo サービス契約回線内訳番号
	 * @throws RequestParameterException
	 */
	private void setInMapEKK2811B503(IRequestParameterReadWrite param, String fixedText, String sysID, String svcKeiKaisenUcwkNo)
			throws RequestParameterException
	{
		// ●機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1); // "1"

		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// KEY_SYSID
		inMap.put(EKK2811B503CBSMsg.KEY_SYSID, sysID);
		// KEY_サービス契約回線内訳番号
		inMap.put(EKK2811B503CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo);
//		// KEY_宅内機器種別コード
//		inMap.put(EKK2811B503CBSMsg.KEY_TAKNKIKI_SBT_CD, JFUStrConst.CD01262_R0);	// "R0":多機能ルーター

	}

	/**
	 * 上りマッピング項目設定(EKK0791A010_料金コース一意照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param pcrsCd 料金コースコード
	 * @throws RequestParameterException
	 */
	private void setInMapEKK0791A010(IRequestParameterReadWrite param, String fixedText, String pcrsCd) throws RequestParameterException
	{
		// ●機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2); // "2"(カレント)

		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// KEY_料金コースコード
		inMap.put(EKK0791A010CBSMsg.KEY_PCRS_CD, pcrsCd);
		// KEY_予約適用年月日
		inMap.put(EKK0791A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));

	}

	/**
	 * 上りマッピング項目設定(EKK0341B002_機器提供サービス契約一覧照会（サービス契約番号）)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @param kktkSvcCd 機器提供サービスコード
	 * @throws RequestParameterException
	 */
	private void setInMapEKK0341B002(IRequestParameterReadWrite param, String fixedText, String svcKeiNo, String kktkSvcCd)
			throws RequestParameterException
	{
		// ●機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1); // "1"(サービス契約番号)

		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// KEY_サービス契約番号
		inMap.put(EKK0341B002CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		// KEY_機器提供サービスコード
		inMap.put(EKK0341B002CBSMsg.KEY_KKTK_SVC_CD, kktkSvcCd);

	}

	/**
	 * 上りマッピング項目設定(EZM0411A010_宅内機器型式一意照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param taknkikiModelCd 宅内機器型式コード
	 * @throws RequestParameterException
	 */
	private void setInMapEZM0411A010(IRequestParameterReadWrite param, String fixedText, String taknkikiModelCd) throws RequestParameterException
	{
		// ●機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1); // "1"

		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// KEY_宅内機器型式コード
		inMap.put(EZM0411A010CBSMsg.KEY_TAKNKIKI_MODEL_CD, taknkikiModelCd);

	}

	/**
	 * 上りマッピング項目設定(EKK0081B025_サービス契約一覧照会（整理番号）)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param seiriNo 整理番号
	 * @throws RequestParameterException
	 */
	private void setInMapEKK0081B025(IRequestParameterReadWrite param, String fixedText, String seiriNo) throws RequestParameterException
	{
		// ●機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1); // "1"

		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// KEY_整理番号
		inMap.put(EKK0081B025CBSMsg.KEY_SEIRI_NO, seiriNo);

	}

	/**
	 * XML読み込み
	 * <br>
	 * @return エレメント
	 * @throws ParserConfigurationException
	 * @throws SAXException
	 * @throws IOException
	 */
	private Element getRouterNodeList() throws ParserConfigurationException, SAXException, IOException
	{
		// XMLパース
		DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		Document doc = builder.parse(new File(XML_FILE_PATH));
		return doc.getDocumentElement();
	}

	/**
	 * ルーター速度種別取得
	 * <br>
	 * @param pcrsSpeedCd 料金コース速度コード
	 * @param root XMLデータ
	 * @return ルーター速度種別
	 */
	private String getRouterSpeedSbt(String pcrsSpeedCd, Element root)
	{
		NodeList pcrsRootList = root.getElementsByTagName("PCRS_SPEED_CD_ROUTER_SPEED_SBT_MAPPING");
		Element pcrsRoot = (Element)pcrsRootList.item(0);
		NodeList routerSpeedSbtList = pcrsRoot.getElementsByTagName("ROUTER_SPEED_SBT");

		Element svcElement = null;

		for (int i = 0; i < routerSpeedSbtList.getLength(); i++)
		{
			svcElement = (Element)routerSpeedSbtList.item(i);
			if (pcrsSpeedCd.equals(svcElement.getAttribute("pcrs_speed_cd")))
			{
				break;
			}
		}

		return svcElement.getTextContent();
	}

	/**
	 * チェック処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@Override
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}

	/**
	 * 上りマッピング項目設定(機器オプションサービス契約一覧照会（フロント）)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	private void setInKkopSvkeiListShokai(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 検索エラーなし設定
		ignoreSearchError(param, fixedText);

		// 機能コード設定(1:抽出条件に一致するレコードの一覧照会を行う)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ＫＥＹ＿SYSID
		inMap.put(EKK2811B503CBSMsg.KEY_SYSID, inMap.get(IN_PARAM_SYS_ID));
		// ＫＥＹ＿サービス契約回線内訳番号
		inMap.put(EKK2811B503CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, inMap.get(IN_PARAM_SVC_KEI_KAISEN_UCWK_NO));
//		// ＫＥＹ＿宅内機器種別コード
//		inMap.put(EKK2811B503CBSMsg.KEY_TAKNKIKI_SBT_CD, JFUStrConst.CD01262_R0); // R0：多機能ルーター

	}
}
