/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKChkTelNoRsvUpdCfmCC
*   ソースファイル名：JKKChkTelNoRsvUpdCfmCC.java
*   作成者          ：FJ
*   日付            ：2012年12月13日
*＜機能概要＞
*   電話番号予約更新処理前に、更新対象のデータの関連チェックを行う。
*   関連チェック（相関チェック、移転トーキ中チェック、変更前予約者と変更後予約者の確認チェック）
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00       2012/12/13   FJ)鷲塚     新規作成
*   v4.01       2013/01/17   FJ)鷲塚     【IT1-2013-0000140】エイジング関連チェック対応
*   v4.02       2013/03/25   FJ)清崎     【OT-2013-0000311】電話番号変更時の「サービス契約内訳」のインスタンス見直し対応
*   v5.00       2013/08/31   FJ)山西     【OM-2013-0001255】電話番号予約登録時の移転トーキ中チェック修正（運用日がトーキ終了日の場合は、チェックエラーとしない）
*   v5.01       2013/11/08   FJ)鈴木     【ANK-1670-00-00】エイジングステータスが回復可能、エイジンング中でも電話予約可能となるように変更
*
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
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 eo.ejb.cbs.cbsmsg.EKK0081B033CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B033CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;

/**
 * 電話番号予約更新確認チェック部品<p>
 * <br>
 * @author 富士通
 */
public class JKKChkTelNoRsvUpdCfmCC extends AbstractCommonComponent
{
	/**
	 * テンプレートID
	 */
	/** サービス契約一覧照会（電話番号） */
	private static final String TEMPLATE_ID_EKK0081B033 = "EKK0081B033";
	/** サービス契約内訳<eo光電話>一覧照会（サービス契約番号） */
	private static final String TEMPLATE_ID_EKK0191B001 = "EKK0191B001";
	/** サービス契約内訳＜eo光電話＞一意照会 */
	private static final String TEMPLATE_ID_EKK0191A010 = "EKK0191A010";
	
	/** 機能コード:1 */
	private static final String FUNC_CD_01 = "1";
	/** 機能コード:2 */
	private static final String FUNC_CD_02 = "2";
	// OT-2013-0000311 2013/03/25 ADD START
	/** 機能コード:4 */
	private static final String FUNC_CD_04 = "4";
	// OT-2013-0000311 2013/03/25 ADD END

	
	/**
	 * エラーメッセージ
	 * /
	/** 正常終了 */
	public static final String NORMAL_END = "NORMAL_END";
	/** 解約・休止トーキ中エラー */
	public static final String ERROR_DSL_PAUSE_TOKI = "ERROR_DSL_PAUSE_TOKI";
	/** 移転先開通後トーキ中エラー */
	public static final String ERROR_ITENS_OPAF_TOKI = "ERROR_ITENS_OPAF_TOKI";

	/**
	 * エラーコード
	 */ 
 	/** 移転トーキチェックエラー      : 01 */
	private static final String ERROR_CD_ITENTOKI = "01";
 	/** 相関チェックエラー(両方空白)  : 11 */
	private static final String ERROR_CD_SOKAN_BOTH_BLANK = "11";
 	/** 相関チェックエラー(両方入力)  : 12 */
	private static final String ERROR_CD_SOKAN_BOTH_INPUT = "12";
 	/** 相関チェックエラー(片方入力)  : 13 */
	private static final String ERROR_CD_SOKAN_ONE_INPUT = "13";
 	/** 変更前後の予約者の確認チェック: 21 */
	private static final String WARN_CD_CONFIRM_CHG_SYSID = "21";
	// IT1-2013-0000140 2013/01/17 ADD START
 	/** エイジング発番中エラー        : 31 */
	private static final String ERROR_CD_AGING_STS_HTBN = "31";
 	/** エイジング使用中エラー        : 32 */
	private static final String ERROR_CD_AGING_STS_USE = "32";
 	/** エイジング回復可能期間中エラー: 33 */
	private static final String ERROR_CD_AGING_STS_KIHK = "33";
 	/** エイジング回復不可中エラー    : 34 */
	private static final String ERROR_CD_AGING_STS_NOT_KIHK = "34";
 	/** 引当制約種別優待番号エラー    : 41 */
	private static final String ERROR_CD_HKAT_YUTAI = "41";
 	/** 引当制約種別使用不可エラー    : 42 */
	private static final String ERROR_CD_HKAT_NOT_USE = "42";
 	/** 引当制約種別廃止番号エラー    : 43 */
	private static final String ERROR_CD_HKAT_HAISHI = "43";
 	/** 引当制約種別存在エラー        : 44 */
	private static final String ERROR_CD_HKAT_EXIST = "44";
 	/** 通常予約変更エラー            : 51 */
	private static final String ERROR_CD_CHGRSV_TOUJO = "51";
 	/** 指定予約変更エラー            : 52 */
	private static final String ERROR_CD_CHGRSV_FIX = "52";
	// IT1-2013-0000140 2013/01/17 ADD END
	
	/** 
	 * 電話番号予約ステータス
	 */
	/** 変更なし: 0 */
	private static final String TELNO_RSV_STAT_NOCHG = "0";
	/** 予約登録: 1 */
	private static final String TELNO_RSV_STAT_REGIST = "1";
	/** 予約更新: 2 */
	private static final String TELNO_RSV_STAT_UPDATE = "2";
	/** 予約削除: 3 */
	private static final String TELNO_RSV_STAT_DELETE = "3";
	
	/** 
	 * 電話番号予約種別コード
	 */
	/** 通常予約: 01 */
	private static final String TELNO_RSV_SBT_TOUJO = "01";
	/** 指定予約: 02 */
	private static final String TELNO_RSV_SBT_FIX = "02";
	/** 引継予約: 03 */
	private static final String TELNO_RSV_SBT_HKTGI = "03";
//	2013.11.08 ANK-1670-00-00 add start
	/** 050IP電話アプリ用050電話番号予約中: 04 */
	private static final String TELNO_RSV_SBT_050IP = "04";
//	2013.11.08 ANK-1670-00-00 add end

