/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUAddIntrTblCC
*   ソースファイル名：JFUAddIntrTblCC.java
*   作成者          ：富士通
*   日付            ：2015年03月31日
*＜機能概要＞
*   紹介テーブル登録コモンコンポーネント部品
*＜修正履歴＞
*   バージョン   修正日       修正者      修正内容
*   v14.00.00    2015/03/31   FJ）張本    新規作成
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

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.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.ErrorLevel;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.bpm.parameter.StatusArea;
import com.fujitsu.futurity.bp.x21.bpm.parameter.StatusInfo;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.bp.x21.values.OUTBREAK_AREA;
import com.fujitsu.futurity.common.x01.sc.ErrorInfoMapKeys;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0311A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0311D010CBSMsg;

/**
 * 紹介テーブル登録コモンコンポーネント部品
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUAddIntrTblCC extends JFUBaseCC
{

	/* ■□ EKK0311A010_紹介一意照会 ■□ */
	/** テンプレートID(紹介一意照会) */
	private static final String TEMP_ID_EKK0311A010 = "EKK0311A010";
	/** テンプレートID(紹介一意照会明細) */
	private static final String TEMP_ID_DTL_EKK0311A010 = EKK0311A010CBSMsg.EKK0311A010CBSMSG1LIST;
	/** IN項目リスト(紹介一意照会) */
	private static final List<String> IN_COL_LIST_EKK0311A010 = Arrays.asList(EKK0311A010CBSMsg.KEY_INTR_CD);
	/** 関連チェックエラー項目(紹介一意照会) */
	private static final String ERR_COL_EKK0311A010 = EKK0311A010CBSMsg.KEY_INTR_CD_ERR;
	/** SC実行結果取得キー(紹介一意照会) */
	private static final String TEMP_TEMP_KEY_EKK0311A010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0311A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0081A010_サービス契約一意照会 ■□ */
	/** テンプレートID(サービス契約一意照会) */
	private static final String TEMP_ID_EKK0081A010 = "EKK0081A010";
	/** テンプレートID(サービス契約一意照会明細) */
	private static final String TEMP_ID_DTL_EKK0081A010 = EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST;
	/** IN項目リスト(サービス契約一意照会) */
	private static final List<String> IN_COL_LIST_EKK0081A010 = Arrays.asList(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, EKK0081A010CBSMsg.KEY_RSV_APLY_YMD);
	/** 関連チェックエラー項目(サービス契約一意照会) */
	private static final String ERR_COL_EKK0081A010 = EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(サービス契約一意照会) */
	private static final String TEMP_TEMP_KEY_EKK0081A010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0081A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ ECK0011A010_お客様一意照会SC ■□ */
	/** テンプレートID(お客様一意照会) */
	private static final String TEMP_ID_ECK0011A010 = "ECK0011A010";
	/** テンプレートID(お客様一意照会明細) */
	private static final String TEMP_ID_DTL_ECK0011A010 = ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST;
	/** IN項目リスト(お客様一意照会) */
	private static final List<String> IN_COL_LIST_ECK0011A010 =
			Arrays.asList(ECK0011A010CBSMsg.KEY_SYSID, ECK0011A010CBSMsg.KEY_GENE_ADD_DTM, ECK0011A010CBSMsg.KEY_RSV_APLY_YMD);
	/** 関連チェックエラー項目(お客様一意照会) */
	private static final String ERR_COL_ECK0011A010 = ECK0011A010CBSMsg.KEY_SYSID_ERR;
	/** SC実行結果取得キー(お客様一意照会) */
	private static final String TEMP_TEMP_KEY_ECK0011A010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_ECK0011A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0311D010_紹介登録SC ■□ */
	/** テンプレートID(紹介登録) */
	private static final String TEMP_ID_EKK0311D010 = "EKK0311D010";
	/** IN項目リスト(紹介登録) */
	private static final List<String> IN_COL_LIST_EKK0311D010 =
			Arrays.asList(EKK0311D010CBSMsg.INTR_CD, EKK0311D010CBSMsg.SYSID, EKK0311D010CBSMsg.INTR_SVC_DIV, EKK0311D010CBSMsg.INTR_DTM,
					EKK0311D010CBSMsg.HISHOKAI_NM, EKK0311D010CBSMsg.HISHOKAI_RRKS_MLAD, EKK0311D010CBSMsg.SVC_KEI_NO,
					EKK0311D010CBSMsg.MSKM_TCH_ML_SEND_DTM, EKK0311D010CBSMsg.INTR_SBT_CD, EKK0311D010CBSMsg.CANCEL_TCH_ML_SEND_DTM,
					EKK0311D010CBSMsg.SHOKAISHA_NM, EKK0311D010CBSMsg.SHOKAISHA_EOID, EKK0311D010CBSMsg.SHOKAISHA_RRKS_MLAD,
					EKK0311D010CBSMsg.SHOKAISHA_PCD, EKK0311D010CBSMsg.SHOKAISHA_AD_STATE_NM, EKK0311D010CBSMsg.SHOKAISHA_AD_CITY_NM,
					EKK0311D010CBSMsg.SHOKAISHA_AD_OAZTSU_NM, EKK0311D010CBSMsg.SHOKAISHA_AD_AZCHO_NM, EKK0311D010CBSMsg.SHOKAISHA_AD_BNCHIGO,
					EKK0311D010CBSMsg.SHOKAISHA_ADRTTM, EKK0311D010CBSMsg.SHOKAISHA_ADRRM, EKK0311D010CBSMsg.MSKM_ML_SEND_CD,
					EKK0311D010CBSMsg.CANCEL_ML_SEND_CD);
	/** テンプレートID(紹介登録一覧明細) */
	private static final String TEMP_ID_DTL_EKK0311D010 = null;
	/** 関連チェックエラー項目(紹介登録) */
	private static final String ERR_COL_EKK0311D010 = EKK0311D010CBSMsg.INTR_CD_ERR;

	// ■ IN項目ID ■
	/** IN項目ID：紹介コード */
	private static final String IN_INTR_CD = "intr_cd";
	/** IN項目ID：紹介年月日時分秒 */
	private static final String IN_INTR_DTM = "intr_dtm";
	/** IN項目ID：被紹介者氏名 */
	private static final String IN_HISHOKAI_NM = "hishokai_nm";
	/** IN項目ID：被紹介者メールアドレス */
	private static final String IN_HISHOKAI_RRKS_MLAD = "hishokai_rrks_mlad";
	/** IN項目ID：顧客氏名 */
	private static final String IN_SHOKAISHA_NM = "shokaisha_nm";
	/** IN項目ID：紹介者郵便番号 */
	private static final String IN_SVC_KEI_NO = "svc_kei_no";
	/** IN項目ID：eoID */
	private static final String IN_EOID = "eoid";
	/** IN項目ID：紹介者メールアドレス */
	private static final String IN_SHOKAISHA_RRKS_MLAD = "shokaisha_rrks_mlad";
	/** IN項目ID：紹介者郵便番号 */
	private static final String IN_SHOKAISHA_PCD = "shokaisha_pcd";
	/** IN項目ID：紹介者住所(府県) */
	private static final String IN_SHOKAISHA_AD_STATE_NM = "shokaisha_ad_state_nm";
	/** IN項目ID：紹介者住所(市町村) */
	private static final String IN_SHOKAISHA_AD_CITY_NM = "shokaisha_ad_city_nm";
	/** IN項目ID：リターンコード */
	private static final String IN_SHOKAISHA_AD_BNCHIGO = "shokaisha_ad_bnchigo";
	/** IN項目ID：紹介者住所(マンション名等) */
	private static final String IN_SHOKAISHA_ADRTTM = "shokaisha_adrttm";

	// ■ OUT項目ID ■
	/** OUT項目ID：結果コード */
	private static final String OUT_RETURN_CODE = "return_code";

	/** 結果コード：正常 */
	private static final String RETURN_CD_00 = "00";
	/** 結果コード：パラメタ不正エラー */
	private static final String RETURN_CD_92 = "92";
	/** 結果コード：システムエラー */
	private static final String RETURN_CD_99 = "99";
	/** メール送信コード：未送信 */
	private static final String ML_SEND_CD_0 = "0";
	/** 紹介種別コード：紹介者 */
	private static final String INTR_SBT_CD_1 = "1";

	/** 単項目チェックでエラー発生 */
	public static final int DOMAIN_ERR = 1000;
	/** 関連チェックでエラー発生 */
	public static final int RELATION_ERR = 1100;

	/** スペース */
	private static final String SPACE = " ";
	/** ハイフン */
	private static final String HAIHUN = "-";
	/** ／ */
	private static final String SURA = "/";
	/** : */
	private static final String COLON = ":";
	/** ミリ秒 */
	private static final String MS_ZERO = "000";

	/** エラー項目の末尾文字列 */
	private static final String ITEM_ERR_END = "_err";
	/** キーエラー項目の接頭文字列 */
	private static final String KEY_ERR_START = "key_";

	/** 無効なサービス契約ステータス */
	private static final List<String> SVC_KEI_STAT_MUKO = Arrays.asList(JFUStrConst.CD00037_920);
	/** 有効なサービスお客様ステータス */
	private static final List<String> CUST_STAT_YUKO = Arrays.asList(JFUStrConst.CD00038_010, JFUStrConst.CD00038_100, JFUStrConst.CD00038_200);
	/** 無効なサービスコード */
	private static final List<String> SVC_CD_MUKO = Arrays.asList(JFUStrConst.CD00130_04);

	/** リターンコード(システムエラー) */
	public static final String RETURN_CODE_SYSTEMERR = "9000";

	/** エラーメッセージ(単項目チェックエラー) */
	public static final String MSG_SINGLEDATA_ERR = "単項目チェックエラー";
	/** エラーメッセージ(単関連チェックエラー) */
	public static final String MSG_ITEM_RELATION_ERR = "単関連チェックエラー";

	/**
	 * 紹介テーブル登録処理<br>
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	public IRequestParameterReadWrite addIntrTbl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// 
		HashMap inMap = (HashMap)param.getData(fixedText);

		String inIntrCd = (String)inMap.get(IN_INTR_CD);

		String inSvcKeiNo = (String)inMap.get(IN_SVC_KEI_NO);

		String inEoId = (String)inMap.get(IN_EOID);

		HashMap paramMap = new HashMap(inMap);

		String sysId = "";

		// ●結果格納マップ
		HashMap resultMap = new HashMap(inMap);

		// 開始ログ
		outDebugLog("----- addIntrTbl Start  -----");

		// ◆INパラメータがなければエラーをスロー
		if (JFUBPCommon.isNull(inIntrCd) || JFUBPCommon.isNull(inSvcKeiNo))
		{
			// 結果コード：パラメタ不正エラー
			resultMap.put(OUT_RETURN_CODE, RETURN_CD_92);
			// ログ出力
			outputBusLog("--- 紹介テーブル登録コモンコンポーネント パラメタなし 紹介コード:" + inIntrCd + " サービス契約番号:" + inSvcKeiNo);

			// エラー項目編集
			if (JFUBPCommon.isNull(inIntrCd))
			{
				resultMap.put(IN_INTR_CD + ITEM_ERR_END, JFUStrConst.INDI_ERR);
			}
			if (JFUBPCommon.isNull(inSvcKeiNo))
			{
				resultMap.put(IN_SVC_KEI_NO + ITEM_ERR_END, JFUStrConst.INDI_ERR);
			}

			// ステータスエリア編集
			StatusArea sa = param.getStatusArea();
			StatusInfo si = new StatusInfo(ErrorLevel.EL888, OUTBREAK_AREA.CC);
			sa.setCurrent(si);
			// リターンコード編集
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, String.format("%1$04d", DOMAIN_ERR));
			// リターンメッセージ編集
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, MSG_SINGLEDATA_ERR);
		}
		else
		{
			try
			{
				// ○EKK0311A010_紹介一意照会
				// ユーザデータ初期化
				initData(param, fixedText, IN_COL_LIST_EKK0311A010);
				// 上りマッピング
				setInMapEKK0311A010(param, fixedText, inIntrCd);
				//検索エラーなし設定
				ignoreSearchError(param, fixedText);
				// サービスIF実行
				executeSC(handle, param, fixedText, TEMP_ID_EKK0311A010, TEMP_ID_DTL_EKK0311A010, IN_COL_LIST_EKK0311A010, ERR_COL_EKK0311A010);
				// データが存在するか
				if (!isExistsTemplateDetail(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0311A010), TEMP_ID_DTL_EKK0311A010))
				{

					// ○EKK0081A010_サービス契約一意照会
					// ユーザデータ初期化
					initData(param, fixedText, IN_COL_LIST_EKK0081A010);
					// 上りマッピング
					setInMapEKK0081A010(param, fixedText, inSvcKeiNo);
					//検索エラーなし設定
					ignoreSearchError(param, fixedText);
					// サービスIF実行
					executeSC(handle, param, fixedText, TEMP_ID_EKK0081A010, TEMP_ID_DTL_EKK0081A010, IN_COL_LIST_EKK0081A010, ERR_COL_EKK0081A010);
					// データが存在するか
					if (isExistsTemplateDetail(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0081A010), TEMP_ID_DTL_EKK0081A010))
					{
						// マップを取得
						HashMap EKK0081A010Map =
								getTemplateListMap(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0081A010), TEMP_ID_DTL_EKK0081A010, 0);
						// SYSIDを取得
						sysId = (String)EKK0081A010Map.get(EKK0081A010CBSMsg1List.SYSID);
						// eoIDがない場合
						if (JFUBPCommon.isNull(inEoId))
						{
							// 契約ステータス、サービスコードが無効でない場合
							if (!SVC_KEI_STAT_MUKO.contains(EKK0081A010Map.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT))
									&& !SVC_CD_MUKO.contains(EKK0081A010Map.get(EKK0081A010CBSMsg1List.SVC_CD)))
							{
								// ○ECK0011A010_お客様一意照会
								// ユーザデータ初期化
								initData(param, fixedText, IN_COL_LIST_ECK0011A010);
								// 上りマッピング
								setInMapECK0011A010(param, fixedText, sysId);
								//検索エラーなし設定
								ignoreSearchError(param, fixedText);
								// サービスIF実行
								executeSC(handle, param, fixedText, TEMP_ID_ECK0011A010, TEMP_ID_DTL_ECK0011A010, IN_COL_LIST_ECK0011A010,
										ERR_COL_ECK0011A010);
								if (isExistsTemplateDetail(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_ECK0011A010), TEMP_ID_DTL_ECK0011A010))
								{
									// マップを取得
									HashMap ECK0011A010Map =
											getTemplateListMap(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_ECK0011A010),
													TEMP_ID_DTL_ECK0011A010, 0);
									// 有効なお客様ステータスの場合
									if (CUST_STAT_YUKO.contains(ECK0011A010Map.get(ECK0011A010CBSMsg1List.CUST_STAT)))
									{
										// eoIDを取得
										inEoId = (String)ECK0011A010Map.get(ECK0011A010CBSMsg1List.EOID);
									}
								}
							}
						}

						// ○EKK0311D010_紹介登録
						// ユーザデータ初期化
						initData(param, fixedText, IN_COL_LIST_EKK0311D010);
						// 上りマッピング
						setInMapEKK0311D010(param, fixedText, sysId, inEoId, paramMap);
						// サービスIF実行
						executeSC(handle, param, fixedText, TEMP_ID_EKK0311D010, TEMP_ID_DTL_EKK0311D010, IN_COL_LIST_EKK0311D010,
								ERR_COL_EKK0311D010);

						// 結果コード：正常
						resultMap.put(OUT_RETURN_CODE, RETURN_CD_00);
						// ログ出力
						outputBusLog("--- 紹介テーブル登録コモンコンポーネント 正常終了 紹介コード:" + inIntrCd + " SYSID:" + sysId);
					}
					else
					{
						// 結果コード：パラメタ不正エラー
						resultMap.put(OUT_RETURN_CODE, RETURN_CD_92);
						// ログ出力
						outputBusLog("--- 紹介テーブル登録コモンコンポーネント サービス契約なし 紹介コード:" + inIntrCd + " サービス契約番号:" + inSvcKeiNo);

						// エラー項目編集
						resultMap.put(IN_SVC_KEI_NO + ITEM_ERR_END, JFUStrConst.RELATION_CHECK_ERR_EA);
						// ステータスエリア編集
						StatusArea sa = param.getStatusArea();
						StatusInfo si = new StatusInfo(ErrorLevel.EL888, OUTBREAK_AREA.CC);
						sa.setCurrent(si);
						// リターンコード編集
						param.setControlMapData(SCControlMapKeys.RETURN_CODE, String.format("%1$04d", RELATION_ERR));
						// リターンメッセージ編集
						param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, MSG_ITEM_RELATION_ERR);
					}
				}
				else
				{
					// 結果コード：正常
					resultMap.put(OUT_RETURN_CODE, RETURN_CD_00);
					// ログ出力
					outputBusLog("--- 紹介テーブル登録コモンコンポーネント 正常終了 紹介コード:" + inIntrCd + " サービス契約番号:" + inSvcKeiNo);
				}

			}
			catch (SCCallException e)
			{
				ErrorLevel errorLevel = ErrorLevel.EL988;
				String formatStatus = RETURN_CODE_SYSTEMERR;

				// 関連チェックエラーの場合
				if (RELATION_ERR == e.getStatusCD() || DOMAIN_ERR == e.getStatusCD())
				{
					// エラー項目の設定
					setErrList(param, resultMap);
					// 結果コード：パラメタ不正エラー
					resultMap.put(OUT_RETURN_CODE, RETURN_CD_92);
					// ログ出力
					outputBusLog("--- 紹介テーブル登録コモンコンポーネント 関連チェックエラー発生 紹介コード:" + inIntrCd + " サービス契約番号:" + inSvcKeiNo + " SYSID:" + sysId);
					// エラーレベル
					errorLevel = ErrorLevel.EL888;
					// リターンコード
					formatStatus = String.format("%1$04d", e.getStatusCD());
				}
				else
				{
					// 結果コード：システムエラー
					resultMap.put(OUT_RETURN_CODE, RETURN_CD_99);
					// ログ出力
					outputBusLog("--- 紹介テーブル登録コモンコンポーネント 例外(SCCallException)発生 紹介コード:" + inIntrCd + " サービス契約番号:" + inSvcKeiNo + " SYSID:" + sysId
							+ " StatusCD:" + e.getStatusCD());
				}

				// ステータスエリア編集
				StatusArea sa = param.getStatusArea();
				StatusInfo si = new StatusInfo(errorLevel, OUTBREAK_AREA.CC);
				sa.setCurrent(si);
				// リターンコード編集
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			}
			catch (Exception e)
			{
				// 結果コード：システムエラー
				resultMap.put(OUT_RETURN_CODE, RETURN_CD_99);
				// ログ出力
				outputBusLog("--- 紹介テーブル登録コモンコンポーネント 例外(Exception)発生 紹介コード:" + inIntrCd + " サービス契約番号:" + inSvcKeiNo + " SYSID:" + sysId);

				// ステータスエリア編集
				StatusArea sa = param.getStatusArea();
				StatusInfo si = new StatusInfo(ErrorLevel.EL988, OUTBREAK_AREA.CC);
				sa.setCurrent(si);
				// リターンコード編集
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CODE_SYSTEMERR);
			}
		}

		// ●リクエストパラメータに結果を格納
		param.removeData(fixedText);
		param.setData(fixedText, resultMap);

		// 終了ログ
		outDebugLog("----- addIntrTbl End  -----");
		return param;

	}

	/**
	 * EKK0311A010_紹介一意照会の上りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param intrCd
	 * @throws RequestParameterException 
	 */
	private void setInMapEKK0311A010(IRequestParameterReadWrite param, String fixedText, String intrCd) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿照会コード
		inMap.put(EKK0311A010CBSMsg.KEY_INTR_CD, intrCd);
	}

	/**
	 * 上りマッピング項目設定(サービス契約一意照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param pcrsCd
	 * @param pplanCd
	 * @throws RequestParameterException
	 */
	private void setInMapEKK0081A010(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		// ＫＥＹ＿予約適用年月日
		inMap.put(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));

	}

	/**
	 * 上りマッピング項目設定(お客様一意照会）
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param sysId SYSID
	 * @throws RequestParameterException
	 */
	private void setInMapECK0011A010(IRequestParameterReadWrite param, String fixedText, String sysId) throws RequestParameterException
	{
		// 機能コード設定(2:カレント)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// SYSID
		inMap.put(ECK0011A010CBSMsg.KEY_SYSID, sysId);
		// 予約適用年月日
		inMap.put(ECK0011A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));
	}

	/**
	 * 上りマッピング項目設定(紹介登録)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	private void setInMapEKK0311D010(IRequestParameterReadWrite param, String fixedText, String sysId, String eoId, HashMap paramMap)
			throws RequestParameterException
	{

		String intrCd = (String)paramMap.get(IN_INTR_CD);
		String intrDtm = (String)paramMap.get(IN_INTR_DTM);
		String hishokaiNm = (String)paramMap.get(IN_HISHOKAI_NM);
		String hishokaiRrksMlad = (String)paramMap.get(IN_HISHOKAI_RRKS_MLAD);
		String shokaishaNm = (String)paramMap.get(IN_SHOKAISHA_NM);
		String svcKeiNo = (String)paramMap.get(IN_SVC_KEI_NO);
		String shokaishaRrksMlad = (String)paramMap.get(IN_SHOKAISHA_RRKS_MLAD);
		String shokaishaPcd = (String)paramMap.get(IN_SHOKAISHA_PCD);
		String shokaishaAdStateNm = (String)paramMap.get(IN_SHOKAISHA_AD_STATE_NM);
		String shokaishaAdCityNm = (String)paramMap.get(IN_SHOKAISHA_AD_CITY_NM);
		String shokaishaAdBnchigo = (String)paramMap.get(IN_SHOKAISHA_AD_BNCHIGO);
		String shokaishaAdrttm = (String)paramMap.get(IN_SHOKAISHA_ADRTTM);

		if (!JFUBPCommon.isNull(intrDtm))
		{
			intrDtm = intrDtm.replace(SURA, JFUStrConst.EMPTY);
			intrDtm = intrDtm.replace(COLON, JFUStrConst.EMPTY);
			intrDtm = intrDtm.replace(SPACE, JFUStrConst.EMPTY);
			intrDtm = intrDtm + MS_ZERO;
		}
		if (!JFUBPCommon.isNull(shokaishaPcd))
		{
			shokaishaPcd = shokaishaPcd.replace(HAIHUN, JFUStrConst.EMPTY);
		}

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:PK指定)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
		// 紹介コード
		inMap.put(EKK0311D010CBSMsg.INTR_CD, intrCd);
		// ＳＹＳＩＤ
		inMap.put(EKK0311D010CBSMsg.SYSID, sysId);
		// 紹介サービス区分
		inMap.put(EKK0311D010CBSMsg.INTR_SVC_DIV, JFUStrConst.EMPTY);
		// 紹介年月日時分秒
		inMap.put(EKK0311D010CBSMsg.INTR_DTM, intrDtm);
		// 被紹介者名
		inMap.put(EKK0311D010CBSMsg.HISHOKAI_NM, hishokaiNm);
		// 被紹介者連絡先メールアドレス
		inMap.put(EKK0311D010CBSMsg.HISHOKAI_RRKS_MLAD, hishokaiRrksMlad);
		// 申込通知メール送信年月日時分秒
		inMap.put(EKK0311D010CBSMsg.MSKM_TCH_ML_SEND_DTM, JFUStrConst.EMPTY);
		// 紹介種別コード
		inMap.put(EKK0311D010CBSMsg.INTR_SBT_CD, INTR_SBT_CD_1);
		// キャンセル通知メール送信年月日時分秒
		inMap.put(EKK0311D010CBSMsg.CANCEL_TCH_ML_SEND_DTM, JFUStrConst.EMPTY);
		// 紹介者名
		inMap.put(EKK0311D010CBSMsg.SHOKAISHA_NM, shokaishaNm);
		// サービス契約番号
		inMap.put(EKK0311D010CBSMsg.SVC_KEI_NO, svcKeiNo);
		// 紹介者eoID
		inMap.put(EKK0311D010CBSMsg.SHOKAISHA_EOID, eoId);
		// 紹介者連絡先メールアドレス
		inMap.put(EKK0311D010CBSMsg.SHOKAISHA_RRKS_MLAD, shokaishaRrksMlad);
		// 紹介者郵便番号
		inMap.put(EKK0311D010CBSMsg.SHOKAISHA_PCD, shokaishaPcd);
		// 紹介者住所番地号
		inMap.put(EKK0311D010CBSMsg.SHOKAISHA_AD_BNCHIGO, shokaishaAdStateNm + shokaishaAdCityNm + shokaishaAdBnchigo + shokaishaAdrttm);

		// 紹介者住所都道府県名
		inMap.put(EKK0311D010CBSMsg.SHOKAISHA_AD_STATE_NM, JFUStrConst.EMPTY);
		// 紹介者住所市区町村名
		inMap.put(EKK0311D010CBSMsg.SHOKAISHA_AD_CITY_NM, JFUStrConst.EMPTY);
		// 紹介者住所大字通称名
		inMap.put(EKK0311D010CBSMsg.SHOKAISHA_AD_OAZTSU_NM, JFUStrConst.EMPTY);
		// 紹介者住所字丁目名
		inMap.put(EKK0311D010CBSMsg.SHOKAISHA_AD_AZCHO_NM, JFUStrConst.EMPTY);
		// 紹介者住所補記・建物名
		inMap.put(EKK0311D010CBSMsg.SHOKAISHA_ADRTTM, JFUStrConst.EMPTY);
		// 紹介者住所補記・部屋番号		
		inMap.put(EKK0311D010CBSMsg.SHOKAISHA_ADRRM, JFUStrConst.EMPTY);
		// 申込メール送信コード
		inMap.put(EKK0311D010CBSMsg.MSKM_ML_SEND_CD, ML_SEND_CD_0);
		// キャンセルメール送信コード
		inMap.put(EKK0311D010CBSMsg.CANCEL_ML_SEND_CD, ML_SEND_CD_0);

	}

	/**
	 * デバッグ出力処理です。
	 * 
	 * <br>
	 * @param obj 出力内容
	 */
	private void outDebugLog(Object obj)
	{
		// デバッグ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), obj, null, null, null);
	}

	/**
	 * チェック処理（共通処理）
	 * 
	 * <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;
	}

	/**
	 * ビジネスログへの出力処理
	 *
	 * @param msg ログ情報
	 */
	private void outputBusLog(String msg)
	{
		JSYejbLog.println(JSYejbLog.EXECUTION, this.getClass(), msg);
	}

	/**
	 * エラー項目の設定
	 *
	 * @param param リクエストパラメータ
	 * @param inMap IN項目マップ
	 * @param resultMap OUT項目マップ
	 */
	private void setErrList(IRequestParameterReadWrite param, HashMap resultMap) throws RequestParameterException
	{
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null || errList.size() <= 0)
		{
			return;
		}
		Map errorInfoMap = (Map)errList.get(0);

		Map<String, String> itemCheckErrorMap = (Map<String, String>)errorInfoMap.get(ErrorInfoMapKeys.ITEM_CHECK_ERRORS);

		for (Map.Entry<String, String> element : itemCheckErrorMap.entrySet())
		{
			if (element.getKey().indexOf(ITEM_ERR_END) > 0)
			{
				//‘key_’を除く
				String key = element.getKey().replaceFirst(KEY_ERR_START, JFUStrConst.EMPTY);

				// 紹介者eoIDエラーの場合は、項目名をeoIDに変換
				if (EKK0311D010CBSMsg.SHOKAISHA_EOID_ERR.equals(key))
				{
					key = key.replaceFirst(EKK0311D010CBSMsg.SHOKAISHA_EOID, IN_EOID);
				}
				// 住所番地号エラーの場合は、住所項目すべてにエラーを設定
				if (EKK0311D010CBSMsg.SHOKAISHA_AD_BNCHIGO_ERR.equals(key))
				{
					resultMap.put(IN_SHOKAISHA_AD_STATE_NM + ITEM_ERR_END, element.getValue());
					resultMap.put(IN_SHOKAISHA_AD_CITY_NM + ITEM_ERR_END, element.getValue());
					resultMap.put(IN_SHOKAISHA_AD_BNCHIGO + ITEM_ERR_END, element.getValue());
					resultMap.put(IN_SHOKAISHA_ADRTTM + ITEM_ERR_END, element.getValue());
				}
				// SYSIDエラーの場合は、サービス契約番号にエラーを設定
				if (EKK0311D010CBSMsg.SYSID_ERR.equals(key))
				{
					resultMap.put(IN_SVC_KEI_NO + ITEM_ERR_END, element.getValue());
				}
				// エラーフラグのセット
				resultMap.put(key, element.getValue());
			}
		}

		return;
	}
}
