/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：FUW01901SFLogic
 *  ソースファイル名：FUW01901SFLogic.java
 *  作成者          ：富士通
 *  日付            ：2011年05月01日
 *＜機能概要＞
 *  メールアドレス追加申込のビューロジッククラスです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/05/01   FJ）中尾    新規作成
 *   v4.00.00    2012/06/29   FJ）大島    変更【ANK-1163-00-00】 変更系申込が可能となるタイミングについて
 *   v4.00.00    2012/06/29   FJ）大島    変更【ANK-0529-00-00】 POPID表記削除対応
 *   v4.00.00    2012/07/03   FJ）大島    変更【ANK-0381-00-00】 IPv6無料文言不備
 *   v4.00.00    2012/08/22   FJ）井口    変更【ANK-0545-00-00】 PMP：サービスコード対応（指示書登録）
 *   v4.00       2012/09/22   FJ）岡井    変更【ANK-1198-00-00】変更系申込画面の提供条件・利用規約の設置位置について
 *   v5.00       2013/03/06   FJ）井口    変更【ST1-2013-0000437】 フロント「オプトインメール受信設定」設定漏れ対応
 *   v5.00       2013/03/21   FJ）中谷    変更【IT1-2013-0000571】一時支払料金の取得項目変更(申込完了メールの送信先の改修)
 *   v5.00       2013/05/23   FJ）中谷    変更【ST3-2013-0000919】希望メールアカウント登録済の契約状態エラーハンドリング追加
 *   v8.00       2014/01/27   FJ) 文元    変更【ANK-1589-00-00】消費増税に伴う料金施策
 *   v9.00       2014/07/30   FJ）中谷    変更【OM-2014-0002586】オプトインメール受信設定登録時の排他エラー不具合対応
 *   v23.00      2016/03/15   FJ) 中西    変更【ANK-2350-00-00】 【ＮＯ．１８２３】POPIDパスワード、WebIDパスワードの再振不正
 *   v32.00      2017/04/13   FJ) 横山    変更【ANK-3149-00-00】新セキュリティパック導入
 *   v37.00      2018/02/16   FJ) 美濃原  変更【ANK-3366-00-00】eo光設備卸対応
 *   
 **********************************************************************/
package eo.web.webview.FUW01901SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

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.X31CMessageResult.X31CMessageMoreInfo;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
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.FUSV0053_FUSV0053OPDBMapper;
import eo.web.webview.mapping.FUSV0054_FUSV0054OPDBMapper;

