/*********************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKBatClarisAuthCrdt
*   ソースファイル名：JKKBatClarisAuthCrdt.java
*   作成者          ：富士通
*   日付            ：2025年04月24日
*＜機能概要＞
*   主処理(共通)<BR>
*   ペイジェント(法人用)HTTPSリクエスト処理部品です。
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v75.00.00	2025/04/24  FJ)吉田賢	【ANK-4682-00-00】VMルール変更に伴うクラリス対応
*   v75.00.01	2025/05/27  FJ)吉田賢	【ANK-4682-00-00】VMルール変更に伴うクラリス対応
**********************************************************************/

package eo.business.common;

import java.util.HashMap;
import java.util.Hashtable;


import eo.business.util.file.JBSbatKKIFE001;
import eo.business.util.table.JBSbatKK_T_CARD_UK_INFO;
import eo.common.util.JCNAuthResultCdConvertUtil;
import eo.framework.application.JBSbatBatchInvoker;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.util.JBSbatOracleSeqUtil;

/**
 * <p>
 * ペイジェントHTTPSリクエスト独自処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKBatClarisAuthCrdt extends JKKBatClearPassBase
{
	// ANK-4682-00-00 MOD START
//	/** 部品ID*/
//	private static final String PGID = "JKKBatClearPassCrdt";
	/** 部品ID*/
	private static final String PGID = "JKKBatClarisAuthCrdt";
	// ANK-4682-00-00 MOD END
	/** HTTP リターンコード */
	private static final String HTTP_OK = "200";
	
	/** 加盟店ID */
	private String strCrCpid = null;
	/** 加盟店パスワード */
	private String strCrPasswd = null;
	
	private static HashMap<String, String> trnResultCdMap = new HashMap<String, String>();
	
	/** レスポンス詳細（9始まり） */
	private final static String RESPONSE_DETAIL_9XXX = "9xxx";
	
	/** 処理結果 正常 */
	private final static String RESULT_OK = "0";
	
	/** 処理結果 異常 */
	private final static String RESULT_NG = "1";
	
	/** オーソリ審査結果（正常） */
	private final static String AUTH_RESULT_AUTHOK = "0000000";
	
	/** オーソリ審査結果（システム障害エラー） */
	private final static String AUTH_RESULT_SYSTEMERR = "9000000";
	
	/** マーチャント取引ＩＤ */
	public final static String MERCHANTDEALID = "merchantDealId";
	/** イシュア区分 */
	public final static String ISSUR_CLASS = "issur_class";
	/** ハッシュタグ */
	public final static String FINGERPRINT = "fingerprint";
	/** カード有効期限 */
	public final static String CARD_VALID_TERM = "card_valid_term";
	/** カード種別 */
	public final static String DEBIT_PREPAID_TYPE = "debit_prepaid_type";
	/** カードブランド */
	public final static String CARD_BRAND = "card_brand";
	
	/**
	 * ペイジェントHTTPSリクエスト独自処理部品です。
	 * @param commonItem 共通電文
	 * @param inMap CAANメッセージ
	 * @param type オーソリ種別
	 * @throws Exception エラー
	 */
	@SuppressWarnings("unchecked")
	public void execute(JBSbatCommonItem commonItem, HashMap inMap, String toType, HashMap trnResultCodeMap) throws Exception
	{
		// パラメータチェック
//		if (!chkParam(inMap))
//		{
//			return;
//		}

		// ロガー設定
		setlogger(commonItem);
		
		trnResultCdMap = trnResultCodeMap;
		
		try
		{
			/*
			 * ペイジェント接続実行
			 */
			super.execute(inMap, toType, commonItem);
		}

		finally
		{
			// 処理結果ログ出力
//			log.printDebugLog(PGID + "#CR_RESULTCODE=" + inMap.get(JBSbatKKIFM008.CR_RESULTCODE));	// 処理結果コード
//			log.printDebugLog(PGID + "#CR_ORDERID=" + inMap.get(JBSbatKKIFM008.CR_ORDERID));		// 取引ID
//			log.printDebugLog(PGID + "#CR_BRANDCODE=" + inMap.get(JBSbatKKIFM008.CR_BRANDCODE));	// 仕向先会社コード
//			log.printDebugLog(PGID + "#CR_SLIPNUMBER=" + inMap.get(JBSbatKKIFM008.CR_SLIPNUMBER));	// 伝票番号
//			log.printDebugLog(PGID + "#CR_AUTHNUMBER=" + inMap.get(JBSbatKKIFM008.CR_AUTHNUMBER));	// オーソリ承認番号
//			log.printDebugLog(PGID + "#CR_PAIDAMOUNT=" + inMap.get(JBSbatKKIFM008.CR_PAIDAMOUNT));	// 決済金額
//			log.printDebugLog(PGID + "#CR_PAYMENTID=" + inMap.get(JBSbatKKIFM008.CR_PAYMENTID));			// 決済ID
//			log.printDebugLog(PGID + "#CR_RESPONSECODE=" + inMap.get(JBSbatKKIFM008.CR_RESPONSECODE));		// レスポンスコード
//			log.printDebugLog(PGID + "#CR_RESPONSEDETAIL=" + inMap.get(JBSbatKKIFM008.CR_RESPONSEDETAIL));	// レスポンス詳細
		}
	}