	// IT1-2013-0000140 2013/01/17 ADD START
	/** 
	 * エイジングステータスコード
	 */
	/** エイジング使用中  : 100 */
	private static final  String AGING_STS_USE = "100";
	/** エイジング回復可能: 200 */
	private static final  String AGING_STS_KIHK = "200";
	/** エイジング回復不可: 300 */
	private static final  String AGING_STS_NOT_KIHK = "300";

	/**
	 * 引当制約種別コード
	 */
	/** 優待番号: 01 */
	private static final  String HKAT_SIYK_SBT_YUTAI = "01";
	/** 使用不可: 02 */
	private static final  String HKAT_SIYK_SBT_NOT_USE = "02";
	/** 廃止番号: 03 */
	private static final  String HKAT_SIYK_SBT_HAISHI = "03";

	/** 年月日時分秒の初期値 */
	private static final String DTM_DEFAULT_VALUE = "20991231235959999";
	// IT1-2013-0000140 2013/01/17 ADD END

	/**
	 * 電話番号予約更新確認チェック処理<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite chkTelNoRsvUpdCfm(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		/* ユーザデータ情報取得 */
		HashMap inMap = null;
		inMap = (HashMap)param.getData(fixedText);

		String telNoRsvStatChoice = (String)inMap.get("telno_rsv_stat_choice");
		String telNoRsvSbtCdValue = (String)inMap.get("telno_rsv_sbt_cd_value");
		String yoyakshaSysID = (String)inMap.get("yoyaksha_sysid");
		String afterChgRsvSysID = (String)inMap.get("afterchg_rsv_sysid");
		String yoyakshaSvcKeiNo = (String)inMap.get("yoyaksha_svc_kei_no");
		String unyoYmd = (String)inMap.get("unyo_ymd");
		// IT1-2013-0000140 2013/01/17 ADD START
		String telnoRsvSbtCd = (String)inMap.get("telno_rsv_sbt_cd");
		String agingStat = (String)inMap.get("aging_stat");
		String hkatSiykSbtCd = (String)inMap.get("hkat_siyk_sbt_cd");
		String hkatSiykSbtCdValue = (String)inMap.get("hkat_siyk_sbt_cd_value");
		String useStaDtm = (String)inMap.get("use_sta_dtm");
		// IT1-2013-0000140 2013/01/17 ADD END

		/* エラーコード初期化 */
		inMap.put("err_cd", "");

		//-------------------------------------------------
		// パラメーターチェック
		//-------------------------------------------------
		if (isNullorBlank(telNoRsvStatChoice))
		{
			SCCallException scCallEx = new SCCallException("電話番号予約ステータス内容が、Nullまたは空白", "0", 9999);
			throw scCallEx;
		}
		if (yoyakshaSysID == null)
		{
			SCCallException scCallEx = new SCCallException("予約者ＳＹＳＩＤが、Null", "0", 9999);
			throw scCallEx;
		}
		if (yoyakshaSvcKeiNo == null)
		{
			SCCallException scCallEx = new SCCallException("予約者サービス契約番号が、Null", "0", 9999);
			throw scCallEx;
		}
		if (afterChgRsvSysID == null)
		{
			SCCallException scCallEx = new SCCallException("変更後予約者ＳＹＳＩＤが、Null", "0", 9999);
			throw scCallEx;
		}
		if (isNullorBlank(unyoYmd))
		{
			SCCallException scCallEx = new SCCallException("運用日が、Nullまたは空白", "0", 9999);
			throw scCallEx;
		}

		if (!TELNO_RSV_STAT_NOCHG.equals(telNoRsvStatChoice) &&
			!TELNO_RSV_STAT_REGIST.equals(telNoRsvStatChoice) &&
			!TELNO_RSV_STAT_UPDATE.equals(telNoRsvStatChoice) &&
			!TELNO_RSV_STAT_DELETE.equals(telNoRsvStatChoice))
		{
			SCCallException scCallEx = new SCCallException("電話番号予約ステータスの値が不正", "0", 9999);
			throw scCallEx;
		}
		if (TELNO_RSV_STAT_REGIST.equals(telNoRsvStatChoice) ||
			TELNO_RSV_STAT_UPDATE.equals(telNoRsvStatChoice))
		{
			// "予約登録"か"予約変更"を選択の場合だけチェックする
			if (isNullorBlank(telNoRsvSbtCdValue))
			{
				SCCallException scCallEx = new SCCallException("電話番号予約種別コード値が、Nullまたは空白", "0", 9999);
				throw scCallEx;
			}
			if (!TELNO_RSV_SBT_TOUJO.equals(telNoRsvSbtCdValue) &&
				!TELNO_RSV_SBT_FIX.equals(telNoRsvSbtCdValue) &&
				!TELNO_RSV_SBT_HKTGI.equals(telNoRsvSbtCdValue) &&
// 2013.11.06 ANK-1670-00-00 add start
				!TELNO_RSV_SBT_050IP.equals(telNoRsvSbtCdValue))
// 2013.11.06 ANK-1670-00-00 add end
			{
				SCCallException scCallEx = new SCCallException("電話番号予約種別コード値の値が不正", "0", 9999);
				throw scCallEx;
			}
		}

		// IT1-2013-0000140 2013/01/17 ADD START
		if (telnoRsvSbtCd == null)
		{
			SCCallException scCallEx = new SCCallException("電話番号予約種別コードが、Null", "0", 9999);
			throw scCallEx;
		}
		if (agingStat == null)
		{
			SCCallException scCallEx = new SCCallException("エイジングステータスが、Null", "0", 9999);
			throw scCallEx;
		}
		if (hkatSiykSbtCd == null)
		{
			SCCallException scCallEx = new SCCallException("引当制約種別コードが、Null", "0", 9999);
			throw scCallEx;
		}
		if (hkatSiykSbtCdValue == null)
		{
			SCCallException scCallEx = new SCCallException("引当制約種別コード値が、Null", "0", 9999);
			throw scCallEx;
		}
		if (useStaDtm == null)
		{
			SCCallException scCallEx = new SCCallException("使用開始年月日時分秒が、Null", "0", 9999);
			throw scCallEx;
		}
		// IT1-2013-0000140 2013/01/17 ADD END
		
