/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUW11801SFLogic
*	ソースファイル名：FUW11801SFLogic.java
*	作成者			：富士通
*	日付			：2016年01月29日
*＜機能概要＞
*	契約内容通知書照会のビューロジッククラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v23.0.0		2016/01/29	FJ)横山		ANK-2737-00-00_消費者保護ルールの見直し対応　新規作成
*   v71.00      2024/04/12  FJ) 張本    【ANK-4468-00-00】eo光ネット「シンプルプラン」追加対応
*   v73.00      2024/11/22  FJ)浅井     【ANK-4427-00-00】ANK-4427-00-00_NTT卸対応
*   v74.0.0     2025/03/17  FJ)西川葵   【ANK-4669-00-00】2025年サービス基本料金値上げ対応  事前周知対応
**********************************************************************/
package eo.web.webview.FUW11801SF;


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.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
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.FUSV0293_FUSV0293OPDBMapper;
import eo.web.webview.mapping.FUSV0294_FUSV0294OPDBMapper;
import eo.web.webview.mapping.FUSV0296_FUSV0296OPDBMapper;

/**
 * 契約内容通知書照会のビューロジッククラスです。
 * <p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW11801SFLogic extends JCCWebBusinessLogic
{
	/** サービスID */
	private static final String USECASE_ID_FUSV0293 = "FUSV0293";
	/** サービスID */
	private static final String USECASE_ID_FUSV0294 = "FUSV0294";
	/** サービスID */
	private static final String USECASE_ID_FUSV0296 = "FUSV0296";

	/** DataBean項目：通知書選択有無　0:無 */
	private static final String TCHUCHISHO_SELECT_NS = "0";
	/** DataBean項目：通知書選択有無　1:有 */
	private static final String TCHUCHISHO_SELECT_AR = "1";
	/** DataBean項目：表示年月日　空 */
	private static final String DSP_YMD_BLANK = "99999999";
	/** 通知書選択：画面選択値　0:空 */
	private static final String SELECT_TCHUCHISHO_BRANK = "0";
	/** 契約内容通知書年月日_文字列の長さ（最小値） */
	private static final 	int TCHUCHISHO_YMD_LENGTH = 8;
	/** 契約内容通知書年月日_区切り（年）_開始 */
	private static final 	int TCHUCHISHO_YEAR_START_IDX = 0;
	/** 契約内容通知書年月日_区切り（年）_終了 */
	private static final 	int TCHUCHISHO_YEAR_END_IDX = 4;
	/** 契約内容通知書年月日_区切り（月）_開始 */
	private static final 	int TCHUCHISHO_MONTH_START_IDX = 4;
	/** 契約内容通知書年月日_区切り（月）_終了 */
	private static final 	int TCHUCHISHO_MONTH_END_IDX = 6;
	/** 契約内容通知書年月日_区切り（日）_開始 */
	private static final 	int TCHUCHISHO_DAY_START_IDX = 6;
	/** 契約内容通知書年月日_区切り（日）_終了 */
	private static final 	int TCHUCHISHO_DAY_END_IDX = 8;
	/** 通知書表示文言 */
	private static final 	String TCHUCHISHO_DSP_MNGN = "_契約内容通知書";
	/** 通知書表示文言（空白用） */
	private static final 	String TCHUCHISHO_DSP_EMPTY = "　 　 　 　 　 　 　 　 　 　 　 　 　 　";
	/** 通知書表示文言（年） */
	private static final 	String TCHUCHISHO_DSP_YEAR = "年";
	/** 通知書表示文言（月） */
	private static final 	String TCHUCHISHO_DSP_MONTH = "月";
	/** 通知書表示文言（日） */
	private static final 	String TCHUCHISHO_DSP_DAY = "日";

	/** 帳票定義体ID 契約内容通知書（eo光(3点セット)） */
	public static final String CHOHYO_KNYTCS_E = "PFUZ00000000007";
	/** 帳票定義体ID 契約内容通知書（シンプルプラン） */
	public static final String CHOHYO_KNYTCS_S = "PFUZ00000000008";

// ANK-4427-00-00 ADD START
	/** 帳票定義体ID 契約内容通知書（NTT卸） */
	public static final String CHOHYO_KNYTCS_N = "PFUZ00000000009";
