/*********************************************************************
*	All Rights reserved,Copyright K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKKktkSvcKeiDataUtil
*	ソースファイル名：JKKKktkSvcKeiDataUtil.java
*	作成者			：富士通
*	日付			：2011年10月18日
*＜機能概要＞
*	機器提供サービス契約登録データ取得部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/10/18	富士通		新規作成
*   v4.00.00    2012/07/13   FJ）谷口    【ANK-0398-00-00】住所管理に伴う「例外登録」の管理追加対応
*   v4.00.00    2012/09/13   FJ) 谷口    【ANK-0546-00-00】宅内ＰＦ
*   v4.00.00    2012/10/11   FJ) 渡邉    【ANK-1250-00-00】照査前の契約キャンセル・回復時の更新仕様について
*   v4.01.00    2012/10/31   FJ) 多田    【IT1-2012-0001640】住所手動入力対応
*   v4.02.00    2012/11/01   FJ) 渡邉    【IT1-2012-0001579】機器提供サービス契約の機器設置先区画整理中フラグにはNULLを設定する
*   v4.03.00    2012/11/01   FJ) 谷口    【ANK-1244-00-00】機器の料金コース追加等について
*   v4.04.00    2012/11/27   FJ) 渡邉    【IT1-2012-0001784】機器提供サービス契約の機器設置先名にはNULLを設定する
*   v4.05.00    2012/11/27   FJ) 渡邉    【IT1-2012-0001783】機器提供サービス契約の機器設置先カナ名にはNULLを設定する
*   v4.06.00    2012/12/03   FJ) 中山    【ST1-2012-0001029】宅内機器異動コードをB-CAS/C-CASに設定
*   v4.07.00    2012/12/05   FJ) 中山    【IT1-2012-0002234】申込更新時の宅内機器型式コードの変更処理を修正
*   v5.00.00    2013/01/21   FJ) 川島    【KAD-2012-0001108】書面での受付番号の申込イメージの紐付けについて
*   v5.01.00    2013/02/14   FJ) 薄出    【IT1-2013-0000294】照査前の機器送付先の更新処理について
*   v5.02.00    2013/02/18   FJ) 中山    【KT1-2013-0000162】新規登録の機器の機器付加情報コードを"000"からNULLに変更
*   v5.03.00    2013/03/06   FJ) 三浦    【ANK-1421-00-00】IP_STB
*   v5.04.00    2013/04/22   FJ) 中山    【TAI-2013-0000025】Findbugsの指摘修正
*   v5.05.00    2013/05/02   FJ) 北浦    【IT1-2013-0001100】ファミパ付加時のルータ機器送付先不備対応
*   v5.06.00    2013/10/19   FJ) 中山    【OM-2013-0003395】機器提供サービス契約の住所未確定フラグの修正
*   v6.00.00    2013/09/30   FJ) 北浦    【ANK-1583-00-00】 STB提供メニュー拡充(機器追加・価格改定)
*   v6.01.00    2013/11/14   FJ) 北浦    【IT2-2013-0000775】HDD容量コード、宅内機器型式コード対応
*   v7.00.00    2013/11/06   FJ) 高橋    【ANK-1578-00-00】多機能ルーター（機器追加）
*   v8.00.00    2014/01/09   FJ）北浦    【ANK-1796-00-00】STB提供メニュー拡充(機器追加・価格改定)A
*  v18.00.00    2015/08/11   FJ) 松本    【ANK-2631-00-00】ワンストップ案件（ＳＴＥＰ１）※koptWebBからkoptWebAへコピー
*   v25.00.00   2016/03/25   FJ) 山岡    【ANK-2530-00-00】TV新コースおよびVOD導入
**********************************************************************/

package eo.web.webview.commonOneStop;

import static eo.web.webview.commonOneStop.JKKKeiNewCmnLogicUtil.*;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JKKStrConst;

/**
 * 機器提供サービス契約登録データ取得部品<p>
 * <BR>
 * @author 富士通
 */
public class JKKKktkSvcKeiDataUtil
{

	/** 処理制御コード(機器提供サービス契約情報変更)：更新なし */
	private static final String TRAN_CTL_CD_UPD_NON = "0";
	/** 処理制御コード(機器提供サービス契約情報変更)：通常更新 */
	private static final String TRAN_CTL_CD_UPD = "1";
	/** 処理制御コード(機器提供サービス契約情報変更)：機器設置先、機器送付先更新 */
	private static final String TRAN_CTL_CD_KIKI_UPD = "2";
	/** 処理制御コード(機器提供サービス契約情報変更)：機器送付先以外更新 */
	private static final String TRAN_CTL_CD_KIKI_GAI_UPD = "3";
	/** 処理制御コード(機器提供サービス契約情報変更)：型式更新 */
	private static final String TRAN_CTL_CD_MODEL_UPD = "4";
	/** 処理制御コード(機器提供サービス契約情報変更)：リンクSTB更新 */
	private static final String TRAN_CTL_CD_LINK_STB_UPD = "5";

	/** 処理制御コード(照査前ファミリーパック用)：機器送付先変更 */
	private static final String TRAN_CTL_CD_FP_KIKISHS_CHG = "1";
	/** 処理制御コード(照査前ファミリーパック用)：機器送付先無変更 */
	private static final String TRAN_CTL_CD_FP_KIKISHS_CHG_NON = "2";