		//-------------------------------------------------
		// 相関チェック (電話番号予約種別コード)
		//-------------------------------------------------
		// 電話番号予約ステータスが、"予約登録"、または、"予約更新"の場合のみチェックを実施
		if (TELNO_RSV_STAT_REGIST.equals(telNoRsvStatChoice) || TELNO_RSV_STAT_UPDATE.equals(telNoRsvStatChoice))
		{
			// "指定予約"または"引継予約"の場合
			if (TELNO_RSV_SBT_FIX.equals(telNoRsvSbtCdValue) || TELNO_RSV_SBT_HKTGI.equals(telNoRsvSbtCdValue))
			{
				if ("".equals(afterChgRsvSysID) && "".equals(yoyakshaSvcKeiNo))
				{
					inMap.put("err_cd", ERROR_CD_SOKAN_BOTH_BLANK);
					return param;
				}
				else if (!"".equals(afterChgRsvSysID) && !"".equals(yoyakshaSvcKeiNo))
				{
					inMap.put("err_cd", ERROR_CD_SOKAN_BOTH_INPUT);
					return param;
				}
			}
			// "指定予約"または"引継予約"以外の場合
			else
			{
				if (!"".equals(afterChgRsvSysID) || !"".equals(yoyakshaSvcKeiNo))
				{
					inMap.put("err_cd", ERROR_CD_SOKAN_ONE_INPUT);
					return param;
				}
			}
			
		}
		
		// IT1-2013-0000140 2013/01/17 ADD START
		//-------------------------------------------------
		// 相関チェック (エイジングステータス)
		//-------------------------------------------------
		String agingChkErrorCode = chkAgingStatus(inMap);
		if (!agingChkErrorCode.equals(NORMAL_END))
		{
			inMap.put("err_cd", agingChkErrorCode);
			return param;
		}
		// IT1-2013-0000140 2013/01/17 ADD END

		//-------------------------------------------------
		// 移転トーキ中チェック
		//-------------------------------------------------
		String resultToki = chkItenToki(handle, param, fixedText, inMap);
		if (!resultToki.equals(NORMAL_END))
		{
			inMap.put("err_cd", ERROR_CD_ITENTOKI);
			return param;
		}
		
		//-------------------------------------------------
		// 変更前予約者と変更後予約者の確認チェック
		//-------------------------------------------------
		if (!isNullorBlank(yoyakshaSysID))
		{
			if (!afterChgRsvSysID.equals(yoyakshaSysID))
			{
				inMap.put("err_cd", WARN_CD_CONFIRM_CHG_SYSID);
			}
		}