// ANK-4427-00-00 ADD END

	/** 帳票定義体ID 契約内容通知書マッピング */
	private static Map<String, String> CHOHYO_KNYTCS_MAP = new HashMap<String, String>();
	static
	{
		CHOHYO_KNYTCS_MAP.put("1", CHOHYO_KNYTCS_E);
		CHOHYO_KNYTCS_MAP.put("2", CHOHYO_KNYTCS_S);
// ANK-4427-00-00 ADD START
		CHOHYO_KNYTCS_MAP.put("3", CHOHYO_KNYTCS_N);
// ANK-4427-00-00 ADD END
	}

	/** ダウンロードダイアログに表示するファイル名*/
	private static final String DOWNLOAD_FILE_NM = "Knytcs";

	
	/**
	 * 初期処理
	 * <br/>
	 * 初期処理を行います。
	 *
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// ●共有フォームBeanより必要情報取得
		Map<String, Object> commonInfoMap = getCommoninfoBeanInfo(commoninfoBean);

		// 各Bean情報を取得
		X31SDataBeanAccess ssoInfoBean = (X31SDataBeanAccess)commonInfoMap.get(CommonInfoCFConst.SSO_INFO);

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 各Beanを配列に格納
		// データBean, SSO
		X31SDataBeanAccess[] beanArray = { bean, ssoInfoBean };

		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0293);

		FUSV0293_FUSV0293OPDBMapper mapper = new FUSV0293_FUSV0293OPDBMapper();
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// ●上りマッピング
		// 契約内容通知書一覧照会マップ
		mapper.setFUSV029301SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1,
				ssoInfoBean.sendMessageString(CommonInfoCFConst.SYSID_21, X31CWebConst.DATABEAN_GET_VALUE));

		// ●検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ●サービスの呼び出し
		try
		{
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ●下りマッピング
		// 業務パラメータ管理一意照会
		mapper.getFUSV029301SC(bean, outputMap);

		// ●サービスフォームBean編集処理
		setTsuchishoList(bean);

// ANK-4669-00-00 ADD START
		//=====================================================================
		// 運用日付の設定
		//=====================================================================
		// 共通フォームBean.フロント共有情報
		X31SDataBeanAccess frontInfo = commoninfoBean.getDataBeanArray(CommonInfoCFConst.FRONT_COMMON_INFO).getDataBean(0);
		// フロント共有情報.フロント運用日付を設定します。
		frontInfo.sendMessageString(CommonInfoCFConst.FU_OPEDATE_05, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getOpeDate(this, null));
// ANK-4669-00-00 ADD END

		// ●遷移先画面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_FUW11801);

		return true;
	}

	/**
	 * 表示するボタン押下処理
	 * <br/>
	 * 表示するボタン押下時の処理を行います。
	 *
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean disp() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// ●共有フォームBeanより必要情報取得
		Map<String, Object> commonInfoMap = getCommoninfoBeanInfo(commoninfoBean);

		// 各Bean情報を取得
		X31SDataBeanAccess ssoInfoBean = (X31SDataBeanAccess)commonInfoMap.get(CommonInfoCFConst.SSO_INFO);

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 各Beanを配列に格納
		// データBean, SSO
		X31SDataBeanAccess[] beanArray = { bean, ssoInfoBean };

		// ●詳細情報の初期化処理
		clearDetailBean(bean);

		// 選択エラーチェック
		if(setDispValue(bean))
		{
			// ●ユースケースID格納用マップを生成
			HashMap<String, String> paramMap = new HashMap<String, String>();
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0294);

			FUSV0294_FUSV0294OPDBMapper mapper = new FUSV0294_FUSV0294OPDBMapper();
			HashMap<String, Object> dataMap = new HashMap<String, Object>();

			// サービスフォームBean.選択用通知書一覧
			X31SDataBeanAccess selectValueList = bean.getDataBeanArray(FUW11801SFConst.SELECT_TCHISHO_LIST).getDataBean(0);

			// 契約内容通知書番号を取得
			String selectTsuchisho =
				selectValueList.sendMessageString(FUW11801SFConst.TCHISHO_NO_LIST_02, X31CWebConst.DATABEAN_GET_VALUE,
					Integer.valueOf(selectValueList.sendMessageString(FUW11801SFConst.TCHISHO_SELECT_VALUE_02, X31CWebConst.DATABEAN_GET_VALUE)));
			
			// ●上りマッピング
			// 契約内容通知書照会CC
			mapper.setFUSV029401CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1, selectTsuchisho);
			// 契約内容通知書出力CC
			mapper.setFUSV029402CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1, selectTsuchisho);

			// ●検索結果格納用マップを生成。
			HashMap<String, Object> outputMap = new HashMap<String, Object>();

			// ●サービスの呼び出し
			try
			{
				invokeService(paramMap, dataMap, outputMap);
			}
			catch (JCCWebServiceException se)
			{
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}

			// ●下りマッピング
			// 契約内容通知書照会CC
			mapper.getFUSV029401CC(bean, outputMap);
			// 契約内容通知書出力CC
			mapper.getFUSV029402CC(bean, outputMap);

			// 検索結果表示フラグ
			bean.sendMessageBoolean(FUW11801SFConst.DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);
			// ●遷移先画面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_FUW11801);
		}
		else
		{
			// 検索結果表示フラグ
			bean.sendMessageBoolean(FUW11801SFConst.DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);
			// 通知書選択有無
			bean.sendMessageString(FUW11801SFConst.SELECT_UM, X31CWebConst.DATABEAN_SET_VALUE, TCHUCHISHO_SELECT_NS);
			// ●遷移先画面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_FUW11801);
		}
		return true;
	}

	/**
	 * 契約内容通知書選択セレクトボックスの設定
	 * <br/>
	 * 契約内容通知書選択セレクトボックスの設定を行います。
	 *
	 * @param bean サービスフォームBean
	 */
	private void setTsuchishoList(X31SDataBeanAccess bean)
	{
		// 選択用通知書数
		int tsuchishoCnt = 0;

		// サービスフォームBean.通知書一覧
		X31SDataBeanAccessArray tchishoList = bean.getDataBeanArray(FUW11801SFConst.SVC_KEI_TCHISHO_LIST);

		// サービスフォームBean.選択用通知書一覧
		X31SDataBeanAccessArray selectList = bean.getDataBeanArray(FUW11801SFConst.SELECT_TCHISHO_LIST);
		X31SDataBeanAccess selectValueList = bean.getDataBeanArray(FUW11801SFConst.SELECT_TCHISHO_LIST).getDataBean(0);

		String selectTsuchisho = JFUStrConst.EMPTY;
		if(!JFUWebCommon.isNull(selectValueList)){
			// 現在の設定値を取得
			selectTsuchisho = selectValueList.sendMessageString(FUW11801SFConst.TCHISHO_SELECT_VALUE_02, X31CWebConst.DATABEAN_GET_VALUE);
			if(JFUWebCommon.isNull(selectTsuchisho))
			{
				selectTsuchisho = JFUStrConst.EMPTY;
			}
		}

		selectList.clearArray();

		X31SDataBeanAccess selectListDataType = selectList.addDataBean();

		selectListDataType.sendMessageString(FUW11801SFConst.TCHISHO_SELECT_VALUE_02, X31CWebConst.DATABEAN_SET_VALUE, selectTsuchisho);

		selectListDataType.sendMessageString(FUW11801SFConst.TCHISHO_DISP_LIST_02, X31CWebConst.DATABEAN_ADD_VALUE, TCHUCHISHO_DSP_EMPTY);
		selectListDataType.sendMessageString(FUW11801SFConst.TCHISHO_NO_LIST_02, X31CWebConst.DATABEAN_ADD_VALUE, JFUStrConst.EMPTY);

		for(int i = 0 ; i < tchishoList.getCount() ; i++)
		{
			X31SDataBeanAccess tchishoListBean = tchishoList.getDataBean(i);

			String tchuchishoDsp = JFUStrConst.EMPTY;

			// 契約内容通知書表示年月日、契約内容通知書番号を取得
			String dspYmd = tchishoListBean.sendMessageString(FUW11801SFConst.DSP_YMD_01, X31CWebConst.DATABEAN_GET_VALUE);
			String tchishoValue = tchishoListBean.sendMessageString(FUW11801SFConst.KNYTCS_NO_01, X31CWebConst.DATABEAN_GET_VALUE);

			if(!JFUWebCommon.isNull(dspYmd) && !JFUWebCommon.isNull(tchishoValue)
					&& !DSP_YMD_BLANK.equals(dspYmd))
			{
				// 契約内容通知書表示年月日が空ではないとき
				if(dspYmd.length() >= TCHUCHISHO_YMD_LENGTH)
				{
					// 契約内容通知書表示年月日が8桁以上であるとき
					StringBuffer sb = new StringBuffer();
					sb.append(dspYmd.substring(TCHUCHISHO_YEAR_START_IDX, TCHUCHISHO_YEAR_END_IDX));
					sb.append(TCHUCHISHO_DSP_YEAR);
					sb.append(dspYmd.substring(TCHUCHISHO_MONTH_START_IDX, TCHUCHISHO_MONTH_END_IDX));
					sb.append(TCHUCHISHO_DSP_MONTH);
					sb.append(dspYmd.substring(TCHUCHISHO_DAY_START_IDX, TCHUCHISHO_DAY_END_IDX));
					sb.append(TCHUCHISHO_DSP_DAY);
					sb.append(TCHUCHISHO_DSP_MNGN);
					tchuchishoDsp = sb.toString();

					// 選択用通知書リストにセット
					selectListDataType.sendMessageString(FUW11801SFConst.TCHISHO_DISP_LIST_02,
							X31CWebConst.DATABEAN_ADD_VALUE, tchuchishoDsp);
					selectListDataType.sendMessageString(FUW11801SFConst.TCHISHO_NO_LIST_02,
							X31CWebConst.DATABEAN_ADD_VALUE, tchishoValue);
					tsuchishoCnt++;
				}
			}
		}
		// 総検索件数をセット
		bean.sendMessageString(FUW11801SFConst.ALL_SEARCH_CNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(tsuchishoCnt));
	}

	/**
	 * サービスフォームBean詳細情報クリア処理
	 * <br/>
	 * サービスフォームBean詳細情報をクリアします。
	 *
	 * @param bean サービスフォームBean
	 * @exception Exception
	 */
	private void clearDetailBean(X31SDataBeanAccess bean) throws Exception
	{
		// 検索結果表示フラグ
		bean.sendMessageBoolean(FUW11801SFConst.DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);
		// 通知書選択有無
		bean.sendMessageString(FUW11801SFConst.SELECT_UM, X31CWebConst.DATABEAN_SET_VALUE, TCHUCHISHO_SELECT_AR);
		// 契約内容通知書についての注記文言
		bean.sendMessageString(FUW11801SFConst.KEIYAKU_CHUKI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 契約成立年月日
		bean.sendMessageString(FUW11801SFConst.KEIYAKU_YMD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 氏名
		bean.sendMessageString(FUW11801SFConst.NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 契約者住所
		bean.sendMessageString(FUW11801SFConst.ADDRESS, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// サービス利用場所住所
		bean.sendMessageString(FUW11801SFConst.SVC_RY_ADD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// サービス提供開始時期
		bean.sendMessageString(FUW11801SFConst.SVC_TK_KIS, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込番号（ネット契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_NO_NET_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// コース（ネット契約）
		bean.sendMessageString(FUW11801SFConst.COURSE_NET_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 割引サービス（ネット契約）
		bean.sendMessageString(FUW11801SFConst.WRIB_NET_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// オプションサービス（ネット契約）
		bean.sendMessageString(FUW11801SFConst.OPTI_NET_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 適用キャンペーン（ネット契約）
		bean.sendMessageString(FUW11801SFConst.CP_NET_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 契約内容変更・解除等に関する条項（ネット契約）
		bean.sendMessageString(FUW11801SFConst.JOKO_NET_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込番号（電話契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_NO_TEL_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// コース（電話契約）
		bean.sendMessageString(FUW11801SFConst.COURSE_TEL_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 割引サービス（電話契約）
		bean.sendMessageString(FUW11801SFConst.WRIB_TEL_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 適用キャンペーン（電話契約）
		bean.sendMessageString(FUW11801SFConst.CP_TEL_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 電話番号（電話契約1番号目）
		bean.sendMessageString(FUW11801SFConst.TELNO_TEL1_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// オプションサービス（電話契約1番号目）
		bean.sendMessageString(FUW11801SFConst.OPTI_TEL1_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 電話番号（電話契約2番号目）
		bean.sendMessageString(FUW11801SFConst.TELNO_TEL2_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// オプションサービス（電話契約2番号目）
		bean.sendMessageString(FUW11801SFConst.OPTI_TEL2_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込番号（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_NO_TV_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 割引サービス（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.WRIB_TV_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 適用キャンペーン（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.CP_TV_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// オプションサービス（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.OPTI_TV_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース表題1（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_DAI_TV1_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース名1（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_COURSE_TV1_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース表題2（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_DAI_TV2_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース名2（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_COURSE_TV2_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース表題3（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_DAI_TV3_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース名3（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_COURSE_TV3_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース表題4（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_DAI_TV4_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース名4（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_COURSE_TV4_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース表題5（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_DAI_TV5_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース名5（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.MSKM_COURSE_TV5_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 契約内容変更・解除等に関する条項（テレビ契約）
		bean.sendMessageString(FUW11801SFConst.JOKO_TV_KEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// お支払い方法
		bean.sendMessageString(FUW11801SFConst.PAY, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 基本料金（ネット）
		bean.sendMessageString(FUW11801SFConst.KIHON_COST_NET, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 標準工事費（ネット）
		bean.sendMessageString(FUW11801SFConst.HYOJN_KOJI_NET, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 手数料（ネット）
		bean.sendMessageString(FUW11801SFConst.TESURYO_NET, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 割引サービス料金（ネット）
		bean.sendMessageString(FUW11801SFConst.WRIB_COST_NET, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// キャンペーン料金（ネット）
		bean.sendMessageString(FUW11801SFConst.CP_COST_NET, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 基本料金（電話）
		bean.sendMessageString(FUW11801SFConst.KIHON_COST_TEL, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 標準工事費（電話）
		bean.sendMessageString(FUW11801SFConst.HYOJN_KOJI_TEL, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 手数料（電話）
		bean.sendMessageString(FUW11801SFConst.TESURYO_TEL, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 割引サービス料金（電話）
		bean.sendMessageString(FUW11801SFConst.WRIB_COST_TEL, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// キャンペーン料金（電話）
		bean.sendMessageString(FUW11801SFConst.CP_COST_TEL, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース表題1（テレビ料金）
		bean.sendMessageString(FUW11801SFConst.MSKM_STB_TV1_RYO, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込料金1（テレビ料金）
		bean.sendMessageString(FUW11801SFConst.KIHON_COST_TV1, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース表題2（テレビ料金）
		bean.sendMessageString(FUW11801SFConst.MSKM_STB_TV2_RYO, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込料金2（テレビ料金）
		bean.sendMessageString(FUW11801SFConst.KIHON_COST_TV2, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース表題3（テレビ料金）
		bean.sendMessageString(FUW11801SFConst.MSKM_STB_TV3_RYO, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込料金3（テレビ料金）
		bean.sendMessageString(FUW11801SFConst.KIHON_COST_TV3, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース表題4（テレビ料金）
		bean.sendMessageString(FUW11801SFConst.MSKM_STB_TV4_RYO, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込料金4（テレビ料金）
		bean.sendMessageString(FUW11801SFConst.KIHON_COST_TV4, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込コース表題5（テレビ料金）
		bean.sendMessageString(FUW11801SFConst.MSKM_STB_TV5_RYO, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 申込料金5（テレビ料金）
		bean.sendMessageString(FUW11801SFConst.KIHON_COST_TV5, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 標準工事費（テレビ）
		bean.sendMessageString(FUW11801SFConst.HYOJN_KOJI_TV, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 手数料（テレビ）
		bean.sendMessageString(FUW11801SFConst.TESURYO_TV, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// 割引サービス料金（テレビ）
		bean.sendMessageString(FUW11801SFConst.WRIB_COST_TV, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// キャンペーン料金（テレビ）
		bean.sendMessageString(FUW11801SFConst.CP_COST_TV, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
	}

	/**
	 * 選択値有無チェック
	 * 通知書の選択有無をチェックします。
	 *
	 * @param bean サービスフォームBean
	 * @throws Exception
	 * @return 選択の有無
	 */
	private boolean setDispValue(X31SDataBeanAccess bean) throws Exception
	{
		boolean select_flg = false;
		// サービスフォームBean.選択用通知書一覧
		X31SDataBeanAccess selectValueList = bean.getDataBeanArray(FUW11801SFConst.SELECT_TCHISHO_LIST).getDataBean(0);

		// 現在の設定値を取得
		String selectTsuchisho = selectValueList.sendMessageString(FUW11801SFConst.TCHISHO_SELECT_VALUE_02, X31CWebConst.DATABEAN_GET_VALUE);

		if(!JFUWebCommon.isNull(selectTsuchisho) && !SELECT_TCHUCHISHO_BRANK.equals(selectTsuchisho))
		{
			select_flg = true;
		}
		
		return select_flg;
	}

	/**
	 * 共有フォームBean情報取得
	 * <br/>
	 * 共有フォームBeanの情報を取得します。
	 *
	 * @param commoninfoBean 共有フォームBean
	 * @return 取得した情報を保持したマップ
	 */
	private Map<String, Object> getCommoninfoBeanInfo(X31SDataBeanAccess commoninfoBean)
	{
		// 結果格納マップ
		Map<String, Object> resultMap = new HashMap<String, Object>();

		// ★WEB変更情報
		X31SDataBeanAccess webChgInfoBean = getX31SDataBeanAccess(commoninfoBean, CommonInfoCFConst.WEB_CHG_INFO);

		// ★SSO情報(WEB変更情報の子階層)
		X31SDataBeanAccessArray ssoInfoArray = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.SSO_INFO);
		X31SDataBeanAccess ssoInfoBean = ssoInfoArray.getDataBean(0);

		// ★現顧客情報
		X31SDataBeanAccessArray genCustKeiInfoArray = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO);
		X31SDataBeanAccess genCustKeiInfoBean = genCustKeiInfoArray.getDataBean(0);

		// 各Bean情報を設定
		resultMap.put(CommonInfoCFConst.WEB_CHG_INFO, webChgInfoBean);
		resultMap.put(CommonInfoCFConst.SSO_INFO, ssoInfoBean);
		resultMap.put(CommonInfoCFConst.GEN_CUST_KEI_INFO, genCustKeiInfoBean);

		return resultMap;
	}

	/**
	 * データBean取得
	 * <br/>
	 * データBeanリストから0番目のデータBeanを取得します。
	 *
	 * @param bean データBean
	 * @param componentID 項目ID
	 * @return 取得したデータBean
	 */
	private X31SDataBeanAccess getX31SDataBeanAccess(X31SDataBeanAccess bean, String componentID)
	{
		X31SDataBeanAccessArray subBeanArray = bean.getDataBeanArray(componentID);
		X31SDataBeanAccess subBean = subBeanArray.getDataBean(0);
		if (JFUWebCommon.isNull(subBean))
		{
			subBeanArray.addDataBean();
			subBean = subBeanArray.getDataBean(0);
		}
		return subBean;
	}

	/**
	 * ダウンロードボタン押下処理
	 * <br/>
	 * 登録証画面の「ダウンロードボタン押下」時の処理です。
	 *
	 * @return 必ずtrue
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean download() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// ●共有フォームBeanより必要情報取得
		Map<String, Object> commonInfoMap = getCommoninfoBeanInfo(commoninfoBean);

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 各Bean情報を取得
		X31SDataBeanAccess genCustInfoBean = (X31SDataBeanAccess)commonInfoMap.get(CommonInfoCFConst.GEN_CUST_KEI_INFO);

		// 各Beanを配列に格納
		// データBean
		X31SDataBeanAccess[] beanArray = { bean, genCustInfoBean };

		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0296);

		FUSV0296_FUSV0296OPDBMapper mapper = new FUSV0296_FUSV0296OPDBMapper();
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		String chohyoTeigiNo = CHOHYO_KNYTCS_MAP.get(bean.sendMessageString(FUW11801SFConst.CHOHYO_TYPE, X31CWebConst.DATABEAN_GET_VALUE));
	
		// ●上りマッピング
		mapper.setFUSV029601CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2, chohyoTeigiNo);

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// 添付ファイル格納マップを生成。
		HashMap<String, Object> attachMap = new HashMap<String, Object>();

		// ●サービスの呼び出し
		try
		{
			invokeService(paramMap, dataMap, outputMap, attachMap);
		}
		catch (JCCWebServiceException se)
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ●下りマッピング
		// なし

		// ● 受信ファイル取得
		ArrayList list = (ArrayList)attachMap.get(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE_LIST);
		HashMap map = (HashMap)list.get(0);
		byte[] downloadData = (byte[])map.get(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE);

		// ●ダウンロード処理

		// ダウンロードファイル名を設定
		String fileName = getDownloadFileNm(bean);

		// 閲覧制限をかけないPDFファイルをブラウザ内への表示せずに、
		// ダウンロードダイアログを表示して、Adobe Readerで表示する場合、
		// 「setPdfDownloadDlgMode(true)」を呼び出す
		setPdfDownloadDlgMode(true);
		JFUWebCommon.setTempDownloadFile(this, downloadData, fileName);

		// ●遷移先画面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_FUW11801);

		return true;
	}

	/**
	 * ダウンロードファイル名取得
	 * <br/>
	 * ダウンロードダイアログに表示するファイル名を取得します。
	 *
	 * @param bean サービスフォームBean
	 * @return ダウンロードファイル名
	 */
	private String getDownloadFileNm(X31SDataBeanAccess bean)
	{
		return DOWNLOAD_FILE_NM + JFUStrConst.KIGOU_PERIOD_HALF + JFUStrConst.CHOHYO_EXTENSION_PDF;
	}

}