/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：KKW01605SFLogic
 *   ソースファイル名：KKW01605SFLogic.java
 *   作成者          ：GDC)J.Hortilano
 *   日付            ：2022年06月17日
 *＜機能概要＞
 *   
 *＜修正履歴＞
 *   バージョン   修正日       修正者                   修正内容
 *   v58.00.00   2022/06/14   GDC)J.Hortilano         ANK-3846-00-00_【クレカ】クリアパス→ペイジェント移行
 *   v66.00.00   2023/05/29   FJ)謝                   【ANK-4408-01-00】口振請求及びWeb申込システム移行 事前対応（ＩＶＲマイナーエラー対応）
 **********************************************************************/
package eo.web.webview.KKW01605SF;

import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.common.JSYwebLog;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JPCOnlineMessageConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV1002_KKSV1002OPDBMapper;


/**
 * KKW01605のビューロジックです。<p>
 * <BR>
 * @author GDC)J.Hortilano
 */
@SuppressWarnings("serial")
public class KKW01605SFLogic extends JCCWebBusinessLogic
{

	/** "1"(検索結果が0件) */
	private static final String SEARCH_ERROR_FLG_1 = "1";
	/** "2"(最大検索件数超え) */
	private static final String SEARCH_ERROR_FLG_2 = "2";
	/** "3"(表示ページに該当するデータなし) */
	private static final String SEARCH_ERROR_FLG_3 = "3";

	/** "1"(照会) */
	private static final String TRANS_DIV_1 = "1";
	/** "2"(登録) */
	private static final String TRANS_DIV_2 = "2";

	/** "1"(有) */
	private static final String YES = "1";
	/** "0"(成功) */
	private static final String SUCCESS = "0";

	/** CCタイトル */
	private static final String KKSV100201CC = "KKSV100201CC";

// ANK-4408-01-00 ADD START
	/** IVRエラーフラグ */
	private static final String IVR_ERR_FLG = "ivr_err_flg";
	/** "E_IVR_SHOKAI_ERR"(オーソリ状況取得API（IVR）エラー) */
	private static final String E_IVR_SHOKAI_ERR = "E_IVR_SHOKAI_ERR";
// ANK-4408-01-00 ADD END

	
	
	/**
	 * 初期表示処理<br>
	 *
	 * @return 正常／異常
	 * @throws Exception 
	 */
	public boolean actionInit() throws Exception 
	{
		// (1) 引継情報の取得
		// 画面情報を取得し、サービスフォームBeanに設定
		JCCWebCommon.getScreenInfo(this);
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();

		// ページリンク情報のクリア
		JCCWebCommon.clearPageLinkInfo(this, JKKScreenConst.SCREEN_ID_KKW01605);

		// 処理区分
		serviceBean.sendMessageString(KKW01605SFConst.TRAN_DIV, X31CWebConst.DATABEAN_SET_VALUE, TRANS_DIV_1);

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		// (4) 3.2 ＩＶＲ情報登録状況確認処理(ivrInfoAddJokyoCfm)を行う。
		ivrInfoAddJokyoCfm(serviceBean);

		return true;
	}

	
	/**
	 * ＩＶＲ情報登録状況確認処理
	 * 
	 * @param  bean
	 * @return 処理結果
	 * @throws Exception Exception
	 */
	private void ivrInfoAddJokyoCfm(X31SDataBeanAccess bean) throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess[] serviceBean = {bean};
		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		KKSV1002_KKSV1002OPDBMapper mapper = new KKSV1002_KKSV1002OPDBMapper();

		// サービス検索条件格納用マップ
		HashMap<String, Map<String, String>> inputMap = new HashMap<String, Map<String, String>>();
		// サービス処理結果格納用マップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		// サービスIDをparamMapにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV1002);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV1002OP);
		
		
		
		// EKK1351B501_データ抽出項目一覧照会
		mapper.setKKSV100201CC(serviceBean, inputMap);
		
		// ページング情報の設定
		JCCWebCommon.upmapperPageLinkInfo(this, "0", KKSV100201CC, inputMap);
		
		// サービス呼出処理
		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch(Exception e)
		{
			throw new Exception(e);
		}
		// (2)取得データ件数チェック
		// 検索エラーフラグ
		String searchErrFlg = "";
// ANK-4408-01-00 ADD START
		// IVRエラーフラグ
		String ivrErrFlg = "";
// ANK-4408-01-00 ADD END
		HashMap<String, Object> parentMap = (HashMap<String, Object>)outputMap.get(KKSV100201CC);
		if(parentMap != null)
		{
			searchErrFlg = (String)parentMap.get("search_err_flg");
// ANK-4408-01-00 ADD START
			ivrErrFlg = (String)parentMap.get(IVR_ERR_FLG);
// ANK-4408-01-00 ADD END
		}

		// (3)サービス処理結果の取得
		// 取得情報の下りマッピング
		mapper.getKKSV100201CC(serviceBean, outputMap);

		// ページング情報の設定
		JCCWebCommon.downmapperPageLinkInfo(this,  "0", KKSV100201CC, outputMap);

		// 検索のコマンドIDを設定する（ページングのイベントIDを設定）
		JCCWebCommon.setSearchCommand(this, "B_CHANGE_PAGE");

