/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：FUW02201SFLogic
 *   ソースファイル名：FUW02201SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2011年05月31日
 *＜機能概要＞
 *   メールウイルスチェックサービス申込のビューロジッククラスです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/05/31   FJ）西川    新規作成
 *   v4.00       2012/06/12   FJ）西村    【ANK-1163-00-00】｢変更系申込が可能となるタイミングについて｣対応
 *   v4.00		 2012/09/22   FJ) 岡井	  【ANK-1198-00-00】変更系申込画面の提供条件・利用規約の設置位置について
 *   v8.00       2014/01/27   FJ) 文元    【ANK-1589-00-00】消費増税に伴う料金施策
 *	 v32.00		 2017/04/13   FJ) 横山    【ANK-3149-00-00】新セキュリティパック導入
 *   v37.00      2018/02/16   FJ)美濃原   【ANK-3366-00-00】eo光設備卸対応
 *   v75.00      2025/05/15   FJ)西川葵   【ANK-4678-00-00】eoサポートダイヤル受付時間短縮

 **********************************************************************/
package eo.web.webview.FUW02201SF;

import java.util.HashMap;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SWebLog;
import com.fujitsu.futurity.web.x31.X31CMessageResult.X31CMessageMoreInfo;

import 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.FUSV0057_FUSV0057OPDBMapper;
import eo.web.webview.mapping.FUSV0058_FUSV0058OPDBMapper;