		return param;
	}
	
	// IT1-2013-0000140 2013/01/17 ADD START
	
	/**
	 * エイジングステータスのチェック処理<br>
	 * <br>
	 * @param inMap モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @return エイジングステータスチェックエラーコード
	 * @exception Exceptionがスローされます。
	 */
	private String chkAgingStatus(HashMap<String, Object> inMap) throws Exception
	{
		String errorCode = NORMAL_END;
		
		String telNoRsvStatChoice = (String)inMap.get("telno_rsv_stat_choice");
		
		if (TELNO_RSV_STAT_REGIST.equals(telNoRsvStatChoice) || TELNO_RSV_STAT_UPDATE.equals(telNoRsvStatChoice))
		{
			errorCode = chkAgingStatusForChg(inMap);
		}
		else if (TELNO_RSV_STAT_DELETE.equals(telNoRsvStatChoice))
		{
			errorCode = chkAgingStatusForDel(inMap);
		}
		else if (TELNO_RSV_STAT_NOCHG.equals(telNoRsvStatChoice))
		{
			errorCode = chkAgingStatusForNoChg(inMap);
		}
		return errorCode;
	}

	/**
	 * エイジングステータスチェック処理(登録・更新)<br>
	 * <br>
	 * @param inMap モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @return エイジングステータスチェックエラーコード
	 * @exception Exceptionがスローされます。
	 */
	private String chkAgingStatusForChg(HashMap<String, Object> inMap) throws Exception
	{
		String errorCode = NORMAL_END;
		
		String agingStat = (String)inMap.get("aging_stat");
		String hkatSiykSbtCd = (String)inMap.get("hkat_siyk_sbt_cd");
		String telnoRsvSbtCd = (String)inMap.get("telno_rsv_sbt_cd");
		String hkatSiykSbtCdValue = (String)inMap.get("hkat_siyk_sbt_cd_value");
		String telNoRsvSbtCdValue = (String)inMap.get("telno_rsv_sbt_cd_value");
		String useStaDtm = (String)inMap.get("use_sta_dtm");
		
		if (AGING_STS_USE.equals(agingStat))
		{
			// エイジング使用中
			// 電話番号予約種別はどのような値でも許可されない。変更可能なのは引当制約種別
			if (!("".equals(hkatSiykSbtCdValue)) && "".equals(telNoRsvSbtCdValue))
			{
				// エイジング発番中は、引当制約種別"使用不可"以外は登録付加
				// エイジング発番中とは、(エイジング使用中 AND エイジング.使用終了年月日 == 初期値)のことを示す
				if (DTM_DEFAULT_VALUE.equals(useStaDtm))
				{
					if (!(HKAT_SIYK_SBT_NOT_USE.equals(hkatSiykSbtCdValue)))
					{
						// エイジング発番中
						errorCode = ERROR_CD_AGING_STS_HTBN;
					}
				}
				else
				{
					// エイジング使用中
					errorCode = ERROR_CD_AGING_STS_USE;
				}
			}
			else
			{
				// 引当制約種別を"なし"にすることも許可されない
				if (DTM_DEFAULT_VALUE.equals(useStaDtm))
				{
					// エイジング発番中
					errorCode = ERROR_CD_AGING_STS_HTBN;
				}
				else
				{
					// エイジング使用中
					errorCode = ERROR_CD_AGING_STS_USE;
				}
			}

		}
		else if (AGING_STS_KIHK.equals(agingStat))
		{
			// エイジング回復可能期間中
// 2013.11.08 ANK-1670-00-00 mod start
//			errorCode = ERROR_CD_AGING_STS_KIHK;
			errorCode = NORMAL_END;
// 2013.11.08 ANK-1670-00-00 mod end
		}
		else if (AGING_STS_NOT_KIHK.equals(agingStat))
		{
			// エイジング回復不可中
// 2013.11.08 ANK-1670-00-00 mod start
//			errorCode = ERROR_CD_AGING_STS_NOT_KIHK;
			errorCode = NORMAL_END;
// 2013.11.08 ANK-1670-00-00 mod end
		}
		else
		{
			if (HKAT_SIYK_SBT_YUTAI.equals(hkatSiykSbtCd) ||
				HKAT_SIYK_SBT_NOT_USE.equals(hkatSiykSbtCd) ||
				HKAT_SIYK_SBT_HAISHI.equals(hkatSiykSbtCd))
			{
				if (TELNO_RSV_SBT_TOUJO.equals(telNoRsvSbtCdValue) ||
					TELNO_RSV_SBT_FIX.equals(telNoRsvSbtCdValue) ||
					TELNO_RSV_SBT_HKTGI.equals(telNoRsvSbtCdValue))
				{
					if (!("".equals(hkatSiykSbtCdValue)))
					{
						// 引当制約種別コードが存在
						errorCode = ERROR_CD_HKAT_EXIST;
					}
				}
			}

			if (TELNO_RSV_SBT_TOUJO.equals(telnoRsvSbtCd) && TELNO_RSV_SBT_FIX.equals(telNoRsvSbtCdValue))
			{
				// 選択した電話番号予約種別では、通常予約から指定予約への電話番号予約はできない
				errorCode = ERROR_CD_CHGRSV_TOUJO;
			}
			if (TELNO_RSV_SBT_FIX.equals(telnoRsvSbtCd) && TELNO_RSV_SBT_TOUJO.equals(telNoRsvSbtCdValue))
			{
				// 選択した電話番号予約種別では、指定予約から通常予約への電話番号予約はできない
				errorCode = ERROR_CD_CHGRSV_FIX;
			}
		}

		return errorCode;
	}

	/**
	 * エイジングステータスチェック処理(削除)<br>
	 * <br>
	 * @param inMap モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @return エイジングステータスチェックエラーコード
	 * @exception Exceptionがスローされます。
	 */
	private String chkAgingStatusForDel(HashMap<String, Object> inMap) throws Exception
	{
		String errorCode = NORMAL_END;
	
		String agingStat = (String)inMap.get("aging_stat");
		String hkatSiykSbtCd = (String)inMap.get("hkat_siyk_sbt_cd");
		
		if (AGING_STS_USE.equals(agingStat))
		{
			// エイジング使用中
			errorCode = ERROR_CD_AGING_STS_USE;
		}
		else if (AGING_STS_KIHK.equals(agingStat))
		{
			// エイジング回復可能期間中
// 2013.11.08 ANK-1670-00-00 mod start
//			errorCode = ERROR_CD_AGING_STS_KIHK;
			errorCode = NORMAL_END;
// 2013.11.08 ANK-1670-00-00 mod end
		}
		else if (AGING_STS_NOT_KIHK.equals(agingStat))
		{
			// エイジング回復不可中
// 2013.11.08 ANK-1670-00-00 mod start
//			errorCode = ERROR_CD_AGING_STS_NOT_KIHK;
			errorCode = NORMAL_END;
// 2013.11.08 ANK-1670-00-00 mod end
		}
		else
		{
			// 引当制約種別が"なし"の場合だけ予約削除可能
			if (!("".equals(hkatSiykSbtCd)))
			{
				if (HKAT_SIYK_SBT_YUTAI.equals(hkatSiykSbtCd))
				{
					// 引当制約種別が優待番号
					errorCode = ERROR_CD_HKAT_YUTAI;
				}
				else if (HKAT_SIYK_SBT_NOT_USE.equals(hkatSiykSbtCd))
				{
					// 引当制約種別が使用不可
					errorCode = ERROR_CD_HKAT_NOT_USE;
				}
				else if (HKAT_SIYK_SBT_HAISHI.equals(hkatSiykSbtCd))
				{
					// 引当制約種別が廃止番号
					errorCode = ERROR_CD_HKAT_HAISHI;
				}
			}
		}

		return errorCode;
	}

	/**
	 * エイジングステータスチェック処理(変更なし(=>電話番号の変更のみ))<br>
	 * <br>
	 * @param inMap モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @return エイジングステータスチェックエラーコード
	 * @exception Exceptionがスローされます。
	 */
	private String chkAgingStatusForNoChg(HashMap<String, Object> inMap) throws Exception
	{
		String errorCode = NORMAL_END;

		String agingStat = (String)inMap.get("aging_stat");
		String hkatSiykSbtCdValue = (String)inMap.get("hkat_siyk_sbt_cd_value");
		String useStaDtm = (String)inMap.get("use_sta_dtm");
		
		if(AGING_STS_USE.equals(agingStat))
		{
			// エイジング使用中
			// 電話番号予約種別は確認しない（更新につかわれない）変更可能なのは引当制約種別
			if(!("".equals(hkatSiykSbtCdValue)))
			{
				// エイジング発番中は、引当制約種別"使用不可"以外は登録付加
				// エイジング発番中とは、(エイジング使用中 AND エイジング.使用終了年月日 == 初期値)のことを示す
				if(DTM_DEFAULT_VALUE.equals(useStaDtm))
				{
					if(!(HKAT_SIYK_SBT_NOT_USE.equals(hkatSiykSbtCdValue)))
					{
						// エイジング発番中
						errorCode = ERROR_CD_AGING_STS_HTBN;
					}
				}
				else
				{
					// エイジング使用中
					errorCode = ERROR_CD_AGING_STS_USE;
				}
			}
			else
			{
				// 引当制約種別を"なし"にすることも許可されない
				// エイジング発番中とは、(エイジング使用中 AND エイジング.使用終了年月日 == 初期値)のことを示す
				if(DTM_DEFAULT_VALUE.equals(useStaDtm))
				{
					// エイジング発番中
					errorCode = ERROR_CD_AGING_STS_HTBN;
				}
				else
				{
					// エイジング使用中
					errorCode = ERROR_CD_AGING_STS_USE;
				}
			}
			
		}
		else if(AGING_STS_KIHK.equals(agingStat))
		{
			// エイジング回復可能期間中
			errorCode = ERROR_CD_AGING_STS_KIHK;
		}
		else if(AGING_STS_NOT_KIHK.equals(agingStat))
		{
			if(!("".equals(hkatSiykSbtCdValue)))
			{
				// 使用不可、廃止番号の設定のみ可能とする
				if(!(HKAT_SIYK_SBT_NOT_USE.equals(hkatSiykSbtCdValue)) && !(HKAT_SIYK_SBT_HAISHI.equals(hkatSiykSbtCdValue)))
				{
					// エイジング回復不可中
					errorCode = ERROR_CD_AGING_STS_NOT_KIHK;
				}
			}
			else
			{
				// エイジング回復不可中
				errorCode = ERROR_CD_AGING_STS_NOT_KIHK;
			}
		}

		return errorCode;
	}
	// IT1-2013-0000140 2013/01/17 ADD START

	/**
	 * 移転トーキ中チェック処理<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param inMap
	 * @param fixedText ユーザ任意文字列
	 * @return 移転トーキ中チェックエラーコード
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private String chkItenToki(SessionHandle handle, IRequestParameterReadWrite param,
			String fixedText, HashMap<String, Object> inMap) throws Exception
	{
		// インプットパラメータを取得
		String inputTelno = (String)inMap.get("telno");
		String inputUnyoYmd = (String)inMap.get("unyo_ymd");
		
		//-------------------------------------------------
		// サービス契約一覧照会（電話番号）S-I/F
		//-------------------------------------------------
		/* ◇上りマッピング処理（サービス契約一覧照会（電話番号）） */
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> kk0081b033_paramMap = new HashMap<String, Object>();
		
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		kk0081b033_paramMap = editInMsgKK0081B033(param, inMap);

		/* ◇ＳＣ呼出実行（サービス契約一覧照会（電話番号）） */
		Map<?, ?> result1 = callDoSc(kk0081b033_paramMap, handle);

		/* ◇下りマッピング処理（サービス契約一覧照会（電話番号）） */
		HashMap<String, Object> kk0081b033_map = new HashMap<String, Object>();
		kk0081b033_map = editResultRpKK0081B033(result1, param, fixedText);
		
		// サービス契約一覧照会（電話番号）明細の取り出し
		ArrayList kk0081b033_list = null;
		kk0081b033_list = (ArrayList)kk0081b033_map.get("EKK0081B033CBSMsg1List");
		for (int i = 0; i < kk0081b033_list.size(); i++)
		{
			HashMap<String, Object> kk0081b033_cbsMsg1_map = (HashMap)kk0081b033_list.get(i);
		
			//-------------------------------------------------
			// サービス契約一覧照会（電話番号）S-I/F
			//-------------------------------------------------
			/* ◇上りマッピング処理（サービス契約一覧照会（電話番号）） */
			// 上りマッピングの処理結果を取得するためのマップを生成
			HashMap<String, Object> kk191b001_paramMap = new HashMap<String, Object>();
			
			// リクエストパラメータを引数に上りマッピング処理メソッドを実行
			kk191b001_paramMap = editInMsgKK0191B001(param, inMap, kk0081b033_cbsMsg1_map);

			/* ◇ＳＣ呼出実行（サービス契約一覧照会（電話番号）） */
			Map<?, ?> result2 = callDoSc(kk191b001_paramMap, handle);

			/* ◇下りマッピング処理（サービス契約一覧照会（電話番号）） */
			HashMap<String, Object> kk0191b001_map = new HashMap<String, Object>();
			kk0191b001_map = editResultRpKK0191B001(result2, param, fixedText);
			
			// サービス契約一覧照会（電話番号）明細の取り出し
			ArrayList kk0191b001_list = null;
			kk0191b001_list = (ArrayList)kk0191b001_map.get("EKK0191B001CBSMsg1List");
			for (int j = 0; j < kk0191b001_list.size(); j++)
			{
				HashMap<String, Object> kk0191b001_cbsMsg1_map = (HashMap)kk0191b001_list.get(j);
				
				// 電話番号チェック(更新対象の電話番号と一致していること)
				String getTelNo = (String)kk0191b001_cbsMsg1_map.get("telno");
				if (!getTelNo.equals(inputTelno))
				{
					continue;
				}
				
				//-------------------------------------------------
				// サービス契約内訳＜eo光電話＞一意照会 S-I/F
				//-------------------------------------------------
				/* ◇上りマッピング処理（サービス契約内訳＜eo光電話＞一意照会） */
				// 上りマッピングの処理結果を取得するためのマップを生成
				HashMap<String, Object> kk191a010_paramMap = new HashMap<String, Object>();
				
				// リクエストパラメータを引数に上りマッピング処理メソッドを実行
				kk191a010_paramMap = editInMsgKK0191A010(param, inMap, kk0191b001_cbsMsg1_map);
				
				/* ◇ＳＣ呼出実行（サービス契約内訳＜eo光電話＞一意照会） */
				Map<?, ?> result3 = callDoSc(kk191a010_paramMap, handle);
				
				/* ◇下りマッピング処理（サービス契約内訳＜eo光電話＞一意照会） */
				HashMap<String, Object> kk0191a010_map = new HashMap<String, Object>();
				kk0191a010_map = editResultRpKK0191A010(result3, param, fixedText);
				
				// サービス契約内訳＜eo光電話＞一意照会明細の取り出し
				ArrayList kk0191a010_list = null;
				kk0191a010_list = (ArrayList)kk0191a010_map.get("EKK0191A010CBSMsg1List");
				HashMap<String, Object> kk0191a010_cbsMsg1_map = (HashMap)kk0191a010_list.get(0);
				
				//-------------------------------------------------
				// 移転トーキ中チェック
				//-------------------------------------------------
				String dslPauseTokiStaYmd = (String)kk0191a010_cbsMsg1_map.get("dsl_pause_toki_sta_ymd");
				String dslPauseTokiEndYmd = (String)kk0191a010_cbsMsg1_map.get("dsl_pause_toki_end_ymd");
				String itensOpafTokiStaYmd = (String)kk0191a010_cbsMsg1_map.get("itens_opaf_toki_sta_ymd");
				String itensOpafTokiEndYmd = (String)kk0191a010_cbsMsg1_map.get("itens_opaf_toki_end_ymd");
				
				// 解約・休止トーキ中チェック
				if (!isNullorBlank(dslPauseTokiStaYmd))
				{
					if (isNullorBlank(dslPauseTokiEndYmd))
					{
						dslPauseTokiEndYmd = "20991231";
					}
					// OM-2013-0001255 2013/08/31 MOD START
//					if (inputUnyoYmd.compareTo(dslPauseTokiStaYmd) >= 0 && dslPauseTokiEndYmd.compareTo(inputUnyoYmd) >= 0)
					if (inputUnyoYmd.compareTo(dslPauseTokiStaYmd) >= 0 && dslPauseTokiEndYmd.compareTo(inputUnyoYmd) > 0)
					// OM-2013-0001255 2013/08/31 MOD END
					{
						return ERROR_DSL_PAUSE_TOKI;
					}
				}
				// 移転先開通後トーキ中チェック
				if (!isNullorBlank(itensOpafTokiStaYmd))
				{
					if (isNullorBlank(itensOpafTokiEndYmd))
					{
						itensOpafTokiEndYmd = "20991231";
					}
					// OM-2013-0001255 2013/08/31 MOD START
//					if (inputUnyoYmd.compareTo(itensOpafTokiStaYmd) >= 0 && itensOpafTokiEndYmd.compareTo(inputUnyoYmd) >= 0)
					if (inputUnyoYmd.compareTo(itensOpafTokiStaYmd) >= 0 && itensOpafTokiEndYmd.compareTo(inputUnyoYmd) > 0)
					// OM-2013-0001255 2013/08/31 MOD END
					{
						return ERROR_ITENS_OPAF_TOKI;
					}
				}
			}
		}
		return NORMAL_END;
	}
	
	/**
	 * CAANMsgに必要なデータをマッピングします。<br>
	 * サービス契約一覧照会（電話番号）（上り）<br>
	 * @param param (I) 業務データ取得用I/F
	 * @param inMap
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> editInMsgKK0081B033(IRequestParameterReadOnly param,
			HashMap<String, Object> inMap) throws RequestParameterException 
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		// 対象の電話番号を取得
		String trgtTelno = (String)inMap.get("telno");
		
		// メッセージ共通部の設定
		setCommonParamMap(param, paramMap);

		CAANMsg template = new CAANMsg(EKK0081B033CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0081B033CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081B033);

		// 機能コード（1）
		template.set(EKK0081B033CBSMsg.FUNC_CODE, FUNC_CD_01);

		// サービスインターフェイス共通部の設定
		setCommonTemplate(param, template);
		
		// リクエストパラメータ.電話番号 → 電話番号
		if (inMap == null || trgtTelno == null || "".equals(trgtTelno))
		{
			template.setNull(EKK0081B033CBSMsg.KEY_TELNO);
		}
		else
		{
			template.set(EKK0081B033CBSMsg.KEY_TELNO, trgtTelno);
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * サービス契約一覧照会（電話番号）（下り）<br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRpKK0081B033(Map<?, ?> msgList,
			IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = null;

		/* 業務データ設定 */
		dataMap = (HashMap)param.getData(fixedText);
		if (dataMap == null) 
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}
		// サービス契約一覧照会（電話番号）結果マップ
		HashMap kk0081b033_map = new HashMap();
		ArrayList kk0081b033List = null;
		
		templateArray = parentTemplate.getCAANMsgList(EKK0081B033CBSMsg.EKK0081B033CBSMSG1LIST);
		kk0081b033List = (ArrayList)kk0081b033_map.get("EKK0081B033CBSMsg1List");
		
		if (kk0081b033List == null) 
		{
			kk0081b033List = new ArrayList();
		}
		
		if (templateArray != null) 
		{
			for (int i = 0; i < templateArray.length; i++) 
			{
				CAANMsg childTemplate = templateArray[i];
				if (i >= kk0081b033List.size()) 
				{
					kk0081b033List.add(new HashMap());
				}
				HashMap childMap = (HashMap)kk0081b033List.get(i);
				
				// リクエストパラメータ.サービス契約一覧照会（電話番号）.サービス契約番号 ← サービス契約一覧照会（電話番号）.サービス契約番号
				if (childTemplate.isNull(EKK0081B033CBSMsg1List.SVC_KEI_NO))
				{
					childMap.put("svc_kei_no", null);
				}
				else
				{
					childMap.put("svc_kei_no", childTemplate.getString(EKK0081B033CBSMsg1List.SVC_KEI_NO));
				}
			}
		}
		kk0081b033_map.put("EKK0081B033CBSMsg1List", kk0081b033List);
		
        // エラー情報の設定
		IRequestParameterReadWrite err_param = null;
		err_param = editErrorInfoKK0081B033(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)err_param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		err_param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定*/
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if (!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
		return kk0081b033_map;
	}
	
	/**
	 * IRequestParameterReadWriteにエラー情報をマッピングする。<br>
	 * サービス契約一覧照会（電話番号）（エラー情報）<br>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoKK0081B033(IRequestParameterReadWrite param,
			CAANMsg[] templates, int returnCode, String fixedText) throws RequestParameterException
	{
		
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(EKK0081B033CBSMsg.STATUS);
		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);
		}
		
		HashMap inMap = null;
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null) 
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}
		// リクエストパラメータ.電話番号 → ＫＥＹ＿電話番号 のエラー情報返却
		if (!template.isNull(EKK0081B033CBSMsg.KEY_TELNO_ERR))
		{
			if (!inMap.containsKey("key_telno_err"))
			{
				inMap.put("key_telno_err", template.getString(EKK0081B033CBSMsg.KEY_TELNO_ERR));
			}
		}
		return param;
	}
	
	/**
	 * CAANMsgに必要なデータをマッピングします。<br>
	 * サービス契約内訳<eo光電話>一覧照会（サービス契約番号）（上り）<br>
	 * @param param (I) 業務データ取得用I/F
	 * @param inMap
	 * @param workMap
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> editInMsgKK0191B001(IRequestParameterReadOnly param,
			HashMap<String, Object> inMap, HashMap<String, Object> workMap) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// メッセージ共通部の設定
		setCommonParamMap(param, paramMap);

		CAANMsg template = new CAANMsg(EKK0191B001CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0191B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0191B001);

		// 機能コード
		// OT-2013-0000311 2013/03/25 MOD START
//		template.set(EKK0191B001CBSMsg.FUNC_CODE, FUNC_CD_01);
		template.set(EKK0191B001CBSMsg.FUNC_CODE, FUNC_CD_04);
		// OT-2013-0000311 2013/03/25 MOD END

		// サービスインターフェイス共通部の設定
		setCommonTemplate(param, template);
		
		// サービス契約番号の取り出し
		if (workMap == null || workMap.get("svc_kei_no") == null || "".equals(workMap.get("svc_kei_no")))
		{
			template.setNull(EKK0191B001CBSMsg.KEY_SVC_KEI_NO);
		}
		else
		{
			template.set(EKK0191B001CBSMsg.KEY_SVC_KEI_NO, workMap.get("svc_kei_no"));
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}
	
	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * サービス契約内訳<eo光電話>一覧照会（サービス契約番号）（下り）<br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRpKK0191B001(Map<?, ?> msgList,
			IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;
		
		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = null;

		/* 業務データ設定 */
		dataMap = (HashMap)param.getData(fixedText);
		if (dataMap == null) 
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}
		
		// サービス契約内訳<eo光電話>一覧照会（サービス契約番号）結果マップ
		HashMap kk0191b001_map = new HashMap();
		ArrayList kk0191b001List = null;
		
		templateArray = parentTemplate.getCAANMsgList(EKK0191B001CBSMsg.EKK0191B001CBSMSG1LIST);
		kk0191b001List = (ArrayList)kk0191b001_map.get("EKK0191B001CBSMsg1LIST");

		if (kk0191b001List == null) 
		{
			kk0191b001List = new ArrayList();
		}
		
		if (templateArray != null) 
		{
			for (int i = 0; i < templateArray.length; i++) 
			{
				CAANMsg childTemplate = templateArray[i];
				if (i >= kk0191b001List.size()) 
				{
					kk0191b001List.add(new HashMap());
				}
				HashMap childMap = (HashMap)kk0191b001List.get(i);
				
				// リクエストパラメータ.サービス契約内訳<eo光電話>一覧照会（サービス契約番号）.サービス契約内訳番号
				//     ← サービス契約内訳<eo光電話>一覧照会（サービス契約番号）.サービス契約内訳番号
				if (childTemplate.isNull(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO))
				{
					childMap.put("svc_kei_ucwk_no", null);
				}
				else
				{
					childMap.put("svc_kei_ucwk_no", childTemplate.getString(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO));
				}
				
				// リクエストパラメータ.サービス契約内訳<eo光電話>一覧照会（サービス契約番号）.電話番号
				//     ← サービス契約内訳<eo光電話>一覧照会（サービス契約番号）.電話番号
				if (childTemplate.isNull(EKK0191B001CBSMsg1List.TELNO))
				{
					childMap.put("telno", null);
				}
				else
				{
					childMap.put("telno", childTemplate.getString(EKK0191B001CBSMsg1List.TELNO));
				}
			}
		}
		kk0191b001_map.put("EKK0191B001CBSMsg1List", kk0191b001List);
		
        // エラー情報の設定
		IRequestParameterReadWrite err_param = null;
		err_param = editErrorInfoKK0191B001(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)err_param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		err_param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定*/
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if (!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
		return kk0191b001_map;
	}
	
	/**
	 * IRequestParameterReadWriteにエラー情報をマッピングする。<br>
	 * サービス契約内訳<eo光電話>一覧照会（サービス契約番号）（エラー情報）<br>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoKK0191B001(IRequestParameterReadWrite param,
			CAANMsg[] templates, int returnCode, String fixedText) throws RequestParameterException
	{
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(EKK0191B001CBSMsg.STATUS);
		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);
		}
		
		HashMap inMap = null;
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null) 
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}
		// リクエストパラメータ.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却
		if (!template.isNull(EKK0191B001CBSMsg.KEY_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("key_svc_key_no_err"))
			{
				inMap.put("key_svc_key_no_err", template.getString(EKK0191B001CBSMsg.KEY_SVC_KEI_NO_ERR));
			}
		}
		return param;
	}
	
	/**
	 * CAANMsgに必要なデータをマッピングします。<br>
	 * サービス契約内訳＜eo光電話＞一意照会（上り）<br>
	 * @param param (I) 業務データ取得用I/F
	 * @param inMap
	 * @param workMap
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> editInMsgKK0191A010(IRequestParameterReadOnly param, 
			HashMap<String, Object> inMap, HashMap<String, Object> workMap) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// メッセージ共通部の設定
		setCommonParamMap(param, paramMap);

		CAANMsg template = new CAANMsg(EKK0191A010CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0191A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0191A010);

		// 機能コード（1）
		template.set(EKK0191A010CBSMsg.FUNC_CODE, FUNC_CD_02);

		// サービスインターフェイス共通部の設定
		setCommonTemplate(param, template);
		
		// サービス契約内訳番号の取り出し
		if (workMap == null || workMap.get("svc_kei_ucwk_no") == null || "".equals(workMap.get("svc_kei_ucwk_no")))
		{
			template.setNull(EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO);
		}
		else
		{
			template.set(EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO, workMap.get("svc_kei_ucwk_no"));
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}
	
	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * サービス契約内訳＜eo光電話＞一意照会（下り）<br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRpKK0191A010(Map<?, ?> msgList,
			IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = null;

		/* 業務データ設定 */
		dataMap = (HashMap)param.getData(fixedText);
		if (dataMap == null) 
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}
		// サービス契約内訳＜eo光電話＞一意照会結果マップ
		HashMap kk0191a010_map = new HashMap();
		ArrayList kk0191a010List = null;
		
		templateArray = parentTemplate.getCAANMsgList(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);
		kk0191a010List = (ArrayList)kk0191a010_map.get("EKK0191A010CBSMsg1List");
		
		if (kk0191a010List == null) 
		{
			kk0191a010List = new ArrayList();
		}
		
		if (templateArray != null) 
		{
			for (int i = 0; i < templateArray.length; i++) 
			{
				CAANMsg childTemplate = templateArray[i];
				if (i >= kk0191a010List.size()) 
				{
					kk0191a010List.add(new HashMap());
				}
				HashMap childMap = (HashMap)kk0191a010List.get(i);
				
				// リクエストパラメータ.サービス契約内訳＜eo光電話＞一意照会.解約・休止トーキ開始年月日
				//     ← サービス契約内訳＜eo光電話＞一意照会.解約・休止トーキ開始年月日
				if (childTemplate.isNull(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_STA_YMD))
				{
					childMap.put("dsl_pause_toki_sta_ymd", null);
				}
				else
				{
					childMap.put("dsl_pause_toki_sta_ymd", childTemplate.getString(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_STA_YMD));
				}
				
				// リクエストパラメータ.サービス契約内訳＜eo光電話＞一意照会.解約・休止トーキ終了年月日
				//     ← サービス契約内訳＜eo光電話＞一意照会.解約・休止トーキ終了年月日
				if (childTemplate.isNull(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_END_YMD))
				{
					childMap.put("dsl_pause_toki_end_ymd", null);
				}
				else
				{
					childMap.put("dsl_pause_toki_end_ymd", childTemplate.getString(EKK0191A010CBSMsg1List.DSL_PAUSE_TOKI_END_YMD));
				}
				
				// リクエストパラメータ.サービス契約内訳＜eo光電話＞一意照会.移転先開通後トーキ開始年月日
				//     ← サービス契約内訳＜eo光電話＞一意照会.移転先開通後トーキ開始年月日
				if (childTemplate.isNull(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_STA_YMD))
				{
					childMap.put("itens_opaf_toki_sta_ymd", null);
				}
				else
				{
					childMap.put("itens_opaf_toki_sta_ymd", childTemplate.getString(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_STA_YMD));
				}
				
				// リクエストパラメータ.サービス契約内訳＜eo光電話＞一意照会.移転先開通後トーキ終了年月日
				//     ← サービス契約内訳＜eo光電話＞一意照会.移転先開通後トーキ終了年月日
				if (childTemplate.isNull(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_END_YMD))
				{
					childMap.put("itens_opaf_toki_end_ymd", null);
				}
				else
				{
					childMap.put("itens_opaf_toki_end_ymd", childTemplate.getString(EKK0191A010CBSMsg1List.ITENS_OPAF_TOKI_END_YMD));
				}
			}
		}
		kk0191a010_map.put("EKK0191A010CBSMsg1List", kk0191a010List);
		
        // エラー情報の設定
		IRequestParameterReadWrite err_param = null;
		err_param = editErrorInfoKK0191A010(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)err_param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		err_param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定*/
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if (!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
		return kk0191a010_map;
	}
	
	/**
	 * IRequestParameterReadWriteにエラー情報をマッピングする。<br>
	 * サービス契約内訳＜eo光電話＞一意照会（エラー情報）<br>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoKK0191A010(IRequestParameterReadWrite param,
			CAANMsg[] templates, int returnCode, String fixedText) throws RequestParameterException
	{
		
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(EKK0191A010CBSMsg.STATUS);
		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);
		}
		
		HashMap inMap = null;
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null) 
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}
		
		// リクエストパラメータ.サービス契約内訳番号 → ＫＥＹ＿サービス契約内訳番号 のエラー情報返却
		if (!template.isNull(EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO_ERR))
		{
			if (!inMap.containsKey("key_svc_kei_ucwk_no_err"))
			{
				inMap.put("key_svc_kei_ucwk_no_err", template.getString(EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO_ERR));
			}
		}
		return param;
	}
	
	/**
	 * ＳＣ呼出実行処理<br>
	 * <br>
	 * @param paramMap
	 * @param handle
	 * @return Map<?, ?>
	 * @throws RequestParameterException 
	 */
	private Map<?, ?> callDoSc(HashMap<String, Object> paramMap, SessionHandle handle) throws Exception
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker serviceIfCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = serviceIfCall.run(paramMap, handle);
		
		return result;
	}
	
	/**
	 * メッセージ共通部の設定。<br>
	 * <br>
	 * @param param (I) 業務データ取得用I/F
	 * @param paramMap (O) メッセージ共通部
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private void setCommonParamMap(IRequestParameterReadOnly param,
			HashMap<String, Object> paramMap) throws RequestParameterException
	{
		/* 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));
	}
	
	/**
	 * サービスインターフェイス共通部の設定。<br>
	 * <br>
	 * @param param (I) 業務データ取得用I/F
	 * @param template (O) サービスインターフェイス
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private void setCommonTemplate(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);
	}
	
	/**
	 * 値がnullまたは空白かを判定する<br>
	 * @param arg
	 * @return 値がnullまたは空白の場合true
	 */
	private boolean isNullorBlank(String arg)
	{
		if (arg == null || "".equals(arg))
		{
			return true;
		}
		return false;
	}
	
	/**
	 * 電話番号予約更新確認チェック処理<br>
	 * サービス契約一覧照会（電話番号）サービスインターフェイスを作成し返却します。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	public  HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws RequestParameterException
	{
		/* ユーザデータ情報 */
		HashMap inMap = null;
		inMap = (HashMap)param.getData("ChkTelNoRsvUpdCfmCC");
		
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		HashMap paramMap = editInMsgKK0081B033(param, inMap);
				
		return paramMap;
	}	
	
	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * @param param 業務データ取得・書込用I/F
	 * @param templates CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, 
			int returnCode) throws RequestParameterException
	{
		String fixedText = "ChkTelNoRsvUpdCfmCC";
		IRequestParameterReadWrite err_param = null;
		err_param = editErrorInfoKK0081B033(param, templates, returnCode, fixedText);
		
		return err_param;
	}
}