/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JKKKeishaSysidInfoCC
 *	ソースファイル名：JKKKeishaSysidInfoCC.java
 *	作成者			：FJ
 *	日付			：2012年01月06日
 *＜機能概要＞
 *	契約者SYSID情報照会CC共通コンポーネント
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2012/01/06	FJ			新規作成
 *	V4.00.00	2012/09/29	FJ)齋藤		｢ANK-0390-00-00｣Web代行入力その他キャンペーン連携対応
 *	V4.01.00	2012/10/02	FJ)齋藤		｢ANK-0390-00-00｣Web代行入力その他キャンペーン連携対応
 *	V4.02.00	2013/01/08	FJ)齋藤		｢ST2-2013-0000016｣その他キャンペーン障害対応
 *	V5.00.00	2013/07/24	FJ)岡井		【内部障害】その他キャンペーンコード(表示用キャンペーンコード)対応
 *	V5.01.00	2013/08/18	FJ)岡井		【ANK-1631-00-00】マンションのその他ＣＰコードの対応
 *	V8.00.00	2014/04/22	FJ)川瀬		【ANK-1819-00-00】商品券CPがネット以外に紐付いているが、ネットのみに是正する
 *  v37.00		2018/03/27	FJ)張本		【ANK-3398-00-00】7月CP切替対応
 *
 **********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
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.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
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 eo.common.constant.JFUStrConst;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0841A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0841A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0851B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0851B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1351A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1351A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1371B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1371B001CBSMsg1List;

/**
 * 公衆無線LAN契約者のサービス契約情報取得を行う部品。
 * <p>
 * 
 * @author 富士通
 * 
 */
public class JFUGetOtherCmpInfoSykCC extends AbstractCommonComponent
{

	/**
	 * CBSMsgのステータス項目
	 */
	private static final String STATUS = "status";

	/** サービスID */
	private static final String SERVICE_ID = "FUSV024701CC";

	/** テンプレートID:FUSV024701CC */
	private static final String TEMPLATE_ID_FUSV024701CC = "FUSV024701CC";

	/** テンプレートEKK0841A010 */
	private static final String TEMPLATE_ID_EKK0841A010 = "EKK0841A010";
	/** テンプレートEKK0851B001 */
	private static final String TEMPLATE_ID_EKK0851B001 = "EKK0851B001";

	/** テンプレートEKK1351A010 */
	private static final String TEMPLATE_ID_EKK1351A010 = "EKK1351A010";
	/** テンプレートEKK1371B001 */
	private static final String TEMPLATE_ID_EKK1371B001 = "EKK1371B001";

	/** KEY: */
	private static final String KEY_SELECT_SVC_NET = "select_svc_net";
	/** KEY: */
	private static final String KEY_SELECT_SVC_TEL = "select_svc_tel";
	/** KEY: */
	private static final String KEY_SELECT_SVC_TV = "select_svc_tv";
	/** KEY: */
	private static final String KEY_SELECT_SVC_MOBILE = "select_svc_mobile";
	/** KEY: */
	private static final String KEY_MSKM_KSN_SVC = "mskm_ksn_svc";
	/** KEY: */
	private static final String KEY_MSKM_MNS_TYPE = "mskm_mns_type";
	/** KEY: */
	private static final String KEY_TEL_COURSE = "tel_course";
	/** KEY: */
	private static final String KEY_TV_COURSE = "tv_course";
	/** KEY: */
	private static final String KEY_EO_TV_COURSE = "eo_tv_course";
	/** KEY: */
	private static final String KEY_MOBILE_COURSE = "mobile_course";
	/** KEY: */
	private static final String KEY_ELSE_INFO = "else_info";
	/** KEY: */
	private static final String KEY_HANYO_CD = "hanyo_cd";
	/** KEY: */
	private static final String KEY_HANYO_DSP_CD = "hanyo_dsp_cd";
	/** KEY: */
	private static final String KEY_HANYO_CD_KBN = "hanyo_cd_kbn";
	/** KEY: */
	private static final String KEY_CD = "cd";
	/** KEY: */
	private static final String KEY_DSP_CD = "dsp_cd";
	/** KEY: */
	private static final String KEY_NM = "nm";
	/** KEY: */
	private static final String KEY_STA_DTM = "sta_dtm";
	/** KEY: */
	private static final String KEY_END_DTM = "end_dtm";
	/** KEY: */
	private static final String KEY_TEKIYO_KH = "tekiyo_kh";
	/** KEY: */
	private static final String KEY_STB_HD1 = "stb_hd1";

	/** KEY: */
    public static final String KEY_APLY_JOKEN_GRP = "aply_joken_grp";
	/** KEY: */
    public static final String KEY_SVC_CD = "svc_cd";
	/** KEY: */
    public static final String KEY_PRC_GRP_CD = "prc_grp_cd";
	/** KEY: */
    public static final String KEY_PPLAN_CD = "pplan_cd";
	/** KEY: */
    public static final String KEY_PCRS_CD = "pcrs_cd";

	/** 割引サービス */
	private static final String HANYO_CD_KBN_WRBK_SVC = "2";

	/** 適用可否：可 */
	private static final String TEKIYO_KH_K = "1";
	/** 適用可否：否 */
	private static final String TEKIYO_KH_H = "0";

