/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：FUW11101SFLogic
 *  ソースファイル名：FUW11101SFLogic.java
 *  作成者          ：富士通
 *  日付            ：2014年05月08日
 *＜機能概要＞
 *  eoスマートリンク端末補償一括申込のビューロジッククラスです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v9.00       2014/05/08   FJ)岡井     【ANK-2054-00-00】スマートリンク端末補償
 *   v9.00       2014/06/05   FJ)岡井     【ANK-2054-00-00】スマートリンク端末補償：関連チェックエラー処理追加
 *   v9.00       2014/06/13   FJ)岡井     【ANK-2054-01-00】スマートリンク端末補償案件内仕変：契約日を補償開始日に変更
 *   v10.00      2014/07/28   FJ)文元     【ANK-2138-00-00】スマリン端末のトムソンケース同梱
 *
 **********************************************************************/
package eo.web.webview.FUW11101SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

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.X31CMessageResult.X31CMessageMoreInfo;
import com.fujitsu.futurity.web.x33.X33CUtil;
import com.fujitsu.futurity.web.x33.X33WSessionController;

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.JFUCommonRelationCheck;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0283_FUSV0283OPDBMapper;
import eo.web.webview.mapping.FUSV0284_FUSV0284OPDBMapper;

/**
 * eoスマートリンク端末補償一括申込のビューロジッククラスです。
 * <p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings({"serial", "unchecked"})
public class FUW11101SFLogic extends JCCWebBusinessLogic
{

	// ■サービスID
	/** サービスID：初期表示 */
	private static final String USECASE_ID_FUSV0283 = "FUSV0283";
	/** サービスID：申込 */
	private static final String USECASE_ID_FUSV0284 = "FUSV0284";

	// ■申込完了メール
	/** 申込完了メールID */
	private static final String MSKM_MAIL_ID = "FUW111_1";

	// ■項目ID
	/** FUSV028301CC */
	private static final String FUSV028301CC = "FUSV028301CC";
	/** 申込年月日 */
	private static final String MSKM_YMD = "mskm_ymd";
	/** 保証・補償期間開始日算出基準年月日 */
	private static final String HCPRD_STAD_SNSTSTD_YMD = "hcprd_stad_snststd_ymd";
	/** 端末補償期間開始日算出方法識別コード */
	private static final String TMCP_PRD_STAD_SSW_SKCD = "tmcp_prd_stad_ssw_skcd";
	/** 端末補償期間 */
	private static final String TMCP_PRD = "tmcp_prd";
	/** 機器オプションサービスコード */
	private static final String KKOP_SVC_CD = "kkop_svc_cd";
	/** 機器オプションサービス契約ステータス */
	private static final String KKOP_SVC_KEI_STAT = "kkop_svc_kei_stat";
	/** 宅内機器型式名 */
	private static final String TAKNKIKI_MODEL_NM = "taknkiki_model_nm";
	/** 宅内機器型式コード */
	private static final String TAKNKIKI_MODEL_CD = "taknkiki_model_cd";
	/** 機器製造番号 */
	private static final String KIKI_SEIZO_NO = "kiki_seizo_no";
	/** 料金プラン固定金額 */
	private static final String PPLAN_KOTEI_AMNT = "pplan_kotei_amnt";
	/** 料金プラン固定金額単位 */
	private static final String PPLAN_KOTEI_TANI_CD_NM = "pplan_kotei_tani_cd_nm";
	/** 料金プラン固定単価料金プランコード */
	private static final String KTTANKA_PPLAN_CD = "kttanka_pplan_cd";
	/** SYSID */
	private static final String SYSID = "sysid";
	/** 申込明細番号 */
	private static final String MSKM_DTL_NO = "mskm_dtl_no";
	/** 機器提供サービス契約番号 */
	private static final String KKTK_SVC_KEI_NO = "kktk_svc_kei_no";
	/** 機器提供サービス契約ステータス */
	private static final String KKTK_SVC_KEI_STAT = "kktk_svc_kei_stat";
	/** 保証・補償期間開始日算出基準年月日識別コード */
	private static final String HCPRD_STAD_SNSTSTD_YMD_SCD = "hcprd_stad_snststd_ymd_scd";
	/** 割賦契約情報リスト */
	private static final String KAP_KEI_TNMT_INFO_LIST = "kap_kei_tnmt_info_list";
	/** 更新年月日時分秒(更新前) */
	private static final String UPD_DTM_BF = "upd_dtm_bf";

	// ■料金表
	/** 定義取得パス スタイルクラス(料金表用) */
	private static final String PATH_STYLE_CLASS = "DISPSETTING/SETTING[@screenId='FUW11101']/DISPCTL[@groupid='PRC_INFO_TABLE_STYLE']";
	/** ID：タイトルDIV */
	private static final String DIV_TITLE_ID = "title";
	/** ID：未選択時 */
	private static final String DIV_NONE = "none";
	/** 文言取得キー：月額料金 */
	private static final String GETSUGAKU = "getsu";
	/** 文言取得キー：安心補償オプション代金 */
	private static final String ANSHIN_DAIKIN = "anshin_daikin";
	/** 月額料金デザインクラス取得キー */
	private static final String TITLE_STYLE_1 = "TITLE_STYLE_1";
	/** 月額料金幅クラス取得キー */
	private static final String TABLE_HABA_1 = "TABLE_HABA_1";
	/** テーブル左値リスト設定キー */
	private static final String KEY_TABLE_LEFT_VALUE_LIST = "KEY_TABLE_LEFT_VALUE_LIST";
	/** テーブル右値リスト設定キー */
	private static final String KEY_TABLE_RIGHT_VALUE_LIST = "KEY_TABLE_RIGHT_VALUE_LIST";
	/** テーブル値識別リスト設定キー */
	private static final String KEY_TABLE_VALUE_SKBT_LIST = "KEY_TABLE_VALUE_SKBT_LIST";

	// ■その他
	/** 定義取得パス：基準日 */
	private static final String PATH_BASE_DATE = "DISPSETTING/SETTING[@screenId='FUW11101']/DISPCTL[@groupid='BASE_DATE']";
	/** 定義取得パス：文言 */
	private static final String PATH_MONGON = "DISPSETTING/SETTING[@screenId='FUW11101']/DISPTEXT[@groupid='MONGON']";
	/** 定義取得パス：申込完了メール */
	private static final String PATH_MSKM_FIN_MAIL = "DISPSETTING/SETTING[@screenId='FUW11101']/DISPTEXT[@groupid='MSKM_FIN_MAIL']";
	/** 定義取得パス：申込可能タブレットユーザーエージェント */
	private static final String PATH_MSKM_PSB_TAB_UA = "DISPSETTING/SETTING[@screenId='FUW11101']/DISPCTL[@groupid='MSKM_PSB_TAB_UA']";
	/** 定義取得パス：申込可能タブレット */
	private static final String PATH_MSKM_PSB_TAB = "DISPSETTING/SETTING[@screenId='FUW11101']/DISPCTL[@groupid='MSKM_PSB_TAB']";
	/** 基準日(FROM) */
	private static final String BASE_DATE_FROM = "from";
	/** 基準日(TO) */
	private static final String BASE_DATE_TO = "to";
	/** 手続き中文言 */
	private static final String TTDKI = "ttdki";
	/** メール内容文言 */
	private static final String MAIL_MONGON = "mail_mongon";
	/** 金額単位 */
	private static final String PRC_TANI = "tani";

	/** 置換文字列：%1% */
	private static final String REPLACE_STR_1 = "%1%";
	/** 置換文字列：%2% */
	private static final String REPLACE_STR_2 = "%2%";
	/** 置換文字列：%3% */
	private static final String REPLACE_STR_3 = "%3%";
	/** 置換文字列：%4% */
	private static final String REPLACE_STR_4 = "%4%";
	/** 置換文字列：%5% */
	private static final String REPLACE_STR_5 = "%5%";

	/** 日付フォーマット：年月日 */
	public static final String DATE_FORMAT_1 = "yyyy年M月d日";
	/** 日付フォーマット：yyyyMMdd */
	public static final String DATE_FORMAT_2 = "yyyyMMdd";

	/** ユーザーエージェント */
	private static final String USER_AGENT = "USER-AGENT";
	/** APLConst取得キー：テストモード */
	private static final String APL_KEY_TEST_MODE = "FU_TNMT_COMPS_TEST_MODE";

	/** エンコードマップ */
	private static Map encMap = new HashMap();
	static
	{
		HashMap map = new HashMap();
		map.put("<", "&lt;");
		map.put(">", "&gt;");
		encMap = map;
	}

	// ■関連チェックエラー処理
	/** テンプレートID(機器オプションサービス契約登録) */
	private static final String TMP_ID_EKK2811D010 = "EKK2811D010";
	/** テンプレートID(機器オプションサービス契約照査) */
	private static final String TMP_ID_EKK2811C030 = "EKK2811C030";
	/** テンプレートID(機器オプションサービス契約締結) */
	private static final String TMP_ID_EKK2811C040 = "EKK2811C040";
	/** テンプレートID(機器オプションサービス契約開始) */
	private static final String TMP_ID_EKK2811C070 = "EKK2811C070";

	/** DataBean操作種別：項目値設定 */
	private static final String SET = X31CWebConst.DATABEAN_SET_VALUE;
	/** DataBean操作種別：項目値取得 */
	private static final String GET = X31CWebConst.DATABEAN_GET_VALUE;

	/**
	 * 初期処理です。
	 * 
	 * @return 必ずtrue
	 * @throws Exception 例外
	 */
	public boolean init() throws Exception
	{
		// ●申込可能ユーザーエージェントチェック
		chkMskmPsbTabletUa();

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// ●共有フォームBeanより現顧客契約情報を取得
		Map<String, Object> commonInfoMap = getCommoninfoBeanInfo(commonInfoBean);

		// 各Beanを取得
		X31SDataBeanAccess ssoInfoBean = (X31SDataBeanAccess)commonInfoMap.get(CommonInfoCFConst.SSO_INFO);
		X31SDataBeanAccess svcKeiInfoBean = (X31SDataBeanAccess)commonInfoMap.get(CommonInfoCFConst.SVC_KEI_INFO);
		X31SDataBeanAccess seikyKeiInfoBean = (X31SDataBeanAccess)commonInfoMap.get(CommonInfoCFConst.SEIKY_KEI_INFO);

		// 各Beanを配列に格納
		X31SDataBeanAccess[] beanArray = { bean, ssoInfoBean };

		// ●督促ステータスチェック処理
		chkTokusokuStat(seikyKeiInfoBean);

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ユースケースID格納
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0283);

		// データマップ作成
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッパークラス呼び出し
		FUSV0283_FUSV0283OPDBMapper mapper = new FUSV0283_FUSV0283OPDBMapper();

		// ●上りマッピング
		mapper.setFUSV028301CC(beanArray, dataMap);

		// ●サービス呼び出し
		try
		{
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ●端末情報設定
		setTnmtInfo(bean, outputMap);

		// ●有効端末数チェック
		chkValidTnmt(bean);

		// ●料金表作成
		setPrcTable(bean, outputMap);

		// ●最終更新年月日時分秒保持
		bean.sendMessageString(FUW11101SFConst.LAST_UPD_DTM, SET, svcKeiInfoBean.sendMessageString(CommonInfoCFConst.LAST_UPD_DTM_23, GET));

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, JFUWebCommon.getScreenId(this));
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, JFUScreenConst.SCREEN_NAME_FUW11101);

		return true;
	}

	/**
	 * 申込画面の確認ボタン押下時の処理です。
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean cfm() throws Exception
	{
		// ●共通関連チェック
		JFUCommonRelationCheck.checkCommonRelation(this, USECASE_ID_FUSV0284);

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, JFUScreenConst.SCREEN_ID_FUW11102);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, JFUScreenConst.SCREEN_NAME_FUW11102);

		return true;
	}

	/**
	 * 確認画面の申し込むボタン押下時の処理です。
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean mskm() throws Exception
	{
		// ●共通関連チェック
		JFUCommonRelationCheck.checkCommonRelation(this, USECASE_ID_FUSV0284);

		// ●現顧客リフレッシュ処理
		JFUWebCommon.refreshGenCustKei(this);

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// ●共有フォームBeanより現顧客契約情報を取得
		Map<String, Object> commonInfoMap = getCommoninfoBeanInfo(commonInfoBean);

		// 各Beanを取得
		X31SDataBeanAccess ssoInfoBean = (X31SDataBeanAccess)commonInfoMap.get(CommonInfoCFConst.SSO_INFO);
		X31SDataBeanAccess seikyKeiInfoBean = (X31SDataBeanAccess)commonInfoMap.get(CommonInfoCFConst.SEIKY_KEI_INFO);

		// ●督促チェック
		chkTokusokuStat(seikyKeiInfoBean);

		// 各Beanを配列に格納
		X31SDataBeanAccess[] beanArray = { bean, ssoInfoBean };

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ユースケースID格納
		HashMap<String, String> paramMap = new HashMap<String, String>(16);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0284);

		// データマップ作成
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッパークラス呼び出し
		FUSV0284_FUSV0284OPDBMapper mapper = new FUSV0284_FUSV0284OPDBMapper();

		// ●上りマッピング
		mapper.setFUSV028401CC(beanArray, dataMap);

		// ●サービス呼び出し
		try
		{
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// エラー処理
			chkSvcIfErr(se);
		}

		// 申込完了メール内容文言取得＆送信部品呼出処理
		String mailMongon = createMskmFinMail(bean);
		if(mailMongon != null && mailMongon.length() > 0)
		{
			String[] textList = { mailMongon };
			JFUWebCommon.sendMskmFinMail(this, MSKM_MAIL_ID, null, textList);
		}
		else
		{
			DEBUG_LOG.debug("■■■申込完了メール文言不正の為、メール送信を行わない■■■");
		}

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, JFUScreenConst.SCREEN_ID_FUW11103);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, JFUScreenConst.SCREEN_NAME_FUW11103);

		return true;
	}

	/**
	 * 確認画面の戻るボタン押下時の処理です。
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, JFUScreenConst.SCREEN_ID_FUW11101);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, JFUScreenConst.SCREEN_NAME_FUW11101);

		return true;
	}

	/**
	 * データBeanリストから0番目のデータBeanを取得します。 <BR>
	 * 
	 * @param bean
	 * @param componentID
	 * @return 取得したデータBean
	 */
	private X31SDataBeanAccess getX31SDataBeanAccess(X31SDataBeanAccess bean, String componentID)
	{
		X31SDataBeanAccessArray subBeanArray = bean.getDataBeanArray(componentID);
		X31SDataBeanAccess subBean = subBeanArray.getDataBean(0);
		if (null == subBean)
		{
			subBeanArray.addDataBean();
			subBean = subBeanArray.getDataBean(0);
		}
		return subBean;
	}

	/**
	 * 共有フォーム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);

		// ★現顧客情報(WEB変更情報の子階層)
		X31SDataBeanAccessArray genCustKeiInfoArray = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO);
		X31SDataBeanAccess genCustKeiInfoBean = genCustKeiInfoArray.getDataBean(0);

		// ★サービス契約情報
		X31SDataBeanAccessArray svcKeiInfoArray = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO);
		X31SDataBeanAccess svcKeiInfoBean = svcKeiInfoArray.getDataBean(0);

		// ★サービス契約回線内訳情報
		X31SDataBeanAccessArray svcKeiKaisenUcwkInfoArray = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_KAISEN_UCWK_INFO);
		X31SDataBeanAccess svcKeiKaisenUcwkInfoBean = svcKeiKaisenUcwkInfoArray.getDataBean(0);

		// ★請求契約情報
		X31SDataBeanAccessArray seikyKeiInfoArray = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SEIKY_KEI_INFO);
		X31SDataBeanAccess seikyKeiInfoBean = seikyKeiInfoArray.getDataBean(0);

		// 各Bean情報を設定
		resultMap.put(CommonInfoCFConst.SSO_INFO, ssoInfoBean);
		resultMap.put(CommonInfoCFConst.SVC_KEI_INFO, svcKeiInfoBean);
		resultMap.put(CommonInfoCFConst.GEN_CUST_KEI_INFO, genCustKeiInfoBean);
		resultMap.put(CommonInfoCFConst.SVC_KEI_KAISEN_UCWK_INFO, svcKeiKaisenUcwkInfoBean);
		resultMap.put(CommonInfoCFConst.SEIKY_KEI_INFO, seikyKeiInfoBean);

		return resultMap;
	}

	/**
	 * 申込可能ユーザーエージェントチェック処理です。
	 * 
	 * <br>
	 * @throws Exception
	 */
	private void chkMskmPsbTabletUa() throws Exception
	{
		// ●モードチェック
		String mode = JFUWebCommon.getApplicationConst(APL_KEY_TEST_MODE);
		DEBUG_LOG.debug("■■■テストモード：" + mode + "■■■");

		if(JFUStrConst.ON.equals(mode))
		{
			// テストモードの場合、チェックを行わない
			return;
		}

		// ●申込可能タブレットユーザーエージェントチェック
		// セッションからユーザーエージェントを取得
		X33WSessionController session_controller = X33CUtil.getSession(this.getSessionId());
		HttpServletRequest request = session_controller.getServletRequest();
		String userAgent = request.getHeader(USER_AGENT);

		// 申込可能タブレットユーザーエージェント取得処理
		Map<String, String> uaMap = JFUWebCommon.getDispItemsAsMap(PATH_MSKM_PSB_TAB_UA, JFUStrConst.QUERY_ATTR_NAME);
		Collection<String> uaCollection = uaMap.values();

		// チェック結果
		boolean chkResult = false;

		// チェック実行
		Iterator<String> itr = uaCollection.iterator();
		while (itr.hasNext())
		{
			String uaStr = itr.next();
			Pattern ptn = Pattern.compile(uaStr);
			Matcher mc = ptn.matcher(userAgent);

			if(mc.find())
			{
				// 一致する情報が1つでもある場合、申込可能
				chkResult = true;
				break;
			}
		}

		// チェック結果
		if(!chkResult)
		{
			DEBUG_LOG.debug("■■■申込不可ユーザーエージェント■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0702);
		}
	}

	/**
	 * 督促ステータスチェック処理です。
	 * 
	 * <br>
	 * @param seikyKeiInfoBean 請求契約情報Bean
	 */
	private void chkTokusokuStat(X31SDataBeanAccess seikyKeiInfoBean)
	{
		// 督促ステータス取得
		String tokusokuStat = seikyKeiInfoBean.sendMessageString(CommonInfoCFConst.TOKUSOKU_STAT_32, GET);

		// 督促ステータスが「未設定」または「00:督促なし」の場合、チェック処理を抜ける
		if (JFUWebCommon.isNull(tokusokuStat) || JFUStrConst.CD00184_00.equals(tokusokuStat))
		{
			return;
		}

		if (Integer.parseInt(tokusokuStat) == Integer.parseInt(JFUStrConst.CD00184_04)
				|| Integer.parseInt(tokusokuStat) == Integer.parseInt(JFUStrConst.CD00184_06)
				|| Integer.parseInt(tokusokuStat) == Integer.parseInt(JFUStrConst.CD00184_10))
		{
			// 督促ステータスが「04:利用停止予告済（手続き不備）」または「06：利用停止予告済（手続き未完）」
			// または「10：利用停止予告済」の場合、督促ステータスエラー
			DEBUG_LOG.debug("■■■督促ステータスエラー 督促ステータス：" + tokusokuStat + "■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0116);
		}
		else if(Integer.parseInt(tokusokuStat) >= Integer.parseInt(JFUStrConst.CD00184_15))
		{
			// 督促ステータスが「15:強制解約予告済」以上の場合、督促ステータスエラー
			DEBUG_LOG.debug("■■■督促ステータスエラー 督促ステータス：" + tokusokuStat + "■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0104);
		}
	}

	/**
	 * 端末情報設定処理です。
	 * 
	 * <br>
	 * @param bean データBean
	 * @param outputMap アウトマップ
	 * @throws Exception 例外
	 */
	private void setTnmtInfo(X31SDataBeanAccess bean, HashMap outputMap) throws Exception
	{
		HashMap parentMap = null;
		if (outputMap.containsKey(FUSV028301CC))
		{
			parentMap = (HashMap)outputMap.get(FUSV028301CC);
		}

		if (parentMap != null && parentMap.containsKey(KAP_KEI_TNMT_INFO_LIST))
		{
			// 明細取得
			ArrayList childList = (ArrayList)parentMap.get(KAP_KEI_TNMT_INFO_LIST);
			if(childList == null || childList.size() == 0)
			{
				return;
			}

			// 基準日定義取得
			Map<String, String> baseDateMap = JFUWebCommon.getDispItemsAsMap(PATH_BASE_DATE, JFUStrConst.QUERY_ATTR_NAME);

			// 申込可能端末定義取得
			Map<String, String> mskmPsbTnmtMap = JFUWebCommon.getDispItemsAsMap(PATH_MSKM_PSB_TAB, JFUStrConst.QUERY_ATTR_NAME);
			Collection<String> tnmtCollection = mskmPsbTnmtMap.values();

			// 基準日(FROM)
			String from = baseDateMap.get(BASE_DATE_FROM);
			// 基準日(TO)
			String to = baseDateMap.get(BASE_DATE_TO);
			// オンライン運用日付
			String opeDate = JFUWebCommon.getOpeDate(this, null);

			// ｅｏスマートリンクタブレットリスト
			X31SDataBeanAccessArray tnmtBeanArray = bean.getDataBeanArray(FUW11101SFConst.EO_SMART_LINK_TAB_LIST);
			tnmtBeanArray.clearArray();

			// リスト追加カウント
			int addCnt = 0;

			for (int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);

				// 申込年月日
				String mskmYmd = getMapVal(childMap, MSKM_YMD);
				// 保証・補償期間開始日算出基準年月日
				String hcprdStadSnststdYmd = getMapVal(childMap, HCPRD_STAD_SNSTSTD_YMD);
				// 期間開始日算出方法識別コード
				String tmcpPrdStadSswSkcd = getMapVal(childMap, TMCP_PRD_STAD_SSW_SKCD);
				// 端末補償期間
				String tmcpPrd = getMapVal(childMap, TMCP_PRD);
				// 機器オプションサービスコード
				String kkopSvcCd = getMapVal(childMap, KKOP_SVC_CD);
				// 機器オプションサービス契約ステータス
				String kkopSvcKeiStat = getMapVal(childMap, KKOP_SVC_KEI_STAT);
				// 宅内機器型式名
				String taknkikiModelNm = getMapVal(childMap, TAKNKIKI_MODEL_NM);
				// 宅内機器型式コード
				String taknkikiModelCd = getMapVal(childMap, TAKNKIKI_MODEL_CD);
				// 機器製造番号
				String kikiSeizoNo = getMapVal(childMap, KIKI_SEIZO_NO);
				// 料金プラン固定金額
				String pplanKoteiAmnt = getMapVal(childMap, PPLAN_KOTEI_AMNT);
				// 料金プラン固定単価料金プランコード
				String kttankaPplanCd = getMapVal(childMap, KTTANKA_PPLAN_CD);
				// SYSID
				String sysid = getMapVal(childMap, SYSID);
				// 申込明細番号
				String mskmDtlNo = getMapVal(childMap, MSKM_DTL_NO);
				// 機器提供サービス契約番号
				String kktkSvcKeiNo = getMapVal(childMap, KKTK_SVC_KEI_NO);
				// 機器提供サービス契約ステータス
				String kktkSvcKeiStat = getMapVal(childMap, KKTK_SVC_KEI_STAT);
				// 保証・補償期間開始日算出基準年月日識別コード
				String hcprdStadSnststdYmdScd = getMapVal(childMap, HCPRD_STAD_SNSTSTD_YMD_SCD);
				
				// ●マスタ値チェック
				if (JFUWebCommon.isNull(tmcpPrdStadSswSkcd) || JFUWebCommon.isNull(tmcpPrd))
				{
					// どれか1つでもマスタ値不正の場合、システムエラーとする
					DEBUG_LOG.debug("■■■マスタ値不正エラー■■■");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
				}

				// ●申込可能端末チェック
				boolean chkMskmPsbTnmt = false;
				Iterator<String> itr = tnmtCollection.iterator();
				while (itr.hasNext())
				{
					String str = itr.next();
					Pattern ptn = Pattern.compile(str);
					Matcher mc = ptn.matcher(taknkikiModelCd);

					if(mc.find())
					{
						// 一致する情報が1つでもある場合、申込可能端末
						chkMskmPsbTnmt = true;
						break;
					}
				}
				if(!chkMskmPsbTnmt)
				{
					// チェック結果が「false」の場合、対象外
					continue;
				}

				// ●日付範囲内チェック
				if(!(Integer.parseInt(from) <= Integer.parseInt(mskmYmd) && Integer.parseInt(to) >= Integer.parseInt(mskmYmd)))
				{
					// 範囲外の場合、対象外
					continue;
				}

				// ●保証・補償期間開始日算出基準年月日チェック
				if(!JFUWebCommon.isNull(hcprdStadSnststdYmd) && !(Integer.parseInt(from) <= Integer.parseInt(hcprdStadSnststdYmd)))
				{
					// 基準日(FROM)以降でない場合、対象外
					continue;
				}

				// ●補償期間対象チェック(保証・補償期間開始日算出基準年月日が未設定の場合はチェックしない)
				String compsStaYmd = JFUStrConst.EMPTY;
				String compsEndYmd = JFUStrConst.EMPTY;
				if (!JFUWebCommon.isNull(hcprdStadSnststdYmd))
				{
					compsStaYmd =
							JFUWebCommon.getHoshoCompsYmdSta(this, hcprdStadSnststdYmd, tmcpPrdStadSswSkcd, JFUStrConst.ANSN_COMPS,
									hcprdStadSnststdYmdScd);
					compsEndYmd = JFUWebCommon.getCompsYmdEnd(this, compsStaYmd, tmcpPrd);

					if(Integer.parseInt(opeDate) > Integer.parseInt(compsEndYmd))
					{
						// オンライン運用日付より過去日の場合、対象外
						continue;
					}
				}

				// ●端末補償申込チェック
				if(!JFUWebCommon.isNull(kkopSvcCd) && JFUStrConst.KK2801_KKOP_SVC_CD_G03.equals(kkopSvcCd)
						&& !JFUStrConst.CD01616_920.equals(kkopSvcKeiStat))
				{
					// 端末補償を一度でも申し込んでいる(キャンセル以外)場合、対象外
					continue;
				}

				// ●データBeanを追加＆情報設定
				X31SDataBeanAccess tnmtBean = tnmtBeanArray.addDataBean();
				// 申し込む(デフォルトチェック)
				tnmtBean.sendMessageBoolean(FUW11101SFConst.MSKM_TNMT_COMPS_01, SET, true);
				// 商品名
				tnmtBean.sendMessageString(FUW11101SFConst.GDS_NM_01, SET, getDspMongon(taknkikiModelNm, null));
				// 型番
				tnmtBean.sendMessageString(FUW11101SFConst.MDL_NO_01, SET, getDspMongon(taknkikiModelCd, null));
				// 機器製造番号
				tnmtBean.sendMessageString(FUW11101SFConst.KIKI_SEIZO_NO_01, SET, getDspMongon(kikiSeizoNo, null));
				// 契約日(補償開始日)
				tnmtBean.sendMessageString(FUW11101SFConst.KEI_YMD_01, SET, getDspMongon(compsStaYmd, JPCModelConstant.FUNC_CD_1));
				// 補償終了日
				tnmtBean.sendMessageString(FUW11101SFConst.COMPS_END_YMD_01, SET, getDspMongon(compsEndYmd, JPCModelConstant.FUNC_CD_1));
				// 端末補償月額料金
				tnmtBean.sendMessageString(FUW11101SFConst.COMPS_MONTH_PRC_01, SET, pplanKoteiAmnt);
				// インデックス
				tnmtBean.sendMessageString(FUW11101SFConst.TNMT_INDEX_01, SET, String.valueOf(addCnt));
				// 端末補償料金プランコード
				tnmtBean.sendMessageString(FUW11101SFConst.TNMT_COMPS_PPLAN_CD_01, SET, kttankaPplanCd);
				// 機器提供サービス契約番号
				tnmtBean.sendMessageString(FUW11101SFConst.KKTK_SVC_KEI_NO_01, SET, kktkSvcKeiNo);
				// 機器提供サービス契約ステータス
				tnmtBean.sendMessageString(FUW11101SFConst.KKTK_SVC_KEI_STAT_01, SET, kktkSvcKeiStat);
				// SYSID
				tnmtBean.sendMessageString(FUW11101SFConst.SYSID_01, SET, sysid);
				// 申込明細番号
				tnmtBean.sendMessageString(FUW11101SFConst.MSKM_DTL_NO_01, SET, mskmDtlNo);

				// カウントアップ
				addCnt++;
			}
		}
	}

	/**
	 * 有効端末数チェック処理です。
	 * 
	 * <br>
	 * @param bean データBean
	 */
	private void chkValidTnmt(X31SDataBeanAccess bean)
	{
		// ｅｏスマートリンクタブレットリスト
		X31SDataBeanAccessArray tnmtBeanArray = bean.getDataBeanArray(FUW11101SFConst.EO_SMART_LINK_TAB_LIST);

		if(tnmtBeanArray == null || tnmtBeanArray.getCount() == 0)
		{
			DEBUG_LOG.debug("■■■有効端末0台エラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0123);
		}
	}

	/**
	 * 料金表作成処理です。
	 * 
	 * <br>
	 * @param bean サービスフォームBean
	 * @param outputMap アウトマップ
	 * @throws Exception 例外
	 */
	private void setPrcTable(X31SDataBeanAccess bean, HashMap outputMap) throws Exception
	{
		// ******************************************************************
		// コメント div id
		List<String> setCommentSkbtList = new ArrayList<String>();
		// コメント テキスト
		List<String> setCommentList = new ArrayList<String>();

		// タイトル div id
		List<String> setTableTitleSkbtList = new ArrayList<String>();
		// タイトル テキスト
		List<String> setTableTitleList = new ArrayList<String>();

		// 月額料金 テーブル tr id
		List<String> setTableValueSkbtList = new ArrayList<String>();
		// 初期費用 テーブル tr id
		//List<String> setTableValueSkbtList2 = new ArrayList<String>();
		// テーブル スタイル
		List<String> setTableStyleClass1List = new ArrayList<String>();
		// テーブル 幅
		List<String> setTableStyleClass2List = new ArrayList<String>();

		// 月額料金 左値
		List<String> setTableLeftValueList = new ArrayList<String>();
		// 月額料金 右値
		List<String> setTableRightValueList = new ArrayList<String>();

		// 初期費用 左値
		//List<String> setTableLeftValueList2 = new ArrayList<String>();
		// 初期費用 右値
		//List<String> setTableRightValueList2 = new ArrayList<String>();

		// 備考 div id
		List<String> setBikoSkbtList = new ArrayList<String>();
		// 備考 テキスト
		List<String> setBikoList = new ArrayList<String>();

		// テーブルの値、左値、右値の各リストを格納
		Map<String, List<String>> tableValueMap = new LinkedHashMap<String, List<String>>();

		// 料金表スタイルクラスを取得
		Map<String, String> classMap = JFUWebCommon.getDispItemsAsMap(PATH_STYLE_CLASS, JFUStrConst.QUERY_ATTR_NAME);
		// ******************************************************************

		// 料金表表示現在日設定処理
		JFUWebCommon.setPrcDspNowDay(this);

		// 文言定義取得
		Map<String, String> mongonMap = JFUWebCommon.getDispItemsAsMap(PATH_MONGON, JFUStrConst.QUERY_ATTR_NAME);

		HashMap parentMap = null;
		if (outputMap.containsKey(FUSV028301CC))
		{
			parentMap = (HashMap)outputMap.get(FUSV028301CC);
		}

		ArrayList childList = null;
		if (parentMap != null && parentMap.containsKey(KAP_KEI_TNMT_INFO_LIST))
		{
			// 明細取得
			childList = (ArrayList)parentMap.get(KAP_KEI_TNMT_INFO_LIST);
			if(childList == null || childList.size() == 0)
			{
				return;
			}
		}

		// 重複チェック用リスト
		List chkList = new ArrayList();

		for (int i = 0; i < childList.size(); i++)
		{
			HashMap childMap = (HashMap)childList.get(i);

			// タイトル設定(ループの初回のみ)
			if(i == 0)
			{
				// テーブルタイトルエリア
				setTableTitleSkbtList.add(DIV_TITLE_ID);
				// タイトル名
				setTableTitleList.add(mongonMap.get(GETSUGAKU));

				// テーブルスタイル(タイトルの背景色)に値を入れたい場合に設定する
				setTableStyleClass1List.add(classMap.get(TITLE_STYLE_1));
				// テーブルスタイル(テーブルの幅)に値を入れたい場合に設定する
				setTableStyleClass2List.add(classMap.get(TABLE_HABA_1));

				// 未選択時の表示を設定
				// 値 tr id
				setTableValueSkbtList.add(DIV_NONE);
				// 左値(空文字)
				setTableLeftValueList.add(JFUStrConst.EMPTY);
				// 右値(ハイフン)
				setTableRightValueList.add(JFUStrConst.MINUS + JFUStrConst.HALF_SPACE + mongonMap.get(PRC_TANI));
			}

			// 端末補償料金プランコード
			String tnmtCompsPplanCd = (String)childMap.get(KTTANKA_PPLAN_CD);

			// 商品名
			String tnmtNm = JFUStrConst.EMPTY;
			if(!JFUWebCommon.isNull(childMap.get(TAKNKIKI_MODEL_NM)))
			{
				// 値が設定されている場合
				tnmtNm = encodeHtml((String)childMap.get(TAKNKIKI_MODEL_NM)) + JFUStrConst.RETURN_CODE_BR + mongonMap.get(ANSHIN_DAIKIN);
			}
			else
			{
				// 値が設定されていない場合(※この条件に一致する場合はほぼない。マスタ設定不正の場合のみ。)
				tnmtNm = encodeHtml((String)childMap.get(TAKNKIKI_MODEL_CD)) + JFUStrConst.RETURN_CODE_BR + mongonMap.get(ANSHIN_DAIKIN);
			}

			// 端末補償金額
			String price = (String)childMap.get(PPLAN_KOTEI_AMNT);
			// 端末補償金額単位
			String priceTani = (String)childMap.get(PPLAN_KOTEI_TANI_CD_NM);

			// 重複チェック
			if(chkList.contains(tnmtCompsPplanCd))
			{
				// 格納済みの同じデータは対象外
				continue;
			}

			// 金額文言作成
			StringBuffer prcStr = new StringBuffer();
			prcStr.append(JFUWebCommon.formatNumber(price));
			prcStr.append(JFUStrConst.HALF_SPACE);
			prcStr.append(priceTani);

			// 料金表用リストに値を設定
			// 値：TRタグのID (英数小文字)
			setTableValueSkbtList.add(tnmtCompsPplanCd.toLowerCase());
			// 左値
			setTableLeftValueList.add(tnmtNm);
			// 右値
			setTableRightValueList.add(prcStr.toString());

			// 重複チェック用リストに格納
			chkList.add(tnmtCompsPplanCd);
		}

		// KEYは『タイトル名 + タイトル番号(0から始まる連番) + テーブル左値リスト設定キー』
		// KEYは『タイトル名 + タイトル番号(0から始まる連番) + テーブル右値リスト設定キー』
		// KEYは『タイトル名 + タイトル番号(0から始まる連番) + テーブル値識別リスト設定キー』
		tableValueMap.put((String)mongonMap.get(GETSUGAKU) + 0 + KEY_TABLE_LEFT_VALUE_LIST, setTableLeftValueList);
		tableValueMap.put((String)mongonMap.get(GETSUGAKU) + 0 + KEY_TABLE_RIGHT_VALUE_LIST, setTableRightValueList);
		tableValueMap.put((String)mongonMap.get(GETSUGAKU) + 0 + KEY_TABLE_VALUE_SKBT_LIST, setTableValueSkbtList);

		//tableValueMap.put((String)mongonMap.get(SHOKICOST) + 1 + KEY_TABLE_LEFT_VALUE_LIST, setTableLeftValueList2);
		//tableValueMap.put((String)mongonMap.get(SHOKICOST) + 1 + KEY_TABLE_RIGHT_VALUE_LIST, setTableRightValueList2);
		//tableValueMap.put((String)mongonMap.get(SHOKICOST) + 1 + KEY_TABLE_VALUE_SKBT_LIST, setTableValueSkbtList2);

		// ************************************************************************************************************************
		// ●コメントエリア情報設定処理呼び出し
		// ●備考エリア情報設定処理呼び出し
		// ●タイトル・テーブルエリア情報設定処理呼び出し
		// ************************************************************************************************************************

		X31SDataBeanAccessArray prcInfoAreaListArray = bean.getDataBeanArray(JFUStrConst.PRC_INFO_PRC_INFO_AREA_LIST);
		X31SDataBeanAccess titleListArrayAccess = prcInfoAreaListArray.addDataBean();

		// コメントエリア表示用リスト設定
		JFUWebCommon.setCommentList(titleListArrayAccess, setCommentSkbtList, setCommentList);
		// 備考エリア表示用リスト設定
		JFUWebCommon.setBikoList(titleListArrayAccess, setBikoSkbtList, setBikoList);
		// テーブルタイトルエリア表示用リスト設定
		JFUWebCommon.setTableTitleList(titleListArrayAccess, setTableTitleSkbtList, setTableTitleList, setTableStyleClass1List,
				setTableStyleClass2List, tableValueMap);
	}

	/**
	 * サービスIFのエラー処理です。
	 * 
	 * <br>
	 * @param se JCCWebServiceException
	 */
	private void chkSvcIfErr(JCCWebServiceException se)
	{
		// 例外情報を取得
		X31CMessageResult msgResult = se.getMessageList();
		X31CMessageMoreInfo[] moreInfo = msgResult.getMessageMoreInfoList();

		// 関連チェック系は必ずエラーが1つのため0番目から取得する。
		X31CMessageMoreInfo info = moreInfo[0];

		String templateid = info.getTemplateId();
		String itemid = info.getItemId();
		String status = info.getStatus();
		String errFlg = info.getItemCheckErr();

		DEBUG_LOG.debug("■■■テンプレートID：" + templateid + "/エラーフラグ：" + errFlg + "/項目ID：" + itemid + "■■■");

		// 関連チェックエラー処理
		if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status))
		{
			if (TMP_ID_EKK2811D010.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && UPD_DTM_BF.equals(itemid))
			{
				// 機器オプションサービス契約登録：排他エラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0204);
			}
			else if (TMP_ID_EKK2811C030.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && UPD_DTM_BF.equals(itemid))
			{
				// 機器オプションサービス契約照査：排他エラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0204);
			}
			else if (TMP_ID_EKK2811C040.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && UPD_DTM_BF.equals(itemid))
			{
				// 機器オプションサービス契約締結：排他エラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0204);
			}
			else if (TMP_ID_EKK2811C070.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && UPD_DTM_BF.equals(itemid))
			{
				// 機器オプションサービス契約開始：排他エラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0204);
			}
			else if (TMP_ID_EKK2811D010.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && KKTK_SVC_KEI_NO.equals(itemid))
			{
				// 機器オプションサービス契約登録：登録情報無しエラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			else
			{
				// 上記以外：システムエラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}
		}
		else
		{
			// 上記以外：システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
	}

	/**
	 * 申込完了メール内容文言作成処理です。
	 * 
	 * <br>
	 * @param bean サービスフォームBean
	 * @return 申込完了メール文言
	 * @throws Exception 例外
	 */
	private String createMskmFinMail(X31SDataBeanAccess bean) throws Exception
	{
		// 返却用
		StringBuffer mongon = new StringBuffer();

		// 文言定義取得
		Map<String, String> mongonMap = JFUWebCommon.getDispItemsAsMap(PATH_MONGON, JFUStrConst.QUERY_ATTR_NAME);
		// メール内容文言取得
		Map<String, String> mailMap = JFUWebCommon.getDispItemsAsMap(PATH_MSKM_FIN_MAIL, JFUStrConst.QUERY_ATTR_NAME);

		if(mailMap == null || mailMap.size() == 0)
		{
			DEBUG_LOG.debug("■■■メール内容文言取得エラー■■■");
			return mongon.toString();
		}

		// ｅｏスマートリンクタブレットリスト
		X31SDataBeanAccessArray tnmtBeanArray = bean.getDataBeanArray(FUW11101SFConst.EO_SMART_LINK_TAB_LIST);
		// カウント数
		int mskmCnt = 0;

		// 申し込む端末カウント
		for (int i = 0; i < tnmtBeanArray.getCount(); i++)
		{
			X31SDataBeanAccess tnmtBean = tnmtBeanArray.getDataBean(i);
			if(tnmtBean.sendMessageBoolean(FUW11101SFConst.MSKM_TNMT_COMPS_01, GET))
			{
				mskmCnt++;
			}
		}

		// 文言作成
		int setCnt = 0;
		for (int i = 0; i < tnmtBeanArray.getCount(); i++)
		{
			X31SDataBeanAccess tnmtBean = tnmtBeanArray.getDataBean(i);

			// 申込判定
			if(!tnmtBean.sendMessageBoolean(FUW11101SFConst.MSKM_TNMT_COMPS_01, GET))
			{
				// 申し込まない端末情報は設定しない
				continue;
			}

			// 置換前文言取得
			String mailMongo = mailMap.get(MAIL_MONGON);
			// 置換前文言取得
			String ttdki = mongonMap.get(TTDKI);

			if(JFUWebCommon.isNull(mailMongo))
			{
				DEBUG_LOG.debug("■■■メール内容文言取得エラー■■■");
				break;
			}

			// 商品名
			String gdsNm = tnmtBean.sendMessageString(FUW11101SFConst.GDS_NM_01, GET).replace(ttdki, JFUStrConst.HALF_HAIHUN);
			// 型番
			String mdlNo = tnmtBean.sendMessageString(FUW11101SFConst.MDL_NO_01, GET).replace(ttdki, JFUStrConst.HALF_HAIHUN);
			// 機器製造番号
			String kikiSeizoNo = tnmtBean.sendMessageString(FUW11101SFConst.KIKI_SEIZO_NO_01, GET).replace(ttdki, JFUStrConst.HALF_HAIHUN);
			// 契約日
			String keiYmd = tnmtBean.sendMessageString(FUW11101SFConst.KEI_YMD_01, GET).replace(ttdki, JFUStrConst.HALF_HAIHUN);
			// 補償終了日
			String compsEndYmd = tnmtBean.sendMessageString(FUW11101SFConst.COMPS_END_YMD_01, GET).replace(ttdki, JFUStrConst.HALF_HAIHUN);

			// 商品名
			mailMongo = mailMongo.replace(REPLACE_STR_1, JFUStrConst.RETURN_CODE + gdsNm + JFUStrConst.RETURN_CODE);
			// 型番
			mailMongo = mailMongo.replace(REPLACE_STR_2, JFUStrConst.RETURN_CODE + mdlNo + JFUStrConst.RETURN_CODE);
			// 機器製造番号
			mailMongo = mailMongo.replace(REPLACE_STR_3, JFUStrConst.RETURN_CODE + kikiSeizoNo + JFUStrConst.RETURN_CODE);
			// 契約日
			mailMongo = mailMongo.replace(REPLACE_STR_4, JFUStrConst.RETURN_CODE + keiYmd + JFUStrConst.RETURN_CODE);
			// 補償終了日
			mailMongo = mailMongo.replace(REPLACE_STR_5, JFUStrConst.RETURN_CODE + compsEndYmd);

			// 文字列連結
			mongon.append(mailMongo);

			setCnt++;

			if(setCnt < mskmCnt)
			{
				// 最後のデータ以外最後を改行する
				mongon.append(JFUStrConst.RETURN_CODE + JFUStrConst.RETURN_CODE);
			}
		}

		// 文字列連結した文字列を返却
		return mongon.toString();
	}

	/**
	 * 各種文言を取得します。
	 * 
	 * <br>
	 * @param val 値
	 * @param funcCd 機能コード
	 * @return 文言
	 * @throws Exception 例外
	 */
	private String getDspMongon(String val, String funcCd) throws Exception
	{
		// 文言格納
		String mongon = JFUStrConst.EMPTY;

		// 文言定義取得
		Map<String, String> mongonMap = JFUWebCommon.getDispItemsAsMap(PATH_MONGON, JFUStrConst.QUERY_ATTR_NAME);

		if(JFUWebCommon.isNull(val))
		{
			mongon = mongonMap.get(TTDKI);
		}
		else
		{
			if(JPCModelConstant.FUNC_CD_1.equals(funcCd) && DATE_FORMAT_2.length() == val.length())
			{
				// 機能コード1：日付フォーマット適用
				SimpleDateFormat sdf1 = new SimpleDateFormat(DATE_FORMAT_1);
				SimpleDateFormat sdf2 = new SimpleDateFormat(DATE_FORMAT_2);

				mongon = sdf1.format(sdf2.parse(val));
			}
			else
			{
				mongon = val;
			}
		}

		return mongon;
	}

	/**
	 * マップから値を取得します。
	 * 
	 * <br>
	 * @param map マップ
	 * @param key キー
	 * @return 値
	 */
	private String getMapVal(HashMap map, String key)
	{
		String val = JFUStrConst.EMPTY;

		if(map.containsKey(key) && !JFUWebCommon.isNull(map.get(key)))
		{
			val = (String)map.get(key);
		}

		return val;
	}

	/**
	 * 文字列エスケープ処理です。
	 * 
	 * <br>
	 * @param str 文字列
	 * @return 置換後文字列
	 */
	private String encodeHtml(String str)
	{
		// 値未設定の場合処理しない
		if(JFUWebCommon.isNull(str))
		{
			return str;
		}

		// 置換後文字列格納用
		String result = str;

		Set keySet = encMap.keySet();
		Iterator it = keySet.iterator();

		while(it.hasNext())
		{
			String key = (String)it.next();

			if(result.indexOf(key) > 0)
			{
				// エンコード対象文字が1つでもある場合、置き換える
				result = result.replace(key, (String)encMap.get(key));
			}
		}

		return result;
	}
}