/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKSameScreenHeaderCC
 *   ソースファイル名：JKKSameScreenHeaderCC.java
 *   作成者          ：富士通
 *   日付            ：2012年03月08日
 *＜機能概要＞
 *   契約管理システム内画面共通ヘッダに表示する情報を取得する
 *   
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2012/03/08   FJ          新規作成
 *   v4.00.00    2012/11/13   FJ          ファミリーパック有無の取得を追加
 *   v6.00.00    2013/11/25   FJ          多機能ルータ判別処理の追加
 *  v33.00.00    2017/07/14   FJ)三原     ANK-3181-00-00_(客C)督促ステータスのコード表示
 *  v41.00.00    2019/01/30   FJ) 杉本    ANK-3396-00-00_利用停止スケジュールの変更
 *  v61.00.00    2023/01/20   FJ) 北川    ANK-4315-00-00_【eo定期】eoホームゲートウェイ導入対応
 *  v61.00.01    2022/03/16   FJ)新井     ANK-4315-00-00_【eo定期】eoホームゲートウェイ導入対応
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
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.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;
import com.sun.enterprise.tools.common.util.StringUtils;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKK0011C110CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B004CBSMsg1List; 
//▼▼▼▼▼2013/11/22 ANK-1578-00-00 ADD START ▼▼▼▼▼
//========================================================
// 機器提供オプションサービス契約一覧照会
// ========================================================
import eo.ejb.cbs.cbsmsg.EKK2811B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811B010CBSMsg1List; 
//▲▲▲▲▲2013/11/22 ANK-1578-00-00 ADD E N D ▲▲▲▲▲
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg1List; 
//▼▼▼▼▼2013/11/22 ANK-1578-00-00 ADD START ▼▼▼▼▼
//========================================================
//機器提供サービス契約一覧照会(サービス契約番号、回線対象サービス契約経由)
//========================================================
import eo.ejb.cbs.cbsmsg.EKK0341B019CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B019CBSMsg1List; 
//▲▲▲▲▲2013/11/22 ANK-1578-00-00 ADD E N D ▲▲▲▲▲
import eo.ejb.cbs.cbsmsg.EKK0451B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0171A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0171A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECH0231A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0231A010CBSMsg1List;

/**
 * <pre>
 * サービス契約更新画面等の共通ヘッダに表示する情報を一括して取得するCC部品です。
 * 詳細
 * 　下記インプットデータのキーにデータをセットしている場合、
 * 　対応するアウトプットデータが取得できます。
 * 
 * ＩＮＰＵＴ                             ＯＵＴＰＵＴ
 * ================================================================================
 * @請求契約番号     （IN_SEIKY_KEI_NO） 督促ステータス名称    （OUT_TOKUSOKU_STAT_NM）
 * A異動区分         （IN_IDO_DIV）      異動区分名称          （OUT_IDO_DIV_NM）
 * Bサービス契約番号 （IN_SVC_KEI_NO）   ルータ種別            （OUT_ROUTER_SBT_NM）
 *                                        ファミリーパック有無  （OUT_FAMILY_PACK_UM）
 * </pre>
 * @author 富士通
 * @since 2012-03-08 新規（ST2-2012-0000326対応）
 */
public class JKKSameScreenHeaderCC extends AbstractCommonComponent {
	/**************************************************************/
	/** 変数宣言領域 **/
	/**************************************************************/
	/** エラーメッセージ */
	private static final String ERR_MSG = "INVALID_RETURN_MESSAGE";

	/** 入力データ：サービス契約番号 */
	public static final String IN_SVC_KEI_NO = "svc_kei_no";
	/** 入力データ：請求契約番号 */
	public static final String IN_SEIKY_KEI_NO = "seiky_kei_no";
	/** 入力データ：異動区分 */
	public static final String IN_IDO_DIV = "ido_div";
	// ▼▼▼▼▼ 2012/11/13 IT1-2012-0001795 ADD START ▼▼▼▼▼
	/** 入力データ：ＳＹＳＩＤ */
	public static final String IN_SYSID = "sysid";
	/** 入力データ：サービス契約番号（ネットサービス） */
	public static final String IN_NET_SVC_KEI_NO = "net_svc_kei_no";
	// ▲▲▲▲▲ 2012/11/13 IT1-2012-0001795 ADD E N D ▲▲▲▲▲

	// ▼▼▼▼▼2013/11/22 ANK-1578-00-00 ADD START ▼▼▼▼▼
	/** 入力データ： */
	public static final String KKTK_SVC_KEI_NO = "kktk_svc_kei_no";
	// ▲▲▲▲▲2013/11/22 ANK-1578-00-00 ADD E N D ▲▲▲▲▲
	/** 出力データ：督促ステータス名称 */
	public static final String OUT_TOKUSOKU_STAT_NM = "tokusoku_stat_nm";
	/** 出力データ：異動区分名称 */
	public static final String OUT_IDO_DIV_NM = "ido_div_nm";
	/** 出力データ：ルータ種別 */
	public static final String OUT_ROUTER_SBT_NM = "router_sbt_nm";
	// ▼▼▼▼▼ 2012/11/13 IT1-2012-0001795 ADD START ▼▼▼▼▼
	/** 出力データ：ファミリーパック有無 */
	public static final String OUT_FAMILY_PACK_UM = "family_pack_um";
	// ▲▲▲▲▲ 2012/11/13 IT1-2012-0001795 ADD E N D ▲▲▲▲▲

	/** コード種別 */
	private static final String CD_SBT_IDO_DIV = "CD00576"; // 異動区分
	private static final String CD_SBT_TOKUSOKU_STAT = "CD00184"; // 督促ステータス

	/** コード区分 */
	private static final String TOKUSOKU_STAT_NON = "00"; // 督促ステータス：督促なし

	/** 機器提供サービスコード */
	private static final String DEF_KKTK_SVC_CD = "C014"; // ブロードバンドルータ
	// ▼▼▼▼▼2013/11/22 ANK-1578-00-00 ADD START ▼▼▼▼▼
	/** 機器提供サービスコード(多機能ルータ) */

	private static final String TAK_KKTK_SVC_CD = "C024"; // 多機能ルータ
	// ANK-4315-00-00 ADD START
	/** 機器提供サービスコード(ＨＧＷ) */

	private static final String HGW_KKTK_SVC_CD = "C025"; // ＨＧＷ
	// ANK-4315-00-00 ADD END
	/** 機器提供オプションサービスコード */

	private static final String TAKI_KKOP_SVC_CD = "G01"; // 多機能ルータのルータ機能
	/** 料金コースコード */
	private static final String PCRS_CD_TAKI_MSN = "G01"; // 多機能ルータ無線
	private static final String PCRS_CD_TAKI_YSN = "G02"; // 多機能ルータ有線
	// ▲▲▲▲▲2013/11/22 ANK-1578-00-00 ADD E N D ▲▲▲▲
	
	// ▼▼▼▼▼2023/03/16 ANK-4315-00-00 ADD START ▼▼▼▼▼
	/** 料金コースコード */
	private static final String PCRS_CD_HGW_MSN = "G01"; // HGW無線
	private static final String PCRS_CD_HGW_YSN = "G02"; // HGW有線
	// ▲▲▲▲▲2023/03/16 ANK-4315-00-00 ADD E N D ▲▲▲▲
	
	/** サービスコード */
	private static final String SVC_CD_NET = "01"; // インターネット

	/** 割引サービスコード */
	private static final String WRIB_SVC_CD_FP_WRIB = "W00000006"; // ファミリーパック

	/** 検索パラメータ */
	private static final String DEF_SORT_KBN = "1"; // ソート区分
	private static final String MAX_DATA_COUNT = "10000"; // 最大件数
	private static final String START_PAGE_NO = "1"; // 検索ページ番号

	/** 除外するステータスを定義 */
	private static final String[] IGNORE_STATUS = {
			"910", // 解約済ステータス
			"920", // キャンセル済ステータス
	};

	/** 入力パラメータ：ＫＥＹ＿宅内機器型式コード */
	private static final String IN_KEY_TAKNKIKI_MODEL_CD = "key_taknkiki_model_cd";

	/** ルータ種別 */
	private static final String NOTHING_MGS = "無"; // 機器が存在しない場合
	private static final String SOME_ROUTER_MSG = "複数"; // 機器が複数存在する場合
	// ▼▼▼▼▼2013/11/22 -1578-00-00 ADD START ▼▼▼▼▼
	private static final String TAKI_ROUTER_MR = "無料(多)"; // 多機能ルータの有線ルータ機能
	private static final String TAKI_ROUTER_YR = "有料(多)"; // 多機能ルータの無線ルータ機能
	// ▲▲▲▲▲2013/11/22 ANK-1578-00-00 ADD E N D ▲▲▲▲▲
	// ▼▼▼▼▼2023/03/16 ANK-4315-00-00 ADD START ▼▼▼▼▼
	private static final String HGW_ROUTER_MR = "無料(HGW)"; // HGWの有線ルータ機能
	private static final String HGW_ROUTER_YR = "有料(HGW)"; // HGWの無線ルータ機能
	// ▲▲▲▲▲2023/03/16 ANK-4315-00-00 ADD E N D ▲▲▲▲
	/** ファミリーパック有無 */
	private static final String FAMILY_PACK_U = "有";
	private static final String FAMILY_PACK_M = "無";

	// ▼▼▼▼▼ 2013/07/08 LT-2013-0000322 ADD START ▼▼▼▼▼
	/** 入力データ：サービスコード */
	public static final String SVC_CD = "svc_cd";
	/** 料金グループコード（eoモバイル(Wi-Fi)） */
	public static final String PRC_GRP_CD_07 = "07";
	/** 料金グループコード（eoモバイル(EM)） */
	public static final String PRC_GRP_CD_08 = "08";
	/** 料金グループコード（eoモバイル(UQ-WiMAX)） */
	public static final String PRC_GRP_CD_09 = "09";
	/** 料金グループコード（eoモバイル(メールアドレス)） */
	public static final String PRC_GRP_CD_16 = "16";
	// ▲▲▲▲▲ 2013/07/08 LT-2013-0000322 ADD E N D ▲▲▲▲▲
	// ▼▼▼▼▼2013/11/22 -1578-00-00 ADD START ▼▼▼▼▼
	/** 対象データ */
	public static final String REQ_TRGT_DATA = "trgt_data";