	/**
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getOtherCmpInfoSyk(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{

		// リクエストパラメータチェック
		this.checkRequestParam(param);

		// 返却値格納用リスト
		ArrayList<HashMap> returnList = new ArrayList<HashMap>();

		// リクエストパラメータを取得
		HashMap requestMap = (HashMap)param.getData(TEMPLATE_ID_FUSV024701CC);

		// その他情報リストを取得
		ArrayList<HashMap> else_info_list = (ArrayList<HashMap>)requestMap.get(KEY_ELSE_INFO);

		// リクエストパラメータ.その他情報の数だけ、繰り返し処理を行う。
		Iterator ite = else_info_list.iterator();
		while (ite.hasNext())
		{
			HashMap else_info_map = (HashMap)ite.next();

			// 汎用コードを取得
			String hanyo_cd = (String)else_info_map.get(KEY_HANYO_CD);
			// 汎用表示コード
			String hanyoDspCd = (String)else_info_map.get(KEY_HANYO_DSP_CD);
			// 汎用コード区分を取得
			String hanyo_cd_kbn = (String)else_info_map.get(KEY_HANYO_CD_KBN);

			// 名称取得SVIF結果格納用
			CAANMsg msg1 = null;
			// 適用可否取得SVIF結果格納用
			CAANMsg msg2 = null;

			// 汎用コード区分が割引サービスの場合
			if (HANYO_CD_KBN_WRBK_SVC.equals(hanyo_cd_kbn))
			{
				// サービスIF@、A
				msg1 = this.execEKK0841A010(handle, param, hanyo_cd);
				msg2 = this.execEKK0851B001(handle, param, hanyo_cd, (String)requestMap.get("max_search_num"));
			}
			else
			{
				// サービスIFB、C
				msg1 = this.execEKK1351A010(handle, param, hanyo_cd);
				msg2 = this.execEKK1371B001(handle, param, hanyo_cd, (String)requestMap.get("max_search_num"));
			}

			// その他キャンペーン情報設定処理
			returnList.add(this.createElseCmpInfo(requestMap, hanyo_cd, hanyoDspCd, hanyo_cd_kbn, msg1, msg2));
		}

		requestMap.put("other_cmp_list", returnList);

		return param;
	}

	/**
	 * 処理実行前のリクエストパラメータチェックを行う。
	 * 
	 * @param param
	 * @throws RequestParameterException
	 * @throws CCException
	 */
	@SuppressWarnings("unchecked")
	private void checkRequestParam(IRequestParameterReadWrite param) throws RequestParameterException, CCException
	{

		// リクエストパラメータから取得
		HashMap requestMap = (HashMap)param.getData(TEMPLATE_ID_FUSV024701CC);

		StringBuilder sb = new StringBuilder();

		// マップNULLチェック
		if (requestMap == null)
		{

			sb.append(TEMPLATE_ID_FUSV024701CC + "がマッピングされていません。");
			// システムエラー
			throw new CCException(sb.toString(), new Exception());
		}

		boolean isErr = false;

		// KEYのマッピングチェック
		if (!requestMap.containsKey(KEY_SELECT_SVC_NET))
		{
			isErr = true;
			sb.append("HashMap:" + TEMPLATE_ID_FUSV024701CC + "に、" + KEY_SELECT_SVC_NET + "がマッピングされていません。" + JFUStrConst.RETURN_CODE);
		}

		if (!requestMap.containsKey(KEY_SELECT_SVC_TEL))
		{
			isErr = true;
			sb.append("HashMap:" + TEMPLATE_ID_FUSV024701CC + "に、" + KEY_SELECT_SVC_TEL + "がマッピングされていません。" + JFUStrConst.RETURN_CODE);
		}

		if (!requestMap.containsKey(KEY_SELECT_SVC_TV))
		{
			isErr = true;
			sb.append("HashMap:" + TEMPLATE_ID_FUSV024701CC + "に、" + KEY_SELECT_SVC_TV + "がマッピングされていません。" + JFUStrConst.RETURN_CODE);
		}

		if (!requestMap.containsKey(KEY_MSKM_KSN_SVC))
		{
			isErr = true;
			sb.append("HashMap:" + TEMPLATE_ID_FUSV024701CC + "に、" + KEY_MSKM_KSN_SVC + "がマッピングされていません。" + JFUStrConst.RETURN_CODE);
		}

		if (!requestMap.containsKey(KEY_MSKM_MNS_TYPE))
		{
			isErr = true;
			sb.append("HashMap:" + TEMPLATE_ID_FUSV024701CC + "に、" + KEY_MSKM_MNS_TYPE + "がマッピングされていません。" + JFUStrConst.RETURN_CODE);
		}

		if (!requestMap.containsKey(KEY_TV_COURSE))
		{
			isErr = true;
			sb.append("HashMap:" + TEMPLATE_ID_FUSV024701CC + "に、" + KEY_TV_COURSE + "がマッピングされていません。" + JFUStrConst.RETURN_CODE);
		}

		if (!requestMap.containsKey(KEY_MOBILE_COURSE))
		{
			isErr = true;
			sb.append("HashMap:" + TEMPLATE_ID_FUSV024701CC + "に、" + KEY_MOBILE_COURSE + "がマッピングされていません。" + JFUStrConst.RETURN_CODE);
		}

		if (isErr)
		{
			// システムエラー
			throw new CCException(sb.toString(), new Exception());
		}

		// リクエストパラメータにその他情報が設定されていない場合
		if (!requestMap.containsKey(KEY_ELSE_INFO))
		{
			requestMap.put(KEY_ELSE_INFO, new ArrayList<HashMap>());
		}
		else
		{

			ArrayList<HashMap> else_info_list = (ArrayList<HashMap>)requestMap.get(KEY_ELSE_INFO);

			Iterator ite = else_info_list.iterator();
			while (ite.hasNext())
			{

				HashMap else_info_map = (HashMap)ite.next();

				if (!else_info_map.containsKey(KEY_HANYO_CD))
				{
					isErr = true;
					sb.append(KEY_ELSE_INFO + "に、" + KEY_HANYO_CD + "がマッピングされていません。" + JFUStrConst.RETURN_CODE);
				}

				if (!else_info_map.containsKey(KEY_HANYO_CD_KBN))
				{
					isErr = true;
					sb.append(KEY_ELSE_INFO + "に、" + KEY_HANYO_CD_KBN + "がマッピングされていません。" + JFUStrConst.RETURN_CODE);
				}

				if (isErr)
				{
					// システムエラー
					throw new CCException(sb.toString(), new Exception());
				}
			}
		}
	}