		// 各サービスインターフェイスの検索エラーフラグに応じて、以下のメッセージを設定する。
		// エラーに該当した場合は、メッセージ設定後に処理を終了する。
		if (SEARCH_ERROR_FLG_1.equals(searchErrFlg))
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0330__I);
			
//			// (6)遷移先画面の設定
//			// 遷移先画面IDを設定
//			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW01605);
//			// 遷移先画面名を設定
//			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW01605);
//			return;
		}
		else if (SEARCH_ERROR_FLG_2.equals(searchErrFlg))
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0340__I, new String[] { JCCWebCommon.getSearchConst("KKW01605_ROW_PER_PAGE") });
			
//			// (6)遷移先画面の設定
//			// 遷移先画面IDを設定
//			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW01605);
//			// 遷移先画面名を設定
//			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW01605);
//			return;
		}
		else if (SEARCH_ERROR_FLG_3.equals(searchErrFlg))
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0350__I);
//			return;
		}

		// @未来請求契約チェック
		// 未来請求契約有無
		String futureSeikyKeiUm = serviceBean[0].sendMessageString(KKW01605SFConst.FUTURE_SEIKY_KEI_UM, X31CWebConst.DATABEAN_GET_VALUE);

		if (YES.equals(futureSeikyKeiUm))
		{
			// DataBeanの未来請求契約有無が"1"(有)の場合、次画面へワーニングメッセージを表示する。
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBF690__Q, new String[] { "" });
		}

		// Aオーソリ情報登録API（IVR）実行OKチェック
		String authoriInfoAddRslt =  serviceBean[0].sendMessageString(KKW01605SFConst.AUTHORI_INFO_ADD_RSLT, X31CWebConst.DATABEAN_GET_VALUE);
		String tranDiv =  new String(bean.sendMessageString(KKW01605SFConst.TRAN_DIV, X31CWebConst.DATABEAN_GET_VALUE));

		if (TRANS_DIV_2.equals(tranDiv) && SUCCESS.equals(authoriInfoAddRslt))
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBF700__I, new String[] { "" });
		}
		// Bオーソリ情報登録API（IVR）実行NGチェック
		else if (TRANS_DIV_2.equals(tranDiv) && !SUCCESS.equals(authoriInfoAddRslt))
		{
			// DataBeanの処理区分が"2"(登録)、かつDataBeanのオーソリ情報登録結果がが"0"(成功)以外の場合、次画面へエラーメッセージを表示する。
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBE195_KW, new String[] { "当該請求先にて識別ID登録で予期せぬエラーが発生した" });
		}
// ANK-4408-01-00 ADD START
		// Cオーソリ状況取得API（IVR）実行NGチェック
		if (E_IVR_SHOKAI_ERR.equals(ivrErrFlg))
		{
			// オーソリ状況取得API（IVR）エラーの場合、次画面へエラーメッセージを表示する。
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8220_KW, new String[] { "オーソリ状況取得API（IVR）でのデータ取得" });
		}
// ANK-4408-01-00 ADD END

		// (6)遷移先画面の設定
		// 遷移先画面IDを設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW01605);
		// 遷移先画面名を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW01605);

		return;
	}


	/**
	 * 更新処理
	 * 
	 * @return 処理結果
	 * @throws Exception Exception
	 */
	public boolean actionUpd() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
//		// 共有フォームBeanのデータBeanアクセスクラスを取得
//		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		// ページリンク情報のクリア
		JCCWebCommon.clearPageLinkInfo(this, JKKScreenConst.SCREEN_ID_KKW01605);

		// 処理区分
		serviceBean.sendMessageString(KKW01605SFConst.TRAN_DIV, X31CWebConst.DATABEAN_SET_VALUE, TRANS_DIV_1);

		// (3) 3.2 ＩＶＲ情報登録状況確認処理(ivrInfoAddJokyoCfm)を行う。
		ivrInfoAddJokyoCfm(serviceBean);

		return true;
	}


	/**
	 * 申込開始処理
	 * 
	 * @return 処理結果
	 * @throws Exception Exception
	 */
	public boolean actionMskmSta() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
//		// 共有フォームBeanのデータBeanアクセスクラスを取得
//		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		// ページリンク情報のクリア
		JCCWebCommon.clearPageLinkInfo(this, JKKScreenConst.SCREEN_ID_KKW01605);
		
		// 処理区分
		serviceBean.sendMessageString(KKW01605SFConst.TRAN_DIV, X31CWebConst.DATABEAN_SET_VALUE, TRANS_DIV_2);

		// (3) 3.2 ＩＶＲ情報登録状況確認処理(ivrInfoAddJokyoCfm)を行う。
		ivrInfoAddJokyoCfm(serviceBean);

		return true;
	}


	/**
	 * ページ制御−ページリンク押下
	 * 
	 * @return 処理結果
	 * @throws Exception Exception
	 */
	public boolean changePage() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
//		// 共有フォームBeanのデータBeanアクセスクラスを取得
//		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		
		// 処理区分
		serviceBean.sendMessageString(KKW01605SFConst.TRAN_DIV, X31CWebConst.DATABEAN_SET_VALUE, TRANS_DIV_1);

		// (3) 3.2 ＩＶＲ情報登録状況確認処理(ivrInfoAddJokyoCfm)を行う。
		ivrInfoAddJokyoCfm(serviceBean);

		return true;
	}
}