	// ▲▲▲▲▲2013/11/22 ANK-1578-00-00 ADD E N D ▲▲▲▲▲
// ANK-3396-00-00 2019/02/07 ADD START
	/** 業務パラメータＩＤ（強制解約予告規定回数） */
	private static final String WK_PARAM_ID_KYOSEI_DSL_YKK_KITEI_CNT = "KK_KYOSEI_DSL_YKKCNT";

// ANK-3396-00-00 2019/02/07 ADD END
	/**************************************************************/
	/** メイン処理領域 **/
	/**************************************************************/
	/**
	 * メイン処理<br>
	 * <br>
	 * 
	 * @param handle
	 *            セッションハンドル
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param fixedText
	 *            ユーザ定義文字列
	 * @return IRequestParameterReadWrite 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite runGetSameScreenHeaderInfo(
			SessionHandle handle, IRequestParameterReadWrite param,
			String fixedText) throws Throwable {
		// 入力パラメータを取得
		HashMap<String, Object> ioMap = (HashMap<String, Object>) param.getData(fixedText);

		// ========================================================
		// 入力データ（キー：請求契約番号）が存在する場合は、
		// 督促ステータス名称を取得する
		// ========================================================
		if (!isNullChkInMap(ioMap, IN_SEIKY_KEI_NO)) {
			// 督促ステータス名称の取得
			param = getTokusokuStat(handle, param, fixedText);
		} else {
			// 督促ステータス名称　空セット
			ioMap.put(OUT_TOKUSOKU_STAT_NM, "");
		}

		// ========================================================
		// 入力データ（キー：異動区分）が存在する場合は、
		// 異動区分名称を取得する
		// ========================================================
		if (!isNullChkInMap(ioMap, IN_IDO_DIV)) {
			// 異動区分名称の取得
			param = getIdoDivNm(handle, param, fixedText);
		} else {
			// 異動区分名称　空セット
			ioMap.put(OUT_IDO_DIV_NM, "");
		}

		// ▼▼▼▼▼ 2012/11/13 IT1-2012-0001795 ADD START ▼▼▼▼▼
		// ========================================================
		// 入力データ（キー：サービス契約番号）が存在する場合は、
		// 以下の処理を実行する
		// ========================================================
		if (!isNullChkInMap(ioMap, IN_SVC_KEI_NO)) {
			// ネットサービスを取得する
			boolean netFlg = getNetService(handle, param, fixedText);

			// ========================================================
			// SYSID、サービス契約番号（ネットサービス）が取得できた場合は、
			// ルータ種別、ファミリーパック有無を取得する
			// ========================================================
			if (netFlg) {
				// ルータ種別の取得
				param = getRouterSBT(handle, param, fixedText);

				// ファミリーパック有無の取得
				param = getFamilyPackUm(handle, param, fixedText);
			} else {
				// ルータ種別　"無し"セット
				ioMap.put(OUT_ROUTER_SBT_NM, "");
				// ファミリーパック有無　"無"セット
				ioMap.put(OUT_FAMILY_PACK_UM, "");
			}
		} else {
			// ルータ種別　空セット
			ioMap.put(OUT_ROUTER_SBT_NM, "");
			// ファミリーパック有無　空セット
			ioMap.put(OUT_FAMILY_PACK_UM, "");
		}
		// ▲▲▲▲▲ 2012/11/13 IT1-2012-0001795 ADD E N D ▲▲▲▲▲

		return param;
	}

	/**
	 * 契約管理システム共通画面ヘッダ表示情報を取得します。<br>
	 * <br>
	 * 
	 * @param handle
	 *            セッションハンドル
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param mapNm
	 *            ユーザ定義文字列
	 * @return IRequestParameterReadWrite 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public static IRequestParameterReadWrite getUnifiedHeaderInfo(
			SessionHandle handle, IRequestParameterReadWrite param, String mapNm)
			throws Throwable {
		// 入力パラメータを取得
		HashMap<String, Object> ioMap = (HashMap<String, Object>) param.getData(mapNm);

		// 督促状態の取得
		param = getTokusokuStat(handle, param, mapNm);

		if (!isNullChkInMap(ioMap, IN_IDO_DIV)) {
			// 異動区分名称の取得
			param = getIdoDivNm(handle, param, mapNm);
		} else {
			// 異動区分名称
			ioMap.put(OUT_IDO_DIV_NM, "");
		}

		return param;
	}

	/**************************************************************/
	/** 共通処理領域 **/
	/**************************************************************/
	/**
	 * サービスI/F実行用の共通部を設定します。<br>
	 * <br>
	 * 
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @return HashMap SCインプット共通データ格納HashMap
	 * @throws RequestParameterException
	 */
	private static HashMap<String, Object> editInMsgCmn(
			IRequestParameterReadOnly param) throws RequestParameterException {
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param
				.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param
				.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param
				.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param
				.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		return paramMap;
	}

	/**
	 * template に対して共通部のキーをマッピングします。<br>
	 * <br>
	 * 
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param template
	 *            CAANMsgクラス
	 * @return なし
	 * @throws RequestParameterException
	 */
	private static void mappingBasicCmn(IRequestParameterReadOnly param,
			CAANMsg template) throws RequestParameterException {
		// オペレータID
		Object operatorId = param
				.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		// 運用日時
		Object operateDateTime = param
				.getControlMapData(SCControlMapKeys.OPE_TIME);

		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
	}

	/**
	 * template に対して検索条件の共通部のキーをマッピングします。<br>
	 * <br>
	 * 
	 * @param template
	 *            CAANMsgクラス
	 * @param searchType
	 *            検索処理パターン
	 * @param maxSearchNum
	 *            最大検索件数
	 * @param displayNum
	 *            表示件数
	 * @param displayPageNum
	 *            表示ページ番号
	 * @return なし
	 * @throws RequestParameterException
	 */
	private static void mappingSearchBasicCmn(CAANMsg template,
			String searchType, String maxSearchNum, String displayNum,
			String displayPageNum) throws RequestParameterException {
		// 検索処理パターン
		template.set(searchType, JPCModelConstant.SAERCH_TYPE_IKT);
		// 最大検索件数
		template.set(maxSearchNum, MAX_DATA_COUNT);
		// 表示件数
		template.set(displayNum, MAX_DATA_COUNT);
		// 表示ページ番号
		template.set(displayPageNum, START_PAGE_NO);
	}

	/**
	 * 全要素に「NULL」をマッピングします。<br>
	 * <br>
	 * 
	 * @param template
	 *            対象クラス
	 * @param contents
	 *            対応クラスのフィールド列挙
	 */
	private static void fillCAANMSGNullMapping(CAANMsg template,
			Object[][] contents) {
		// 要素数分、繰り返す
		for (int i = 0; i < contents.length; i++) {
			Object element = null;
			// キーの取得
			element = contents[i][0];
			// 「NULL」をマッピング
			template.setNull((String) element);
		}
	}

	/**
	 * エラーチェック処理<br>
	 * <br>
	 * 
	 * @param msgList
	 *            サービスインタフェース実行結果
	 * @return なし
	 * @throws SCCallException
	 */
	private static void errChk(Map<?, ?> msgList) throws SCCallException {
		CAANMsg[] templates = (CAANMsg[]) msgList
				.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		int returnCode = (Integer) msgList.get(JCMConstants.RET_CD_INT_KEY);

		// ステータス
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if ((0 != returnCode) || (0 != templateStatus)) {
			throw new SCCallException(ERR_MSG, String.valueOf(returnCode),
					templateStatus);
		}
	}

	/**
	 * NULLチェック（HashMap用）処理<br>
	 * <br>
	 * 
	 * @param inMap
	 *            入力パラメータ（HashMap）
	 * @param inMapKey
	 *            入力パラメータキー
	 * @return boolean チェック結果（NULL：TRUE　NULL以外：FALSE）
	 */
	private static boolean isNullChkInMap(HashMap<String, Object> inMap,
			String inMapKey) {
		boolean ret = false;

		if (inMap == null || (String) inMap.get(inMapKey) == null
				|| "".equals((String) inMap.get(inMapKey))) {
			ret = true;
		}

		return ret;
	}

	/**************************************************************/
	/** コード名称取得処理領域 **/
	/**************************************************************/
	/**
	 * コード名称管理一意照会実行処理<br>
	 * <br>
	 * 
	 * @param handle
	 *            セッションハンドル
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param cdSbtCd
	 *            コード種別
	 * @param cdDivCd
	 *            コード区分
	 * @return String コード区分名称
	 * @throws Throwable
	 */
	private static String execEZM0171A010(SessionHandle handle,
			IRequestParameterReadWrite param, String cdSbtCd, String cdDivCd)
			throws Throwable {
		String idoCdDiv = "";

		// ========================================================
		// コード名称管理一意照会を実行して、
		// コード区分名称を取得する
		// ========================================================
		HashMap<String, Object> paramMap = editInEZM0171A010(param, cdSbtCd,
				cdDivCd);

		// サービスの呼び出し
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> outputData = scCall.run(paramMap, handle);

		// エラーチェック
		editResult(outputData, param);
		errChk(outputData);

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[]) outputData
				.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		templateArray = parentTemplate
				.getCAANMsgList(EZM0171A010CBSMsg.EZM0171A010CBSMSG1LIST);

		if (templateArray != null) {
			CAANMsg childTemplate = templateArray[0];

			if (!childTemplate.isNull(EZM0171A010CBSMsg1List.CD_DIV_NM)) {
				// 異動区分名称を取得する
				idoCdDiv = childTemplate
						.getString(EZM0171A010CBSMsg1List.CD_DIV_NM);
			}
		}