	/**
	 * その他キャンペーン情報を作成する。
	 * 
	 * @param requestMap
	 *            リクエストパラメータ.FUSV024701CC
	 * @param msg1
	 *            割引サービス一意照会の結果　または、データ抽出項目一意照会の結果
	 * @param msg2
	 *            割引サービス対象サービス一覧照会の結果　または、データ抽出項目対象サービス一覧照会の結果
	 * @return その他キャンペーン情報
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, String> createElseCmpInfo(HashMap requestMap, String hanyo_cd, String hanyoDspCd, String hanyo_cd_kbn,
			CAANMsg msg1, CAANMsg msg2)
	{

		// 提供条件コード
		String aply_joken_cd = "";
		// 対象サービスリスト
		ArrayList<Map<String, String>> tgSvcList = new ArrayList<Map<String, String>>();
		Map<String, String> map = new HashMap<String, String>();
		
		// その他キャンペーン情報格納用マップ
		HashMap<String, String> else_cmp_info_map = new HashMap<String, String>();

		// コードを設定
		else_cmp_info_map.put(KEY_CD, hanyo_cd);
		// 表示用コードを設定
		else_cmp_info_map.put(KEY_DSP_CD, hanyoDspCd);
		// 汎用コード区分を設定
		else_cmp_info_map.put(KEY_HANYO_CD_KBN, hanyo_cd_kbn);

		// 汎用コード区分が割引サービスの場合
		if (HANYO_CD_KBN_WRBK_SVC.equals(hanyo_cd_kbn))
		{

			// EKK0841A010から取得
			CAANMsg[] ekk0841a010MsgList = msg1.getCAANMsgList(EKK0841A010CBSMsg.EKK0841A010CBSMSG1LIST);

			if (ekk0841a010MsgList != null && ekk0841a010MsgList.length != 0)
			{
				// 割引サービス名を名称に設定
				else_cmp_info_map.put(KEY_NM, ekk0841a010MsgList[0].getString(EKK0841A010CBSMsg1List.WRIB_SVC_NM));
				// 受付開始年月日時分を受付開始日に設定
				else_cmp_info_map.put(KEY_STA_DTM, ekk0841a010MsgList[0].getString(EKK0841A010CBSMsg1List.UK_STA_YMDHM));
				// 受付終了年月日時分を受付終了日に設定
				else_cmp_info_map.put(KEY_END_DTM, ekk0841a010MsgList[0].getString(EKK0841A010CBSMsg1List.UK_END_YMDHM));

				// 適用条件コードを取得
				aply_joken_cd = ekk0841a010MsgList[0].getString(EKK0841A010CBSMsg1List.APLY_JOKEN_CD);

				// EKK0851B001から取得
				CAANMsg[] ekk0851b001MsgList = msg2.getCAANMsgList(EKK0851B001CBSMsg.EKK0851B001CBSMSG1LIST);

				if (ekk0851b001MsgList != null && ekk0851b001MsgList.length != 0)
				{
					for (int i = 0; i < ekk0851b001MsgList.length; i++)
					{
						map = new HashMap<String, String>();
						// 適用条件グループを取得
						map.put(KEY_APLY_JOKEN_GRP, ekk0851b001MsgList[i].getString(EKK0851B001CBSMsg1List.APLY_JOKEN_GRP));
						// サービスコードを取得
						map.put(KEY_SVC_CD, ekk0851b001MsgList[i].getString(EKK0851B001CBSMsg1List.SVC_CD));
						// 料金グループコードを取得
						map.put(KEY_PRC_GRP_CD, ekk0851b001MsgList[i].getString(EKK0851B001CBSMsg1List.PRC_GRP_CD));
						// 料金コースコードを取得
						map.put(KEY_PCRS_CD, ekk0851b001MsgList[i].getString(EKK0851B001CBSMsg1List.PCRS_CD));
						// 料金プランコードを取得
						map.put(KEY_PPLAN_CD, ekk0851b001MsgList[i].getString(EKK0851B001CBSMsg1List.PPLAN_CD));
						// 汎用コード区分
						map.put(KEY_HANYO_CD_KBN, hanyo_cd_kbn);

						tgSvcList.add(map);
					}
				}
			}
		}

		// 汎用コード区分が割引サービス以外の場合(データ抽出項目)
		else
		{
			// EKK1351A010から取得
			CAANMsg[] ekk1351a010MsgList = msg1.getCAANMsgList(EKK1351A010CBSMsg.EKK1351A010CBSMSG1LIST);

			if (ekk1351a010MsgList != null && ekk1351a010MsgList.length != 0)
			{
				// データ抽出項目名を名称に設定
				else_cmp_info_map.put(KEY_NM, ekk1351a010MsgList[0].getString(EKK1351A010CBSMsg1List.DCHSKM_NM));
				// 受付開始年月日時分を設定
				else_cmp_info_map.put(KEY_STA_DTM, ekk1351a010MsgList[0].getString(EKK1351A010CBSMsg1List.SET_PSB_STA_YMDHM));
				// 受付終了年月日時分を設定
				else_cmp_info_map.put(KEY_END_DTM, ekk1351a010MsgList[0].getString(EKK1351A010CBSMsg1List.SET_PSB_END_YMDHM));

				// 適用条件コードを取得
				aply_joken_cd = ekk1351a010MsgList[0].getString(EKK1351A010CBSMsg1List.APLY_JOKEN_CD);

				// EKK1371B001から取得
				CAANMsg[] ekk1371b001MsgList = msg2.getCAANMsgList(EKK1371B001CBSMsg.EKK1371B001CBSMSG1LIST);

				if (ekk1371b001MsgList != null && ekk1371b001MsgList.length != 0)
				{
					for (int i = 0; i < ekk1371b001MsgList.length; i++)
					{
						map = new HashMap<String, String>();
						// 適用条件グループを取得
						map.put(KEY_APLY_JOKEN_GRP, ekk1371b001MsgList[i].getString(EKK1371B001CBSMsg1List.APLY_JOKEN_GRP));
						// サービスコードを取得
						map.put(KEY_SVC_CD, ekk1371b001MsgList[i].getString(EKK0851B001CBSMsg1List.SVC_CD));
						// 料金グループコードを取得
						map.put(KEY_PRC_GRP_CD, ekk1371b001MsgList[i].getString(EKK0851B001CBSMsg1List.PRC_GRP_CD));
						// 料金コースコードを取得
						map.put(KEY_PCRS_CD, ekk1371b001MsgList[i].getString(EKK0851B001CBSMsg1List.PCRS_CD));
						// 料金プランコードを取得
						map.put(KEY_PPLAN_CD, ekk1371b001MsgList[i].getString(EKK0851B001CBSMsg1List.PPLAN_CD));
						// 汎用コード区分
						map.put(KEY_HANYO_CD_KBN, hanyo_cd_kbn);

						tgSvcList.add(map);
					}
				}
			}
		}

		// 各選択サービスの状態と、適用条件から適用可否の判定を行う。
		boolean isTekiyo = this.checkTekiyo(requestMap, aply_joken_cd, tgSvcList);

		// 適用可の場合
		if (isTekiyo)
		{
			// その他キャンペーン情報マップに適用可を設定
			else_cmp_info_map.put(KEY_TEKIYO_KH, TEKIYO_KH_K);
		}

		// 適用不可の場合
		else
		{
			// その他キャンペーン情報マップに適用不可を設定
			else_cmp_info_map.put(KEY_TEKIYO_KH, TEKIYO_KH_H);
		}

		return else_cmp_info_map;
	}
	
	/**
	 * 適用チェック処理
	 * 
	 * <br>
	 * @param requestMap       リクエストパラメータ.FUSV024701CC
	 * @param aply_joken_cd    適用条件コード
	 * @param tgSvcList        対象サービスリスト
	 * @return 適用チェック結果 (true:適用可、false:適用不可)
	 */
	@SuppressWarnings("unchecked")
	private boolean checkTekiyo(HashMap requestMap, String aply_joken_cd, ArrayList<Map<String, String>> tgSvcList)
	{

		// 選択サービスに対応する各コード取得
		ArrayList selCrsList = getCrsInfo(requestMap);

		// 判定結果
		boolean isReturnFlg = false;

		for (int i = 0; i < tgSvcList.size(); i++)
		{
			// 割引サービス対象サービスマップ取得
			HashMap tgSvcMap = (HashMap) tgSvcList.get(i);

			String tgSvcCd = (String) tgSvcMap.get(KEY_SVC_CD);
			String tgPrcGrpCd = (String) tgSvcMap.get(KEY_PRC_GRP_CD);
			String tgPcrsCd = (String) tgSvcMap.get(KEY_PCRS_CD);
			String tgPplanCd = (String) tgSvcMap.get(KEY_PPLAN_CD);

			for (int j = 0; j < selCrsList.size(); j++)
			{
				HashMap selSvcMap = (HashMap)selCrsList.get(j);

				String selSvcCd = (String) selSvcMap.get(KEY_SVC_CD);
				String selPrcGrpCd = (String) selSvcMap.get(KEY_PRC_GRP_CD);
				String selPcrsCd = (String) selSvcMap.get(KEY_PCRS_CD);
				String selPplanCd = (String) selSvcMap.get(KEY_PPLAN_CD);

				boolean chk = true;

				// 各コードで値が設定されている場合、チェックを行う

				if(JFUBPCommon.isNull(tgSvcCd) && JFUBPCommon.isNull(tgPrcGrpCd)
						&& JFUBPCommon.isNull(tgPcrsCd) && JFUBPCommon.isNull(tgPplanCd))
				{
					// 全て空の場合、次のループへ
					continue;
				}

				if(!JFUBPCommon.isNull(tgSvcCd) && !JFUBPCommon.isNull(selSvcCd))
				{
					// サービスコード
					if(tgSvcCd.equals(selSvcCd))
					{
						chk = true;
					}
					else
					{
						continue;
					}
				}
				if(!JFUBPCommon.isNull(tgPrcGrpCd) && !JFUBPCommon.isNull(selPrcGrpCd))
				{
					// 料金グループコード
					if(tgPrcGrpCd.equals(selPrcGrpCd))
					{
						chk = true;
					}
					else
					{
						continue;
					}
				}
				if(!JFUBPCommon.isNull(tgPcrsCd) && !JFUBPCommon.isNull(selPcrsCd))
				{
					// 料金コースコード
					if(tgPcrsCd.equals(selPcrsCd))
					{
						chk = true;
					}
					else
					{
						continue;
					}
				}
				if(!JFUBPCommon.isNull(tgPplanCd) && !JFUBPCommon.isNull(selPplanCd))
				{
					// 料金プランコード
					if(tgPplanCd.equals(selPplanCd))
					{
						chk = true;
					}
					else
					{
						continue;
					}
				}

				if(chk)
				{
					// 一致する情報が存在する場合、このループを抜ける
					isReturnFlg = true;
					break;
				}
			}

			if(isReturnFlg)
			{
				// 一致する情報が存在する場合、このループを抜ける
				break;
			}
		}

		return isReturnFlg;
	}

