/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUBmpTelNoAddChkCC
*   ソースファイル名：JFUBmpTelNoAddChkCC.java
*   作成者          ：富士通
*   日付            ：2012年08月08日
*＜機能概要＞
*   番ポ電話番号登録可否チェックコモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00	    2012/08/08   FJ）岡井    【ANK-0522-00-00】番ポ申込時の法人のNTT電話番号の確認対応
*   v6.00	    2013/11/14   FJ) 近藤    【ANK-1670-00-00】電話番号の再登録時のエイジングエラー、番ポ済みエラー対応
 *  v72.00      2024/05/08   FJ) 美濃原  【ANK-4494-00-00】【eo定期】双方向番ポ対応
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191B008CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191B008CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0121A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0121A010CBSMsg1List;

/**
 * 番ポ電話番号登録可否チェックコモンコンポーネント部品です。
 * 
 * <br>
 * @author 富士通
 */
public class JFUBmpTelNoAddChkCC extends JFUBaseCC
{
	// ■電話番号一意照会
	/** テンプレートID */
	private static final String TEMPLATE_ID_EZM0121A010 = "EZM0121A010";
	/** テンプレートID(明細) */
	private static final String TEMPLATE_ID_DTL_EZM0121A010 = EZM0121A010CBSMsg.EZM0121A010CBSMSG1LIST;
	/** IN項目リスト */
	private static final List<String> IN_COLUMN_LIST_EZM0121A010 = 
		Arrays.asList(EZM0121A010CBSMsg.FUNC_CODE, EZM0121A010CBSMsg.KEY_TELNO);
	/** 関連チェックエラー項目 */
	private static final String ERROR_COLUMN_EZM0121A010 = EZM0121A010CBSMsg.KEY_TELNO_ERR;

	// ANK-2464-00-00_番ポ廃止登録バッチ不具合に伴うフロント機能暫定改修対応 ADD START --
	// ■同番移転情報一覧照会
	/** テンプレートID */
	private static final String TEMPLATE_ID_EKK0191B008 = "EKK0191B008";
	/** テンプレートID(明細) */
	private static final String TEMPLATE_ID_DTL_EKK0191B008 = EKK0191B008CBSMsg.EKK0191B008CBSMSG1LIST;
	/** IN項目リスト */
	private static final List<String> IN_COLUMN_LIST_EKK0191B008 =
			Arrays.asList(EKK0191B008CBSMsg.FUNC_CODE, EKK0191B008CBSMsg.KEY_TELNO, EKK0191B008CBSMsg.KEY_SORT_ITEM_NO,
					EKK0191B008CBSMsg.KEY_SORT_KBN, EKK0191B008CBSMsg.MAX_SEARCH_NUM, EKK0191B008CBSMsg.DISPLAY_NUM,
					EKK0191B008CBSMsg.DISPLAY_PAGE_NUM, EKK0191B008CBSMsg.SEARCH_TYPE, EKK0191B008CBSMsg.TOTAL_PAGE_NUM);
	/** 関連チェックエラー項目 */
	private static final String ERROR_COLUMN_EKK0191B008 = EKK0191B008CBSMsg.KEY_TELNO_ERR;

