/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：認証リダイレクト（量販・訪販）
 *   ソースファイル名：FUW00958SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2018年10月31日
 *＜機能概要＞
 *   認証リダイレクト（量販・訪販）画面ビューロジックです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v39.00.00   2018/10/31   FJ) 謝      【ANK-3518-00-00】量販・訪販Webのサービス追加 新規作成
 *   v54.00      2021/07/08   FJ) 大島    【ANK-4092-00-00】CX戦略WG方針対応STEP2
 *   v57.00      2021/12/28   FJ）張本    【ANK-4170-00-00】eフロントの改善要望に関するeo顧客基幹SのAPI・画面連携変更対応(2022年1月下旬リリース)
 *   v59.00      2022/05/23   FJ)大島     【ANK-4250-00-00】成人年齢引き下げに伴うフロント改修対応
 *   v62.00      2022/10/25   FJ）西川    【ANK-4141-00-00】eo：フロントOpenID化対応
 *   v70.00      2024/04/15   FJ）美濃原  【#84498】量販WEB導線での申し込みについて、本来連携されてはいけない選択制キャンペーンが登録されている。
 *   
 **********************************************************************/
package eo.web.webview.FUW00958SF;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

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.X31CHashMap;
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.x33.X33CUtil;
import com.fujitsu.futurity.web.x33.X33WSessionController;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JCCFrameworkException;
import eo.common.util.JFUCommonUtil;
import eo.common.util.JPCUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUEncryptUtil;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0329_FUSV0329OPDBMapper;
import eo.web.webview.mapping.FUSV0354_FUSV0354OPDBMapper;