		return idoCdDiv;
	}

	/**
	 * コード名称管理一意照会の上りマップ<br>
	 * <br>
	 * 
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param cdSbtCd
	 *            コード種別
	 * @param cdDivCd
	 *            コード区分
	 * @return HashMap パラメータ
	 * @throws Throwable
	 */
	private static HashMap<String, Object> editInEZM0171A010(
			IRequestParameterReadWrite param, String cdSbtCd, String cdDivCd)
			throws Throwable {
		// サービスI/F実行用の共通部を設定する
		HashMap<String, Object> paramMap = editInMsgCmn(param);

		CAANMsg template = new CAANMsg(EZM0171A010CBSMsg.class.getName());

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EZM0171A010CBSMsg().getContents());

		// テンプレートID
		template.set(EZM0171A010CBSMsg.TEMPLATEID, "EZM0171A010");

		// 機能コード(サービス契約一意照会)
		template.set(EZM0171A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 共通部マッピング
		mappingBasicCmn(param, template);

		// 検索共通部マッピング
		mappingSearchBasicCmn(template, EZM0171A010CBSMsg.SEARCH_TYPE,
				EZM0171A010CBSMsg.MAX_SEARCH_NUM,
				EZM0171A010CBSMsg.DISPLAY_NUM,
				EZM0171A010CBSMsg.DISPLAY_PAGE_NUM);

		// ＫＥＹ＿コード種別
		template.set(EZM0171A010CBSMsg.KEY_CD_SBT_CD, cdSbtCd);

		// ＫＥＹ＿コード区分
		template.set(EZM0171A010CBSMsg.KEY_CD_DIV, cdDivCd);

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**************************************************************/
	/** 督促状態取得処理領域 **/
	/**************************************************************/
	/**
	 * 督促状態を取得します。<br>
	 * <br>
	 * 
	 * @param handle
	 *            セッションハンドル
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param fixedText
	 *            ユーザ定義文字列
	 * @return IRequestParameterReadWrite 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private static IRequestParameterReadWrite getTokusokuStat(
			SessionHandle handle, IRequestParameterReadWrite param,
			String fixedText) throws Throwable {
		// 督促ステータス名称
		String tokusokuStatNm = "";
		//ANK-3181-00-00 ADD START
		// 督促ステータス
		String tokusokuStat = "";
		//ANK-3181-00-00 ADD END
// ANK-3396-00-00 2019/01/31 ADD START
		//早期利用停止フラグ
		String earlyUseStpTgFlg = "";
// ANK-3396-00-00 2019/01/31 ADD END

		// 入力パラメータを取得
		HashMap<String, Object> ioMap = (HashMap<String, Object>) param
				.getData(fixedText);

		// ========================================================
		// 督促一意照会を実行して、督促状態を取得する
		// ========================================================
		HashMap<String, Object> paramMap = editInECH0231A010(param, ioMap);

		// サービスの呼び出し
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> outputData = scCall.run(paramMap, handle);
		// ↓↓↓2012-12-17追加　契約突合でエラー発覚↓↓↓
		editResult(outputData, param);
		errChk(outputData); // エラーチェック
		// ↑↑↑2012-12-17追加　契約突合でエラー発覚↑↑↑

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[]) outputData
				.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		templateArray = parentTemplate
				.getCAANMsgList(ECH0231A010CBSMsg.ECH0231A010CBSMSG1LIST);

		if (null != templateArray && 0 < templateArray.length) {
			CAANMsg childTemplate = templateArray[0];

			if (!childTemplate.isNull(ECH0231A010CBSMsg1List.TOKUSOKU_STAT_NM)) {
				// 督促状態を取得する
				tokusokuStatNm = childTemplate
						.getString(ECH0231A010CBSMsg1List.TOKUSOKU_STAT_NM);
			}
			//ANK-3181-00-00 ADD START
			if( !childTemplate.isNull(ECH0231A010CBSMsg1List.TOKUSOKU_STAT)) 
			{
				// 督促ステータスのコード値を取得する
				tokusokuStat = childTemplate
						.getString(ECH0231A010CBSMsg1List.TOKUSOKU_STAT);
			}
			//ANK-3181-00-00 ADD END
// ANK-3396-00-00 2019/01/31 ADD START
			if (!childTemplate.isNull(ECH0231A010CBSMsg1List.EARLY_USE_STP_TG_FLG))
			{
				earlyUseStpTgFlg = childTemplate.getString(ECH0231A010CBSMsg1List.EARLY_USE_STP_TG_FLG);
			}
// ANK-3396-00-00 2019/01/31 ADD END
		} else {
			// コード名称管理一意照会実行
			tokusokuStatNm = execEZM0171A010(handle, param,
					CD_SBT_TOKUSOKU_STAT, TOKUSOKU_STAT_NON);
			//ANK-3181-00-00 ADD START
			tokusokuStat = TOKUSOKU_STAT_NON;
			//ANK-3181-00-00 ADD END
		}
// ANK-3396-00-00 2019/01/30 ADD START

		// ========================================================
		// 請求契約一意照会を実行して、強制解約予告回数を取得する
		// ========================================================
		HashMap<String, Object> inMap_KK0491 = editInEKK0491A010(param, ioMap);

		// サービスの呼び出し
		ServiceComponentRequestInvoker scCall_KK0491 = new ServiceComponentRequestInvoker();
		Map<?, ?> outputKK0491Data = scCall_KK0491.run(inMap_KK0491, handle);

		CAANMsg[] templates_KK0491 = (CAANMsg[]) outputKK0491Data.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate_KK0491 = templates_KK0491[0];
		CAANMsg[] templateArray_KK0491 = null;

		String kyoseiDslYkkCnt = "0";

		templateArray_KK0491 = parentTemplate_KK0491.getCAANMsgList(EKK0491A010CBSMsg.EKK0491A010CBSMSG1LIST);

		if (null != templateArray_KK0491 && 0 < templateArray_KK0491.length)
		{
			CAANMsg childTemplate = templateArray_KK0491[0];

			if (!childTemplate.isNull(EKK0491A010CBSMsg1List.KYOSEI_DSL_YKK_CNT))
			{
				// 強制解約予告回数を取得する
				kyoseiDslYkkCnt = childTemplate.getString(EKK0491A010CBSMsg1List.KYOSEI_DSL_YKK_CNT);
			}
		}

		// ========================================================
		// 業務パラメータ照会を実行して、強制解約予告規定回数を取得する
		// ========================================================
		HashMap<String, Object> inMap_ZM0321 = editInEZM0321A010(param, ioMap);

		// サービスの呼び出し
		ServiceComponentRequestInvoker scCall_ZM0321 = new ServiceComponentRequestInvoker();
		Map<?, ?> outputZM0321Data = scCall_ZM0321.run(inMap_ZM0321, handle);

		CAANMsg[] templates_ZM0321 = (CAANMsg[]) outputZM0321Data.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate_ZM0321 = templates_ZM0321[0];
		CAANMsg[] templateArray_ZM0321 = null;

		int wkPrmKysiDslYkkKtiCnt = 0;

		templateArray_ZM0321 = parentTemplate_ZM0321.getCAANMsgList(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);

		if (null != templateArray_ZM0321 && 0 < templateArray_ZM0321.length)
		{
			CAANMsg childTemplate = templateArray_ZM0321[0];

			if (!JKKStringUtil.isNullBlank(childTemplate.getString(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE)))
			{
				// 強制解約予告規定回数を取得する
				wkPrmKysiDslYkkKtiCnt = Integer.parseInt(childTemplate.getString(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
			}
		}
// ANK-3396-00-00 2019/01/30 ADD END

		// 督促ステータス名称をセット
		//ANK-3181-00-00 MOD START
		//ioMap.put(OUT_TOKUSOKU_STAT_NM, tokusokuStatNm);
		ioMap.put(OUT_TOKUSOKU_STAT_NM, tokusokuStat + ":" + tokusokuStatNm);
		//ANK-3181-00-00 MOD END
// ANK-3396-00-00 2019/01/31 ADD START

		String statNm = (String)ioMap.get(OUT_TOKUSOKU_STAT_NM);

		//早期利用停止フラグの文言付加
		if ("1".equals(earlyUseStpTgFlg))
		{
			statNm = statNm + "／早期利停";
		}

		//ST15回数の文言付加
		if (Integer.parseInt(kyoseiDslYkkCnt) > wkPrmKysiDslYkkKtiCnt)
		{
			statNm = statNm + "／事務手要";
		}
		else
		{
			statNm = statNm + "／ST15:" + kyoseiDslYkkCnt + "回";
		}
		
		ioMap.put(OUT_TOKUSOKU_STAT_NM, statNm);
// ANK-3396-00-00 2019/01/31 ADD END

		return param;
	}

	/**
	 * 
	 * @param msgList
	 * @param param
	 * @throws Exception
	 * @since 2012-12-17 契約突合障害
	 */
	private static void editResult(Map<?, ?> msgList,
			IRequestParameterReadWrite param) throws Exception {
		// リターンコード取得
		Integer returnCode = (Integer) msgList.get(JCMConstants.RET_CD_INT_KEY);

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[]) msgList
				.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		if (returnCode != 0) {
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_"
				+ String.format("%1$04d", templateStatus)) == null) {
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null) {
			bpStatus = -1;
		} else {
			bpStatus = Integer.parseInt((String) param
					.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus) {
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_"
					+ formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		ArrayList<Object> errList = new ArrayList<Object>();

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil
				.getErrorInfo(msgList, errList));
	}

	/**
	 * 督促一意照会の上りマップ<br>
	 * <br>
	 * 
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param inMap
	 *            入力マップ
	 * @return HashMap パラメータ
	 * @throws Throwable
	 */
	private static HashMap<String, Object> editInECH0231A010(
			IRequestParameterReadWrite param, HashMap<String, Object> inMap)
			throws Throwable {
		// サービスI/F実行用の共通部を設定する
		HashMap<String, Object> paramMap = editInMsgCmn(param);

		CAANMsg template = new CAANMsg(ECH0231A010CBSMsg.class.getName());

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new ECH0231A010CBSMsg().getContents());

		// テンプレートID
		template.set(ECH0231A010CBSMsg.TEMPLATEID, "ECH0231A010");

		// 機能コード(サービス契約一意照会)
		template.set(ECH0231A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);

		// 共通部マッピング
		mappingBasicCmn(param, template);

		// 検索共通部マッピング
		mappingSearchBasicCmn(template, ECH0231A010CBSMsg.SEARCH_TYPE,
				ECH0231A010CBSMsg.MAX_SEARCH_NUM,
				ECH0231A010CBSMsg.DISPLAY_NUM,
				ECH0231A010CBSMsg.DISPLAY_PAGE_NUM);

		// ＫＥＹ＿請求契約番号
		if (!isNullChkInMap(inMap, IN_SEIKY_KEI_NO)) {
			template.set(ECH0231A010CBSMsg.KEY_SEIKY_KEI_NO, (String) inMap
					.get(IN_SEIKY_KEI_NO));
		}

		// ↓↓↓2012-12-17追加　契約突合でエラー発覚↓↓↓
		// ＫＥＹ＿督促管理年月日
		template.set(ECH0231A010CBSMsg.KEY_TOKUSOKU_KANRI_YMD, JKKBpCommon
				.getOpeDate(null));
		// ↑↑↑2012-12-17追加　契約突合でエラー発覚↑↑↑

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}
// ANK-3396-00-00 2019/01/30 ADD START

	/**
	 * 請求契約一意照会の上りマップ<br>
	 * <br>
	 * 
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param inMap
	 *            入力マップ
	 * @return HashMap パラメータ
	 * @throws Throwable
	 */
	private static HashMap<String, Object> editInEKK0491A010(IRequestParameterReadWrite param, HashMap<String, Object> inMap)throws Throwable
	{
		// サービスI/F実行用の共通部を設定する
		HashMap<String, Object> paramMap = editInMsgCmn(param);

		CAANMsg template = new CAANMsg(EKK0491A010CBSMsg.class.getName());

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0491A010CBSMsg().getContents());
		// テンプレートID
		template.set(EKK0491A010CBSMsg.TEMPLATEID, "EKK0491A010");
		// 機能コード(サービス契約一意照会)
		template.set(EKK0491A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);
		// 共通部マッピング
		mappingBasicCmn(param, template);
		// 検索共通部マッピング
		mappingSearchBasicCmn(template, EKK0491A010CBSMsg.SEARCH_TYPE,
				EKK0491A010CBSMsg.MAX_SEARCH_NUM,
				EKK0491A010CBSMsg.DISPLAY_NUM,
				EKK0491A010CBSMsg.DISPLAY_PAGE_NUM);

		// ＫＥＹ＿請求契約番号
		if (!isNullChkInMap(inMap, IN_SEIKY_KEI_NO)) {
			template.set(EKK0491A010CBSMsg.KEY_SEIKY_KEI_NO, (String) inMap.get(IN_SEIKY_KEI_NO));
		}
		// ＫＥＹ＿督促管理年月日
		template.set(EKK0491A010CBSMsg.KEY_RSV_APLY_YMD, JKKBpCommon.getOpeDate(null));

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * 業務パラメータ照会の上りマップ<br>
	 * <br>
	 * 
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param inMap
	 *            入力マップ
	 * @return HashMap パラメータ
	 * @throws Throwable
	 */
	private static HashMap<String, Object> editInEZM0321A010(IRequestParameterReadWrite param, HashMap<String, Object> inMap)throws Throwable
	{
		// サービスI/F実行用の共通部を設定する
		HashMap<String, Object> paramMap = editInMsgCmn(param);

		CAANMsg template = new CAANMsg(EZM0321A010CBSMsg.class.getName());

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EZM0321A010CBSMsg().getContents());
		// テンプレートID
		template.set(EZM0321A010CBSMsg.TEMPLATEID, "EZM0321A010");
		// 機能コード(サービス契約一意照会)
		template.set(EZM0321A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		// 共通部マッピング
		mappingBasicCmn(param, template);
		// 検索共通部マッピング
		mappingSearchBasicCmn(template, EZM0321A010CBSMsg.SEARCH_TYPE,
				EZM0321A010CBSMsg.MAX_SEARCH_NUM,
				EZM0321A010CBSMsg.DISPLAY_NUM,
				EZM0321A010CBSMsg.DISPLAY_PAGE_NUM);

		// ＫＥＹ＿業務パラメータＩＤ
		template.set(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, WK_PARAM_ID_KYOSEI_DSL_YKK_KITEI_CNT);

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}
// ANK-3396-00-00 2019/01/30 ADD END

	/**************************************************************/
	/** 異動区分名称取得処理領域 **/
	/**************************************************************/
	/**
	 * 異動区分を取得します。<br>
	 * <br>
	 * 
	 * @param handle
	 *            セッションハンドル
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param fixedText
	 *            ユーザ定義文字列
	 * @return IRequestParameterReadWrite 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	private static IRequestParameterReadWrite getIdoDivNm(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText)
			throws Throwable {
		// 入力パラメータを取得
		HashMap<String, Object> ioMap = (HashMap<String, Object>) param
				.getData(fixedText);

		// コード名称管理一意照会実行
		String idoCdDiv = execEZM0171A010(handle, param, CD_SBT_IDO_DIV,
				(String) ioMap.get(IN_IDO_DIV));

		// 異動区分名称を保有する
		ioMap.put(OUT_IDO_DIV_NM, idoCdDiv);

		return param;
	}

	/**************************************************************/
	/** ルータ種別取得処理領域 **/
	/**************************************************************/
	/**
	 * ルータ種別を取得します。<br>
	 * <br>
	 * 
	 * @param handle
	 *            セッションハンドル
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param fixedText
	 *            ユーザ定義文字列
	 * @return IRequestParameterReadWrite 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite getRouterSBT(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText)
			throws Throwable
	// ▼▼▼▼▼2013/11/25 ANK-1578-00-00 MOD START ▼▼▼▼▼
	/*
	 * // 入力パラメータを取得する // { // HashMap<String, Object> ioMap = (HashMap<String,
	 * Object>)param.getData(fixedText); // // //
	 * ======================================================== // //
	 * 機器提供サービス契約一覧照会（サービス契約番号）を実行して、 // // 利用中の機器を取得する // //
	 * ======================================================== // //
	 * 機器提供サービス契約一覧照会（サービス契約番号）の上りマップ // HashMap<String, Object> paramMap1 =
	 * editInEKK0341B002(param, ioMap); // // // サービスの呼び出し //
	 * ServiceComponentRequestInvoker scCall = new
	 * ServiceComponentRequestInvoker(); // Map<?, ?> outputData1 =
	 * scCall.run(paramMap1, handle); // // // エラーチェック //
	 * editResult(outputData1, param); // errChk(outputData1); // // //
	 * 利用中の機器のみを取得する // ArrayList<String> equipmentList =
	 * getEquipmentList(outputData1); // // // 検索結果を判定する // if
	 * (equipmentList.size() > 1) // { // // 検索結果が複数ある場合 //
	 * ioMap.put(OUT_ROUTER_SBT_NM, SOME_ROUTER_MSG); // } // else if
	 * (equipmentList.size() == 1) // { // // 検索結果が１つの場合 //
	 * ioMap.put(IN_KEY_TAKNKIKI_MODEL_CD, equipmentList.get(0)); // // //
	 * ======================================================== // //
	 * 利用中の機器の有料無料を判定する // //
	 * ======================================================== // //
	 * 宅内機器型式一意照会の上りマップ // HashMap<String, Object> paramMap2 =
	 * editInEZM0411A010(param, ioMap); // // // サービスの呼び出し // Map<?, ?>
	 * outputData2 = new ServiceComponentRequestInvoker().run(paramMap2,
	 * handle); // // // エラーチェック // editResult(outputData2, param); //
	 * errChk(outputData2); // // // 結果の取得 // ioMap.put(OUT_ROUTER_SBT_NM,
	 * getYryoMryoNm(outputData2)); // } // else // { // // 検索結果がない場合 //
	 * ioMap.put(OUT_ROUTER_SBT_NM, NOTHING_MGS); // } // // return param; // }
	 */
	// ▲▲▲▲▲2013/11/25 ANK-1578-00-00 MOD E N D ▲▲▲▲▲
	// ▼▼▼▼▼2013/11/22 ANK-1578-00-00 ADD START ▼▼▼▼▼
	{
		// 旧機器存在フラグ
		boolean kyukikiFlg = false;

		// 入力パラメータを取得する
		HashMap<String, Object> ioMap = (HashMap<String, Object>) param
				.getData(fixedText);
		// ========================================================
		// 機器提供サービス契約一覧照会（サービス契約番号）を実行して、
		// 利用中の機器を取得する:旧ルータ
		// ========================================================
		// 機器提供サービス契約一覧照会（サービス契約番号）の上りマップ
		HashMap<String, Object> paramMapKyu = editInEKK0341B002(param, ioMap);

		// サービスの呼び出し
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> outputDataKyu = scCall.run(paramMapKyu, handle);

		// エラーチェック
		editResult(outputDataKyu, param);
		errChk(outputDataKyu);

		// 利用中の機器のみを取得する
		ArrayList<String> equipmentListKyu = getEquipmentList(outputDataKyu);

		// 旧機器存在が存在する場合フラグを真に
		if (equipmentListKyu != null && equipmentListKyu.size() > 0 && !"".equals(equipmentListKyu)) {
			kyukikiFlg = true;
		}

		// ========================================================
		// 機器提供サービス契約一覧照会（サービス契約番号、回線対象サービス契約経由）を実行して、
		// 利用中の機器を取得する:多機能ルータ
		// ========================================================
		// 機器提供サービス契約一覧照会（サービス契約番号、回線対象サービス契約経由）結果
		ArrayList<HashMap<String, Object>> eKK0341B019HashList = new ArrayList<HashMap<String, Object>>();

		// 機器提供サービス契約一覧照会（サービス契約番号、回線対象サービス契約経由）
		callKK0341B019SC(param, handle, ioMap, eKK0341B019HashList);

		// ==================================================================================
		// ※※※※※※※※機器情報（旧ルータ、多機能ルータ）表示判定処理開始※※※※※※※※
		// ==================================================================================

		// 旧ルータ、多機能ルーターが共にない場合、「無」で返却
		if ((equipmentListKyu == null && equipmentListKyu.size() < 1)
				&& (eKK0341B019HashList == null && eKK0341B019HashList.size() < 1)) {
			ioMap.put(OUT_ROUTER_SBT_NM, NOTHING_MGS);
		}
		// 旧ルータのみ存在する場合は既存ルータ反映処理をコールする
		else if ((equipmentListKyu != null && equipmentListKyu.size() > 0)
				&& (eKK0341B019HashList == null && eKK0341B019HashList.size() < 1)) {
			ioMap.put(OUT_ROUTER_SBT_NM, getKyuKikiSBT(equipmentListKyu,
					handle, param, ioMap));
		}
		// 旧ルータも新ルータも存在する場合はまとめて処理を進む
		else {
			// 多機能ルータ存在フラグ
			boolean takiKikiFlg = false;
			
			// ANK-4315-00-00 2023/03/16 ADD START
			// HGW存在フラグ
			boolean HGWKikiFlg = false;
			// ANK-4315-00-00 2023/03/16 ADD E N D
			
			// 多機能ルータ対象リスト
			ArrayList<HashMap<String, Object>> eKK0341B019TgDataHashList = new ArrayList<HashMap<String, Object>>();
			// 機器提供サービス契約一覧照会（サービス契約番号、回線対象サービス契約経由）結果
			// で使用中の回線紐付き機器を判別する（多機能ルータ（ＯＮＵ機器等）でまたは停止中、
			// 休止中の場合は排除）
			for (int i = 0; i < eKK0341B019HashList.size(); i++) {
				// 機器提供サービス契約ステータスを取得
				String kktkSvcKeiStat = (String) eKK0341B019HashList.get(i)
						.get(EKK0341B019CBSMsg1List.KKTK_SVC_KEI_STAT);

				// 機器提供サービス契約ステータスが空白以外
				if (!"".equals(kktkSvcKeiStat) && kktkSvcKeiStat != null) {
					// 機器提供サービス契約ステータスが210、220以外のみ後続処理する
					if (!"210".equals(kktkSvcKeiStat)
							&& !"220".equals(kktkSvcKeiStat)) {
						// 機器サービスコードを確認
						String kktkSvcCd = (String) eKK0341B019HashList.get(i)
								.get(EKK0341B019CBSMsg1List.KKTK_SVC_CD);
						//ANK-4315-00-00 MOD START
						// 多機能ルータもしくはＨＧＷの場合、多機能ルータ対象リストに追加
//						if (TAK_KKTK_SVC_CD.equals(kktkSvcCd)) {
//							eKK0341B019TgDataHashList.add(eKK0341B019HashList
//									.get(i));
//						}
						if (TAK_KKTK_SVC_CD.equals(kktkSvcCd) || HGW_KKTK_SVC_CD.equals(kktkSvcCd)) {
							eKK0341B019TgDataHashList.add(eKK0341B019HashList
									.get(i));
							// ANK-4315-00-00 2023/03/16 ADD START
							if (HGW_KKTK_SVC_CD.equals(kktkSvcCd)){
							// HGW存在フラグを真に
								HGWKikiFlg = true;
							}
							// ANK-4315-00-00 2023/03/16 ADD END
						}
						//ANK-4315-00-00 MOD END
					}
				}
			}

			// 多機能ルータ・ルータ機能対象リスト
			ArrayList<HashMap<String, Object>> eKK2811B010TgKinoDataHashList = new ArrayList<HashMap<String, Object>>();

			// 多機能ルータが存在すれば、多機能ルータ存在フラグを真に
			if (eKK0341B019TgDataHashList != null
					&& eKK0341B019TgDataHashList.size() > 0) {
				// 多機能ルータにルータ機能は備えられている場合、
				// 多機能ルータのメイン表示処理
				// 機器オプションサービス契約一覧照会を取得 未
				// 機器オプションサービス契約一覧照会結果
				ArrayList<HashMap<String, Object>> eKK2811B010HashList = new ArrayList<HashMap<String, Object>>();

				// 機器オプションサービス契約一覧照会（サービス契約番号）
				callKK2811B010SC(param, handle, eKK0341B019TgDataHashList
						.get(0), eKK2811B010HashList);

				// 機器オプションサービス契約一覧照会がＮＵＬＬの場合
				if (eKK2811B010HashList != null
						&& eKK2811B010HashList.size() > 0) {
					for (int j = 0; j < eKK2811B010HashList.size(); j++) {
						// 機器オプションサービス契約ステータス
						String kkopSvcKeiStat = (String) eKK2811B010HashList
								.get(j)
								.get(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT);

						// 機器オプションサービス契約ステータスが'910：解約','920：キャンセル','210：停止','220：休止'以外の場合
						if (!"910".equals(kkopSvcKeiStat)
								&& !"920".equals(kkopSvcKeiStat)
								&& !"210".equals(kkopSvcKeiStat)
								&& !"220".equals(kkopSvcKeiStat)) {

							// 機器オプションサービスコードが「G01」の場合のみ対象
							if (TAKI_KKOP_SVC_CD
									.equals((String) eKK2811B010HashList
											.get(j)
											.get(
													EKK2811B010CBSMsg1List.KKOP_SVC_CD))) {
								// 多機能ルータ・ルータ機能対象リストに追加
								eKK2811B010TgKinoDataHashList
										.add(eKK2811B010HashList.get(j));

								// 多機能ルータかつルータ機能ありかつ有効データである場合のみ多機能ルータ存在フラグを真に
								takiKikiFlg = true;
							}
						}
					}
					// 機器オプションサービス契約がそもそも取れない場合
				} else {
					takiKikiFlg = false;
				}
			}

			// 旧機器が存在し、多機能ルータにルータ機能がない場合既存ルータ反映処理をコールする
			if (kyukikiFlg && !takiKikiFlg) {
				ioMap.put(OUT_ROUTER_SBT_NM, getKyuKikiSBT(equipmentListKyu,
						handle, param, ioMap));
			}
			// 旧機器が存在しない、多機能ルータにルータ機能がある場合表示判別を行う
			else if (!kyukikiFlg && takiKikiFlg) {
				// 多機能ルータ・ルータ機能対象リストを展開する
				for (int k = 0; k < eKK2811B010TgKinoDataHashList.size(); k++) {

					// 機器オプションサービス契約.料金コースを取得
					String kkopPcrscd = (String) eKK2811B010TgKinoDataHashList
							.get(k).get(EKK2811B010CBSMsg1List.PCRS_CD);

					// ANK-4315-00-00 2023/03/16 MOD START
					// HGW存在フラグが偽の場合、多機能ルータの表示項目を返す
					if (!HGWKikiFlg) {
						// ルー多機能が無線か有線かを判断し、表示項目として返す
						if (PCRS_CD_TAKI_MSN.equals(kkopPcrscd)) {
							ioMap.put(OUT_ROUTER_SBT_NM, TAKI_ROUTER_MR);
						} else if (PCRS_CD_TAKI_YSN.equals(kkopPcrscd)) {
							ioMap.put(OUT_ROUTER_SBT_NM, TAKI_ROUTER_YR);
						}
					}
					// HGW存在フラグが真の場合、HGWの表示項目を返す
					else{
						// HGWが無線か有線かを判断し、表示項目として返す
						if (PCRS_CD_HGW_MSN.equals(kkopPcrscd)) {
							ioMap.put(OUT_ROUTER_SBT_NM, HGW_ROUTER_MR);
						} else if (PCRS_CD_HGW_YSN.equals(kkopPcrscd)) {
							ioMap.put(OUT_ROUTER_SBT_NM, HGW_ROUTER_YR);
						}
					}
					// ANK-4315-00-00 2023/03/16 MOD E N D
				}
			}
			// 旧機器が存在し、多機能ルータにもルータ機能がある場合は「複数」で表示する
			else if (kyukikiFlg && takiKikiFlg) {
				ioMap.put(OUT_ROUTER_SBT_NM, SOME_ROUTER_MSG);
				// 旧機器が存在しないかつ多機能ルータのルータ機能が備えられていない場合は「無」で表示する
			} else {
				ioMap.put(OUT_ROUTER_SBT_NM, NOTHING_MGS);
			}
		}

		// ==================================================================================
		// ※※※※※※※※機器情報（旧ルータ、多機能ルータ）表示判定処理終了※※※※※※※※
		// ==================================================================================
		return param;
	}

	// ▲▲▲▲▲2013/11/22 ANK-1578-00-00 ADD E N D ▲▲▲▲▲

	// 既存機器判別処理
	/**************************************************************/
	/** 既存機器判別処理 **/
	/**************************************************************/
	/**
	 * ルータ種別を取得します。<br>
	 * <br>
	 * 
	 * @param handle
	 *            セッションハンドル
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param fixedText
	 *            ユーザ定義文字列
	 * @return IRequestParameterReadWrite 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public String getKyuKikiSBT(ArrayList<String> equipmentList,
			SessionHandle handle, IRequestParameterReadWrite param,
			HashMap<String, Object> ioMap) throws Throwable {
		String showHantei;

		// 検索結果を判定する
		if (equipmentList.size() > 1) {
			// 検索結果が複数ある場合
			showHantei = SOME_ROUTER_MSG;
		} else if (equipmentList.size() == 1) {
			// 検索結果が１つの場合
			ioMap.put(IN_KEY_TAKNKIKI_MODEL_CD, equipmentList.get(0));

			// ========================================================
			// 利用中の機器の有料無料を判定する
			// ========================================================
			// 宅内機器型式一意照会の上りマップ
			HashMap<String, Object> paramMap2 = editInEZM0411A010(param, ioMap);

			// サービスの呼び出し
			Map<?, ?> outputData2 = new ServiceComponentRequestInvoker().run(
					paramMap2, handle);

			// エラーチェック
			editResult(outputData2, param);
			errChk(outputData2);

			// 結果の取得
			showHantei = (String) getYryoMryoNm(outputData2);
		} else {
			// 検索結果がない場合
			showHantei = NOTHING_MGS;
		}

		return showHantei;
	}

	/**
	 * 機器提供サービス契約一覧照会（サービス契約番号）の上りマップ<br>
	 * <br>
	 * 
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param inMap
	 *            入力マップ
	 * @return HashMap パラメータ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInEKK0341B002(
			IRequestParameterReadWrite param, HashMap<String, Object> inMap)
			throws RequestParameterException {
		// サービスI/F実行用の共通部を設定する
		HashMap<String, Object> paramMap = editInMsgCmn(param);

		CAANMsg template = new CAANMsg(EKK0341B002CBSMsg.class.getName());

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0341B002CBSMsg().getContents());

		// テンプレートID
		template.set(EKK0341B002CBSMsg.TEMPLATEID, "EKK0341B002");

		// 機能コード(機器提供サービス契約一覧照会（サービス契約番号）)
		// 20130706 LT-2013-0000256 MOD カレントのみ取得する機能コードに変更 MOD START
		// template.set(EKK0341B002CBSMsg.FUNC_CODE,
		// JPCModelConstant.FUNC_CD_1);
		template.set(EKK0341B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_4);
		// 20130706 LT-2013-0000256 MOD カレントのみ取得する機能コードに変更 MOD END

		// 共通部マッピング
		mappingBasicCmn(param, template);

		// 検索共通部マッピング
		mappingSearchBasicCmn(template, EKK0341B002CBSMsg.SEARCH_TYPE,
				EKK0341B002CBSMsg.MAX_SEARCH_NUM,
				EKK0341B002CBSMsg.DISPLAY_NUM,
				EKK0341B002CBSMsg.DISPLAY_PAGE_NUM);

		// ＫＥＹ＿サービス契約番号（ネットサービス）
		if (!isNullChkInMap(inMap, IN_NET_SVC_KEI_NO)) {
			template.set(EKK0341B002CBSMsg.KEY_SVC_KEI_NO, (String) inMap
					.get(IN_NET_SVC_KEI_NO));
		}

		// ＫＥＹ＿機器提供サービスコード
		template.set(EKK0341B002CBSMsg.KEY_KKTK_SVC_CD, DEF_KKTK_SVC_CD);

		// ＫＥＹ＿機器提供サービス契約番号 未設定
		template.setNull(EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO);

		// ＫＥＹ＿ソート区分
		template.set(EKK0341B002CBSMsg.KEY_SORT_KBN, DEF_SORT_KBN);

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	// ▼▼▼▼▼2013/11/22 ANK-1578-00-00 ADD START ▼▼▼▼▼ }
	/**
	 * 機器提供サービス契約一覧照会（サービス契約番号、回線対象サービス契約経由）の上りマップ<br>
	 * <br>
	 * 
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param inMap
	 *            入力マップ
	 * @return HashMap パラメータ
	 * @throws RequestParameterException
	 */
	private void editInEKK0341B019(CAANMsg template,
			IRequestParameterReadWrite param, HashMap<String, Object> inMap)
			throws RequestParameterException {
		// サービスI/F実行用の共通部を設定する
		HashMap<String, Object> paramMap = editInMsgCmn(param);

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0341B019CBSMsg().getContents());

		// テンプレートID
		template.set(EKK0341B019CBSMsg.TEMPLATEID, "EKK0341B019");

		// 機能コード(機器提供サービス契約一覧照会（サービス契約番号、回線対象サービス契約経由）)
		template.set(EKK0341B019CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_3);

		// 共通部マッピング
		mappingBasicCmn(param, template);

		// ネットサービスのサービス契約番号 ⇒ ＫＥＹ＿サービス契約番号（ネットサービス）
		if (!isNullChkInMap(inMap, IN_NET_SVC_KEI_NO)) {
			template.set(EKK0341B019CBSMsg.KEY_SVC_KEI_NO, (String) inMap
					.get(IN_NET_SVC_KEI_NO));
		}
		// 運用年月日 ⇒ ＫＥＹ＿基準年月日
		template.set(EKK0341B019CBSMsg.KEY_BASE_YMD, JFUBPCommon
				.getOpeDate(null));
	}

	/**
	 * 機器提供オプションサービス契約一覧照会（機器提供サービス契約番号）の上りマップ<br>
	 * <br>
	 * 
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param inMap
	 *            入力マップ
	 * @return HashMap パラメータ
	 * @throws RequestParameterException
	 */
	private void editInEKK2811B010(CAANMsg template,
			IRequestParameterReadWrite param,
			HashMap<String, Object> eKK0341B019TgData)
			throws RequestParameterException {
		// サービスI/F実行用の共通部を設定する
		HashMap<String, Object> paramMap = editInMsgCmn(param);

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK2811B010CBSMsg().getContents());

		// テンプレートID
		template.set(EKK2811B010CBSMsg.TEMPLATEID, "EKK2811B010");

		// 機能コード(機器提供サービス契約一覧照会（サービス契約番号、回線対象サービス契約経由）)
		template.set(EKK2811B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 共通部マッピング
		mappingBasicCmn(param, template);

		// 機器提供サービス契約番号（多機能ルータ）⇒ ＫＥＹ＿機器提供サービス契約番号（ネットサービス）
		if (!isNullChkInMap(eKK0341B019TgData, KKTK_SVC_KEI_NO)) {
			template.set(EKK2811B010CBSMsg.KEY_KKTK_SVC_KEI_NO,
					(String) eKK0341B019TgData.get(KKTK_SVC_KEI_NO));
		}
	}

	// ▲▲▲▲▲2013/11/22 ANK-1578-00-00 ADD E N D ▲▲▲▲▲
	/**
	 * サービス契約中の宅内機器型式コードのリストを返します。<br>
	 * <br>
	 * 
	 * @param msgList
	 *            機器提供サービス契約一覧照会（サービス契約番号）結果
	 * @return ArrayList 宅内機器型式コードリスト
	 */
	private ArrayList<String> getEquipmentList(Map<?, ?> msgList) {
		ArrayList<String> equipmentList = new ArrayList<String>();

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[]) msgList
				.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		templateArray = parentTemplate
				.getCAANMsgList(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);

		if (templateArray != null) {
			for (int i = 0; i < templateArray.length; i++) {
				CAANMsg childTemplate = templateArray[i];

				// 追加条件を満たしている場合
				if (isAdd(childTemplate)) {
					// 宅内機器型式コードを結果に追加
					equipmentList
							.add(childTemplate
									.getString(EKK0341B002CBSMsg1List.TAKNKIKI_MODEL_CD));
				}
			}
		}

		return equipmentList;
	}

	/**
	 * リストに宅内機器型式コードを追加するかチェックします。<br>
	 * <br>
	 * 
	 * @param childTemplate
	 *            CAANMsgクラス
	 * @return boolean チェック結果（追加OK：TRUE　追加NG：FALSE）
	 */
	private boolean isAdd(CAANMsg childTemplate) {
		// 除外すべきステータスをチェック用にリストに追加
		List<String> ignoreList = Arrays.asList(IGNORE_STATUS);

		// サービス契約ステータスが取得できない場合
		if (childTemplate.isNull(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT)) {
			return false;
		}

		String stat = childTemplate
				.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);

		// サービス契約ステータスが除外対象の場合
		if (ignoreList.contains(stat)) {
			return false;
		}

		// 宅内機器型式コードが取得できない場合
		if (childTemplate.isNull(EKK0341B002CBSMsg1List.TAKNKIKI_MODEL_CD)) {
			return false;
		}

		return true;
	}

	/**
	 * 宅内機器型式一意照会の上りマップ<br>
	 * <br>
	 * 
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param inMap
	 *            入力マップ
	 * @return HashMap パラメータ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInEZM0411A010(
			IRequestParameterReadWrite param, HashMap<String, Object> inMap)
			throws RequestParameterException {
		// サービスI/F実行用の共通部を設定する
		HashMap<String, Object> paramMap = editInMsgCmn(param);

		CAANMsg template = new CAANMsg(EZM0411A010CBSMsg.class.getName());

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0341B002CBSMsg().getContents());

		// テンプレートID
		template.set(EKK0341B002CBSMsg.TEMPLATEID, "EZM0411A010");

		// 機能コード（宅内機器型式一意照会）
		template.set(EKK0011C110CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 共通部マッピング
		mappingBasicCmn(param, template);

		// 検索共通部マッピング
		mappingSearchBasicCmn(template, EZM0411A010CBSMsg.SEARCH_TYPE,
				EZM0411A010CBSMsg.MAX_SEARCH_NUM,
				EZM0411A010CBSMsg.DISPLAY_NUM,
				EZM0411A010CBSMsg.DISPLAY_PAGE_NUM);

		// ＫＥＹ＿宅内機器型式コード
		template.set(EZM0411A010CBSMsg.KEY_TAKNKIKI_MODEL_CD, inMap.get(IN_KEY_TAKNKIKI_MODEL_CD));

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * 対象の機器の有料／無料を返します。<br>
	 * <br>
	 * 
	 * @param msgList
	 *            宅内機器型式一意照会結果
	 * @return 有料 OR 無料
	 */
	private String getYryoMryoNm(Map<?, ?> msgList) {
		String ret = "";

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[]) msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		templateArray = parentTemplate.getCAANMsgList(EZM0411A010CBSMsg.EZM0411A010CBSMSG1LIST);

		if (templateArray != null) {
			CAANMsg childTemplate = templateArray[0];

			if (!childTemplate.isNull(EZM0411A010CBSMsg1List.YRYO_MRYO_CD_NM)) {
				ret = childTemplate.getString(EZM0411A010CBSMsg1List.YRYO_MRYO_CD_NM);
			}
		}

		return ret;
	}

	/**************************************************************/
	/** ネットサービス情報取得処理領域 **/
	/**************************************************************/
	/**
	 * ネットサービスの情報を取得します。<br>
	 * <br>
	 * 
	 * @param handle
	 *            セッションハンドル
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param fixedText
	 *            ユーザ定義文字列
	 * @return boolean 処理結果（成功：TRUE　失敗：FALSE）
	 * @throws Throwable
	 */
	private boolean getNetService(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText)
			throws Throwable {
		// 対象サービスを保有するSYSIDを取得する
		getSysId(handle, param, fixedText);

		HashMap<String, Object> paramMap = (HashMap<String, Object>) param.getData(fixedText);

		// ▼▼▼▼▼ 2013/07/08 LT-2013-0000322 MOD START ▼▼▼▼▼
		// サービスコード＝ネットの場合はネットフラグをtrue
		if (SVC_CD_NET.equals((String) paramMap.get(SVC_CD))) {
			return true;
		} else {
			return false;
		}
		//		
		//// SYSIDが取得できなかった場合
		// if (isNullChkInMap((HashMap<String, Object>)param.getData(fixedText),
		// IN_SYSID))
		// {
		// return false;
		// }
		//		
		//
		// // ネットサービスのサービス契約番号を取得する
		// getNetSvcKeiNo(handle, param, fixedText);
		//
		// // ネットサービスのサービス契約番号が取得できなかった場合
		// if (isNullChkInMap((HashMap<String, Object>)param.getData(fixedText),
		// IN_NET_SVC_KEI_NO))
		// {
		// return false;
		// }
		//
		// return true;
		// ▲▲▲▲▲ 2013/07/08 LT-2013-0000322 MOD E N D ▲▲▲▲▲
	}

	/**************************************************************/
	/** ＳＹＳＩＤ取得処理領域 **/
	/**************************************************************/
	/**
	 * 対象サービスを保有するSYSIDを取得します。<br>
	 * <br>
	 * 
	 * @param handle
	 *            セッションハンドル
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param fixedText
	 *            ユーザ定義文字列
	 * @return IRequestParameterReadWrite 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	private IRequestParameterReadWrite getSysId(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText)
			throws Throwable {

		String sysid = "";

		// ▼▼▼▼▼ 2013/07/08 LT-2013-0000322 ADD START ▼▼▼▼▼
		String svc_cd = "";
		String prc_grp_cd = "";
		// ▲▲▲▲▲ 2013/07/08 LT-2013-0000322 ADD E N D ▲▲▲▲▲

		// 入力パラメータを取得
		HashMap<String, Object> ioMap = (HashMap<String, Object>) param.getData(fixedText);

		// ========================================================
		// サービス契約一覧照会を実行して、
		// 対象サービスを保有するSYSIDを取得する
		// ========================================================
		HashMap<String, Object> paramMap = editInEKK0081A010(param, ioMap);

		// サービスの呼び出し
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> outputData = scCall.run(paramMap, handle);

		// エラーチェック
		editResult(outputData, param);
		errChk(outputData);

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[]) outputData.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		templateArray = parentTemplate.getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);

		// ▼▼▼▼▼ 2013/07/08 LT-2013-0000322 ADD START ▼▼▼▼▼
		if (templateArray != null) {
			CAANMsg childTemplate = templateArray[0];

			if (!childTemplate.isNull(EKK0081A010CBSMsg1List.SVC_CD))
			{
				// サービスコードを取得する
				svc_cd = childTemplate.getString(EKK0081A010CBSMsg1List.SVC_CD);
			}
		}

		if (templateArray != null) {
			CAANMsg childTemplate = templateArray[0];

			if (!childTemplate.isNull(EKK0081A010CBSMsg1List.PRC_GRP_CD))
			{
				// 料金グループを取得する
				prc_grp_cd = childTemplate.getString(EKK0081A010CBSMsg1List.PRC_GRP_CD);
			}
		}
		// ▲▲▲▲▲ 2013/07/08 LT-2013-0000322 ADD E N D ▲▲▲▲▲

		if (templateArray != null) {
			CAANMsg childTemplate = templateArray[0];

			if (!childTemplate.isNull(EKK0081A010CBSMsg1List.SYSID))
			{
				// SYSIDを取得する
				sysid = childTemplate.getString(EKK0081A010CBSMsg1List.SYSID);
			}
		}

		// SYSIDを保有する
		ioMap.put(IN_SYSID, sysid);

		// ▼▼▼▼▼ 2013/07/08 LT-2013-0000322 ADD START ▼▼▼▼▼
		if (chkMobile(prc_grp_cd)) {
			// サービスコードを保有する
			ioMap.put(SVC_CD, svc_cd);
		}

		// ネットサービスのサービス契約番号を保有する
		ioMap.put(IN_NET_SVC_KEI_NO, (String) ioMap.get(IN_SVC_KEI_NO));
		// ▲▲▲▲▲ 2013/07/08 LT-2013-0000322 ADD E N D ▲▲▲▲▲

		return param;
	}

	/**
	 * サービス契約一意照会の上りマップ<br>
	 * <br>
	 * 
	 * @param param		  業務データ取得・書込用I/F
	 * @param inMap		  入力マップ
	 * @return HashMap   パラメータ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInEKK0081A010(
			IRequestParameterReadWrite param,
			HashMap<String, Object> inMap
	)throws RequestParameterException
	{
		// サービスI/F実行用の共通部を設定する
		HashMap<String, Object> paramMap = editInMsgCmn(param);

		CAANMsg template = new CAANMsg(EKK0081A010CBSMsg.class.getName());

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0081A010CBSMsg().getContents());

		// テンプレートID
		template.set(EKK0081A010CBSMsg.TEMPLATEID, "EKK0081A010");

		// 機能コード(サービス契約一意照会)
		template.set(EKK0081A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);

		// 共通部マッピング
		mappingBasicCmn(param, template);

		// 検索共通部マッピング
		mappingSearchBasicCmn(
				template,
				EKK0081A010CBSMsg.SEARCH_TYPE,
				EKK0081A010CBSMsg.MAX_SEARCH_NUM,
				EKK0081A010CBSMsg.DISPLAY_NUM,
				EKK0081A010CBSMsg.DISPLAY_PAGE_NUM
		);

		// ＫＥＹ＿サービス契約番号
		if (! isNullChkInMap(inMap, IN_SVC_KEI_NO))
		{
			template.set(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, (String) inMap.get(IN_SVC_KEI_NO));
		}
		// ＫＥＹ＿予約適用年月日
		template.set(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**************************************************************/
	/** サービス契約番号（ネットサービス）取得処理領域 **/
	/**************************************************************/
	/**
	 * ネットサービスのサービス契約番号を取得します。<br>
	 * <br>
	 * @param  handle							セッションハンドル
	 * @param  param							業務データ取得・書込用I/F
	 * @param  fixedText						ユーザ定義文字列
	 * @return IRequestParameterReadWrite		業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	private IRequestParameterReadWrite getNetSvcKeiNo(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText
	)throws Throwable
	{

		String netSvcKeiNo = "";

		// 入力パラメータを取得
		HashMap<String, Object> ioMap = (HashMap<String, Object>) param
				.getData(fixedText);

		// ========================================================
		// サービス契約一覧照会（SYSID）2を実行して、
		// 利用中のネットサービスのサービス契約番号を取得する
		// ========================================================
		HashMap<String, Object> paramMap = editInEKK0081B004(param, ioMap);

		// サービスの呼び出し
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> outputData = scCall.run(paramMap, handle);

		// エラーチェック
		editResult(outputData, param);
		errChk(outputData);

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[]) outputData
				.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		templateArray = parentTemplate
				.getCAANMsgList(EKK0081B004CBSMsg.EKK0081B004CBSMSG1LIST);

		if (templateArray != null) {
			for (int i = 0; i < templateArray.length; i++) {
				CAANMsg childTemplate = templateArray[i];

				if (!childTemplate.isNull(EKK0081B004CBSMsg1List.SVC_CD)) {
					// ネットサービスの場合
					if (SVC_CD_NET.equals(childTemplate.getString(EKK0081B004CBSMsg1List.SVC_CD))) {
						// サービス契約番号を取得
						netSvcKeiNo = childTemplate
								.getString(EKK0081B004CBSMsg1List.SVC_KEI_NO);
						break;
					}
				}
			}
		}

		// ネットサービスのサービス契約番号を保有する
		ioMap.put(IN_NET_SVC_KEI_NO, netSvcKeiNo);

		return param;
	}

	/**
	 * サービス契約一覧照会（SYSID）2の上りマップ<br>
	 * <br>
	 * 
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param inMap
	 *            入力マップ
	 * @return HashMap パラメータ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInEKK0081B004(
			IRequestParameterReadWrite param, HashMap<String, Object> inMap)
			throws RequestParameterException {
		// サービスI/F実行用の共通部を設定する
		HashMap<String, Object> paramMap = editInMsgCmn(param);

		CAANMsg template = new CAANMsg(EKK0081B004CBSMsg.class.getName());

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0081B004CBSMsg().getContents());

		// テンプレートID
		template.set(EKK0081B004CBSMsg.TEMPLATEID, "EKK0081B004");

		// 機能コード(サービス契約一意照会)
		template.set(EKK0081B004CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 共通部マッピング
		mappingBasicCmn(param, template);

		// 検索共通部マッピング
		mappingSearchBasicCmn(template, EKK0081B004CBSMsg.SEARCH_TYPE,
				EKK0081B004CBSMsg.MAX_SEARCH_NUM,
				EKK0081B004CBSMsg.DISPLAY_NUM,
				EKK0081B004CBSMsg.DISPLAY_PAGE_NUM);

		// ＫＥＹ＿ＳＹＳＩＤ
		if (!isNullChkInMap(inMap, IN_SYSID)) {
			template.set(EKK0081B004CBSMsg.KEY_SYSID, (String) inMap.get(IN_SYSID));
		}

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**************************************************************/
	/** ファミリーパック有無取得処理領域 **/
	/**************************************************************/
	/**
	 * ファミリーパックの有無を取得します。<br>
	 * <br>
	 * 
	 * @param handle
	 *            セッションハンドル
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param fixedText
	 *            ユーザ定義文字列
	 * @return IRequestParameterReadWrite 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	private IRequestParameterReadWrite getFamilyPackUm(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText)
			throws Throwable {
		// 入力パラメータを取得
		HashMap<String, Object> ioMap = (HashMap<String, Object>) param.getData(fixedText);

		// ========================================================
		// 割引サービス契約一覧照会（割引サービス指定）を実行して、
		// ファミリーパックの有無を取得する
		// ========================================================
		HashMap<String, Object> paramMap = editInEKK0451B010(param, ioMap);

		// サービスの呼び出し
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> outputData = scCall.run(paramMap, handle);

		// エラーチェック
		editResult(outputData, param);
		errChk(outputData);

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[]) outputData.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		templateArray = parentTemplate.getCAANMsgList(EKK0451B010CBSMsg.EKK0451B010CBSMSG1LIST);

		if (templateArray != null && 0 < templateArray.length) {
			// ファミリーパックあり
			ioMap.put(OUT_FAMILY_PACK_UM, FAMILY_PACK_U);
		} else {
			// ファミリーパックなし
			ioMap.put(OUT_FAMILY_PACK_UM, FAMILY_PACK_M);
		}

		return param;
	}

	/**
	 * 割引サービス契約一覧照会（割引サービス指定）の上りマップ<br>
	 * <br>
	 * 
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param inMap
	 *            入力マップ
	 * @return HashMap パラメータ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInEKK0451B010(
			IRequestParameterReadWrite param, HashMap<String, Object> inMap)
			throws RequestParameterException {
		// サービスI/F実行用の共通部を設定する
		HashMap<String, Object> paramMap = editInMsgCmn(param);

		CAANMsg template = new CAANMsg(EKK0451B010CBSMsg.class.getName());

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0451B010CBSMsg().getContents());

		// テンプレートID
		template.set(EKK0451B010CBSMsg.TEMPLATEID, "EKK0451B010");

		// 機能コード(サービス契約一意照会)
		template.set(EKK0451B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 共通部マッピング
		mappingBasicCmn(param, template);

		// 検索共通部マッピング
		mappingSearchBasicCmn(template, EKK0451B010CBSMsg.SEARCH_TYPE,
				EKK0451B010CBSMsg.MAX_SEARCH_NUM,
				EKK0451B010CBSMsg.DISPLAY_NUM,
				EKK0451B010CBSMsg.DISPLAY_PAGE_NUM);

		// ＫＥＹ＿サービス契約番号（ネットサービス）
		if (!isNullChkInMap(inMap, IN_NET_SVC_KEI_NO)) {
			template.set(EKK0451B010CBSMsg.KEY_SVC_KEI_NO, (String) inMap.get(IN_NET_SVC_KEI_NO));
		}

		// ＫＥＹ＿割引サービスコード
		template.set(EKK0451B010CBSMsg.KEY_WRIB_SVC_CD, WRIB_SVC_CD_FP_WRIB);

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	// ▼▼▼▼▼ 2013/07/08 LT-2013-0000322 ADD START ▼▼▼▼▼
	/**
	 * モバイルサービスかを判定する <br>
	 * 
	 * @param prc_grp_cd
	 *            料金グループコード
	 */
	public boolean chkMobile(String prc_grp_cd) throws Throwable {
		if (StringUtils.isEmpty(prc_grp_cd)) {
			return false;
		}

		// eoモバイル以外
		if (!PRC_GRP_CD_07.equals(prc_grp_cd)
				&& !PRC_GRP_CD_08.equals(prc_grp_cd)
				&& !PRC_GRP_CD_09.equals(prc_grp_cd)
				&& !PRC_GRP_CD_16.equals(prc_grp_cd)) {
			return true;
		}

		return false;
	}

	// ▲▲▲▲▲ 2012/11/13 LT-2013-0000322 ADD E N D ▲▲▲▲▲
	/**
	 * 機器提供サービス契約一覧照会（サービス契約番号、回線対象サービス契約経由）サービスＩＦを呼び出し<br>
	 * <br>
	 * 
	 * @param param
	 *            リクエストパラメータ
	 * @param handle
	 *            セッションハンドル
	 * @param inHash
	 *            条件用hash
	 * @param resultHashList
	 *            サービスOUT結果のハッシュ
	 * @return
	 * @throws Throwable
	 */
	private void callKK0341B019SC(IRequestParameterReadWrite param,
			SessionHandle handle, HashMap<String, Object> inHash,
			ArrayList<HashMap<String, Object>> resultHashList) throws Throwable {
		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;

		// EKK0341B019への呼び出しパラメータ設定
		template = new CAANMsg(EKK0341B019CBSMsg.class.getName());

		editInEKK0341B019(template, param, inHash);

		// SIF実行
		resultMsgs = callScCmn(param, handle, template);

		// 結果を設定
		resultHashList.addAll(mappingCAANOutMsg(
				EKK0341B019CBSMsg.EKK0341B019CBSMSG1LIST, resultMsgs));
	}

	/**
	 * 機器提供オプションサービス契約一覧照会（サービス契約番号）サービスＩＦを呼び出し<br>
	 * <br>
	 * 
	 * @param param
	 *            リクエストパラメータ
	 * @param handle
	 *            セッションハンドル
	 * @param inHash
	 *            条件用hash
	 * @param resultHashList
	 *            サービスOUT結果のハッシュ
	 * @return
	 * @throws Throwable
	 */
	private void callKK2811B010SC(IRequestParameterReadWrite param,
			SessionHandle handle, HashMap<String, Object> eKK0341B019TgData,
			ArrayList<HashMap<String, Object>> resultHashList) throws Throwable {
		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;

		// EKK2811B010への呼び出しパラメータ設定
		template = new CAANMsg(EKK2811B010CBSMsg.class.getName());

		editInEKK2811B010(template, param, eKK0341B019TgData);

		// SIF実行
		resultMsgs = callScCmn(param, handle, template);

		// 結果を設定
		resultHashList.addAll(mappingCAANOutMsg(
				EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST, resultMsgs));
	}

	/*********************************************************************************************************************/
	/** 各サービスインターフェイスの呼び出し処理 **/
	/*********************************************************************************************************************/

	/**
	 * 
	 */
	private CAANMsg[] callScCmn(IRequestParameterReadWrite param,
			SessionHandle handle, CAANMsg template) throws Throwable {
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		Map<?, ?> sIFResult = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmnTaki(param);

		// 共通パラメータ設定
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// 結果の取得
		resultMsgs = (CAANMsg[]) sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);

		// // リターンコード取得
		// int returnCode = (Integer)sIFResult.get(JCMConstants.RET_CD_INT_KEY);

		// エラー情報のマッピング
		editResultRP(sIFResult, param, REQ_TRGT_DATA);

		errChk(sIFResult);

		return resultMsgs;
	}

	/**
	 * サービスI/F実行用の共通部を設定します<br>
	 * <br>
	 * 
	 * @param param
	 *            (I) 業務データ取得用I/F
	 * @return HashMap
	 */
	public HashMap<String, Object> editInMsgCmnTaki(
			IRequestParameterReadOnly param) throws RequestParameterException {
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());

		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());

		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());

		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param
				.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));

		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param
				.getControlMapData(SCControlMapKeys.REQ_HOSTIP));

		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));

		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		return paramMap;
	}

	/**
	 * 条件部の共通する項目の設定<br>
	 * <br>
	 * 
	 * @param param
	 *            リクエストパラメータ
	 * @param template
	 *            条件の設定先
	 * @throws RequestParameterException
	 */
	public void editBasicCmn(IRequestParameterReadOnly param, CAANMsg template)
			throws RequestParameterException {
		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
	}

	/**
	 * <pre>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 * 
	 * </pre>
	 * 
	 * @param msgList
	 *            CAANMsgクラス
	 * @param param
	 *            業務データ取得・書込用I/F
	 * @param fixedText
	 *            ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite editResultRP(Map<?, ?> msgList,
			IRequestParameterReadWrite param, String fixedText)
			throws Throwable {

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[]) msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer) msgList.get(JCMConstants.RET_CD_INT_KEY);

		// テンプレートID、ステータス取得
		String templateId = template.getString(JCMConstants.TEMPLATE_ID_KEY);
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if (returnCode.intValue() != 0) {
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_"
				+ String.format("%1$04d", templateStatus)) == null) {
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null) {
			bpStatus = -1;
		} else {
			bpStatus = Integer.parseInt((String) param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus) {
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_"
					+ formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap) param.getData(fixedText);

		// ユーザデータ情報にエラー情報をマッピング
		// 項目の配列を取得
		Object[][] contents = getContents(templateId);
		// エラーIDをマッピング
		mappingErrId(inMap, template, contents);

		// 明細に対するマッピング処理
		// ※明細1のみ対応
		String msg1ListId = templateId + "CBSMsg1List";
		
		CAANMsg[] templateArray = template.getCAANMsgList(msg1ListId);
		
		if (templateArray != null && templateArray.length > 0 && "".equals(templateArray)) {
			
			ArrayList inList = (ArrayList) inMap.get(msg1ListId);
			if (inList == null) {
				inList = new ArrayList();
				inMap.put(msg1ListId, inList);
			}

			for (int i = 0; i < templateArray.length; i++) {
				if (i >= inList.size()) {
					inList.add(new HashMap());
				}

				HashMap childMap = (HashMap) inList.get(i);
				CAANMsg childTemplate = templateArray[i];

				Object[][] msg1ListContents = getContents(msg1ListId);

				mappingErrId(childMap, childTemplate, msg1ListContents);
			}
		}

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>) param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null) {
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}

	/************************************************************************************************/
	/** 共通処理 **/
	/************************************************************************************************/
	/**
	 * 各S/IFが保持する項目の配列を取得する
	 * 
	 * @param templateId
	 *            サービスIF_ID
	 * @return 項目の配列
	 */
	private Object[][] getContents(String templateId) {
		Object[][] contents = null;

		if ("EKK0341B019".equals(templateId)) {
			contents = new EKK0341B019CBSMsg().getContents();
		} else if ("EKK0341B019CBSMsg1List".equals(templateId)) {
			contents = new EKK0341B019CBSMsg1List().getContents();
		} else if ("EKK2811B010".equals(templateId)) {
			contents = new EKK0341B019CBSMsg().getContents();
		} else if ("EKK2811B010CBSMsg1List".equals(templateId)) {
			contents = new EKK2811B010CBSMsg1List().getContents();
		}

		return contents;
	}

	/**
	 * 各S/IFのエラーIDをマッピングする
	 * 
	 * @param inMap
	 *            入力マップ
	 * @param template
	 *            サービスIFマップ
	 * @param contents
	 *            サービスIFの項目配列
	 */
	private void mappingErrId(HashMap inMap, CAANMsg template,
			Object[][] contents) {
		for (int i = 0; contents != null && i < contents.length; i++) {
			String element = null;
			element = (String) contents[i][0];
			if (element.indexOf("_err") > 0) {
				if (!template.isNull(element)) {
					if (!inMap.containsKey(element)) {
						inMap.put(element, template.getString(element));
					}
				}
			}
		}
	}

	/**
	 * CAANMsg[]の結果をHashとして抽出する（一覧照会用）
	 * 
	 * @param workMapKey
	 *            テンプレートリストのマップキー
	 * @param resultMsgs
	 *            テンプレートリスト
	 * @return サービスＩＦ実行の結果部分(ArrayListのハッシュマップ)
	 */
	private ArrayList<HashMap<String, Object>> mappingCAANOutMsg(
			String workMapKey, CAANMsg[] resultMsgs) {
		ArrayList<HashMap<String, Object>> retHashList = null;
		CAANMsg[] msgs = null;

		// 結果の抽出
		retHashList = new ArrayList<HashMap<String, Object>>();
		msgs = resultMsgs[0].getCAANMsgList(workMapKey);

		if (msgs != null) {
			for (int i = 0; i < msgs.length; i++) {
				retHashList.add(msgs[i].getMsgData());
			}
		}

		return retHashList;
	}
	// ▲▲▲▲▲2013/11/22 ANK-1578-00-00 ADD E N D ▲▲▲▲▲
}
