/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：KKW22702SFLogic
 *	ソースファイル名：KKW22702SFLogic.java
 *	作成者			：富士通
 *	日付			：2022年11月22日
 *＜機能概要＞
 *	支払方法変更登録画面ビューロジック
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	ｖ63.00.00  2022/11/22  FJ)藤本涼  【ANK-4329-00-00】新規作成
 *	ｖ63.00.01  2022/12/28  FJ)藤本涼  【ANK-4329-00-00】ANK-4329-00-00_クレジットカード認証時の3Dセキュア対応
 *	 v64.00.00  2023/01/26  FJ)西窪	   【ANK-4348-00-00】mineo譲渡後支払方法変更対応
 ********************************************************************************/

package eo.web.webview.KKW22702SF;

import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JKKCrecaMeiginChk;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.common.JKKWebCommon;
import eo.web.webview.mapping.KKSV1015_KKSV1015OPDBMapper;
import eo.web.webview.mapping.KKSV1016_KKSV1016OPDBMapper;

/**
 * 支払方法変更登録のViewロジック<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class KKW22702SFLogic extends JCCWebBusinessLogic
{
	/**
	 * 初期表示処理ユースケースID
	 */
	private static final String INITAL_DISPLAY_USECASE_ID = "KKSV1015";

	/**
	 * 更新処理ユースケースID
	 */
	private static final String UPD_USECASE_ID = "KKSV1016";
	
	
	/** クレジットカード照査ステータス 登録完了：001*/
	private static final String CRECARD_SHOSA_STAT_001 = "001";
	
	/** クレジットカード照査ステータス 照査待ち：002*/
	private static final String CRECARD_SHOSA_STAT_002 = "002";
	
	/** クレジットカード照査ステータス 照査NG：003*/
	private static final String CRECARD_SHOSA_STAT_003 = "003";
	
	/** クレジットカード照査ステータス 保留：004*/
	private static final String CRECARD_SHOSA_STAT_004 = "004";
	
	/** クレジットカード照査ステータス キャンセル：005*/
	private static final String CRECARD_SHOSA_STAT_005 = "005";
	
	/** クレジットカード名義人チェック結果コード （一致）*/
	private static final String CARD_MEIIN_CKRLT_CD_MAT = "0";
	
	/** クレジットカード名義人チェック結果コード （不一致）*/
	private static final String CARD_MEIIN_CKRLT_CD_UNMAT = "1";
	
	/** クレジットイシュア区分（国内） */
	private static final String CRDT_ISSUER_DIV_JPN = "0";
	
	/** クレジットイシュア区分（海外） */
	private static final String CRDT_ISSUER_DIV_ETC = "1";
	
	/** チェック結果（OK） */
	private static final String CHK_KEKKA_OK = "OK";
	
	/** チェック結果（NG） */
	private static final String CHK_KEKKA_NG = "要確認";
	
	/** クレジットイシュア区分名（国内） */
	private static final String ISSUER_CHK_RSLT_JPN = "国内発行";
	
	/** クレジットイシュア区分名（海外） */
	private static final String ISSUER_CHK_RSLT_ETC = "海外発行";
	

	/**
	 * 支払方法変更登録の初期表示を行います。<br>
	 * 
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean action_init() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// パラメータ情報を取得する
		HashMap param = JCCWebCommon.getScreenInfo(this);
		
		// 支払方法変更受付番号
		bean.sendMessageString(KKW22702SFConst.PAYWAY_CHG_UKNO, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.UK_NO_01));
		// eoID
		bean.sendMessageString(KKW22702SFConst.EOID, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.EOID));
		// 請求契約番号
		bean.sendMessageString(KKW22702SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.SEIKY_KEI_NO));
		// クレジットカード申込種別コード
		bean.sendMessageString(KKW22702SFConst.CRECARD_MSKM_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.CRECARD_MSKM_SBT_CD));
		// クレジットカード名義(ローマ字)
		bean.sendMessageString(KKW22702SFConst.CRECARD_NM_ROMAJI, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.CRECARD_NM_ROMAJI));
		// クレジットイシュア区分
		bean.sendMessageString(KKW22702SFConst.CRDT_ISSUER_DIV, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.CRDT_ISSUER_DIV));
		// カード名義人チェック結果コード
		bean.sendMessageString(KKW22702SFConst.CARD_MEIIN_CKRLT_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.CARD_MEIIN_CKRLT_CD));
		// チェック時点お客様名
		bean.sendMessageString(KKW22702SFConst.CUST_NM, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.CHK_JTN_CUST_NM));
		// チェック時点お客様カナ名
		bean.sendMessageString(KKW22702SFConst.CUST_NM_KANA, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.CHK_JTN_CUST_KANA));
		// サービス契約番号
		bean.sendMessageString(KKW22702SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.SVC_KEI_NO));
		// サービス契約ステータス
		bean.sendMessageString(KKW22702SFConst.SVC_KEI_STAT, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.SVC_KEI_STAT));
		// SYSID
		bean.sendMessageString(KKW22702SFConst.SYSID, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.SYSID));
		// 更新年月日時分秒(更新前)
		bean.sendMessageString(KKW22702SFConst.UPD_DTM_BF, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.UPD_DTM_BF));
		// クレジットカード照査申込日
		bean.sendMessageString(KKW22702SFConst.CRECARD_SHOSA_MSKM_DAY, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.MSK_DAY));
		//ANK-4348-00-00 ADD START
		// 更新年月日時分秒(更新前)＿支払方法変更受付情報
		bean.sendMessageString(KKW22702SFConst.UPD_DTM_BF_PAYWAY, X31CWebConst.DATABEAN_SET_VALUE, (String)param.get(KKW22702SFConst.UPD_DTM_BF_PAYWAY));
		//ANK-4348-00-00 ADD END


		
		// マッピングクラスに渡すため、配列に作り変える
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ユースケースID格納用マップ生成
		HashMap paramMap = new HashMap();
		// ユースケースID設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, INITAL_DISPLAY_USECASE_ID);
		
		// 運用日付の取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		
		// サービス呼び出し準備
		HashMap< String, Object > inputMap = new HashMap< String, Object >();
		HashMap< String, Object > outputMap = new HashMap< String, Object >();
		
		// マッピングクラスのインスタンス作成
		KKSV1015_KKSV1015OPDBMapper mapper = new KKSV1015_KKSV1015OPDBMapper();
		
		// 上りマッピング
		// 支払方法変更受付情報（クレジットカード）一意照会
		mapper.setKKSV101501SC(paramBean, inputMap, JCKCommonConst.FUNC_CODE_1);
			
		// SQL呼出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// 下りマッピング
		// 支払方法変更受付情報（クレジットカード）一意照会
		mapper.getKKSV101501SC(paramBean, outputMap);
		
		// クレジットカード照査ステータス(更新前)
		String crecardShosaStat = bean.sendMessageString(KKW22702SFConst.CRECARD_SHOSA_STAT, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(KKW22702SFConst.CRECARD_SHOSA_STAT_BF, X31CWebConst.DATABEAN_SET_VALUE, crecardShosaStat);
		
		//クレジットカード照査ステータスが「照査待ち」「保留」の場合、カード名義人チェックを実施する
		String cardNmChkRslt = new String();
		String cardNmChkRsltCd = new String();
		if (CRECARD_SHOSA_STAT_002.equals(crecardShosaStat) 
				|| CRECARD_SHOSA_STAT_004.equals(crecardShosaStat))
		{
			// お客様名（カナ文字）
			String custNmKana = bean.sendMessageString(KKW22702SFConst.CUST_NM_KANA, X31CWebConst.DATABEAN_GET_VALUE);
			// クレジットカード名称（ローマ字）
			String crecardNmRomaji = bean.sendMessageString(KKW22702SFConst.CRECARD_NM_ROMAJI, X31CWebConst.DATABEAN_GET_VALUE);
			
			// カード名義人チェック
			if (JKKCrecaMeiginChk.checkKanaToRomaji(custNmKana, crecardNmRomaji))
			{
				cardNmChkRslt = CHK_KEKKA_OK;
				cardNmChkRsltCd = CARD_MEIIN_CKRLT_CD_MAT;
			}
			else 
			{
				cardNmChkRslt = CHK_KEKKA_NG;
				cardNmChkRsltCd = CARD_MEIIN_CKRLT_CD_UNMAT;
			}
			
			// カード名義人チェック結果
			bean.sendMessageString(KKW22702SFConst.CARD_MEIIN_CKRLT, X31CWebConst.DATABEAN_SET_VALUE, cardNmChkRslt);
			// カード名義人チェック結果コード
			bean.sendMessageString(KKW22702SFConst.CARD_MEIIN_CKRLT_CD, X31CWebConst.DATABEAN_SET_VALUE, cardNmChkRsltCd);

		}
		//クレジットカード照査ステータスが「登録完了」「照査ＮＧ」「キャンセル」の場合、支払方法変更申込受付情報の値を設定する
		else if (CRECARD_SHOSA_STAT_001.equals(crecardShosaStat) 
				|| CRECARD_SHOSA_STAT_003.equals(crecardShosaStat) 
				|| CRECARD_SHOSA_STAT_005.equals(crecardShosaStat))
		{
			// 一致
			if (CARD_MEIIN_CKRLT_CD_MAT.equals(
					bean.sendMessageString(KKW22702SFConst.CARD_MEIIN_CKRLT_CD, X31CWebConst.DATABEAN_GET_VALUE)))
			{
				cardNmChkRslt = CHK_KEKKA_OK;
			}
			// 不一致
			else 
			{
				cardNmChkRslt = CHK_KEKKA_NG;
			}

			// カード名義人チェック結果
			bean.sendMessageString(KKW22702SFConst.CARD_MEIIN_CKRLT, X31CWebConst.DATABEAN_SET_VALUE, cardNmChkRslt);
			// カード名義人チェック結果コード
			bean.sendMessageString(KKW22702SFConst.CARD_MEIIN_CKRLT_CD, X31CWebConst.DATABEAN_SET_VALUE, 
					bean.sendMessageString(KKW22702SFConst.CARD_MEIIN_CKRLT_CD, X31CWebConst.DATABEAN_GET_VALUE));
		}
		else
		{
		}
		
		// 海外発行カードチェック結果を設定する
		if (CRDT_ISSUER_DIV_JPN.equals(
				bean.sendMessageString(KKW22702SFConst.CRDT_ISSUER_DIV, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			bean.sendMessageString(KKW22702SFConst.ISSUER_CHK_RSLT, X31CWebConst.DATABEAN_SET_VALUE, ISSUER_CHK_RSLT_JPN);
		}
		else if (CRDT_ISSUER_DIV_ETC.equals(
				bean.sendMessageString(KKW22702SFConst.CRDT_ISSUER_DIV, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			bean.sendMessageString(KKW22702SFConst.ISSUER_CHK_RSLT, X31CWebConst.DATABEAN_SET_VALUE, ISSUER_CHK_RSLT_ETC);
		}
		else
		{
		}
		
		// クレジットカード名義人チェックの結果に応じて、申込ステータスの初期選択を変える
		if (CRECARD_SHOSA_STAT_002.equals(crecardShosaStat) 
				|| CRECARD_SHOSA_STAT_004.equals(crecardShosaStat))
		{
			if (CHK_KEKKA_OK.equals(cardNmChkRslt))
			{
				bean.sendMessageString(KKW22702SFConst.CRECARD_SHOSA_STAT, X31CWebConst.DATABEAN_SET_VALUE, CRECARD_SHOSA_STAT_001);
			}
			else
			{
				bean.sendMessageString(KKW22702SFConst.CRECARD_SHOSA_STAT, X31CWebConst.DATABEAN_SET_VALUE, CRECARD_SHOSA_STAT_004);
			}
		}
		else
		{
			bean.sendMessageString(KKW22702SFConst.CRECARD_SHOSA_STAT, X31CWebConst.DATABEAN_SET_VALUE, crecardShosaStat);
		}

		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22702);
		
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22702);
		
		return true;
	}
	
	/**
	 * 登録ボタン押下処理<br>
	 * <br>
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean forwardAdd() throws Exception
	{
		
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		JKKWebCommon.getScreenInfo(this);
		
		// クレジットカード照査ステータス
		String crecardShosaStatBf = bean.sendMessageString(KKW22702SFConst.CRECARD_SHOSA_STAT_BF, X31CWebConst.DATABEAN_GET_VALUE);
		
		// クレジットカード照査ステータス
		String crecardShosaStat = bean.sendMessageString(KKW22702SFConst.CRECARD_SHOSA_STAT, X31CWebConst.DATABEAN_GET_VALUE);
		
		if(crecardShosaStatBf.equals(crecardShosaStat)){
			String[] str = {"選択された申込ステータス","現在の申込ステータスと同様","登録"};
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKK0290_JW, str);
			return true;
		}

		
		
		// マッピングクラスに渡すため、配列に作り変える
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ユースケースID格納用マップ生成
		HashMap paramMap = new HashMap();
		// ユースケースID設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, UPD_USECASE_ID);
		
		
		// サービス呼び出し準備
		HashMap< String, Object > inputMap = new HashMap< String, Object >();
		HashMap< String, Object > outputMap = new HashMap< String, Object >();
		
		// マッピングクラスのインスタンス作成
		KKSV1016_KKSV1016OPDBMapper mapper = new KKSV1016_KKSV1016OPDBMapper();
		
		// 上りマッピング
		mapper.setKKSV101601CC(paramBean, inputMap, JCKCommonConst.FUNC_CODE_1);

		try{
			// SQL呼出し
			X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
			// エラー処理
			if (msgResult != null) {
				JCCWebCommon.setMessageInfo(this, msgResult);
				return true;
			}
		}
		catch(Exception e)
		{
			
			if(outputMap != null)
			{
				HashMap kksv101601ccMap = (HashMap) outputMap.get("KKSV101601CC");
				String errFlg = (String) kksv101601ccMap.get("err_flg");
				
				if("3".equals(errFlg))
				{
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);
					
					// 遷移先画面IDを共有フォームBeanに設定
					commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
							JKKScreenConst.SCREEN_ID_KKW22701);

					// 遷移先画面名を共有フォームBeanに設定
					commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
							JKKScreenConst.SCREEN_NAME_KKW22701);

					return true;
				}
				else
				{
					throw e;
				}
			}

		}
		
		if(outputMap != null)
		{
			HashMap kksv101601ccMap = (HashMap) outputMap.get("KKSV101601CC");
			String errFlg = (String) kksv101601ccMap.get("err_flg");
			if("1".equals(errFlg))
			{
				String[] str = {"選択された申込ステータス","現在の申込ステータスと同様","登録"};
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKK0290_JW, str);
				return true;
			}
			else if("2".equals(errFlg))
			{
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBF800_KW);
				return true;
			}
		}
		
		
		String paywayChgUkno = bean.sendMessageString(KKW22702SFConst.PAYWAY_CHG_UKNO, X31CWebConst.DATABEAN_GET_VALUE);
		// 登録メッセージを出力する
// ANK-4329-00-00 MOD START
//		String[] str = { paywayChgUkno + "※登録を行った受付番号","登録"};
		String[] str = { paywayChgUkno,"登録"};
// ANK-4329-00-00 MOD END
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB2960__I, str);
		
		
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JKKScreenConst.SCREEN_ID_KKW22701);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JKKScreenConst.SCREEN_NAME_KKW22701);

		return true;
	}
	
	/**
	 * 戻るボタン押下処理<br>
	 * <br>
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		
		return true;
	}
	
}
