/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：TELvisionユーザー解約
*   ソースファイル名：FUW04601SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年1月18日
*＜機能概要＞
*  TELvisionユーザー解約のビューロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/1/18   FJ）新枦    新規作成
*
**********************************************************************/

package eo.web.webview.FUW04601SF;

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.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JFUStrConst;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * TELvisionユーザー情報解約のビューロジッククラスです。<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW04601SFLogic extends JCCWebBusinessLogic
{
	/** 引継情報：ＶｏＩＰユーザーＩＤ */
	private static final String MAP_KEY_VOIP_USER_ID = "ＶｏＩＰユーザーＩＤ";

	/** 外部コマンド正常終了 */
	private static final String SUCCESS = "0";
	/** ステータス：解約成功 */
	private static final String STAT_000 = "000";
	/** ステータス：公衆番号設定済み */
	private static final String STAT_405 = "405";
	/** 登録完了フラグ：完了 */
	private static final String ADD_FIN_FLG_ON = "1";
	/** 登録完了フラグ：未完了 */
	private static final String ADD_FIN_FLG_OFF = "0";
	/** ユーザーＩＤがエラーになった際のメッセージID */
	private static final String MSGID_USERID_ERR = "EKF1050-TW";
	/** エラーアイテムID：ユーザーＩＤ */
	private static final String ITEMID_USERID = "voip_user_id";
	/** サービスID */
	private static final String SERVICE_ID = "FUSV0027_01";

	/**
	 * 初期表示処理
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean init() throws Exception
	{
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- init_FUW04601SFLogic Start -----");
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// -------------------------------------------------
		// 引継情報の取得
		// -------------------------------------------------
		JFUWebCommon.getScreenInfo(this);
		// -------------------------------------------------
		// 共通関連チェック
		// -------------------------------------------------
		JFUWebCommon.checkCommonRelation(this, SERVICE_ID);
		
		// -------------------------------------------------
		// 遷移先画面ID、画面名の設定
		// -------------------------------------------------
		// TELvisionユーザー解約画面に遷移
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW04601);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW04601);
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- init_FUW04601SFLogic End -----");

		return true;
	}

	/**
	 * 戻るボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean back() throws Exception
	{
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- back_FUW04601SFLogic Start -----");
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// -------------------------------------------------
		// 遷移先画面ID、画面名の設定
		// -------------------------------------------------
		// TELvisionユーザー解約画面に遷移
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW04601);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW04601);
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- back_FUW04601SFLogic End -----");

		return true;
	}

	/**
	 * 確認するボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean cfm() throws Exception
	{
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- cfm_FUW04601SFLogic Start -----");
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// -------------------------------------------------
		// ユーザーIDチェック
		// -------------------------------------------------
		// サービスフォームBean.ＶｏＩＰユーザーＩＤ
		String userId = serviceFormBean.sendMessageString(FUW04601SFConst.VOIP_USER_ID, X31CWebConst.DATABEAN_GET_VALUE);
		// サービスフォームBean.ＶｏＩＰユーザー情報
		X31SDataBeanAccessArray voipUserInfo = serviceFormBean.getDataBeanArray(FUW04601SFConst.VOIP_USER_INFO);
		// ユーザーチェックフラグ
		boolean userChkFlg = false;
		String koshuNo = JFUStrConst.EMPTY;
		for (int i = 0; i < voipUserInfo.getCount(); i++)
		{
			X31SDataBeanAccess voipUserInfoBean = voipUserInfo.getDataBean(i);
			// ＶｏＩＰユーザー情報.ＶｏＩＰユーザーＩＤ
			String voipUserId = voipUserInfoBean.sendMessageString(FUW04601SFConst.VOIP_USER_ID_01, X31CWebConst.DATABEAN_GET_VALUE);
			// ＶｏＩＰユーザー情報.登録完了フラグ
			String addFinFlg = voipUserInfoBean.sendMessageString(FUW04601SFConst.ADD_FIN_FLG_01, X31CWebConst.DATABEAN_GET_VALUE);

			if (userId.equals(voipUserId))
			{
				if (ADD_FIN_FLG_OFF.equals(addFinFlg) || ADD_FIN_FLG_ON.equals(addFinFlg))
				{
					// 登録完了フラグが"0"(未完了)　または　"1"(完了)の場合、チェックＯＫ
					userChkFlg = true;
					// ＶｏＩＰユーザー情報.公衆番号
					koshuNo = voipUserInfoBean.sendMessageString(FUW04601SFConst.KOSHU_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
					break;
				}
			}
		}
		// -------------------------------------------------
		// 遷移先画面ID、画面名の設定
		// -------------------------------------------------
		if (userChkFlg)
		{
			// ユーザーＩＤがチェックＯＫの場合
			if (JFUStrConst.EMPTY.equals(koshuNo))
			{
				// 公衆番号が未設定の場合、TELvisionユーザー解約確認画面に遷移
				commonInfoBean
						.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW04602);
				commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
						JFUScreenConst.SCREEN_NAME_FUW04602);
			}
			else
			{
				// 公衆番号が設定されている場合、TELvisionユーザー解約公衆設定済み画面に遷移
				commonInfoBean
						.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW04604);
				commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
						JFUScreenConst.SCREEN_NAME_FUW04604);
			}
		}
		else
		{
			// ユーザーＩＤがチェックＮＧの場合
			// エラーとしてユーザーに入力内容確認を促す。
			JFUWebCommon.setMessageInfo(this, MSGID_USERID_ERR, ITEMID_USERID);

			// TELvisionユーザー解約画面に遷移
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW04601);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW04601);
		}
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- cfm_FUW04601SFLogic End -----");

		return true;
	}

	/**
	 * 解約するボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean dsl() throws Exception
	{
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- dsl_FUW04601SFLogic Start -----");

		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		// 共有フォームBean.サービス契約情報
		X31SDataBeanAccess svcKeiInfoBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SVC_KEI_INFO);

		// -------------------------------------------------
		// 共通関連チェック
		// -------------------------------------------------
		JFUWebCommon.checkCommonRelation(this, SERVICE_ID);

		// -------------------------------------------------
		// TELvisionコースVoIPユーザー解約
		// -------------------------------------------------
		// サービス契約情報.サービス契約番号
		String svcKeiNo = svcKeiInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE);

		// 外部API呼出処理
		execSync(serviceFormBean, svcKeiNo);

		// -------------------------------------------------
		// ステータスチェック
		// -------------------------------------------------
		// ステータスの取得
		String stat = serviceFormBean.sendMessageString(FUW04601SFConst.STAT, X31CWebConst.DATABEAN_GET_VALUE);
		if (!STAT_000.equals(stat) && !STAT_405.equals(stat))
		{
			// ステータスが"000"(解約成功)以外　または、"405"(公衆番号設定済み) 以外の場合
			// デバッグログ
			com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("★ ステータスエラー ★");
			// 業務用例外クラスをthrowする。
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// -------------------------------------------------
		// 遷移先画面ID、画面名の設定
		// -------------------------------------------------
		if (STAT_000.equals(stat))
		{
			// 解約成功の場合、TELvisionユーザー解約結果画面に遷移
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW04603);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW04603);
		}
		else
		{
			// 公衆番号設定済みの場合、TELvisionユーザー解約公衆設定済み画面に遷移
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW04604);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW04604);
		}
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- dsl_FUW04601SFLogic End -----");

		return true;
	}

	/**
	 * 公衆通話設定解約ボタン押下処理 <BR>
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean dslKoshuTuwaSet() throws Exception
	{
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- dslKoshuTuwaSet_FUW04601SFLogic Start -----");
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// サービスフォームBean.ＶｏＩＰユーザーＩＤ
		String voipUserId = serviceFormBean.sendMessageString(FUW04601SFConst.VOIP_USER_ID, X31CWebConst.DATABEAN_GET_VALUE);
		// 引継情報dataMap作成
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		dataMap.put(MAP_KEY_VOIP_USER_ID, voipUserId);
		// 引継情報を設定
		JFUWebCommon.setScreenInfo(this, JFUScreenConst.SCREEN_ID_FUW04801, dataMap);

		// -------------------------------------------------
		// 遷移先画面ID、画面名の設定
		// -------------------------------------------------
		// TELvisionユーザー公衆通話設定解約画面に遷移
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW04801);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW04801);
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- dslKoshuTuwaSet_FUW04601SFLogic End -----");

		return true;
	}

	/**
	 * 外部API呼出処理を行います。 <BR>
	 * 
	 * @param serviceFormBean サービスフォームBean
	 * @param strSvcKeiNo サービス契約番号
	 */
	private void execSync(X31SDataBeanAccess serviceFormBean, String strSvcKeiNo)
	{
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- execSync_FUW04601SFLogic Start -----");
		// サービスフォームBean.ＶｏＩＰユーザーＩＤ
		String voipUserId = serviceFormBean.sendMessageString(FUW04601SFConst.VOIP_USER_ID, X31CWebConst.DATABEAN_GET_VALUE);

		// 実行結果
		List<String> dataList = new ArrayList<String>();

		// 外部コマンド実行標準出力格納
		StringBuffer outPut = new StringBuffer();

		// 外部コマンド情報
		String[] cmd =
				{ JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_NM), JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_OP1),
						JFUWebCommon.getApplicationConst(JFUStrConst.FUIFE013_PARAM1), strSvcKeiNo, voipUserId,
						JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_CMD_OP2), JFUWebCommon.getApplicationConst(JFUStrConst.VOIP_ENV) };

		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("★ コマンドライン引数配列 ★：＝" + Arrays.toString(cmd));

		// 外部コマンド実行処理
		String execSyncCode =
				JFUWebCommon.execSync(cmd, outPut, Integer.parseInt(JFUWebCommon.getApplicationConst(JFUStrConst.REMOTE_EXEC_TIME_OUT)));

		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("★ リターンコード ★：＝" + execSyncCode);

		// 外部コマンド実行結果
		if (SUCCESS.equals(execSyncCode))
		{
			if (0 < outPut.length())
			{
				// デバッグログ
				com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("★ 外部コマンド実行結果 ★：＝" + outPut.toString());
				// 出力結果をListに詰め直す。
				dataList = Arrays.asList(outPut.toString().split(JFUWebCommon.LINE_SEPARATOR));
			}
			else
			{
				// "0002"（システムエラー）
				com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("★ 外部コマンド実行結果なしエラー ★");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}
		}
		else
		{
			// "0002"（システムエラー）
			com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("★ リターンコードエラー ★");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// 出力結果をサービスフォームBeanに設定
		setServiceFormBean(serviceFormBean, dataList);
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- execSync_FUW04601SFLogic End -----");

	}

	/**
	 * サービスフォームBeanの設定。 <BR>
	 * 
	 * @param serviceFormBean サービスフォームBean
	 * @param dataList 出力結果
	 */
	private void setServiceFormBean(X31SDataBeanAccess serviceFormBean, List<String> dataList)
	{
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- setServiceFormBean_FUW04601SFLogic Start -----");
		// -------------------------------------------------
		// 出力結果から値の取得
		// -------------------------------------------------
		// ステータス
		String stat = dataList.get(0);
		// サービスフォームBean.ステータス
		serviceFormBean.sendMessageString(FUW04601SFConst.STAT, X31CWebConst.DATABEAN_SET_VALUE, stat);
		// デバッグログ
		com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG.debug("----- setServiceFormBean_FUW04601SFLogic End -----");
	}
}
