/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：FUW04001SFLogic
 *   ソースファイル名：FUW04001SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2011年05月31日
 *＜機能概要＞
 *   WebIDパスワード変更申込のビューロジッククラスです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/05/31   FJ西川      新規作成
 *   v4.00		 2012/09/27   FJ)岡井     【ANK-1198-00-00】変更系申込画面の提供条件・利用規約の設置位置について
 *  v37.00		 2018/02/16   FJ)美濃原   【ANK-3366-00-00】eo光設備卸対応
 *
 **********************************************************************/
package eo.web.webview.FUW04001SF;

import static eo.web.webview.CommonInfoCF.CommonInfoCFConst.URL_SCREEN_ID_21;
import static eo.web.webview.common.JFUWebCommon.SEP_0;
import static eo.web.webview.common.JFUWebCommon.SSO_INFO;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SWebLog;

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.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0159_FUSV0159OPDBMapper;
import eo.web.webview.mapping.FUSV0190_FUSV0190OPDBMapper;

/**
 * WebIDパスワード変更申込のビューロジッククラスです。
 *
 * <br>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW04001SFLogic extends JCCWebBusinessLogic
{
	/** コマンド正常終了 */
	private static final String SUCCESS = "0";

	/** WebID認証照会依頼：正常終了 */
	private static final String INQ_SUCCESS = "040000";
	/** WebID認証照会依頼：WebID認証失敗（アカウントがない） */
	private static final String INQ_WITHOUT_ACOUNT = "040406";
	/** WebID認証照会依頼：WebID認証失敗（認証失敗） */
	private static final String INQ_FAILURE = "041201";

	/** WebID認証照会依頼：WebID認証失敗（WebIDが10桁以外） */
	private static final String INQ_EXCEPT_PLACE = "041303";
	/** WebID認証照会依頼：WebID認証失敗（WebIDが英数字以外） */
	private static final String INQ_EXCEPT_CHAR_KIND = "041304";

	/** WebIDパスワード更新依頼：正常終了 */
	private static final String UPD_SUCCESS = "050000";
	/** WebIDパスワード更新依頼：WebIDパスワード変更失敗（アカウントがない） */
	private static final String UPD_WITHOUT_ACOUNT = "050406";
	/** WebIDパスワード更新依頼：WebIDパスワード変更失敗（旧パスワード異常） */
	private static final String UPD_OLD_WEBID_PWD_ABNOUMAL = "050413";

	/** 置換文字(チェック用)：パスワードが不正です。パスワード */
	private static final String[] REPLACE_CHAR_PWD_ARRAY = { "パスワードが不正です。パスワード" };

	/** 置換文字(チェック用)：パスワードが不正です。パスワード */
	private static final String[] REPLACE_CHAR_CHG_PWD_ARRAY = { "新しいパスワードに", "、", "パスワード以外" };

	/** エラー表示画面項目箇所(チェック用)：now_pwd */
	private static final String ERR_PLACE_NOW_PWD_ITEM_ID = "now_pwd";
	/** エラー表示画面項目箇所(チェック用)：chg_pwd */
	private static final String ERR_PLACE_NEW_PWD_ITEM_ID = "chg_pwd";

	/** サービスID(初期表示) */
	private static final String USECASE_ID_FUSV0190 = "FUSV0190";
	/** サービスID(申込) */
	private static final String USECASE_ID_FUSV0159 = "FUSV0159";

	/** FUSV01901CC */
	private static final String FUSV019001CC = "FUSV019001CC";
	/** EKK0721A010CBSMsg1List */
	private static final String EKK0721A010CBSMSG1LIST = "EKK0721A010CBSMsg1List";

	/** 画面ID */
	private static final String FUW04001 = "FUW04001";

	/** 外部API(WebID認証照会依頼処理)用照会コマンド */
	private static final String FU_C_FUIFE007_PARAM1 = "FU_C_FUIFE007_PARAM1";
	/** 外部API(WebIDパスワード更新依頼処理)用照会コマンド */
	private static final String FU_C_FUIFE008_PARAM1 = "FU_C_FUIFE008_PARAM1";

	/** リモートコマンド実行用環境定義ファイル[WWWサーバ] */
	private static final String FU_C_WWW_ENV = "FU_C_WWW_ENV";

	/**
	 * WebIDパスワード変更申込画面の初期表示処理です。
	 * 
	 * <br>
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception
	 *             例外出力
	 */
	public boolean init() throws Exception
	{
		// ---- 共有フォームbean ----
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		String screeId = JFUWebCommon.getScreenId(this);
		if (JFUScreenConst.SCREEN_NAME_FUW08801.equals(screeId))
		{
			// 各種パスワード変更画面から遷移してきた場合

			// ＳＳＯ情報 ＳＹＳＩＤ
			String sysId =
					JFUWebCommon.getDataBeanItemByPath(commonInfoBean, JFUWebCommon.SSO_INFO + JFUWebCommon.SEP_0 + CommonInfoCFConst.SYSID_21);

			// ＳＳＯ情報 ＷＥＢＩＤ
			String webId =
					JFUWebCommon.getDataBeanItemByPath(commonInfoBean, JFUWebCommon.SSO_INFO + JFUWebCommon.SEP_0 + CommonInfoCFConst.WEB_ID_21);

			// スクリーンID
			JFUWebCommon.setDataBeanItemByPath(commonInfoBean, SSO_INFO + SEP_0 + URL_SCREEN_ID_21, "WEB_ID_PASSWORD_CHANGE");

			if (JFUWebCommon.isNull(sysId) || JFUWebCommon.isNull(webId))
			{
				// "0002"（システムエラー）
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}

			// 現顧客契約情報をリフレッシュします。
			JFUWebCommon.refreshGenCustKei(this);

			// 共有フォームBeanを再取得。
			commonInfoBean = super.getCommonInfoBean();
		}

		// ■設備卸チェック
		JFUWebCommon.checkOrosi(this);

		// ○WEB変更情報
		X31SDataBeanAccess webChgInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		// ○SSO情報
		X31SDataBeanAccess ssoInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.SSO_INFO).getDataBean(0);

		// SSO情報取得
		String ssoInfoWebid = ssoInfoBean.sendMessageString(CommonInfoCFConst.WEB_ID_21, X31CWebConst.DATABEAN_GET_VALUE);
		if (JFUWebCommon.isNull(ssoInfoWebid))
		{
			X31SWebLog.DEBUG_LOG.debug("【SSO情報 WebID未設定エラー】");
			// システムエラーをスロー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ○現顧客情報
		X31SDataBeanAccess genCustKeiInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0);

		// ○サービス契約情報
		X31SDataBeanAccess svcKeiInfoBean = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO).getDataBean(0);

		// ○サービス契約内訳情報
		X31SDataBeanAccess svcKeiUcwkInfoBean = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_UCWK_INFO).getDataBean(0);

		String webid = null;
		String urlAccount = null;

		// オプションサービス契約情報（配列）
		X31SDataBeanAccessArray opSvcKeiInfoArray = svcKeiUcwkInfoBean.getDataBeanArray(CommonInfoCFConst.OP_SVC_KEI_INFO);
		for (int m = 0; m < opSvcKeiInfoArray.getCount(); m++)
		{
			X31SDataBeanAccess tmpOpSvcKeiInfoBean = opSvcKeiInfoArray.getDataBean(m);

			// オプションサービス契約情報 ＷｅｂＩＤ
			String opSvcKeiInfoWebid = tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.WEB_ID_28, X31CWebConst.DATABEAN_GET_VALUE);

			// オプションサービス契約ステータス
			String opSvcKeiInfoOpSvcStat =
					tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.OP_SVC_KEI_STAT_28, X31CWebConst.DATABEAN_GET_VALUE);
			
			String opSvcKeiInfoUrlAccount =
				tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.URL_ACCOUNT_28, X31CWebConst.DATABEAN_GET_VALUE);

			if (!(JFUStrConst.CD00037_910.equals(opSvcKeiInfoOpSvcStat) || JFUStrConst.CD00037_920.equals(opSvcKeiInfoOpSvcStat)))
			{
				// オプションサービス契約ステータスが「910／920」以外の場合
				if (ssoInfoWebid.equals(opSvcKeiInfoWebid))
				{
					webid = opSvcKeiInfoWebid;
					urlAccount = opSvcKeiInfoUrlAccount;
					break;
				}
			}
		}

		// WebIDチェック処理
		if (JFUWebCommon.isNull(webid) ||  JFUWebCommon.isNull(urlAccount))
		{
			// 共有フォームBean.オプションサービス契約情報.WebIDが無しの場合

			// "0102"（契約状態エラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// ---- サービスフォームbean ----
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 各Beanを配列に格納
		X31SDataBeanAccess[] beanArray = { bean, svcKeiInfoBean, svcKeiUcwkInfoBean };

		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>(16);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0190);

		// DBMapperクラス呼び出し
		FUSV0190_FUSV0190OPDBMapper mapper = new FUSV0190_FUSV0190OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// ●上りマッピング
		// 初期費用一覧照会コモンコンポーネント部品CC
		mapper.setFUSV019001CC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ●サービス呼び出し
		try
		{
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ●料金表マッピング
		JFUWebCommon.setPrcInfoArea(bean, outputMap, null, FUSV019001CC, FUW04001);

		// 有料フラグを設定(初期費用があればTRUE)
		bean.sendMessageBoolean(FUW04001SFConst.PAY_FLG, X31CWebConst.DATABEAN_SET_VALUE, chkPayInitialCost(outputMap));

		// マンション区分を設定
		bean.sendMessageBoolean(FUW04001SFConst.MANSION_DIV, X31CWebConst.DATABEAN_SET_VALUE, getMansionDiv(bean, commonInfoBean));

		// ●現顧客契約情報照会処理
		// 現在のWEBID
		bean.sendMessageString(FUW04001SFConst.NOW_WEB_ID, X31CWebConst.DATABEAN_SET_VALUE, webid);

		// ●遷移先画面の設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JFUScreenConst.SCREEN_NAME_FUW04001);

		// 遷移先画面IDの設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JFUScreenConst.SCREEN_ID_FUW04001);

		return true;
	}

	/**
	 * WebIDパスワード変更申込画面の 申し込むボタン押下時の処理です。
	 * 
	 * <br>
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception
	 *             例外出力
	 */
	public boolean mskm() throws Exception
	{

		// ---- サービスフォームbean ----
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 現在のＷｅｂＩＤパスワード
		String nowWebIdPwd = bean.sendMessageString(FUW04001SFConst.NOW_WEB_ID_PWD, X31CWebConst.DATABEAN_GET_VALUE);
		// 変更ＷｅｂＩＤパスワード
		String chgWebIdPwd = bean.sendMessageString(FUW04001SFConst.CHG_WEB_ID_PWD, X31CWebConst.DATABEAN_GET_VALUE);
		if (nowWebIdPwd.equals(chgWebIdPwd))
		{
			// 現在のＷｅｂＩＤパスワードと変更ＷｅｂＩＤパスワードが同じ場合にエラー
			JFUWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0270_NW, REPLACE_CHAR_CHG_PWD_ARRAY, ERR_PLACE_NEW_PWD_ITEM_ID);
			return true;
		}

		// フロントオンライン共通部品/共通関連チェック処理
		JFUWebCommon.checkCommonRelation(this, USECASE_ID_FUSV0159);

		// ---- 共有フォームbean ----
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// ●共有フォームBeanより現顧客契約情報を取得する。
		// ---- 共有フォームbean ----
		// ○WEB変更情報
		X31SDataBeanAccess webChgInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		// ○SSO情報
		X31SDataBeanAccess ssoInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.SSO_INFO).getDataBean(0);

		// SSO情報取得
		String ssoInfoWebid = ssoInfoBean.sendMessageString(CommonInfoCFConst.WEB_ID_21, X31CWebConst.DATABEAN_GET_VALUE);
		if (JFUWebCommon.isNull(ssoInfoWebid))
		{
			X31SWebLog.DEBUG_LOG.debug("【SSO情報 WebID未設定エラー】");
			// システムエラーをスロー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ○現顧客情報
		X31SDataBeanAccess genCustKeiInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0);

		// ○サービス契約情報
		X31SDataBeanAccess svcKeiInfoBean = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO).getDataBean(0);

		// ○サービス契約内訳情報
		X31SDataBeanAccess svcKeiUcwkInfoBean = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_UCWK_INFO).getDataBean(0);

		X31SDataBeanAccess opSvcKeiInfoBean = null;
		// オプションサービス契約情報（配列）
		X31SDataBeanAccessArray opSvcKeiInfoArray = svcKeiUcwkInfoBean.getDataBeanArray(CommonInfoCFConst.OP_SVC_KEI_INFO);
		for (int m = 0; m < opSvcKeiInfoArray.getCount(); m++)
		{
			X31SDataBeanAccess tmpOpSvcKeiInfoBean = opSvcKeiInfoArray.getDataBean(m);
			// オプションサービス契約情報 ＷｅｂＩＤ
			String opSvcKeiInfoWebid = tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.WEB_ID_28, X31CWebConst.DATABEAN_GET_VALUE);

			// オプションサービス契約ステータス
			String opSvcKeiInfoOpSvcStat =
					tmpOpSvcKeiInfoBean.sendMessageString(CommonInfoCFConst.OP_SVC_KEI_STAT_28, X31CWebConst.DATABEAN_GET_VALUE);

			if (!(JFUStrConst.CD00037_910.equals(opSvcKeiInfoOpSvcStat) || JFUStrConst.CD00037_920.equals(opSvcKeiInfoOpSvcStat)))
			{
				// オプションサービス契約ステータスが「910／920」以外の場合

				if (ssoInfoWebid.equals(opSvcKeiInfoWebid))
				{
					opSvcKeiInfoBean = tmpOpSvcKeiInfoBean;
					break;
				}
			}
		}

		if (opSvcKeiInfoBean == null)
		{
			X31SWebLog.DEBUG_LOG.debug("【オプションサービス契約情報未設定エラー】");
			// システムエラーをスロー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ●外部API呼び出し
		String resultCode = execSyncInquiry(bean);
		// ●外部API呼出結果処理
		if (!INQ_SUCCESS.equals(resultCode))
		{
			// 異常終了の場合
			if (INQ_WITHOUT_ACOUNT.equals(resultCode))
			// WebID認証失敗（アカウントがない）
			{
				// "0102"（契約状態エラー）
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			else if (INQ_FAILURE.equals(resultCode) || INQ_EXCEPT_PLACE.equals(resultCode) || INQ_EXCEPT_CHAR_KIND.equals(resultCode))
			{
				// WebID認証失敗（認証失敗）
				// WebID認証失敗（WebIDが10桁以外）
				// WebID認証失敗（WebIDが英数字以外）
				JFUWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0400_TW, REPLACE_CHAR_PWD_ARRAY, ERR_PLACE_NOW_PWD_ITEM_ID);
			}
			else
			{
				// "0102"（システムエラー）
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}
			return true;
		}

		resultCode = execSyncUpdate(bean);
		if (!UPD_SUCCESS.equals(resultCode))
		{
			if (UPD_WITHOUT_ACOUNT.equals(resultCode))
			{
				// "0102"（契約状態エラー）
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			else if (UPD_OLD_WEBID_PWD_ABNOUMAL.equals(resultCode))
			{
				// WebIDパスワード変更失敗（アカウントがない）
				// WebIDパスワード変更失敗（旧パスワード異常）
				JFUWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0400_TW, REPLACE_CHAR_PWD_ARRAY, ERR_PLACE_NEW_PWD_ITEM_ID);
			}
			else
			{
				// "0102"（システムエラー）
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}
			return true;
		}

		// ●サービス呼び出し処理
		// WebIDパスワード変更申込(申込)サービスの呼び出しを行う。

		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>(16);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0159);
		FUSV0159_FUSV0159OPDBMapper mapper = new FUSV0159_FUSV0159OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		X31SDataBeanAccess[] paramBean = { bean, ssoInfoBean, svcKeiInfoBean, opSvcKeiInfoBean };

		// 申込内容承認登録
		mapper.setFUSV015901SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		// 進捗登録
		mapper.setFUSV015902SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		// 申込明細照査・後続業務依頼
		mapper.setFUSV015903SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// 検索結果格納用マップを生成。
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();
		try
		{
			// サービスの呼び出しを行う。
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{

			// ●外部API呼び出し
			resultCode = execSyncUpdateCancel(bean);

			// ●外部API呼出結果処理
			// "0102"（システムエラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// ●現顧客リフレッシュ処理
		JFUWebCommon.refreshGenCustKei(this);

		// ●遷移先画面の設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JFUScreenConst.SCREEN_NAME_FUW04002);

		// 遷移先画面IDの設定する。
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JFUScreenConst.SCREEN_ID_FUW04002);

		return true;
	}

	/**
	 * 外部API呼出処理(WebID認証照会依頼処理)です。
	 * 
	 * <br>
	 * @param bean サービスフォームBean
	 * @return 処理結果コード
	 */
	private String execSyncInquiry(X31SDataBeanAccess bean)
	{
		// 現在のＷｅｂＩＤ
		String nowWebId = bean.sendMessageString(FUW04001SFConst.NOW_WEB_ID, X31CWebConst.DATABEAN_GET_VALUE);
		// 現在のＷｅｂＩＤパスワード
		String nowWebIdPwd = bean.sendMessageString(FUW04001SFConst.NOW_WEB_ID_PWD, X31CWebConst.DATABEAN_GET_VALUE);

		String[] param =
				{ JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_NM),
						JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_OP1),
						JFUWebCommon.getApplicationConst(FU_C_FUIFE007_PARAM1), nowWebId, nowWebIdPwd,
						JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_OP2), JFUWebCommon.getApplicationConst(FU_C_WWW_ENV) };
		return execSync(param);
	}

	/**
	 * 外部API呼出処理(WebIDパスワード更新依頼処理)です。
	 * 
	 * <br>
	 * @param bean サービスフォームBean
	 * @return 処理結果コード
	 */
	private String execSyncUpdate(X31SDataBeanAccess bean)
	{
		// 現在のＷｅｂＩＤ
		String nowWebId = bean.sendMessageString(FUW04001SFConst.NOW_WEB_ID, X31CWebConst.DATABEAN_GET_VALUE);
		// 現在のＷｅｂＩＤパスワード
		String nowWebIdPwd = bean.sendMessageString(FUW04001SFConst.NOW_WEB_ID_PWD, X31CWebConst.DATABEAN_GET_VALUE);
		// 変更ＷｅｂＩＤパスワード
		String chgWebIdPwd = bean.sendMessageString(FUW04001SFConst.CHG_WEB_ID_PWD, X31CWebConst.DATABEAN_GET_VALUE);

		// 外部コマンド情報
		String[] param =
				{ JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_NM),
						JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_OP1),
						JFUWebCommon.getApplicationConst(FU_C_FUIFE008_PARAM1), nowWebId, nowWebIdPwd, chgWebIdPwd,
						JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_OP2), JFUWebCommon.getApplicationConst(FU_C_WWW_ENV) };
		return execSync(param);
	}

	/**
	 * 外部API呼出処理(WebIDパスワード更新依頼取消処理)です。
	 * <br>
	 * @param bean サービスフォームBean
	 * @return 処理結果コード
	 */
	private String execSyncUpdateCancel(X31SDataBeanAccess bean)
	{
		// 現在のＷｅｂＩＤ
		String nowWebId = bean.sendMessageString(FUW04001SFConst.NOW_WEB_ID, X31CWebConst.DATABEAN_GET_VALUE);
		// 現在のＷｅｂＩＤパスワード
		String nowWebIdPwd = bean.sendMessageString(FUW04001SFConst.NOW_WEB_ID_PWD, X31CWebConst.DATABEAN_GET_VALUE);
		// 変更ＷｅｂＩＤパスワード
		String chgWebIdPwd = bean.sendMessageString(FUW04001SFConst.CHG_WEB_ID_PWD, X31CWebConst.DATABEAN_GET_VALUE);

		// 外部コマンド情報
		String[] param =
				{ JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_NM),
						JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_OP1),
						JFUWebCommon.getApplicationConst(FU_C_FUIFE008_PARAM1), nowWebId, chgWebIdPwd, nowWebIdPwd,
						JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_OP2), JFUWebCommon.getApplicationConst(FU_C_WWW_ENV) };
		return execSync(param);
	}

	/**
	 * 外部API呼出処理(WebIDパスワード更新依頼取消処理)です。
	 * 
	 * <br>
	 * @param param パラメーター
	 * @return 処理結果コード
	 */
	private String execSync(String[] param)
	{
		// 外部コマンド実行標準出力格納
		StringBuffer outPut = new StringBuffer();

		// 外部コマンド実行処理
		String execSyncCode =
				JFUWebCommon.execSync(param, outPut, Integer.parseInt(JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_EXEC_TIME_OUT)));

		// 外部コマンド実行結果
		if (!SUCCESS.equals(execSyncCode) || 0 == outPut.length())
		{
			// "0102"（システムエラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// 出力結果をListに詰め直す。
		List<String> resultList = Arrays.asList(delKaigyo(outPut.toString()).split(JFUStrConst.HALF_SPACE, 0));

		if (null == resultList || 0 == resultList.size())
		{
			// "0102"（システムエラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
		// 実行結果
		return resultList.get(0);
	}

	/**
	 * マンション区分（有料文言制御用）を判定します。 
	 * <BR>
	 * @param bean サービスフォームBean
	 * @param commonInfoBean 共有フォームBean
	 * 
	 * @return true:マンション(全戸一括)かつ支払金あり / false:マンション(全戸一括)以外または支払金なし
	 */
	private boolean getMansionDiv(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean)
	{
		// 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);

		// 料金グループコード
		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);

		// 有料フラグを取得
		boolean payFlg = bean.sendMessageBoolean(FUW04001SFConst.PAY_FLG, X31CWebConst.DATABEAN_GET_VALUE);

		// マンション(全戸一括)、かつ、支払金がある場合、「true」を設定
		boolean result = JFUStrConst.CD00133_04.equals(prcGrpCd) && JFUStrConst.CD01216_003.equals(kanyuKeiPayHoshikiCd) && payFlg;

		return result;
	}

	/**
	 * 有料フラグ判定（初期費用）処理です。
	 * @param bean
	 * @param outputMap
	 * @return true:初期費用あり / false:初期費用なし
	 */
	@SuppressWarnings("unchecked")
	public boolean chkPayInitialCost(HashMap outputMap)
	{
		boolean res = false;
		HashMap parentMap = null;

		if (outputMap.containsKey(FUSV019001CC))
		{
			parentMap = (HashMap)outputMap.get(FUSV019001CC);
		}

		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 str 文字列
	 * @return 改行コードを除去した文字列
	 */
	private String delKaigyo(String str)
	{
		// 入力パラメータ検査
		if (str == null)
		{
			return JFUStrConst.EMPTY;
		}

		// 出力用領域
		String outPutStr = str;

		// 改行コードを空文字に変換
		outPutStr = outPutStr.replace(JFUStrConst.RETURN_CODE, JFUStrConst.EMPTY).replace(JFUStrConst.S_LINE_SEPARAOR_LF, JFUStrConst.EMPTY);

		// 文字列を返却
		return outPutStr;
	}

}