	/**
	 * 機器提供サービス契約登録初期データ取得処理。
	 * <br>
	 * 機器提供サービス契約登録の初期データ取得処理です。
	 * @param bean          DataBean
	 * @param outputMap     データ出力先マップ
	 * @param kktkSvcCd     機器提供サービスコード
	 * @param pcrsCd        料金コースコード
	 * @param pplanCd       料金プランコード
	 * @param prefix        マップのキー名称のプレフィックス
	 * @param mansionMap    マンション情報マップ
	 * @param searchinfoMap 照査前照会情報マップ
	 * @param addPrgMap     進捗登録マップ
	 * @return              出力データ格納マップ
	 * @throws Exception Exception
	 */
	@SuppressWarnings("unchecked")
	public static HashMap getKktkSvcKeiIniData(
			X31SDataBeanAccess bean,
			HashMap outputMap,
			String kktkSvcCd,
			String pcrsCd,
			String pplanCd,
			String prefix,
			HashMap mansionMap,
			HashMap searchinfoMap,
			HashMap addPrgMap) throws Exception
	{
		String pfix = "";
		if (prefix != null)
		{
			pfix = prefix;
		}

		HashMap paramMansionMap = new HashMap();
		if (mansionMap != null)
		{
			paramMansionMap = mansionMap;
		}

		// 機器提供サービスコード
		outputMap.put(pfix + "kktk_svc_cd", kktkSvcCd);
		// 料金コースコード
		outputMap.put(pfix + "pcrs_cd", pcrsCd);
		// 料金プランコード
		outputMap.put(pfix + "pplan_cd", pplanCd);

		if (JKKStrConst.CD00132_MODEM.equals(kktkSvcCd)) // モデム機器(VDSL)
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_MODEM);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", getKktkSbtCd(pplanCd));
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_SVKEI_KAISEN_UW);
			// 宅内機器型式コード
			outputMap.put(pfix + "taknkiki_model_cd",
					JKKWebCommon.getPullDownName(bean, "機器リスト", "機器コード", "機器コードリスト", "機器名リスト"));
		}
		else if (JKKStrConst.KKTK_SVC_CD_STB.equals(kktkSvcCd)) // STB
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_STB);
			// 宅内機器異動コード
			outputMap.put(pfix + "taknkiki_ido_cd", TAKNKIKI_IDO_CD_STB_ADD);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_RENTAL);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_CD_SVC_KEI_UCWK);

			if (JKKStrConst.CD00134_STB_HDD_NON.equals(pcrsCd))
			{
				// HDD容量コード
				outputMap.put(pfix + "hdd_capa_cd", KKTK_HDD_CAPA_CD_HDD_NON);
			}
			else if (JKKStrConst.CD00134_STB_1000G_BD.equals(pcrsCd))
			{
				// HDD容量コード
				outputMap.put(pfix + "hdd_capa_cd", KKTK_HDD_CAPA_CD_1000GB_BD);
			}
			else if (JKKStrConst.CD00134_STB_500G_HDD.equals(pcrsCd))
			{
				// HDD容量コード
				outputMap.put(pfix + "hdd_capa_cd", KKTK_HDD_CAPA_CD_500GB_HDD);
			}
			//*--<< 20160325 ANK-2530-00-00 ADD START >>--*//
			//(新)録画機能なし 
			else if (JKKStrConst.CD00134_STB_HDD_NON_NEW.equals(pcrsCd))
			{
				//HDD容量コード
				outputMap.put(pfix + "hdd_capa_cd", KKTK_HDD_CAPA_CD_HDD_NON_NEW);
			}
			//HDD容量コード 500GB(HDD) 
			else if (JKKStrConst.CD00134_STB_500G_HDD_NEW.equals(pcrsCd))
			{
				//HDD容量コード
				outputMap.put(pfix + "hdd_capa_cd", KKTK_HDD_CAPA_CD_500GB_HDD_NEW);
			}
			//録画機能付　ＨＤＤ容量２ＴＢ
			else if (JKKStrConst.CD00134_STB_2TB_HDD.equals(pcrsCd))
			{
				//HDD容量コード
				outputMap.put(pfix + "hdd_capa_cd", KKTK_HDD_CAPA_CD_2TB_HDD);
			}
			//*--<< 20160325 ANK-2530-00-00 ADD  END  >>--*//
		}
		else if (JKKStrConst.KKTK_SVC_CD_B_CAS.equals(kktkSvcCd)) // B-CAS
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_B_CAS);
			// 宅内機器異動コード
			outputMap.put(pfix + "taknkiki_ido_cd", TAKNKIKI_IDO_CD_STB_ADD);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_RENTAL);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_CD_SVC_KEI_UCWK);
		}
		else if (JKKStrConst.KKTK_SVC_CD_C_CAS.equals(kktkSvcCd)) // C-CAS
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_C_CAS);
			// 宅内機器異動コード
			outputMap.put(pfix + "taknkiki_ido_cd", TAKNKIKI_IDO_CD_STB_ADD);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_RENTAL);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_CD_SVC_KEI_UCWK);
		}
		else if (JKKStrConst.CD00132_ONU.equals(kktkSvcCd)) // ONU
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_ONU);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_RENTAL);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_SVKEI_KAISEN_UW);
		}
		else if (JKKStrConst.CD00132_VONU.equals(kktkSvcCd)) // V-ONU
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_VONU);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_RENTAL);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_SVKEI_KAISEN_UW);
		}
		else if (JKKStrConst.CD00132_PLC.equals(kktkSvcCd)) // PLCモデム機器
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_PLC);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_RENTAL);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_CD_SVC_KEI);
		}
		else if (JKKStrConst.KKTK_SVC_CD_IP_STB.equals(kktkSvcCd)) // スティックSTB機器
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_IP_STB);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_RENTAL);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_CD_SVC_KEI);
		}
		else if (KKTK_SVC_CD_EM.equals(kktkSvcCd)) // イー・モバイル機器
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_EM);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_KAITORI);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_CD_SVC_KEI);
		}
		else if (KKTK_SVC_CD_UQ.equals(kktkSvcCd)) // UQ機器
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_UQ);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_KAITORI);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_CD_SVC_KEI);
		}
		else if (KKTK_SVC_CD_EM_CRADLE.equals(kktkSvcCd)) // クレイドル
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_CRADLE);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_KAITORI);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_CD_SVC_KEI);
		}
		else if (JKKStrConst.KKTK_SVC_CD_TABLET.equals(kktkSvcCd)) // タプレット
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_TABLET);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_KAITORI);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_CD_SVC_KEI);
			// 宅内機器型式コード
			outputMap.put(pfix + "taknkiki_model_cd",
				JKKWebCommon.getPullDownCode(bean, "タブレット＿端末名リスト",
						"タブレット端末選択コード", "タブレット機器型式コードリスト"));
		}
		else if (JKKStrConst.KKTK_SVC_CD_TABLET_CRADLE.equals(kktkSvcCd)) // タプレット用クレードル
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", TAKNKIKI_SBT_CD_TABLET_CRADLE);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_KAITORI);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_CD_SVC_KEI);
			// 宅内機器型式コード
			outputMap.put(pfix + "taknkiki_model_cd",
				JKKWebCommon.getPullDownCode(bean, "タブレット＿端末名リスト",
						"タブレット端末選択コード", "クレードル機器型式コードリスト"));
		}
		else if (JKKStrConst.KKTK_SVC_CD_TAKINORT.equals(kktkSvcCd)) // ｅｏ光多機能ルーター
		{
			// 宅内機器種別コード
			outputMap.put(pfix + "taknkiki_sbt_cd", JKKStrConst.TAKNKIKI_SBT_CD_TAKINORT);
			// 機器提供種別コード
			outputMap.put(pfix + "kktk_sbt_cd", KKTK_SBT_CD_RENTAL);
			// 親契約識別コード
			outputMap.put(pfix + "oya_kei_skbt_cd", OYA_KEI_SKBT_SVKEI_KAISEN_UW);
		}
		

		// 販売種別コード
		outputMap.put(pfix + "hambai_sbt_cd", HAMBAI_SBT_CD_STD_NEW);
		// 機器引当指定倉庫コード
		outputMap.put(pfix + "kiki_hkat_shitei_soko_cd", JKKStrConst.MINATO_SOKO_CD);
		// 機器引当指定倉庫棚コード
		outputMap.put(pfix + "kiki_hkat_shitei_skdn_cd", bean.sendMessageString("機器引当指定倉庫棚コード", X31CWebConst.DATABEAN_GET_VALUE));

		//↓↓↓【IT1-2013-0000294】2013/02/14 薄出 START ↓↓↓
		// 機器送付先住所の設定
		setKkAddresseeInfo(bean, outputMap, kktkSvcCd, prefix, addPrgMap);
		//↑↑↑【IT1-2013-0000294】2013/02/14 薄出  END  ↑↑↑

		// マンション物件番号
		outputMap.put(pfix + "mansion_bukken_no", JKKWebCommon.getMansionBukkenNo(paramMansionMap));
		// 登録変更共通処理
		setAddUpdCmnTrn(bean, outputMap, kktkSvcCd, prefix, searchinfoMap);
		// 配送区分
		outputMap.put(pfix + "haiso_div", HAISO_DIV_TYOKUSO);
		// サービスタイプ識別コード
		outputMap.put(pfix + "svc_type_skbt_cd", getSvctypeSkbtCd(bean, searchinfoMap, kktkSvcCd));
		// 機器送付先住所チェックレベル
		outputMap.put(pfix + "kiki_sohus_ad_chk_lv", JKKStrConst.AD_CHK_LV2);

		// 機器設置先の住所コードが設定されていない場合、設置先の住所チェックを行わない。
		if (outputMap.get(pfix + "kiki_stc_saki_ad_cd") != null && !"".equals(outputMap.get(pfix + "kiki_stc_saki_ad_cd")))
		{
			// 機器設置先住所チェックレベル
			outputMap.put(pfix + "kiki_stc_ad_chk_lv", JKKStrConst.AD_CHK_LV2);
		}

		// 機器進捗登録フラグ設定処理の呼び出し
		setkikiPrgAddFlg(addPrgMap, kktkSvcCd, (String)outputMap.get(pfix + "kktk_sbt_cd"));

		return outputMap;
	}

	/**
	 * 機器提供サービス契約登録初期データ取得処理(申込新規登録用)。
	 * <br>
	 *  機器提供サービス契約登録の初期データ取得処理です。
	 * @param bean          DataBean
	 * @param outputMap     データ出力先マップ
	 * @param kktkSvcCd     機器提供サービスコード
	 * @param pcrsCd        料金コースコード
	 * @param pplanCd       料金プランコード
	 * @param prefix        マップのキー名称のプレフィックス
	 * @param mansionMap    マンション情報マップ
	 * @param addPrgMap     進捗登録マップ
	 * @return              出力データ格納マップ
	 * @throws Exception Exception
	 */
	@SuppressWarnings("unchecked")
	public static HashMap getKktkSvcKeiIniData(
			X31SDataBeanAccess bean,
			HashMap outputMap,
			String kktkSvcCd,
			String pcrsCd,
			String pplanCd,
			String prefix,
			HashMap mansionMap,
			HashMap addPrgMap) throws Exception
	{
		return getKktkSvcKeiIniData(bean, outputMap, kktkSvcCd, pcrsCd, pplanCd, prefix, mansionMap, null, addPrgMap);
	}

	/**
	 * 機器送付先情報設定処理。
	 * <br>
	 * 機器の住所項目に関する設定を行います。
	 * @param bean          データBean
	 * @param outputMap     データ出力先マップ
	 * @param kktkSvcCd     機器提供サービスコード
	 * @param prefix        マップのキー名称のプレフィックス
	 * @param addPrgMap     進捗登録マップ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private static void setKkAddresseeInfo(
			X31SDataBeanAccess bean,
			HashMap outputMap,
			String kktkSvcCd,
			String prefix,
			HashMap addPrgMap) throws Exception
	{

		String pfix = "";
		if (prefix != null)
		{
			pfix = prefix;
		}

		// 機器送付先名
		String kikiSohusNm = null;
		// 機器送付先カナ名
		String kikiSohusNmKana = null;
		// 機器送付先住所コード
		String kikiSohusAdCd = null;
		// 機器送付先郵便番号
		String kikiSohusPcd = null;
		// 機器送付先都道府県名
		String kikiSohusStateNm = null;
		// 機器送付先市区町村名
		String kikiSohusCityNm = null;
		// 機器送付先大字通称名
		String kikiSohusOaztsuNm = null;
		// 機器送付先字丁目名
		String kikiSohusAzchoNm = null;
		// 機器送付先番地号
		String kikiSohusBnchigo = null;
		// 機器送付先住所補記・建物名
		String kikiSohusAdrttm = null;
		// 機器送付先住所補記・部屋番号
		String kikiSohusAdrrm = null;
		// 機器送付先住所手動入力フラグ
		String kikiShsAdManInputFlg = null;
		// 機器送付先電話番号
		String kikiSohusTelno = null;

		
		// イー・モバイル機器　または　UQ機器　または　クレイドル
		if (KKTK_SVC_CD_EM.equals(kktkSvcCd) || KKTK_SVC_CD_UQ.equals(kktkSvcCd) || KKTK_SVC_CD_EM_CRADLE.equals(kktkSvcCd))
		{
			// 機器送付先名
			kikiSohusNm = bean.sendMessageString("モバイル機器送付先＿送付先名", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先カナ名
			kikiSohusNmKana = bean.sendMessageString("モバイル機器送付先＿送付先名カナ", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先住所コード
			kikiSohusAdCd = bean.sendMessageString("モバイル機器送付先＿住所コード", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先郵便番号
			kikiSohusPcd = bean.sendMessageString("モバイル機器送付先＿郵便番号（前）", X31CWebConst.DATABEAN_GET_VALUE)
				+ bean.sendMessageString("モバイル機器送付先＿郵便番号（後）", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先都道府県名
			kikiSohusStateNm = bean.sendMessageString("モバイル機器送付先＿都道府県", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先市区町村名
			kikiSohusCityNm = bean.sendMessageString("モバイル機器送付先＿市区町村", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先大字通称名
			kikiSohusOaztsuNm = bean.sendMessageString("モバイル機器送付先＿大字通称名", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先字丁目名
			kikiSohusAzchoNm = bean.sendMessageString("モバイル機器送付先＿字丁目", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先番地号
			kikiSohusBnchigo = bean.sendMessageString("モバイル機器送付先＿番地・号", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先住所補記・建物名
			kikiSohusAdrttm = bean.sendMessageString("モバイル機器送付先＿建物名等", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先住所補記・部屋番号
			kikiSohusAdrrm = bean.sendMessageString("モバイル機器送付先＿部屋番号等", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先住所手動入力フラグ
			if (bean.sendMessageBoolean("モバイル機器送付先＿例外入力", X31CWebConst.DATABEAN_GET_VALUE)) 
			{
				kikiShsAdManInputFlg = JKKStrConst.AD_MAN_INPUT_YES;
			}
			else
			{
				kikiShsAdManInputFlg = JKKStrConst.AD_MAN_INPUT_NO;
			}
			// 機器送付先電話番号
			kikiSohusTelno = bean.sendMessageString("モバイル機器送付先＿電話番号", X31CWebConst.DATABEAN_GET_VALUE);
		}
		//↓↓↓【IT1-2013-0000294】2013/02/14 薄出 START ↓↓↓
		// その他(申込新規登録,申込追加のケース含む)
		else
		{
			// 機器送付先名
			kikiSohusNm = bean.sendMessageString("機器送付先−送付先名", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先カナ名
			kikiSohusNmKana = bean.sendMessageString("機器送付先−送付先名カナ", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先住所コード
			kikiSohusAdCd = bean.sendMessageString("機器送付先−住所コード", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先郵便番号
			kikiSohusPcd = bean.sendMessageString("機器送付先−郵便番号（前）", X31CWebConst.DATABEAN_GET_VALUE)
				+ bean.sendMessageString("機器送付先−郵便番号（後）", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先都道府県名
			kikiSohusStateNm = bean.sendMessageString("機器送付先−都道府県", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先市区町村名
			kikiSohusCityNm = bean.sendMessageString("機器送付先−市区町村", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先大字通称名
			kikiSohusOaztsuNm = bean.sendMessageString("機器送付先−大字通称", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先字丁目名
			kikiSohusAzchoNm = bean.sendMessageString("機器送付先−字町名", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先番地号
			kikiSohusBnchigo = bean.sendMessageString("機器送付先−番地・号", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先住所補記・建物名
			kikiSohusAdrttm = bean.sendMessageString("機器送付先−建物名等", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先住所補記・部屋番号
			kikiSohusAdrrm = bean.sendMessageString("機器送付先−部屋番号等", X31CWebConst.DATABEAN_GET_VALUE);
			// 機器送付先住所手動入力フラグ
			if (bean.sendMessageBoolean("機器送付先−例外入力", X31CWebConst.DATABEAN_GET_VALUE)) 
			{
				kikiShsAdManInputFlg = JKKStrConst.AD_MAN_INPUT_YES;
			}
			else
			{
				kikiShsAdManInputFlg = JKKStrConst.AD_MAN_INPUT_NO;
			}
			
			// 機器送付先電話番号
			kikiSohusTelno = bean.sendMessageString("機器送付先−電話番号", X31CWebConst.DATABEAN_GET_VALUE);
		}
		//↑↑↑【IT1-2013-0000294】2013/02/14 薄出  END  ↑↑↑

		// 機器送付先名
		outputMap.put(pfix + "kiki_sohus_nm", kikiSohusNm);
		// 機器送付先カナ名
		outputMap.put(pfix + "kiki_sohus_kana", kikiSohusNmKana);
		// 機器送付先住所コード
		outputMap.put(pfix + "kiki_sohus_ad_cd", kikiSohusAdCd);
		// 機器送付先郵便番号
		outputMap.put(pfix + "kiki_sohus_pcd", kikiSohusPcd);
		// 機器送付先都道府県名
		outputMap.put(pfix + "kiki_sohus_state_nm", kikiSohusStateNm);
		// 機器送付先市区町村名
		outputMap.put(pfix + "kiki_sohus_city_nm", kikiSohusCityNm);
		// 機器送付先大字通称名
		outputMap.put(pfix + "kiki_sohus_oaztsu_nm", kikiSohusOaztsuNm);
		// 機器送付先字丁目名
		outputMap.put(pfix + "kiki_sohus_azcho_nm", kikiSohusAzchoNm);
		// 機器送付先番地号
		outputMap.put(pfix + "kiki_sohus_bnchigo", kikiSohusBnchigo);
		// 機器送付先住所補記・建物名
		outputMap.put(pfix + "kiki_sohus_adrttm", kikiSohusAdrttm);
		// 機器送付先住所補記・部屋番号
		outputMap.put(pfix + "kiki_sohus_adrrm", kikiSohusAdrrm);
		// 機器送付先住所手動入力フラグ
		outputMap.put(pfix + "kiki_shs_ad_man_input_flg", kikiShsAdManInputFlg);
		// 機器送付先電話番号
		outputMap.put(pfix + "kiki_sohus_telno", kikiSohusTelno);

		// 機器送付先項目リスト
		String[] kikiSohuAdItemList = {
				kikiSohusPcd,
				kikiSohusStateNm,
				kikiSohusCityNm,
				kikiSohusOaztsuNm,
				kikiSohusAzchoNm,
				kikiSohusBnchigo,
				kikiSohusAdrttm,
				kikiSohusAdrrm
				};

		// 機器送付先_契約者住所差異フラグ
		outputMap.put(pfix + "kiki_sohus_ksh_ad_sai_flg", getKeishaAdSaiFlg(bean, kikiSohuAdItemList));
		// 機器送付先個別指定フラグ
		outputMap.put(pfix + "kiki_shs_kbt_shitei_flg", "1");
		
		// データ出力先マップに、機器提供サービスコードまたは機器種別コードが設定されていない場合、
		// 固定値(機器提供サービスコード=「C014」、機器提供種別コード＝「02」)を設定して進捗登録フラグ設定処理を呼び出す
		if (!outputMap.containsKey(prefix + "kktk_svc_cd") && !outputMap.containsKey(prefix + "kktk_sbt_cd"))
		{
			setkikiPrgAddFlg(addPrgMap, JKKStrConst.CD00132_BBR, KKTK_SBT_CD_RENTAL);
		}
	}

	/**
	 * 機器提供サービス契約情報変更初期データ取得処理。
	 * <br>
	 *  機器提供サービス契約変更の初期データ取得処理です。
	 * @param bean             データBean
	 * @param kktkSvcCd        機器提供サービスコード
	 * @param pplanCd          料金プランコード
	 * @param outputMap        データ出力先マップ
	 * @param outPrefix        データ出力先マップのプレフィックス
	 * @param inputMap         データ設定元マップ
	 * @param inPrefix         データ設定元マップのプレフィックス
	 * @param searchinfoMap    照査前照会情報マップ
	 * @param addPrgMap        進捗登録マップ
	 * @param isChgKkmdl       機器型式変更フラグ
	 * @param pcrsCd           料金コースコード
	 * @return                 出力データ格納マップ
	 * @throws Exception Exception
	 */
	@SuppressWarnings("unchecked")
	public static HashMap getUpdKktkSvcKeiIniData(
			X31SDataBeanAccess bean,
			String kktkSvcCd,
			String pplanCd,
			HashMap outputMap,
			String outPrefix,
			HashMap inputMap,
			String inPrefix,
			HashMap searchinfoMap,
			HashMap addPrgMap,
			boolean isChgKkmdl, 
			String pcrsCd) throws Exception
	{
		// パラメータ.データ出力先マップのプレフィックス
		String paramOutPrefix = "";
		// パラメータ.データ設定元マップのプレフィックス
		String paramInPrefix = "";
		
		
		if (outPrefix != null)
		{
			paramOutPrefix = outPrefix;
		}
		if (inPrefix != null)
		{
			paramInPrefix = inPrefix;
		}

		
		// リンクＳＴＢフラグ
		String linkStbFlg = null;
		if (JKKStrConst.KKTK_SVC_CD_STB.equals(kktkSvcCd))
		{
			// 機器提供サービスコードが"C009"(STB)
			
			if (searchinfoMap == null)
			{
				// 申込新規登録画面
				linkStbFlg = "0";
			}
			else
			{
				// 照査前登録画面
				linkStbFlg = (bean.sendMessageBoolean("リンクＳＴＢ", X31CWebConst.DATABEAN_GET_VALUE) ? "1" : "0");
			}
		}
		else
		{
			// データ設定元マップ.宅内機器型式コードを設定
			linkStbFlg = (String)inputMap.get(paramInPrefix + "link_stb_flg");
		}
		
		// eo間引継ぎかを判定するフラグ
		boolean isEoKanHktgi = (inputMap != null && (inputMap.get(paramInPrefix + "kiki_sohus_ad_cd") == null
				|| "".equals(inputMap.get(paramInPrefix + "kiki_sohus_ad_cd"))));

		// 機器制御コード
		// 1:通常更新、2:機器設置先・機器送付先更新、3:機器送付先以外更新、4:型式更新、0:更新なし
		String kikiCtlCd = TRAN_CTL_CD_UPD_NON;

		// 照査前照会情報マップがnull(申込新規登録)
		if (searchinfoMap == null)
		{
			kikiCtlCd = TRAN_CTL_CD_UPD;
		}
		// 機器提供サービスコードが"C016"(イー・モバイル機器)または"C017"(UQ機器)
		// または"C020"(ｅｏモバイル機器)
		else if (KKTK_SVC_CD_EM.equals(kktkSvcCd)
				|| KKTK_SVC_CD_UQ.equals(kktkSvcCd)
				|| KKTK_SVC_CD_EM_CRADLE.equals(kktkSvcCd))
		{
			// モバイルタブ機器情報制御コードが"1"(コミットあり) かつ　モバイルコース変更制御コードが"0"
			if (COMMIT_ARI.equals(bean.sendMessageString("モバイルタブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE))
					&& COMMIT_NON.equals(bean.sendMessageString("モバイルコース変更制御コード", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				// 更新なし
			}
			else
			{
				kikiCtlCd = TRAN_CTL_CD_UPD;
			}
		}
		// 契約者情報タブ機器情報制御コードが"1"以外(コミットなし)
		else if (!COMMIT_ARI.equals(bean.sendMessageString("契約者情報タブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE)))
		{
			kikiCtlCd = TRAN_CTL_CD_UPD;
		}
		// 機器提供サービスコードが"C012"(ONU)、または"C005"(モデム機器(VDSL))
		else if(JKKStrConst.CD00132_ONU.equals(kktkSvcCd)
				|| JKKStrConst.CD00132_MODEM.equals(kktkSvcCd))
		{
			//ネットタブ機器情報制御コードが"1"(コミットあり)、または電話タブ機器情報制御コードが"1"(コミットあり)
			if (COMMIT_ARI.equals(bean.sendMessageString("ネットタブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE))
					|| COMMIT_ARI.equals(bean.sendMessageString("電話タブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				kikiCtlCd = TRAN_CTL_CD_KIKI_UPD;
			}
			else
			{
				kikiCtlCd = TRAN_CTL_CD_UPD;
			}
		}
		// 機器提供サービスコードが"C013"(V-ONU)
		else if (JKKStrConst.CD00132_VONU.equals(kktkSvcCd))
		{
			// ＴＶタブ機器情報制御コードが"1"(コミットあり)
			if (COMMIT_ARI.equals(bean.sendMessageString("ＴＶタブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				kikiCtlCd = TRAN_CTL_CD_KIKI_UPD;
			}
			else
			{
				kikiCtlCd = TRAN_CTL_CD_UPD;
			}
		}
		// 機器提供サービスコードが"C009"(STB)、"C010"(B-CAS)、"C011"(C-CAS)
		else if (JKKStrConst.KKTK_SVC_CD_STB.equals(kktkSvcCd)
				|| JKKStrConst.KKTK_SVC_CD_B_CAS.equals(kktkSvcCd)
				|| JKKStrConst.KKTK_SVC_CD_C_CAS.equals(kktkSvcCd))
		{
			// ＴＶタブ機器情報制御コードが"1"以外(コミットなし)
			if (!COMMIT_ARI.equals(bean.sendMessageString("ＴＶタブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				kikiCtlCd = TRAN_CTL_CD_KIKI_GAI_UPD;
			}
			// ＴＶタブ機器情報制御コードが"1"(コミットあり)、かつＴＶコース変更制御コードが"1"
			else if(COMMIT_ARI.equals(bean.sendMessageString("ＴＶタブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE))
					&& COMMIT_ARI.equals(bean.sendMessageString("ＴＶコース変更制御コード", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				kikiCtlCd = TRAN_CTL_CD_KIKI_GAI_UPD;
			}
			// STBでリンクＳＴＢが変更された場合
			else if(JKKStrConst.KKTK_SVC_CD_STB.equals(kktkSvcCd) && !isEoKanHktgi && 
					!inputMap.get(paramInPrefix + "link_stb_flg").equals(linkStbFlg))
			{
				kikiCtlCd = TRAN_CTL_CD_LINK_STB_UPD;
			}
		}
		// 機器提供サービスコードが"C004"(VA機器)
		else if (JKKStrConst.KKTK_SVC_CD_VA.equals(kktkSvcCd))
		{
			if (!COMMIT_ARI.equals(bean.sendMessageString("電話タブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				kikiCtlCd = TRAN_CTL_CD_KIKI_GAI_UPD;
			}
			else if (isChgKkmdl)
			{	// eo間引継ぎなし かつ１⇔２番号切替ありの場合
				kikiCtlCd = TRAN_CTL_CD_MODEL_UPD;
			}
		}
		// 機器提供サービスコードが"C014"(ルータ機器)、"C015"(PLCモデム機器)、"C021"(タブレット)、"C022"(タブレット用クレードル)、"C023"(IP-STBレンタル)
		else if (JKKStrConst.CD00132_BBR.equals(kktkSvcCd) || JKKStrConst.CD00132_PLC.equals(kktkSvcCd) || JKKStrConst.KKTK_SVC_CD_TABLET.equals(kktkSvcCd) 
				|| isKktkSvcCd(new String[]{JKKStrConst.KKTK_SVC_CD_TABLET_CRADLE, JKKStrConst.KKTK_SVC_CD_IP_STB}, kktkSvcCd))
		{
			// ネットタブ機器情報制御コードが"1"以外(コミットなし)
			if (!COMMIT_ARI.equals(bean.sendMessageString("ネットタブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				kikiCtlCd = TRAN_CTL_CD_KIKI_GAI_UPD;
			}
		}
		
		if(TRAN_CTL_CD_UPD_NON.equals(kikiCtlCd) && isEoKanHktgi)
		{	// 更新なし かつeo間引継ぎありの場合
			kikiCtlCd = TRAN_CTL_CD_KIKI_UPD;
		}

		if (TRAN_CTL_CD_UPD_NON.equals(kikiCtlCd))
		{
			return outputMap;
		}

		// 機器提供サービス契約情報変更共通データ取得処理
		return getUpdKktkSvcKeiCommnData(
				bean, 
				kktkSvcCd, 
				pplanCd, 
				outputMap, 
				paramOutPrefix, 
				inputMap, 
				paramInPrefix, 
				searchinfoMap, 
				addPrgMap, 
				isChgKkmdl, 
				kikiCtlCd, 
				linkStbFlg, 
				pcrsCd);
	}

	/**
	 * 照査前ファミリーパック用機器送付先情報設定処理。
	 * <br>
	 * 照査前ファミリーパック用機器送付先情報設定処理です。
	 * @param bean             データBean
	 * @param kktkSvcCd        機器提供サービスコード
	 * @param outputMap        データ出力先マップ
	 * @param outPrefix        データ出力先マップのプレフィックス
	 * @param searchinfoMap    照査前照会情報マップ
	 * @param isNewAdd         新規登録フラグ true：新規登録する場合、false：更新する場合
	 * @param addPrgMap        進捗登録マップ
	 * @return                 出力データ格納マップ
	 * @throws Exception Exception
	 */
	@SuppressWarnings("unchecked")
	public static void setShosaBfFamipaKikiShs(
			X31SDataBeanAccess bean,
			String kktkSvcCd,
			HashMap outputMap,
			String outPrefix,
			HashMap searchinfoMap,
			boolean isNewAdd,
			HashMap addPrgMap) throws Exception
	{

		// 処理制御コード
		String kikiCtlCd = TRAN_CTL_CD_FP_KIKISHS_CHG_NON;

		// 照査前照会情報マップ.ルータ情報の取得
		HashMap kikisohusRcntMap = (HashMap)searchinfoMap.get("KKSV008104CC");
		ArrayList<HashMap> kikisohusRewtList = new ArrayList();

		// ルータ情報マップ
		HashMap routerMap = new HashMap();

		if (kikisohusRcntMap != null && kikisohusRcntMap.containsKey("kk0341_EKK0341B508CBSMsg1List")
				&& ((ArrayList<HashMap>)kikisohusRcntMap.get("kk0341_EKK0341B508CBSMsg1List")).size() != 0)
		{
			kikisohusRewtList = (ArrayList<HashMap>)kikisohusRcntMap.get("kk0341_EKK0341B508CBSMsg1List");
			
			// 処理制御コード判定処理
			for (HashMap kktkSvcKeiMap : kikisohusRewtList)
			{
				// 無線ルータが存在するかをチェック
				boolean isMusenRouter = isMusenRouter(kktkSvcKeiMap);

				if (!isMusenRouter)
				{
					continue;
				}

				// ルータ情報のマップを設定
				routerMap = kktkSvcKeiMap;
				
				break;
			}
		}
		else
		{
			// 照査前照会情報マップにルータが存在しない
			kikiCtlCd = TRAN_CTL_CD_FP_KIKISHS_CHG;
		}

		if (!TRAN_CTL_CD_FP_KIKISHS_CHG.equals(kikiCtlCd))
		{
			// 新規登録フラグがtrue(新規登録)
			if (isNewAdd)
			{
				kikiCtlCd = TRAN_CTL_CD_FP_KIKISHS_CHG;
			}
			// 契約者情報タブ機器情報制御コードが"1"以外(コミットなし)
			else if (!COMMIT_ARI.equals(bean.sendMessageString("契約者情報タブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				kikiCtlCd = TRAN_CTL_CD_FP_KIKISHS_CHG;
			}
			// ネットタブ機器情報制御コードが"1"以外(コミットなし)
			else if (!COMMIT_ARI.equals(bean.sendMessageString("ネットタブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				kikiCtlCd = TRAN_CTL_CD_FP_KIKISHS_CHG_NON;
			}
			// 照査前照会情報マップ.ルータ情報.機器送付先住所コードがnull(eo間引継)
			else if (routerMap.get("kk0341_kiki_sohus_ad_cd") == null)
			{
				kikiCtlCd = TRAN_CTL_CD_FP_KIKISHS_CHG;
			}
			else
			{
				kikiCtlCd = TRAN_CTL_CD_FP_KIKISHS_CHG_NON;
			}
		}

		// 処理制御コードが1(機器送付先変更)の場合
		if (TRAN_CTL_CD_FP_KIKISHS_CHG.equals(kikiCtlCd))
		{
			//↓↓↓【IT1-2013-0000294】2013/02/14 薄出 START ↓↓↓
			setKkAddresseeInfo(bean, outputMap, JKKStrConst.CD00132_BBR, outPrefix, addPrgMap);
			//↑↑↑【IT1-2013-0000294】2013/02/14 薄出  END  ↑↑↑
		}
		// 処理制御コードが2(機器送付先無変更)の場合
		else if (TRAN_CTL_CD_FP_KIKISHS_CHG_NON.equals(kikiCtlCd))
		{
			// 1.機器送付先名
			outputMap.put(outPrefix + "kiki_sohus_nm", routerMap.get("kk0341_kiki_sohus_nm"));
			// 2.機器送付先カナ名
			outputMap.put(outPrefix + "kiki_sohus_kana", routerMap.get("kk0341_kiki_sohus_kana"));
			// 3.機器送付先住所コード
			outputMap.put(outPrefix + "kiki_sohus_ad_cd", routerMap.get("kk0341_kiki_sohus_ad_cd"));
			// 4.機器送付先郵便番号
			outputMap.put(outPrefix + "kiki_sohus_pcd", routerMap.get("kk0341_kiki_sohus_pcd"));
			// 5.機器送付先都道府県名
			outputMap.put(outPrefix + "kiki_sohus_state_nm", routerMap.get("kk0341_kiki_sohus_state_nm"));
			// 6.機器送付先市区町村名
			outputMap.put(outPrefix + "kiki_sohus_city_nm", routerMap.get("kk0341_kiki_sohus_city_nm"));
			// 7.機器送付先大字通称名
			outputMap.put(outPrefix + "kiki_sohus_oaztsu_nm", routerMap.get("kk0341_kiki_sohus_oaztsu_nm"));
			// 8.機器送付先字丁目名
			outputMap.put(outPrefix + "kiki_sohus_azcho_nm", routerMap.get("kk0341_kiki_sohus_azcho_nm"));
			// 9.機器送付先番地号
			outputMap.put(outPrefix + "kiki_sohus_bnchigo", routerMap.get("kk0341_kiki_sohus_bnchigo"));
			// 10.機器送付先住所補記・建物名
			outputMap.put(outPrefix + "kiki_sohus_adrttm", routerMap.get("kk0341_kiki_sohus_adrttm"));
			// 11.機器送付先住所補記・部屋番号
			outputMap.put(outPrefix + "kiki_sohus_adrrm", routerMap.get("kk0341_kiki_sohus_adrrm"));
			// 12.機器送付先住所手動入力フラグ
			outputMap.put(outPrefix + "kiki_shs_ad_man_input_flg", routerMap.get("kk0341_kiki_shs_ad_man_input_flg"));
			// 13.機器送付先電話番号
			outputMap.put(outPrefix + "kiki_sohus_telno", routerMap.get("kk0341_kiki_sohus_telno"));
			// 14.機器送付先個別指定フラグ
			outputMap.put(outPrefix + "kiki_shs_kbt_shitei_flg", routerMap.get("kk0341_kiki_shs_kbt_shitei_flg"));
		}
		
		// 固定値(機器提供サービスコード=「C014」、機器提供種別コード＝「02」)を設定して進捗登録フラグ設定処理を呼び出す
		setkikiPrgAddFlg(addPrgMap, JKKStrConst.CD00132_BBR, KKTK_SBT_CD_RENTAL);
	}

	/**
	 * 機器設置先情報設定処理。
	 * <br>
	 * 機器設置先の住所項目に関する設定を行います。
	 * @param bean          データBean
	 * @param outputMap     データ出力先マップ
	 * @param pfix          マップのキー名称のプレフィックス
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private static void setStcSakiAddresseeInfo(
			X31SDataBeanAccess bean,
			HashMap outputMap,
			String pfix) throws Exception
	{
		// 機器設置先郵便番号
		outputMap.put(pfix + "kiki_stc_saki_pcd", bean.sendMessageString("利用場所−郵便番号（前）", X31CWebConst.DATABEAN_GET_VALUE)
				+ bean.sendMessageString("利用場所−郵便番号（後）", X31CWebConst.DATABEAN_GET_VALUE));
		// 機器設置先都道府県名
		outputMap.put(pfix + "kiki_stc_saki_state_nm", bean.sendMessageString("利用場所−都道府県", X31CWebConst.DATABEAN_GET_VALUE));
		// 機器設置先市区町村名
		outputMap.put(pfix + "kiki_stc_saki_city_nm", bean.sendMessageString("利用場所−市区町村", X31CWebConst.DATABEAN_GET_VALUE));
		// 機器設置先大字通称名
		outputMap.put(pfix + "kiki_stc_saki_oaztsu_nm", bean.sendMessageString("利用場所−大字通称名", X31CWebConst.DATABEAN_GET_VALUE));
		// 機器設置先字丁目名
		outputMap.put(pfix + "kiki_stc_saki_azcho_nm", bean.sendMessageString("利用場所−字町名", X31CWebConst.DATABEAN_GET_VALUE));
		// 機器設置先番地号
		outputMap.put(pfix + "kiki_stc_saki_bnchigo", bean.sendMessageString("利用場所−番地・号", X31CWebConst.DATABEAN_GET_VALUE));
		// 機器設置先住所補記・建物名
		outputMap.put(pfix + "kiki_stc_saki_adrttm", bean.sendMessageString("利用場所−建物名等", X31CWebConst.DATABEAN_GET_VALUE));
		// 機器設置先住所補記・部屋番号
		outputMap.put(pfix + "kiki_stc_saki_adrrm", bean.sendMessageString("利用場所−部屋番号等", X31CWebConst.DATABEAN_GET_VALUE));
		// 機器設置先電話番号
		outputMap.put(pfix + "kiki_stc_sk_telno", bean.sendMessageString("利用場所−電話番号", X31CWebConst.DATABEAN_GET_VALUE));

		// 機器送付先項目リスト
		String[] kikiStcSakiAdItemList = {
				(String)outputMap.get(pfix + "kiki_stc_saki_pcd"),
				(String)outputMap.get(pfix + "kiki_stc_saki_state_nm"),
				(String)outputMap.get(pfix + "kiki_stc_saki_city_nm"),
				(String)outputMap.get(pfix + "kiki_stc_saki_oaztsu_nm"),
				(String)outputMap.get(pfix + "kiki_stc_saki_azcho_nm"),
				(String)outputMap.get(pfix + "kiki_stc_saki_bnchigo"),
				(String)outputMap.get(pfix + "kiki_stc_saki_adrttm"),
				(String)outputMap.get(pfix + "kiki_stc_saki_adrrm")
				};

		// 機器設置先_契約者住所差異フラグ
		outputMap.put(pfix + "kiki_stc_sk_ksh_ad_sai_flg", getKeishaAdSaiFlg(bean, kikiStcSakiAdItemList));
	}

	/**
	 * 指定の住所情報と契約者住所を比較して契約者住所差異フラグを取得します。
	 * <br>
	 * @param bean DataBean
	 * @param kikiAdItemList 比較対象の住所情報項目名リスト
	 * @return "0"：差異なし / "1"：差異あり
	 * @throws Exception
	 */
	private static String getKeishaAdSaiFlg(
			X31SDataBeanAccess bean,
			String[] kikiAdItemList) throws Exception
	{
		// 契約者住所項目リスト
		String[] keishaSohuAdItemList = {
				bean.sendMessageString("契約者−郵便番号（前）", X31CWebConst.DATABEAN_GET_VALUE)
					+ bean.sendMessageString("契約者−郵便番号（後）", X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString("契約者−都道府県", X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString("契約者−市区町村", X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString("契約者−大字通称", X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString("契約者−字町名", X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString("契約者−番地・号", X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString("契約者−建物名等", X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString("契約者−部屋番号等", X31CWebConst.DATABEAN_GET_VALUE)
				};

		for (int i = 0; i < keishaSohuAdItemList.length; i++)
		{
			if (!keishaSohuAdItemList[i].equals(kikiAdItemList[i]))
			{
				return "1"; // 差異あり
			}
		}
		return "0"; // 差異なし
	}

	/**
	 * サービスタイプ識別コード取得処理。
	 * <br>
	 * サービスタイプ識別コードの取得を行う。
	 * @param bean          データBean
	 * @param searchinfoMap 照査前照会情報マップ
	 * @param kktkSvcCd     
	 * @return サービスタイプ識別コード
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private static String getSvctypeSkbtCd(
			X31SDataBeanAccess bean,
			HashMap searchinfoMap,
			String kktkSvcCd) throws Exception
	{
		// サービスタイプ識別コード
		String svctypeSkbtCd = null;
		// 申込の種類
		String mskmKind = null;

		// 申込新規登録の場合
		if (searchinfoMap == null)
		{
			if (MSKM_FORM_CD_SHOMEN.equals(bean.sendMessageString("申込形態コード", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				mskmKind = bean.sendMessageString("申込書の種類", X31CWebConst.DATABEAN_GET_VALUE);
			}
			else if (MSKM_FORM_CD_TEL.equals(bean.sendMessageString("申込形態コード", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				mskmKind = bean.sendMessageString("住居タイプ", X31CWebConst.DATABEAN_GET_VALUE);
			}
		}
		// 照査前登録の場合
		else
		{
			mskmKind = bean.sendMessageString("申込種類", X31CWebConst.DATABEAN_GET_VALUE);
		}

		// モバイル機器の場合
		if (isMobKiki(kktkSvcCd))
		{
			// モバイル機器の場合、null
		}
		// ホームタイプの場合
		else if (MSKM_KIND_HOME.equals(mskmKind))
		{
			svctypeSkbtCd = SVC_TYPE_SKBT_CD_HOME;
		}
		// マンションタイプの場合
		else if (MSKM_KIND_MANSION.equals(mskmKind))
		{
			svctypeSkbtCd = SVC_TYPE_SKBT_CD_MANS;
		}
		// メゾンタイプの場合
		else if (MSKM_KIND_MEZON.equals(mskmKind))
		{
			svctypeSkbtCd = SVC_TYPE_SKBT_CD_MEZON;
		}

		return svctypeSkbtCd;
	}

	/**
	 * 登録変更共通処理。
	 * <br>
	 * 登録と変更の共通処理を行います。
	 * @param bean          DataBean
	 * @param outputMap     データ出力先マップ
	 * @param kktkSvcCd     機器提供サービスコード
	 * @param prefix        マップのキー名称のプレフィックス
	 * @param searchinfoMap 照査前照会情報マップ
	 * @throws Exception Exception
	 */
	@SuppressWarnings("unchecked")
	private static void setAddUpdCmnTrn(
			X31SDataBeanAccess bean,
			HashMap outputMap,
			String kktkSvcCd,
			String prefix,
			HashMap searchinfoMap) throws Exception
	{
		// モバイル機器以外の場合
		if (!KKTK_SVC_CD_EM.equals(kktkSvcCd) && !KKTK_SVC_CD_UQ.equals(kktkSvcCd) && !KKTK_SVC_CD_EM_CRADLE.equals(kktkSvcCd))
		{
			// 機器設置先住所コード
			outputMap.put(prefix + "kiki_stc_saki_ad_cd", bean.sendMessageString("利用場所−住所コード", X31CWebConst.DATABEAN_GET_VALUE));

			// 機器設置先情報設定処理
			setStcSakiAddresseeInfo(bean, outputMap, prefix);

			// 住所未確定フラグ
			if (null == searchinfoMap
				&& !"1".equals(bean.sendMessageString("利用場所−画面フラグ", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				// 申込新規登録で利用場所情報タブの画面入力項目が活性の場合
				String fixFlg = bean.sendMessageString("設置位置−利用場所住所確定", X31CWebConst.DATABEAN_GET_VALUE);
				if ("1".equals(fixFlg))
				{
					outputMap.put(prefix + "ad_mi_fix_flg", UMU_NASI);
				}
				else if ("0".equals(fixFlg))
				{
					outputMap.put(prefix + "ad_mi_fix_flg", UMU_ARI);
				}
			}
			else
			{
				// 申込新規登録で利用場所情報タブの画面入力項目が非活性の場合、もしくは照査前登録
				if (!bean.sendMessageBoolean("利用場所−住所未確定設定", X31CWebConst.DATABEAN_GET_VALUE))
				{
					outputMap.put(prefix + "ad_mi_fix_flg", UMU_NASI);
				}
				else
				{
					outputMap.put(prefix + "ad_mi_fix_flg", UMU_ARI);
				}
			}
		}
		else
		{
			// 住所未確定フラグ
			outputMap.put(prefix + "ad_mi_fix_flg", "0");
		}
	}

	/**
	 * 無線ルータ判定。
	 * <br>
	 * 無線ルータかを判断する。
	 * @param  kktkSvcKeiMap 機器提供サービス契約マップ
	 * @return 判定結果
	 * @throws Exception Exception
	 */
	@SuppressWarnings("unchecked")
	private static boolean isMusenRouter(
			HashMap kktkSvcKeiMap) throws Exception
	{
		if (kktkSvcKeiMap == null)
		{
			return false;
		}

		if (kktkSvcKeiMap.get("kk0341_pcrs_cd") == null
				|| kktkSvcKeiMap.get("kk0341_kktk_svc_cd") == null)
		{
			return false;
		}

		// 100Mの無線ルーター
		if (CD00134_WL_ROUTER_100M.equals(kktkSvcKeiMap.get("kk0341_pcrs_cd"))
				&& JKKStrConst.CD00132_BBR.equals(kktkSvcKeiMap.get("kk0341_kktk_svc_cd")))
		{
			return true;
		}
		// 1Gの無線ルーター
		else if (CD00134_WL_ROUTER_1G.equals(kktkSvcKeiMap.get("kk0341_pcrs_cd"))
				&& JKKStrConst.CD00132_BBR.equals(kktkSvcKeiMap.get("kk0341_kktk_svc_cd")))
		{
			return true;
		}

		return false;
	}
	
	/**
	 * モバイル機器の判定。
	 * <br>
	 * モバイル機器かを判断する。
	 * @param  kktkSvcCd 機器提供サービスコード
	 * @return 判定結果 モバイル機器の場合、true
	 */
	private static boolean isMobKiki(String kktkSvcCd)
	{
		// 機器提供サービスコードが"C016"(イー・モバイル機器)または"C017"(UQ機器)
		// または"C020"(ｅｏモバイル機器)
		if (KKTK_SVC_CD_EM.equals(kktkSvcCd)
			|| KKTK_SVC_CD_UQ.equals(kktkSvcCd)
			|| KKTK_SVC_CD_EM_CRADLE.equals(kktkSvcCd))
		{
			// モバイル機器の場合
			return true;
		}
		
		return false;
	}
	
	/**
	 * 機器進捗登録フラグ設定処理
	 * <br>
	 * 機器提供サービスコード・機器提供種別コードで、機器登録フラグの判定処理を行う。
	 * 結果を引数の進捗登録マップに格納する。
	 * @param addPrgMap
	 * @param kikiTkSvcCd 機器提供サービスコード
	 * @param kikiTkSbtCd 機器提供種別コード
	 */
	private static void setkikiPrgAddFlg(HashMap<String, Boolean> addPrgMap, String kikiTkSvcCd, String kikiTkSbtCd)
	{
		
		// 進捗登録マップのnullチェック
		if (null == addPrgMap)
		{
			return;
		}
		
		// 機器提供サービスコード・機器提供種別コードのチェック
		if (null == kikiTkSvcCd 
				|| null == kikiTkSbtCd
				|| "".equals(kikiTkSvcCd)
				|| "".equals(kikiTkSbtCd))
		{
			return;
		}
		
		// 進捗登録マップ登録用キー
		String netRentKikiPrgAddFlg = "net_rent_kiki_prg_add_flg";
		String netConnectKikiPrgAddFlg = "net_connect_kiki_prg_add_flg";
		String telRentKikiPrgAddFlg = "tel_rent_kiki_prg_add_flg";
		String telConnectKikiPrgAddFlg = "tel_connect_kiki_prg_add_flg";
		String tvRentKikiPrgAddFlg = "tv_rent_kiki_prg_add_flg";
		String tvConnectKikiPrgAddFlg = "tv_connect_kiki_prg_add_flg";
		String mblRentKikiPrgAddFlg = "mbl_rent_kiki_prg_add_flg";
		String mblConnectKikiPrgAddFlg = "mbl_connect_kiki_prg_add_flg";
		
		// 各サービス用機器提供サービス配列
		String [] netKikiTkSvcCdArray = {JKKStrConst.CD00132_BBR, JKKStrConst.CD00132_PLC, JKKStrConst.KKTK_SVC_CD_IP_STB,
				JKKStrConst.KKTK_SVC_CD_TABLET, JKKStrConst.KKTK_SVC_CD_TABLET_CRADLE};
		String [] telKikiTkSvcCdArray = {JKKStrConst.KKTK_SVC_CD_VA};
		String [] tvKikiTkSvcCdArray = {JKKStrConst.KKTK_SVC_CD_STB, JKKStrConst.KKTK_SVC_CD_B_CAS, JKKStrConst.KKTK_SVC_CD_C_CAS};
		String [] mblKikiTkSvcCdArray = {KKTK_SVC_CD_EM, KKTK_SVC_CD_UQ, KKTK_SVC_CD_EM_CRADLE};
		
		// eo光ネット用の機器進捗登録フラグ判定
		for (String compKikiTkSvcCd : netKikiTkSvcCdArray)
		{
			if (compKikiTkSvcCd.equals(kikiTkSvcCd))
			{
				// 機器提供サービスコードがeo光ネット用の場合
				if (KKTK_SBT_CD_RENTAL.equals(kikiTkSbtCd))
				{
					// 機器提供種別コードがレンタルの場合
					addPrgMap.put(netRentKikiPrgAddFlg, new Boolean(true));
					return;
				}
				else
				{
					// 機器提供種別コードがレンタル以外の場合
					addPrgMap.put(netConnectKikiPrgAddFlg, new Boolean(true));
					return;
				}
			}
		}
		
		// eo光電話用の機器進捗登録フラグ判定
		for (String compKikiTkSvcCd : telKikiTkSvcCdArray)
		{
			if (compKikiTkSvcCd.equals(kikiTkSvcCd))
			{
				// 機器提供サービスコードがeo光電話用の場合
				if (KKTK_SBT_CD_RENTAL.equals(kikiTkSbtCd))
				{
					// 機器提供種別コードがレンタルの場合
					addPrgMap.put(telRentKikiPrgAddFlg, new Boolean(true));
					return;
				}
				else
				{
					// 機器提供種別コードがレンタル以外の場合
					addPrgMap.put(telConnectKikiPrgAddFlg, new Boolean(true));
					return;
				}
			}
		}
		
		// eo光テレビ用の機器進捗登録フラグ判定
		for (String compKikiTkSvcCd : tvKikiTkSvcCdArray)
		{
			if (compKikiTkSvcCd.equals(kikiTkSvcCd))
			{
				// 機器提供サービスコードがeo光テレビ用の場合
				if (KKTK_SBT_CD_RENTAL.equals(kikiTkSbtCd))
				{
					// 機器提供種別コードがレンタルの場合
					addPrgMap.put(tvRentKikiPrgAddFlg, new Boolean(true));
					return;
				}
				else
				{
					// 機器提供種別コードがレンタル以外の場合
					addPrgMap.put(tvConnectKikiPrgAddFlg, new Boolean(true));
					return;
				}
			}
		}
		
		// eoモバイル用の機器進捗登録フラグ判定
		for (String compKikiTkSvcCd : mblKikiTkSvcCdArray)
		{
			if (compKikiTkSvcCd.equals(kikiTkSvcCd))
			{
				// 機器提供サービスコードがeoモバイル用の場合
				if (KKTK_SBT_CD_RENTAL.equals(kikiTkSbtCd))
				{
					// 機器提供種別コードがレンタルの場合
					addPrgMap.put(mblRentKikiPrgAddFlg, new Boolean(true));
					return;
				}
				else
				{
					// 機器提供種別コードがレンタル以外の場合
					addPrgMap.put(mblConnectKikiPrgAddFlg, new Boolean(true));
					return;
				}
			}
		}
	}
	
	/**
	 * モデム機器提供種別コード取得処理
	 * <br>
	 * 料金プランコードを基に機器提供種別コードを返却する。
	 * @param  pplanCd 料金プランコード
	 * @return 機器提供種別コード
	 */
	private static String getKktkSbtCd(String pplanCd)
	{
		String kktkSbtCd = "";

		if (JKKStrConst.CD00565_MODEM_RENT.equals(pplanCd))
		{
			kktkSbtCd = JKKStrConst.CD00212_02;
		}
		else if (JKKStrConst.CD00565_MODEM_BUY.equals(pplanCd))
		{
			kktkSbtCd =  JKKStrConst.CD00212_01;
		}
		
		return kktkSbtCd;
	}
	
	/**
	 * 対象機器提供サービス判定処理（PGレリーフ対策）
	 * @param kktkSvcCdList
	 * @param kktkSvcCd
	 * @return boolean
	 */
	private static boolean isKktkSvcCd(String[] kktkSvcCdList, String kktkSvcCd)
	{
		for(String tmpKktkSvcCd : kktkSvcCdList)
		{
			if(kktkSvcCd.equals(tmpKktkSvcCd))
			{
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 機器提供サービス契約情報変更共通データ取得処理
	 * <br>
	 * @param bean             データBean
	 * @param kktkSvcCd        機器提供サービスコード
	 * @param pplanCd          料金プランコード
	 * @param outputMap        データ出力先マップ
	 * @param paramOutPrefix	データ出力先マップのプレフィックス
	 * @param inputMap         データ設定元マップ
	 * @param paramInPrefix	    データ設定元マップのプレフィックス
	 * @param searchinfoMap    照査前照会情報マップ
	 * @param addPrgMap        進捗登録マップ
	 * @param isChgKkmdl       機器型式変更フラグ
	 * @param kikiCtlCd        機器制御コード
	 * @param linkStbFlg       リンクＳＴＢフラグ
	 * @param pcrsCd           料金コースコード
	 * @return 出力データ格納マップ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public static HashMap getUpdKktkSvcKeiCommnData(
			X31SDataBeanAccess bean,
			String kktkSvcCd,
			String pplanCd,
			HashMap outputMap,
			String paramOutPrefix,
			HashMap inputMap,
			String paramInPrefix,
			HashMap searchinfoMap,
			HashMap addPrgMap,
			boolean isChgKkmdl,
			String kikiCtlCd,
			String linkStbFlg,
			String pcrsCd) throws Exception
	{
		String kktkSbtCd = null;
		String taknkikiModelCd = null;
		
		
		// 1.機器提供サービス契約番号
		outputMap.put(paramOutPrefix + "kktk_svc_kei_no", inputMap.get(paramInPrefix + "kktk_svc_kei_no"));

		// 処理制御コードが"2"(機器設置先、機器送付先更新)以外かつ
		// 機器提供サービスコードが"C005"(VDSL子機モデム)の場合、以下の処理を行う
		if (!TRAN_CTL_CD_KIKI_UPD.equals(kikiCtlCd)
				&& JKKStrConst.CD00132_MODEM.equals(kktkSvcCd))
		{
			// 料金プランコードを基に機器提供種別コードを取得
			kktkSbtCd = getKktkSbtCd(pplanCd);
		}
		else
		{
			// データ設定元マップ.機器提供種別コードを設定
			kktkSbtCd = (String)inputMap.get(paramInPrefix + "kktk_sbt_cd");
		}

		// 2.機器提供種別コード
		outputMap.put(paramOutPrefix + "kktk_sbt_cd", kktkSbtCd);

		// 3.販売種別コード
		outputMap.put(paramOutPrefix + "hambai_sbt_cd", inputMap.get(paramInPrefix + "hambai_sbt_cd"));

		// 機器提供サービスコードが"C014"(ルータ機器)以外かつ、
		// 機器型式変更フラグがtrue（機器型式変更あり）の場合、なにも設定しない。
		if (!JKKStrConst.CD00132_BBR.equals(kktkSvcCd) && isChgKkmdl)
		{
			taknkikiModelCd = null;
		}
		// 処理制御コードが"2"(機器設置先、機器送付先更新)の場合、
		// データ設定元マップ.宅内機器型式コードを設定
		else if (TRAN_CTL_CD_KIKI_UPD.equals(kikiCtlCd))
		{
			// データ設定元マップ.宅内機器型式コードを設定
			taknkikiModelCd = (String)inputMap.get(paramInPrefix + "taknkiki_model_cd");
		}
		// 機器提供サービスコードが"C005"(モデム機器(VDSL))の場合
		else if (JKKStrConst.CD00132_MODEM.equals(kktkSvcCd))
		{
			// 宅内機器型式コード
			taknkikiModelCd = JKKWebCommon.getPullDownName(bean, "機器リスト", "機器コード", "機器コードリスト", "機器名リスト");
		}
		// 機器提供サービスコードが""C021"(タブレット)の場合
		else if (JKKStrConst.KKTK_SVC_CD_TABLET.equals(kktkSvcCd))
		{
			// 宅内機器型式コード
			taknkikiModelCd = JKKWebCommon.getPullDownCode(bean, "タブレット＿端末名リスト",
					"タブレット端末選択コード", "タブレット機器型式コードリスト");
		}
		// 機器提供サービスコードが""C022"(タブレット用クレードル)の場合
		else if (JKKStrConst.KKTK_SVC_CD_TABLET_CRADLE.equals(kktkSvcCd))
		{
			// 宅内機器型式コード
			taknkikiModelCd = JKKWebCommon.getPullDownCode(bean, "タブレット＿端末名リスト",
					"タブレット端末選択コード", "クレードル機器型式コードリスト");
		}
		// 機器提供サービスコードが"C014"(ルータ機器)かつ、
		// 機器型式変更フラグがtrue（機器型式変更あり）の場合、なにも設定しない。
		else if (JKKStrConst.CD00132_BBR.equals(kktkSvcCd) && isChgKkmdl)
		{
			taknkikiModelCd = null;
		}
		else
		{
			// データ設定元マップ.宅内機器型式コードを設定
			taknkikiModelCd = (String)inputMap.get(paramInPrefix + "taknkiki_model_cd");
		}

		// 4.宅内機器型式コード
		outputMap.put(paramOutPrefix + "taknkiki_model_cd", taknkikiModelCd);
		// 5.機器製造番号
		outputMap.put(paramOutPrefix + "kiki_seizo_no", inputMap.get(paramInPrefix + "kiki_seizo_no"));
		Boolean tvCommitFlg = false;
		// 照査前照会情報マップがnull以外(照査前登録)
		if (searchinfoMap != null && JKKStrConst.KKTK_SVC_CD_STB.equals(kktkSvcCd))
		{
			tvCommitFlg = COMMIT_ARI.equals(bean.sendMessageString("ＴＶタブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE))
							&& JKKStrConst.CD00822_ACTIVE.equals(bean.sendMessageString("ＴＶコース変更制御コード", X31CWebConst.DATABEAN_GET_VALUE));
		}
		
		// 6.ＨＤＤ容量コード
		if(JKKStrConst.KKTK_SVC_CD_STB.equals(kktkSvcCd) && !tvCommitFlg)
		{	// 機器提供サービスコードが"C009"(STB)かつ、
			// コミットなしの場合
			if (JKKStrConst.CD00134_STB_HDD_NON.equals(pcrsCd))
			{
				// HDD容量コード
				outputMap.put(paramOutPrefix + "hdd_capa_cd", KKTK_HDD_CAPA_CD_HDD_NON);
			}
			else if (JKKStrConst.CD00134_STB_1000G_BD.equals(pcrsCd))
			{
				// HDD容量コード
				outputMap.put(paramOutPrefix + "hdd_capa_cd", KKTK_HDD_CAPA_CD_1000GB_BD);
			}
			else if (JKKStrConst.CD00134_STB_500G_HDD.equals(pcrsCd))
			{
				// HDD容量コード
				outputMap.put(paramOutPrefix + "hdd_capa_cd", KKTK_HDD_CAPA_CD_500GB_HDD);
			}
			//*--<<20160428 IT1-2016-0000049 ADD START >>--*//
			else if (JKKStrConst.CD00134_STB_HDD_NON_NEW.equals(pcrsCd))
			{
				// (新)録画機能なし C95
				outputMap.put(paramOutPrefix + "hdd_capa_cd", KKTK_HDD_CAPA_CD_HDD_NON_NEW);
			}
			else if (JKKStrConst.CD00134_STB_500G_HDD_NEW.equals(pcrsCd))
			{
				// HDD容量コード 500GB(HDD) C97
				outputMap.put(paramOutPrefix + "hdd_capa_cd", KKTK_HDD_CAPA_CD_500GB_HDD_NEW);
			}
			else if (JKKStrConst.CD00134_STB_2TB_HDD.equals(pcrsCd))
			{
				// 録画機能付　ＨＤＤ容量２ＴＢ C96
				outputMap.put(paramOutPrefix + "hdd_capa_cd", KKTK_HDD_CAPA_CD_2TB_HDD);
			}
			//*--<<20160428 IT1-2016-0000049 ADD  END  >>--*//
			else
			{
				outputMap.put(paramOutPrefix + "hdd_capa_cd", inputMap.get(paramInPrefix + "hdd_capa_cd"));
			}
		}
		else 
		{
			outputMap.put(paramOutPrefix + "hdd_capa_cd", inputMap.get(paramInPrefix + "hdd_capa_cd"));
		}

		// 7.通信機器セットコード
		outputMap.put(paramOutPrefix + "tsushin_kiki_set_cd", inputMap.get(paramInPrefix + "tsushin_kiki_set_cd"));
		// 8.リンクＳＴＢフラグ
		outputMap.put(paramOutPrefix + "link_stb_flg", linkStbFlg);
		// 9.機器引当指定倉庫コード
		outputMap.put(paramOutPrefix + "kiki_hkat_shitei_soko_cd", inputMap.get(paramInPrefix + "kiki_hkat_shitei_soko_cd"));
		// 10.機器引当指定倉庫棚コード
		outputMap.put(paramOutPrefix + "kiki_hkat_shitei_skdn_cd", inputMap.get(paramInPrefix + "kiki_hkat_shitei_skdn_cd"));
		// 11.機器送料有無
		outputMap.put(paramOutPrefix + "kiki_soryo_um", inputMap.get(paramInPrefix + "kiki_soryo_um"));

		// 処理制御コードが"3"(機器送付先以外更新)または"4"(型式更新)または"5"(リンクSTB更新)の場合
		if (TRAN_CTL_CD_KIKI_GAI_UPD.equals(kikiCtlCd)
				|| TRAN_CTL_CD_MODEL_UPD.equals(kikiCtlCd)
				|| TRAN_CTL_CD_LINK_STB_UPD.equals(kikiCtlCd))
		{
			// 12.機器送付先名
			outputMap.put(paramOutPrefix + "kiki_sohus_nm", inputMap.get(paramInPrefix + "kiki_sohus_nm"));
			// 13.機器送付先カナ名
			outputMap.put(paramOutPrefix + "kiki_sohus_kana", inputMap.get(paramInPrefix + "kiki_sohus_kana"));
			// 14.機器送付先住所コード
			outputMap.put(paramOutPrefix + "kiki_sohus_ad_cd", inputMap.get(paramInPrefix + "kiki_sohus_ad_cd"));
			// 15.機器送付先郵便番号
			outputMap.put(paramOutPrefix + "kiki_sohus_pcd", inputMap.get(paramInPrefix + "kiki_sohus_pcd"));
			// 16.機器送付先都道府県名
			outputMap.put(paramOutPrefix + "kiki_sohus_state_nm", inputMap.get(paramInPrefix + "kiki_sohus_state_nm"));
			// 17.機器送付先市区町村名
			outputMap.put(paramOutPrefix + "kiki_sohus_city_nm", inputMap.get(paramInPrefix + "kiki_sohus_city_nm"));
			// 18.機器送付先大字通称名
			outputMap.put(paramOutPrefix + "kiki_sohus_oaztsu_nm", inputMap.get(paramInPrefix + "kiki_sohus_oaztsu_nm"));
			// 19.機器送付先字丁目名
			outputMap.put(paramOutPrefix + "kiki_sohus_azcho_nm", inputMap.get(paramInPrefix + "kiki_sohus_azcho_nm"));
			// 20.機器送付先番地号
			outputMap.put(paramOutPrefix + "kiki_sohus_bnchigo", inputMap.get(paramInPrefix + "kiki_sohus_bnchigo"));
			// 21.機器送付先住所補記・建物名
			outputMap.put(paramOutPrefix + "kiki_sohus_adrttm", inputMap.get(paramInPrefix + "kiki_sohus_adrttm"));
			// 22.機器送付先住所補記・部屋番号
			outputMap.put(paramOutPrefix + "kiki_sohus_adrrm", inputMap.get(paramInPrefix + "kiki_sohus_adrrm"));
			// 23.機器送付先住所手動入力フラグ
			outputMap.put(paramOutPrefix + "kiki_shs_ad_man_input_flg", inputMap.get(paramInPrefix + "kiki_shs_ad_man_input_flg"));
			// 24.機器送付先電話番号
			outputMap.put(paramOutPrefix + "kiki_sohus_telno", inputMap.get(paramInPrefix + "kiki_sohus_telno"));
			// 25.機器送付先個別指定フラグ
			outputMap.put(paramOutPrefix + "kiki_shs_kbt_shitei_flg", inputMap.get(paramInPrefix + "kiki_shs_kbt_shitei_flg"));

			if(TRAN_CTL_CD_MODEL_UPD.equals(kikiCtlCd) || TRAN_CTL_CD_LINK_STB_UPD.equals(kikiCtlCd))
			{	// "4"(型式更新)または"5"(リンクSTB更新)の場合
				// 26.機器送付先_契約者住所差異フラグ
				outputMap.put(paramOutPrefix + "kiki_sohus_ksh_ad_sai_flg", inputMap.get(paramInPrefix + "kiki_sohus_ksh_ad_sai_flg"));
			}
			else
			{
				// 機器送付先項目リスト
				String[] kikiSohuAdItemList = {
						(String)inputMap.get(paramInPrefix + "kiki_sohus_pcd"),
						(String)inputMap.get(paramInPrefix + "kiki_sohus_state_nm"),
						(String)inputMap.get(paramInPrefix + "kiki_sohus_city_nm"),
						(String)inputMap.get(paramInPrefix + "kiki_sohus_oaztsu_nm"),
						(String)inputMap.get(paramInPrefix + "kiki_sohus_azcho_nm"),
						(String)inputMap.get(paramInPrefix + "kiki_sohus_bnchigo"),
						(String)inputMap.get(paramInPrefix + "kiki_sohus_adrttm"),
						(String)inputMap.get(paramInPrefix + "kiki_sohus_adrrm")
						};
	
				// 26.機器送付先_契約者住所差異フラグ
				outputMap.put(paramOutPrefix + "kiki_sohus_ksh_ad_sai_flg", getKeishaAdSaiFlg(bean, kikiSohuAdItemList));
			}
		}
		else
		{
			//↓↓↓【IT1-2013-0000294】2013/02/14 薄出 START ↓↓↓
			setKkAddresseeInfo(bean, outputMap, kktkSvcCd, paramOutPrefix, addPrgMap);
			//↑↑↑【IT1-2013-0000294】2013/02/14 薄出  END  ↑↑↑
		}

		// 27.機器設置先名
		outputMap.put(paramOutPrefix + "kiki_stc_saki_nm", inputMap.get(paramInPrefix + "kiki_stc_saki_nm"));
		// 28.機器設置先カナ名
		outputMap.put(paramOutPrefix + "kiki_stc_saki_kana", inputMap.get(paramInPrefix + "kiki_stc_saki_kana"));

		if(TRAN_CTL_CD_MODEL_UPD.equals(kikiCtlCd) || TRAN_CTL_CD_LINK_STB_UPD.equals(kikiCtlCd))
		{	// "4"(型式更新)または"5"(リンクSTB更新)の場合
			// 29.機器設置先住所コード
			outputMap.put(paramOutPrefix + "kiki_stc_saki_ad_cd", inputMap.get(paramInPrefix + "kiki_stc_saki_ad_cd"));
			// 30.機器設置先郵便番号
			outputMap.put(paramOutPrefix + "kiki_stc_saki_pcd", inputMap.get(paramInPrefix + "kiki_stc_saki_pcd"));
			// 31.機器設置先都道府県名
			outputMap.put(paramOutPrefix + "kiki_stc_saki_state_nm", inputMap.get(paramInPrefix + "kiki_stc_saki_state_nm"));
			// 32.機器設置先市区町村名
			outputMap.put(paramOutPrefix + "kiki_stc_saki_city_nm", inputMap.get(paramInPrefix + "kiki_stc_saki_city_nm"));
			// 33.機器設置先大字通称名
			outputMap.put(paramOutPrefix + "kiki_stc_saki_oaztsu_nm", inputMap.get(paramInPrefix + "kiki_stc_saki_oaztsu_nm"));
			// 34.機器設置先字丁目名
			outputMap.put(paramOutPrefix + "kiki_stc_saki_azcho_nm", inputMap.get(paramInPrefix + "kiki_stc_saki_azcho_nm"));
			// 35.機器設置先番地号
			outputMap.put(paramOutPrefix + "kiki_stc_saki_bnchigo", inputMap.get(paramInPrefix + "kiki_stc_saki_bnchigo"));
			// 36.機器設置先住所補記・建物名
			outputMap.put(paramOutPrefix + "kiki_stc_saki_adrttm", inputMap.get(paramInPrefix + "kiki_stc_saki_adrttm"));
			// 37.機器設置先住所補記・部屋番号
			outputMap.put(paramOutPrefix + "kiki_stc_saki_adrrm", inputMap.get(paramInPrefix + "kiki_stc_saki_adrrm"));
			// 38.機器設置先電話番号
			outputMap.put(paramOutPrefix + "kiki_stc_sk_telno", inputMap.get(paramInPrefix + "kiki_stc_sk_telno"));
			// 39.機器設置先_契約者住所差異フラグ
			outputMap.put(paramOutPrefix + "kiki_stc_sk_ksh_ad_sai_flg", inputMap.get(paramInPrefix + "kiki_stc_sk_ksh_ad_sai_flg"));
			// 40.住所未確定フラグ
			outputMap.put(paramOutPrefix + "ad_mi_fix_flg", inputMap.get(paramInPrefix + "ad_mi_fix_flg"));
		}
		else
		{
			// 登録変更共通処理
			setAddUpdCmnTrn(bean, outputMap, kktkSvcCd, paramOutPrefix, searchinfoMap);
		}

		// 41.配送区分
		outputMap.put(paramOutPrefix + "haiso_div", inputMap.get(paramInPrefix + "haiso_div"));
		// 42.試用加入年月日
		outputMap.put(paramOutPrefix + "ftrial_kanyu_ymd", inputMap.get(paramInPrefix + "ftrial_kanyu_ymd"));
		// 43.試用期間終了年月日
		outputMap.put(paramOutPrefix + "ftrial_prd_endymd", inputMap.get(paramInPrefix + "ftrial_prd_endymd"));
		// 44.本加入年月日
		outputMap.put(paramOutPrefix + "honkanyu_ymd", inputMap.get(paramInPrefix + "honkanyu_ymd"));
		// 45.本加入移行期限年月日
		outputMap.put(paramOutPrefix + "honkanyu_iko_kigen_ymd", inputMap.get(paramInPrefix + "honkanyu_iko_kigen_ymd"));
		// 46.保証コード
		outputMap.put(paramOutPrefix + "hosho_cd", inputMap.get(paramInPrefix + "hosho_cd"));
		// 47.違約金発生コード
		outputMap.put(paramOutPrefix + "pnlty_hassei_cd", inputMap.get(paramInPrefix + "pnlty_hassei_cd"));
		// 48.異動区分
		if (searchinfoMap == null)
		{// 申込新規登録画面
			String idoDiv = getIdoDiv(bean.sendMessageString("申込フラグ", X31CWebConst.DATABEAN_GET_VALUE));
			outputMap.put(paramOutPrefix + "ido_div", idoDiv);
		}
		else
		{// 照査前登録画面
			String idoDiv = getIdoDiv(bean.sendMessageString("申込種別コード", X31CWebConst.DATABEAN_GET_VALUE));
			outputMap.put(paramOutPrefix + "ido_div", idoDiv);
		}
		// 49.ＣＡＳカード使用許諾年月日
		outputMap.put(paramOutPrefix + "cas_card_use_kyodak_ymd", inputMap.get(paramInPrefix + "cas_card_use_kyodak_ymd"));
		// 50.機器付加情報コード
		outputMap.put(paramOutPrefix + "kiki_huka_info_cd", inputMap.get(paramInPrefix + "kiki_huka_info_cd"));
		// 51.配送方法コード
		outputMap.put(paramOutPrefix + "haiso_way_cd", inputMap.get(paramInPrefix + "haiso_way_cd"));
		// 52.配送依頼指定年月日
		outputMap.put(paramOutPrefix + "haiso_req_shitei_ymd", inputMap.get(paramInPrefix + "haiso_req_shitei_ymd"));
		// 53.更新年月日時分秒(更新前)
		outputMap.put(paramOutPrefix + "upd_dtm_bf", inputMap.get(paramInPrefix + "last_upd_dtm"));
		// 54.サービスタイプ識別コード
		outputMap.put(paramOutPrefix + "svc_type_skbt_cd", getSvctypeSkbtCd(bean, searchinfoMap, kktkSvcCd));
		// 55.料金プランコード
		outputMap.put(paramOutPrefix + "pplan_cd", pplanCd);
		// 56.機器移転先移動実施者識別コード
		outputMap.put(paramOutPrefix + "kiki_itens_mv_jssis_skcd", inputMap.get(paramInPrefix + "kiki_itens_mv_jssis_skcd"));
		// 57.機器指定時管理場所識別コード
		outputMap.put(paramOutPrefix + "kiki_sti_ji_kriplace_skcd", inputMap.get(paramInPrefix + "kiki_sti_ji_kriplace_skcd"));
		// 58.機器指定時工事会社コード
		outputMap.put(paramOutPrefix + "kiki_sti_ji_kocomp_cd", inputMap.get(paramInPrefix + "kiki_sti_ji_kocomp_cd"));
		// 59.機器指定時工事会社棚コード
		outputMap.put(paramOutPrefix + "kiki_sti_ji_kocomp_slf_cd", inputMap.get(paramInPrefix + "kiki_sti_ji_kocomp_slf_cd"));
		// 60.機器指定時預託先オフィスコード
		outputMap.put(paramOutPrefix + "kiki_sti_ji_ytkskof_cd", inputMap.get(paramInPrefix + "kiki_sti_ji_ytkskof_cd"));
		// 61.機器指定時預託先オフィス棚コード
		outputMap.put(paramOutPrefix + "kiki_sti_ji_ytkskof_slf_cd", inputMap.get(paramInPrefix + "kiki_sti_ji_ytkskof_slf_cd"));
		// 62.回収機器有無
		outputMap.put(paramOutPrefix + "kaishu_kiki_um", inputMap.get(paramInPrefix + "kaishu_kiki_um"));
		// 63.サービス開始時配送状況識別コード
		outputMap.put(paramOutPrefix + "svc_sta_ji_his_jokyo_skcd", inputMap.get(paramInPrefix + "svc_sta_ji_his_jokyo_skcd"));
		
		String updDtemBf = (String)outputMap.get(paramOutPrefix + "upd_dtm_bf");

		if (updDtemBf == null || "".equals(updDtemBf))
		{
			outputMap.put(paramOutPrefix + "upd_dtm_bf", inputMap.get(paramInPrefix + "upd_dtm"));
		}

		// 機器送付先住所チェックレベル
		outputMap.put(paramOutPrefix + "kiki_sohus_ad_chk_lv", JKKStrConst.AD_CHK_LV2);

		// 機器設置先の住所コードが設定されていない場合、設置先の住所チェックを行わない。
		if (outputMap.get(paramOutPrefix + "kiki_stc_saki_ad_cd") != null
				&& !"".equals(outputMap.get(paramOutPrefix + "kiki_stc_saki_ad_cd")))
		{
			// 機器設置先住所チェックレベル
			outputMap.put(paramOutPrefix + "kiki_stc_ad_chk_lv", JKKStrConst.AD_CHK_LV2);
		}

		// 機器進捗登録フラグ設定処理の呼び出し
		setkikiPrgAddFlg(addPrgMap, kktkSvcCd, kktkSbtCd);
		
		return outputMap;
	}
	
	
	
	/**
	 * 同一回線直送機器情報変更初期データ取得処理
	 * <br>
	 * @param bean             データBean
	 * @param kktkSvcCd        機器提供サービスコード
	 * @param pplanCd          料金プランコード
	 * @param outputMap        データ出力先マップ
	 * @param outPrefix        データ出力先マップのプレフィックス
	 * @param inputMap         データ設定元マップ
	 * @param inPrefix         データ設定元マップのプレフィックス
	 * @param searchinfoMap    照査前照会情報マップ
	 * @param addPrgMap        進捗登録マップ
	 * @param isChgKkmdl       機器型式変更フラグ
	 * @param pcrsCd           料金コースコード
	 * @return                 出力データ格納マップ
	 * @throws Exception Exception
	 */
	@SuppressWarnings("unchecked")
	public static HashMap getUpdSameKisnCksKikiIniData(
			X31SDataBeanAccess bean,
			String kktkSvcCd,
			String pplanCd,
			HashMap outputMap,
			String outPrefix,
			HashMap inputMap,
			String inPrefix,
			HashMap searchinfoMap,
			HashMap addPrgMap,
			boolean isChgKkmdl, 
			String pcrsCd) throws Exception
	{
		// パラメータ.データ出力先マップのプレフィックス
		String paramOutPrefix = "";
		// パラメータ.データ設定元マップのプレフィックス
		String paramInPrefix = "";
		
		
		if (outPrefix != null)
		{
			paramOutPrefix = outPrefix;
		}
		if (inPrefix != null)
		{
			paramInPrefix = inPrefix;
		}
		
		// リンクＳＴＢフラグ
		String linkStbFlg = null;
		
		// 機器制御コード
		// 1:通常更新、2:機器設置先・機器送付先更新、3:機器送付先以外更新、4:型式更新、0:更新なし
		String kikiCtlCd = TRAN_CTL_CD_UPD_NON;

		// 機器提供サービスコードが"C024"(ｅｏ光多機能ルーター)
		if (JKKStrConst.KKTK_SVC_CD_TAKINORT.equals(kktkSvcCd))
		{
			// 同一回線ネットタブ機器情報制御コードが"1"(コミットあり)以外 かつ　同一回線電話タブ機器情報制御コードが"1"(コミットあり)以外
			if (!COMMIT_ARI.equals(bean.sendMessageString("同一回線ネットタブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE))
					&& !COMMIT_ARI.equals(bean.sendMessageString("同一回線電話タブ機器情報制御コード", X31CWebConst.DATABEAN_GET_VALUE)))
			{
				// 通常更新
				kikiCtlCd = TRAN_CTL_CD_UPD;
			}
			else
			{
				// 更新なし
				kikiCtlCd = TRAN_CTL_CD_UPD_NON;
			}
		}
		// 照査前照会情報マップがnull(申込新規登録)
		else if (searchinfoMap == null)
		{
			kikiCtlCd = TRAN_CTL_CD_UPD;
		}

		
		if (TRAN_CTL_CD_UPD_NON.equals(kikiCtlCd))
		{
			return outputMap;
		}

		// 機器提供サービス契約情報変更共通データ取得処理
		return getUpdKktkSvcKeiCommnData(
				bean, 
				kktkSvcCd, 
				pplanCd, 
				outputMap, 
				paramOutPrefix, 
				inputMap, 
				paramInPrefix, 
				searchinfoMap, 
				addPrgMap, 
				isChgKkmdl, 
				kikiCtlCd, 
				linkStbFlg, 
				pcrsCd);
	}
}
