/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUNetChangeBaseCC
*   ソースファイル名：JFUNetChangeBaseCC.java
*   作成者          ：富士通
*   日付            ：2011年12月05日
*＜機能概要＞
*   ネット変更関連チェック基底コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/08/23   FJ）中谷    新規作成
*   v3.00.00    2012/03/15   FJ) 岡井    変更【ANK-0049-00-00】料金コース変更申込中チェック処理追加
*   v3.00.01    2012/03/28   FJ) 中谷    変更【ANK-0033-00-00】コース変更中のファミリーＰ申込受付
*   v4.00       2012/06/12   FJ）中谷    変更【ANK-0274-00-00】Web受付引越し受付
*   v4.00       2012/07/30   FJ）中谷    変更【ANK-0274-00-00】Web受付引越し受付 検索結果取得処理修正
*   v3.00.02    2012/09/20   FJ) 山名    変更【ST2-2012-0001695】コース変更中のファミリーＰ申込受付（機器配送チェック）
*   v5.00       2013/01/18   FJ）中谷    変更【ANK-1316-00-00】【R201105】ファミリーパック登録により異動対象のルーターが解約され、MN鳴動
*   v5.00       2013/01/25   FJ）中谷    変更【ANK-1387-00-00】工事なし機器のOPMS情報連携方式見直し
*   v5.00       2013/04/11   FJ）中谷    変更【IT1-2013-0000843】共通関連チェック(住所変更中チェック)対応
*   v5.00       2013/04/16   FJ）中谷    変更【ST3-2013-0000885】住所変更中のファミリーパック申込対応
*   v5.00       2013/04/26   FJ）中谷    変更【ST3-2013-0000885】住所変更中のファミリーパック申込対応
*   v5.00       2013/09/15   FJ）中谷    変更【ANK-1656-00-00】ファミリーパック申込の際、機器と同梱する対応
*   v5.00       2013/09/26   FJ）中谷    変更【OM-2013-0002507】プラン変更（工事無）で出荷済ルーターの返品受付対応
*   v7.00       2013/12/26   FJ）中谷    変更【IT2-2013-0000879】工事案件対象宅内機器の設定値の改修
*   v7.00       2014/02/21   FJ）中谷    変更【OM-2014-0000793】不要な工事会社配送データが作成される不具合の改修
*   v7.00       2014/02/21   FJ）中谷    変更【OM-2014-0000691】多機能ルーターの電話番号紐付け対応
*   v7.00       2014/03/18   FJ）中谷    変更【OM-2014-0000873】住変中のファミパ申込み対応
*   v8.00       2014/04/01   FJ）中谷    変更【OM-2014-0001340】住変確定後のプラン変更申込エラー対応
*   v8.00       2014/04/17   FJ）中谷    変更【OM-2014-0001521】工事案件対象宅内機器の機器変更番号未設定不具合対応
*   v8.00       2014/05/26   FJ）中谷    変更【OM-2014-0001954】電話オプション申込の住変中チェックの改修
*   v9.00       2014/07/06   FJ）中谷    変更【OM-2014-0002331】返品機器未登録不具合対応
*   v40.0.0     2018/12/14   FJ）中野    変更【ANK-3248-00-00】引越しNavi対応
**********************************************************************/
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.exception.RequestParameterException;
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.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.ECR0511B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161B505CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161B505CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0251B503CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251B503CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B506CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B506CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2091B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2091B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2101B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2101B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0011B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0141B020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0141B020CBSMsg1List;