/**
 * 認証リダイレクト（量販・訪販）画面のビューロジッククラスです。
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00958SFLogic extends JCCWebBusinessLogic
{
	/** ユースケースID（FUSV0329） */
	private static final String USECASE_ID_FUSV0329 = "FUSV0329";
	/** ユースケースID（FUSV0354） */
	private static final String USECASE_ID_FUSV0354 = "FUSV0354";
	
	/** アクション（iDALogin） */
	private static final String ACTION_IDALOGIN = "iDALogin";
	/** アクション（service_add） */
	private static final String ACTION_SERVICE_ADD = "service_add";
	
	/** アクション */
	private static final String KEY_ACTION = "action";
	
	/** SYSID(Header情報からSYSIDを取得するKEYを取得するKEY) */
	private static final String HEADER_SYSID_KEY = "HEADER_SYSID_KEY";
	/** ワンタイムキー */
	private static final String KEY_ONETIME_KEY = "onetimeKey";
	/** 従業員番号 */
	private static final String KEY_USERID = "id";
	/** 暗号化キー */
	private static final String KEY_CK = "ck";
	
	/** iDAテストモード */
	private static final String IDA_TEST_MODE = "IDA_TEST_MODE";
	
	/** OSID（iDA認証画面） */
	private static final String OSID_OS002 = "OS002";
	
	/** 遷移フラグ："1"(遷移する) */
	private static final String TRANS_FLG_ON = "1";
	
	/** 遷移フラグ："0"(遷移しない) */
	private static final String TRANS_FLG_OFF = "0";

	/** アプリケーションプロパティから共通暗号化キーを取得するキー (mineo申込) */
	private static final String EFRONT_MSKM_ENCRYPTION_KEY = "EFRONT_MSKM_ENCRYPTION_KEY";
	/** アプリケーションプロパティから初期化ベクトルを取得するキー (mineo申込) */
	private static final String EFRONT_MSKM_ENCRYPTION_IV_KEY = "EFRONT_MSKM_ENCRYPTION_IV_KEY";
	/** 複合化キー */
    private static final String TRUE_KEY = "ENCRYPT_KEY";

	/** Web申込機能コード(サービス追加) */
	private static final String WEB_MSKM_FUNC_CD_2 = "2";

	/**
	 * 初期表示処理
	 * 
	 * @return boolean true(固定)
	 */
	@SuppressWarnings("unchecked")
	public boolean init() throws Exception
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean取得
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();
		// ＷＥＢ新規情報取得
		X31SDataBeanAccess webNewBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		
		// Requestオブジェクト取得
		X33WSessionController sc = X33CUtil.getSession(this.getSessionId());
		HttpServletRequest req = sc.getServletRequest();
		
		// アクション
		String action = req.getParameter(KEY_ACTION);
		
		// アクションが設定されていない場合、iDA認証画面に遷移する
		if (JFUWebCommon.isNull(action))
		{
			// POST連携でのWeb申込の場合
			if (!JFUWebCommon.isNull(getWebAccInfo(webNewBean).sendMessageString(CommonInfoCFConst.ACTION_FLG_69, X31CWebConst.DATABEAN_GET_VALUE)))
			{
				// 会員情報チェックを行う
				fromIdaNinsho();
				// eo光eo電気契約一覧画面へ直接遷移
				setTransferPageId("FUW009570PJP");
			}
			// 通常、iDA認証画面に遷移
			else
			{
				// ＩＤＡ認証遷移フラグ
				serviceFormBean.sendMessageString(FUW00958SFConst.IDA_NINSHO_TRANS_FLG, X31CWebConst.DATABEAN_SET_VALUE, TRANS_FLG_ON);
			}
		}
		// iDAから本システムへの遷移時
		else if (ACTION_IDALOGIN.equals(action))
		{
			// ＩＤＡ認証遷移フラグ
			serviceFormBean.sendMessageString(FUW00958SFConst.IDA_NINSHO_TRANS_FLG, X31CWebConst.DATABEAN_SET_VALUE, TRANS_FLG_OFF);

			// Header情報からSYSIDを取得するKEYを取得
			String headerSysIdKey = JCCWebCommon.getApplicationConst(HEADER_SYSID_KEY);
			if (null == headerSysIdKey || "".equals(headerSysIdKey))
			{
				throw new JCCFrameworkException("Header情報のSYSID取得用KEYが、アプリケーションプロパティファイルに設定されていません。");
			}
			// Header情報からのSYSID情報
			String headerSysId = req.getHeader(headerSysIdKey);
			
			// iDAテストモードをAPLConstから取得する
			String iDATestMode = JCCWebCommon.getApplicationConst(IDA_TEST_MODE);
			
			// iDAテストモードがONの場合、SYSIDをリクエストから取得する
			if(JFUStrConst.ON.equals(iDATestMode))
			{
				// SYSIDの取得
				headerSysId = req.getParameter(headerSysIdKey);
			}

			// ＷＥＢ新規情報.SYSID
			webNewBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_SET_VALUE, headerSysId);
		}
		// 営業支援システムからの遷移時
		else if (ACTION_SERVICE_ADD.equals(action))
		{
			// POSTされてきたパラメータを取得
			X31CHashMap posted_requests = super.getRequestParams();

			// 共通暗号化キーをAPLConstから取得
			String essKey = JFUCommonUtil.decryptKey(TRUE_KEY, JCCWebCommon.getApplicationConst(EFRONT_MSKM_ENCRYPTION_KEY));
			// 初期化ベクトルをAPLConstから取得
			String essIv = JFUCommonUtil.decryptKey(TRUE_KEY, JCCWebCommon.getApplicationConst(EFRONT_MSKM_ENCRYPTION_IV_KEY));

			// ユーザID
			String tantoshaId = (String)posted_requests.get(KEY_USERID);
			// 暗号キー
			String ck = JFUEncryptUtil.decryptAES(essKey, essIv, (String)posted_requests.get(KEY_CK));
			// ワンタイムキー
			String webAccessKey = JFUEncryptUtil.decryptAES(ck, essIv, (String)posted_requests.get(KEY_ONETIME_KEY));

			// アクション有無を設定　※POST連携でのWeb申込
			getWebAccInfo(webNewBean).sendMessageString(CommonInfoCFConst.ACTION_FLG_69, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00002_1);
			// Ｗｅｂアクセス認証キーを設定
			getRedInfo(webNewBean).sendMessageString(CommonInfoCFConst.WEB_ACCSS_NSKEY_17, X31CWebConst.DATABEAN_SET_VALUE, webAccessKey);
			// アクションを設定
			getRedInfo(webNewBean).sendMessageString(CommonInfoCFConst.RED_ACTION_17, X31CWebConst.DATABEAN_SET_VALUE, action);
			// 担当者IDを設定
			getElseInfo(webNewBean).sendMessageString(CommonInfoCFConst.TANTOSHA_ID_18, X31CWebConst.DATABEAN_SET_VALUE, tantoshaId);
			// フロント区分を設定
			getFrontCommonInfo(commonInfoBean).sendMessageString(CommonInfoCFConst.FU_KBN_05, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.FU_KBN_R);

			// サービス追加
			toServiceAdd();

		}

		return true;
	}
	
	/**
	 * iDA認証画面へリダイレクトします。
	 * 
	 * @return boolean true(固定)
	 */
	public boolean redirectIdaNinsho()
	{
		// iDA認証画面へリダイレクト(他サイト連携)
		getCommonInfoBean().sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, OSID_OS002);
		
		return true;
	}
	
	/**
	 * iDAから本システムへの遷移時
	 * 
	 * @return boolean true(固定)
	 * @throws Exception 
	 */
	public boolean fromIdaNinsho() throws Exception
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// 会員情報チェックの実施
		doMemberCheck();

		// 遷移先画面ＩＤ
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00957);
		// 遷移先画面名
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00957);

		return true;

	}

	/**
	 * 会員情報チェックの実施
	 * 
	 * @throws Exception 
	 */
	private void doMemberCheck() throws Exception
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean取得
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();
		// ＷＥＢ新規情報取得
		X31SDataBeanAccess webNewBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		
		// サービス検索条件格納用マップ
		HashMap<String, HashMap<String, String>> inputMap = new HashMap<String, HashMap<String, String>>();
		// サービス処理結果格納用マップ
		HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap =
				new HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>>();
		
		// サービスパラメータ生成
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0329);
		
		// DataBean-BPマッピングクラス生成
		FUSV0329_FUSV0329OPDBMapper mapper = new FUSV0329_FUSV0329OPDBMapper();
		// 上り/下りマッピング用パラメータ生成
		X31SDataBeanAccess[] beanArray = new X31SDataBeanAccess[] { serviceFormBean, commonInfoBean };
		
		// 現顧客情報一覧照会SC上りマッピング
		mapper.setFUSV032901SC(beanArray, inputMap, JPCModelConstant.FUNC_CD_1);
		// サービス契約一覧照会（SYSID）3SC上りマッピング
		mapper.setFUSV032902SC(beanArray, inputMap, JPCModelConstant.FUNC_CD_1);
		// 督促情報取得CC上りマッピング
		mapper.setFUSV032901CC(beanArray, inputMap, JPCModelConstant.FUNC_CD_1);
		
		try
		{
			// 会員情報チェック(量販・訪販)サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 業務共通例外クラス："0002"（システムエラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
		
		// ＷＥＢ新規情報.申込区分："2"(追加申込)
		webNewBean.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.MSKM_KBN_ADD);
		
		// 会員チェック処理
		chkMember(outputMap);

	}
	
	/**
	 * 会員チェックを実施します。
	 *
	 * @param outputMap アウトマップ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void chkMember(HashMap outputMap) throws Exception
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// ＷＥＢ新規情報取得
		X31SDataBeanAccess webNewBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		// ＷＥＢ新規情報.契約者情報
		X31SDataBeanAccess keiyakushaBean = getKeiyakuinfo(webNewBean);
		// 販売タイプ
		String hanbaiType = webNewBean.sendMessageString(CommonInfoCFConst.HANBAI_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE);
		// 会員種別
		String kiinSbt = "";
		// 契約種別
		String keiSbt = "";
		// お客様生年月日
		String birthd = "";
		// 会員種別コード
		String memberSbtCd = "";
		// 会員種別特定フラグ
		String mmbSbtTokutFlg = "";
		// 親権者名
		String skshaNm = "";
		// 卸先事業者コード
		String orsjgsCd = "";
		// ｅｏＩＤ
		String eoid = "";
		// サービス契約有無 true:有、false:無
		boolean svcKeiUm = false;
		
		// 現顧客情報一覧照会マップ
		HashMap fusv032901scMap = null;
		
		if (outputMap.containsKey("FUSV032901SC"))
		{
			fusv032901scMap = (HashMap)outputMap.get("FUSV032901SC");
		}
		if (fusv032901scMap != null && fusv032901scMap.containsKey("ECK0011B504CBSMsg1List"))
		{
			ArrayList eck0011b504cbsList = (ArrayList)fusv032901scMap.get("ECK0011B504CBSMsg1List");
			if (eck0011b504cbsList != null && !eck0011b504cbsList.isEmpty())
			{
				HashMap<String, String> eck0011b504cbsMap = (HashMap)eck0011b504cbsList.get(0);
				
				// お客様生年月日
				birthd = eck0011b504cbsMap.get("cust_birthd");
				// 会員種別コード
				memberSbtCd = eck0011b504cbsMap.get("member_sbt_cd");
				// 会員種別特定フラグ
				mmbSbtTokutFlg = eck0011b504cbsMap.get("mmb_sbt_tokut_flg");
				// 親権者名
				skshaNm = eck0011b504cbsMap.get("sksha_nm");
				// 卸先事業者コード
				orsjgsCd = eck0011b504cbsMap.get("orsjgs_cd");
				// ｅｏＩＤ
				eoid = eck0011b504cbsMap.get("eoid");
				
				// 会員種別コードが"10"(マスター会員(個人))、"20"(マスター会員(法人))の場合
				if (JFUStrConst.CD00039_10.equals(memberSbtCd) || JFUStrConst.CD00039_20.equals(memberSbtCd))
				{
					// "1"（マスター会員）
					kiinSbt = JFUStrConst.KIIN_SBT_MASTER;
				}
				// 会員種別コードが"11"(ファミリー会員(個人))、"21"(ファミリー会員(法人))の場合
				else if (JFUStrConst.CD00039_11.equals(memberSbtCd) || JFUStrConst.CD00039_21.equals(memberSbtCd))
				{
					// "2"（ファミリー会員）
					kiinSbt = JFUStrConst.KIIN_SBT_FAMILY;
				}
				// 会員種別コードが"30"(オープン会員)の場合
				else if (JFUStrConst.CD00039_30.equals(memberSbtCd))
				{
					// "3"（オープン会員）
					kiinSbt = JFUStrConst.KIIN_SBT_OPEN;
				}
				
				// 会員種別コードが"10"(マスター会員(個人))、"11"(ファミリー会員(個人))の場合
				if (JFUStrConst.CD00039_10.equals(memberSbtCd) || JFUStrConst.CD00039_11.equals(memberSbtCd))
				{
					// "1"（個人）
					keiSbt= JFUStrConst.CD00036_1;
				}
				// 会員種別コードが"20"(マスター会員(法人))、"21"(ファミリー会員(法人))の場合
				else if (JFUStrConst.CD00039_20.equals(memberSbtCd) || JFUStrConst.CD00039_21.equals(memberSbtCd))
				{
					// "2"（法人）
					keiSbt = JFUStrConst.CD00036_2;
				}
			}
		}
		
		// ＷＥＢ新規情報.ｅｏＩＤ
		webNewBean.sendMessageString(CommonInfoCFConst.EOID_06, X31CWebConst.DATABEAN_SET_VALUE, eoid);
		// ＷＥＢ新規情報.契約種別
		webNewBean.sendMessageString(CommonInfoCFConst.KEI_SBT_06, X31CWebConst.DATABEAN_SET_VALUE, keiSbt);
		// 契約者情報.会員種別
		keiyakushaBean.sendMessageString(CommonInfoCFConst.KIIN_SBT_09, X31CWebConst.DATABEAN_SET_VALUE, kiinSbt);
		
//		// 会員種別チェック
//		// 会員種別が"1"（マスター会員）以外の場合、エラー
//		if (!JFUStrConst.KIIN_SBT_MASTER.equals(kiinSbt))
//		{
//			// 業務共通例外クラス："0143"（会員種別エラー）
//			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0143);
//		}
		
		// 会員種別特定フラグチェック
		// 会員種別特定フラグが"1"(特定済)以外の場合、エラー
		if (!JFUStrConst.MMB_SBT_TOKUT_FLG_ZM.equals(mmbSbtTokutFlg))
		{
			// 業務共通例外クラス："0144"（会員種別未特定エラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0144);
		}
		
		// サービス契約一覧照会（SYSID）3マップ
		HashMap fusv032902scMap = null;
		
		// サービス追加、回線追加可能判定(true:可・false:不可)
		boolean addSvcFlg = true;
		// 有効なサービス契約ステータスのリストを作成
		ArrayList<String> listSvcStat = new ArrayList<String>();

		if (outputMap.containsKey("FUSV032902SC"))
		{
			fusv032902scMap = (HashMap)outputMap.get("FUSV032902SC");
		}
		if (fusv032902scMap != null && fusv032902scMap.containsKey("EKK0081B519CBSMsg1List"))
		{
			ArrayList ekk0081b519cbsList = (ArrayList)fusv032902scMap.get("EKK0081B519CBSMsg1List");
			if (ekk0081b519cbsList != null && !ekk0081b519cbsList.isEmpty())
			{
				for (int i = 0; i < ekk0081b519cbsList.size(); i++)
				{
					HashMap<String, String> ekk0081b519cbsMap = (HashMap)ekk0081b519cbsList.get(i);
					
					// サービス契約ステータス
					String svcKeiStat = ekk0081b519cbsMap.get("svc_kei_stat");
					// サービスコード
					String svcCd = ekk0081b519cbsMap.get("svc_cd");
					
					if (!JFUStrConst.CD00130_04.equals(svcCd))
					{
						// サービス契約ステータスが"910"(解約済)、"920"(キャンセル済)以外の場合
						if (!(JFUStrConst.CD00037_910.equals(svcKeiStat) || JFUStrConst.CD00037_920.equals(svcKeiStat)))
						{
							svcKeiUm = true;
//							break;
							// ネット・電話・テレビのうち、
							if (JFUStrConst.CD00130_01.equals(svcCd) || JFUStrConst.CD00130_02.equals(svcCd) || JFUStrConst.CD00130_03.equals(svcCd))
							{
								listSvcStat.add(svcKeiStat);
							}
						}
					}
				}
			}
		}
		if (listSvcStat.size() > 0)
		{
			java.util.Collections.sort(listSvcStat);
			// 最大のサービス契約ステータスが受付済、締結済の場合はサービス追加不可
			if(JFUStrConst.CD00037_010.compareTo((listSvcStat.get(listSvcStat.size() - 1))) == 0)
			{
				addSvcFlg = false;
			}
			if(JFUStrConst.CD00037_030.compareTo((listSvcStat.get(listSvcStat.size() - 1))) == 0)
			{
				addSvcFlg = false;
			}
		} else if (svcKeiUm && JFUStrConst.KIIN_SBT_MASTER.equals(kiinSbt)) {
			addSvcFlg = true;
		} else {
			addSvcFlg = false;
		}

		// 受付済のサービスがある場合はエラー
		if (!addSvcFlg)
		{
			// 業務共通例外クラス："0145"（契約状態の確認（契約サービスなし））
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0145);
		}

		// 契約サービス存在チェック
		// サービス契約が存在しない場合
		if (!svcKeiUm)
		{
			// 業務共通例外クラス："0145"（契約状態の確認（契約サービスなし））
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0145);
		}
		
		// 設備卸チェック
		// 卸先事業者コードが設定されている場合
		if (!JFUWebCommon.isNull(orsjgsCd))
		{
			// 業務共通例外クラス："0146"（卸会員エラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0146);
		}
		
		// 親権者同意有無チェック
		if (birthd.compareTo(JPCUtilCommon.addYear(JCCWebCommon.getOpeDate(this, null), -18)) > 0
				&& JFUWebCommon.isNull(skshaNm))
		{
			// 業務共通例外クラス："0147"（親権者未同意エラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0147);
		}
		
		// 量販Web申込で法人契約者チェック
		if (JFUStrConst.HNBAI_TYPE_RYOHAN.equals(hanbaiType) && JFUStrConst.CD00036_2.equals(keiSbt))
		{
			// 業務共通例外クラス："0148"（契約状態の確認（法人契約者））
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0148);
		}
		
		// 督促ステータス閾値
		int threshold = Integer.parseInt(JCCWebCommon.getApplicationConst(JFUStrConst.THRESHOLD_TOKUSOKU_STAT));
		
		// ｅｏ電気申込不可督促ステータス閾値
		int elecTkskValue = Integer.parseInt(JCCWebCommon.getApplicationConst(JFUStrConst.EOELEC_TOKUSOKU_STAT));
		
		// 電気督促最大値
		int elecTkskMaxValue = 0;
		
		// 督促情報取得マップ
		HashMap fusv032901ccMap = null;
		
		if (outputMap.containsKey("FUSV032901CC"))
		{
			fusv032901ccMap = (HashMap)outputMap.get("FUSV032901CC");
		}
		if (fusv032901ccMap != null && fusv032901ccMap.containsKey("JFUGetTokusokuInfoCCList"))
		{
			ArrayList tokusokuList = (ArrayList)fusv032901ccMap.get("JFUGetTokusokuInfoCCList");
			if (tokusokuList != null && !tokusokuList.isEmpty())
			{
				for (int i = 0; i < tokusokuList.size(); i++)
				{
					HashMap<String, String> tokusokuMap = (HashMap)tokusokuList.get(i);
					
					// 督促ステータス
					String tokusokuStat = tokusokuMap.get("tokusoku_stat");
					
					if (JFUWebCommon.isNull(tokusokuStat))
					{
						continue;
					}
					
					// 数値に変換
					int intTokusokuStat = Integer.parseInt(tokusokuStat);
					
					// 督促ステータスが督促ステータス閾値以上の場合
					if (intTokusokuStat >= threshold)
					{
						// 業務共通例外クラス："0149"（督促状態エラー（追加用））
						throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0149);
					}
					
					if (intTokusokuStat >= elecTkskMaxValue)
					{
						elecTkskMaxValue = intTokusokuStat;
					}
				}
			}
		}
		
		// 督促ステータスがeo電気申込不可督促ステータス閾値以上のものが存在する場合
		if (elecTkskMaxValue >= elecTkskValue)
		{
			// 督促フラグ(不可)
			webNewBean.sendMessageString(CommonInfoCFConst.ELEC_MSKM_TKSK_FLG_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.ELEC_TKSK_FUKA);
		}
		// 上記以外の場合
		else
		{
			// 督促フラグ(可)
			webNewBean.sendMessageString(CommonInfoCFConst.ELEC_MSKM_TKSK_FLG_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.ELEC_TKSK_KA);
		}
	}

	/**
	 * 営業支援から本システムへの遷移時
	 * 
	 * @throws Exception 
	 */
	private void toServiceAdd() throws Exception
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// ＷＥＢ新規情報取得
		X31SDataBeanAccess webNewBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);

		// サービス検索条件格納用マップ
		@SuppressWarnings("unused")
		HashMap<String, HashMap<String, String>> inputMap = new HashMap<String, HashMap<String, String>>();
		// サービス処理結果格納用マップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスパラメータ生成
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0354);

		FUSV0354_FUSV0354OPDBMapper mapper = new FUSV0354_FUSV0354OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		dataMap = mapper.setFUSV035401CC(webNewBean, dataMap);

		try
		{
			// サービスの呼び出しを行う。
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 業務共通例外クラス："0002"（システムエラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		mapper.getFUSV035401CC(webNewBean, outputMap);
// #84498 ANK-4551-00-00
		// 申込経路 (ANK-4551-00-00)
		String mskmRoute = JFUWebCommon.getMskmRoute(this);
		webNewBean.sendMessageString(CommonInfoCFConst.MSKM_ROUTE_06, X31CWebConst.DATABEAN_SET_VALUE, mskmRoute);
// #84498 ANK-4551-00-00
		// ＷＥＢ申込機能コードがサービス追加
		if (WEB_MSKM_FUNC_CD_2.equals(getWebMskmFuncCd(getCommonInfoBean())))
		{
			// 会員情報チェックの実施
			doMemberCheck();
		}

		// 遷移先画面ＩＤ
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00905);
		// 遷移先画面名
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00905);
		// メニュー画面へ直接遷移
		setTransferPageId("FUW009050PJP");

	}

	/**
	 * フロント共有情報
	 * 
	 * @param commonInfoBean
	 * @return frontCommonInfoBean
	 */
	private X31SDataBeanAccess getFrontCommonInfo(X31SDataBeanAccess commonInfoBean)
	{
		X31SDataBeanAccessArray array = commonInfoBean.getDataBeanArray(CommonInfoCFConst.FRONT_COMMON_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess frontCommonInfoBean = array.getDataBean(0);

		return frontCommonInfoBean;

	}

	/**
	 * その他情報
	 * 
	 * @param webNewInfoBean
	 * @return elseInfoBean
	 */
	private X31SDataBeanAccess getElseInfo(X31SDataBeanAccess webNewInfoBean)
	{
		X31SDataBeanAccessArray array = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.ELSE_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess elseInfoBean = array.getDataBean(0);

		return elseInfoBean;
	}

	/**
	 * リダイレクト情報
	 * 
	 * @param webNewInfoBean
	 * @return elseInfoBean
	 */
	private X31SDataBeanAccess getRedInfo(X31SDataBeanAccess webNewInfoBean)
	{
		X31SDataBeanAccessArray array = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess elseInfoBean = array.getDataBean(0);

		return elseInfoBean;
	}

	/**
	 * 契約者情報
	 * 
	 * @param bn
	 * @return bn1
	 */
	private X31SDataBeanAccess getKeiyakuinfo(X31SDataBeanAccess webNewInfoBean)
	{
		X31SDataBeanAccessArray array = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.KEIYAKUSHA_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess bn1 = array.getDataBean(0);

		return bn1;
	}

	/**
	 * ＷＥＢアクセス情報
	 * 
	 * @param webNewInfoBean
	 * @return elseInfoBean
	 */
	private X31SDataBeanAccess getWebAccInfo(X31SDataBeanAccess webNewInfoBean)
	{
		X31SDataBeanAccessArray array = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_ACCESS_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess bean = array.getDataBean(0);

		return bean;
	}

	/**
	 * Web申込機能コード取得
	 * 
	 * @param commonInfoBean
	 * @return Web申込機能コード
	 */
	private String getWebMskmFuncCd(X31SDataBeanAccess commonInfoBean)
	{
		// ＷＥＢ新規情報取得
		X31SDataBeanAccess webNewBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);

		return getWebAccInfo(webNewBean).sendMessageString(CommonInfoCFConst.WEB_MSKM_FUNC_CD_69,
				X31CWebConst.DATABEAN_GET_VALUE);
	}
}