/**
 * メールウイルスチェックサービス申込のビューロジッククラスです。
 * <p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW02201SFLogic extends JCCWebBusinessLogic
{

	/** サービスID */
	private static final String USECASE_ID_FUSV0057 = "FUSV0057";
	/** サービスID */
	private static final String USECASE_ID_FUSV0058 = "FUSV0058";

	/** 料金プラン固定単価（オプション申込料金）一覧照会SC */
	private static final String SC_TITLE_FUSV005703 = "FUSV005703SC";
	/** 初期費用一覧照会CC */
	private static final String CC_TITLE_FUSV005701 = "FUSV005701CC";

	/** サブオプションサービス契約<ISP>登録(EKK0411D010) */
	private static final String EKK0411D010 = "EKK0411D010";
	/** サブオプションサービス契約<ISP>照査締結(EKK0411C040) */
	private static final String EKK0411C040 = "EKK0411C040";
	/** サブオプションサービス契約<ISP>使用開始(EKK0411C050) */
	private static final String EKK0411C050 = "EKK0411C050";
	/** オプションサービス契約番号 */
	private static final String OP_SVC_KEI_NO = "op_svc_kei_no";
	/** 更新年月日時分秒(更新前) */
	private static final String UPD_DTM_BF = "upd_dtm_bf";

	/** 申込完了メールID */
	private static final String MSKM_COMP_MAIL_ID = "FUW022_1";

	/**
	 * メールウイルスチェックサービス申込画面の初期表示処理を行います。 <br>
	 * 
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception 例外出力
	 */
	public boolean init() throws Exception
	{

		// ■設備卸チェック
		JFUWebCommon.checkOrosi(this);

		// ---- サービスフォームbean ----
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// ---- 共有フォームbean ----
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// ○共有フォームBean.ＷＥＢ変更情報
		X31SDataBeanAccessArray subBeanArray = commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO);
		X31SDataBeanAccess webChgInfoBean = subBeanArray.getDataBean(0);

		// ○共有フォームBean.現顧客契約情報
		X31SDataBeanAccessArray genCustKeiInfoArray = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO);
		X31SDataBeanAccess genCustKeiInfoBean = genCustKeiInfoArray.getDataBean(0);

		// ○共有フォームBean.サービス契約情報
		X31SDataBeanAccessArray svcKeiInfoArray = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO);
		X31SDataBeanAccess svcKeiInfoBean = svcKeiInfoArray.getDataBean(0);

		// ○共有フォームBean.請求契約情報
		X31SDataBeanAccessArray seikyKeiInfoArray = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SEIKY_KEI_INFO);
		X31SDataBeanAccess seikyKeiInfoBean = seikyKeiInfoArray.getDataBean(0);

		// ○共有フォームBean.サービス契約内訳情報
		X31SDataBeanAccessArray svcKeiUcwkInfoArray = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_UCWK_INFO);
		X31SDataBeanAccess svcKeiUcwkInfoBean = svcKeiUcwkInfoArray.getDataBean(0);

		// ○共有フォームBean.オプションサービス契約情報
		X31SDataBeanAccessArray opSvcKeiInfoArray = svcKeiUcwkInfoBean.getDataBeanArray(CommonInfoCFConst.OP_SVC_KEI_INFO);
		X31SDataBeanAccess opSvcKeiInfoBean = opSvcKeiInfoArray.getDataBean(0);

		// ○共有フォームBean.サブオプションサービス契約情報
		X31SDataBeanAccessArray sbOpSvcKeiInfoArray = opSvcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SBOP_SVC_KEI_INFO);

		// サービス契約情報 料金グループコード
		String prcGrpCd = svcKeiInfoBean.sendMessageString(CommonInfoCFConst.PRC_GRP_CD_23, X31CWebConst.DATABEAN_GET_VALUE);
		// サービス契約情報 加入契約支払方式コード
		String kanyuKeiPayHoshikiCd = svcKeiInfoBean.sendMessageString(CommonInfoCFConst.KANYU_KEI_PAY_HOSHIKI_CD_23, X31CWebConst.DATABEAN_GET_VALUE);

		// マンション区分設定(マンションタイプかつ全戸一括の場合「true」、それ以外「false」)
		bean.sendMessageBoolean(FUW02201SFConst.MANSION_DIV, X31CWebConst.DATABEAN_SET_VALUE,
				JFUStrConst.CD00133_04.equals(prcGrpCd) && JFUStrConst.CD01216_003.equals(kanyuKeiPayHoshikiCd));

		// ●現サービス情報チェック処理
		// 請求契約情報 請求契約ステータス
		String seikyKeiStat = seikyKeiInfoBean.sendMessageString(CommonInfoCFConst.SEIKY_KEI_STAT_32, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JFUStrConst.CD00037_100.equals(seikyKeiStat))
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// オプションサービス契約情報 オプションサービス契約ステータス
		String opSvcKeiInfoOpSvcStat =
				opSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.OP_SVC_KEI_STAT_28, X31CWebConst.DATABEAN_GET_VALUE);

		// オプションサービス契約情報 ＰＯＰＩＤ
		String opSvcKeiInfoPopid = opSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.POP_ID_28, X31CWebConst.DATABEAN_GET_VALUE);

		// オプションサービス契約情報 メールアドレス
		String opSvcKeiInfoMlad = opSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.MLAD_28, X31CWebConst.DATABEAN_GET_VALUE);

		// オプションサービス契約情報 オプションサービス契約番号
		String opSvcKeiInfoOpSvcNo =
				opSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.OP_SVC_KEI_NO_28, X31CWebConst.DATABEAN_GET_VALUE);
		if (JFUWebCommon.isNull(opSvcKeiInfoOpSvcNo))
		{
			X31SWebLog.DEBUG_LOG.debug("【オプションサービス契約番号未設定エラー】");
			// システムエラーをスロー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
		if (JFUWebCommon.isNull(opSvcKeiInfoPopid) || JFUWebCommon.isNull(opSvcKeiInfoMlad))
		{
			// オプションサービス契約情報 ＰＯＰＩＤが未設定の場合 契約状態エラーとする。
			// オプションサービス契約情報 メールアドレスが未設定の場合 契約状態エラーとする。

			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}
		// オプションサービス契約情報 オプションサービス契約ステータスが「020:照査済」「030:締結済」「100:サービス提供中」以外の場合、契約状態エラーとする。
		if (!JFUStrConst.CD00037_100.equals(opSvcKeiInfoOpSvcStat) && !JFUStrConst.CD00037_030.equals(opSvcKeiInfoOpSvcStat)
				&& !JFUStrConst.CD00037_020.equals(opSvcKeiInfoOpSvcStat))
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// メールウイルスチェックサービス契約数
		int countMailVirus = 0;
		for (int i = 0; i < sbOpSvcKeiInfoArray.getCount(); i++)
		{
			X31SDataBeanAccess sbOpSvcKeiInfoBean = sbOpSvcKeiInfoArray.getDataBean(i);

			String sbopSvcCd = sbOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.SBOP_SVC_CD_29, X31CWebConst.DATABEAN_GET_VALUE);
			if (!JFUStrConst.CD00137_D03.equals(sbopSvcCd))
			{
				// サブオプションサービスコード メールウィルスチェック以外の場合
				continue;
			}

			String sbopSvcKeiStat =
					sbOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.SBOP_SVC_KEI_STAT_29, X31CWebConst.DATABEAN_GET_VALUE);
			if (JFUStrConst.CD00037_910.equals(sbopSvcKeiStat) || JFUStrConst.CD00037_920.equals(sbopSvcKeiStat))
			{
				// サブオプションサービス契約情報 サブオプションサービス契約ステータスが「910:解約済」と「920:キャンセル済」の場合
				continue;
			}

			String opSvcKeiNo = sbOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.OP_SVC_KEI_NO_29, X31CWebConst.DATABEAN_GET_VALUE);
			if (opSvcKeiInfoOpSvcNo.equals(opSvcKeiNo))
			{
				countMailVirus++;
			}
		}

		// ●DataBeanに格納する。
		// 現在のメールアドレスの移送
		bean.sendMessageString(FUW02201SFConst.NOW_MLAD, X31CWebConst.DATABEAN_SET_VALUE, opSvcKeiInfoMlad);
		// 現在のＰＯＰＩＤの移送
		bean.sendMessageString(FUW02201SFConst.NOW_POP_ID, X31CWebConst.DATABEAN_SET_VALUE, opSvcKeiInfoPopid);

		// ●サービス呼び出し処理
		// メーリングリスト追加申込（初期表示）サービスの呼び出しを行う。
		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>(16);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0057);

		FUSV0057_FUSV0057OPDBMapper mapper = new FUSV0057_FUSV0057OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		X31SDataBeanAccess[] paramBean = { bean, svcKeiInfoBean };

		// 業務パラメータ管理一意照会(EZM0321A010)
		mapper.setFUSV005701SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		// 業務パラメータ管理一意照会(EZM0321A010)
		mapper.setFUSV005702SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		// 料金プラン固定単価（オプション申込料金）一覧照会(EKK0601B001)
		mapper.setFUSV005703SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		// 料金コース_サブオプションサービス一意照会(EKK1881A010)
		mapper.setFUSV005704SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		// 初期費用一覧照会CC
		mapper.setFUSV005701CC(paramBean, dataMap, null);

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		try
		{
			// サービスの呼び出しを行う。
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ●サービス処理結果の取得
		// 業務パラメータ管理一意照会ＳＣ取得(EZM0321A010)
		mapper.getFUSV005701SC(bean, outputMap);
		// 業務パラメータ管理一意照会ＳＣ取得(EZM0321A010)
		mapper.getFUSV005702SC(bean, outputMap);
		// 料金プラン固定単価（オプション申込料金）一覧照会SC
		boolean isNoBasicCost = mapper.getFUSV005703SC(bean, outputMap);
		// 料金コース_サブオプションサービス一意照会(EKK1881A010)
		boolean isMuryo = mapper.getFUSV005704SC(bean, outputMap, countMailVirus);
		// 初期費用一覧照会CC
		boolean isNoInitCost = mapper.getFUSV005701CC(bean, outputMap);

		if (isMuryo || isNoBasicCost)
		{
			// 基本料金情報と無料残数で判定を行い無料の場合
			// 無料表示用の基本料金情報を設定する。
			JFUWebCommon.setFreePrcInfoMap(outputMap, SC_TITLE_FUSV005703);
			
			// 無料の場合、マンション区分をfalseにする
			bean.sendMessageBoolean(FUW02201SFConst.MANSION_DIV, X31CWebConst.DATABEAN_SET_VALUE, false);
		}
		else
		{
			// 有料フラグ
			bean.sendMessageBoolean(FUW02201SFConst.PAY_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);
			// 費用フラグ
			bean.sendMessageBoolean(FUW02201SFConst.COST_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);

			// マンション区分の設定
			if (JFUStrConst.CD00133_04.equals(prcGrpCd) && JFUStrConst.CD01216_003.equals(kanyuKeiPayHoshikiCd))
			{
				// マンションタイプ(全戸一括)の場合
				bean.sendMessageBoolean(FUW02201SFConst.MANSION_DIV, X31CWebConst.DATABEAN_SET_VALUE, true);
			}
			else
			{
				// マンションタイプ(全戸一括)以外の場合
				bean.sendMessageBoolean(FUW02201SFConst.MANSION_DIV, X31CWebConst.DATABEAN_SET_VALUE, false);
			}
		}

		if (!isNoInitCost)
		{
			// 初期費用が有料の場合
			bean.sendMessageBoolean(FUW02201SFConst.COST_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);

			// マンション区分の設定
			if (JFUStrConst.CD00133_04.equals(prcGrpCd) && JFUStrConst.CD01216_003.equals(kanyuKeiPayHoshikiCd))
			{
				// マンションタイプ(全戸一括)の場合
				bean.sendMessageBoolean(FUW02201SFConst.MANSION_DIV, X31CWebConst.DATABEAN_SET_VALUE, true);
			}
			else
			{
				// マンションタイプ(全戸一括)以外の場合
				bean.sendMessageBoolean(FUW02201SFConst.MANSION_DIV, X31CWebConst.DATABEAN_SET_VALUE, false);
			}
		}

		// ●料金表情報の設定(FUSV005701SC、FUSV005701CC)
		JFUWebCommon.setPrcInfoArea(bean, outputMap, SC_TITLE_FUSV005703, CC_TITLE_FUSV005701, JFUScreenConst.SCREEN_ID_FUW02201);

		// ●初期表示値設定処理
		// 契約約款同意
		bean.sendMessageBoolean(FUW02201SFConst.KEIYAKU_YAKKAN_DOI, X31CWebConst.DATABEAN_SET_VALUE, false);
		// 利用規約同意
		bean.sendMessageBoolean(FUW02201SFConst.RIYO_KIYAKU_DOI, X31CWebConst.DATABEAN_SET_VALUE, false);

		// 料金表表示現在日設定処理
		JFUWebCommon.setPrcDspNowDay(this);
		
		// ●遷移先画面の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JFUScreenConst.SCREEN_NAME_FUW02201);

		// 遷移先画面IDの設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getScreenId(this));
		
		// オンライン運用日取得＆設定
		String opeDate = JFUWebCommon.getOpeDate(this, null);
		setFuOpedate(commoninfoBean, opeDate);

		return true;
	}

	/**
	 * メールウイルスチェックサービス申込画面の
	 * 確認ボタン押下時の処理を行います。
	 * <br>
	 * 
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception 例外出力
	 */
	public boolean cfm() throws Exception
	{

		// ---- 共有フォームbean ----
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		execute(commoninfoBean, JPCModelConstant.FUNC_CD_2);

		// ●遷移先画面の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JFUScreenConst.SCREEN_NAME_FUW02202);

		// 遷移先画面IDの設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JFUScreenConst.SCREEN_ID_FUW02202);

		return true;
	}

	/**
	 * メールウイルスチェックサービス申込画面の 申し込むボタン押下時の処理を行います。 <br>
	 * 
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception 例外出力
	 */
	public boolean mskm() throws Exception
	{

		// フロントオンライン共通部品/共通関連チェック処理
		JFUWebCommon.checkCommonRelation(this, USECASE_ID_FUSV0058);
		// ---- 共有フォームbean ----
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		execute(commoninfoBean, JPCModelConstant.FUNC_CD_1);

		// ●現顧客リフレッシュ処理
		JFUWebCommon.refreshGenCustKei(this);

		// 申込完了メール送信部品呼出処理
		JFUWebCommon.sendMskmFinMail(this, MSKM_COMP_MAIL_ID);

		// ●遷移先画面の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JFUScreenConst.SCREEN_NAME_FUW02203);

		// 遷移先画面IDの設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JFUScreenConst.SCREEN_ID_FUW02203);

		return true;
	}

	/**
	 * メールウイルスチェックサービス申込確認画面の 戻るボタン押下時の処理を行います。
	 * <br>
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception 例外出力
	 */
	public boolean back() throws Exception
	{

		// ---- 共有フォームbean ----
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// ●遷移先画面の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JFUScreenConst.SCREEN_NAME_FUW02201);

		// 遷移先画面IDの設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JFUScreenConst.SCREEN_ID_FUW02201);

		return true;
	}

	/**
	 * サービス(申込)実行処理
	 * 
	 * <br>
	 * @param commoninfoBean 共有フォームBean
	 * @param funcCd 機能コード
	 * @throws Exception 例外をスローする。
	 */
	private void execute(X31SDataBeanAccess commoninfoBean, String funcCd) throws Exception
	{

		// ---- サービスフォームbean ----
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// ---- 共有フォームbean ----
		// ○共有フォームBean.ＷＥＢ変更情報
		X31SDataBeanAccessArray subBeanArray = commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO);
		X31SDataBeanAccess webChgInfoBean = subBeanArray.getDataBean(0);

		// ○共有フォームBean.現顧客契約情報
		X31SDataBeanAccessArray genCustKeiInfoArray = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO);
		X31SDataBeanAccess genCustKeiInfoBean = genCustKeiInfoArray.getDataBean(0);

		// ○共有フォームBean.サービス契約情報
		X31SDataBeanAccessArray svcKeiInfoArray = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO);
		X31SDataBeanAccess svcKeiInfoBean = svcKeiInfoArray.getDataBean(0);

		// ○共有フォームBean.請求契約情報
		X31SDataBeanAccessArray seikyKeiInfoArray = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SEIKY_KEI_INFO);
		X31SDataBeanAccess seikyKeiInfoBean = seikyKeiInfoArray.getDataBean(0);

		// ○共有フォームBean.サービス契約内訳情報
		X31SDataBeanAccessArray svcKeiUcwkInfoArray = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_UCWK_INFO);
		X31SDataBeanAccess svcKeiUcwkInfoBean = svcKeiUcwkInfoArray.getDataBean(0);

		// ○共有フォームBean.オプションサービス契約情報
		X31SDataBeanAccessArray opSvcKeiInfoArray = svcKeiUcwkInfoBean.getDataBeanArray(CommonInfoCFConst.OP_SVC_KEI_INFO);
		X31SDataBeanAccess opSvcKeiInfoBean = opSvcKeiInfoArray.getDataBean(0);

		// ●サービス呼び出し処理
		// メーリングリスト追加申込（初期表示）サービスの呼び出しを行う。
		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>(16);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0058);

		FUSV0058_FUSV0058OPDBMapper mapper = new FUSV0058_FUSV0058OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		X31SDataBeanAccess[] paramBean = { bean, genCustKeiInfoBean, svcKeiInfoBean, opSvcKeiInfoBean, seikyKeiInfoBean };

		// 申込内容承認登録(EKK0011D020)
		mapper.setFUSV005801SC(paramBean, dataMap, funcCd);
		// サブオプションサービス契約<ISP>登録(EKK0411D010)
		mapper.setFUSV005802SC(paramBean, dataMap, funcCd);
		// サブオプションサービス契約<ISP>照査SC(EKK0411C020)
		mapper.setFUSV005807SC(paramBean, dataMap, funcCd);
		// サブオプションサービス契約<ISP>照査締結(EKK0411C040)
		mapper.setFUSV005803SC(paramBean, dataMap, funcCd);
		// サブオプションサービス契約<ISP>使用開始(EKK0411C050)
		mapper.setFUSV005804SC(paramBean, dataMap, funcCd);
		// 進捗登録(EKK1091D010)
		mapper.setFUSV005805SC(paramBean, dataMap, funcCd);
		// 申込明細照査・後続業務依頼(EKK0021C060)
		mapper.setFUSV005806SC(paramBean, dataMap, funcCd);
		// サービスIF結果データ移送(JFUTransferCC)
		mapper.setFUSV005801CC(paramBean, dataMap, funcCd, this);
		// サービスオーダ発行(JKKHakkoSODCC)
		mapper.setFUSV005802CC(paramBean, dataMap, funcCd);
		// ファミリーパック誘導要否判定CC
		/** 2017/04/13 ANK-3149-00-00 mod start */
		mapper.setFUSV005808CC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
		/** 2017/04/13 ANK-3149-00-00 mod end */
		// オプションサービス契約ステータス設定
		JFUWebCommon.setOpSvcKeiStatMail(this, dataMap);

		// 検索結果格納用マップを生成。
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();
		try
		{
			// サービスの呼び出しを行う。
			invokeService(paramMap, dataMap, outputMap);
			// ファミリーパック誘導要否判定CC
			/** 2017/04/13 ANK-3149-00-00 del start */
			//mapper.getFUSV005808CC(bean, outputMap);
			/** 2017/04/13 ANK-3149-00-00 del end */

		}
		catch (JCCWebServiceException se)
		{
			checkException(se);
		}
	}

	/**
	 * 例外の判定処理。 <BR>
	 * 
	 * @param se 例外
	 */
	private void checkException(JCCWebServiceException se)
	{
		// 例外情報を取得
		X31CMessageResult msgResult = se.getMessageList();
		X31CMessageMoreInfo[] moreInfo = msgResult.getMessageMoreInfoList();
		X31CMessageMoreInfo info = moreInfo[0];// 関連チェック系は必ずエラーが1つのため0番目から取得する。
		String templateid = info.getTemplateId();
		String itemid = info.getItemId();
		String status = info.getStatus();
		String errFlg = info.getItemCheckErr();

		// ●関連チェック
		if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status))
		{
			// 上限チェック
			// テンプレートIDが"EKK0411D010"かつエラーフラグが"EA"かつアイテムが"オプションサービス契約番号"の場合
			if (EKK0411D010.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EF.equals(errFlg) && OP_SVC_KEI_NO.equals(itemid))
			{
				// 返却値の設定
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0103);
			}

			// 排他チェック
			// テンプレートIDが"EKK0411D010"かつエラーフラグが"EA"かつアイテムが"更新年月日時分秒(更新前)"の場合、
			if (EKK0411D010.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && UPD_DTM_BF.equals(itemid))
			{
				// 返却値の設定
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0204);
			}

			// テンプレートIDが"EKK0411C040"かつエラーフラグが"EA"かつアイテムが"更新年月日時分秒(更新前)"の場合、
			if (EKK0411C040.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && UPD_DTM_BF.equals(itemid))
			{
				// 返却値の設定
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0204);
			}

			// テンプレートIDが"EKK0411C050"かつエラーフラグが"EA"かつアイテムが"更新年月日時分秒(更新前)"の場合、
			if (EKK0411C050.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg) && UPD_DTM_BF.equals(itemid))
			{
				// 返却値の設定
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0204);
			}
		}
		// システムエラー
		throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
	}
	
	/**
	 * 運用日付(OPEDATE)の設定です。
	 *
	 * 共通フォームBean.フロント共有情報.フロント運用日付に運用日付(OPEDATE)を設定。
	 *
	 * @param commonInfoBean 共通フォームBean
	 * @param opeDate 運用日付(OPEDATE)
	 */
	private void setFuOpedate(X31SDataBeanAccess commonInfoBean, String opeDate)
	{
		//=====================================================================
		// 運用日付の設定
		//=====================================================================
		// 共通フォームBean.フロント共有情報
		X31SDataBeanAccess frontInfo = commonInfoBean.getDataBeanArray(CommonInfoCFConst.FRONT_COMMON_INFO).getDataBean(0);
		// フロント共有情報.フロント運用日付を設定します。
		frontInfo.sendMessageString(CommonInfoCFConst.FU_OPEDATE_05, X31CWebConst.DATABEAN_SET_VALUE, opeDate);
	}

}