//	/**
//	 * パラメータチェック
//	 * 
//	 * @param inMap
//	 * @return boolean
//	 */
//	@SuppressWarnings("unchecked")
//	private boolean chkParam(HashMap inMap)
//	{
//		// アプリケーションプロパティ.加盟店ID格納
//		strCrCpid = (String)inMap.get(JBSbatKKIFE001.CR_CPID);
//		// アプリケーションプロパティ.加盟店パスワード格納
//		strCrPasswd = (String)inMap.get(JBSbatKKIFE001.CR_PASSWD);
//
//		if (isNullBlunk(strCrCpid) || isNullBlunk(strCrPasswd))
//		{
//			inMap.put(RESULT_CD, S_AUTH_SYSERR);
//			return false;
//		}
//
//		return true;
//	}

	/**
	 * ペイジェントAPIに対して送信するリクエストパラメータを作成する。
	 * @param inMap メッセージキャリア
	 * @return ペイジェントAPIへのリクエストパラメータ
	 */
	@SuppressWarnings("unchecked")
	protected String requestParamMake(HashMap inMap)
	{
		// リクエストパラメータ作成
		StringBuffer strBuf = new StringBuffer();
		
		// マーチャントID
		String merchantId = (String)inMap.get(MERCHANT_ID);
		strBuf.append(MERCHANT_ID);
		strBuf.append(S_SEP_EQ);
		strBuf.append(merchantId);
		// 接続ID
		String connectId = JCCBatCommon.getApplicationConst("PAYGENT_CONNECT_ID");
		strBuf.append(S_SEP_AN);
		strBuf.append(CONNECT_ID);
		strBuf.append(S_SEP_EQ);
		strBuf.append(connectId);
		// 接続パスワード
		String connectPassword = JCCBatCommon.getApplicationConst("PAYGENT_CONNECT_PASSWORD");
		strBuf.append(S_SEP_AN);
		strBuf.append(CONNECT_PASSWORD);
		strBuf.append(S_SEP_EQ);
		strBuf.append(connectPassword);
		// 電文種別ID
		strBuf.append(S_SEP_AN);
		strBuf.append(TELEGRAM_KIND);
		strBuf.append(S_SEP_EQ);
		strBuf.append("020");
		// 電文バージョン番号
		String telegramVersion = JCCBatCommon.getApplicationConst("PAYGENT_TELEGRAM_VERSION");
		strBuf.append(S_SEP_AN);
		strBuf.append(TELEGRAM_VERSION);
		strBuf.append(S_SEP_EQ);
		strBuf.append(telegramVersion);
		// マーチャント取引ID
		String tradingId = (String)inMap.get(JBSbatKKIFE001.CR_MERCHANTDEALID);
		strBuf.append(S_SEP_AN);
		strBuf.append(TRADING_ID);
		strBuf.append(S_SEP_EQ);
		strBuf.append(tradingId);
		// 決済ID
		strBuf.append(S_SEP_AN);
		strBuf.append(PAYMENT_ID);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// 決済金額
		String amountVar = (String)inMap.get(JBSbatKKIFE001.CR_AMOUNT);
		strBuf.append(S_SEP_AN);
		strBuf.append(PAYMENT_AMOUNT);
		strBuf.append(S_SEP_EQ);
		strBuf.append(amountVar);
		// カード番号
		strBuf.append(S_SEP_AN);
		strBuf.append(CARD_NUMBER);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// カード有効期限
		strBuf.append(S_SEP_AN);
		strBuf.append(CARD_VALID_TERM);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// カード確認番号
		strBuf.append(S_SEP_AN);
		strBuf.append(CARD_CONF_NUMBER);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// 支払区分
		strBuf.append(S_SEP_AN);
		strBuf.append(PAYMENT_CLASS);
		strBuf.append(S_SEP_EQ);
		strBuf.append("10");
		// 分割回数
		strBuf.append(S_SEP_AN);
		strBuf.append(SPLIT_COUNT);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// 3Dセキュア不要区分
		strBuf.append(S_SEP_AN);
		strBuf.append(DSECURE_RYAKU);
		strBuf.append(S_SEP_EQ);
		strBuf.append("1");
		// 3Dセキュア利用タイプ
		strBuf.append(S_SEP_AN);
		strBuf.append(DSECURE_USE_TYPE);
		strBuf.append(S_SEP_EQ);
		strBuf.append("1");
		// HttpAccept
		strBuf.append(S_SEP_AN);
		strBuf.append(HTTP_ACCEPT);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// HttpUserAgent
		strBuf.append(S_SEP_AN);
		strBuf.append(HTTP_USER_AGENT);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// 3-Dセキュア戻りURL
		strBuf.append(S_SEP_AN);
		strBuf.append(TERM_URL);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// 参照マーチャント取引ＩＤ
		strBuf.append(S_SEP_AN);
		strBuf.append(REF_TRADING_ID);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// カード情報お預りモード
		strBuf.append(S_SEP_AN);
		strBuf.append(STOCK_CARD_MODE);
		strBuf.append(S_SEP_EQ);
		strBuf.append("1");
		// 顧客ID
		String customerId = (String)inMap.get(JBSbatKKIFE001.CR_CARDAZKRIID);
		strBuf.append(S_SEP_AN);
		strBuf.append(CUSTOMER_ID);
		strBuf.append(S_SEP_EQ);
		strBuf.append(customerId);
		// 顧客カードID
		strBuf.append(S_SEP_AN);
		strBuf.append(CUSTOMER_CARD_ID);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// サイトID
		strBuf.append(S_SEP_AN);
		strBuf.append(SITE_ID);
		strBuf.append(S_SEP_EQ);
		strBuf.append(JKKBatConst.HOJIN_SITE_ID);
		// カード情報トークン
		strBuf.append(S_SEP_AN);
		strBuf.append(CARD_TOKEN);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// 同時売上モード
		strBuf.append(S_SEP_AN);
		strBuf.append(SALES_MODE);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// セキュリティーコードトークン利用
		strBuf.append(S_SEP_AN);
		strBuf.append(SECURITY_CODE_TOKEN);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		// セキュリティコード利用
		strBuf.append(S_SEP_AN);
		strBuf.append(SECURITY_CODE_USE);
		strBuf.append(S_SEP_EQ);
		strBuf.append("");
		log.printDebugLog(PGID + "#reqParam=" + strBuf.toString());

		StringBuilder logStr = new StringBuilder(300);
		logStr.append(MERCHANT_ID + "=");
		logStr.append(merchantId + ",");
		logStr.append(CONNECT_ID + "=");
		logStr.append(connectId + ",");
		logStr.append(CONNECT_PASSWORD + "=");
		logStr.append(connectPassword + ",");
		logStr.append(TELEGRAM_KIND + "=");
		logStr.append("020" + ",");
		logStr.append(TELEGRAM_VERSION + "=");
		logStr.append(telegramVersion + ",");
		logStr.append(TRADING_ID + "=");
		logStr.append(tradingId + ",");
		logStr.append(PAYMENT_ID + "=");
		logStr.append("" + ",");
		logStr.append(PAYMENT_AMOUNT + "=");
		logStr.append(amountVar + ",");
		logStr.append(CARD_NUMBER + "=");
		logStr.append("" + ",");
		logStr.append(CARD_VALID_TERM + "=");
		logStr.append("" + ",");
		logStr.append(CARD_CONF_NUMBER + "=");
		logStr.append("" + ",");
		logStr.append(PAYMENT_CLASS + "=");
		logStr.append("10" + ",");
		logStr.append(SPLIT_COUNT + "=");
		logStr.append("" + ",");
		logStr.append(DSECURE_RYAKU + "=");
		logStr.append("1" + ",");
		logStr.append(DSECURE_USE_TYPE + "=");
		logStr.append("1" + ",");
		logStr.append(HTTP_ACCEPT + "=");
		logStr.append("" + ",");
		logStr.append(HTTP_USER_AGENT + "=");
		logStr.append("" + ",");
		logStr.append(TERM_URL + "=");
		logStr.append("" + ",");
		logStr.append(REF_TRADING_ID + "=");
		logStr.append("" + ",");
		logStr.append(STOCK_CARD_MODE + "=");
		logStr.append("1" + ",");
		logStr.append(CUSTOMER_ID + "=");
		logStr.append(customerId + ",");
		logStr.append(CUSTOMER_CARD_ID + "=");
		logStr.append("" + ",");
		logStr.append(SITE_ID + "=");
		logStr.append(JKKBatConst.HOJIN_SITE_ID + ",");
		logStr.append(CARD_TOKEN + "=");
		logStr.append("" + ",");
		logStr.append(SALES_MODE + "=");
		logStr.append("" + ",");
		logStr.append(SECURITY_CODE_TOKEN + "=");
		logStr.append("" + ",");
		logStr.append(SECURITY_CODE_USE + "=");
		logStr.append("" + ",");
		log.printBusinessErrorLog("EKKB1200AI",
				new String[]{PGID + "#ペイジェント入力結果：" + logStr.toString()});
		
		return strBuf.toString();
	}
	
	
	/**
	 * ペイジェントAPI処理結果を格納する。
	 * @param inMap メッセージキャリア
	 * @param key レスポンスキー
	 * @param value レスポンスバリュー
	 */
	@SuppressWarnings("unchecked")
	protected void resultPut(HashMap inMap, Hashtable<String,Object> resultMap)
	{
		// レスポンスコードを取得
		String response_code = (String)resultMap.get(RESPONSE_CODE);
		// レスポンス詳細を取得
		String response_detail = (String)resultMap.get(RESPONSE_DETAIL);
		
		if (isNullBlank(response_code)) {
			// レスポンスコードがnullまたは""の場合、
			response_code = "";
		}
		
		if (!isNullBlank(response_detail)) {
			// レスポンス詳細がnullまたは""でない場合、
			// レスポンス詳細より"(ダブルクォーテーション)を削除する
			response_detail = response_detail.replaceAll("\"", "");
		} else {
			response_detail = "";
		}
		
		// 処理結果コード
		String trnResultCode = "";
		
		// 処理結果 = "0"の場合
		if (RESULT_OK.equals(resultMap.get(RESULT)))
		{
			// 正常を設定
			trnResultCode = AUTH_RESULT_AUTHOK;
		}
		// 処理結果 = "1"の場合
		else if (RESULT_NG.equals(resultMap.get(RESULT)))
		{
			// 処理結果コードの判定を行う
			trnResultCode = isResultCd(response_code, response_detail);
			
			// NULLもしくは空文字の場合
			if (isNullBlank(trnResultCode))
			{
				// システム障害エラーを設定
				trnResultCode = AUTH_RESULT_SYSTEMERR;
			}
		}
		else
		{
			// システム障害エラーを設定
			trnResultCode = AUTH_RESULT_SYSTEMERR;
		}
		// ペイジェントより取得したコードを利用して、処理結果コードに変換し返却する
		inMap.put(RESULT_CD, trnResultCode);
		//変換部品ログ
		log.printBusinessErrorLog("EKKB1200AI",
				new String[]{PGID + "#処理結果コード変換ログ"});
		log.printBusinessErrorLog("EKKB1200AI",
				new String[]{PGID + "#処理結果="+resultMap.get(RESULT)});
		log.printBusinessErrorLog("EKKB1200AI",
				new String[]{PGID + "#レスポンスコード="+response_code});
		log.printBusinessErrorLog("EKKB1200AI",
				new String[]{PGID + "#レスポンス詳細="+response_detail});
		log.printBusinessErrorLog("EKKB1200AI",
				new String[]{PGID + "#処理結果コード="+inMap.get(RESULT_CD)});
		
		String returnCRresultCode = (String)inMap.get(RESULT_CD);
		if(JKKBatConst.S_AUTH_RESULT_OTHER.equals(returnCRresultCode))
		{
			inMap.put(RESULT_CD, JKKBatConst.S_AUTH_CARDACCIDENT);
			// エラーが発生しましたが、処理を継続します。エラー内容(%1%)
			returnCRresultCode = JKKBatConst.S_AUTH_CARDACCIDENT;
			StringBuffer mesInfo = new StringBuffer("エラー要因:処理結果コード(returnCRresultCode)＝" + returnCRresultCode);
			mesInfo.append(", 一連番号＝" + (String)inMap.get(JBSbatKKIFE001.CR_ORDERNUMBER));
			mesInfo.append(", シーケンス番号＝" + (String)inMap.get(JBSbatKKIFE001.CR_SEQNO));
			mesInfo.append(", レコード作成年月日時分秒＝" + (String)inMap.get(JBSbatKKIFE001.CR_RECSAKSEIDTM));
			log.printBusinessErrorLog("EKKB0010CW", new String[]{mesInfo.toString()});
			JBSbatBatchInvoker.setErrFlg(true);
		}
		
		// レスポンスコードを設定
		inMap.put(RESPONSE_CODE, response_code);
		// レスポンス詳細を設定
		inMap.put(RESPONSE_DETAIL, response_detail);
		
		// 決済ID
		if(!isNullBlank((String)resultMap.get(PAYMENT_ID)))
		{
			// 決済IDを設定
			inMap.put(PAYMENT_ID, resultMap.get(PAYMENT_ID));
		}
		else
		{
			// ""(空)を設定
			inMap.put(PAYMENT_ID, "");
		}
		
		// マーチャント取引ＩＤを設定
		inMap.put(MERCHANTDEALID, inMap.get(JBSbatKKIFE001.CR_MERCHANTDEALID));
		
		// イシュア区分を設定
		inMap.put(ISSUR_CLASS, resultMap.get(ISSUR_CLASS));
		// 仕向先カード会社コード
		inMap.put(TB_ACQ_ID, resultMap.get(TB_ACQ_ID));
		// フィンガープリントを設定
		inMap.put(FINGERPRINT, resultMap.get(FINGERPRINT));

		// オーソリ結果変換部品インスタンスを作成
		JCNAuthResultCdConvertUtil convertUtil = new JCNAuthResultCdConvertUtil(
							(String)resultMap.get(RESULT), 
							(String)resultMap.get(RESPONSE_CODE), 
							response_detail, 
							(String)resultMap.get("masked_card_number"), 
							(String)resultMap.get("debit_prepaid_type"),
							(String)resultMap.get("card_brand"),
							(String)resultMap.get("card_valid_term"));
		// カード番号の変換処理
		String card_no = convertUtil.convertCreCardNo();
		// カード番号
		inMap.put(CARD_NO, card_no);
		// カード有効期限
		inMap.put(CARD_VALID_TERM, convertUtil.convertCardValidTerm());
		// オーソリ承認番号
		inMap.put(SHONIN_NO, resultMap.get(SHONIN_NO));
		// デビット・プリペイド判定結果
		inMap.put(DEBIT_PREPAID_TYPE, convertUtil.convertDebitPrepaidType());
		// カードブランド
		inMap.put(CARD_BRAND, convertUtil.convertCardBrand());
		
	}
	/**
	 * null又は空文字の場合、trueを返却する
	 * 
	 * @param str 検査対象文字列
	 * @return true:null、又は空文字／false:左記以外
	 */
	public static boolean isNullBlank(String str)
	{
		if (null == str || "".equals(str))
		{
			return true;
		}
		return false;
	}
	
	private static String isResultCd(String response_code, String response_detail){
		// レスポンスコードとレスポンス詳細を結合する
		String returnCRresponseCdDetail = response_code + "_" + response_detail;
		
		// 業務パラメータ設定値にレスポンスコードとレスポンス詳細が存在する場合
		if (trnResultCdMap.containsKey(returnCRresponseCdDetail))
		{
			// 処理結果コードを返却
			return trnResultCdMap.get(returnCRresponseCdDetail);
		}
		// レスポンス詳細に文字が含まれているかを判定
		else 
		{
			if (!((response_detail.getBytes().length) == (response_detail.length())))
			{
				// レスポンスコードと「_」を結合する
				returnCRresponseCdDetail = response_code + "_";
				
				// 業務パラメータ設定値に存在する場合
				if (trnResultCdMap.containsKey(returnCRresponseCdDetail))
				{
					// 処理結果コードを返却
					return trnResultCdMap.get(returnCRresponseCdDetail);
				}
			}
			else 
			{
				if (response_code.equals("2002") && 
						(response_detail.startsWith("9") && response_detail.length() == 4))
				{
					// レスポンスコードと「9xxx」を結合する
					returnCRresponseCdDetail = response_code + "_" + RESPONSE_DETAIL_9XXX;
					
					// 業務パラメータ設定値に存在する場合
					if (trnResultCdMap.containsKey(returnCRresponseCdDetail))
					{
						// 処理結果コードを返却
						return trnResultCdMap.get(returnCRresponseCdDetail);
					}
				}
			}
		}
		// 存在しない場合、nullを返却
		return null;
		
	}
	
	/**
	 * カード受付情報登録
	 * @param commonItem バッチ共通パラメータ電文
	 * @param inData  API呼出し時の送信情報
	 * @param retData API呼出し時の返却情報
	 */
	@SuppressWarnings("unchecked")
	protected void entryKkTCardUkInfo(JBSbatCommonItem commonItem, HashMap inData, Hashtable<String, Object> retData) 
	throws Exception
	{
		// 継承元がコンシューマのサイトＩＤを固定で入れているのでオーバーライドする。
		
		// カード受付情報
		JBSbatSQLAccess dbKkCardUkInfo = JCRBatCommon.getDataAccessObj(commonItem, D_TBL_NAME_KK_T_CARD_UK_INFO);
		JBSbatCommonDBInterface inMap = new JBSbatCommonDBInterface();

		// カード受付情報履歴番号をシーケンスより取得
		String cardUkInfoRrkNO = JBSbatOracleSeqUtil.getFormatedNextSeq(commonItem.getConnection(), SEQ_CARD_UK_INFO_RIREKI_NO, "", 12);

		// カード受付情報履歴番号
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.CARD_UK_INFO_RIREKI_NO, cardUkInfoRrkNO);

		// 処理年月日
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.TRN_YMD, JCCBatCommon.getSysDate());
		
		// レスポンス詳細を取得
		String response_detail = (String)retData.get(RESPONSE_DETAIL);
		
		if (!isNullBlank(response_detail)) {
			// レスポンス詳細がnullまたは""でない場合、
			// レスポンス詳細より"(ダブルクォーテーション)を削除する
			response_detail = response_detail.replaceAll("\"", "");
		} else {
			response_detail = "";
		}
		
		// オーソリ結果変換部品インスタンスを作成
		JCNAuthResultCdConvertUtil convertUtil = new JCNAuthResultCdConvertUtil(
							(String)retData.get(RESULT), 
							(String)retData.get(RESPONSE_CODE), 
							response_detail, 
							(String)retData.get("masked_card_number"), 
							(String)retData.get("debit_prepaid_type"),
							(String)retData.get("card_brand"),
							(String)retData.get("card_valid_term"));

		String seikyAmnt = (String) inData.get(CR_AMOUNT);
		if ("1".equals(seikyAmnt))
		{
			// オーソリ実績区分
			inMap.setValue(JBSbatKK_T_CARD_UK_INFO.AUTHORI_JSSI_DIV, AUTHORI_JSSI_DIV_KBN_2);
		}
		else 
		{
			// オーソリ実績区分
			inMap.setValue(JBSbatKK_T_CARD_UK_INFO.AUTHORI_JSSI_DIV, AUTHORI_JSSI_DIV_KBN_3);
		}
		// サイトID（コンシューマ）
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.SITE_ID, JKKBatConst.HOJIN_SITE_ID);
		// マーチャント取引ID
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.MERCHANT_DEAL_ID, (String)inData.get(CR_MERCHANTDEALID));
		// 決済金額
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.KSSAI_AMNT, seikyAmnt);
		// カード預かりID
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.CARD_AZKRI_ID, (String)inData.get(CR_CARDAZKRIID));

		// 決済ID
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.KSSAI_ID, retData.get("payment_id"));
		// 処理結果
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.TRN_RSLT, retData.get("result"));
		// オーソリ結果応答コード
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.AUTH_RSLT_RSP_CD, retData.get("response_code"));
		// オーソリ結果応答詳細
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.AUTH_RSLT_RSP_DTL, response_detail);
		// カード発行会社コード
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.CARD_HAKKO_COMP_CD, retData.get("issur_id"));
		// カード発行会社名
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.CARD_HAKKO_COMP_NM, retData.get("issur_name"));
		// フィンガープリント
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.FINGERPRINT, retData.get("fingerprint"));
		// カード番号の変換処理
		String card_no = convertUtil.convertCreCardNo();
		// マスクされたカード番号が存在しない場合、""(空)を返却
		if (!isNullBlank(card_no)) {
			// カード番号への暗号化処理
			card_no = JCCBatCommon.getEncryptResultPassword(card_no);
		}
		
		// マスク済カード番号
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.MASKZM_CARD_NO, card_no);
		// カード有効期限
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.CARD_YK_KIGEN, retData.get("card_valid_term"));
		// 仕向先カード会社コード
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.SHIKOSAKI_CARD_COMP_CD, retData.get("acq_id"));
		// 仕向先カード会社名
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.SHIKOSAKI_CARD_COMP_NM, retData.get("acq_name"));
		// イシュア区分
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.ISSUER_DIV, retData.get("issur_class"));
		// カード種別
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.CARD_SBT, retData.get("debit_prepaid_type"));
		// カードブランド
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.CARD_BRAND, retData.get("card_brand"));
		// ACS支払人認証要求HTML
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.ACSPAYER_NINSHO_YOKYU_HTML, retData.get("out_acs_html"));
		// ATTEMPT区分
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.ATTEMPT_DIV, retData.get("attempt_kbn"));
		// 承認番号
		inMap.setValue(JBSbatKK_T_CARD_UK_INFO.SHONIN_NO, retData.get("shonin_no"));
		
		// ◆ 登録
		dbKkCardUkInfo.insertByPrimaryKeys(inMap);
	}
}