/**
 * ネット変更関連チェック基底コモンコンポーネント部品
 * 
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public abstract class JFUBaseNetChgRelCheckCC extends JFUBaseCC
{

	/** BP項目(サービス契約番号) */
	protected static final String BP_SVC_KEI_NO = "key_svc_kei_no";

	/** IN項目:サービス契約番号 */
	private static final String IN_PARAM_KEY_SVC_KEI_NO = "key_svc_kei_no";
	/** IN項目:サービス契約回線内訳番号 */
	private static final String IN_PARAM_KEY_SVC_KEI_KAISEN_UCWK_NO = "key_svc_kei_kaisen_ucwk_no";
	/** IN項目:電話番号 */
	private static final String IN_PARAM_KEY_TELNO = "key_telno";

	/** OUT項目:機器提供サービス契約番号 */
	private static final String OUT_PARAM_KKTK_SVC_KEI_NO = "kktk_svc_kei_no";
	/** OUT項目:工事案件番号 */
	private static final String OUT_PARAM_KOJIAK_NO = "kojiak_no";
	/** OUT項目:OPMS連携済有無 */
	private static final String OUT_PARAM_OPMS_RNKI_ZM_UM = "opms_rnki_zm_um";
	/** OUT項目:工事案件対象宅内機器リスト */
	private static final String OUT_PARAM_KOJIAK_TK_LIST = "koji_ak_tk_list";
	/** OUT項目:宅内機器型式コード */
	private static final String OUT_PARAM_TAKNKIKI_MODEL_CD = "taknkiki_model_cd";
	/** OUT項目:機器製造番号 */
	private static final String OUT_PARAM_KIKI_SEIZO_NO = "kiki_seizo_no";
	/** OUT項目:返品機器作成要否 */
	private static final String OUT_PARAM_HMPIN_YOUHI = "hmpin_youhi";
	/** OUT項目:新設工事有無 */
	private static final String OUT_PARAM_SHINSETSU_KOJI_UM = "shinsetsu_koji_um";

	/** テンプレートID(住所変更中チェック) */
	private static final String TEMPLATE_ID_AD_CHG = "EKK1091B502";
	/** 関連チェックエラー項目(住所変更中チェック）) */
	private static final String ERROR_COLUMN_AD_CHG = "addr_chg_incomp_err";

	/* ===== 料金コース変更申込中チェック、住所変更中チェック ===== */
	/* ■□ 異動予約一覧照会SC ■□ */
	/** テンプレートID(異動予約一覧照会) */
	private static final String TEMPLATE_ID_3 = "EKK1681B001";
	/** テンプレートID(異動予約一覧照会明細) */
	private static final String TEMPLATE_ID_3_DETAIL = EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST;
	/** IN項目リスト(異動予約一覧照会) */
	private static final List<String> IN_COLUMN_LIST_3 =
			Arrays.asList(EKK1681B001CBSMsg.KEY_IDO_DIV, EKK1681B001CBSMsg.KEY_IDO_RSV_DTL_CD, EKK1681B001CBSMsg.KEY_RSV_APLY_YMD,
					EKK1681B001CBSMsg.KEY_IDO_RSV_STAT_CD, EKK1681B001CBSMsg.KEY_MSKM_DTL_NO, EKK1681B001CBSMsg.KEY_SYSID,
					EKK1681B001CBSMsg.KEY_SEIKY_KEI_NO, EKK1681B001CBSMsg.KEY_SVC_KEI_NO, EKK1681B001CBSMsg.KEY_SVC_KEI_UCWK_NO,
					EKK1681B001CBSMsg.KEY_OP_SVC_KEI_NO, EKK1681B001CBSMsg.KEY_SBOP_SVC_KEI_NO, EKK1681B001CBSMsg.KEY_KKTK_SVC_KEI_NO,
					EKK1681B001CBSMsg.KEY_WRIB_SVC_KEI_NO, EKK1681B001CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, EKK1681B001CBSMsg.KEY_HEIGO_SK_SYSID,
					EKK1681B001CBSMsg.KEY_BUNKATSU_SK_SYSID, EKK1681B001CBSMsg.KEY_HEIGO_SK_SEIKY_KEI_NO,
					EKK1681B001CBSMsg.KEY_BUNKATSU_SK_SEIKY_KEI_NO, EKK1681B001CBSMsg.KEY_KOJIAK_NO, EKK1681B001CBSMsg.KEY_OP_HKTGI_SK_SVC_KEI_NO,
					EKK1681B001CBSMsg.KEY_SORT_ITEM_NO, EKK1681B001CBSMsg.KEY_SORT_KBN);
	/** 関連チェックエラー項目(異動予約一覧照会) */
	private static final String ERROR_COLUMN_3 = "pcrs_chg_incomp_err";
	/** SC実行結果取得キー(異動予約一覧照会)(プラン変更中チェック) */
	private static final String TEMP_TEMPLATE_KEY_3 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_3 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ===== ルータ予約中チェック ===== */
	/* ■□ 機器提供サービス契約(予約件数)一覧照会SC ■□ */
	/** テンプレートID(機器提供サービス契約(予約件数)一覧照会) */
	private static final String TEMPLATE_ID_6 = "EKK0341B506";
	/** テンプレートID(機器提供サービス契約(予約件数)一覧照会明細) */
	private static final String TEMPLATE_ID_6_DETAIL = EKK0341B506CBSMsg.EKK0341B506CBSMSG1LIST;
	/** IN項目リスト(機器提供サービス契約(予約件数)一覧照会) */
	private static final List<String> IN_COLUMN_LIST_6 = Arrays.asList(EKK0341B506CBSMsg.KEY_SVC_KEI_NO, EKK0341B506CBSMsg.KEY_KKTK_SVC_CD);
	/** 関連チェックエラー項目(機器提供サービス契約(予約件数)一覧照会) */
	private static final String ERROR_COLUMN_6 = "router_rsv_err";
	/** SC実行結果取得キー(機器提供サービス契約(予約件数)一覧照会) */
	private static final String TEMP_TEMPLATE_KEY_6 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_6 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ===== 工事未完了チェック ===== */
	/* ■□ 工事案件一覧照会SC ■□ */
	/** テンプレートID(工事案件一覧照会) */
	private static final String TEMPLATE_ID_10 = "EKU0011B010";
	/** テンプレートID(工事案件一覧照会明細) */
	private static final String TEMPLATE_ID_10_DETAIL = EKU0011B010CBSMsg.EKU0011B010CBSMSG1LIST;
	/** IN項目リスト(工事案件一覧照会) */
	private static final List<String> IN_COLUMN_LIST_10 =
			Arrays.asList(EKU0011B010CBSMsg.KEY_KOJIAK_NO_SVC_KEI_NO, EKU0011B010CBSMsg.MAX_SEARCH_NUM, EKU0011B010CBSMsg.DISPLAY_NUM,
					EKU0011B010CBSMsg.DISPLAY_PAGE_NUM, EKU0011B010CBSMsg.SEARCH_TYPE, EKU0011B010CBSMsg.TOTAL_PAGE_NUM);
	/** 関連チェックエラー項目(工事案件一覧照会) */
	private static final String ERROR_COLUMN_10 = "kojiak_err";
	/** SC実行結果取得キー(工事案件一覧照会) */
	private static final String TEMP_TEMPLATE_KEY_10 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_10 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ===== 工事未完了チェック(ファミリーパック) ===== */
	/* ■□ 工事案件一意照会SC ■□ */
	/** テンプレートID(工事案件一意照会) */
	private static final String TEMPLATE_ID_11 = "EKU0011A010";
	/** テンプレートID(工事案件一意照会明細) */
	private static final String TEMPLATE_ID_11_DETAIL = EKU0011A010CBSMsg.EKU0011A010CBSMSG1LIST;
	/** IN項目リスト(工事案件一意照会) */
	private static final List<String> IN_COLUMN_LIST_11 = Arrays.asList(EKU0011A010CBSMsg.KEY_KOJIAK_NO);
	/** 関連チェックエラー項目(工事案件一意照会) */
	private static final String ERROR_COLUMN_11 = "kojiak_err";
	/** SC実行結果取得キー(工事案件一意照会) */
	private static final String TEMP_TEMPLATE_KEY_11 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_11 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ===== プラン変更収容替工事依頼の追加ルータ出荷指図済みチェック ===== */
	/* ■□ 工事案件対象宅内機器一覧照会２SC ■□ */
	/** テンプレートID(工事案件対象宅内機器一覧照会２) */
	private static final String TEMPLATE_ID_12 = "EKU0141B020";
	/** テンプレートID(工事案件対象宅内機器一覧照会２明細) */
	private static final String TEMPLATE_ID_12_DETAIL = EKU0141B020CBSMsg.EKU0141B020CBSMSG1LIST;
	/** IN項目リスト(工事案件対象宅内機器一覧照会２) */
	private static final List<String> IN_COLUMN_LIST_12 =
			Arrays.asList(EKU0141B020CBSMsg.KEY_KOJIAK_NO, EKU0141B020CBSMsg.MAX_SEARCH_NUM, EKU0141B020CBSMsg.DISPLAY_NUM,
					EKU0141B020CBSMsg.DISPLAY_PAGE_NUM, EKU0141B020CBSMsg.SEARCH_TYPE, EKU0141B020CBSMsg.TOTAL_PAGE_NUM);
	/** 関連チェックエラー項目(工事案件対象宅内機器一覧照会２) */
	private static final String ERROR_COLUMN_12 = EKU0141B020CBSMsg.KEY_KOJIAK_NO_ERR;
	/** SC実行結果取得キー(工事案件対象宅内機器一覧照会２) */
	private static final String TEMP_TEMPLATE_KEY_12 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_12 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ===== 住所変更中チェック ===== */
	/* ■□ 住所変更一覧照会SC ■□ */
	/** テンプレートID(住所変更一覧照会) */
	private static final String TEMPLATE_ID_20 = "EKK2091B001";
	/** テンプレートID(住所変更一覧照会明細) */
	private static final String TEMPLATE_ID_20_DETAIL = EKK2091B001CBSMsg.EKK2091B001CBSMSG1LIST;
	/** IN項目リスト(住所変更一覧照会) */
	private static final List<String> IN_COLUMN_LIST_20 =
			Arrays.asList(EKK2091B001CBSMsg.KEY_ADCHG_NO, EKK2091B001CBSMsg.KEY_ITENS_SVKEI_KISUW_NO, EKK2091B001CBSMsg.KEY_ITNM_SVKEI_KISUW_NO,
					EKK2091B001CBSMsg.KEY_MSKM_NO);
	/** 関連チェックエラー項目(住所変更一覧照会) */
	private static final String ERROR_COLUMN_20 = "addr_chg_incomp_err";
	/** SC実行結果取得キー(住所変更一覧照会) */
	private static final String TEMP_TEMPLATE_KEY_20 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_20 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ 現サービス契約回線内訳情報一覧照会SC ■□ */
	/** テンプレートID(現サービス契約回線内訳情報一覧照会) */
	private static final String TEMPLATE_ID_21 = "EKK0251B503";
	/** テンプレートID(現サービス契約回線内訳情報一覧照会) */
	private static final String TEMPLATE_ID_21_DETAIL = EKK0251B503CBSMsg.EKK0251B503CBSMSG1LIST;
	/** IN項目リスト(現サービス契約回線内訳情報一覧照会) */
	private static final List<String> IN_COLUMN_LIST_21 = Arrays.asList(EKK0251B503CBSMsg.KEY_SVC_KEI_NO);
	/** 関連チェックエラー項目(現サービス契約回線内訳情報一覧照会) */
	private static final String ERROR_COLUMN_21 = EKK0251B503CBSMsg.KEY_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(現サービス契約回線内訳情報一覧照会) */
	private static final String TEMP_TEMPLATE_KEY_21 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_21 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ 現サービス契約内訳情報一覧照会(電話)SC ■□ */
	/** テンプレートID(現サービス契約内訳情報一覧照会(電話)) */
	private static final String TEMPLATE_ID_22 = "EKK0161B505";
	/** テンプレートID(現サービス契約内訳情報一覧照会(電話)) */
	private static final String TEMPLATE_ID_22_DETAIL = EKK0161B505CBSMsg.EKK0161B505CBSMSG1LIST;
	/** IN項目リスト(現サービス契約内訳情報一覧照会(電話)) */
	private static final List<String> IN_COLUMN_LIST_22 = Arrays.asList(EKK0161B505CBSMsg.KEY_SVC_KEI_NO, EKK0161B505CBSMsg.KEY_TELNO);
	/** 関連チェックエラー項目(現サービス契約内訳情報一覧照会(電話)) */
	private static final String ERROR_COLUMN_22 = EKK0161B505CBSMsg.KEY_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(現サービス契約内訳情報一覧照会(電話)) */
	private static final String TEMP_TEMPLATE_KEY_22 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_22 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ 住所変更明細一覧照会SC ■□ */
	/** テンプレートID(住所変更明細一覧照会) */
	private static final String TEMPLATE_ID_23 = "EKK2101B001";
	/** テンプレートID(住所変更明細一覧照会) */
	private static final String TEMPLATE_ID_23_DETAIL = EKK2101B001CBSMsg.EKK2101B001CBSMSG1LIST;
	/** IN項目リスト(住所変更明細一覧照会) */
	private static final List<String> IN_COLUMN_LIST_23 =
			Arrays.asList(EKK2101B001CBSMsg.KEY_ADCHG_NO, EKK2101B001CBSMsg.KEY_ADCHG_DTL_NO, EKK2101B001CBSMsg.KEY_ADCHG_DTL_SBT_CD);
	/** 関連チェックエラー項目(住所変更明細一覧照会) */
	private static final String ERROR_COLUMN_23 = EKK2101B001CBSMsg.KEY_ADCHG_NO_ERR;
	/** SC実行結果取得キー(住所変更明細一覧照会) */
	private static final String TEMP_TEMPLATE_KEY_23 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_23 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ CASEファイル作成ワーク一覧照会SC ■□ */
	/** テンプレートID(CASEファイル作成ワーク一覧照会) */
	private static final String TEMPLATE_ID_ECR0511B010 = "ECR0511B010";
	/** テンプレートID(CASEファイル作成ワーク一覧照会) */
	private static final String TEMPLATE_ID_ECR0511B010_DETAIL = ECR0511B010CBSMsg.ECR0511B010CBSMSG1LIST;
	/** IN項目リスト(CASEファイル作成ワーク一覧照会) */
	private static final List<String> IN_COLUMN_LIST_ECR0511B010 =
			Arrays.asList(ECR0511B010CBSMsg.KEY_CSFL_SBT_CD, ECR0511B010CBSMsg.KEY_CSFL_SKSI_ZM_FLG, ECR0511B010CBSMsg.KEY_CSFL_SWK_NO, ECR0511B010CBSMsg.KEY_MSKMSHO_NO, ECR0511B010CBSMsg.KEY_SVC_KEI_NO);
	/** 関連チェックエラー項目(CASEファイル作成ワーク一覧照会) */
	private static final String ERROR_COLUMN_ECR0511B010 = ECR0511B010CBSMsg.KEY_CSFL_SBT_CD_ERR;
	/** SC実行結果取得キー(CASEファイル作成ワーク一覧照会) */
	private static final String TEMP_TEMPLATE_KEY_ECR0511B010 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_ECR0511B010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/**
	 * ルータ申し込み予約中チェック実行処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	protected void executeRouterRsvCheck(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap inMap = (HashMap)param.getData(fixedText);

		// サービス契約番号
		String inParamSvcKeiNo = (String)inMap.get(IN_PARAM_KEY_SVC_KEI_NO);

		// ●機器提供サービス契約(予約件数)一覧照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_COLUMN_LIST_6);
		// 上りマッピング
		setInMapKktkSvcRsvCntSearch(param, fixedText, inParamSvcKeiNo);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_6, TEMPLATE_ID_6_DETAIL, IN_COLUMN_LIST_6, ERROR_COLUMN_6);
		// ルーター予約中チェック
		if (Integer.parseInt((String)(getTemplateList((HashMap)param.getData(fixedText), getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_6),
				TEMPLATE_ID_6_DETAIL).get(0).get(EKK0341B506CBSMsg1List.CNT))) > 0)
		{
			// ルーター予約中エラー
			setRelationErrorInfo(param, TEMPLATE_ID_6, ERROR_COLUMN_6, fixedText);
			throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String.valueOf(RETURN_CODE_NORMAL),
					JPCModelConstant.RELATION_ERR);
		}
	}

	/**
	 * 料金コース変更申込中チェック処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws Exception
	 */
	protected void executePcrsChgIncompCheck(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ●異動予約一覧照会
		// 上りマッピング
		setInMapIdoRsvSearch(param, fixedText, (String)inMap.get(IN_PARAM_KEY_SVC_KEI_NO), JFUStrConst.CD00576_00009, JFUStrConst.CD01167_003);

		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_3, TEMPLATE_ID_3_DETAIL, IN_COLUMN_LIST_3, ERROR_COLUMN_3);
		List<HashMap> idoRsvListPcrs =
				getTemplateList((HashMap)param.getData(fixedText), getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_3), TEMPLATE_ID_3_DETAIL);

		for (HashMap idoRsvMap : idoRsvListPcrs)
		{
			String idoRsvStatCd = (String)idoRsvMap.get(EKK1681B001CBSMsg1List.IDO_RSV_STAT_CD);
			// 予約手続き中、または、未反映はエラー
			if (JFUStrConst.CD01168_00.equals(idoRsvStatCd) || JFUStrConst.CD01168_03.equals(idoRsvStatCd))
			{
				setRelationErrorInfo(param, TEMPLATE_ID_3, ERROR_COLUMN_3, fixedText);
				throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
						.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
			}
		}
	}

	/**
	 * 工事未完了チェック実行処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	protected void executeUnderConstructionCheck(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap inMap = (HashMap)param.getData(fixedText);

		// サービス契約番号
		String inParamSvcKeiNo = (String)inMap.get(IN_PARAM_KEY_SVC_KEI_NO);

		// ●工事案件一覧照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_COLUMN_LIST_10);
		// 検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// 上りマッピング
		setInMapKojiAkSearch(param, fixedText, inParamSvcKeiNo);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_10, TEMPLATE_ID_10_DETAIL, IN_COLUMN_LIST_10, ERROR_COLUMN_10);
		List<HashMap> kojiAkList = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_10), TEMPLATE_ID_10_DETAIL);

		for (HashMap kojiAkMap : kojiAkList)
		{
			// 工事案件ステータス
			String kojiakStat = (String)kojiAkMap.get(EKU0011B010CBSMsg1List.KOJIAK_STAT);

			// 工事案件種別コード
			String kojiakSbtCd = (String)kojiAkMap.get(EKU0011B010CBSMsg1List.KOJIAK_SBT_CD);

			// マンション工事案件状態コード
			String mansKojiakStatCd = (String)kojiAkMap.get(EKU0011B010CBSMsg1List.MANS_KOJIAK_STAT_CD);
			
			// マンションタイプがＶＤＳＬ又はイーサの場合
			if (!JKKStringUtil.isNullBlank(mansKojiakStatCd))
			{
				
				// 工事未完了、且つ、移設以外の場合
				if (!JFUStrConst.CD00474_110.equals(mansKojiakStatCd) && !JFUStrConst.CD00474_200.equals(mansKojiakStatCd)
						&& !JFUStrConst.CD00474_900.equals(mansKojiakStatCd) && !JFUStrConst.CD00577_007.equals(mansKojiakStatCd))
				{
					// 工事未完了エラー
					setRelationErrorInfo(param, TEMPLATE_ID_10, ERROR_COLUMN_10, fixedText);
					throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
							.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
				}
			}
			else
			{
			// 工事未完了、且つ、移設以外の場合
			if (!JFUStrConst.CD00474_110.equals(kojiakStat) && !JFUStrConst.CD00474_200.equals(kojiakStat)
					&& !JFUStrConst.CD00474_900.equals(kojiakStat) && !JFUStrConst.CD00577_007.equals(kojiakSbtCd))
			{
				// 工事未完了エラー
				setRelationErrorInfo(param, TEMPLATE_ID_10, ERROR_COLUMN_10, fixedText);
				throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
						.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
			}
			
			}
		}
	}

	/**
	 * 
	 * 工事未完了チェック実行処理(ネットコース変更)
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return nowJpAnkKojiFlg JP案件中フラグ「true：JP案件中、false：JP案件中でない」
	 * @throws Exception 例外
	 */
	protected boolean executeUnderConstructionCheckPlanChg(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap inMap = (HashMap)param.getData(fixedText);

		// サービス契約番号
		String inParamSvcKeiNo = (String)inMap.get(IN_PARAM_KEY_SVC_KEI_NO);

		// ●工事案件一覧照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_COLUMN_LIST_10);
		// 検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// 上りマッピング
		setInMapKojiAkSearch(param, fixedText, inParamSvcKeiNo);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_10, TEMPLATE_ID_10_DETAIL, IN_COLUMN_LIST_10, ERROR_COLUMN_10);
		List<HashMap> kojiAkList = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_10), TEMPLATE_ID_10_DETAIL);

		// 工事中フラグ「false:工事中なし」、「true:工事中」
		boolean nowKojiFlg = false;

		// JP案件工事中フラグ「false:JP案件工事中なし」、「true:JP案件工事中」
		boolean nowJpAnkKojiFlg = false;

		for (HashMap kojiAkMap : kojiAkList)
		{
			// 工事案件番号
			String kojiakNo = (String)kojiAkMap.get(EKU0011B010CBSMsg1List.KOJIAK_NO);

			// 工事案件ステータス
			String kojiakStat = (String)kojiAkMap.get(EKU0011B010CBSMsg1List.KOJIAK_STAT);

			// 工事案件種別コード
			String kojiakSbtCd = (String)kojiAkMap.get(EKU0011B010CBSMsg1List.KOJIAK_SBT_CD);

			if (!JFUStrConst.CD00474_110.equals(kojiakStat) && !JFUStrConst.CD00474_200.equals(kojiakStat)
					&& !JFUStrConst.CD00474_900.equals(kojiakStat) && !JFUStrConst.CD00577_007.equals(kojiakSbtCd))
			{
				// 工事未完了、且つ、移設以外が存在する場合

				// 工事中フラグを「true：工事中あり」を設定。
				nowKojiFlg = true;

				// 工事案件ステータスを数値変換。
				int kojiakStatInt = !JFUBPCommon.isNull(kojiakStat) && kojiakStat.matches("[0-9]+") ? Integer.parseInt(kojiakStat) : 200;

				if (JFUStrConst.CD00577_003.equals(kojiakSbtCd) && kojiakStatInt < 200)
				{
					// 工事案件種別コードが「003:住所変更(新設)」、工事案件ステータスが「200：工事完了」未満の場合

					// ●工事案件一意照会
					// ユーザデータ初期化
					initData(param, fixedText, IN_COLUMN_LIST_11);
					// 上りマッピング
					setInMapKojiAkUniqueSearch(param, fixedText, kojiakNo);
					// サービスIF実行
					executeSC(handle, param, fixedText, TEMPLATE_ID_11, TEMPLATE_ID_11_DETAIL, IN_COLUMN_LIST_11, ERROR_COLUMN_11);
					List<HashMap> kojiAkUniqueList =
							getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_11), TEMPLATE_ID_11_DETAIL);

					for (HashMap kojiAkUniqueMap : kojiAkUniqueList)
					{
						// 工事受付契機異動区分
						String kojiakIdoDiv = (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV);

						if (JFUStrConst.CD00576_00067.equals(kojiakIdoDiv))
						{
							// E-PON→GE-PON設備切替の場合
							// JP案件のコース変更収容工事中と判断。

							// ●CASEファイル作成ワーク一覧照会
							// ユーザデータ初期化
							initData(param, fixedText, IN_COLUMN_LIST_ECR0511B010);
							// 検索エラーなし設定
							ignoreSearchError(param, fixedText);

							// 上りマッピング
							setInMapCsflSwkSearch(param, fixedText, inParamSvcKeiNo, kojiakNo);

							// サービスIF実行
							executeSC(handle, param, fixedText, TEMPLATE_ID_ECR0511B010, TEMPLATE_ID_ECR0511B010_DETAIL, IN_COLUMN_LIST_ECR0511B010, ERROR_COLUMN_ECR0511B010);
							List<HashMap> csflSwkList = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_ECR0511B010), TEMPLATE_ID_ECR0511B010_DETAIL);

							if (csflSwkList == null || csflSwkList.size() == 0)
							{
								// JP案件のコース変更収容工事中のコース変更の2重申込みが存在しない場合

								// JP案件中で且つコース変更申込み受付可と判断。
								nowJpAnkKojiFlg = true;

								// 結果返却マップ
								HashMap resultMap = new HashMap();
								// 結果返却リスト
								ArrayList outList = new ArrayList();

								HashMap outMap = new HashMap();

								// 工事案件番号
								outMap.put(EKU0011A010CBSMsg1List.KOJIAK_NO , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_NO));
								// 工事案件ステータス
								outMap.put(EKU0011A010CBSMsg1List.KOJIAK_STAT , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_STAT));
								// 住所変更撤去工事案件番号
								outMap.put(EKU0011A010CBSMsg1List.AD_CHG_TEKKYO_KJAK_NO , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.AD_CHG_TEKKYO_KJAK_NO));
								// SYSID
								outMap.put(EKU0011A010CBSMsg1List.SYSID , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.SYSID));
								// 連携サービス契約番号
								outMap.put(EKU0011A010CBSMsg1List.RNKI_SVC_KEI_NO , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.RNKI_SVC_KEI_NO));
								// 請求契約番号
								outMap.put(EKU0011A010CBSMsg1List.SEIKY_KEI_NO , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.SEIKY_KEI_NO));
								// 工事案件種別コード
								outMap.put(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD));
								// 申込受付年月日
								outMap.put(EKU0011A010CBSMsg1List.MSKM_UK_YMD , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.MSKM_UK_YMD));
								// 場所番号
								outMap.put(EKU0011A010CBSMsg1List.PLACE_NO , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.PLACE_NO));
								// 転宅先住所コード
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_AD_CD , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_AD_CD));
								// 転宅先郵便番号
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_PCD , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_PCD));
								// 転宅先都道府県名
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_STATE_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_STATE_NM));
								// 転宅先市区町村名
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_CITY_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_CITY_NM));
								// 転宅先大字通称名
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_OAZTSU_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_OAZTSU_NM));
								// 転宅先字丁目名
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_AZCHO_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_AZCHO_NM));
								// 転宅先住所番地号
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_AD_BNCHIGO , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_AD_BNCHIGO));
								// 転宅先住所補記・建物名
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_ADRTTM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_ADRTTM));
								// 転宅先住所補記・部屋番号
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_ADRRM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_ADRRM));
								// お客様名
								outMap.put(EKU0011A010CBSMsg1List.CUST_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.CUST_NM));
								// お客様カナ名
								outMap.put(EKU0011A010CBSMsg1List.CUST_KANA , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.CUST_KANA));
								// お客様自宅電話番号
								outMap.put(EKU0011A010CBSMsg1List.CUST_HOME_TELNO , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.CUST_HOME_TELNO));
								// お客様携帯電話番号
								outMap.put(EKU0011A010CBSMsg1List.CUST_KTAI_TELNO , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.CUST_KTAI_TELNO));
								// お客様連絡先電話番号
								outMap.put(EKU0011A010CBSMsg1List.CUST_RRKS_TELNO , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.CUST_RRKS_TELNO));
								// 連絡先勤務先名
								outMap.put(EKU0011A010CBSMsg1List.RRKS_OFFC_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.RRKS_OFFC_NM));
								// 開通後電話利用希望有無
								outMap.put(EKU0011A010CBSMsg1List.OPEN_AF_TEL_USE_KIBO_UM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.OPEN_AF_TEL_USE_KIBO_UM));
								// 契約者住所コード
								outMap.put(EKU0011A010CBSMsg1List.KEISHA_AD_CD , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_AD_CD));
								// 契約者郵便番号
								outMap.put(EKU0011A010CBSMsg1List.KEISHA_PCD , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_PCD));
								// 契約者都道府県名
								outMap.put(EKU0011A010CBSMsg1List.KEISHA_STATE_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_STATE_NM));
								// 契約者市区町村名
								outMap.put(EKU0011A010CBSMsg1List.KEISHA_CITY_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_CITY_NM));
								// 契約者大字通称名
								outMap.put(EKU0011A010CBSMsg1List.KEISHA_OAZTSU_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_OAZTSU_NM));
								// 契約者字丁目名
								outMap.put(EKU0011A010CBSMsg1List.KEISHA_AZCHO_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_AZCHO_NM));
								// 契約者住所番地号
								outMap.put(EKU0011A010CBSMsg1List.KEISHA_AD_BNCHIGO , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_AD_BNCHIGO));
								// 契約者住所補記・建物名
								outMap.put(EKU0011A010CBSMsg1List.KEISHA_ADRTTM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_ADRTTM));
								// 契約者住所補記・部屋番号
								outMap.put(EKU0011A010CBSMsg1List.KEISHA_ADRRM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_ADRRM));
								// 転宅前住所コード
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_AD_CD , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_AD_CD));
								// 転宅前郵便番号
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_PCD , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_PCD));
								// 転宅前都道府県名
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_STATE_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_STATE_NM));
								// 転宅前市区町村名
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_CITY_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_CITY_NM));
								// 転宅前大字通称名
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_OAZTSU_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_OAZTSU_NM));
								// 転宅前字丁目名
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_AZCHO_NM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_AZCHO_NM));
								// 転宅前住所番地号
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_AD_BNCHIGO , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_AD_BNCHIGO));
								// 転宅前住所補記・建物名
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_ADRTTM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_ADRTTM));
								// 転宅前住所補記・部屋番号
								outMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_ADRRM , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_ADRRM));
								// 工事受付契機異動区分
								outMap.put(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV));
								// 工事案件連絡事項
								outMap.put(EKU0011A010CBSMsg1List.KOJIAK_RRK_JIKO , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_RRK_JIKO));
								// 工事案件備考1
								outMap.put(EKU0011A010CBSMsg1List.KOJIAK_BIKO_1 , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_BIKO_1));
								// 工事案件備考2
								outMap.put(EKU0011A010CBSMsg1List.KOJIAK_BIKO_2 , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_BIKO_2));
								// 工事案件実施年月日
								outMap.put(EKU0011A010CBSMsg1List.KOJIAK_JSSI_YMD , kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_JSSI_YMD));

								outList.add(outMap);

								// 最終結果をユーザデータに格納
								resultMap.put("JpAnkNtCrsChgInfo", outList);
								param.setData(fixedText, resultMap);

								break;
							}
						}
					}
				}
			}

			if (nowJpAnkKojiFlg)
			{
				// JP案件のコース変更収容工事中の場合
				break;
			}
		}

		if (!nowJpAnkKojiFlg && nowKojiFlg)
		{
			// JP案件のコース変更収容工事中ではなく、且つその他の起因で工事中の場合

			setRelationErrorInfo(param, TEMPLATE_ID_10, ERROR_COLUMN_10, fixedText);
			throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String.valueOf(RETURN_CODE_NORMAL),
					JPCModelConstant.RELATION_ERR);
		}
		return nowJpAnkKojiFlg;
	}

	/**
	 * 工事未完了チェック実行処理(ファミリーパック)
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	protected void executeUnderConstructionChkFp(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap inMap = (HashMap)param.getData(fixedText);

		// サービス契約番号
		String inParamSvcKeiNo = (String)inMap.get(IN_PARAM_KEY_SVC_KEI_NO);

		// ●工事案件一覧照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_COLUMN_LIST_10);
		// 検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// 上りマッピング
		setInMapKojiAkSearch(param, fixedText, inParamSvcKeiNo);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_10, TEMPLATE_ID_10_DETAIL, IN_COLUMN_LIST_10, ERROR_COLUMN_10);
		List<HashMap> kojiAkList = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_10), TEMPLATE_ID_10_DETAIL);

		for (HashMap kojiAkMap : kojiAkList)
		{
			// 工事案件ステータス
			String kojiakStat = (String)kojiAkMap.get(EKU0011B010CBSMsg1List.KOJIAK_STAT);
			// 工事案件種別コード
			String kojiakSbtCd = (String)kojiAkMap.get(EKU0011B010CBSMsg1List.KOJIAK_SBT_CD);
			// 工事案件番号
			String kojiakNo = (String)kojiAkMap.get(EKU0011B010CBSMsg1List.KOJIAK_NO);

			// 工事未完了 の場合
			if (JFUStrConst.CD00474_200.compareTo(kojiakStat) > 0)
			{
				// 新設、撤去／解約、住所変更／新設、住所変更／撤去、面開発の場合、プラン変更且つ受付済みまでのもの、
				if (JFUStrConst.CD00577_001.equals(kojiakSbtCd) || JFUStrConst.CD00577_002.equals(kojiakSbtCd)
						|| JFUStrConst.CD00577_003.equals(kojiakSbtCd) || JFUStrConst.CD00577_004.equals(kojiakSbtCd)
						|| JFUStrConst.CD00577_012.equals(kojiakSbtCd)
						|| (JFUStrConst.CD00577_009.equals(kojiakSbtCd) && (JFUStrConst.CD00474_140.compareTo(kojiakStat) <= 0)))
				{
					// ●工事案件一意照会
					// ユーザデータ初期化
					initData(param, fixedText, IN_COLUMN_LIST_11);
					// 上りマッピング
					setInMapKojiAkUniqueSearch(param, fixedText, kojiakNo);
					// サービスIF実行
					executeSC(handle, param, fixedText, TEMPLATE_ID_11, TEMPLATE_ID_11_DETAIL, IN_COLUMN_LIST_11, ERROR_COLUMN_11);
					List<HashMap> kojiAkUniqueList =
							getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_11), TEMPLATE_ID_11_DETAIL);

					for (HashMap kojiAkUniqueMap : kojiAkUniqueList)
					{
						// 工事案件完了年月日時分秒
						String kojiakFinDtm = (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_FIN_DTM);
						// 工事案件キャンセル年月日
						String kojiakCancelYmd = (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_CANCEL_YMD);
						// 工事案件中止受付年月日
						String kojiakStpUkYmd = (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_STP_UK_YMD);

						// 工事案件完了年月日時分秒 is Null、且つ、
						// 工事案件キャンセル年月日 is Null、且つ、工事案件中止受付年月日 is Nullの場合
						if (JFUBPCommon.isNull(kojiakFinDtm) && JFUBPCommon.isNull(kojiakCancelYmd) && JFUBPCommon.isNull(kojiakStpUkYmd))
						{
							// 工事未完了エラー
							setRelationErrorInfo(param, TEMPLATE_ID_10, ERROR_COLUMN_10, fixedText);
							throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
									.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
						}
					}
				}
			}
		}
	}

	/**
	 * 工事依頼の追加ルータ出荷指図済みチェック、および、工事会社配送データの取得処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param フロント／バック判定
	 * @throws Exception 例外
	 */
	protected void executeRouterDirectionsCheck(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, boolean isFront)
			throws Exception
	{
		HashMap inMap = (HashMap)param.getData(fixedText);

		// OUT：新設工事有無
		inMap.put(OUT_PARAM_SHINSETSU_KOJI_UM, JFUStrConst.CD00002_0);

		// サービス契約番号
		String inParamSvcKeiNo = (String)inMap.get(IN_PARAM_KEY_SVC_KEI_NO);

		// ●工事案件一覧照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_COLUMN_LIST_10);
		// 検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// 上りマッピング
		setInMapKojiAkSearch(param, fixedText, inParamSvcKeiNo);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_10, TEMPLATE_ID_10_DETAIL, IN_COLUMN_LIST_10, ERROR_COLUMN_10);
		List<HashMap> kojiAkList = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_10), TEMPLATE_ID_10_DETAIL);

		for (HashMap kojiAkMap : kojiAkList)
		{
			// 工事案件ステータス
			String kojiakStat = (String)kojiAkMap.get(EKU0011B010CBSMsg1List.KOJIAK_STAT);
			// 工事案件種別コード
			String kojiakSbtCd = (String)kojiAkMap.get(EKU0011B010CBSMsg1List.KOJIAK_SBT_CD);
			// 工事案件番号
			String kojiakNo = (String)kojiAkMap.get(EKU0011B010CBSMsg1List.KOJIAK_NO);

			// 完了、中止の工事案件は除外
			if (JFUStrConst.CD00474_200.equals(kojiakStat) || JFUStrConst.CD00474_900.equals(kojiakStat))
			{
				continue;
			}

			// 新設の場合
			if (JFUStrConst.CD00577_001.equals(kojiakSbtCd))
			{
				// OUT：新設工事有無
				inMap.put(OUT_PARAM_SHINSETSU_KOJI_UM, JFUStrConst.CD00002_1);
			}

			// プラン変更（収容替）、または、住変(新設)、または、新設(バックのみ)の場合
			if (JFUStrConst.CD00577_009.equals(kojiakSbtCd) || JFUStrConst.CD00577_003.equals(kojiakSbtCd)
					|| (!isFront && JFUStrConst.CD00577_001.equals(kojiakSbtCd)))
			{
				// ●工事案件一意照会
				// ユーザデータ初期化
				initData(param, fixedText, IN_COLUMN_LIST_11);
				// 上りマッピング
				setInMapKojiAkUniqueSearch(param, fixedText, kojiakNo);
				// サービスIF実行
				executeSC(handle, param, fixedText, TEMPLATE_ID_11, TEMPLATE_ID_11_DETAIL, IN_COLUMN_LIST_11, ERROR_COLUMN_11);
				// 配送作成済フラグ
				String haisoSakuseiZumiFlg =
						getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_11), TEMPLATE_ID_11_DETAIL,
								EKU0011A010CBSMsg1List.HAISO_SAKSEI_ZUMI_FLG, JFUStrConst.I_ZERO);

				// ｢仮鍵開発行依頼済｣以前の場合
				if (JFUStrConst.CD00474_180.compareTo(kojiakStat) >= 0)
				{
					// ｢宅内調査完了済｣以前、または、(｢宅内調査完了済｣以後、且つ、配送作成済フラグが｢0:配送未作成｣)の場合
					if (JFUStrConst.CD00474_150.compareTo(kojiakStat) >= 0
							|| (JFUStrConst.CD00474_150.compareTo(kojiakStat) < 0 && JFUStrConst.CD00002_0.equals(haisoSakuseiZumiFlg)))
					{
						// 住変(新設)以外の場合
						if (!JFUStrConst.CD00577_003.equals(kojiakSbtCd))
						{
							// OUT:OPMS連携済有無
							inMap.put(OUT_PARAM_OPMS_RNKI_ZM_UM, JFUStrConst.CD00002_0);
						}

						// 出荷指図前で新設工事の場合
						if (JFUStrConst.CD00577_001.equals(kojiakSbtCd))
						{
							// OUT:返品機器作成要否
							inMap.put(OUT_PARAM_HMPIN_YOUHI, JFUStrConst.CD00001_0);
						}

						// ●工事案件対象宅内機器一覧照会
						// ユーザデータ初期化
						initData(param, fixedText, IN_COLUMN_LIST_12);
						// 検索エラーなし設定
						ignoreSearchError(param, fixedText);
						// 上りマッピング
						setInMapKojiAkTkSearch(param, fixedText, kojiakNo);
						// サービスIF実行
						executeSC(handle, param, fixedText, TEMPLATE_ID_12, TEMPLATE_ID_12_DETAIL, IN_COLUMN_LIST_12, ERROR_COLUMN_12);
						List<HashMap> kojiAkTkList =
								getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_12), TEMPLATE_ID_12_DETAIL);

						List<HashMap> outKojiAktkList = new ArrayList();

						// ルーター、VA以外の機器
						for (HashMap kojiAkTkMap : kojiAkTkList)
						{
							// 宅内機器種別コード(工事)
							String taknkikiSbtCdKU = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.TAKNKIKI_SBT_CD);
							// 工事案件対象宅内機器ステータス
							String kojiakTrgtTaknkikiStat = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.KOJIAK_TRGT_TAKNKIKI_STAT);

							if (kojiakTrgtTaknkikiStat.equals(JFUStrConst.CD00475_110))
							{
								// ｢なし｣は対象外
								continue;
							}

							// ルーターの場合
							if (JFUStrConst.TKNI_KIKI_SBT_CD_F0.equals(taknkikiSbtCdKU))
							{
								continue;
							}
							// VAの場合
							else if (JFUStrConst.TKNI_KIKI_SBT_CD_50.equals(taknkikiSbtCdKU))
							{
								continue;
							}
							else
							{
								outKojiAktkList.add(kojiAkTkMap);
							}
						}

						// BBR
						for (HashMap kojiAkTkMap : kojiAkTkList)
						{
							// 工事案件対象宅内機器ステータス
							String kojiakTrgtTaknkikiStat = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.KOJIAK_TRGT_TAKNKIKI_STAT);

							if (kojiakTrgtTaknkikiStat.equals(JFUStrConst.CD00475_110))
							{
								// ｢なし｣は対象外
								continue;
							}

							// 宅内機器種別コード(工事)
							String taknkikiSbtCdKU = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.TAKNKIKI_SBT_CD);
							// 機器提供サービス契約番号
							String kktkSvcKeiNo = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.KKTK_SVC_KEI_NO);
							// 設置撤去フラグ
							String stcTekkyoFlg = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.STC_TEKKYO_FLG);
							// 予定宅内機器型式コード
							String taknkikiModelCd = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.RSV_TAKNKIKI_MODEL_CD);
							// 予定機器製造番号
							String kikiSeizoNo = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.RSV_KIKI_SEIZO_NO);
							
							// 設置ルーターの場合
							if (JFUStrConst.CD00772_1.equals(stcTekkyoFlg) && JFUStrConst.TKNI_KIKI_SBT_CD_F0.equals(taknkikiSbtCdKU))
							{
								// ●工事案件対象宅内機器情報を下りマッピング
								// OUT項目:機器提供サービス契約番号
								inMap.put(OUT_PARAM_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
								// OUT項目:宅内機器型式コード
								inMap.put(OUT_PARAM_TAKNKIKI_MODEL_CD, taknkikiModelCd);
								// OUT項目:機器製造番号
								inMap.put(OUT_PARAM_KIKI_SEIZO_NO, kikiSeizoNo);
								break;
							}
						}

						// OUT:項目工事案件番号
						inMap.put(OUT_PARAM_KOJIAK_NO, kojiakNo);
						inMap.put(OUT_PARAM_KOJIAK_TK_LIST, outKojiAktkList);
					}
					// 配送作成済フラグが｢1:配送作成済｣、の場合
					else
					{
						// フロント受付の場合
						if (isFront)
						{
							// ルーター出荷済エラー
							setRelationErrorInfo(param, TEMPLATE_ID_10, ERROR_COLUMN_10, fixedText);
							throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
									.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
						}
						else
						{
							// ●工事案件対象宅内機器一覧照会
							// ユーザデータ初期化
							initData(param, fixedText, IN_COLUMN_LIST_12);
							// 検索エラーなし設定
							ignoreSearchError(param, fixedText);
							// 上りマッピング
							setInMapKojiAkTkSearch(param, fixedText, kojiakNo);
							// サービスIF実行
							executeSC(handle, param, fixedText, TEMPLATE_ID_12, TEMPLATE_ID_12_DETAIL, IN_COLUMN_LIST_12, ERROR_COLUMN_12);
							List<HashMap> kojiAkTkList =
									getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_12), TEMPLATE_ID_12_DETAIL);

							// BBR
							for (HashMap kojiAkTkMap : kojiAkTkList)
							{
								// 工事案件対象宅内機器ステータス
								String kojiakTrgtTaknkikiStat = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.KOJIAK_TRGT_TAKNKIKI_STAT);

								if (kojiakTrgtTaknkikiStat.equals(JFUStrConst.CD00475_110))
								{
									// ｢なし｣は対象外
									continue;
								}

								// 宅内機器種別コード(工事)
								String taknkikiSbtCdKU = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.TAKNKIKI_SBT_CD);
								// 機器提供サービス契約番号
								String kktkSvcKeiNo = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.KKTK_SVC_KEI_NO);
								// 設置撤去フラグ
								String stcTekkyoFlg = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.STC_TEKKYO_FLG);
								// 予定宅内機器型式コード
								String taknkikiModelCd = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.RSV_TAKNKIKI_MODEL_CD);
								// 予定機器製造番号
								String kikiSeizoNo = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.RSV_KIKI_SEIZO_NO);
								
								// 設置ルーターの場合
								if (JFUStrConst.CD00772_1.equals(stcTekkyoFlg) && JFUStrConst.TKNI_KIKI_SBT_CD_F0.equals(taknkikiSbtCdKU))
								{
									// ●工事案件対象宅内機器情報を下りマッピング
									// OUT項目:機器提供サービス契約番号
									inMap.put(OUT_PARAM_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
									// OUT項目:宅内機器型式コード
									inMap.put(OUT_PARAM_TAKNKIKI_MODEL_CD, taknkikiModelCd);
									// OUT項目:機器製造番号
									inMap.put(OUT_PARAM_KIKI_SEIZO_NO, kikiSeizoNo);
								}
							}

							// 住変(新設)以外の場合
							if (!JFUStrConst.CD00577_003.equals(kojiakSbtCd))
							{
								// OUT:OPMS連携済有無
								inMap.put(OUT_PARAM_OPMS_RNKI_ZM_UM, JFUStrConst.CD00002_1);
							}

							break;
						}
					}
				}
				// ｢仮鍵開発行依頼済｣以後の場合
				else
				{
					// フロント受付の場合
					if (isFront)
					{
						// ルーター出荷済エラー
						setRelationErrorInfo(param, TEMPLATE_ID_10, ERROR_COLUMN_10, fixedText);
						throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
								.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
					}
					else
					{
						// ●工事案件対象宅内機器一覧照会
						// ユーザデータ初期化
						initData(param, fixedText, IN_COLUMN_LIST_12);
						// 検索エラーなし設定
						ignoreSearchError(param, fixedText);
						// 上りマッピング
						setInMapKojiAkTkSearch(param, fixedText, kojiakNo);
						// サービスIF実行
						executeSC(handle, param, fixedText, TEMPLATE_ID_12, TEMPLATE_ID_12_DETAIL, IN_COLUMN_LIST_12, ERROR_COLUMN_12);
						List<HashMap> kojiAkTkList =
								getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_12), TEMPLATE_ID_12_DETAIL);

						// BBR
						for (HashMap kojiAkTkMap : kojiAkTkList)
						{
							// 工事案件対象宅内機器ステータス
							String kojiakTrgtTaknkikiStat = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.KOJIAK_TRGT_TAKNKIKI_STAT);

							if (kojiakTrgtTaknkikiStat.equals(JFUStrConst.CD00475_110))
							{
								// ｢なし｣は対象外
								continue;
							}

							// 宅内機器種別コード(工事)
							String taknkikiSbtCdKU = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.TAKNKIKI_SBT_CD);
							// 機器提供サービス契約番号
							String kktkSvcKeiNo = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.KKTK_SVC_KEI_NO);
							// 設置撤去フラグ
							String stcTekkyoFlg = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.STC_TEKKYO_FLG);
							// 予定宅内機器型式コード
							String taknkikiModelCd = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.RSV_TAKNKIKI_MODEL_CD);
							// 予定機器製造番号
							String kikiSeizoNo = (String)kojiAkTkMap.get(EKU0141B020CBSMsg1List.RSV_KIKI_SEIZO_NO);
							
							// 設置ルーターの場合
							if (JFUStrConst.CD00772_1.equals(stcTekkyoFlg) && JFUStrConst.TKNI_KIKI_SBT_CD_F0.equals(taknkikiSbtCdKU))
							{
								// ●工事案件対象宅内機器情報を下りマッピング
								// OUT項目:機器提供サービス契約番号
								inMap.put(OUT_PARAM_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
								// OUT項目:宅内機器型式コード
								inMap.put(OUT_PARAM_TAKNKIKI_MODEL_CD, taknkikiModelCd);
								// OUT項目:機器製造番号
								inMap.put(OUT_PARAM_KIKI_SEIZO_NO, kikiSeizoNo);
								break;
							}
						}

						// 住変(新設)以外の場合
						if (!JFUStrConst.CD00577_003.equals(kojiakSbtCd))
						{
							// OUT:OPMS連携済有無
							inMap.put(OUT_PARAM_OPMS_RNKI_ZM_UM, JFUStrConst.CD00002_1);
						}
						break;
					}
				}
			}
		}
	}

	/**
	 * 住所変更中チェック
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws Exception 例外
	 */
	protected void executeAddrChgIncompCheck(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		if (JFUStrConst.CD00002_1.equals(getAdChgUmA(handle, param, fixedText)))
		{
			setRelationErrorInfo(param, TEMPLATE_ID_AD_CHG, ERROR_COLUMN_AD_CHG, fixedText);
			throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String.valueOf(RETURN_CODE_NORMAL),
					JPCModelConstant.RELATION_ERR);
		}
	}

	/**
	 * 住所変更有無取得A
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return 住所変更有無
	 * @throws Exception 例外
	 */
	protected String getAdChgUmA(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// 住所変更有無(移転元)
		if (JFUStrConst.CD00002_1.equals(getAdChgUm(handle, param, fixedText, true)))
		{
			return JFUStrConst.CD00002_1;
		}
		else
		{
			// 住所変更有無(移転先)
			return getAdChgUm(handle, param, fixedText, false);
		}

	}

	/**
	 * 住所変更有無取得B
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return 住所変更有無
	 * @throws Exception 例外
	 */
	protected String getAdChgUmB(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// 住所変更有無(移転元)
		if (JFUStrConst.CD00002_1.equals(getAdChgUm(handle, param, fixedText, true)))
		{
			return JFUStrConst.CD00002_1;
		}
		else
		{
			// 住所変更有無(移転先)
			return getAdChgUm(handle, param, fixedText, false);
		}
	}

	/**
	 * 住所変更有無取得C
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return 住所変更有無
	 * @throws Exception 例外
	 */
	protected String getAdChgUmC(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// 住所変更番号(移転元)
		String adChgNo = this.getAdChgNo(handle, param, fixedText, true);
		
		// 住所変更番号(移転先)
		if (JFUBPCommon.isNull(adChgNo)){
			adChgNo = this.getAdChgNo(handle, param, fixedText, false);
		}
		
		// 住所変更中
		if (!JFUBPCommon.isNull(adChgNo))
		{
			// ユーザデータ取得
			HashMap inMap = (HashMap)param.getData(fixedText);

			// IN項目:サービス契約番号
			String inParamSvcKeiNo = (String)inMap.get(IN_PARAM_KEY_SVC_KEI_NO);
			// IN項目:電話番号 
			String inParamTelNo = (String)inMap.get(IN_PARAM_KEY_TELNO);

			// ●現サービス契約内訳情報一覧照会(電話)
			// ユーザデータ初期化
			initData(param, fixedText, IN_COLUMN_LIST_22);
			// 検索エラーなし設定
			ignoreSearchError(param, fixedText);
			// 上りマッピング
			setInMapSvkeiUwEohTelSearch(param, fixedText, inParamSvcKeiNo, inParamTelNo);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_22, TEMPLATE_ID_22_DETAIL, IN_COLUMN_LIST_22, ERROR_COLUMN_22);

			String svcKeiUcwkNo = null;

			if (isExistsTemplateDetail(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_22), TEMPLATE_ID_22_DETAIL))
			{
				svcKeiUcwkNo =
						getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_22), TEMPLATE_ID_22_DETAIL,
								EKK0161B505CBSMsg1List.SVC_KEI_UCWK_NO, JFUStrConst.I_ZERO);
			}
			else
			{
				return JFUStrConst.CD00002_1;
			}

			// ●住所変更明細一覧照会
			// ユーザデータ初期化
			initData(param, fixedText, IN_COLUMN_LIST_23);
			// 上りマッピング
			setInMapAdChgDtlSearch(param, fixedText, adChgNo);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_23, TEMPLATE_ID_23_DETAIL, IN_COLUMN_LIST_23, ERROR_COLUMN_23);

			List<HashMap> adChgDtlList = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_23), TEMPLATE_ID_23_DETAIL);

			// 移転元サービス契約内訳番号判定
			boolean isItemSvcKeiUcwkNo = false;

			for (HashMap adChgMap : adChgDtlList)
			{
				String targetSvcKeiUcwkNo = (String)adChgMap.get(EKK2101B001CBSMsg1List.CHBF_SKBT_NO);

				if (svcKeiUcwkNo.equals(targetSvcKeiUcwkNo))
				{
					isItemSvcKeiUcwkNo = true;
					break;
				}
			}

			if (isItemSvcKeiUcwkNo)
			{
				return JFUStrConst.CD00002_0;
			}
			else
			{
				return JFUStrConst.CD00002_1;
			}

		}
		// 住所変更なし
		else
		{
			return JFUStrConst.CD00002_0;
		}
	}

	/**
	 * 住所変更有無取得D
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return 住所変更有無
	 * @throws Exception 例外
	 */
	protected String getAdChgUmD(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// 住所変更有無(移転元)
		if (JFUStrConst.CD00002_1.equals(getAdChgUm(handle, param, fixedText, true)))
		{
			return JFUStrConst.CD00002_1;
		}
		else
		{
			// 住所変更有無(移転先)
			return getAdChgUm(handle, param, fixedText, false);
		}
	}

	/**
	 * 住所変更有無取得
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiKaisenUcwkNo サービス契約回線内訳番号
	 * @param isItenm 移転元先判定 true:元 false:先
	 * @return 住所変更有無
	 * @throws Exception 例外
	 */
	private String getAdChgUm(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, boolean isItenm) throws Exception
	{
		// 住所変更番号
		String adChgNo = getAdChgNo(handle, param, fixedText, isItenm);

		if (JFUBPCommon.isNull(adChgNo))
		{
			return JFUStrConst.CD00002_0;
		}
		else
		{
			return JFUStrConst.CD00002_1;
		}
	}

	/**
	 * 住所変更番号取得
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiKaisenUcwkNo サービス契約回線内訳番号
	 * @param isItenm 移転元先判定 true:元 false:先
	 * @return 住所変更有無
	 * @throws Exception 例外
	 */
	private String getAdChgNo(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, boolean isItenm) throws Exception
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// IN項目:サービス契約回線内訳番号
		String inParamSvcKeiKaisenUcwkNo = (String)inMap.get(IN_PARAM_KEY_SVC_KEI_KAISEN_UCWK_NO);

		if (null == inParamSvcKeiKaisenUcwkNo)
		{
			// IN項目:サービス契約番号
			String inParamSvcKeiNo = (String)inMap.get(IN_PARAM_KEY_SVC_KEI_NO);

			// ●現サービス契約回線内訳情報一覧照会
			// ユーザデータ初期化
			initData(param, fixedText, IN_COLUMN_LIST_21);
			// 上りマッピング
			setInMapSvcKeiKaisenUcwkSearch(param, fixedText, inParamSvcKeiNo);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_21, TEMPLATE_ID_21_DETAIL, IN_COLUMN_LIST_21, ERROR_COLUMN_21);

			inParamSvcKeiKaisenUcwkNo =
					getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_21), TEMPLATE_ID_21_DETAIL,
							EKK0251B503CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO, JFUStrConst.I_ZERO);
		}

		// ●住所変更一覧照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_COLUMN_LIST_20);
		// 検索エラーなし
		ignoreSearchError(param, fixedText);
		// 上りマッピング
		setInMapAdChgItemSearch(param, fixedText, inParamSvcKeiKaisenUcwkNo, isItenm);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_20, TEMPLATE_ID_20_DETAIL, IN_COLUMN_LIST_20, ERROR_COLUMN_20);

		if (isExistsTemplateDetail(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_20), TEMPLATE_ID_20_DETAIL))
		{
			// 住所変更ステータス
			String adchgStat =
					getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_20), TEMPLATE_ID_20_DETAIL,
							EKK2091B001CBSMsg1List.ADCHG_STAT, JFUStrConst.I_ZERO);
			// 住所変更番号
			String adchgNo =
					getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_20), TEMPLATE_ID_20_DETAIL,
							EKK2091B001CBSMsg1List.ADCHG_NO, JFUStrConst.I_ZERO);

			// 完了済以外は住所変更有
			if (!JFUBPCommon.isNull(adchgStat) && !JFUStrConst.CD01240_003.equals(adchgStat))
			{
				return adchgNo;
			}
			else
			{
				return null;
			}
		}
		else
		{
			return null;
		}
	}

	/**
	 * 上りマッピング項目設定(現サービス契約回線内訳情報一覧照会)
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @throws RequestParameterException
	 */
	private void setInMapSvcKeiKaisenUcwkSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// 機能コード設定(1:チェック&登録)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		inMap.put(EKK0251B503CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
	}

	/**
	 * 上りマッピング項目設定(住所変更一覧照会)
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiKaisenUcwkNo サービス契約回線内訳番号
	 * @param isItem 移転元先判定 true:元 false:先
	 * @throws RequestParameterException
	 */
	private void setInMapAdChgItemSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiKaisenUcwkNo, boolean isItem)
			throws RequestParameterException
	{
		// 機能コード設定(1:チェック&登録)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 移転元判定
		if (isItem)
		{
			// ＫＥＹ＿移転元サービス契約回線内訳番号
			inMap.put(EKK2091B001CBSMsg.KEY_ITNM_SVKEI_KISUW_NO, svcKeiKaisenUcwkNo);
		}
		else
		{
			// ＫＥＹ＿移転先サービス契約回線内訳番号
			inMap.put(EKK2091B001CBSMsg.KEY_ITENS_SVKEI_KISUW_NO, svcKeiKaisenUcwkNo);
		}
	}

	/**
	 * 上りマッピング項目設定(機器提供サービス契約(予約件数)一覧照会)
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @throws RequestParameterException
	 */
	private void setInMapKktkSvcRsvCntSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0341B506CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		// ＫＥＹ＿機器提供サービスコード
		inMap.put(EKK0341B506CBSMsg.KEY_KKTK_SVC_CD, JFUStrConst.KK0771_KKTK_SVC_CD_C014);
	}

	/**
	 * 上りマッピング項目設定(工事案件一覧照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @throws RequestParameterException
	 */
	private void setInMapKojiAkSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// 機能コード設定(1:サービス契約番号)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿工事案件番号サービス契約番号
		inMap.put(EKU0011B010CBSMsg.KEY_KOJIAK_NO_SVC_KEI_NO, svcKeiNo);
		// 最大検索件数
		inMap.put(EKU0011B010CBSMsg.MAX_SEARCH_NUM, JFUStrConst.MAX_SEARCH_NUM);
		// 表示件数
		inMap.put(EKU0011B010CBSMsg.DISPLAY_NUM, JFUStrConst.MAX_SEARCH_NUM);
		// 表示ページ番号
		inMap.put(EKU0011B010CBSMsg.DISPLAY_PAGE_NUM, JFUStrConst.MAX_SEARCH_NUM);
		// 検索処理パターン
		inMap.put(EKU0011B010CBSMsg.SEARCH_TYPE, SEARCH_TYPE_IKT);
		// 総ページ数
		inMap.put(EKU0011B010CBSMsg.TOTAL_PAGE_NUM, JFUStrConst.MAX_SEARCH_NUM);

	}

	/**
	 * 上りマッピング項目設定(工事案件一意照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param kojiAkNo 工事案件番号
	 * @throws RequestParameterException
	 */
	private void setInMapKojiAkUniqueSearch(IRequestParameterReadWrite param, String fixedText, String kojiAkNo) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿工事案件番号
		inMap.put(EKU0011A010CBSMsg.KEY_KOJIAK_NO, kojiAkNo);

	}

	/**
	 * 上りマッピング項目設定(CASEファイル作成ワーク一覧照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @param kojiAkNo 工事案件番号
	 * @throws RequestParameterException
	 */
	private void setInMapCsflSwkSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo, String kojiAkNo) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿ＣＡＳＥファイル種別コード(001:コース変更申込)
		inMap.put(ECR0511B010CBSMsg.KEY_CSFL_SBT_CD, JFUStrConst.CD01688_001);
		// ＫＥＹ＿申込書番号(JP案件中のコース変更と工事案件番号は同じ)
		inMap.put(ECR0511B010CBSMsg.KEY_MSKMSHO_NO, kojiAkNo);
		// ＫＥＹ＿サービス契約番号
		inMap.put(ECR0511B010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
	}

	/**
	 * 上りマッピング項目設定(工事案件対象宅内機器一覧照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param kojiAkNo 工事案件番号
	 * @throws RequestParameterException
	 */
	private void setInMapKojiAkTkSearch(IRequestParameterReadWrite param, String fixedText, String kojiAkNo) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿工事案件番号
		inMap.put(EKU0141B020CBSMsg.KEY_KOJIAK_NO, kojiAkNo);
		// 最大検索件数
		inMap.put(EKU0141B020CBSMsg.MAX_SEARCH_NUM, JFUStrConst.MAX_SEARCH_NUM);
		// 表示件数
		inMap.put(EKU0141B020CBSMsg.DISPLAY_NUM, JFUStrConst.MAX_SEARCH_NUM);
		// 表示ページ番号
		inMap.put(EKU0141B020CBSMsg.DISPLAY_PAGE_NUM, JFUStrConst.MAX_SEARCH_NUM);
		// 検索処理パターン
		inMap.put(EKU0141B020CBSMsg.SEARCH_TYPE, SEARCH_TYPE_IKT);
		// 総ページ数
		inMap.put(EKU0141B020CBSMsg.TOTAL_PAGE_NUM, JFUStrConst.MAX_SEARCH_NUM);
	}

	/**
	 * 上りマッピング項目設定(異動予約一覧照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @param idoDiv 異動区分
	 * @param idoRsvDtlCd 異動予約詳細コード
	 * @throws RequestParameterException
	 */
	private void setInMapIdoRsvSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo, String idoDiv, String idoRsvDtlCd)
			throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK1681B001CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		// ＫＥＹ＿異動区分
		inMap.put(EKK1681B001CBSMsg.KEY_IDO_DIV, idoDiv);
		// ＫＥＹ＿異動予約詳細コード
		inMap.put(EKK1681B001CBSMsg.KEY_IDO_RSV_DTL_CD, idoRsvDtlCd);
	}

	/**
	 * 上りマッピング項目設定(現サービス契約内訳情報一覧照会(電話))
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @param telNo 電話番号 
	 * @throws RequestParameterException
	 */
	private void setInMapSvkeiUwEohTelSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo, String telNo)
			throws RequestParameterException
	{
		// 機能コード設定(2)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0161B505CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		// ＫＥＹ＿電話番号
		inMap.put(EKK0161B505CBSMsg.KEY_TELNO, telNo);
	}

	/**
	 * 上りマッピング項目設定(住所変更明細一覧照会)
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param adChgNo 住所変更番号
	 * @throws RequestParameterException
	 */
	private void setInMapAdChgDtlSearch(IRequestParameterReadWrite param, String fixedText, String adChgNo) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// ＫＥＹ＿住所変更番号
		inMap.put(EKK2101B001CBSMsg.KEY_ADCHG_NO, adChgNo);
		// ＫＥＹ＿住所変更明細種別コード
		inMap.put(EKK2101B001CBSMsg.KEY_ADCHG_DTL_SBT_CD, JFUStrConst.CD01241_02);
	}

	/**
	 * チェック処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@Override
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}
}