	/**
	 * SC呼出
	 * 
	 * @param handle
	 * @param param
	 * @param scCall
	 * @param svcIfId
	 * @param funcCode
	 * @param svcIfMapData
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle, IRequestParameterReadWrite param, ServiceComponentRequestInvoker scCall, String svcIfId,
			String funcCode, Object[][] svcIfMapData) throws Exception
	{

		// ◇ 上りマッピング処理
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = editInMsg(param, svcIfId, funcCode, svcIfMapData);

		// SC呼出実行
		Map<?, ?> result = scCall.run(paramMap, handle);

		// 処理結果の判定
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);

		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = result.get(JCMConstants.RET_CD_INT_KEY).toString();

		// エラー情報の転記
		editErrorInfo(param, templates, /* svcIfMapData, */(Integer)result.get(JCMConstants.RET_CD_INT_KEY));

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));

		int status = templates[0].getInt(STATUS);
		// 異常の場合、SCCallExceptionを生成してスローする
		if (!("0".equals(rtnCode) && 0 == status))
		{
			throw new SCCallException("戻り値不正", rtnCode, status);
		}

		return ((CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY))[0];
	}

	/**
	 * 上りマッピングの処理結果を取得するためのマップを生成
	 * 
	 * @param param
	 * @param svcIfId
	 * @param funcCode
	 * @param mapData
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param, String svcIfId, String funcCode, Object[][] mapData)
			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));

		CAANMsg template = new CAANMsg("eo.ejb.cbs.cbsmsg." + svcIfId + "CBSMsg");

		// テンプレートID
		template.set(EKK0161A010CBSMsg.TEMPLATEID, svcIfId);

		template.set(EKK0161A010CBSMsg.FUNC_CODE, funcCode);

		// オペレータ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);

		for (int i = 0; i < mapData.length; i++)
		{
			Object[] mapVal = mapData[i];
			if ("".equals(mapVal[1]))
			{
				template.setNull((String)mapVal[0]);
			}
			else
			{
				template.set((String)mapVal[0], (String)mapVal[1]);
			}
		}

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * エラー情報マッピング処理を行います。 <br>
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)
			throws RequestParameterException
	{
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(STATUS);
		if (0 != returnCode)
		{
			templateStatus = 9000;
		}
		if (null == JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)))
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (null == obj)
		{
			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(SERVICE_ID);

		HashMap mp = template.getHashMap();

		Iterator it = mp.keySet().iterator();
		while (it.hasNext())
		{
			String key = (String)it.next();
			if (key.endsWith("_err") && inMap.containsKey(key.substring(0, key.lastIndexOf("_err"))))
			{
				inMap.put(key, mp.get(key));
			}
		}

		return param;
	}

	/**
	 * EKK0841A010を呼び出す。
	 * 
	 * @param handle
	 * @param param
	 * @param hanyoCd 割引サービスコード
	 * @return 検索結果
	 * @throws Exception
	 */
	private CAANMsg execEKK0841A010(SessionHandle handle, IRequestParameterReadWrite param, String hanyoCd) throws Exception
	{

		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Object[][] ekk0841a010IN = {
		// 機能コードコード = "2"
				{ EKK0841A010CBSMsg.FUNC_CODE, "2" },
				// EKK0841A010.割引サービスコード→汎用コード
				{ EKK0841A010CBSMsg.KEY_WRIB_SVC_CD, hanyoCd },
				// EKK0841A010.世代登録年月日→NULL
				{ EKK0841A010CBSMsg.KEY_GENE_ADD_DTM, null },
				// EKK0841A010.予約適用年月日→運用日付
				{ EKK0841A010CBSMsg.KEY_RSV_APLY_YMD, JCCBPCommon.getOpeDate(null) } };

		// ◇ SC呼出実行
		CAANMsg ekk0841a010Msg = callSC(handle, param, scCall, TEMPLATE_ID_EKK0841A010, "1", ekk0841a010IN);

		return ekk0841a010Msg;
	}

	/**
	 * EKK0851B001を呼び出す。
	 * 
	 * @param handle
	 * @param param
	 * @param hanyoCd 割引サービスコード
	 * @return 検索結果
	 * @throws Exception
	 */
	private CAANMsg execEKK0851B001(SessionHandle handle, IRequestParameterReadWrite param, String hanyoCd, String max_search_num) throws Exception
	{

		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Object[][] ekk0851b001IN = {
		// 機能コードコード = "1"
				{ EKK0851B001CBSMsg.FUNC_CODE, "1" }, { EKK0851B001CBSMsg.MAX_SEARCH_NUM, max_search_num },
				// EKK0851B001.割引サービスコード→汎用コード
				{ EKK0851B001CBSMsg.KEY_WRIB_SVC_CD, hanyoCd },
				// EKK0851B001.料金グループコード→NULL
				{ EKK0851B001CBSMsg.KEY_PRC_GRP_CD, null },
				// EKK0851B001.料金コースコード→NULL
				{ EKK0851B001CBSMsg.KEY_PCRS_CD, null },
				// EKK0851B001.料金プランコード→NULL
				{ EKK0851B001CBSMsg.KEY_PPLAN_CD, null },
				// EKK0851B001.基準年月日→NULL
				{ EKK0851B001CBSMsg.KEY_KJNYMD, null } };

		// ◇ SC呼出実行
		CAANMsg ekk0851b001Msg = callSC(handle, param, scCall, TEMPLATE_ID_EKK0851B001, "1", ekk0851b001IN);

		return ekk0851b001Msg;
	}

	/**
	 * EKK1351A010を呼び出す。
	 * 
	 * @param handle
	 * @param param
	 * @param hanyoCd データ抽出項目コード
	 * @return 検索結果
	 * @throws Exception
	 */
	private CAANMsg execEKK1351A010(SessionHandle handle, IRequestParameterReadWrite param, String hanyoCd) throws Exception
	{

		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Object[][] ekk0841a010IN = {
		// 機能コードコード = "1"
				{ EKK1351A010CBSMsg.FUNC_CODE, "2" },
				// EKK1351A010.データ抽出項目コード→汎用コード
				{ EKK1351A010CBSMsg.KEY_DCHSKM_CD, hanyoCd },
				// EKK1351A010.世代登録年月日→NULL
				{ EKK1351A010CBSMsg.KEY_GENE_ADD_DTM, null },
				// EKK1351A010.予約適用年月日→運用日付
				{ EKK1351A010CBSMsg.KEY_RSV_APLY_YMD, JCCBPCommon.getOpeDate(null) } };

		// ◇ SC呼出実行
		CAANMsg ekk1351a010Msg = callSC(handle, param, scCall, TEMPLATE_ID_EKK1351A010, "1", ekk0841a010IN);

		return ekk1351a010Msg;
	}

	/**
	 * EKK1371B001を呼び出す。
	 * 
	 * @param handle
	 * @param param
	 * @param hanyoCd データ抽出項目コード
	 * @return 検索結果
	 * @throws Exception
	 */
	private CAANMsg execEKK1371B001(SessionHandle handle, IRequestParameterReadWrite param, String hanyoCd, String max_search_num) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Object[][] ekk1371b001IN = {
		// 機能コードコード = "1"
				{ EKK1371B001CBSMsg.FUNC_CODE, "1" }, { EKK1371B001CBSMsg.MAX_SEARCH_NUM, max_search_num },
				// EKK1371B001.データ抽出項目コード→汎用コード
				{ EKK1371B001CBSMsg.KEY_DCHSKM_CD, hanyoCd },
				// EKK1371B001.料金グループコード→NULL
				{ EKK1371B001CBSMsg.KEY_PRC_GRP_CD, null },
				// EKK1371B001.料金コースコード→NULL
				{ EKK1371B001CBSMsg.KEY_PCRS_CD, null },
				// EKK1371B001.料金プランコード→NULL
				{ EKK1371B001CBSMsg.KEY_PPLAN_CD, null },
				// EKK1371B001.基準年月日→オンライン運用日付
				{ EKK1371B001CBSMsg.KEY_KJN_YMD, JFUBPCommon.getOpeDate(null) } };

		// ◇ SC呼出実行
		CAANMsg ekk1371b001Msg = callSC(handle, param, scCall, TEMPLATE_ID_EKK1371B001, "1", ekk1371b001IN);

		return ekk1371b001Msg;
	}

	/**
	 * 選択サービスに対応する各コード取得処理です。
	 * 
	 * <br>
	 * @param requestMap マップ
	 * @return
	 */
	@SuppressWarnings("unchecked")
	private ArrayList getCrsInfo(HashMap requestMap)
	{
		// 申込回線サービスを取得
		String mskm_ksn_svc = (String) requestMap.get(KEY_MSKM_KSN_SVC);
		// 申込マンションタイプを取得
		String mskm_mns_type = (String) requestMap.get(KEY_MSKM_MNS_TYPE);

		// 選択サービス（ネット）を取得
		String select_svc_net = (String) requestMap.get(KEY_SELECT_SVC_NET);
		// 選択サービス（電話）を取得
		String select_svc_tel = (String) requestMap.get(KEY_SELECT_SVC_TEL);
		// 選択サービス（テレビ）を取得
		String select_svc_tv = (String) requestMap.get(KEY_SELECT_SVC_TV);
		// 選択サービス（モバイル）を取得
		String select_svc_mb = (String) requestMap.get(KEY_SELECT_SVC_MOBILE);

		// 電話コース
		String telCrs = (String) requestMap.get(KEY_TEL_COURSE);
		// eoテレビコース
		String eoTvCrs = (String) requestMap.get(KEY_TV_COURSE);
		// モバイルコース
		String mbCrs = (String) requestMap.get(KEY_MOBILE_COURSE);

		// テレビ1台目のテレビチューナー・種類
		String tvStb01 = (String) requestMap.get(KEY_STB_HD1);

		HashMap map = null;
		ArrayList result = new ArrayList();

		String prcGrpCd_forSet = JFUStrConst.EMPTY;
		String pcrsCd_forSet = JFUStrConst.EMPTY;
		String prcPlanCd_forSet = JFUStrConst.EMPTY;

		// ●ネット
		if(JFUStrConst.SELECT_SVC_NET_CHOICE.equals(select_svc_net))
		{
			map = new HashMap();

			if (JFUStrConst.MSKM_KSN_SVC_HOME.equals(mskm_ksn_svc))
			{
				// ホーム
				prcGrpCd_forSet = JFUStrConst.CD00133_02;
				pcrsCd_forSet = JFUStrConst.EMPTY;
				prcPlanCd_forSet = JFUStrConst.EMPTY;
			}
			else if (JFUStrConst.MSKM_KSN_SVC_MANSION.equals(mskm_ksn_svc) && JFUStrConst.MSKM_MNS_TYPE_MEZON.equals(mskm_mns_type))
			{
				// メゾン
				prcGrpCd_forSet = JFUStrConst.CD00133_03;
				pcrsCd_forSet = JFUStrConst.EMPTY;
				prcPlanCd_forSet = JFUStrConst.EMPTY;
			}
			else if (JFUStrConst.MSKM_KSN_SVC_MANSION.equals(mskm_ksn_svc) && JFUStrConst.MSKM_MNS_TYPE_MANSION.equals(mskm_mns_type))
			{
				// マンション
				prcGrpCd_forSet = JFUStrConst.CD00133_04;
				pcrsCd_forSet = JFUStrConst.EMPTY;
				prcPlanCd_forSet = JFUStrConst.EMPTY;
			}

			map.put(KEY_SVC_CD, JFUStrConst.CD00130_01);
			map.put(KEY_PRC_GRP_CD, prcGrpCd_forSet);
			map.put(KEY_PCRS_CD, pcrsCd_forSet);
			map.put(KEY_PPLAN_CD, prcPlanCd_forSet);

			result.add(map);
		}

		// ●電話
		if(JFUStrConst.SELECT_SVC_TEL_CHOICE.equals(select_svc_tel))
		{
			map = new HashMap();

			if (JFUStrConst.MSKM_KSN_SVC_HOME.equals(mskm_ksn_svc) && JFUStrConst.TEL_COURSE_1BANGOU_SVC.equals(telCrs))
			{
				// ホーム：1番号
				pcrsCd_forSet = JFUStrConst.CD00134_A31;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA3101;
			}
			else if (JFUStrConst.MSKM_KSN_SVC_HOME.equals(mskm_ksn_svc) && JFUStrConst.TEL_COURSE_2BANGOU_SVC.equals(telCrs))
			{
				// ホーム：2番号
				pcrsCd_forSet = JFUStrConst.CD00134_A32;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA3201;
			}
			else if (JFUStrConst.MSKM_KSN_SVC_MANSION.equals(mskm_ksn_svc) && JFUStrConst.MSKM_MNS_TYPE_MEZON.equals(mskm_mns_type) 
					&& JFUStrConst.TEL_COURSE_1BANGOU_SVC.equals(telCrs))
			{
				// メゾン：1番号
				pcrsCd_forSet = JFUStrConst.CD00134_A31;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA3103;
			}
			else if (JFUStrConst.MSKM_KSN_SVC_MANSION.equals(mskm_ksn_svc) && JFUStrConst.MSKM_MNS_TYPE_MEZON.equals(mskm_mns_type) 
					&& JFUStrConst.TEL_COURSE_2BANGOU_SVC.equals(telCrs))
			{
				// メゾン：2番号
				pcrsCd_forSet = JFUStrConst.CD00134_A32;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA3203;
			}
			else if (JFUStrConst.MSKM_KSN_SVC_MANSION.equals(mskm_ksn_svc) && JFUStrConst.MSKM_MNS_TYPE_MANSION.equals(mskm_mns_type) 
					&& JFUStrConst.TEL_COURSE_1BANGOU_SVC.equals(telCrs))
			{
				// マンション：1番号
				pcrsCd_forSet = JFUStrConst.CD00134_A31;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA3102;
			}
			else if (JFUStrConst.MSKM_KSN_SVC_MANSION.equals(mskm_ksn_svc) && JFUStrConst.MSKM_MNS_TYPE_MANSION.equals(mskm_mns_type) 
					&& JFUStrConst.TEL_COURSE_2BANGOU_SVC.equals(telCrs))
			{
				// マンション：2番号
				pcrsCd_forSet = JFUStrConst.CD00134_A32;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA3202;
			}
			else
			{
				// コース選択なし
				pcrsCd_forSet = JFUStrConst.EMPTY;
				prcPlanCd_forSet = JFUStrConst.EMPTY;
			}

			map.put(KEY_SVC_CD, JFUStrConst.CD00130_02);
			map.put(KEY_PRC_GRP_CD, JFUStrConst.CD00133_10);
			map.put(KEY_PCRS_CD, pcrsCd_forSet);
			map.put(KEY_PPLAN_CD, prcPlanCd_forSet);

			result.add(map);
		}

		// ●テレビ
		if(JFUStrConst.SELECT_SVC_TV_CHOICE.equals(select_svc_tv))
		{
			map = new HashMap();

			if(JFUStrConst.EO_TV_COURSE_BS.equals(eoTvCrs))
			{
				// 地デジBS
				pcrsCd_forSet = JFUStrConst.CD00134_A37;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA3701;
			}
			else if(JFUStrConst.EO_TV_COURSE_BASIC.equals(eoTvCrs) && JFUStrConst.MSKM_KSN_SVC_HOME.equals(mskm_ksn_svc)
					&& JFUStrConst.STB_HD_BASIC.equals(tvStb01))
			{
				// ホーム：ベーシック
				pcrsCd_forSet = JFUStrConst.CD00134_A40;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA4001;
			}
			else if(JFUStrConst.EO_TV_COURSE_BASIC.equals(eoTvCrs) && JFUStrConst.MSKM_KSN_SVC_MANSION.equals(mskm_ksn_svc) 
					&& JFUStrConst.MSKM_MNS_TYPE_MEZON.equals(mskm_mns_type) && JFUStrConst.STB_HD_BASIC.equals(tvStb01))
			{
				// メゾン：ベーシック
				pcrsCd_forSet = JFUStrConst.CD00134_A40;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA4005;
			}
			else if(JFUStrConst.EO_TV_COURSE_BASIC.equals(eoTvCrs) && JFUStrConst.MSKM_KSN_SVC_MANSION.equals(mskm_ksn_svc) 
					&& JFUStrConst.MSKM_MNS_TYPE_MANSION.equals(mskm_mns_type) && JFUStrConst.STB_HD_BASIC.equals(tvStb01))
			{
				// マンション：ベーシック
				pcrsCd_forSet = JFUStrConst.CD00134_A40;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA4003;
			}
			else if(JFUStrConst.EO_TV_COURSE_BASIC.equals(eoTvCrs) && JFUStrConst.MSKM_KSN_SVC_HOME.equals(mskm_ksn_svc)
					&& JFUStrConst.STB_HD_PREMIUM.equals(tvStb01))
			{
				// ホーム：プレミアム
				pcrsCd_forSet = JFUStrConst.CD00134_A41;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA4101;
			}
			else if(JFUStrConst.EO_TV_COURSE_BASIC.equals(eoTvCrs) && JFUStrConst.MSKM_KSN_SVC_MANSION.equals(mskm_ksn_svc) 
					&& JFUStrConst.MSKM_MNS_TYPE_MEZON.equals(mskm_mns_type) && JFUStrConst.STB_HD_PREMIUM.equals(tvStb01))
			{
				// メゾン：プレミアム
				pcrsCd_forSet = JFUStrConst.CD00134_A41;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA4105;
			}
			else if(JFUStrConst.EO_TV_COURSE_BASIC.equals(eoTvCrs) && JFUStrConst.MSKM_KSN_SVC_MANSION.equals(mskm_ksn_svc) 
					&& JFUStrConst.MSKM_MNS_TYPE_MANSION.equals(mskm_mns_type) && JFUStrConst.STB_HD_PREMIUM.equals(tvStb01))
			{
				// マンション：プレミアム
				pcrsCd_forSet = JFUStrConst.CD00134_A41;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA4103;
			}
			else
			{
				// コース選択なし
				pcrsCd_forSet = JFUStrConst.EMPTY;
				prcPlanCd_forSet = JFUStrConst.EMPTY;
			}

			map.put(KEY_SVC_CD, JFUStrConst.CD00130_03);
			map.put(KEY_PRC_GRP_CD, JFUStrConst.CD00133_11);
			map.put(KEY_PCRS_CD, pcrsCd_forSet);
			map.put(KEY_PPLAN_CD, prcPlanCd_forSet);

			result.add(map);
		}

		// ●モバイル
		if(JFUStrConst.SELECT_SVC_MOBILE_CHOICE.equals(select_svc_mb))
		{
			map = new HashMap();

			if (JFUStrConst.MOBILE_COURSE_WIFI.equals(mbCrs))
			{
				// Wi-Fi
				prcGrpCd_forSet = JFUStrConst.CD00133_07;
				pcrsCd_forSet = JFUStrConst.CD00134_A30;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA3001;
			}
			else if (JFUStrConst.MOBILE_COURSE_3G_7_2M.equals(mbCrs))
			{
				// 3G7.2M
				prcGrpCd_forSet = JFUStrConst.CD00133_08;
				pcrsCd_forSet = JFUStrConst.CD00134_A26;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA2601;
			}
			else if (JFUStrConst.MOBILE_COURSE_3G_21M.equals(mbCrs))
			{
				// 3G21M
				prcGrpCd_forSet = JFUStrConst.CD00133_08;
				pcrsCd_forSet = JFUStrConst.CD00134_A27;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA2701;
			}
			else if (JFUStrConst.MOBILE_COURSE_3G_HHB.equals(mbCrs))
			{
				// 3G7.2M光ハイブリッド
				prcGrpCd_forSet = JFUStrConst.CD00133_08;
				pcrsCd_forSet = JFUStrConst.CD00134_A59;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA5901;
			}
			else if (JFUStrConst.MOBILE_COURSE_3G_21M_HHB.equals(mbCrs))
			{
				// 3G21M光ハイブリッド
				prcGrpCd_forSet = JFUStrConst.CD00133_08;
				pcrsCd_forSet = JFUStrConst.CD00134_A60;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA6001;
			}
			else if (JFUStrConst.MOBILE_COURSE_WIMAX.equals(mbCrs))
			{
				// WiMAX
				prcGrpCd_forSet = JFUStrConst.CD00133_09;
				pcrsCd_forSet = JFUStrConst.CD00134_A28;
				prcPlanCd_forSet = JFUStrConst.CD00565_PA2801;
			}
			else if (JFUStrConst.MOBILE_COURSE_3G_UNDECIDED.equals(mbCrs))
			{
				// 3Gコース未定
				prcGrpCd_forSet = JFUStrConst.CD00133_08;
				pcrsCd_forSet = JFUStrConst.EMPTY;
				prcPlanCd_forSet = JFUStrConst.EMPTY;
			}

			map.put(KEY_SVC_CD, JFUStrConst.CD00130_01);
			map.put(KEY_PRC_GRP_CD, prcGrpCd_forSet);
			map.put(KEY_PCRS_CD, pcrsCd_forSet);
			map.put(KEY_PPLAN_CD, prcPlanCd_forSet);

			result.add(map);
		}

		return result;
	}

	/**
	 * チェック処理です。
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}
}