/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUW10801SFLogic
*	ソースファイル名：FUW10801SFLogic.java
*	作成者			：富士通
*	日付			：2013年02月18日
*＜機能概要＞
*	eo光スティックレンタルサービス申込のビューロジッククラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v5.00		2013/02/20	FJ)大島		新規作成
*	v5.00		2013/03/21	FJ)大島		IT2-2013-0000316:機器提供サービス契約ステータスのチェック外し対応
*	v8.00		2014/01/27  FJ)文元	   【ANK-1589-00-00】消費増税に伴う料金施策
*
**********************************************************************/
package eo.web.webview.FUW10801SF;

import static eo.common.constant.JPCModelConstant.FUNC_CD_1;
import static eo.common.constant.JPCModelConstant.FUNC_CD_2;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SWebLog;
import com.fujitsu.futurity.web.x31.X31CMessageResult.X31CMessageMoreInfo;
import com.fujitsu.futurity.web.x33.beans.X33VDataTypeList;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JZMAdOutputEdit;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0262_FUSV0262OPDBMapper;
import eo.web.webview.mapping.FUSV0263_FUSV0263OPDBMapper;

/**
 * eo光スティックレンタルサービス申込のビューロジック
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW10801SFLogic extends JCCWebBusinessLogic
{
	/** [最大機器提供サービス数]プロパティファイル取得クエリ */
	private static final String QUERY_MAX_KKTK_SVC_CNT_PATH = "DISPSETTING/SETTING[@screenId='FUW10801']/DISPCTL[@groupid='MAX_KKTK_SVC_CNT']";
	/** [最大列数]プロパティファイル取得クエリ */
	private static final String QUERY_MAX_COL_CNT_PATH = "DISPSETTING/SETTING[@screenId='FUW10801']/DISPCTL[@groupid='MAX_COL_CNT']";
	/** [ボタンクラス名]プロパティファイル取得クエリ */
	private static final String QUERY_BTN_CLASS_PATH = "DISPSETTING/SETTING[@screenId='FUW10801']/DISPCTL[@groupid='BTN_CLASS']";
	/** [提供方法]プロパティファイル取得クエリ */
	private static final String QUERY_TK_WAY_PATH = "DISPSETTING/SETTING[@screenId='FUW10801']/DISPTEXT[@groupid='TK_WAY']";

	/** [料金情報]プロパティファイル取得属性名 */
	private static final String QUERY_ATTR_NAME = "id";
	/** 画面制御プロパティ取得キー 最大機器提供サービス数 */
	private static final String MAX_KKTK_SVC_CNT = "MAX_KKTK_SVC_CNT";
	/** 画面制御プロパティ取得キー 最大列数 */
	private static final String MAX_COL_CNT = "MAX_COL_CNT";
	/** 画面表示文言取得キー(提供方法(レンタル) ) */
	private static final String KEY_TK_WAY_RENT = "TK_WAY_RENT";

	/** eo光スティック申込（初期表示）マップ */
	private static final String SC_TITLE_FUSV026201CC = "FUSV026201CC";
	/** テンプレートID(機器提供サービス契約登録) */
	private static final String TEMPLATE_ID_SVC_KEI_KKTK_TRK = "EKK0341D010";

	/** Mapキー：サービス契約一覧照会（各種通信機器情報取得）明細 */
	private static final String MAP_KEY_EKK0341B512CBSMSG1LIST = "EKK0341B512CBSMsg1List";
	/** Mapキー：サービス契約一覧照会（各種通信機器情報取得）明細 */
	private static final String MAP_KEY_EKK0081B520CBSMSG1LIST = "EKK0081B520CBSMsg1List";
	/** Mapキー：宅内機器型式／付属品型式一覧照会明細 */
	private static final String TKKIKI_MDL_LIST = "tkkiki_mdl_list";
	/** Mapキー：料金プラン一覧照会 */
	private static final String PPLAN_LIST = "pplan_list";
	/** Mapキー：料金プラン固定単価（オプション申込料金）明細 */
	private static final String PPLAN_KTTANKA_LIST = "pplan_kttanka_list";
	/** Mapキー：料金コース_機器提供サービス一意照会明細 */
	private static final String PCRS_KKTKSVC_LIST = "pcrs_kktksvc_list";
	/** Mapキー：料金コース_機器型式対象料金コース一意照会明細 */
	private static final String KKTK_PPLAN_BETU_KIKI_MDL_LIST = "kktk_pplan_betu_kiki_mdl_list";

	/** アイテムID(upd_dtm_bf) */
	private static final String ITEM_ID_UPD_DTM_DF = "upd_dtm_bf";
	/** 申込完了メールID */
	private static final String MSKM_COMP_MAIL_ID = "FUW108_1";
	/** サービスユースケースID：eo光スティック申込(初期表示) */
	private static final String SVC_USECASE_ID_FUSV0262 = "FUSV0262";
	/** サービスユースケースID：eo光スティック申込(申込) */
	private static final String SVC_USECASE_ID_FUSV0263 = "FUSV0263";
	/** 月額単位 */
	private static final String GTGK_HI_TANI = " 円/台";
	/** 台(お申し込み台数：確認画面表示用) */
	private static final String DAI = "台";
	/** ipStb */
	private static final String IPSTB = "ipStb";

	/** TAKNKIKI_MODEL_CD：宅内機器型式コード */
	private static final String TAKNKIKI_MODEL_CD = "taknkiki_model_cd";
	/** KKTK_SVC_KEI_NO：機器提供サービス契約番号 */
	private static final String KKTK_SVC_KEI_NO = "kktk_svc_kei_no";
	/** KKTK_SVC_KEI_STAT：機器提供サービス契約ステータス */
	private static final String KKTK_SVC_KEI_STAT = "kktk_svc_kei_stat";
	/** PPLAN_KOTEI_AMNT：料金プラン固定単価 */
	private static final String PPLAN_KOTEI_AMNT = "pplan_kotei_amnt";
	/** PCRS_CD：料金コースコード */
	private static final String PCRS_CD = "pcrs_cd";
	/** PPLAN_CD：料金プランコード */
	private static final String PPLAN_CD = "pplan_cd";
	/** KKTK_SVC_CD：機器提供サービスコード */
	private static final String KKTK_SVC_CD = "kktk_svc_cd";
	/** TAKNKIKI_SBT_CD：宅内機器種別コード */
	private static final String TAKNKIKI_SBT_CD = "taknkiki_sbt_cd";

	/**
	 * 初期処理
	 * <br>
	 * @return	処理結果
	 * @throws Exception	例外
	 */
	public boolean init() throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ 初期処理(init) START ★");

		// ****************************************************************************************************
		// *初期設定
		// *****************************************************************************************************
		// 画面情報を取得し、サービスフォームBeanに設定
		JFUWebCommon.getScreenInfo(this);
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean宣言
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ----------------------------------------------
		// 共有フォームBean情報の取得
		// ----------------------------------------------
		setCommonInfoBeanToSvcFormBean(serviceInfoBean, commonInfoBean);

		// ----------------------------------------------
		// サービス呼出処理
		// ----------------------------------------------
		callSvcFUSV0262(serviceInfoBean, commonInfoBean, outputMap);

		// ----------------------------------------------
		// サービスフォームBean設定
		// ----------------------------------------------
		setSvcFormBean(serviceInfoBean, outputMap);

		// ----------------------------------------------
		// 申込台数リスト設定
		// ----------------------------------------------
		setMskmSbtList(serviceInfoBean, commonInfoBean, outputMap);

		// 料金表表示現在日設定処理
		JFUWebCommon.setPrcDspNowDay(this);

		// ****************************************************************************************************
		// * 遷移先画面情報の設定(eo光スティック申込画面へ遷移)
		// *****************************************************************************************************
		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getScreenId(this));
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW10801);

		X31SWebLog.DEBUG_LOG.debug("★ 初期処理(init) END ★");

		return true;

	}

	/**
	 * 確認処理
	 * <br>
	 * @return	処理結果
	 * @throws Exception	例外
	 */
	public boolean cfm() throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ 確認処理（cfm） START ★");

		// ****************************************************************************************************
		// *初期設定
		// *****************************************************************************************************
		// 画面情報を取得し、サービスフォームBeanに設定
		JFUWebCommon.getScreenInfo(this);
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean宣言
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// ----------------------------------------------
		// お申し込み台数設定
		// ----------------------------------------------
		setMskmCnt(serviceInfoBean);

		// ----------------------------------------------
		// 登録サービス（FUSV0263）呼出用パラメータ設定
		// ----------------------------------------------
		setFUSV0263Parameter(serviceInfoBean);

		// ----------------------------------------------
		// サービス呼出処理
		// ----------------------------------------------
		callSvcFUSV0263(serviceInfoBean, commonInfoBean, FUNC_CD_2);

		// ****************************************************************************************************
		// * 遷移先画面情報の設定(eo光スティックレンタルサービス申込画面へ遷移)
		// *****************************************************************************************************
		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW10802);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW10802);

		X31SWebLog.DEBUG_LOG.debug("★ 確認処理（cfm） END ★");

		return true;

	}

	/**
	 * 登録処理
	 * <br>
	 * @return	処理結果
	 * @throws Exception	例外
	 */
	public boolean mskm() throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ 登録処理(mskm) START ★");

		// ****************************************************************************************************
		// *初期設定
		// *****************************************************************************************************
		// 画面情報を取得し、サービスフォームBeanに設定
		JFUWebCommon.getScreenInfo(this);
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean宣言
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// 利用可能サービスチェック
		JFUWebCommon.checkCommonRelation(this, SVC_USECASE_ID_FUSV0263);

		// ----------------------------------------------
		// サービス呼出処理
		// ----------------------------------------------

		callSvcFUSV0263(serviceInfoBean, commonInfoBean, FUNC_CD_1);

		// 申込完了メール送信部品呼出処理の引数に台数を設定
		String cnt = serviceInfoBean.sendMessageString(FUW10801SFConst.MSKM_CNT, X31CWebConst.DATABEAN_GET_VALUE);

		String[] textList = { cnt };

		// 申込完了メール送信部品呼出処理
		JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID, null, textList);

		// ****************************************************************************************************
		// * 遷移先画面情報の設定(eo光スティックレンタルサービス申込完了画面へ遷移)
		// *****************************************************************************************************
		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW10803);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW10803);

		X31SWebLog.DEBUG_LOG.debug("★ 登録処理(mskm) END ★");

		return true;

	}

	/**
	 * 戻るボタン押下処理
	 * <br>
	 * @return	処理結果
	 * @throws Exception	例外
	 */
	public boolean back() throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ 戻るボタン押下処理（back） START ★");

		// ****************************************************************************************************
		// *初期設定
		// *****************************************************************************************************
		// 画面情報を取得し、サービスフォームBeanに設定
		JFUWebCommon.getScreenInfo(this);
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// ****************************************************************************************************
		// * 遷移先画面情報の設定(eo光スティックレンタルサービス申込画面へ遷移)
		// *****************************************************************************************************
		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW10801);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW10801);

		X31SWebLog.DEBUG_LOG.debug("★ 戻るボタン押下処理（back） END ★");

		return true;

	}

	/**
	 * サービス呼出処理（FUSV0262_eo光スティック申込(初期表示)）
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @param outputMap 		SIFアウトプット
	 * @throws Exception		すべての例外
	 */
	private void callSvcFUSV0262(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, HashMap<String, Object> outputMap) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ サービス呼出処理（FUSV0262_eo光スティック申込(初期表示)）(callSvcFUSV0262) START ★");

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = { bean };

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_USECASE_ID_FUSV0262);

		// 設定値格納用マップを生成。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();

		// DataBean-BPマッピング
		FUSV0262_FUSV0262OPDBMapper mapper = new FUSV0262_FUSV0262OPDBMapper();

		// ----------------------------------------------
		// 画面定義情報の取得
		// ----------------------------------------------
		// 画面表示文言_提供方法
		Map<String, String> dispDefMapTW = JFUWebCommon.getDispItemsAsMap(QUERY_TK_WAY_PATH, QUERY_ATTR_NAME);

		// -------------------------------------
		// 提供方法 tk_way(現在は固定値を設定。レンタル："02")
		// -------------------------------------
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.TK_WAY, dispDefMapTW.get(KEY_TK_WAY_RENT));

		// -------------------------------------
		// 機器提供種別コード kktk_sbt_cd
		// -------------------------------------
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KKTK_SBT_CD, JFUStrConst.CD00212_02);

		// サービスの入力値設定
		// eo光スティック申込照会コモンコンポーネント部品上りマッピング
		mapper.setFUSV026201CC(paramBean, inputMap, FUNC_CD_1);

		try
		{
			// サービス呼出
			invokeService(paramMap, inputMap, outputMap);
		}
		// 業務エラー例外（JCCWebServiceException）が発生している場合
		catch (JCCWebServiceException se)
		{
			// システムエラー
			X31SWebLog.DEBUG_LOG.info("----- FUW10801_callSvcFUSV0262() サービス実行エラー -----");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// 下りマッピング
		mapper.getFUSV026201CC(paramBean, outputMap);

		X31SWebLog.DEBUG_LOG.debug("★ サービス呼出処理（FUSV0262_eo光スティック申込(初期表示)）(callSvcFUSV0262) END ★");

	}

	/**
	 * サービスフォームBean設定
	 * <br>
	 * @param bean			サービスフォームBean
	 * @param outputMap		 SIFアウトプット
	 * @throws Exception	すべての例外
	 */
	@SuppressWarnings("unchecked")
	private void setSvcFormBean(X31SDataBeanAccess bean, HashMap<String, Object> outputMap) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ サービスフォームBean設定（setSvcFormBean） START ★");

		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		String prc = JFUStrConst.S_ZERO; // ローカル変数.料金

		String gene_add_dtm = JFUStrConst.EMPTY;
		String pcrsKktksvcListModelCd = JFUStrConst.EMPTY;
		String kktk_svc_kei_no = JFUStrConst.EMPTY;
		String kktk_svc_kei_stat = JFUStrConst.EMPTY;
		HashMap<String, ArrayList<HashMap<String, String>>> fusv0262CC1Map = null;
		int kei_kiki_cnt = 0;

		if (outputMap.containsKey(SC_TITLE_FUSV026201CC))
		{
			fusv0262CC1Map = (HashMap<String, ArrayList<HashMap<String, String>>>)outputMap.get(SC_TITLE_FUSV026201CC);
		}

		if (fusv0262CC1Map == null)
		{
			X31SWebLog.DEBUG_LOG.debug("【eo光スティック申込（初期表示）マップ情報 未設定エラー】");
			// システムエラーをスロー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// 機器提供サービス契約一覧照会（各種通信機器情報取得）明細
		// パラメータ異常ならば終了
		ArrayList<HashMap<String, String>> all_kiki_list = null;
		if (fusv0262CC1Map == null || !fusv0262CC1Map.containsKey(MAP_KEY_EKK0341B512CBSMSG1LIST))
		{
			all_kiki_list = new ArrayList<HashMap<String, String>>();
		}
		else
		{
			all_kiki_list = fusv0262CC1Map.get(MAP_KEY_EKK0341B512CBSMSG1LIST);
		}

		// サービス契約一覧照会（各種通信機器情報取得）明細
		// パラメータ異常ならば終了
		if (fusv0262CC1Map == null || !fusv0262CC1Map.containsKey(MAP_KEY_EKK0081B520CBSMSG1LIST))
		{
			// サービス契約に契約中レコードが存在しないためエラー
			X31SWebLog.DEBUG_LOG.info("----- FUW10801_callSvcFUSV0262() サービス契約に契約中レコードが存在しないためエラー -----");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}
		// 料金プラン固定単価（オプション申込料金）明細
		ArrayList<HashMap<String, String>> pplan_kttanka_list = fusv0262CC1Map.get(PPLAN_KTTANKA_LIST);

		// 機器型式対象料金コース一意照会明細
		ArrayList<HashMap<String, String>> kkktsk_trk_list = fusv0262CC1Map.get(KKTK_PPLAN_BETU_KIKI_MDL_LIST);

		// 登録しようとしている宅内機器型式コードを取得
		pcrsKktksvcListModelCd = kkktsk_trk_list.get(0).get(TAKNKIKI_MODEL_CD);

		int allKikiListCnt = all_kiki_list.size();

		for (int i = 0; i < allKikiListCnt; i++)
		{
			HashMap<String, String> all_kiki_list_dtl = all_kiki_list.get(i);
			kktk_svc_kei_no = this.getValue(all_kiki_list_dtl, KKTK_SVC_KEI_NO);
			kktk_svc_kei_stat = this.getValue(all_kiki_list_dtl, KKTK_SVC_KEI_STAT);

			// 機器提供サービスコードがC023(eo光スティック)の場合
			// かつ、機器提供サービス契約ステータスが「910：解約済み」または「920：キャンセル済み」以外の場合、契約機器台数として加算
			if (JFUStrConst.KK0771_KKTK_SVC_CD_C023.equals(this.getValue(all_kiki_list_dtl, "kktk_svc_cd"))
					&& !(JFUStrConst.CD00037_910.equals(kktk_svc_kei_stat) || JFUStrConst.CD00037_920.equals(kktk_svc_kei_stat)))
			{
				kei_kiki_cnt++;
			}
		}

		// ローカル変数.料金
		prc = this.getValue(pplan_kttanka_list.get(0), PPLAN_KOTEI_AMNT);
		// 有料フラグ
		Boolean payFlag = false;

		if (Integer.parseInt(prc) > 0)
		{
			// 固定単価が0円以上の場合
			payFlag = true;

		}
		else
		{
			// 固定単価が0円の場合
			// 無料の場合
			// 無料表示用の基本料金情報を設定する。
			JFUWebCommon.setFreePrcInfoMap(outputMap, SC_TITLE_FUSV026201CC);
		}

		// ----------------------------------------------
		// 料金表マッピング(SC_TITLE_FUSV026201CC、EMPTY)
		// ----------------------------------------------
		JFUWebCommon.setPrcInfoArea(bean, outputMap, SC_TITLE_FUSV026201CC, JFUStrConst.EMPTY, JFUScreenConst.SCREEN_ID_FUW10801);

		// マンション区分
		bean.sendMessageBoolean(FUW10801SFConst.MANSION_DIV, X31CWebConst.DATABEAN_SET_VALUE, getMansionDiv(commonInfoBean, outputMap, payFlag));

		// フロント用定義ファイルを取得する
		Map<String, String> dispDefMap = JFUWebCommon.getDispItemsAsMap(QUERY_MAX_KKTK_SVC_CNT_PATH, QUERY_ATTR_NAME);

		String max_kktk_svc_cnt = dispDefMap.get(MAX_KKTK_SVC_CNT);

		// 最大機器提供サービス数チェック
		if (kei_kiki_cnt + 1 > Integer.parseInt(max_kktk_svc_cnt))
		{
			// これ以上申込機器が申し込めないためエラー
			X31SWebLog.DEBUG_LOG.info("----- FUW10801_callSvcFUSV0262() これ以上申込機器が申し込めないためエラー -----");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0105);
		}

		// ----------------------------------------------
		// 登録機器情報設定
		// ----------------------------------------------
		setKktkSvkeiAddInfo(bean, commonInfoBean, kktk_svc_kei_no, gene_add_dtm, pcrsKktksvcListModelCd, outputMap);

		// 利用中台数 kei_kiki_cnt
		bean.sendMessageString(FUW10801SFConst.KEI_KIKI_CNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(kei_kiki_cnt));

		// 異動区分 ido_div
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.IDO_DIV, JFUStrConst.CD00576_00026);

		// ----------------------------------------------
		// 端末説明の設定
		// ----------------------------------------------
		setMdlInfoArea(bean, prc, pplan_kttanka_list);

		X31SWebLog.DEBUG_LOG.debug("★ サービスフォームBean設定（setSvcFormBean） END ★");

	}

	/**
	 * ボタンの表示処理 
	 * 
	 * <br>
	 * @param bean				データBean
	 * @param commonInfoBean	共有フォームBean情報マップ
	 * @param outputMap			SIFアウトプット
	 * @throws Exception		すべての例外
	 */
	@SuppressWarnings("unchecked")
	private void setMskmSbtList(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, HashMap<String, Object> outputMap) throws Exception
	{

		// 現契約台数を取得する
		int keikktkcnt = Integer.parseInt(bean.sendMessageString(FUW10801SFConst.KEI_KIKI_CNT, X31CWebConst.DATABEAN_GET_VALUE));

		// フロント用定義ファイルから最大機器提供サービス数を取得する
		Map<String, String> dispDefMapMaxSvc = JFUWebCommon.getDispItemsAsMap(QUERY_MAX_KKTK_SVC_CNT_PATH, QUERY_ATTR_NAME);
		int max_kktk_svc_cnt = Integer.parseInt(dispDefMapMaxSvc.get(MAX_KKTK_SVC_CNT));

		// 最大機器提供サービス数から現契約台数を引き、申込可能台数を設定する
		int mskmPsbCnt = (max_kktk_svc_cnt - keikktkcnt);
		bean.sendMessageLong(FUW10801SFConst.MSKM_PSB_CNT, String.valueOf(mskmPsbCnt));

		// フロント用定義ファイルから最大列数を取得する
		Map<String, String> dispDefMapMaxCol = JFUWebCommon.getDispItemsAsMap(QUERY_MAX_COL_CNT_PATH, QUERY_ATTR_NAME);
		int maxColCnt = Integer.parseInt(dispDefMapMaxCol.get(MAX_COL_CNT));
		bean.sendMessageLong(FUW10801SFConst.MAX_COL_CNT, String.valueOf(maxColCnt));

		// フロント用定義ファイルからボタンクラス名を取得する
		Map<String, String> dispDefMapBtnClass = JFUWebCommon.getDispItemsAsMap(QUERY_BTN_CLASS_PATH, QUERY_ATTR_NAME);

		// ボタン親リストサイズ
		int btnOyaListSize = 0;

		// ボタン親リストサイズを設定
		if (mskmPsbCnt % maxColCnt == 0)
		{
			btnOyaListSize = mskmPsbCnt / maxColCnt;
		}
		else
		{
			btnOyaListSize = mskmPsbCnt / maxColCnt + 1;
		}

		// インデックス値
		int index = 1;

		// ボタン親リスト
		X33VDataTypeList btnOyaList = new X33VDataTypeList(btnOyaListSize);
		// ボタン子リスト
		X33VDataTypeList btnKoList = new X33VDataTypeList(maxColCnt);

		for (int n = 0; n < btnOyaListSize; n++)
		{
			// DataBean ボタン親リスト
			X31SDataBeanAccessArray btnOyaBeanArray = bean.getDataBeanArray(FUW10801SFConst.BTN_OYA_LIST);
			btnOyaBeanArray.addDataBean();
			X31SDataBeanAccess btnOyaDataType = btnOyaBeanArray.getDataBean(n);

			X31SDataBeanAccess btnKoDataBean = null;

			// 子リストからDatabeanに入れる
			for (int i = 0; i < maxColCnt; i++)
			{
				if (mskmPsbCnt + 1 == index)
				{
					break;
				}

				// DataBean ボタン子リスト
				X31SDataBeanAccessArray btnKoBeanArray = btnOyaDataType.getDataBeanArray(FUW10801SFConst.BTN_KO_LIST);
				btnKoBeanArray.addDataBean();
				btnKoDataBean = btnKoBeanArray.getDataBean(i);

				// ボタン表示列数
				StringBuffer btnColCnt = new StringBuffer(16);
				btnColCnt.append(String.valueOf(i));
				btnKoDataBean.sendMessageString(FUW10801SFConst.BTN_COL_CNT_02, X31CWebConst.DATABEAN_SET_VALUE, btnColCnt.toString());

				// ボタンクラス名
				StringBuffer btnClassNm = new StringBuffer(16);
				StringBuffer dispbtnClass = new StringBuffer(16);
				dispbtnClass.append(IPSTB);
				dispbtnClass.append(String.valueOf(index));
				btnClassNm.append(dispDefMapBtnClass.get(dispbtnClass.toString()));
				btnKoDataBean.sendMessageString(FUW10801SFConst.BTN_CLASS_NM_02, X31CWebConst.DATABEAN_SET_VALUE, btnClassNm.toString());

				// ボタンインデックス番号
				btnKoDataBean.sendMessageString(FUW10801SFConst.BTN_COL_INDEX_NM_02, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(index));

				// ボタン名称
				StringBuffer btnNm = new StringBuffer(16);
				btnNm.append(String.valueOf(index));
				btnNm.append(DAI);
				btnKoDataBean.sendMessageString(FUW10801SFConst.BTN_NM_02, X31CWebConst.DATABEAN_SET_VALUE, btnNm.toString());

				// 選択ボタン判定文字列
				StringBuffer btnSelStr = new StringBuffer(16);
				btnSelStr.append(String.valueOf(index));
				btnKoDataBean.sendMessageString(FUW10801SFConst.BTN_SEL_STR_02, X31CWebConst.DATABEAN_SET_VALUE, btnSelStr.toString());

				// インデックス値カウント
				index++;
			}
			btnKoList.add(btnKoDataBean);
			btnOyaList.add(btnKoList);
		}

		// データBeanに設定
		bean.sendMessageObject(FUW10801SFConst.BTN_OYA_LIST, X31CWebConst.DATABEAN_SET_VALUE, btnOyaList);

		// 初期表示のお申し込み台数に1をセット
		bean.sendMessageString(FUW10801SFConst.MSKM_CNT, X31CWebConst.DATABEAN_SET_VALUE , "1");
	}

	/**
	 * 共有フォームBean情報の取得(サービスフォームBeanに設定)
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @throws Exception		すべての例外
	 */
	private void setCommonInfoBeanToSvcFormBean(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean) throws Exception
	{

		X31SWebLog.DEBUG_LOG.debug("★共有フォームBean情報の取得(サービスフォームBeanに設定)（setCommonInfoBeanToSvcFormBean） START ★");

		// -------------------------------------------------
		// 共有フォームBean.WEB変更情報.現顧客契約情報
		// -------------------------------------------------
		X31SDataBeanAccess genCustKeiInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.GEN_CUST_KEI_INFO).getDataBean(0);
		setGenCustKeiInfo(bean, genCustKeiInfo);

		// -------------------------------------------------
		// 共有フォームBean.WEB変更情報.現顧客契約情報.サービス契約情報
		// -------------------------------------------------
		X31SDataBeanAccess svcKeiInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.SVC_KEI_INFO).getDataBean(0);
		setSvcKeiInfo(bean, svcKeiInfo);

		// -------------------------------------------------
		// 共有フォームBean.WEB変更情報.現顧客契約情報.サービス契約情報.サービス契約回線内訳情報
		// -------------------------------------------------
		X31SDataBeanAccess svcKeiKaisenUcwkInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.SVC_KEI_KAISEN_UCWK_INFO).getDataBean(0);
		setSvcKeiKaisenUcwkInfo(bean, svcKeiKaisenUcwkInfo);

		// -------------------------------------------------
		// 共有フォームBean.WEB変更情報.現顧客契約情報.請求契約情報
		// -------------------------------------------------
		X31SDataBeanAccess seikyKeiInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.SEIKY_KEI_INFO).getDataBean(0);
		setSeikyKeiInfo(bean, seikyKeiInfo);

		X31SWebLog.DEBUG_LOG.debug("★共有フォームBean情報の取得(サービスフォームBeanに設定)（setCommonInfoBeanToSvcFormBean） END ★");

	}

	/**
	 * 現顧客契約情報をサービスフォームBeanに設定します。
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param genCustKeiInfo	共有フォームBean.WEB変更情報.現顧客契約情報
	 * @throws Exception		すべての例外
	 */
	private void setGenCustKeiInfo(X31SDataBeanAccess bean, X31SDataBeanAccess genCustKeiInfo) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★現顧客契約情報をサービスフォームBeanに設定（setGenCustKeiInfo） START ★");

		// --------------------------------------------------------------------------------------------------------------------
		// 22 現顧客契約情報 gen_cust_kei_info
		// --------------------------------------------------------------------------------------------------------------------
		// SYSID sysid
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.SYSID, JFUWebCommon
				.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.SYSID_22));
		// お客様名 cust_nm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KEISHA_NM, JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo,
				CommonInfoCFConst.CUST_NM_22));
		// 契約者郵便番号 keisha_pcd
		String keisha_pcd = JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_PCD_22);
		// ※ハイフン編集して画面表示用の「郵便番号」に設定
		bean.sendMessageString(FUW10801SFConst.PCD, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.hyhunPcd(keisha_pcd));

		// 電話番号 telno
		bean.sendMessageString(FUW10801SFConst.KEISHA_TELNO, X31CWebConst.DATABEAN_SET_VALUE, genCustKeiInfo.sendMessageString(
				CommonInfoCFConst.KEISHA_TELNO_22, X31CWebConst.DATABEAN_GET_VALUE));

		// -------------------------------------
		// 住所 keisha_ad
		// -------------------------------------
		// 住所出力編集処理部品にて結合（パターン01）
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KEISHA_AD, JZMAdOutputEdit.getPtn01(JFUWebCommon.getDataBeanItemByPath(
				genCustKeiInfo, CommonInfoCFConst.KEISHA_STATE_NM_22), JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo,
				CommonInfoCFConst.KEISHA_CITY_NM_22), JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_OAZTSU_NM_22),
				JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_AZCHO_NM_22), JFUWebCommon.getDataBeanItemByPath(
						genCustKeiInfo, CommonInfoCFConst.KEISHA_BNCHIGO_22), JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo,
						CommonInfoCFConst.KEISHA_ADRTTM_22), JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_ADRRM_22)));

		X31SWebLog.DEBUG_LOG.debug("★現顧客契約情報をサービスフォームBeanに設定（setGenCustKeiInfo） END ★");

	}

	/**
	 * サービス契約情報をサービスフォームBeanに設定します。
	 * <br>
	 * @param bean			サービスフォームBean
	 * @param svcKeiInfo	共有フォームBean.WEB変更情報.現顧客契約情報.サービス契約情報
	 * @throws Exception	すべての例外
	 */
	private void setSvcKeiInfo(X31SDataBeanAccess bean, X31SDataBeanAccess svcKeiInfo) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★サービス契約情報をサービスフォームBeanに設定（setSvcKeiInfo） START ★");

		// --------------------------------------------------------------------------------------------------------------------
		// 23 サービス契約情報 svc_kei_info
		// --------------------------------------------------------------------------------------------------------------------
		// サービス契約番号 svc_kei_no
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.SVC_KEI_NO, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo,
				CommonInfoCFConst.SVC_KEI_NO_23));
		// 最終更新年月日時分秒 last_upd_dtm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.LAST_UPD_DTM_KEI, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo,
				CommonInfoCFConst.LAST_UPD_DTM_23));
		// 提供方式契約番号 tk_hoshiki_kei_no
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.TK_HOSHIKI_KEI_NO, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo,
				CommonInfoCFConst.TK_HOSHIKI_KEI_NO_23));

		X31SWebLog.DEBUG_LOG.debug("★サービス契約情報をサービスフォームBeanに設定（setSvcKeiInfo） END ★");

	}

	/**
	 * サービス契約回線内訳情報をサービスフォームBeanに設定します。
	 * <br>
	 * @param bean					サービスフォームBean
	 * @param svcKeiKaisenUcwkInfo	共有フォームBean.WEB変更情報.現顧客契約情報.サービス契約情報.サービス契約回線内訳情報
	 * @throws Exception			すべての例外
	 */
	private void setSvcKeiKaisenUcwkInfo(X31SDataBeanAccess bean, X31SDataBeanAccess svcKeiKaisenUcwkInfo) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★サービス契約回線内訳情報をサービスフォームBeanに設定（setSvcKeiKaisenUcwkInfo） START ★");

		// --------------------------------------------------------------------------------------------------------------------
		// 26 サービス契約回線内訳情報 svc_kei_kaisen_ucwk_info
		// --------------------------------------------------------------------------------------------------------------------

		// 回線場所住所未確定フラグ kisn_plc_ad_mi_fix_flg
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KISN_PLC_AD_MI_FIX_FLG, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KISN_PLC_AD_MI_FIX_FLG_26));
		// 回線場所＿契約者住所差異フラグ kaisen_plc_ksh_ad_sai_flg
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KAISEN_PLC_KSH_AD_SAI_FLG, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KAISEN_PLC_KSH_AD_SAI_FLG_26));
		// マンション物件番号 mansion_bukken_no
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.MANSION_BUKKEN_NO, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.MANSION_BUKKEN_NO_26));
		// 回線場所電話番号 kaisen_place_telno
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KAISEN_PLACE_TELNO, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KAISEN_PLACE_TELNO_26));
		// 回線場所住所コード kaisen_place_ad_cd
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KAISEN_PLACE_AD_CD, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KAISEN_PLACE_AD_CD_26));
		// 回線場所郵便番号 kaisen_place_pcd
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KAISEN_PLACE_PCD, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KAISEN_PLACE_PCD_26));
		// 回線場所都道府県名 kaisen_place_state_nm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KAISEN_PLACE_STATE_NM, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KAISEN_PLACE_STATE_NM_26));
		// 回線場所市区町村名 kaisen_place_city_nm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KAISEN_PLACE_CITY_NM, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KAISEN_PLACE_CITY_NM_26));
		// 回線場所大字通称名 kaisen_place_oaztsu_nm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KAISEN_PLACE_OAZTSU_NM, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KAISEN_PLACE_OAZTSU_NM_26));
		// 回線場所字丁目名 kaisen_place_azcho_nm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KAISEN_PLACE_AZCHO_NM, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KAISEN_PLACE_AZCHO_NM_26));
		// 回線場所番地号 kaisen_place_bnchigo
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KAISEN_PLACE_BNCHIGO, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KAISEN_PLACE_BNCHIGO_26));
		// 回線場所住所補記・建物名 kaisen_place_adrttm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KAISEN_PLACE_ADRTTM, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KAISEN_PLACE_ADRTTM_26));
		// 回線場所住所補記・部屋番号 kaisen_place_adrrm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KAISEN_PLACE_ADRRM, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KAISEN_PLACE_ADRRM_26));
		// 回線場所区画整理中フラグ kisn_plc_kkk_seiri_chu_flg
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.KISN_PLC_KKK_SEIRI_CHU_FLG, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo,
				CommonInfoCFConst.KISN_PLC_KKK_SEIRI_CHU_FLG_26));

		X31SWebLog.DEBUG_LOG.debug("★サービス契約回線内訳情報をサービスフォームBeanに設定（setSvcKeiKaisenUcwkInfo） END ★");

	}

	/**
	 * 請求契約情報をサービスフォームBeanに設定します。
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param seikyKeiInfo		共有フォームBean.WEB変更情報.現顧客契約情報.サービス契約情報.サービス契約回線内訳情報
	 * @throws Exception		すべての例外
	 */
	private void setSeikyKeiInfo(X31SDataBeanAccess bean, X31SDataBeanAccess seikyKeiInfo) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★請求契約情報をサービスフォームBeanに設定（setSeikyKeiInfo） START ★");

		// --------------------------------------------------------------------------------------------------------------------
		// 32 請求契約情報 seiky_kei_info
		// --------------------------------------------------------------------------------------------------------------------
		// 請求契約番号 seiky_kei_no
		JFUWebCommon.setDataBeanItemByPath(bean, FUW10801SFConst.SEIKY_KEI_NO, JFUWebCommon.getDataBeanItemByPath(seikyKeiInfo,
				CommonInfoCFConst.SEIKY_KEI_NO_32));

		X31SWebLog.DEBUG_LOG.debug("★請求契約情報をサービスフォームBeanに設定（setSeikyKeiInfo） END ★");

	}

	/**
	 * 料金表情報の設定
	 * <br>
	 * @param bean					サービスフォームBean
	 * @param gtgkPrc				月額料金
	 * @param pplan_kttanka_list	料金情報
	 * @throws Exception			すべての例外
	 */
	private void setMdlInfoArea(X31SDataBeanAccess bean, String gtgkPrc, ArrayList<HashMap<String, String>> pplan_kttanka_list) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★料金表情報の設定【レンタル】（setPrcInfoAreaRent） START ★");
		
		// ----------------------------------------------
		// サービスフォームBeanに料金情報設定
		// ----------------------------------------------
		// 料金 prc ←「月額料金」
		if (JFUStrConst.S_ZERO.equals(gtgkPrc))
		{
			bean.sendMessageString(FUW10801SFConst.PRC, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.FREE_LABEL);
		}
		else
		{
			// 税抜き計算を行なう
			String setGtgkPrc = JFUWebCommon.getCalcPlanPrcExcludeTax(this, gtgkPrc);
			
			StringBuffer prc = new StringBuffer();
			prc.append(setGtgkPrc);
			prc.append(GTGK_HI_TANI);
			bean.sendMessageString(FUW10801SFConst.PRC, X31CWebConst.DATABEAN_SET_VALUE, prc.toString());
		}

		// 料金単位 prc_tani ←「料金プラン固定単位コード名」
		bean.sendMessageString(FUW10801SFConst.PRC_TANI, X31CWebConst.DATABEAN_SET_VALUE, GTGK_HI_TANI);

		X31SWebLog.DEBUG_LOG.debug("★料金表情報の設定【レンタル】（setPrcInfoAreaRent） END ★");

	}

	/**
	 * お申し込み台数設定
	 * <br>
	 * 画面で選択されたボタンから台数を取得し、表示用お申し込み台数に設定します。
	 * <br>
	 * @param bean			サービスフォームBean
	 * @throws Exception	すべての例外
	 */
	private void setMskmCnt(X31SDataBeanAccess bean) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ お申し込み台数設定(setMskmCnt) START ★");

		// お申し込み台数を取得
		String mskmCnt = bean.sendMessageString(FUW10801SFConst.MSKM_CNT, X31CWebConst.DATABEAN_GET_VALUE);

		// 表示用お申し込み台数設定
		StringBuffer dsp_mskm_cnt = new StringBuffer(16);
		dsp_mskm_cnt.append(mskmCnt);
		dsp_mskm_cnt.append(JFUStrConst.HALF_SPACE);
		dsp_mskm_cnt.append(DAI);
		bean.sendMessageString(FUW10801SFConst.DSP_MSKM_CNT, X31CWebConst.DATABEAN_SET_VALUE, dsp_mskm_cnt.toString());

		X31SWebLog.DEBUG_LOG.debug("★ お申し込み台数設定(setMskmCnt) END ★");

	}

	/**
	 * 機器提供サービス契約登録情報設定
	 * <br>
	 * @param bean						サービスフォームBean
	 * @param commonInfoBean			共有フォームBean
	 * @param flg						登録機器情報設定フラグ
	 * @param kktk_svc_kei_no			機器提供サービス契約番号
	 * @param gene_add_dtm				世代登録年月日時分秒
	 * @param pcrsKktksvcListModelCd	宅内機器型式コード
	 * @param outputMap 				SIFアウトプット
	 * @throws Exception				すべての例外
	 */
	@SuppressWarnings("unchecked")
	private void setKktkSvkeiAddInfo(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, String kktk_svc_kei_no, String gene_add_dtm,
			String pcrsKktksvcListModelCd, HashMap<String, Object> outputMap) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ 機器提供サービス契約登録情報設定(setKktkSvkeiAddInfo) START ★");

		HashMap<String, ArrayList<HashMap<String, String>>> fusv0262CC1Map = null;
		ArrayList<HashMap<String, String>> tkkiki_mdl_list = new ArrayList<HashMap<String, String>>();
		ArrayList<HashMap<String, String>> pplan_list = new ArrayList<HashMap<String, String>>();
		ArrayList<HashMap<String, String>> pcrs_kktksvc_list = new ArrayList<HashMap<String, String>>();

		if (outputMap.containsKey(SC_TITLE_FUSV026201CC))
		{
			fusv0262CC1Map = (HashMap<String, ArrayList<HashMap<String, String>>>)outputMap.get(SC_TITLE_FUSV026201CC);
		}

		if (fusv0262CC1Map == null)
		{
			X31SWebLog.DEBUG_LOG.debug("【eo光スティック申込（初期表示）マップ情報 未設定エラー】");
			// システムエラーをスロー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// 宅内機器型式／付属品型式一意照会明細
		tkkiki_mdl_list = fusv0262CC1Map.get(TKKIKI_MDL_LIST);

		// 料金プラン一覧照会明細
		pplan_list = fusv0262CC1Map.get(PPLAN_LIST);

		// 料金コース_機器提供サービス一意照会明細
		pcrs_kktksvc_list = fusv0262CC1Map.get(PCRS_KKTKSVC_LIST);

		// -----------------------------------------------------------------------------------------------------------------------------
		// 登録機器リスト add_kiki_list
		// -----------------------------------------------------------------------------------------------------------------------------

		// 機器提供料金プラン別機器型式候補リスト
		X31SDataBeanAccessArray kktkPplanBetuKikiMdlList = bean.getDataBeanArray(FUW10801SFConst.KKTK_PPLAN_BETU_KIKI_MDL_LIST);
		// 機器提供料金プラン別機器型式候補リスト明細
		X31SDataBeanAccess kktkPplanBetuKikiMdlListDtl = kktkPplanBetuKikiMdlList.getDataBean(0);

		// 料金コース_機器提供サービス一意照会明細
		HashMap<String, String> pcrsKktksvcListDtl = pcrs_kktksvc_list.get(0);

		// 宅内機器型式リスト明細
		HashMap<String, String> tkkikiMdlListDtl = tkkiki_mdl_list.get(0);

		X31SDataBeanAccessArray add_kiki_list = bean.getDataBeanArray(FUW10801SFConst.ADD_KIKI_LIST);
		X31SDataBeanAccess genSvcKeiInfoList = commonInfoBean.getDataBeanArray(JFUWebCommon.SVC_KEI_INFO).getDataBean(0);

		String kk0341_prc_grp_cd = genSvcKeiInfoList.sendMessageString(CommonInfoCFConst.PRC_GRP_CD_23, X31CWebConst.DATABEAN_GET_VALUE);

		String kk0341_pcrs_cd = JFUWebCommon.getDataBeanItemByPath(kktkPplanBetuKikiMdlListDtl, FUW10801SFConst.PCRS_CD_03);

		String kk0341_pplan_cd = JFUStrConst.EMPTY;

		for (int i = 0; i < pplan_list.size(); i++)
		{
			if (pplan_list.get(i).get(PCRS_CD).equals(kk0341_pcrs_cd))
			{
				kk0341_pplan_cd = pplan_list.get(i).get(PPLAN_CD);
			}
		}

		String kk0341_kktk_svc_cd = pcrsKktksvcListDtl.get(KKTK_SVC_CD);

		String kk0341_taknkiki_model_cd = JFUWebCommon.getDataBeanItemByPath(kktkPplanBetuKikiMdlListDtl, FUW10801SFConst.TAKNKIKI_MODEL_CD);

		String kk0341_svc_kei_no = JFUWebCommon.getDataBeanItemByPath(bean, FUW10801SFConst.SVC_KEI_NO);

		String kk0341_sysid = JFUWebCommon.getDataBeanItemByPath(bean, FUW10801SFConst.SYSID);

		String kk0341_seiky_kei_no = JFUWebCommon.getDataBeanItemByPath(bean, FUW10801SFConst.SEIKY_KEI_NO);

		String kk0341_taknkiki_sbt_cd = tkkikiMdlListDtl.get(TAKNKIKI_SBT_CD);

		// 登録機器リスト add_kiki_list
		X31SDataBeanAccess kktkSvkeiAddListBean = add_kiki_list.addDataBean();
		// 料金グループコード kk0341_prc_grp_cd
		JFUWebCommon.setDataBeanItemByPath(kktkSvkeiAddListBean, FUW10801SFConst.KK0341_PRC_GRP_CD_10, kk0341_prc_grp_cd);
		// 料金コースコード kk0341_pcrs_cd
		JFUWebCommon.setDataBeanItemByPath(kktkSvkeiAddListBean, FUW10801SFConst.KK0341_PCRS_CD_10, kk0341_pcrs_cd);
		// 料金プランコード kk0341_pplan_cd
		JFUWebCommon.setDataBeanItemByPath(kktkSvkeiAddListBean, FUW10801SFConst.KK0341_PPLAN_CD_10, kk0341_pplan_cd);
		// 機器提供サービスコード kk0341_kktk_svc_cd
		JFUWebCommon.setDataBeanItemByPath(kktkSvkeiAddListBean, FUW10801SFConst.KK0341_KKTK_SVC_CD_10, kk0341_kktk_svc_cd);
		// 宅内機器型式コード kk0341_taknkiki_model_cd
		JFUWebCommon.setDataBeanItemByPath(kktkSvkeiAddListBean, FUW10801SFConst.KK0341_TAKNKIKI_MODEL_CD_10, kk0341_taknkiki_model_cd);
		// サービス契約番号 kk0341_svc_kei_no
		JFUWebCommon.setDataBeanItemByPath(kktkSvkeiAddListBean, FUW10801SFConst.KK0341_SVC_KEI_NO_10, kk0341_svc_kei_no);
		// SYSID kk0341_sysid
		JFUWebCommon.setDataBeanItemByPath(kktkSvkeiAddListBean, FUW10801SFConst.KK0341_SYSID_10, kk0341_sysid);
		// 請求契約番号 kk0341_seiky_kei_no
		JFUWebCommon.setDataBeanItemByPath(kktkSvkeiAddListBean, FUW10801SFConst.KK0341_SEIKY_KEI_NO_10, kk0341_seiky_kei_no);
		// 宅内機器種別コード kk0341_taknkiki_sbt_cd
		JFUWebCommon.setDataBeanItemByPath(kktkSvkeiAddListBean, FUW10801SFConst.KK0341_TAKNKIKI_SBT_CD_10, kk0341_taknkiki_sbt_cd);
		// 異動区分 ido_div 
		JFUWebCommon.setDataBeanItemByPath(kktkSvkeiAddListBean, FUW10801SFConst.IDO_DIV_10, JFUStrConst.CD00576_00026);
		// 機器提供サービス契約番号
		JFUWebCommon.setDataBeanItemByPath(kktkSvkeiAddListBean, FUW10801SFConst.KK0341_KKTK_SVC_KEI_NO_10, kktk_svc_kei_no);
		// 世代登録年月日時分秒（機器）
		JFUWebCommon.setDataBeanItemByPath(kktkSvkeiAddListBean, FUW10801SFConst.KK0341_GENE_ADD_DTM_10, gene_add_dtm);

		X31SWebLog.DEBUG_LOG.debug("★ 機器提供サービス契約登録情報設定(setKktkSvkeiAddInfo) END ★");

	}

	/**
	 * 引数mapから引数keyに該当するvalue値を取得します。
	 * <br/>
	 * @param map Value取得対象のMap
	 * @param key MapからValueを取得するKey
	 * @return 指定されたkeyに対応するValue(nullの場合は空文字)
	 */
	private String getValue(final Map<String, String> map, final String key)
	{
		if (map == null || key == null)
		{
			return JFUStrConst.EMPTY;
		}

		String value = map.get(key);
		if (value == null)
		{
			return JFUStrConst.EMPTY;
		}

		return value;
	}

	/**
	 * サービス呼出処理（FUSV0263_eo光スティック申込(申し込む)）
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @param func_cd			機能コード
	 * @throws Exception		すべての例外
	 */
	private void callSvcFUSV0263(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, String func_cd) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ サービス呼出処理（FUSV0263_eo光スティックレンタルサービス申込(申し込む)）(callSvcFUSV0263) START ★");

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = { bean, commonInfoBean };

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_USECASE_ID_FUSV0263);

		// 設定値格納用マップを生成。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// DataBean-BPマッピング
		FUSV0263_FUSV0263OPDBMapper mapper = new FUSV0263_FUSV0263OPDBMapper();

		// サービスの入力値設定
		// eo光スティック申込（申し込む）作業項目マップ01上りマッピング
		mapper.setFUSV0263WORK01(paramBean, inputMap, func_cd);
		// 申込内容承認登録上りマッピング
		mapper.setFUSV026301SC(paramBean, inputMap, func_cd);
		// eo光スティック申込み登録コモンコンポーネント部品上りマッピング
		mapper.setFUSV026301CC(paramBean, inputMap, func_cd);
		// 進捗情報登録上りマッピング
		mapper.setFUSV026302SC(paramBean, inputMap, func_cd);
		// 申込明細照査・後続業務依頼上りマッピング
		mapper.setFUSV026303SC(paramBean, inputMap, func_cd);

		try
		{
			// サービス呼出
			invokeService(paramMap, inputMap, outputMap);
		}
		// 業務エラー例外（JCCWebServiceException）が発生している場合
		catch (JCCWebServiceException se)
		{
			X31SWebLog.DEBUG_LOG.info("----- FUW10801_callSvcFUSV0263() サービス実行エラー -----");
			checkInsertErr(se);
		}

		X31SWebLog.DEBUG_LOG.debug("★ サービス呼出処理（FUSV0263_eo光スティックレンタルサービス申込(申し込む)）(callSvcFUSV0263) END ★");

	}

	/**
	 * 登録サービス（FUSV0263）呼出用パラメータ設定<br>
	 * ※FUW10801/FUW10802共通処理
	 * <br>
	 * @param serviceInfoBean	サービスフォームBean
	 * @throws Exception		すべての例外
	 */
	private void setFUSV0263Parameter(X31SDataBeanAccess serviceInfoBean) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ 登録サービス（FUSV0263）呼出用パラメータ設定(setFUSV0263Parameter) START ★");

		// 異動理由明細
		X31SDataBeanAccess idoDtlList = JFUWebCommon.createAndGetDataBeanTypeByPath(serviceInfoBean, FUW10801SFConst.IDO_DTL_LIST);
		idoDtlList.sendMessageString(FUW10801SFConst.IDO_RSN_CD_12, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00846_56);

		// 申込登録明細
		X31SDataBeanAccess mskmDtlList = JFUWebCommon.createAndGetDataBeanTypeByPath(serviceInfoBean, FUW10801SFConst.MSKM_DTL_LIST);
		// 申込登録明細 申込形態コード
		mskmDtlList.sendMessageString(FUW10801SFConst.MSKM_FORM_CD_11, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00591_01);

		X31SWebLog.DEBUG_LOG.debug("★ 登録サービス（FUSV0263）呼出用パラメータ設定(setFUSV0263Parameter) END ★");

	}

	/**
	*  登録時のエラー内容判定
	* <br>
	* @param se
	* @return 処理結果
	*/
	private void checkInsertErr(JCCWebServiceException se)
	{
		// 例外情報を取得
		X31CMessageResult msgResult = se.getMessageList();
		X31CMessageMoreInfo[] moreInfo = msgResult.getMessageMoreInfoList();
		X31CMessageMoreInfo info = moreInfo[0];// 関連チェック系は必ずエラーが1つのため0番目から取得する。
		String templateid = info.getTemplateId();
		String itemid = info.getItemId();
		String status = info.getStatus();
		String errFlg = info.getItemCheckErr();

		// ステータスが"1100"（内部スキーマ関連チェックエラー）または"1400"（概念スキーマの関連チェックでエラー発生)
		// または"1300"（外部スキーマの相関チェックでエラー発生)の場合
		if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) || String.valueOf(JPCModelConstant.ENTITY_RELATION_ERR).equals(status)
				|| String.valueOf(JPCModelConstant.STATUSTRANS_ERR).equals(status)
				|| String.valueOf(JPCModelConstant.TEMPLATE_CORRELATION_ERR).equals(status))
		{
			// テンプレートIDが"EKK0341D010"(機器提供サービス契約登録)、かつエラーフラグが"EA"の場合
			if (TEMPLATE_ID_SVC_KEI_KKTK_TRK.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg))
			{
				// アイテムIDが"upd_dtm_df"(更新年月日時分秒(更新前))の場合
				if (ITEM_ID_UPD_DTM_DF.equals(itemid))
				{
					// 業務共通例外クラス："0201"（お客様情報変更エラー）
					X31SWebLog.DEBUG_LOG.info("----- FUW10801_checkInserErr() サービス契約料金プラン変更EAエラー -----");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0201);
				}
			}
		}

		// 業務共通例外クラス："0002"（システムエラー）
		X31SWebLog.DEBUG_LOG.info("----- FUW10801_checkInserErr() システムエラー -----");
		throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);

	}

	/**
	 * マンション区分の情報を取得します。 <BR>
	 * 
	 * @param commoninfoBean	共有フォームBean
	 * @param outputMap			SIFアウトプット
	 * @param payFlag			有料フラグ
	 * @return 結果(true:マンション(全戸一括) false:マンション(全戸一括)以外)
	 */
	private Boolean getMansionDiv(X31SDataBeanAccess commoninfoBean, HashMap<String, Object> outputMap, boolean payFlag)
	{

		Boolean mansionDiv = false;

		// WEB変更情報
		X31SDataBeanAccess webChgInfoBean = commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		// 現顧客情報
		X31SDataBeanAccess genCustKeiInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0);
		// サービス契約情報
		X31SDataBeanAccess svcKeiInfoBean = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO).getDataBean(0);
		// 料金グループコード
		String prcGrpCd = svcKeiInfoBean.sendMessageString(CommonInfoCFConst.PRC_GRP_CD_23, X31CWebConst.DATABEAN_GET_VALUE);
		// 加入契約支払方式コード
		String kanyuKeiPayHoshikiCd =
				svcKeiInfoBean.sendMessageString(CommonInfoCFConst.KANYU_KEI_PAY_HOSHIKI_CD_23, X31CWebConst.DATABEAN_GET_VALUE);

		// 料金クループコードが"04"(ネットマンション)、かつ、加入契約支払方式コードが"003"(全戸一括)
		// かつ、固定単価または初期費用が有料の場合、マンション区分にTRUEを設定する
		if (JFUStrConst.CD00133_04.equals(prcGrpCd) && JFUStrConst.CD01216_003.equals(kanyuKeiPayHoshikiCd) && (payFlag))
		{
			mansionDiv = true;
		}

		return mansionDiv;
	}
}