	// ■サービス契約内訳一意照会
	/** テンプレートID */
	private static final String TEMPLATE_ID_EKK0161A010 = "EKK0161A010";
	/** テンプレートID(明細) */
	private static final String TEMPLATE_ID_DTL_EKK0161A010 = EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST;
	/** IN項目リスト */
	private static final List<String> IN_COLUMN_LIST_EKK0161A010 = 
		Arrays.asList(EKK0161A010CBSMsg.FUNC_CODE, EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, EKK0161A010CBSMsg.KEY_GENE_ADD_DTM);
	/** 関連チェックエラー項目 */
	private static final String ERROR_COLUMN_EKK0161A010 = EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO_ERR;
	// -- ANK-2464-00-00_番ポ廃止登録バッチ不具合に伴うフロント機能暫定改修対応 ADD END

// ANK-4494-00-00_【eo定期】双方向番ポ対応 MOD START
//	// ■番号ポータビリティー可能エリア一意照会
//	/** テンプレートID */
//	private static final String TEMPLATE_ID_ETU0071A010 = "ETU0071A010";
//	/** テンプレートID(明細) */
//	private static final String TEMPLATE_ID_DTL_ETU0071A010 = ETU0071A010CBSMsg.ETU0071A010CBSMSG1LIST;
//	/** IN項目リスト */
//	private static final List<String> IN_COLUMN_LIST_ETU0071A010 = 
//		Arrays.asList(ETU0071A010CBSMsg.FUNC_CODE, ETU0071A010CBSMsg.KEY_JUDGE_KYOKU_NO);
//	/** 関連チェックエラー項目 */
//	private static final String ERROR_COLUMN_ETU0071A010 = ETU0071A010CBSMsg.KEY_JUDGE_KYOKU_NO_ERR;
// ANK-4494-00-00_【eo定期】双方向番ポ対応 MOD END

//	// ■エイジング一覧照会(エイジング対象値)
//	/** テンプレートID */
//	private static final String TEMPLATE_ID_EZM0111B030 = "EZM0111B030";
//	/** テンプレートID(明細) */
//	private static final String TEMPLATE_ID_DTL_EZM0111B030 = EZM0111B030CBSMsg.EZM0111B030CBSMSG1LIST;
//	/** IN項目リスト */
//	private static final List<String> IN_COLUMN_LIST_EZM0111B030 = 
//		Arrays.asList(EZM0111B030CBSMsg.FUNC_CODE, EZM0111B030CBSMsg.KEY_AGING_SBT_CD, EZM0111B030CBSMsg.KEY_AGING_TG_VALUE);
//	/** 関連チェックエラー項目 */
//	private static final String ERROR_COLUMN_EZM0111B030 = EZM0111B030CBSMsg.KEY_AGING_TG_VALUE_ERR;

	// ■IN項目
	/** 電話番号リスト */
	private static final String TEL_NO_LIST = "tel_no_list";
	/** 電話番号 */
	private static final String TEL_NO = "tel_no";
	/** 機能コード */
	private static final String FUNC_CODE = "func_code";

	// ■OUT項目
	/** チェック結果リスト */
	private static final String CHK_RES_LIST = "chk_res_list";
	/** エラーコード */
	private static final String ERR_CODE = "err_code";
	/** 電話番号エラーメッセージ */
	private static final String TELNO_ERR_MSG = "telno_err_msg";
	/** エラーテンプレートID */
	private static final String ERR_TEMPLATE_ID = "err_template_id";
	/** エラー有無(全体) */
	private static final String ERR_UM = "err_um";
	/** エラーメッセージ */
	private static final String ERR_MSG = "err_msg";
	/** 電話番号マスタ存在フラグ */
	private static final String TELNO_MST_EXIST_FLG = "telno_mst_exist_flg";
	/** 電話番号マスタ存在フラグ（ＳＱＬ取得時の状態） */
	private static final String TELNO_MST_EXIST_FLG_INIT = "telno_mst_exist_flg_init";
	/** 個人法人電話番号帯コード（ＳＱＬ取得時の状態） */
	private static final String TELNO_MST_KOJIN_HOJIN_TLN_TAI_CD_INIT = "telno_mst_kojin_hojin_tln_tai_cd_init";

	// ■固定値
	/** エラーコード：0 */
	private static final String ERR_CODE_0 = "0";
	/** エラーコード：1 */
	private static final String ERR_CODE_1 = "1";
	/** エラー文言：エラー有り */
	private static final String ERR_ARI = "エラー有り";
	/** エラー文言：エラー無し */
	private static final String ERR_NASHI = "エラー無し";
	/** エラー文言：電話番号マスタ存在エラー */
	private static final String ERR_MSG_TELNO_MST = "電話番号マスタ存在エラー";
	/** エラー文言：電話番号マスタ存在エラー（自社発番） */
	private static final String ERR_MSG_TELNO_MST2 = "電話番号マスタ存在エラー（自社発番）";
//	/** エラー文言：番号ポータビリティー不可エリアエラー */
//	private static final String ERR_MSG_BMP_PSB_AREA = "番号ポータビリティー不可エリアエラー";
//	/** エラー文言：電話番号エイジング存在エラー */
//	private static final String ERR_MSG_TELNO_AGING = "電話番号エイジング存在エラー";
	/** 返却文言：チェック対象電話番号無し */
	private static final String MSG_NOT_CHECK = "チェック無し";
	/** 電話番号マスタ存在フラグ：0(存在なし) */
	private static final String TELNO_MST_EXIST_FLG_0 = "0";
	/** 電話番号マスタ存在フラグ：1(存在あり) */
	private static final String TELNO_MST_EXIST_FLG_1 = "1";
	/** ソート項目Ｎｏ：6(サービス契約内訳<eo光電話>.電話番号) */
	private static final String SORT_6_TELNO = "6";
	/** ソート区分：1(昇順) */
	private static final String SORT_ASC = "1";
	

//	// ■サービスID(条件分岐用)
//	/** FUSV0042：2番号申込み */
//	private static final String SC_NAME_FUSV0042 = "FUSV0042";

