/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0829_KKSV0829OPDBMapper
*	ソースファイル名：KKSV0829_KKSV0829OPDBMapper.java
*	作成者			：FJ
*	日付			：2015年11月18日
*＜機能概要＞
*	BP（支払方法オーソリ依頼関連）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v20.00.00   2015/11/17  FJ) 澤田    【ANK-2565-00-00】クレジットカード番号預かりサービス導入（step3：預かり番号化
*	v23.00.00	2016/04/14	FJ)笠川		【ANK-2810-00-00】クレジットカード番号並行保持期間終了に伴うマスク化対応
*
**********************************************************************/
package eo.web.webview.mapping;

import static eo.web.webview.common.JKKKeiNewCmnLogicUtil.RUN_FLG;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JFUStrConst;
import eo.web.webview.KKW00101SF.KKW00101SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class KKSV0829_KKSV0829OPDBMapper {
	
	/** クレジットカード会社コード */
	private static final String CRECARD_COMP_CD = "crecard_comp_cd";
	/** クレジットカード事業コード */
	private static final String CRECARD_JIGYO_CD = "crecard_jigyo_cd";
	/** クレジットカード番号 */
	private static final String CRECARD_NO = "crecard_no";
	/** 決済金額 */
	private static final String CR_AMOUNT = "cr_amount";
	/** オーソリ承認番号 */
	private static final String CR_AUTHNUMBER = "cr_authnumber";
	/** カード有効期限 */
	private static final String CR_CARDEXP = "cr_cardexp";
	/** カード番号 */
	private static final String CR_CARDNUMBER = "cr_cardnumber";
	
	/** カード番号 */
	private static final String CR_SAVE_ID_O = "cr_save_id_o";
	
	/** クレジット契約番号 */
	private static final String CR_CCID = "cr_ccid";
	/** 加盟店ID */
	private static final String CR_CPID = "cr_cpid";
	/** 取引年月日 */
	private static final String CR_ORDERDATE = "cr_orderdate";
	/** 取引時間 */
	private static final String CR_ORDERTIME = "cr_ordertime";
	/** 加盟店パスワード */
	private static final String CR_PASSWD = "cr_passwd";
	/** 処理結果コード */
	private static final String CR_RESULTCODE = "cr_resultcode";
	// ANK-2810-00-00 ADD START
	/** 問合せ用カード番号 */
	private static final String CR_INQUIRE_CARD_NO = "cr_inquire_card_no";
	// ANK-2810-00-00 ADD END

	/**
	 * コンストラクタ
	 */
	public KKSV0829_KKSV0829OPDBMapper(){
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：共有フォームビーン　[1]：支払方法変更受付
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	public HashMap<String, HashMap<String, Object>> setKKSV082901SC(X31SDataBeanAccess bean, HashMap<String, HashMap<String, Object>> outputMap,
			String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 実行フラグ(履歴対応)
		parentMap.put("history_flg", RUN_FLG);
		
		// 共通情報のマッピング
		parentMap.put(JCMConstants.FUNC_CODE_KEY, func_code);
		// クレジットカード番号
		parentMap.put(CRECARD_NO, bean.sendMessageString(KKW00101SFConst.CRDT_CARD_ZUMI, X31CWebConst.DATABEAN_GET_VALUE));
		
		// クレジットカード事業所コード
		parentMap.put(CRECARD_JIGYO_CD, "2");
		
		// クレジットカード会社コード取得
		String crecardMompCd = JKKWebCommon.convertCode(bean, KKW00101SFConst.CRECARD_COMP_LIST, KKW00101SFConst.CRECARD_COMP_CD_32,
				KKW00101SFConst.CRECARD_COMP_CD_LIST_32);

		// クレジットカード会社コード
		parentMap.put(CRECARD_COMP_CD, crecardMompCd);

		outputMap.put("KKSV082901SC", parentMap);

		return outputMap;
	}
	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：共有フォームビーン　[1]：支払方法変更受付
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	public HashMap<String, HashMap<String, Object>> setKKSV082902SC(X31SDataBeanAccess bean, HashMap<String, HashMap<String, Object>> outputMap,
			String func_code)
	{

		if (bean == null)
		{
			return null;
		}
		// ●取引年月日、●取引時間
		String opeDate = JCCWebCommon.getSysDateTimeStamp();
		String opeDate_time = opeDate.substring(8, 14);

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 実行フラグ(履歴対応)
		parentMap.put("history_flg", RUN_FLG);
		
		// 共通情報のマッピング
		parentMap.put(JCMConstants.FUNC_CODE_KEY, func_code);

		// 取引年月日 → 初回オーソリ依頼マップ.取引年月日
		parentMap.put(CR_ORDERDATE, JCCWebCommon.getSysDate());
		// 取引時間 → 初回オーソリ依頼マップ.取引時間
		parentMap.put(CR_ORDERTIME, opeDate_time);
		// 決済金額 → 初回オーソリ依頼マップ.決済金額
		parentMap.put(CR_AMOUNT, "1");
		// クレジット契約番号 → 初回オーソリ依頼マップ.クレジット契約番号
		parentMap.put(CR_CCID, bean.sendMessageString(KKW00101SFConst.CREDIT_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// ----------------------------------------------------------------
		// 手動マッピング
		// ----------------------------------------------------------------
		// 部品呼び出し → 初回オーソリ依頼マップ.加盟店ID
		//parentMap.put(CR_CPID, JCCWebCommon.getApplicationConst(KK_CR_CPID));
		parentMap.put(CR_CPID, "CLEARPASS_CPID");

		// 部品呼び出し → 初回オーソリ依頼マップ.加盟店パスワード
		//parentMap.put(CR_PASSWD, JCCWebCommon.getApplicationConst(KK_CR_PASSWD));
		parentMap.put(CR_PASSWD, "CLEARPASS_PASS");

		// 変更後のクレジットカード番号 → 初回オーソリ依頼マップ.カード番号
		parentMap.put(CR_CARDNUMBER, bean.sendMessageString(KKW00101SFConst.CRDT_CARD_ZUMI, X31CWebConst.DATABEAN_GET_VALUE));

		// 変更後のクレジットカードの有効期限 → 初回オーソリ依頼マップ.カード有効期限
		String yy = bean.sendMessageString(KKW00101SFConst.CRECARD_YK_KIGEN_Y, X31CWebConst.DATABEAN_GET_VALUE);
		String mm = bean.sendMessageString(KKW00101SFConst.CRECARD_YK_KIGEN_M, X31CWebConst.DATABEAN_GET_VALUE);
		// (yy/mm)に編集
		String yyMm = yy + JFUStrConst.SLASH + mm;
		parentMap.put(CR_CARDEXP, yyMm);

		outputMap.put("KKSV082902SC", parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピングをする
	 * @param bean　[0]：申込新規登録画面
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap getKKSV082901SC(X31SDataBeanAccess bean, HashMap outputMap) {
		
		HashMap parentMap = null;
		ArrayList childList = null;
		
		//仕向先会社コード一覧照会
		if (outputMap.containsKey("KKSV082901SC"))
		{
			parentMap = (HashMap)outputMap.get("KKSV082901SC");
		}
		
		// 取得した仕向先情報
		if(parentMap.containsKey("EKK0531B502CBSMsg1List"))
		{
			childList = (ArrayList)parentMap.get("EKK0531B502CBSMsg1List");
		}
		if(childList != null && childList.size() > 0)
		{
			//クレジット交換カードを仕向先コードにセット
			bean.sendMessageString(KKW00101SFConst.SHIKOSAKI_COMP_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)((HashMap)childList.get(0)).get("credit_kokan_cd"));
			
			//クレジット契約番号
			bean.sendMessageString(KKW00101SFConst.CREDIT_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, (String)((HashMap)childList.get(0)).get("credit_kei_no"));

		} else 
		{
			//仕向先会社コード一覧照会から取得できない場合、クレジットカード一意照会から取得
			if (outputMap.containsKey("KKSV082903SC"))
			{
				parentMap = (HashMap)outputMap.get("KKSV082903SC");
			}
			// 取得した仕向先情報
			if(parentMap.containsKey("EKK0531A010CBSMsg1List"))
			{
				childList = (ArrayList)parentMap.get("EKK0531A010CBSMsg1List");
			}
			if(childList != null && childList.size() > 0)
			{
				//クレジット交換カードを仕向先コードにセット
				bean.sendMessageString(KKW00101SFConst.SHIKOSAKI_COMP_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)((HashMap)childList.get(0)).get("credit_kokan_cd"));
				
				//クレジット契約番号
				bean.sendMessageString(KKW00101SFConst.CREDIT_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, (String)((HashMap)childList.get(0)).get("credit_kei_no"));
				

			} 
		}				
		return outputMap;
	}
	
	/**
	 * 下りマッピング
	 * @param bean　[0]：共有フォームビーン　[1]：支払方法変更受付
	 * @param outputMap
	 */
	public String getKKSV082902SC(X31SDataBeanAccess bean, HashMap<String, Object> outputMap)
	{

		String cr_resultcode = "";
		
		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = null;
		if (outputMap.containsKey("KKSV082902SC"))
		{
			parentMap = (HashMap<String, Object>)outputMap.get("KKSV082902SC");
		}

		// 処理結果コード ← 初回オーソリSCマップ.処理結果コード
		if (parentMap != null)
		{
			cr_resultcode =  (String)parentMap.get(CR_RESULTCODE);
		}
		else
		{
			cr_resultcode =  JFUStrConst.EMPTY;
		}
		// オーソリ承認番号 ← 初回オーソリ依頼マップ.オーソリ承認番号
		if (parentMap != null)
		{
			bean.sendMessageString(KKW00101SFConst.AUTHORI_SHONIN_NO, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get(CR_AUTHNUMBER));
		}
		else
		{
			bean.sendMessageString(KKW00101SFConst.AUTHORI_SHONIN_NO, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		}
		// クレジットカード番号預りＩＤ ← 初回オーソリ依頼マップ.カードお預かりID
		if (parentMap != null)
		{
			bean.sendMessageString(KKW00101SFConst.CRECARD_NO_AZKRI_ID, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get(CR_SAVE_ID_O));
		}
		else
		{
			bean.sendMessageString(KKW00101SFConst.CRECARD_NO_AZKRI_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		}

		// ANK-2810-00-00 ADD START
		// 問合せ用カード番号 ← 初回オーソリ依頼マップ.問合せ用カード番号
		if (parentMap != null)
		{
			bean.sendMessageString(KKW00101SFConst.CR_INQUIRE_CARD_NO, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get(CR_INQUIRE_CARD_NO));
		}
		else
		{
			bean.sendMessageString(KKW00101SFConst.CR_INQUIRE_CARD_NO, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		}
		// ANK-2810-00-00 ADD END

		return cr_resultcode;
	}
}