/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：FUW04401SFLogic
*   ソースファイル名：FUW04401SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年01月10日
*＜機能概要＞
*   TELvisionユーザー本加入登録 ビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/01/10   FJ）南岡    新規作成
*   v4.00		2012/08/03   FJ）大島    【ANK-0381-00-00】 IPv6無料文言不備
*	v4.00		2012/12/14   FJ）大島    【IT1-2012-0002435】光配線プラン分割対応
*	v8.00		2014/01/27   FJ) 文元    【ANK-1589-00-00】消費増税に伴う料金施策
*
**********************************************************************/
package eo.web.webview.FUW04401SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.model.common.JCMAPLConstMgr;
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 eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JPCUtilCommon;
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.FUSV0027_FUSV0027OPDBMapper;

/**
 * TELvisionユーザー本加入登録画面サービスフォームBeanビューロジック
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW04401SFLogic extends JCCWebBusinessLogic
{

	/** DataBean操作種別：項目値設定 */
	private static final String SET = X31CWebConst.DATABEAN_SET_VALUE;

	/** DataBean操作種別：項目値取得 */
	private static final String GET = X31CWebConst.DATABEAN_GET_VALUE;

	/** サービス:FUSV0027:TELvisionユーザー本加入登録(初期表示) */
	private static final String FUSV_ID = "FUSV0027";

	/** カンマ */
	private static final String COMMA = JFUStrConst.COMMA;

	/** お支払方法案内表示フラグ設定("1"：表示) */
	private static final String PAYWAY_GAIDE_DSP_FLG_ON = "1";

	/** お支払方法案内表示フラグ設定("0"：非表示) */
	private static final String PAYWAY_GAIDE_DSP_FLG_OFF = "0";

	/** 月額料金表示フラグ設定("1"：表示) */
	private static final String GTGK_PRC_DSP_FLG_ON = "1";

	/** 月額料金表示フラグ設定("0"：非表示) */
	private static final String GTGK_PRC_DSP_FLG_OFF = "0";

	/** [料金情報]プロパティファイル取得クエリ */
	private static final String QUERY_DISPCTL_PATH = "DISPSETTING/SETTING[@screenId='FUW04401']/DISPCTL[@groupid='PRC_INFO_TABLE']";

	/** [料金情報]プロパティファイル取得属性名 */
	private static final String QUERY_ATTR_NAME = "id";

	/** [料金情報ラベル]プロパティ取得キー：月額料金.タイトル */
	private static final String TITLE_LABEL_0 = "TITLE_LABEL_0";

	/** [料金情報ラベル]プロパティ取得キー：月額料金.2IDまで */
	private static final String COL_LABEL_0_0 = "COL_LABEL_0_0";

	/** [料金情報ラベル]プロパティ取得キー：月額料金.3〜5IDまで */
	private static final String COL_LABEL_0_1 = "COL_LABEL_0_1";

	/** [料金情報ラベル]プロパティ取得キー：月額料金.基本料金 */
	private static final String COL_LABEL_0_2 = "COL_LABEL_0_2";

	/** [料金情報ラベル]プロパティ取得キー：月額料金.無料 */
	private static final String MURYO_LABEL = "無料";

	/** [料金情報スタイル]プロパティ取得キー：月額料金.タイトル */
	private static final String TITLE_STYLE_0 = "TITLE_STYLE_0";

	/** [料金情報スタイル]プロパティ取得キー：月額料金.左値・右値 */
	private static final String COL_STYLE_0 = "COL_STYLE_0";

	/** 固定値：0円/ID*/
	private static final String ZERO_YEN = "0";

	/** 加入属性("R"：本加入) */
	private static final String KANYU_ZOKUSEI_HON_KANYU = "R";

	/** サービス区分("03":ホームファイバー) */
	private static final String EO_SVC_KBN_03 = "03";

	/** サービス区分("04":メガファイバー) */
	private static final String EO_SVC_KBN_04 = "04";

	/** サービス区分("07":メガファイバーフラットタイプ) */
	private static final String EO_SVC_KBN_07 = "07";

	/** サービス区分("09":ADSL(eAccess)) */
	private static final String EO_SVC_KBN_09 = "09";

	/** サービス区分("10":ADSL(フレッツ)) */
	private static final String EO_SVC_KBN_10 = "10";

	/** サービス区分("15":光配線) */
	private static final String EO_SVC_KBN_15 = "15";

	/** 外部コマンド実行結果("0":正常終了) */
	private static final String EXEC_SYNC_SUCCESS = "0";

	/** 外部コマンド実行結果ステータス("000":登録成功) */
	private static final String STAT_000 = "000";

	/** 外部コマンド実行結果ステータス("201":既存の加入属性と異なる) */
	private static final String STAT_201 = "201";

	/** 外部コマンド実行結果ステータス("204":登録済み) */
	private static final String STAT_204 = "204";

	/** 外部コマンド実行結果ステータス("207":VoIPユーザID数が最大数を超えている) */
	private static final String STAT_207 = "207";

	/** 外部コマンド実行結果ステータス("213":eoユーザID解約済み) */
	private static final String STAT_213 = "213";

	/** 外部コマンド実行結果ステータス("216":利用停止中のVoIPユーザーが存在) */
	private static final String STAT_216 = "216";

	/** 単関連チェックエラー(VoIPユーザーID、VoIPユーザーパスワードの値が同じ) */
	private static final String MSGID_VOIP_USER_ID_VOIP_USER_PWD_ERR = "EKF0940-NW";

	/** 単関連チェックエラー(VoIPユーザーパスワード、VoIPユーザーパスワード(確認)の値が異なる) */
	private static final String MSGID_VOIP_USER_PWD_ERR = "EKF0950-NW";

	/** 単関連チェックエラー(VoIPユーザーIDが既に登録されている) */
	private static final String MSGID_VOIP_USER_ID_ERR = "EKF0910-TW";

	/** 項目ID(VoIPユーザーパスワード) */
	private static final String ITEMID_VOIP_USER_PWD = "voip_user_pwd";

	/** 項目ID(VoIPユーザーパスワード(確認)) */
	private static final String ITEMID_VOIP_USER_PWD_CFM = "voip_user_pwd_cfm";

	/** 項目ID(VoIPユーザーID) */
	private static final String ITEMID_VOIP_USER_ID = "voip_user_id";

	/** エラーアイテムID：VoIPユーザーID */
	private static final String ERR_ITEMID_VOIP_USER_ID = "ユーザーID";

	/** エラーアイテムID：VoIPユーザーパスワード */
	private static final String ERR_ITEMID_VOIP_USER_PWD = "ユーザーパスワード";

	/**
	 * 初期処理
	 * <br/>
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean init() throws Exception
	{
		DEBUG_LOG.info("----- FUW04401 Start init -----");

		// 画面情報を取得し、サービスフォームBeanに設定
		JFUWebCommon.getScreenInfo(this);

		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 現顧客契約情報の最新化
		JFUWebCommon.refreshGenCustKei(this);

		// 共通関連チェック
		JFUWebCommon.checkCommonRelation(this, FUSV_ID);

		// 共有フォームBeanより値を取得
		getCommonFormBean(commonInfoBean, serviceFormBean);

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, FUSV_ID);

		// DataBean-BPマッピング
		FUSV0027_FUSV0027OPDBMapper mapper = new FUSV0027_FUSV0027OPDBMapper();

		HashMap<String, Map<String, String>> inputMap = new HashMap<String, Map<String, String>>();
		HashMap<String, String> outputMap = new HashMap<String, String>();

		X31SDataBeanAccess[] paramBean = { serviceFormBean };
		mapper.setFUSV002701SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV002704SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		try
		{
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);

			X31SDataBeanAccess[] paramBeanOut = { serviceFormBean };

			mapper.getFUSV002701SC(paramBeanOut, outputMap);
			mapper.getFUSV002702SC(paramBeanOut, outputMap);
			mapper.getFUSV002703SC(paramBeanOut, outputMap);
			mapper.getFUSV002705SC(paramBeanOut, outputMap);
			mapper.getFUSV002706SC(paramBeanOut, outputMap);

		}
		catch (JCCWebServiceException se)
		{
			// 業務共通例外クラス："0002"（システムエラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// VoIPユーザーID数チェック
		checkVoIPUserCnt(serviceFormBean);

		// サービス契約情報を取得
		X31SDataBeanAccess svcKeiInfo = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SVC_KEI_INFO);

		// サービス契約情報.料金グループコードが"04"(eo光ネットマンションタイプ)の場合
		if (JFUStrConst.CD00133_04.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.PRC_GRP_CD_23)))
		{
			// 回線使用契約チェック
			checkKaisenUseKei(serviceFormBean);
		}

		// サービスフォームBean設定処理
		setServiceFormBeanInit(commonInfoBean, serviceFormBean);

		// 料金表情報の設定
		setPrceInfoArea(serviceFormBean);

		// 料金表表示現在日設定処理
		JFUWebCommon.setPrcDspNowDay(this);

		// 画面遷移
		// TELvisionユーザー本加入登録画面へ遷移
		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, JFUScreenConst.SCREEN_ID_FUW04401);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, JFUScreenConst.SCREEN_NAME_FUW04401);

		DEBUG_LOG.info("----- FUW04401 End init -----");

		return true;
	}

	/**
	 * 確認する押下処理
	 * <br/>
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean cfm() throws Exception
	{
		DEBUG_LOG.info("----- FUW04401 Start cfm -----");

		// 共有フォームBean
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 単項目関連チェック
		// 単項目関連チェック結果が正常の場合
		if (checkTankanren(serviceFormBean))
		{
			// TELvisionユーザー本加入登録確認画面へ遷移
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, JFUScreenConst.SCREEN_ID_FUW04402);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, JFUScreenConst.SCREEN_NAME_FUW04402);
		}
		// 単項目関連チェック結果が異常の場合
		else
		{
			// TELvisionユーザー本加入登録画面へ遷移
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, JFUScreenConst.SCREEN_ID_FUW04401);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, JFUScreenConst.SCREEN_NAME_FUW04401);
		}

		DEBUG_LOG.info("----- FUW04401 End cfm -----");

		return true;

	}

	/**
	 * 戻るボタン押下処理
	 * <br/>
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean back() throws Exception
	{
		DEBUG_LOG.info("----- FUW04401 Start back -----");

		// 共有フォームBean
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// TELvisionユーザー本加入登録画面へ遷移
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, JFUScreenConst.SCREEN_ID_FUW04401);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, JFUScreenConst.SCREEN_NAME_FUW04401);

		DEBUG_LOG.info("----- FUW04401 End back -----");

		return true;

	}

	/**
	 * 申し込むボタン押下処理
	 * <br/>
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean mskm() throws Exception
	{
		DEBUG_LOG.info("----- FUW04401 Start mskm -----");

		// 共有フォームBean
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// TELvisionユーザー本加入登録サービスフォームBean
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		// 共通関連チェック
		JFUWebCommon.checkCommonRelation(this, FUSV_ID);

		// サービスフォームBean値を設定
		setServiceFormBeanMskm(commonInfoBean, serviceFormBean);

		// TELvisionコースVoIPユーザー登録(外部IF実行)
		addVoIPUser(commonInfoBean, serviceFormBean);

		// 外部コマンド実行で取得したステータスの判定
		if (STAT_000.equals(serviceFormBean.sendMessageString(FUW04401SFConst.STAT, GET)))
		{
			// TELvisionユーザー本加入登録結果画面へ遷移
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, JFUScreenConst.SCREEN_ID_FUW04403);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, JFUScreenConst.SCREEN_NAME_FUW04403);
		}
		// サービスフォームBeanのステータス＝"204"(登録済み)
		else if (STAT_204.equals(serviceFormBean.sendMessageString(FUW04401SFConst.STAT, GET)))
		{
			// 単関連チェックエラーとしてVoIPユーザーIDにエラー情報を設定
			JFUWebCommon.setMessageInfo(this, MSGID_VOIP_USER_ID_ERR, ITEMID_VOIP_USER_ID);

			// TELvisionユーザー本加入登録画面へ遷移
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, SET, JFUScreenConst.SCREEN_ID_FUW04401);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, SET, JFUScreenConst.SCREEN_NAME_FUW04401);
		}

		// サービスフォームBeanのステータス＝"201"(既存の加入属性と異なる)、または"207"(VoIPユーザID数が最大数を超えている)、
		// または"213"(eoユーザID解約済み)、または"216"(利用停止中のVoIPユーザーが存在)の場合
		else if (STAT_201.equals(serviceFormBean.sendMessageString(FUW04401SFConst.STAT, GET))
				|| STAT_207.equals(serviceFormBean.sendMessageString(FUW04401SFConst.STAT, GET))
				|| STAT_213.equals(serviceFormBean.sendMessageString(FUW04401SFConst.STAT, GET))
				|| STAT_216.equals(serviceFormBean.sendMessageString(FUW04401SFConst.STAT, GET)))
		{
			DEBUG_LOG.info("■■■エラー ： 外部IF実行結果判定エラー( ステータス : " + serviceFormBean.sendMessageString(FUW04401SFConst.STAT, GET) + " )");
			// 業務共通例外クラス："0102"（お客様情報変更エラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0201);
		}
		else
		{
			DEBUG_LOG.info("■■■エラー ： 外部IF実行結果判定エラー( ステータス : " + serviceFormBean.sendMessageString(FUW04401SFConst.STAT, GET) + " )");
			// 業務共通例外クラス："0002"（システムエラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// デバッグ用ログ出力
		DEBUG_LOG.info("----- FUW04401 End mskm -----");

		return true;
	}

	/**
	 * 共有フォームBean設定値取得処理
	 * <br/>
	 * @param commonInfoBean			共有フォームBean
	 * @param serviceFormBean			サービスフォームBean
	 * @throws JCCBusinessException	例外
	 */
	private void getCommonFormBean(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean) throws JCCBusinessException
	{
		DEBUG_LOG.info("----- FUW04401 Start getCommonFormBean -----");

		// 共有フォームBeanより値を取得しサービスフォームBeanに設定

		//**********************************//
		// サービス契約情報
		//**********************************//

		// サービス契約情報を取得
		X31SDataBeanAccess svcKeiInfo = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SVC_KEI_INFO);

		// サービス契約情報.料金コースコードを取得しサービスフォームBeanに設定
		serviceFormBean.sendMessageString(FUW04401SFConst.PCRS_CD, SET, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.PCRS_CD_23));

		// サービス契約情報.料金グループコードが"04"(eo光ネットマンションタイプ)の場合
		if (JFUStrConst.CD00133_04.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.PRC_GRP_CD_23)))
		{
			// サービス契約情報.提供方式契約番号を取得しサービスフォームBeanに設定
			serviceFormBean.sendMessageString(FUW04401SFConst.TK_HOSHIKI_KEI_NO, SET, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo,
					CommonInfoCFConst.TK_HOSHIKI_KEI_NO_23));
		}

		DEBUG_LOG.info("----- FUW04401 End getCommonFormBean -----");
	}

	/**
	 * 単関連チェック
	 * <br/>
	 * @param serviceFormBean	サービスフォームBean
	 * @return 処理結果
	 * @throws JCCBusinessException	例外
	 */
	private Boolean checkTankanren(X31SDataBeanAccess serviceFormBean) throws JCCBusinessException
	{
		DEBUG_LOG.info("----- FUW04401 Start checkTankanren -----");

		Boolean errFlg = true;
		String voipUserId = serviceFormBean.sendMessageString(FUW04401SFConst.VOIP_USER_ID, GET);
		String voipUserPwd = serviceFormBean.sendMessageString(FUW04401SFConst.VOIP_USER_PWD, GET);
		String voipUserPwdCfm = serviceFormBean.sendMessageString(FUW04401SFConst.VOIP_USER_PWD_CFM, GET);

		// VoIPユーザーIDとVoIPユーザーパスワードの値が同じ場合
		// ※大文字小文字を区別しない
		if (voipUserId.toLowerCase().equals(voipUserPwd.toLowerCase()))
		{
			// 単関連チェックエラーとしてVoIPユーザーIDにエラー情報を設定
			JFUWebCommon.setMessageInfo(this, MSGID_VOIP_USER_ID_VOIP_USER_PWD_ERR, new String[] { ERR_ITEMID_VOIP_USER_ID }, ITEMID_VOIP_USER_PWD);
			errFlg = false;
		}

		// VoIPユーザーパスワードとVoIPユーザーパスワード(確認)の値が異なる場合
		if (!voipUserPwd.equals(voipUserPwdCfm))
		{
			// 単関連チェックエラーとしてVoIPユーザーIDにエラー情報を設定
			JFUWebCommon.setMessageInfo(this, MSGID_VOIP_USER_PWD_ERR, new String[] { ERR_ITEMID_VOIP_USER_PWD }, ITEMID_VOIP_USER_PWD_CFM);
			errFlg = false;
		}

		DEBUG_LOG.info("----- FUW04401 End checkTankanren -----");

		return errFlg;
	}

	/**
	 * VoIPユーザーID数チェック処理
	 * <br/>
	 * @param serviceFormBean	サービスフォームBean
	 * @throws JCCBusinessException	例外
	 */
	private void checkVoIPUserCnt(X31SDataBeanAccess serviceFormBean) throws JCCBusinessException
	{
		DEBUG_LOG.info("----- FUW04401 Start checkVoIPUserCnt -----");

		// 最大オプションサービス数取得
		X31SDataBeanAccessArray pcrsList = serviceFormBean.getDataBeanArray(FUW04401SFConst.PCRS_LST);
		X31SDataBeanAccess pcrsBean = pcrsList.getDataBean(0);
		int maxOpSvcCnt = Integer.parseInt(pcrsBean.sendMessageString(FUW04401SFConst.MAX_OP_SVC_CNT_02, GET));

		// VoIPユーザーID数取得
		int voipUserIdSu = Integer.parseInt(serviceFormBean.sendMessageString(FUW04401SFConst.VOIP_USER_ID_SU, GET));

		// VoIPユーザーID数が最大オプションサービス数以上の場合エラー
		if (voipUserIdSu >= maxOpSvcCnt)
		{
			DEBUG_LOG.info("■■■エラー ： VoIPユーザーID数最大数以上エラー ( VoIPユーザーID数 : " + voipUserIdSu + " )");
			// 業務共通例外クラス："0102"（契約状態エラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		DEBUG_LOG.info("----- FUW04401 End checkVoIPUserCnt -----");
	}

	/**
	 * 回線使用契約チェック処理
	 * <br/>
	 * @param serviceFormBean	サービスフォームBean
	 * @throws JCCBusinessException	例外
	 */
	private void checkKaisenUseKei(X31SDataBeanAccess serviceFormBean) throws JCCBusinessException
	{
		DEBUG_LOG.info("----- FUW04401 Start checkKaisenUseKei -----");

		Boolean errFlg = false;

		// 回線使用契約明細取得
		X31SDataBeanAccessArray kaisenUseKeiList = serviceFormBean.getDataBeanArray(FUW04401SFConst.KAISEN_USE_KEI_LST);

		// 回線使用契約明細
		if (kaisenUseKeiList.getCount() != 0)
		{

			X31SDataBeanAccess kaisenUseKeiBean = kaisenUseKeiList.getDataBean(0);

			if (!JFUStrConst.EMPTY.equals(kaisenUseKeiBean.sendMessageString(FUW04401SFConst.MANSION_COURSE_CD_03, GET).trim()))
			{
				errFlg = true;
			}
		}

		// 回線使用契約エラー
		if (!errFlg)
		{
			DEBUG_LOG.info("■■■エラー ： 回線使用契約エラー");
			// 業務共通例外クラス："0102"（契約状態エラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		DEBUG_LOG.info("----- FUW04401 End checkKaisenUseKei -----");
	}

	/**
	 * サービスフォームBean設定(初期処理時)処理
	 * <br/>
	 * @param commonInfoBean	共有フォームBean
	 * @param serviceFormBean	サービスフォームBean
	 * @throws JCCBusinessException	例外
	 */
	private void setServiceFormBeanInit(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean) throws JCCBusinessException
	{
		DEBUG_LOG.info("----- FUW04401 Start setServiceFormBeanInit -----");

		X31SDataBeanAccessArray pcrsList = serviceFormBean.getDataBeanArray(FUW04401SFConst.PCRS_LST);
		X31SDataBeanAccess pcrsBean = pcrsList.getDataBean(0);

		// 最大オプションサービス数取得
		int maxOpSvcCnt = Integer.parseInt(pcrsBean.sendMessageString(FUW04401SFConst.MAX_OP_SVC_CNT_02, GET));
		// 無料オプションサービス数取得
		int mryoOpSvcCnt = Integer.parseInt(pcrsBean.sendMessageString(FUW04401SFConst.MRYO_OP_SVC_CNT_02, GET));

		// VoIPユーザーID数
		int voipUserIdSu = Integer.parseInt(serviceFormBean.sendMessageString(FUW04401SFConst.VOIP_USER_ID_SU, GET));

		// サービス契約情報を取得
		X31SDataBeanAccess svcKeiInfo = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SVC_KEI_INFO);

		// ●お支払方法案内表示フラグ設定
		// サービス契約情報.料金グループコードが"02"(eo光ネットホームタイプ)の場合
		if (JFUStrConst.CD00133_02.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.PRC_GRP_CD_23))
				|| JFUStrConst.CD00133_03.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.PRC_GRP_CD_23)))
		{
			// お支払方法案内表示フラグ設定("0"：非表示)
			serviceFormBean.sendMessageString(FUW04401SFConst.PAYWAY_GAIDE_DSP_FLG, SET, PAYWAY_GAIDE_DSP_FLG_OFF);
		}
		else
		{
			if (mryoOpSvcCnt <= voipUserIdSu)
			{
				// お支払方法案内表示フラグ設定("1"：表示)
				serviceFormBean.sendMessageString(FUW04401SFConst.PAYWAY_GAIDE_DSP_FLG, SET, PAYWAY_GAIDE_DSP_FLG_ON);
			}
		}

		// ●月額料金表示フラグ設定
		// VoIPユーザーID数が無料オプションサービス数より小さい場合エラー
		if (mryoOpSvcCnt >= voipUserIdSu + 1)
		{
			// 月額料金表示フラグ設定("0"：非表示)
			serviceFormBean.sendMessageString(FUW04401SFConst.GTGK_PRC_DSP_FLG, SET, GTGK_PRC_DSP_FLG_OFF);
		}
		else
		{
			// 月額料金表示フラグ設定("1"：表示)
			serviceFormBean.sendMessageString(FUW04401SFConst.GTGK_PRC_DSP_FLG, SET, GTGK_PRC_DSP_FLG_ON);
		}

		// ●ユーザー登録可能残数設定
		serviceFormBean.sendMessageString(FUW04401SFConst.USER_ADD_PSB_ZAN_SU, SET, String.valueOf(maxOpSvcCnt - voipUserIdSu));

		// ●NGワード設定
		// サービスフォームBeanを操作するデータBeanアクセスクラスを取得
		X31SDataBeanAccessArray ngWordUserIdList = serviceFormBean.getDataBeanArray(FUW04401SFConst.NG_WORD_USER_ID_LST);
		X31SDataBeanAccessArray ngWordMladList = serviceFormBean.getDataBeanArray(FUW04401SFConst.NG_WORD_MLAD_LST);

		// NGワード(ユーザID)
		setNgWord(serviceFormBean, ngWordUserIdList, FUW04401SFConst.HIDDEN_NG_WORD_USER_ID);
		// NGワード(メールアドレス)
		setNgWord(serviceFormBean, ngWordMladList, FUW04401SFConst.HIDDEN_NG_WORD_MLAD);

		// ●マンションコースコード設定
		// サービス契約情報.料金グループコードが"04"(eo光ネットマンションタイプ)の場合
		if (JFUStrConst.CD00133_04.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.PRC_GRP_CD_23)))
		{
			// 回線使用契約明細を取得
			X31SDataBeanAccess kaisenUseKeiList = JFUWebCommon.getDataBeanTypeByPath(serviceFormBean, FUW04401SFConst.KAISEN_USE_KEI_LST);

			// マンションコースコード設定
			serviceFormBean.sendMessageString(FUW04401SFConst.MANSION_COURSE_CD, SET, JFUWebCommon.getDataBeanItemByPath(kaisenUseKeiList,
					FUW04401SFConst.MANSION_COURSE_CD_03));
		}
		else
		{
			// マンションコースコード設定
			serviceFormBean.sendMessageString(FUW04401SFConst.MANSION_COURSE_CD, SET, JFUStrConst.EMPTY);
		}

		// ●メールアドレス設定
		setMlad(commonInfoBean, serviceFormBean);

		// ●サービス契約番号
		serviceFormBean.sendMessageString(FUW04401SFConst.SVC_KEI_NO, SET, JFUWebCommon.getDataBeanItemByPath(svcKeiInfo,
				CommonInfoCFConst.SVC_KEI_NO_23));

		// ●TELvisionマイページURL(APLConst.properties:FU_C_API_IF_TELVISION_MYPAGE_URL)
		serviceFormBean.sendMessageString(FUW04401SFConst.TELVISION_MYPAGE_URL, SET, JCMAPLConstMgr
				.getString(JFUStrConst.FU_C_API_IF_TELVISION_MYPAGE_URL));

		DEBUG_LOG.info("----- FUW04401 End setServiceFormBeanInit -----");
	}

	/**
	 * サービスフォームBean設定(申し込みボタン押下時)処理
	 * <br/>
	 * @param commonInfoBean	共有フォームBean
	 * @param serviceFormBean	サービスフォームBean
	 * @throws JCCBusinessException	例外
	 */
	private void setServiceFormBeanMskm(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean) throws JCCBusinessException
	{
		DEBUG_LOG.info("----- FUW04401 Start setServiceFormBeanMskm -----");

		// サービス契約情報を取得
		X31SDataBeanAccess svcKeiInfo = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SVC_KEI_INFO);

		// ●eoサービス区分
		String eoSvcKbn = null;

		// サービス契約情報.料金グループコードが"02"(eo光ネットホームタイプ) または "03"(eo光ネットメゾンタイプ)の場合
		if (JFUStrConst.CD00133_02.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.PRC_GRP_CD_23))
				|| JFUStrConst.CD00133_03.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.PRC_GRP_CD_23)))
		{
			// eoサービス区分に"03"(ホームファイバー)を設定
			eoSvcKbn = EO_SVC_KBN_03;
		}
		// サービス契約情報.料金グループコードが"04"(eo光ネットマンションタイプ)の場合
		else if (JFUStrConst.CD00133_04.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.PRC_GRP_CD_23)))
		{
			// サービスフォームBeanよりマンションコースコード取得
			String mansionCourseCd = serviceFormBean.sendMessageString(FUW04401SFConst.MANSION_COURSE_CD, GET);

			// マンションコースコードが"001"(マンションコース（プライベート100MVDSL）)
			//  または "002"(マンションコース（プライベート1ギガVDSL）)
			//  または "003"(マンションコース（プライベート100Mイーサ）)
			//  または "004"(マンションコース（プライベート1ギガイーサ）)の場合
			if (JFUStrConst.KK0911_MANSION_COURSE_CD_001.equals(mansionCourseCd) || JFUStrConst.KK0911_MANSION_COURSE_CD_002.equals(mansionCourseCd)
					|| JFUStrConst.KK0911_MANSION_COURSE_CD_003.equals(mansionCourseCd)
					|| JFUStrConst.KK0911_MANSION_COURSE_CD_004.equals(mansionCourseCd))
			{
				// eoサービス区分に"04"(メガファイバー)を設定
				eoSvcKbn = EO_SVC_KBN_04;
			}
			// マンションコースコードが"005"(マンションコース（グローバル100MVDSL）)
			//  または "006"(マンションコース（グローバル1ギガVDSL）)
			//  または "007"(マンションコース（グローバル100Mイーサ）)
			//  または "008"(マンションコース（グローバル1ギガイーサ）)の場合
			else if (JFUStrConst.KK0911_MANSION_COURSE_CD_005.equals(mansionCourseCd)
					|| JFUStrConst.KK0911_MANSION_COURSE_CD_006.equals(mansionCourseCd)
					|| JFUStrConst.KK0911_MANSION_COURSE_CD_007.equals(mansionCourseCd)
					|| JFUStrConst.KK0911_MANSION_COURSE_CD_008.equals(mansionCourseCd))
			{
				// eoサービス区分に"07"(メガファイバー フラットタイプ)を設定
				eoSvcKbn = EO_SVC_KBN_07;
			}
			// マンションコースコードが"009"(マンションコース（光配線100M）)
			// または "010"(マンションコース（光配線1ギガ）)の場合
			else if (JFUStrConst.KK0911_MANSION_COURSE_CD_009.equals(mansionCourseCd)
					|| JFUStrConst.KK0911_MANSION_COURSE_CD_010.equals(mansionCourseCd))
			{
				// eoサービス区分に"15"(光配線)を設定
				eoSvcKbn = EO_SVC_KBN_15;
			}
		}

		// サービス契約情報.料金グループコードが"05"(eoADSL(eAccess))の場合
		else if (JFUStrConst.CD00133_05.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.PRC_GRP_CD_23)))
		{
			// eoサービス区分に"09"(ADSL(eAccess))を設定
			eoSvcKbn = EO_SVC_KBN_09;
		}
		// サービス契約情報.料金グループコードが"06"(eoADSL(フレッツ))の場合
		else if (JFUStrConst.CD00133_05.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.PRC_GRP_CD_23)))
		{
			// eoサービス区分に"10"(ADSL(フレッツ))を設定
			eoSvcKbn = EO_SVC_KBN_10;
		}

		// eoサービス区分を設定
		serviceFormBean.sendMessageString(FUW04401SFConst.EO_SVC_KBN, SET, eoSvcKbn);

		DEBUG_LOG.info("----- FUW04401 End setServiceFormBeanMskm -----");
	}

	/**
	 * NGワード設定処理
	 * <br/>
	 * @param serviceFormBean	サービスフォームBean
	 * @param ngWordList		NGワードリスト
	 * @param itemName			サービスフォームBeanの項目名
	 * @throws JCCBusinessException	例外
	 */
	private void setNgWord(X31SDataBeanAccess serviceFormBean, X31SDataBeanAccessArray ngWordList, String itemName) throws JCCBusinessException
	{
		DEBUG_LOG.info("----- FUW04401 Start setNgWord -----");

		StringBuffer ngwordBuffer = new StringBuffer();

		for (int i = 0; i < ngWordList.getCount(); i++)
		{
			// NGワード情報を取得
			X31SDataBeanAccess ngWordBean = ngWordList.getDataBean(i);

			// NGワード
			String ngWord = ngWordBean.sendMessageString(FUW04401SFConst.NG_WORD_04, GET);

			ngwordBuffer.append(ngWord).append(COMMA);
		}

		// サービスフォームBeanに設定
		serviceFormBean.sendMessageString(itemName, SET, ngwordBuffer.toString());

		DEBUG_LOG.info("----- FUW04401 End setNgWord -----");
	}

	/**
	 * メールアドレス設定処理
	 * <br/>
	 * @param commonInfoBean	共有フォームBean
	 * @param serviceFormBean	サービスフォームBean
	 * @throws JCCBusinessException	例外
	 */
	private void setMlad(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean) throws JCCBusinessException
	{
		DEBUG_LOG.info("----- FUW04401 Start setMlad -----");

		String mlad = JFUStrConst.EMPTY;

		// オプションサービス契約情報を取得
		Map<String, String> condition = new HashMap<String, String>();

		// オプションサービス契約情報取得条件設定
		// オプションサービスコード："B001"(Eメール)
		condition.put(CommonInfoCFConst.OP_SVC_CD_28, JFUStrConst.CD00136_B001);
		// オプションサービスコード："100"(サービス提供中)"
		condition.put(CommonInfoCFConst.OP_SVC_KEI_STAT_28, JFUStrConst.CD00037_100);

		// 共有フォームBeanのオプションサービス契約情報からEメール契約情報を取得
		X31SDataBeanAccess mailOpSvcKeiInfo = JFUWebCommon.getDataBeanTypeByPathWithKey(commonInfoBean, JFUWebCommon.OP_SVC_KEI_INFO, condition);

		if (mailOpSvcKeiInfo != null)
		{

			X31SDataBeanAccessArray opSvcKeiInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.OP_SVC_KEI_INFO);

			for (int i = 0; i < opSvcKeiInfo.getCount(); ++i)
			{
				// オプションサービス契約情報を取得
				X31SDataBeanAccess opSvcKeiBean = opSvcKeiInfo.getDataBean(i);

				// オプションサービスコードが"B001"(Ｅメール)
				// かつ オプションサービス契約ステータスが"100"(サービス提供中)
				// かつ メールアドレスが""以外の場合
				if (JFUStrConst.CD00136_B001.equals(opSvcKeiBean.sendMessageString(CommonInfoCFConst.OP_SVC_CD_28, GET))
						&& JFUStrConst.CD00037_100.equals(opSvcKeiBean.sendMessageString(CommonInfoCFConst.OP_SVC_KEI_STAT_28, GET))
						&& !JFUStrConst.EMPTY.equals(opSvcKeiBean.sendMessageString(CommonInfoCFConst.MLAD_28, GET)))
				{
					// メールアドレス取得
					mlad = opSvcKeiBean.sendMessageString(CommonInfoCFConst.MLAD_28, GET);
					break;
				}
			}
		}

		// サービスフォームBeanのメールアドレスを設定
		serviceFormBean.sendMessageString(FUW04401SFConst.MLAD, SET, mlad);

		DEBUG_LOG.info("----- FUW04401 End setMlad -----");
	}

	/**
	 * 料金表の表示用データの加工編集処理
	 * <br/>
	 * サービスフォームBeanのデータを画面表示用に加工編集します。
	 * 
	 * @param serviceFormBean サービス契約番号一覧サービスフォームBean
	 * @throws Exception プロパティファイルの読み込みに失敗した場合
	 */
	private void setPrceInfoArea(X31SDataBeanAccess serviceFormBean) throws Exception
	{
		DEBUG_LOG.info("----- FUW04401 Start setPrceInfoArea -----");

		// 料金表プロパティ情報取得
		Map<String, String> dispDefMap = JFUWebCommon.getDispItemsAsMap(QUERY_DISPCTL_PATH, QUERY_ATTR_NAME);

		X31SDataBeanAccessArray prcInfoAreaListArray = serviceFormBean.getDataBeanArray(JFUStrConst.PRC_INFO_PRC_INFO_AREA_LIST);
		X31SDataBeanAccess titleListArrayAccess = prcInfoAreaListArray.addDataBean();

		// -------------------------------------------------
		// 表示金額・単位の編集処理
		// -------------------------------------------------
		// ▼料金系の検索結果リスト取得
		String gtglPrc = JFUStrConst.EMPTY;
		String gtglPrc1 = JFUStrConst.EMPTY;
		String gtglPrc2 = JFUStrConst.EMPTY;
		String prc1 = JFUStrConst.EMPTY;
		String prc2 = JFUStrConst.EMPTY;

		// サービスフォームBean/料金プラン固定単価（月額料金）リスト
		X31SDataBeanAccessArray gtgkPrcList = serviceFormBean.getDataBeanArray(FUW04401SFConst.GTGK_PRC_LST);

		// ▼金額・単位の取得(カンマ編集込み)
		for (int i = 0; i < gtgkPrcList.getCount(); ++i)
		{
			// 月額料金 ←「料金プラン固定単価（基本料金）リスト.料金プラン固定金額＋料金プラン固定単位コード名」
			gtglPrc =
					JPCUtilCommon.formatNumber(gtgkPrcList.getDataBean(i).sendMessageString(FUW04401SFConst.PPLAN_KOTEI_AMNT_01, GET))
							+ JFUStrConst.HALF_SPACE + gtgkPrcList.getDataBean(i).sendMessageString(FUW04401SFConst.PPLAN_KOTEI_TANI_CD_NM_01, GET);

			// 料金プラン料金種別コードが"01"(正規料金)の場合
			if (JFUStrConst.CD01253_01.equals(gtgkPrcList.getDataBean(i).sendMessageString(FUW04401SFConst.PPLAN_PRC_SBT_CD_01, GET)))
			{
				// 2IDまで用の月額料金を設定
				gtglPrc1 = gtglPrc;
				prc1 = gtgkPrcList.getDataBean(i).sendMessageString(FUW04401SFConst.PPLAN_KOTEI_AMNT_01, GET);
			}
			// 料金プラン料金種別コードが"02"(割引後料金)の場合
			else if (JFUStrConst.CD01253_02.equals(gtgkPrcList.getDataBean(i).sendMessageString(FUW04401SFConst.PPLAN_PRC_SBT_CD_01, GET)))
			{
				// 3〜5IDまで用の月額料金を設定
				gtglPrc2 = gtglPrc;
				prc2 = gtgkPrcList.getDataBean(i).sendMessageString(FUW04401SFConst.PPLAN_KOTEI_AMNT_01, GET);
			}
		}

		// -------------------------------------------------
		// コメントエリア情報設定処理
		// -------------------------------------------------
		// コメントエリア表示用リスト設定(未使用)
		JFUWebCommon.setCommentList(titleListArrayAccess, new ArrayList<String>(0), new ArrayList<String>(0));

		// -------------------------------------------------
		// タイトル・テーブルエリア情報設定処理
		// -------------------------------------------------
		// テーブルタイトル識別子リスト(未使用)
		List<String> setTableTitleSkbtList = new ArrayList<String>(0);

		// テーブルタイトルエリア表示用リスト
		List<String> setTableTitleList = new ArrayList<String>(1);
		setTableTitleList.add(dispDefMap.get(TITLE_LABEL_0)); // 月額料金

		// テーブルスタイルクラス１リスト
		//   →テーブルヘッダのスタイルを指定
		List<String> setTableStyleClass1List = new ArrayList<String>(1);
		setTableStyleClass1List.add(dispDefMap.get(TITLE_STYLE_0)); // 月額料金

		// テーブルスタイルクラス２リスト
		//   →テーブル明細行(左値・右値)のスタイルを指定
		List<String> setTableStyleClass2List = new ArrayList<String>(1);
		setTableStyleClass2List.add(dispDefMap.get(COL_STYLE_0)); // 月額料金

		List<String> setTableLeftValueList0 = null;
		List<String> setTableRightValueList0 = null;

		// 無料の場合
		if (GTGK_PRC_DSP_FLG_OFF.equals(serviceFormBean.sendMessageString(FUW04401SFConst.GTGK_PRC_DSP_FLG, GET)))
		{
			// テーブル左値リスト0 (料金名)
			setTableLeftValueList0 = new ArrayList<String>(1);
			setTableLeftValueList0.add(dispDefMap.get(COL_LABEL_0_2)); // 基本料金
			// テーブル右値リスト0 (料金額)
			setTableRightValueList0 = new ArrayList<String>(1);
			setTableRightValueList0.add(MURYO_LABEL); // 無料
		}
		else
		{
			// テーブル左値リスト0 (料金名)
			setTableLeftValueList0 = new ArrayList<String>(2);
			setTableLeftValueList0.add(dispDefMap.get(COL_LABEL_0_0)); // 2IDまで
			setTableLeftValueList0.add(dispDefMap.get(COL_LABEL_0_1)); // 3〜5IDまで
			// テーブル右値リスト0 (料金額)
			setTableRightValueList0 = new ArrayList<String>(2);

			// 0円の場合 → 無料　表記
			if (ZERO_YEN.equals(prc1))
			{
				setTableRightValueList0.add(JFUStrConst.FREE_LABEL);
			}
			else
			{
				setTableRightValueList0.add(gtglPrc1); // 2IDまで
			}

			// 0円の場合 → 無料　表記
			if (ZERO_YEN.equals(prc2))
			{
				setTableRightValueList0.add(JFUStrConst.FREE_LABEL);
			}
			else
			{
				setTableRightValueList0.add(gtglPrc2); // 3〜5IDまで
			}

			//「2IDまで」と「3〜5IDまで」が両方無料の場合、料金表下の文言とお支払方法案内を非表示
			if (ZERO_YEN.equals(prc1) && ZERO_YEN.equals(prc2))
			{
				// テーブル左値リスト0 (料金名)
				setTableLeftValueList0 = new ArrayList<String>(1);
				setTableLeftValueList0.add(dispDefMap.get(COL_LABEL_0_2)); // 基本料金
				// テーブル右値リスト0 (料金額)
				setTableRightValueList0 = new ArrayList<String>(1);
				setTableRightValueList0.add(MURYO_LABEL); // 無料

				// 月額料金表示フラグ設定("0"：非表示)
				serviceFormBean.sendMessageString(FUW04401SFConst.GTGK_PRC_DSP_FLG, SET, GTGK_PRC_DSP_FLG_OFF);
				// お支払方法案内表示フラグ設定("0"：非表示)
				serviceFormBean.sendMessageString(FUW04401SFConst.PAYWAY_GAIDE_DSP_FLG, SET, PAYWAY_GAIDE_DSP_FLG_OFF);
			}
		}

		// テーブル値識別子エリア表示用リスト0(未使用)
		List<String> setTableValueSkbtList0 = new ArrayList<String>(0);

		// ■テーブルの値、左値、右値の各リストを格納するマップ
		//   ・KEY＝「タイトル名＋タイトル番号(0から始まる連番)＋テーブル左値リスト設定キー」
		//   ・KEY＝「タイトル名＋タイトル番号(0から始まる連番)＋テーブル右値リスト設定キー」
		//   ・KEY＝「タイトル名＋タイトル番号(0から始まる連番)＋テーブル値識別リスト設定キー」
		Map<String, List<String>> tableValueMap = new LinkedHashMap<String, List<String>>(6);

		// 月額料金
		tableValueMap.put(dispDefMap.get(TITLE_LABEL_0) + "0" + JFUStrConst.KEY_TABLE_LEFT_VALUE_LIST, setTableLeftValueList0);
		tableValueMap.put(dispDefMap.get(TITLE_LABEL_0) + "0" + JFUStrConst.KEY_TABLE_RIGHT_VALUE_LIST, setTableRightValueList0);
		tableValueMap.put(dispDefMap.get(TITLE_LABEL_0) + "0" + JFUStrConst.KEY_TABLE_VALUE_SKBT_LIST, setTableValueSkbtList0);

		// テーブルタイトルエリア表示用リスト設定
		JFUWebCommon.setTableTitleList(titleListArrayAccess, setTableTitleSkbtList, setTableTitleList, setTableStyleClass1List,
				setTableStyleClass2List, tableValueMap);

		// デバッグ用ログ出力
		DEBUG_LOG.info("----- FUW04401 End setPrceInfoArea -----");

		return;
	}

	/**
	 * 外部API呼出処理
	 * <br/>
	 * @param commonInfoBean	共有フォームBean
	 * @param serviceFormBean サービスフォームBean
	 */
	private void addVoIPUser(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean)
	{
		DEBUG_LOG.info("----- FUW04401 Start addVoIPUser -----");

		// 外部コマンド実行標準出力格納
		StringBuffer outPut = new StringBuffer();

		// 共有フォームBean.サービス契約情報
		X31SDataBeanAccess svcKeiInfo = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SVC_KEI_INFO);
		String svcKeiNo = JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.SVC_KEI_NO_23);

		// 外部コマンド情報
		String[] cmd =
				{ JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_NM), JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_OP1),
						JFUWebCommon.getApplicationConst(JFUStrConst.FUIFE012_PARAM1), svcKeiNo,
						serviceFormBean.sendMessageString(FUW04401SFConst.EO_SVC_KBN, GET),
						serviceFormBean.sendMessageString(FUW04401SFConst.VOIP_USER_ID, GET),
						serviceFormBean.sendMessageString(FUW04401SFConst.VOIP_USER_PWD, GET), KANYU_ZOKUSEI_HON_KANYU,
						serviceFormBean.sendMessageString(FUW04401SFConst.MLAD, GET), JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_OP2),
						JFUWebCommon.getApplicationConst(JFUStrConst.VOIP_ENV) };

		// デバッグ用ログ出力
		DEBUG_LOG.info("◆◆◆コマンドライン引数： " + Arrays.toString(cmd));

		// 外部コマンド実行処理
		String execSyncCd = JFUWebCommon.execSync(cmd, outPut, Integer.parseInt(JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_EXEC_TIME_OUT)));

		// デバッグ用ログ出力
		DEBUG_LOG.info("◆◆◆コマンド実行結果： " + execSyncCd);

		// 外部コマンド実行結果が"0"(正常終了)の場合
		if (EXEC_SYNC_SUCCESS.equals(execSyncCd))
		{
			if (0 < outPut.length())
			{
				// 実行結果 出力結果をListに詰め直す。
				List<String> dataList = Arrays.asList(outPut.toString().split(JFUWebCommon.LINE_SEPARATOR));
				// ステータス
				String stat = dataList.get(0);
				// サービスフォームBean.ステータス
				serviceFormBean.sendMessageString(FUW04401SFConst.STAT, SET, stat);

				// デバッグ用ログ出力
				DEBUG_LOG.info("◆◆◆コマンド実行戻り値(ステータス)： " + stat);
			}
		}
		// 外部コマンド実行結果が"0"(正常終了)以外の場合
		else
		{
			DEBUG_LOG.info("■■■エラー ： 外部IF実行エラー( コマンド実行結果 : " + execSyncCd + " )");
			// "0002"（システムエラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		DEBUG_LOG.info("----- FUW04401 End addVoIPUser -----");
	}
}