	/**
	 * 番ポ電話番号登録可否チェック処理です。
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception
	 */
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// 結果返却マップ
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		// ユーザデータ取得
		HashMap<?, ?> childMap = (HashMap<?, ?>)param.getData(fixedText);

		// ●IN項目チェック
		Boolean bool = chkInItems(childMap);

		// 電話番号が設定されている場合、チェック処理を行う
		if(bool)
		{
			// IN項目退避
			resultMap = setInParams(childMap, resultMap);

			// ●各種チェック処理
			resultMap = chkTelNo(handle, param, fixedText, resultMap);

			// 一度ユーザデータを削除し、再度設定する
			param.removeData(fixedText);
			param.setData(fixedText, resultMap);
		}

		// 電話番号が設定されていない場合、チェック処理を行わない
		else
		{
			// IN項目退避
			resultMap = setInParams(childMap, resultMap);

			resultMap.put(ERR_UM, ERR_CODE_0);
			resultMap.put(ERR_MSG, MSG_NOT_CHECK);

			// 一度ユーザデータを削除し、再度設定する
			param.removeData(fixedText);
			param.setData(fixedText, resultMap);
		}

		return param;
	}

	/**
	 * チェック処理です。
	 * <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;
	}

	/**
	 * IN項目チェックを行います。
	 * 
	 * <br>
	 * @param childMap ユーザデータ
	 * @return チェック結果
	 */
	@SuppressWarnings("unchecked")
	private Boolean chkInItems(HashMap childMap)
	{
		Boolean result = false;

		// リストの中身があるか判定
		ArrayList<HashMap<String, Object>> telNoList = (ArrayList)childMap.get(TEL_NO_LIST);
		result = telNoList != null && telNoList.size() > 0;

		if(result)
		{
			for (int i = 0; i < telNoList.size(); i++)
			{
				// マップの中身があるか判定
				HashMap telNoMap = telNoList.get(i);
				result = telNoMap != null && telNoMap.size() > 0;

				if(result)
				{
					// 値が設定されているか判定
					String telNo = (String)telNoMap.get(TEL_NO);
					result = telNo != null && telNo.length() > 0;
				}
			}
		}

		return result;
	}

	/**
	 * IN項目を返却マップに格納します。
	 * 
	 * <br>
	 * @param childMap ユーザデータ
	 * @param resultMap 結果格納マップ
	 * @return 結果格納マップ
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> setInParams(HashMap childMap, HashMap<String, Object> resultMap)
	{
		// 電話番号リスト
		resultMap.put(TEL_NO_LIST, (ArrayList)childMap.get(TEL_NO_LIST));
		// 機能コード
		resultMap.put(FUNC_CODE, (String)childMap.get(FUNC_CODE));

		return resultMap;
	}

	/**
	 * 電話番号の各種チェックを行います。
	 * 
	 * <br>
	 * @param handle ハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @param resultMap 結果格納マップ
	 * @return 結果格納マップ
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> chkTelNo(SessionHandle handle, IRequestParameterReadWrite param,
			String fixedText, HashMap<String, Object> resultMap) throws Exception
	{
		// 結果格納リスト
		ArrayList resultList = new ArrayList();

		// 電話番号リスト取得
		ArrayList telNoList = (ArrayList)resultMap.get(TEL_NO_LIST);
		// 機能コード取得
		String funcCd = (String)resultMap.get(FUNC_CODE);

		if(telNoList != null && telNoList.size() > 0)
		{
			for (int i = 0; i < telNoList.size(); i++)
			{
				HashMap telNoMap = (HashMap)telNoList.get(i);
				if(telNoMap != null && telNoMap.size() > 0 && telNoMap.containsKey(TEL_NO))
				{
					// 結果格納マップ
					HashMap telNoResMap = new HashMap();

					// 電話番号取得
					String telNo = (String)telNoMap.get(TEL_NO);
					// 返却マップに格納
					telNoResMap.put(TEL_NO, telNo);

					// ●電話番号マスタ存在チェック
					telNoResMap = chkTelNoMst(handle, param, fixedText, telNoResMap, telNo, funcCd);
					// ※chkTelNoMstの戻り時、telNoResMapの個人法人電話番号帯コード(KOJIN_HOJIN_TLN_TAI_CD)は下記の場合のみ残されている。
					//   ・「個人 かつ チェック対象の電話で有効な契約が既に存在している」
					//   ・ 電話番号マスタが存在する「法人」

					// 個人法人電話番号帯コード格納用変数
					String kojinHojinCd = JFUStrConst.EMPTY;

					// 該当する電話番号が存在する場合、個人法人電話番号帯コードを取得
					if(telNoResMap.containsKey(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD))
					{
						kojinHojinCd = ((String)telNoResMap.get(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD));

						// 個人法人電話番号帯コードが法人用以外の場合、次の繰り返し処理に移行する
						if(!JFUStrConst.CD00410_2.equals(kojinHojinCd))
						{
							// 結果格納マップを結果格納リストに追加
							resultList.add(telNoResMap);
							continue;
						}
					}

// ANK-4494-00-00_【eo定期】双方向番ポ対応 DEL START
//					// 電話番号マスタとエイジングに該当しない、または、電話番号マスタ該当して法人の場合、以下のチェックを行う
//					if(!ERR_CODE_1.equals((String)telNoResMap.get(ERR_CODE)))
//					{
//						// ●番号ポータビリティー可能エリアチェック
//						telNoResMap = chkBmpPsbArea(handle, param, fixedText, telNoResMap, telNo, funcCd);
//
//						// 可能エリアが存在しない場合、次の繰り返し処理に移行する
//						if(ERR_CODE_1.equals((String)telNoResMap.get(ERR_CODE)))
//						{
//							// 結果格納マップを結果格納リストに追加
//							resultList.add(telNoResMap);
//							continue;
//						}
//					}
// ANK-4494-00-00_【eo定期】双方向番ポ対応 DEL END
// ANK-4494-00-00_【eo定期】双方向番ポ対応 MOD START
					// 結果格納マップを結果格納リストに追加
					resultList.add(telNoResMap);
// ANK-4494-00-00_【eo定期】双方向番ポ対応 MOD END
				}
			}
		}

		// 返却マップに返却リストを格納
		resultMap.put(CHK_RES_LIST, resultList);

		// エラー有無(全体)の設定
		if(resultList != null && resultList.size() > 0)
		{
			for (int j = 0; j < resultList.size(); j++)
			{
				HashMap resMap = (HashMap)resultList.get(j);

				// エラーコード取得
				String errCd = (String)resMap.get(ERR_CODE);

				// エラーコードが「0」の場合
				if(ERR_CODE_0.equals(errCd))
				{
					// エラー無し
					resultMap.put(ERR_UM, ERR_CODE_0);
					resultMap.put(ERR_MSG, ERR_NASHI);
				}
				// エラーコードが「0」以外の場合
				else
				{
					// エラー有り
					resultMap.put(ERR_UM, ERR_CODE_1);
					resultMap.put(ERR_MSG, ERR_ARI);
					break;
				}
			}
		}

		return resultMap;
	}

	/**
	 * 電話番号マスタ存在チェックを行います。
	 * 
	 * <br>
	 * @param handle ハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @param telNoResMap 結果格納マップ
	 * @param telNo 電話番号
	 * @param funcCd 機能コード
	 * @return 結果格納マップ
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> chkTelNoMst(SessionHandle handle, IRequestParameterReadWrite param,
			String fixedText, HashMap telNoResMap, String telNo, String funcCd) throws Exception
	{
		// 上りマッピング
		setEZM0121A010SC(param, fixedText, telNo);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_EZM0121A010, TEMPLATE_ID_DTL_EZM0121A010, IN_COLUMN_LIST_EZM0121A010,
				ERROR_COLUMN_EZM0121A010);
		// 明細取得
		ArrayList eZM0121A010List = getDtlList((HashMap)param.getData(fixedText), TEMPLATE_ID_DTL_EZM0121A010);

		// ANK-2464-00-00_番ポ廃止登録バッチ不具合に伴うフロント機能暫定改修対応 ADD START --
		// 暫定対応で、電話番号マスタ存在フラグに「0：存在なし」をセットする。
		telNoResMap.put(TELNO_MST_EXIST_FLG, TELNO_MST_EXIST_FLG_0);
		telNoResMap.put(TELNO_MST_EXIST_FLG_INIT, TELNO_MST_EXIST_FLG_0);
		telNoResMap.put(TELNO_MST_KOJIN_HOJIN_TLN_TAI_CD_INIT, JFUStrConst.EMPTY);

		// -- ANK-2464-00-00_番ポ廃止登録バッチ不具合に伴うフロント機能暫定改修対応 ADD END

		if(eZM0121A010List != null && eZM0121A010List.size() > 0)
		{
			
			// ■電話番号マスタが存在する場合、以下の処理を行う
			for (int i = 0; i < eZM0121A010List.size(); i++)
			{
				// 明細マップ
				HashMap scMap = (HashMap)eZM0121A010List.get(i);
				// 個人法人電話番号帯コード
				String kjnHjnTelNoCd = (String)scMap.get(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD);
				// 個人法人電話番号帯コード名
				String kjnHjnTelNoCdNm = (String)scMap.get(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD_NM);
				// 電話番号取得通信事業者コード
				String tlnStkuTsjgsCd = (String)scMap.get(EZM0121A010CBSMsg1List.TLN_STKU_TSJGS_CD);

				// 返却マップに格納
				telNoResMap.put(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD, kjnHjnTelNoCd);
				telNoResMap.put(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD_NM, kjnHjnTelNoCdNm);
				// 移転先通信事業者コード
				String itnsTsjgsCd = (String)scMap.get(EZM0121A010CBSMsg1List.ITNS_TSJGS_CD);
				telNoResMap.put(TELNO_MST_EXIST_FLG_INIT, TELNO_MST_EXIST_FLG_1);
				telNoResMap.put(TELNO_MST_KOJIN_HOJIN_TLN_TAI_CD_INIT, kjnHjnTelNoCd);

				// ■個人法人電話番号帯コードチェック
				if(!JFUStrConst.CD00410_2.equals(kjnHjnTelNoCd))
				{
					// 個人法人電話番号帯コードが法人用以外の場合、エラーとする  補足）法人番号帯はeo顧客では管理しないため契約は存在しないはず。eo顧客：解約→claris:登録管理

					// ANK-2464-00-00_番ポ廃止登録バッチ不具合に伴うフロント機能暫定改修対応 ADD START --
					// 暫定対応の為コメントアウトする。 START --
//					// 機能コードが「2」の場合は、関連チェックエラーをスローする
//					if(JPCModelConstant.FUNC_CD_2.equals(funcCd))
//					{
//						setRelationErrorInfo(param, TEMPLATE_ID_EZM0121A010, ERROR_COLUMN_EZM0121A010, fixedText);
//						throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
//								.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
//					}
//
//					telNoResMap.put(ERR_CODE, ERR_CODE_1);
//					telNoResMap.put(TELNO_ERR_MSG, ERR_MSG_TELNO_MST);
//					telNoResMap.put(ERR_TEMPLATE_ID, TEMPLATE_ID_EZM0121A010);
					// 暫定対応の為コメントアウトする。 END --

// ANK-4494-00-00_【eo定期】双方向番ポ対応 MOD START
					// ■電話番号取得通信事業者コード＝オプテージ かつ 移転先通信事業者コード＝オプテージはエラー (※オプテージ発番の電話番号 かつ 移転先がオプテージ）
					if (JFUStrConst.TU0051_TSJGS_CD_5100.equals(tlnStkuTsjgsCd) && JFUStrConst.TU0051_TSJGS_CD_5100.equals(itnsTsjgsCd))
					{
						// 機能コードが「2」の場合は、関連チェックエラーをスローする
						if(JPCModelConstant.FUNC_CD_2.equals(funcCd))
						{
							setRelationErrorInfo(param, TEMPLATE_ID_EZM0121A010, ERROR_COLUMN_EZM0121A010, fixedText);
							throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
									.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
						}
						telNoResMap.put(ERR_CODE, ERR_CODE_1);
						telNoResMap.put(TELNO_ERR_MSG, ERR_MSG_TELNO_MST2);
						telNoResMap.put(ERR_TEMPLATE_ID, TEMPLATE_ID_EZM0121A010);
						telNoResMap.put(TELNO_MST_EXIST_FLG, TELNO_MST_EXIST_FLG_1);
					}
					else
					{
// ANK-4494-00-00_【eo定期】双方向番ポ対応 MOD END
	
						// 暫定対応の為、エラー無しとする。
						telNoResMap.put(ERR_CODE, ERR_CODE_0);
						// 暫定対応で、電話番号マスタ存在フラグに「1：存在あり」をセットする。
						telNoResMap.put(TELNO_MST_EXIST_FLG, TELNO_MST_EXIST_FLG_1);
	
						// EKK0191B008_同番移転情報一覧照会を行う（※メインは「サービス契約内訳<eo光電話>」）
						// 上りマッピング
						setEKK0191B008SC(param, fixedText, telNo);
						// サービスIF実行
						executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0191B008, TEMPLATE_ID_DTL_EKK0191B008, IN_COLUMN_LIST_EKK0191B008,
								ERROR_COLUMN_EKK0191B008);
						// 明細取得
						ArrayList eKK0191B008List = getDtlList((HashMap)param.getData(fixedText), TEMPLATE_ID_DTL_EKK0191B008);
	
						if(eKK0191B008List != null && eKK0191B008List.size() > 0)
						{
							for (int j = 0; j < eKK0191B008List.size(); j++)
							{
								// 明細マップ
								HashMap telMap = (HashMap)eKK0191B008List.get(j);
	
								// サービス契約内訳番号
								String svcKeiUcwkNo = (String)telMap.get(EKK0191B008CBSMsg1List.SVC_KEI_UCWK_NO);
								// 世代登録年月日時分秒
								String geneAddDtm = (String)telMap.get(EKK0191B008CBSMsg1List.GENE_ADD_DTM_KK0161);
	
								// 存在する場合、EKK0161A010_サービス契約内訳一意照会を行う。
								// 上りマッピング
								setEKK0161A010SC(param, fixedText, svcKeiUcwkNo, geneAddDtm);
								// サービスIF実行
								executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0161A010, TEMPLATE_ID_DTL_EKK0161A010, IN_COLUMN_LIST_EKK0161A010,
										ERROR_COLUMN_EKK0161A010);
								// 明細取得
								ArrayList eKK0161A010List = getDtlList((HashMap)param.getData(fixedText), TEMPLATE_ID_DTL_EKK0161A010);
	
								if(eKK0161A010List != null && eKK0161A010List.size() > 0)
								{
									// 存在する場合、サービス契約内訳ステータスを取得する
									// 明細マップ
									HashMap ucwkMap = (HashMap)eKK0161A010List.get(0);
	
									// サービス契約内訳ステータス
									String svcKeiUcwkStat = (String)ucwkMap.get(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT);
									if(!JFUStrConst.CD00037_910.equals(svcKeiUcwkStat) && !JFUStrConst.CD00037_920.equals(svcKeiUcwkStat))
									{
										// サービス契約内訳ステータスが「910、920」以外の場合、
										// サービス契約内訳にデータが存在するため、先ほどのエラーチェックを行う。
										// 機能コードが「2」の場合は、関連チェックエラーをスローする
										if(JPCModelConstant.FUNC_CD_2.equals(funcCd))
										{
											setRelationErrorInfo(param, TEMPLATE_ID_EZM0121A010, ERROR_COLUMN_EZM0121A010, fixedText);
											throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
													.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
										}
					
										telNoResMap.put(ERR_CODE, ERR_CODE_1);
										telNoResMap.put(TELNO_ERR_MSG, ERR_MSG_TELNO_MST);
										telNoResMap.put(ERR_TEMPLATE_ID, TEMPLATE_ID_EZM0121A010);
									}
									else{
										// 電話番号マスタに存在する、かつ内訳が解約／キャンセル済み(個人法人電話番号帯コード)を削除する
										telNoResMap.remove(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD);
									}
								}
								else{
									// 電話番号マスタに存在する、かつ内訳に存在しない場合項目(個人法人電話番号帯コード)を削除する
									telNoResMap.remove(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD);
									
								}
								
							
							}
						}
						else{
							// 電話番号マスタに存在する、かつ内訳に存在しない場合項目(個人法人電話番号帯コード)を削除する
							telNoResMap.remove(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD);
							
						}
						// -- ANK-2464-00-00_番ポ廃止登録バッチ不具合に伴うフロント機能暫定改修対応 ADD END
// ANK-4494-00-00_【eo定期】双方向番ポ対応 MOD START
					}
// ANK-4494-00-00_【eo定期】双方向番ポ対応 MOD END
				}
				else
				{
					// 法人用の場合、エラーとしない
					telNoResMap.put(ERR_CODE, ERR_CODE_0);
				}
			}

		}
		else if(telNoResMap.containsKey(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD))
		{
			// 該当しない場合、項目(個人法人電話番号帯コード)を削除する
			telNoResMap.remove(EZM0121A010CBSMsg1List.KOJIN_HOJIN_TLN_TAI_CD);
			// エラー無し
			telNoResMap.put(ERR_CODE, ERR_CODE_0);
		} else {
			// エラー無し
			telNoResMap.put(ERR_CODE, ERR_CODE_0);
		}

		return telNoResMap;
	}

// ANK-4494-00-00_【eo定期】双方向番ポ対応 DEL START
//	/**
//	 * 番号ポータビリティー可能エリアチェックを行います。
//	 * 
//	 * <br>
//	 * @param handle ハンドル
//	 * @param param リクエストパラメータ
//	 * @param fixedText 固定文字列
//	 * @param telNoResMap 結果格納マップ
//	 * @param telNo 電話番号
//	 * @param funcCd 機能コード
//	 * @return 結果格納マップ
//	 * @throws Exception 
//	 */
//	@SuppressWarnings("unchecked")
//	private HashMap<String, Object> chkBmpPsbArea(SessionHandle handle, IRequestParameterReadWrite param,
//			String fixedText, HashMap telNoResMap, String telNo, String funcCd) throws Exception
//	{
//		// 上りマッピング
//		setETU0071A010SC(param, fixedText, telNo);
//		// サービスIF実行
//		executeSC(handle, param, fixedText, TEMPLATE_ID_ETU0071A010, TEMPLATE_ID_DTL_ETU0071A010, IN_COLUMN_LIST_ETU0071A010,
//				ERROR_COLUMN_ETU0071A010);
//		// 明細取得
//		ArrayList eTU0071A010List = getDtlList((HashMap)param.getData(fixedText), TEMPLATE_ID_DTL_ETU0071A010);
//
//		if(eTU0071A010List != null && eTU0071A010List.size() > 0)
//		{
//			// 該当する番号がある場合、エラーとしない
//			telNoResMap.put(ERR_CODE, ERR_CODE_0);
//		}
//		else
//		{
//			// 該当する番号が無い場合、エラーとする
//
//			// 機能コードが「2」または「2番号のサービスID」で始まる場合は、関連チェックエラーをスローする
//			if(JPCModelConstant.FUNC_CD_2.equals(funcCd) || fixedText.startsWith(SC_NAME_FUSV0042))
//			{
//				setRelationErrorInfo(param, TEMPLATE_ID_ETU0071A010, ERROR_COLUMN_ETU0071A010, fixedText);
//				throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
//						.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
//			}
//
//			telNoResMap.put(ERR_CODE, ERR_CODE_1);
//			telNoResMap.put(TELNO_ERR_MSG, ERR_MSG_BMP_PSB_AREA);
//			telNoResMap.put(ERR_TEMPLATE_ID, TEMPLATE_ID_ETU0071A010);
//		}
//
//		return telNoResMap;
//	}
//  ANK-4494-00-00_【eo定期】双方向番ポ対応 DEL END

	/**
	 * 電話番号一意照会SCの上りマッピングです。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @param telNo 電話番号
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private void setEZM0121A010SC(IRequestParameterReadWrite param, String fixedText, String telNo) throws Exception
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// 機能コード
		inMap.put(EZM0121A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		// 電話番号
		inMap.put(EZM0121A010CBSMsg.KEY_TELNO, telNo);
		// 明細リスト
		inMap.put(EZM0121A010CBSMsg.EZM0121A010CBSMSG1LIST, null);
		// 検索エラーなし
		inMap.put(IGNORE_SEARCH_ERR, true);

		// 設定した値をリクエストパラメータに設定する
		param.setData(fixedText, inMap);
	}

	/**
	 * 同番移転情報一覧照会SCの上りマッピングです。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @param telNo 電話番号
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private void setEKK0191B008SC(IRequestParameterReadWrite param, String fixedText, String telNo) throws Exception
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// 機能コード
		inMap.put(EKK0191B008CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		// 電話番号
		inMap.put(EKK0191B008CBSMsg.KEY_TELNO, telNo);
		// ソート項目Ｎｏ
		inMap.put(EKK0191B008CBSMsg.KEY_SORT_ITEM_NO, SORT_6_TELNO);
		// ソート区分
		inMap.put(EKK0191B008CBSMsg.KEY_SORT_KBN, SORT_ASC);
		// 最大検索件数
		inMap.put(EKK0191B008CBSMsg.MAX_SEARCH_NUM, JFUStrConst.MAX_SEARCH_NUM);
		// 表示件数
		inMap.put(EKK0191B008CBSMsg.DISPLAY_NUM, JFUStrConst.MAX_SEARCH_NUM);
		// 表示ページ番号
		inMap.put(EKK0191B008CBSMsg.DISPLAY_PAGE_NUM, JFUStrConst.DISPLAY_PAGE_NUM);
		// 検索処理パターン
		inMap.put(EKK0191B008CBSMsg.SEARCH_TYPE, SEARCH_TYPE_IKT);
		// 総ページ数
		inMap.put(EKK0191B008CBSMsg.TOTAL_PAGE_NUM, JFUStrConst.MAX_SEARCH_NUM);
		// 明細リスト
		inMap.put(EKK0191B008CBSMsg.EKK0191B008CBSMSG1LIST, null);
		// 検索エラーなし
		inMap.put(IGNORE_SEARCH_ERR, true);

		// 設定した値をリクエストパラメータに設定する
		param.setData(fixedText, inMap);
	}

	/**
	 * 電話番号一意照会SCの上りマッピングです。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private void setEKK0161A010SC(IRequestParameterReadWrite param, String fixedText, String svcKeiUcwkNo, String geneAddDtm) throws Exception
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// 機能コード
		inMap.put(EKK0161A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// ＫＥＹ＿サービス契約内訳番号
		inMap.put(EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		// ＫＥＹ＿世代登録年月日時分秒
		inMap.put(EKK0161A010CBSMsg.KEY_GENE_ADD_DTM, geneAddDtm);
		// 明細リスト
		inMap.put(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST, null);
		// 検索エラーなし
		inMap.put(IGNORE_SEARCH_ERR, true);

		// 設定した値をリクエストパラメータに設定する
		param.setData(fixedText, inMap);
	}

// ANK-4494-00-00_【eo定期】双方向番ポ対応 DEL START
//	/**
//	 * 番号ポータビリティー可能エリア一意照会SCの上りマッピングです。
//	 * 
//	 * <br>
//	 * @param param リクエストパラメータ
//	 * @param fixedText 固定文字列
//	 * @param telNo 電話番号
//	 * @throws Exception 
//	 */
//	@SuppressWarnings("unchecked")
//	private void setETU0071A010SC(IRequestParameterReadWrite param, String fixedText, String telNo) throws Exception
//	{
//		// ユーザデータ取得
//		HashMap inMap = (HashMap)param.getData(fixedText);
//		// 機能コード
//		inMap.put(ETU0071A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
//		// 判定局番(市外局番＋市内局番＋加入者番号上１桁)
//		inMap.put(ETU0071A010CBSMsg.KEY_JUDGE_KYOKU_NO, getHntiKkban(telNo));
//		// 明細リスト
//		inMap.put(ETU0071A010CBSMsg.ETU0071A010CBSMSG1LIST, null);
//		// 検索エラーなし
//		inMap.put(IGNORE_SEARCH_ERR, true);
//
//		// 設定した値をリクエストパラメータに設定する
//		param.setData(fixedText, inMap);
//	}
//
//	/**
//	 * エイジング一覧照会(エイジング対象値)SCの上りマッピングです。
//	 * 
//	 * <br>
//	 * @param param リクエストパラメータ
//	 * @param fixedText 固定文字列
//	 * @param telNo 電話番号
//	 * @throws Exception 
//	 */
//	@SuppressWarnings("unchecked")
//	private void setEZM0111B030SC(IRequestParameterReadWrite param, String fixedText, String telNo) throws Exception
//	{
//		// ユーザデータ取得
//		HashMap inMap = (HashMap)param.getData(fixedText);
//		// 機能コード
//		inMap.put(EZM0111B030CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
//		// エイジング種別コード
//		inMap.put(EZM0111B030CBSMsg.KEY_AGING_SBT_CD, JFUStrConst.CD00412_001);
//		// エイジング対象値
//		inMap.put(EZM0111B030CBSMsg.KEY_AGING_TG_VALUE, telNo);
//		// 明細リスト
//		inMap.put(EZM0111B030CBSMsg.EZM0111B030CBSMSG1LIST, null);
//		// 検索エラーなし
//		inMap.put(IGNORE_SEARCH_ERR, true);
//
//		// 設定した値をリクエストパラメータに設定する
//		param.setData(fixedText, inMap);
//	}
//
//	/**
//	 * 判定局番(電話番号の左から7桁)を取得します。
//	 * 
//	 * <br>
//	 * @param telNo 電話番号
//	 * @return 判定局番
//	 */
//	private String getHntiKkban(String telNo)
//	{
//		return telNo.substring(0, 7);
//	}
// ANK-4494-00-00_【eo定期】双方向番ポ対応 DEL END

	/**
	 * 明細リストを返却します。
	 * <br>
	 * @param dataMap INマップ
	 * @param listNm リスト名
	 * @return 検索結果リスト
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<HashMap<?, ?>> getDtlList(HashMap dataMap, String listNm)
	{
		return (ArrayList<HashMap<?, ?>>)dataMap.get(listNm);
	}
}