/**
 * メールアドレス追加申込のビューロジッククラスです。
 * <p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings( { "serial", "unchecked" })
public class FUW01901SFLogic extends JCCWebBusinessLogic
{
	/** サービスID */
	private static final String USECASE_ID_FUSV0053 = "FUSV0053";
	/** サービスID */
	private static final String USECASE_ID_FUSV0054 = "FUSV0054";

	/** サービスID 会員情報更新依頼 */
	private static final String USECASE_ID_CKSV9001 = "CKSV9001";

	/** サービスIF-ID EKK0361D010 */
	private static final String EKK0361D010 = "EKK0361D010";
	/** サービスIF-ID EKK0361C010 */
	private static final String EKK0361C010 = "EKK0361C010";
	/** サービスIF-ID EKK0361C030 */
	private static final String EKK0361C030 = "EKK0361C030";
	/** サービスIF-ID EZM0111D010 */
	private static final String EZM0111D010 = "EZM0111D010";

	/** サービスIF-ITEM-ID op_svc_cd */
	private static final String OP_SVC_CD = "op_svc_cd";
	/** サービスIF-ITEM-ID mskm_dtl_no */
	private static final String MSKM_DTL_NO = "mskm_dtl_no";
	/** サービスIF-ITEM-ID kibo_ml_account_1 */
	private static final String KIBO_ML_ACCOUNT_1 = "kibo_ml_account_1";
	/** サービスIF-ITEM-ID upd_dtm_bf */
	private static final String UPD_DTM_BF = "upd_dtm_bf";
	/** サービスIF-ITEM-ID op_svc_kei_no */
	private static final String OP_SVC_KEI_NO = "op_svc_kei_no";
	/** サービスIF-ITEM-ID aging_tg_value */
	private static final String AGING_TG_VALUE = "aging_tg_value";

	/** FUSV005402SC */
	private static final String FUSV005402SC = "FUSV005402SC";
	/** FUSV005303SC */
	private static final String FUSV005303SC = "FUSV005303SC";
	/** EKK0601B001CBSMsg1List */
	private static final String EKK0601B001CBSMSG1LIST = "EKK0601B001CBSMsg1List";
	/** FUSV005301CC */
	private static final String FUSV005301CC = "FUSV005301CC";
	/** EKK0721A010CBSMsg1List */
	private static final String EKK0721A010CBSMSG1LIST = "EKK0721A010CBSMsg1List";
	/** EKK0721A010CBSMsg1List */
	private static final String PPLAN_KOTEI_AMNT = "pplan_kotei_amnt";

	/** 申込完了メールID */
	private static final String MSKM_COMP_MAIL_ID = "FUW019_1";
	
	/** 置換文字(チェック用) */
	private static final String[] MLAD_NOT_EQUAL_MSG = { "このメールアドレスはお使いいただけません。別のメールアドレス" ,"入力"};
	/** エラー表示画面項目箇所(チェック用) */
	private static final String ERR_PLACE_MLAD_ERR = "mlad";
	/** エイジング　NG */
	private static final String NG = "NG";

	/**
	 * 初期処理です。
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{

		// ■設備卸チェック
		JFUWebCommon.checkOrosi(this);

		// ---- 共有フォームbean ----
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// ●共有フォームBeanより現顧客契約情報を取得する。
		Map<String, Object> resultMap = getCommoninfoBeanInfo(commoninfoBean, null);

		// 各Beanを取得
		X31SDataBeanAccess ssoInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SSO_INFO);
		X31SDataBeanAccess svcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SVC_KEI_INFO);

		// ---- サービスフォームbean ----
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 各Beanを配列に格納
		X31SDataBeanAccess[] beanArray = { bean, ssoInfoBean, svcKeiInfoBean };

		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>(16);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0053);

		FUSV0053_FUSV0053OPDBMapper mapper = new FUSV0053_FUSV0053OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// ●上りマッピング
		// 割引サービス契約一覧照会（割引サービス指定）SC
		mapper.setFUSV005301SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		// 料金コース_オプションサービス一意照会SC
		mapper.setFUSV005302SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2);
		// 料金プラン固定単価（オプション申込料金）一覧照会SC
		mapper.setFUSV005303SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		// 初期費用一覧照会コモンコンポーネント部品CC
		mapper.setFUSV005301CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		// NGワード一覧照会SC
		mapper.setFUSV005304SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		// 業務パラメータ管理一意照会SC
		mapper.setFUSV005305SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		// 業務パラメータ管理一意照会SC
		mapper.setFUSV005306SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		// 業務パラメータ管理一意照会SC
		mapper.setFUSV005307SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		// 料金コース_サブオプションサービス一覧照会SC
		mapper.setFUSV005308SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		/** 2017/04/17 ANK-3149-00-00 add start */
		//* セキュリティパック申込表示制御CC
		mapper.setFUSV005302CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		/** 2017/04/17 ANK-3149-00-00 add end */

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ●サービスの呼び出しを行う。
		try
		{
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ●下りマッピング
		// 割引サービス契約一覧照会（割引サービス指定）SC
		mapper.getFUSV005301SC(bean, outputMap);
		// 料金コース_オプションサービス一意照会SC
		mapper.getFUSV005302SC(bean, outputMap);
		// NGワード一覧照会SC
		mapper.getFUSV005304SC(bean, outputMap);
		// 業務パラメータ管理一意照会SC
		mapper.getFUSV005305SC(bean, outputMap);
		// 業務パラメータ管理一意照会SC
		mapper.getFUSV005306SC(bean, outputMap);
		// 業務パラメータ管理一意照会SC
		mapper.getFUSV005307SC(bean, outputMap);
		// 料金コース_サブオプションサービス一覧照会SC
		mapper.getFUSV005308SC(bean, outputMap);
		/** 2017/04/17 ANK-3149-00-00 add start */
		//* セキュリティパック申込表示制御CC
		mapper.getFUSV005302CC(bean, outputMap);
		/** 2017/04/17 ANK-3149-00-00 add end */

		// メールアドレス取得数をサービスフォームbeanに設定
		int mladCnt = (Integer)resultMap.get(FUW01901SFConst.MLAD_STKU_CNT);
		bean.sendMessageString(FUW01901SFConst.MLAD_STKU_CNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(mladCnt));
		// メールアドレス追加可能数をサービスフォームbeanに設定
		int mladMaxCnt = bean.sendMessageLong(FUW01901SFConst.MLAD_MAX_CNT, X31CWebConst.DATABEAN_GET_VALUE).intValue();
		bean.sendMessageString(FUW01901SFConst.MLAD_ADD_PSB_CNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(mladMaxCnt - mladCnt));
		// メールアドレス追加無料数をサービスフォームbeanに設定
		int mladMuryoCnt = bean.sendMessageLong(FUW01901SFConst.MLAD_MRYO_CNT, X31CWebConst.DATABEAN_GET_VALUE).intValue();
		bean.sendMessageString(FUW01901SFConst.MLAD_MRYO_CNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(mladMuryoCnt - mladCnt));

		// ●メールアドレス追加上限チェック
		if (chkMaxMladCnt(bean))
		{
			// 契約状態エラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// 有料フラグをサービスフォームbeanに設定
		bean.sendMessageBoolean(FUW01901SFConst.PAY_FLG, X31CWebConst.DATABEAN_SET_VALUE, setPayFlg(bean, outputMap));

		// マンション区分を設定
		bean.sendMessageBoolean(FUW01901SFConst.MANSION_DIV, X31CWebConst.DATABEAN_SET_VALUE, getMansionDiv(bean, commoninfoBean, outputMap));

		// 無料数
		int muryoCnt = bean.sendMessageLong(FUW01901SFConst.MLAD_MRYO_CNT, X31CWebConst.DATABEAN_GET_VALUE).intValue();
		// 有料フラグ
		boolean payFlg = bean.sendMessageBoolean(FUW01901SFConst.PAY_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		/** 2017/04/13 ANK-3149-00-00 mod start */
		// パック契約フラグ
		boolean packFlg = bean.sendMessageBoolean(FUW01901SFConst.PACK_KEI_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		/** 2017/04/13 ANK-3149-00-00 mod end */
		// マンションフラグ
		boolean manshonFlg = bean.sendMessageBoolean(FUW01901SFConst.MANSION_DIV, X31CWebConst.DATABEAN_GET_VALUE);

		/** 2017/04/13 ANK-3149-00-00 mod start */
		// 「無料数あり＆マンションタイプ」、「パック契約の場合」、「有料フラグ無しの場合」以下の処理を行う
		if ((muryoCnt > 0 && manshonFlg) || packFlg || !payFlg)
		{
			/** 2017/04/13 ANK-3149-00-00 mod end */
			// 無料表示用の基本料金情報を設定する。
			JFUWebCommon.setFreePrcInfoMap(outputMap, FUSV005303SC);
		}

		// ●料金表マッピング(FUSV005301SC、FUSV005301CC)
		JFUWebCommon.setPrcInfoArea(bean, outputMap, FUSV005303SC, FUSV005301CC, JFUScreenConst.SCREEN_ID_FUW01901);

		// 料金表表示現在日設定処理
		JFUWebCommon.setPrcDspNowDay(this);
		
		// 遷移先画面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_FUW01901);

		return true;
	}

	/**
	 * 申込画面の確認ボタン押下時の処理です。
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean cfm() throws Exception
	{
		// ---- 共有フォームbean ----
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// ●共有フォームBeanより現顧客契約情報を取得する。
		Map<String, Object> resultMap = getCommoninfoBeanInfo(commoninfoBean, null);

		// SYSID SSO
		String ssoInfoSysid = (String)resultMap.get(CommonInfoCFConst.SYSID_21);

		// 各Beanを取得
		X31SDataBeanAccess ssoInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SSO_INFO);
		X31SDataBeanAccess opSvcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.OP_SVC_KEI_INFO);
		X31SDataBeanAccess seikyKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SEIKY_KEI_INFO);
		X31SDataBeanAccess svcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SVC_KEI_INFO);

		// ---- サービスフォームbean ----
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// メールアドレス取得数
		int mladCnt = (Integer)resultMap.get(FUW01901SFConst.MLAD_STKU_CNT);
		// メールアドレス取得数をサービスフォームbeanに設定
		bean.sendMessageString(FUW01901SFConst.MLAD_STKU_CNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(mladCnt));
		// メールアドレス追加可能数をサービスフォームbeanに設定
		int mladMaxCnt = bean.sendMessageLong(FUW01901SFConst.MLAD_MAX_CNT, X31CWebConst.DATABEAN_GET_VALUE).intValue();
		bean.sendMessageString(FUW01901SFConst.MLAD_ADD_PSB_CNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(mladMaxCnt - mladCnt));

		// 各Bean情報を配列に格納
		X31SDataBeanAccess[] beanArray = { bean, opSvcKeiInfoBean, seikyKeiInfoBean, ssoInfoBean, svcKeiInfoBean };

		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>(16);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0054);

		FUSV0054_FUSV0054OPDBMapper mapper = new FUSV0054_FUSV0054OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// ●上りマッピング
		// 申込内容承認登録SC
		mapper.setFUSV005401SC(bean, dataMap, JPCModelConstant.FUNC_CD_2, ssoInfoSysid);
		// オプションサービス契約<ISP>登録SC
		mapper.setFUSV005402SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2, ssoInfoSysid);
		// オプションサービス契約<ISP>照査
		mapper.setFUSV005409SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2);
		// オプションサービス契約<ISP>照査締結SC
		mapper.setFUSV005403SC(bean, dataMap, JPCModelConstant.FUNC_CD_2);
		// オプションサービス契約<ISP>開始SC
		mapper.setFUSV005404SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2);
		// エイジング対象登録SC
		mapper.setFUSV005405SC(bean, dataMap, JPCModelConstant.FUNC_CD_2);
		// エイジング対象登録SC
		mapper.setFUSV005406SC(bean, dataMap, JPCModelConstant.FUNC_CD_2);
		// 進捗登録SC
		mapper.setFUSV005407SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2);
		// 申込明細照査・後続業務依頼SC
		mapper.setFUSV005408SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2);
		// オプションサービス契約一意照会SC
		mapper.setFUSV005410SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2);
		// オプションサービス契約＜ISP＞一意照会SC
		mapper.setFUSV005411SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2);
		// 指示書登録SC
		mapper.setFUSV005412SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2);
		// サービスIF結果データ移送CC
		mapper.setFUSV005401CC(dataMap, this);
		// オーダ発行条件登録CC
		mapper.setFUSV005402CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2, ssoInfoSysid);
		// サービスIF結果データ移送CC
		mapper.setFUSV005403CC(beanArray, dataMap);
		// オプトインメール受信設定登録CC
		mapper.setFUSV005404CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1, ssoInfoSysid);
		// メールアドレス追加申込CC(エイジングチェック)
		mapper.setFUSV005405CC(beanArray, dataMap);
		//【ANK-2350-00-00】 【ＮＯ．１８２３】POPIDパスワード、WebIDパスワードの再振不正 2016.03.15 FJ)中西 add start
		// メールアドレス追加申込CC(初期POPIDパスワード取得)
		mapper.setFUSV005406CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		//【ANK-2350-00-00】 【ＮＯ．１８２３】POPIDパスワード、WebIDパスワードの再振不正 2016.03.15 FJ)中西 add end
		// ファミリーパック誘導要否判定CC
		mapper.setFUSV005413CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2);

		// 検索結果格納用マップを生成。
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();

		// サービス契約ステータスを設定
		JFUWebCommon.setSvcKeiStat(this, dataMap);

		// ●サービス呼び出し
		try
		{
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			chkRelationServiceError(se);
		}
		
		// エイジングエラー有無
		String ccResult = mapper.getFUSV005405CC(bean, outputMap);
		
		if (NG.equals(ccResult))
		{
			// エラー
			JFUWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0420_TW, MLAD_NOT_EQUAL_MSG, ERR_PLACE_MLAD_ERR);
			return true;
		}
		

		// ●現顧客リフレッシュ処理
		JFUWebCommon.refreshGenCustKei(this);

		// 遷移先画面IDを設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW01902);
		// 遷移先画面名を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW01902);

		return true;
	}

	/**
	 * 確認画面の申し込むボタン押下時の処理です。
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean mskm() throws Exception
	{
		// ●共通関連チェック
		JFUCommonRelationCheck.checkCommonRelation(this, USECASE_ID_FUSV0054);

		// ---- 共有フォームbean ----
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// ●共有フォームBeanより現顧客契約情報を取得する。
		Map<String, Object> resultMap = getCommoninfoBeanInfo(commoninfoBean, null);

		// SYSID SSO
		String ssoInfoSysid = (String)resultMap.get(CommonInfoCFConst.SYSID_21);

		X31SDataBeanAccess ssoInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SSO_INFO);
		X31SDataBeanAccess opSvcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.OP_SVC_KEI_INFO);
		X31SDataBeanAccess seikyKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SEIKY_KEI_INFO);
		X31SDataBeanAccess svcKeiInfoBean = (X31SDataBeanAccess)resultMap.get(CommonInfoCFConst.SVC_KEI_INFO);

		// ---- サービスフォームbean ----
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 各Bean情報を配列に格納
		X31SDataBeanAccess[] beanArray = { bean, opSvcKeiInfoBean, seikyKeiInfoBean, ssoInfoBean, svcKeiInfoBean };

		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>(16);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0054);

		FUSV0054_FUSV0054OPDBMapper mapper = new FUSV0054_FUSV0054OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// ●上りマッピング
		// 申込内容承認登録SC
		mapper.setFUSV005401SC(bean, dataMap, JPCModelConstant.FUNC_CD_1, ssoInfoSysid);
		// オプションサービス契約<ISP>登録SC
		mapper.setFUSV005402SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1, ssoInfoSysid);
		// オプションサービス契約<ISP>照査
		mapper.setFUSV005409SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約<ISP>照査締結SC
		mapper.setFUSV005403SC(bean, dataMap, JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約<ISP>開始SC
		mapper.setFUSV005404SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		// エイジング対象登録SC
		mapper.setFUSV005405SC(bean, dataMap, JPCModelConstant.FUNC_CD_1);
		// エイジング対象登録SC
		mapper.setFUSV005406SC(bean, dataMap, JPCModelConstant.FUNC_CD_1);
		// 進捗登録SC
		mapper.setFUSV005407SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		// 申込明細照査・後続業務依頼SC
		mapper.setFUSV005408SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約一意照会SC
		mapper.setFUSV005410SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2);
		// オプションサービス契約＜ISP＞一意照会SC
		mapper.setFUSV005411SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2);
		// 指示書登録SC
		mapper.setFUSV005412SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		// サービスIF結果データ移送CC
		mapper.setFUSV005401CC(dataMap, this);
		// オーダ発行条件登録CC
		mapper.setFUSV005402CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1, ssoInfoSysid);
		// サービスIF結果データ移送CC
		mapper.setFUSV005403CC(beanArray, dataMap);
		// オプトインメール受信設定登録CC
		mapper.setFUSV005404CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_3, ssoInfoSysid);
		// メールアドレス追加申込CC(エイジングチェック)
		mapper.setFUSV005405CC(beanArray, dataMap);
		//【ANK-2350-00-00】 【ＮＯ．１８２３】POPIDパスワード、WebIDパスワードの再振不正 2016.03.15 FJ)中西 add start
		// メールアドレス追加申込CC(初期POPIDパスワード取得)
		mapper.setFUSV005406CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);
		//【ANK-2350-00-00】 【ＮＯ．１８２３】POPIDパスワード、WebIDパスワードの再振不正 2016.03.15 FJ)中西 add end
		// ファミリーパック誘導要否判定CC
		/** 2017/04/13 ANK-3149-00-00 mod start */
		mapper.setFUSV005413CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_2);
		/** 2017/04/13 ANK-3149-00-00 mod end */

		// 検索結果格納用マップを生成。
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();

		// サービス契約ステータスを設定
		JFUWebCommon.setSvcKeiStat(this, dataMap);

		// ●サービス呼び出し
		try
		{
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			chkRelationServiceError(se);
		}

		// CKSV9001のサービス情報を設定
		Map<String, String> ckParamMap = new HashMap<String, String>();
		ckParamMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_CKSV9001);

		HashMap<String, Map<String, String>> ckInputMap = new HashMap<String, Map<String, String>>();
		HashMap<String, String> ckOutputMap = new HashMap<String, String>();

		// ●上りマッピング
		// 会員情報更新依頼
		mapper.setCKSV900101CC(beanArray, ckInputMap);

		try
		{
			// ●サービス呼出
			invokeService(ckParamMap, ckInputMap, ckOutputMap);
		}
		catch (Throwable ta)
		{
			// エラーでも何もしない
			DEBUG_LOG.debug("CKSV9001：会員情報更新依頼でエラーが発生したが処理は続行する");
		}

		// ●下りマッピング
		mapper.getFUSV005403SC(bean, outputMap);
		mapper.getFUSV005409SC(bean, outputMap);
		// ファミリーパック誘導要否判定CC
		/** 2017/04/13 ANK-3149-00-00 del start */
		//mapper.getFUSV005413CC(bean, outputMap);
		/** 2017/04/13 ANK-3149-00-00 del end */

		// ●現顧客情報を再取得
		JFUWebCommon.refreshGenCustKei(this);

		// 確定メールアドレス
		String fixMlad = bean.sendMessageString(FUW01901SFConst.FIX_MLAD, X31CWebConst.DATABEAN_GET_VALUE);

		// 共有フォームBeanを再取得
		resultMap = getCommoninfoBeanInfo(commoninfoBean, fixMlad);

		// メールアドレス
		// またはＰＯＰパスワード
		String fixPopidPwd = (String)resultMap.get(FUW01901SFConst.POP_PWD);
		bean.sendMessageString(FUW01901SFConst.POP_PWD, X31CWebConst.DATABEAN_SET_VALUE, fixPopidPwd);

		// 除外オプションサービス契約番号
		String ignoreOpSvcKeiNo = (String)((HashMap)outputMap.get(FUSV005402SC)).get(OP_SVC_KEI_NO);

		// 申込完了メール送信部品呼出処理
		JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID, null, null, ignoreOpSvcKeiNo);

		// 遷移先画面IDを設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW01903);
		// 遷移先画面名を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW01903);

		return true;
	}

	/**
	 * 確認画面の戻るボタン押下時の処理です。
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先画面IDを設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW01901);
		// 遷移先画面名を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW01901);

		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>
	 * 
	 * @param commoninfoBean
	 * @param fixMlad
	 * @return 取得した情報を保持したマップ
	 */
	private Map<String, Object> getCommoninfoBeanInfo(X31SDataBeanAccess commoninfoBean, String fixMlad)
	{
		// 結果マップ
		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);

		// SSO SYSID
		String ssoInfoSysid = ssoInfoBean.sendMessageString(CommonInfoCFConst.SYSID_21, X31CWebConst.DATABEAN_GET_VALUE);

		// 現顧客情報
		X31SDataBeanAccess genCustKeiInfoBean = null;
		// サービス契約情報
		X31SDataBeanAccess svcKeiInfoBean = null;
		// サービス契約内訳情報
		X31SDataBeanAccess svcKeiUcwkInfoBean = null;
		// オプションサービス情報
		X31SDataBeanAccess opSvcKeiInfoBean = null;
		// 請求契約情報
		X31SDataBeanAccess seikyKeiInfoBean = null;

		// メールアドレス
		String mlad = null;
		// 確定(初期)POPパスワード
		String fixPopidPwd = null;
		// 取得メールアドレス数
		int mladCnt = 0;

		// ★現顧客情報(WEB変更情報の子階層)
		X31SDataBeanAccessArray genCustKeiInfoArray = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO);
		genCustKeiInfoBean = genCustKeiInfoArray.getDataBean(0);

		// ★サービス契約情報
		X31SDataBeanAccessArray svcKeiInfoArray = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO);
		svcKeiInfoBean = svcKeiInfoArray.getDataBean(0);

		// ★サービス契約内訳情報
		X31SDataBeanAccessArray svcKeiUcwkInfoArray = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_UCWK_INFO);
		svcKeiUcwkInfoBean = svcKeiUcwkInfoArray.getDataBean(0);

		// ★オプションサービス契約情報
		X31SDataBeanAccessArray opSvcKeiInfoArray = svcKeiUcwkInfoBean.getDataBeanArray(CommonInfoCFConst.OP_SVC_KEI_INFO);
		for (int m = 0; m < opSvcKeiInfoArray.getCount(); m++)
		{
			X31SDataBeanAccess tmpOpSvcKeiInfoBean = opSvcKeiInfoArray.getDataBean(m);

			// オプションサービスコード
			String opSvcCd = tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.OP_SVC_CD_28, X31CWebConst.DATABEAN_GET_VALUE);
			// 料金コースコード
			String pcrsCd = tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.PCRS_CD_28, X31CWebConst.DATABEAN_GET_VALUE);
			// オプションサービス契約ステータス
			String opSvcKeiStat = tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.OP_SVC_KEI_STAT_28, X31CWebConst.DATABEAN_GET_VALUE);

			// オプションサービスコードと料金コースコードがメールアドレスの場合
			// かつ、オプションサービス契約ステータスが「910：解約済み」または「920：キャンセル済み」以外の場合
			if (JFUStrConst.CD00136_B001.equals(opSvcCd) && JFUStrConst.CD00134_B01.equals(pcrsCd)
					&& !(JFUStrConst.CD00037_910.equals(opSvcKeiStat) || JFUStrConst.CD00037_920.equals(opSvcKeiStat)))
			{
				// メールアドレス
				mlad = tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.MLAD_28, X31CWebConst.DATABEAN_GET_VALUE);
				// 取得メールアドレス取得数をカウント
				mladCnt++;
			}

			// 確定したメールアドレスが設定されている場合は、メールアドレスに紐づく情報を取得する。
			// メールアドレス追加後の追加メールアドレスの情報取得処理
			if (null != fixMlad && fixMlad.equals(mlad))
			{
				// 初期POPIDパスワード
				fixPopidPwd = tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.SHK_POP_ID_PWD_28, X31CWebConst.DATABEAN_GET_VALUE);
			}
		}

		// ★請求契約情報
		X31SDataBeanAccessArray seikyKeiInfoArray = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SEIKY_KEI_INFO);
		seikyKeiInfoBean = seikyKeiInfoArray.getDataBean(0);

		// SSO SYSID
		resultMap.put(CommonInfoCFConst.SYSID_21, ssoInfoSysid);

		// メールアドレス追加後：確定(初期)POPパスワード、確定容量
		resultMap.put(FUW01901SFConst.POP_PWD, fixPopidPwd);

		// メールアドレス取得数
		resultMap.put(FUW01901SFConst.MLAD_STKU_CNT, mladCnt);

		// 各Bean情報
		resultMap.put(CommonInfoCFConst.SSO_INFO, ssoInfoBean);
		resultMap.put(CommonInfoCFConst.SVC_KEI_INFO, svcKeiInfoBean);
		resultMap.put(CommonInfoCFConst.SVC_KEI_UCWK_INFO, svcKeiUcwkInfoBean);
		resultMap.put(CommonInfoCFConst.OP_SVC_KEI_INFO, opSvcKeiInfoBean);
		resultMap.put(CommonInfoCFConst.SEIKY_KEI_INFO, seikyKeiInfoBean);

		return resultMap;
	}

	/**
	 * マンション区分（有料文言制御用）を取得します。 <BR>
	 * 
	 * @param bean
	 * @param commoninfoBean
	 * @param outputMap
	 * @return true:マンション(全戸一括)かつ支払有り / false:マンション(全戸一括)以外または支払ないし
	 */
	private boolean getMansionDiv(X31SDataBeanAccess bean, X31SDataBeanAccess commoninfoBean, HashMap<String, Object> outputMap)
	{
		// 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);

		// 有料フラグを取得
		boolean payFlg = bean.sendMessageBoolean(FUW01901SFConst.PAY_FLG, X31CWebConst.DATABEAN_GET_VALUE);

		// 料金グループコード
		String prcGrpCd = getPrcGrpCd(commoninfoBean);
		// 加入契約支払方式コード
		String kanyuKeiPayHoshikiCd =
				svcKeiInfoBean.sendMessageString(CommonInfoCFConst.KANYU_KEI_PAY_HOSHIKI_CD_23, X31CWebConst.DATABEAN_GET_VALUE);

		// 料金クループコードが"04"(マンションタイプ )かつ支払金がある場合、true
		boolean result =
				JFUStrConst.CD00133_04.equals(prcGrpCd) && JFUStrConst.CD01216_003.equals(kanyuKeiPayHoshikiCd)
						&& (payFlg || chkPayInitialCost(outputMap));

		return result;
	}

	/**
	 * 料金グループコードを取得します。
	 *  <BR>
	 * @param commoninfoBean
	 * @return 料金グループコード
	 */
	private String getPrcGrpCd(X31SDataBeanAccess commoninfoBean)
	{
		String prcGrpCd = null;

		// ★ＷＥＢ変更情報
		X31SDataBeanAccess webChgInfoBean = getX31SDataBeanAccess(commoninfoBean, CommonInfoCFConst.WEB_CHG_INFO);

		// ★現顧客契約情報
		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);

		// 料金グループコード
		prcGrpCd = svcKeiInfoBean.sendMessageString(CommonInfoCFConst.PRC_GRP_CD_23, X31CWebConst.DATABEAN_GET_VALUE);

		return prcGrpCd;
	}

	/**
	 * メールアドレス追加可能チェックをします。
	 * <br>
	 * @param bean
	 * @return チェック結果
	 */
	private boolean chkMaxMladCnt(X31SDataBeanAccess bean)
	{
		// メールアドレス取得数
		int mladCnt = bean.sendMessageLong(FUW01901SFConst.MLAD_STKU_CNT, X31CWebConst.DATABEAN_GET_VALUE).intValue();
		// メールアドレス取得限度(最大数)
		int mladMaxCnt = bean.sendMessageLong(FUW01901SFConst.MLAD_MAX_CNT, X31CWebConst.DATABEAN_GET_VALUE).intValue();

		// 最大数と同値または最大数以上の場合、追加不可
		return mladCnt >= mladMaxCnt;
	}

	/**
	 * 有料フラグを設定します。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @return true:有料 / false:無料（支払い金なし）
	 */
	private boolean setPayFlg(X31SDataBeanAccess bean, HashMap<String, Object> outputMap)
	{
		boolean res = false;
		int muryoCnt = bean.sendMessageLong(FUW01901SFConst.MLAD_MRYO_CNT, X31CWebConst.DATABEAN_GET_VALUE).intValue();
		/** 2017/04/13 ANK-3149-00-00 mod start */
		boolean packFlg = bean.sendMessageBoolean(FUW01901SFConst.PACK_KEI_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		/** 2017/04/13 ANK-3149-00-00 mod end */

		if (chkPayKoteiTanka(outputMap))
		{
			if (muryoCnt <= 0)
			{
				// 固定単価あり＆無料数なし
				res = true;
			}
			else
			{
				/** 2017/04/13 ANK-3149-00-00 mod start */
				if (packFlg)
				{
					// 固定単価あり＆無料数あり＆パック契約中
					res = true;
				}
				else
				{
					// 固定単価あり＆無料数あり＆パック未契約
					res = false;
				}
				/** 2017/04/13 ANK-3149-00-00 mod end */
			}
		}
		else
		{
			// 固定単価なし
			res = false;
		}

		return res;
	}

	/**
	 * 有料フラグ判定（固定単価）処理です。
	 * @param bean
	 * @param outputMap
	 * @return true:固定単価あり / false:固定単価なし（無料）
	 */
	public boolean chkPayKoteiTanka(HashMap outputMap)
	{
		boolean res = false;
		HashMap parentMap = null;

		if (outputMap.containsKey(FUSV005303SC))
		{
			parentMap = (HashMap)outputMap.get(FUSV005303SC);
		}

		if (null != parentMap && parentMap.containsKey(EKK0601B001CBSMSG1LIST))
		{
			ArrayList childList = (ArrayList)parentMap.get(EKK0601B001CBSMSG1LIST);

			if (childList != null && childList.size() > 0)
			{
				for (int i = 0; i < childList.size(); i++)
				{
					HashMap childmap = (HashMap)childList.get(i);

					if (Integer.parseInt((String)childmap.get(PPLAN_KOTEI_AMNT)) > 0)
					{
						// 固定単価が0円以上の場合
						res = true;
					}
					else
					{
						// 固定単価が0円の場合
						res = false;
					}
				}
			}
			else
			{
				// 固定単価がない場合
				res = false;
			}
		}

		return res;
	}

	/**
	 * 有料フラグ判定（初期費用）処理です。
	 * @param bean
	 * @param outputMap
	 * @return true:初期費用あり / false:初期費用なし
	 */
	public boolean chkPayInitialCost(HashMap outputMap)
	{
		boolean res = false;
		HashMap parentMap = null;

		if (outputMap.containsKey(FUSV005301CC))
		{
			parentMap = (HashMap)outputMap.get(FUSV005301CC);
		}

		if (null != parentMap && parentMap.containsKey(EKK0721A010CBSMSG1LIST))
		{
			ArrayList childList = (ArrayList)parentMap.get(EKK0721A010CBSMSG1LIST);

			if (childList != null && childList.size() > 0)
			{
				// 初期費用がある場合
				res = true;
			}
			else
			{
				// 初期費用がない場合
				res = false;
			}
		}

		return res;
	}

	/**
	 * サービス処理結果の例外判定をします。
	 * <br>
	 * @param se
	 */
	private void chkRelationServiceError(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();

		// 関連チェックエラー処理
		if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status))
		{
			// "サービス契約番号"に紐付く、"オプションサービスコード"が"Eメール"の、
			// 「オプションサービス契約」の件数が上限を超えた場合、エラー
			if (EKK0361D010.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_ED.equals(errFlg) && OP_SVC_CD.equals(itemid))
			{
				// 契約状態エラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}

			// NGワード(画面にエラーを出す)
			else if (EKK0361D010.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EB.equals(errFlg) && KIBO_ML_ACCOUNT_1.equals(itemid))
			{
				// そのままExceptionを投げる
				throw se;
			}

			// フロントからの申込で、"希望メールアカウント1"、"希望メールアカウント2"、"希望メールアカウント3"が
			// すべてNullの場合、エラー
			else if (EKK0361D010.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EB.equals(errFlg) && MSKM_DTL_NO.equals(itemid))
			{
				// 利用制限エラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0101);
			}

			// タイムスタンプチェック：指定された「サービス契約」がすでに更新されている場合、エラー
			else if (EKK0361D010.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && UPD_DTM_BF.equals(itemid))
			{
				// 更新不可エラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0204);
			}

			// カレントレコードの希望メールアカウント1、希望メールアカウント2、希望メールアカウント3のすべてについて、
			// 既に「エイジング」に存在する場合、エラー
			else if (EKK0361C030.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_ED.equals(errFlg) && OP_SVC_KEI_NO.equals(itemid))
			{
				// 利用制限エラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0101);
			}

			// カレントレコードの希望メールアカウント1、希望メールアカウント2、希望メールアカウント3のすべてについて、
			// 既に「エイジング」に存在する場合、エラー
			else if (EKK0361C010.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EE.equals(errFlg) && OP_SVC_KEI_NO.equals(itemid))
			{
				// 利用制限エラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0101);
			}
			
			// カレントレコードの希望メールアカウント1、希望メールアカウント2、希望メールアカウント3のすべてについて、
			// 既に「エイジング」に存在する場合、エラー
			else if (EKK0361C030.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EE.equals(errFlg) && OP_SVC_KEI_NO.equals(itemid))
			{
				// 利用制限エラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0101);
			}
			
			// 指定された「エイジング種別コードかつエイジング対象値」が存在する場合エラー
			else if (EZM0111D010.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && AGING_TG_VALUE.equals(itemid))
			{
				// 利用制限エラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0101);
			}
		}
		
		// システムエラー
		throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
	}
}