/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKCtrlPaygentAuthInfoStb
 *   ソースファイル名：JKKCtrlPaygentAuthInfoStb.java
 *   作成者          ：富士通
 *   日付            ：2022年06月01日
 *＜機能概要＞
 *   オーソリスタブコマンド発行部品です。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v58.00.00	2022/06/01	 FJ) 上村	 ANK-3846-00-00_【クレカ】クリアパス→ペイジェント移行
 **********************************************************************/
package eo.ejb.common;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Random;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbs.cbsmsg.EKKA0010003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0010004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0010005CBSMsg;

public class JKKCtrlPaygentAuthInfoStb  extends JKKPaygentStbInfo{

	private static JKKCtrlPaygentAuthInfoStb instance = null;
	private Connection connection = null;
	
	private static final String SQL_SELECT_0001 = " SELECT * " +
													" FROM   PY_T_PAYGENT_STB " +
													" WHERE  TOKEN = ? " ;

	private static final String SQL_SELECT_0002 = " SELECT * " +
													" FROM   PY_T_PAYGENT_STB " +
													" WHERE  CUSTOMER_ID = ? " ;
	
	private static final String SQL_SELECT_0003 = " SELECT * " +
													" FROM   PY_T_PAYGENT_STB " +
													" WHERE  PAYMENT_ID = ? " ;
	
	/**フィンガープリント前方55桁 */
	private static final String FINGERPRINT_FW = "0000000000a000000000b111111111c222222222k333333333h1234";
	
	/**
	 * インスタンス取得用のメソッド
	 * 
	 * @return JKKCtrlPaygentAuthInfoStb
	 */
	public static JKKCtrlPaygentAuthInfoStb getInstance() {
		synchronized (JKKCtrlPaygentAuthInfoStb.class) {
			if(instance == null) 
			{
				JKKCtrlPaygentAuthInfoStb.instance= new JKKCtrlPaygentAuthInfoStb();
			}
		}
		
		return instance;
	}
	
	/**
	 * テーブル取得処理
	 * 
	 * @param inCBSMsg 
	 * @param inContext
	 * @param telegram_kind 電文種別
	 */
	public HashMap<String,String> ctrlPaygentAuthStb(CAANMsg inCBSMsg, AgentDispatchContext inContext, String telegram_kind) throws Exception
	{
		// 開始ログ出力を実施。
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "JKKCtrlPaygentAuthInfoStb#ctrlPaygentAuthStb start");
		
		HashMap<String,String> resultMap = new HashMap<String,String>();
		
		// Stub用ＳＱＬ実行（ＪＤＢＣ）を行う。
		PreparedStatement prstmt = null;
		StringBuffer sql = new StringBuffer();
		this.connection = JSYejbConnection.getConnection("PY_T_PAYGENT_STB");
		
		if(this.connection == null)
		{
			// エラー
			throw new Exception("");
		}
		
		// システム日付を取得
		// yyyyMMdd
		String sysDate = JSYejbSysDate.getSystemDate();
		// yyyyMMddHHmmssSSS
		String sysDateTime = JSYejbSysDate.getSystemDatetime();
		// ssSSSのみ抽出
		String ssSSS = sysDateTime.substring(sysDateTime.length() - 5);
		
		// 有効年月に必要な年月を取得
		String MM = sysDate.substring(4, 6);
		// 年については、2年後に変更する
		int YY = Integer.parseInt(sysDate.substring(2, 4)) + 2;
		// MMYY形式の日付を作成
		String MMYY = MM + String.valueOf(YY);
		
		// 電文種別毎に処理を実施する
		// 電文種別：カード情報設定（025）
		if (TELEGRAM_KIND_025.equals(telegram_kind)) {
			// カード情報トークンを取得
			String card_token = inCBSMsg.getString("py_card_token");
			
			try 
			{
				sql.append(SQL_SELECT_0001);
				ResultSet rs = null;
				
				prstmt = this.connection.prepareStatement(sql.toString());
				
				prstmt.setString(1, card_token);
				
				rs = prstmt.executeQuery();
				
				// 取得結果のループ回数を保持する変数を定義
				int count = 0;
				
				// 実行結果の取得
				while(rs.next())
				{
					// カウントアップ
					count++;
					
					// エラー契機区分を取得
					String errOppKbn = rs.getString(TB_ERR_OPP_KBN);
					
					// エラー契機区分が「1(預かりオーソリ)」の場合、エラー情報を返却
					if(ERR_OPP_KBN_1.equals(errOppKbn)) {
						// NG用の設定値を返却する
						// 処理結果コード
						resultMap.put("result", "1");
						
						// レスポンスコード
						if(!isNullBlank(rs.getString(TB_RESPONSE_CODE))){
							// レスポンスコードを設定
							resultMap.put("response_code", rs.getString(TB_RESPONSE_CODE));
						} else {
							// ""(空)を設定
							resultMap.put("response_code", "");
						}
						// レスポンス詳細
						if(!isNullBlank(rs.getString(TB_RESPONSE_DETAIL))){
							// レスポンス詳細を設定
							resultMap.put("response_detail", rs.getString(TB_RESPONSE_DETAIL));
						} else {
							// ""(空)を設定
							resultMap.put("response_detail", "");
						}
						// 顧客カード数
						resultMap.put("num_of_cards", "");
						// 顧客カードID
						resultMap.put("customer_card_id", "");
						// カード発行会社コード
						resultMap.put("issur_id", "");
						// カード発行会社名
						resultMap.put("issur_name", "");
						// フィンガープリント
						resultMap.put("fingerprint", "");
						// マスクされたカード番号
						resultMap.put("masked_card_number", "");
						// カード有効期限
						resultMap.put("card_valid_term", "");
						// カード名義人
						resultMap.put("cardholder_name", "");
						// 取扱カード会社コード
						resultMap.put("acq_id", "");
						// 取扱カード会社名
						resultMap.put("acq_name", "");
						// 顧客ID
						resultMap.put("customer_id", "");
						// デビット・プリペイド判定結果
						resultMap.put("debit_prepaid_type", "");
						// イシュア区分
						resultMap.put("issur_class", "");
						// カードブランド
						resultMap.put("card_brand", "");
					} else {
						// 上記以外の場合は、OK用の設定値を返却する
						// 処理結果
						resultMap.put("result", "0");
						// レスポンスコード
						resultMap.put("response_code", "");
						// レスポンス詳細
						resultMap.put("response_detail", "");
						// 顧客カード数
						resultMap.put("num_of_cards", "");
						// 顧客カードID
						resultMap.put("customer_card_id", "");
						// カード発行会社コード
						resultMap.put("issur_id", "");
						// カード発行会社名
						resultMap.put("issur_name", "");
						// フィンガープリント※固定値およびランダムな9桁の数値を設定
						resultMap.put("fingerprint", FINGERPRINT_FW + getRandFingerPrinte());
						// マスクされたカード番号
						if(!isNullBlank(rs.getString(TB_MASKED_CARD_NO))){
							// マスクされたカード番号を設定
							resultMap.put("masked_card_number", rs.getString(TB_MASKED_CARD_NO));
						} else {
							// ""(空)を設定
							resultMap.put("masked_card_number", "");
						}
						// カード有効期限
						resultMap.put("card_valid_term", MMYY);
						// カード名義人
						resultMap.put("cardholder_name", "");
						// 取扱カード会社コード
						if(!isNullBlank(rs.getString(TB_ACQ_ID))){
							// 取扱カード会社コードを設定
							resultMap.put("acq_id", rs.getString(TB_ACQ_ID));
						} else {
							// ""(空)を設定
							resultMap.put("acq_id", "");
						}
						// 取扱カード会社名
						resultMap.put("acq_name", "");
						// 顧客ID
						if(!isNullBlank(rs.getString(TB_CUSTOMER_ID))){
							// 顧客IDを設定
							resultMap.put("customer_id", rs.getString(TB_CUSTOMER_ID) + ssSSS);
						} else {
							// ""(空)を設定
							resultMap.put("customer_id", "");
						}
						// デビット・プリペイド判定結果
						if(!isNullBlank(rs.getString(TB_DEBIT_PREPAID_TYPE))){
							// デビット・プリペイド判定結果を設定
							resultMap.put("debit_prepaid_type", rs.getString(TB_DEBIT_PREPAID_TYPE));
						} else {
							// ""(空)を設定
							resultMap.put("debit_prepaid_type", "");
						}
						// イシュア区分
						if(!isNullBlank(rs.getString(TB_ISSUR_CLASS))){
							// イシュア区分を設定
							resultMap.put("issur_class", rs.getString(TB_ISSUR_CLASS));
						} else {
							// ""(空)を設定
							resultMap.put("issur_class", "");
						}
						// カードブランド
						if(!isNullBlank(rs.getString(TB_CARD_BRAND))){
							// カードブランドを設定
							resultMap.put("card_brand", rs.getString(TB_CARD_BRAND));
						} else {
							// ""(空)を設定
							resultMap.put("card_brand", "");
						}
					}
				}
				
				// 1件も処理しない場合は、オーソリNGとする
				if (count == 0) {
					JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "スタブテーブルに該当するデータが存在しないため、オーソリNG");
					
					// NG用の設定値を返却する
					// 処理結果
					resultMap.put("result", "1");
					
					// レスポンスコード
					resultMap.put("response_code", "9999");
					// レスポンス詳細
					resultMap.put("response_detail", "スタブテーブルに該当するレコードが存在しません。");
					// 顧客カード数
					resultMap.put("num_of_cards", "");
					// 顧客カードID
					resultMap.put("customer_card_id", "");
					// カード発行会社コード
					resultMap.put("issur_id", "");
					// カード発行会社名
					resultMap.put("issur_name", "");
					// フィンガープリント
					resultMap.put("fingerprint", "");
					// マスクされたカード番号
					resultMap.put("masked_card_number", "");
					// カード有効期限
					resultMap.put("card_valid_term", "");
					// カード名義人
					resultMap.put("cardholder_name", "");
					// 取扱カード会社コード
					resultMap.put("acq_id", "");
					// 取扱カード会社名
					resultMap.put("acq_name", "");
					// 顧客ID
					resultMap.put("customer_id", "");
					// デビット・プリペイド判定結果
					resultMap.put("debit_prepaid_type", "");
					// イシュア区分
					resultMap.put("issur_class", "");
					// カードブランド
					resultMap.put("card_brand", "");
				}
			}
			catch (SQLException e)
			{
				e.printStackTrace();
				resultMap.put(EKKA0010003CBSMsg.PY_RESULTCODE, "1");
				resultMap.put(RESPONSE_DETAIL, "ペイジェント連携独自処理部品（検証環境用）でエラーが発生しました。");
			}
			finally
			{
				try
				{
					if(prstmt != null)
					{
						prstmt.close();
					}
					if(this.connection != null)
					{
						CAANConnectionMgr.getInstance().close(this.connection);
					}
				}
				catch (SQLException e)
				{
					e.printStackTrace();
					resultMap.put(EKKA0010003CBSMsg.PY_RESULTCODE, "1");
					resultMap.put(RESPONSE_DETAIL, "ペイジェント連携独自処理部品（検証環境用）でエラーが発生しました。");
				}
			}
			
		} else if (TELEGRAM_KIND_020.equals(telegram_kind)){
			// 電文種別：カード決済オーソリ（020）
			// 預かりIDを取得
			String customer_id = inCBSMsg.getString("py_customer_id");
			// 預かりIDの上11桁までを抽出
			String search_customer_id = customer_id.substring(0, 11);
			
			// 決済金額を取得
			String payment_amount = inCBSMsg.getString(EKKA0010004CBSMsg.PY_PAYMENT_AMOUNT);
			
			try 
			{
				sql.append(SQL_SELECT_0002);
				ResultSet rs = null;
				
				prstmt = this.connection.prepareStatement(sql.toString());
				
				prstmt.setString(1, search_customer_id);
				
				rs = prstmt.executeQuery();
				// 取得結果のループ回数を保持する変数を定義
				int count = 0;
				
				// 実行結果の取得
				while(rs.next())
				{
					// カウントアップ
					count++;
					
					// エラー契機区分を取得
					String errOppKbn = rs.getString(TB_ERR_OPP_KBN);
					
					// エラー契機区分が「2(有効性チェック)」かつ決済金額が"1円"の場合、または、
					// エラー契機区分が「3(実額オーソリ)」かつ決済金額が"1円"でない場合、エラー情報を返却
					if((ERR_OPP_KBN_2.equals(errOppKbn) &&
							"1".equals(payment_amount)) ||
							(ERR_OPP_KBN_3.equals(errOppKbn) &&
									!("1".equals(payment_amount)))) {
						// NG用の設定値を返却する
						// 処理結果
						resultMap.put("result", "1");
						
						// レスポンスコード
						if(!isNullBlank(rs.getString(TB_RESPONSE_CODE))){
							// レスポンスコードを設定
							resultMap.put("response_code", rs.getString(TB_RESPONSE_CODE));
						} else {
							// ""(空)を設定
							resultMap.put("response_code", "");
						}
						// レスポンス詳細
						if(!isNullBlank(rs.getString(TB_RESPONSE_DETAIL))){
							// レスポンス詳細を設定
							resultMap.put("response_detail", rs.getString(TB_RESPONSE_DETAIL));
						} else {
							// ""(空)を設定
							resultMap.put("response_detail", "");
						}
						// 決済ID
						resultMap.put("payment_id", "");
						// マーチャント取引ID
						resultMap.put("trading_id", inCBSMsg.getString("py_trading_id"));
						// イシュア区分
						resultMap.put("issur_class", "");
						// 取扱カード会社コード
						resultMap.put("acq_id", "");
						// 取扱カード会社名
						resultMap.put("acq_name", "");
						// カード発行会社名
						resultMap.put("issur_name", "");
						// FC取引有無
						resultMap.put("fc_auth_umu", "");
						// 代行提携コード
						resultMap.put("daiko_code", "");
						// カード種類コード
						resultMap.put("card_shu_code", "");
						// カナカード名称
						resultMap.put("k_card_name", "");
						// ACS支払人認証要求Html
						resultMap.put("out_acs_html", "");
						// カード発行会社コード
						resultMap.put("issur_id", "");
						// Attempt区分
						resultMap.put("attempt_kbn", "");
						// フィンガープリント
						resultMap.put("fingerprint", "");
						// マスクされたカード番号
						resultMap.put("masked_card_number", "");
						// カード有効期限
						resultMap.put("card_valid_term", "");
						// 承認番号
						resultMap.put("shonin_no", "");
						// デビット・プリペイド判定結果
						resultMap.put("debit_prepaid_type", "");
						// カードブランド
						resultMap.put("card_brand", "");
					} else {
						// 上記以外の場合は、OK用の設定値を返却する
						// 処理結果
						resultMap.put("result", "0");
						// レスポンスコード
						resultMap.put("response_code", "");
						// レスポンス詳細
						resultMap.put("response_detail", "");
						// 決済ID
						if(!isNullBlank(rs.getString(TB_CUSTOMER_ID))){
							// 決済IDを設定
							resultMap.put("payment_id", rs.getString(TB_CUSTOMER_ID) + "00" + ssSSS);
						} else {
							// ""(空)を設定
							resultMap.put("payment_id", "");
						}
						// マーチャント取引ID
						resultMap.put("trading_id", inCBSMsg.getString("py_trading_id"));
						// イシュア区分
						if(!isNullBlank(rs.getString(TB_ISSUR_CLASS))){
							// イシュア区分を設定
							resultMap.put("issur_class", rs.getString(TB_ISSUR_CLASS));
						} else {
							// ""(空)を設定
							resultMap.put("issur_class", "");
						}	
						// 取扱カード会社コード
						if(!isNullBlank(rs.getString(TB_ACQ_ID))){
							// 取扱カード会社コードを設定
							resultMap.put("acq_id", rs.getString(TB_ACQ_ID));
						} else {
							// ""(空)を設定
							resultMap.put("acq_id", "");
						}
						// 取扱カード会社名
						resultMap.put("acq_name", "");
						// カード発行会社名
						resultMap.put("issur_name", "");
						// FC取引有無
						resultMap.put("fc_auth_umu", "");
						// 代行提携コード
						resultMap.put("daiko_code", "");
						// カード種類コード
						resultMap.put("card_shu_code", "");
						// カナカード名称
						resultMap.put("k_card_name", "");
						// ACS支払人認証要求Html
						resultMap.put("out_acs_html", "");
						// カード発行会社コード
						resultMap.put("issur_id", "");
						// Attempt区分
						resultMap.put("attempt_kbn", "");
						// フィンガープリント※固定値およびランダムな9桁の数値を設定
						resultMap.put("fingerprint", FINGERPRINT_FW + getRandFingerPrinte());
						// マスクされたカード番号
						if(!isNullBlank(rs.getString(TB_MASKED_CARD_NO))){
							// マスクされたカード番号を設定
							resultMap.put("masked_card_number", rs.getString(TB_MASKED_CARD_NO));
						} else {
							// ""(空)を設定
							resultMap.put("masked_card_number", "");
						}
						// カード有効期限
						resultMap.put("card_valid_term", MMYY);
						// 承認番号
						resultMap.put("shonin_no", getRandShoninNo());
						// デビット・プリペイド判定結果
						if(!isNullBlank(rs.getString(TB_DEBIT_PREPAID_TYPE))){
							// デビット・プリペイド判定結果を設定
							resultMap.put("debit_prepaid_type", rs.getString(TB_DEBIT_PREPAID_TYPE));
						} else {
							// ""(空)を設定
							resultMap.put("debit_prepaid_type", "");
						}
						// カードブランド
						if(!isNullBlank(rs.getString(TB_CARD_BRAND))){
							// カードブランドを設定
							resultMap.put("card_brand", rs.getString(TB_CARD_BRAND));
						} else {
							// ""(空)を設定
							resultMap.put("card_brand", "");
						}
					}
				}
				
				// 1件も処理しない場合は、オーソリNGとする
				if (count == 0) {
					JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "スタブテーブルに該当するデータが存在しないため、オーソリNG");
					
					// NG用の設定値を返却する
					// 処理結果
					resultMap.put("result", "1");
					
					// レスポンスコード
					resultMap.put("response_code", "9999");
					// レスポンス詳細
					resultMap.put("response_detail", "スタブテーブルに該当するレコードが存在しません。");
					// 決済ID
					resultMap.put("payment_id", "");
					// マーチャント取引ID
					resultMap.put("trading_id", inCBSMsg.getString("py_trading_id"));
					// イシュア区分
					resultMap.put("issur_class", "");
					// 取扱カード会社コード
					resultMap.put("acq_id", "");
					// 取扱カード会社名
					resultMap.put("acq_name", "");
					// カード発行会社名
					resultMap.put("issur_name", "");
					// FC取引有無
					resultMap.put("fc_auth_umu", "");
					// 代行提携コード
					resultMap.put("daiko_code", "");
					// カード種類コード
					resultMap.put("card_shu_code", "");
					// カナカード名称
					resultMap.put("k_card_name", "");
					// ACS支払人認証要求Html
					resultMap.put("out_acs_html", "");
					// カード発行会社コード
					resultMap.put("issur_id", "");
					// Attempt区分
					resultMap.put("attempt_kbn", "");
					// フィンガープリント
					resultMap.put("fingerprint", "");
					// マスクされたカード番号
					resultMap.put("masked_card_number", "");
					// カード有効期限
					resultMap.put("card_valid_term", "");
					// 承認番号
					resultMap.put("shonin_no", "");
					// デビット・プリペイド判定結果
					resultMap.put("debit_prepaid_type", "");
					// カードブランド
					resultMap.put("card_brand", "");
				}
			}
			catch (SQLException e)
			{
				e.printStackTrace();
				resultMap.put(EKKA0010003CBSMsg.PY_RESULTCODE, "1");
				resultMap.put(RESPONSE_DETAIL, "ペイジェント連携独自処理部品（検証環境用）でエラーが発生しました。");
			}
			finally
			{
				try
				{
					if(prstmt != null)
					{
						prstmt.close();
					}
					if(this.connection != null)
					{
						CAANConnectionMgr.getInstance().close(this.connection);
					}
				}
				catch (SQLException e)
				{
					e.printStackTrace();
					resultMap.put(EKKA0010003CBSMsg.PY_RESULTCODE, "1");
					resultMap.put(RESPONSE_DETAIL, "ペイジェント連携独自処理部品（検証環境用）でエラーが発生しました。");
				}
			}
		} else if (TELEGRAM_KIND_021.equals(telegram_kind)){
			// 電文種別：カード決済オーソリキャンセル（021）
			// 決済IDを取得
			String payment_id = inCBSMsg.getString("py_payment_id");
			// 決済IDの上11桁を抽出
			String search_payment_id = payment_id.substring(0, 11);
			
			try 
			{
				sql.append(SQL_SELECT_0003);
				ResultSet rs = null;
				
				prstmt = this.connection.prepareStatement(sql.toString());
				
				prstmt.setString(1, search_payment_id);
				
				rs = prstmt.executeQuery();
				// 取得結果のループ回数を保持する変数を定義
				int count = 0;
				
				// 実行結果の取得
				while(rs.next())
				{
					// カウントアップ
					count++;
					
					// エラー契機区分を取得
					String errOppKbn = rs.getString(TB_ERR_OPP_KBN);
					
					// エラー契機区分が「4(オーソリキャンセル)の場合、エラー情報を返却
					if(ERR_OPP_KBN_4.equals(errOppKbn)) {
						// NG用の設定値を返却する
						// 処理結果
						resultMap.put("result", "1");
						
						// レスポンスコード
						if(!isNullBlank(rs.getString(TB_RESPONSE_CODE))){
							// レスポンスコードを設定
							resultMap.put("response_code", rs.getString(TB_RESPONSE_CODE));
						} else {
							// ""(空)を設定
							resultMap.put("response_code", "");
						}
						// レスポンス詳細
						if(!isNullBlank(rs.getString(TB_RESPONSE_DETAIL))){
							// レスポンス詳細を設定
							resultMap.put("response_detail", rs.getString(TB_RESPONSE_DETAIL));
						} else {
							// ""(空)を設定
							resultMap.put("response_detail", "");
						}
						// 決済ID
						resultMap.put("payment_id", inCBSMsg.getString("py_payment_id"));
						// マーチャント取引ID
						resultMap.put("trading_id", inCBSMsg.getString("py_trading_id"));
						// マスクされたカード番号
						resultMap.put("masked_card_number", "");
						// カード発行会社コード
						resultMap.put("issur_id", "");
						// フィンガープリント
						resultMap.put("fingerprint", "");
						// 取扱カード会社コード
						resultMap.put("acq_id", "");
						// イシュア区分
						resultMap.put("issur_class", "");
						// 取扱カード会社名
						resultMap.put("acq_name", "");
						// カード発行会社名
						resultMap.put("issur_name", "");
						// FC取引有無
						resultMap.put("fc_auth_umu", "");
						// 代行提携コード
						resultMap.put("daiko_code", "");
						// カード種類コード
						resultMap.put("card_shu_code", "");
						// カナカード名称
						resultMap.put("k_card_name", "");
						// ACS支払人認証要求Html
						resultMap.put("out_acs_html", "");
						// Attempt区分
						resultMap.put("attempt_kbn", "");
						// カード有効期限
						resultMap.put("card_valid_term", "");
						
					} else {
						// 上記以外の場合は、OK用の設定値を返却する
						// 処理結果
						resultMap.put("result", "0");
						// レスポンスコード
						resultMap.put("response_code", "");
						// レスポンス詳細
						resultMap.put("response_detail", "");
						// 決済ID
						resultMap.put("payment_id", inCBSMsg.getString("py_payment_id"));
						// マーチャント取引ID
						resultMap.put("trading_id", inCBSMsg.getString("py_trading_id"));
						// マスクされたカード番号
						resultMap.put("masked_card_number", "");
						// カード発行会社コード
						resultMap.put("issur_id", "");
						// フィンガープリント
						resultMap.put("fingerprint", "");
						// 取扱カード会社コード
						resultMap.put("acq_id", "");
						// イシュア区分
						resultMap.put("issur_class", "");
						// 取扱カード会社名
						resultMap.put("acq_name", "");
						// カード発行会社名
						resultMap.put("issur_name", "");
						// FC取引有無
						resultMap.put("fc_auth_umu", "");
						// 代行提携コード
						resultMap.put("daiko_code", "");
						// カード種類コード
						resultMap.put("card_shu_code", "");
						// カナカード名称
						resultMap.put("k_card_name", "");
						// ACS支払人認証要求Html
						resultMap.put("out_acs_html", "");
						// Attempt区分
						resultMap.put("attempt_kbn", "");
						// カード有効期限
						resultMap.put("card_valid_term", "");
					}
				}
				
				// 1件も処理しない場合は、オーソリNGとする
				if (count == 0) {
					JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "スタブテーブルに該当するデータが存在しないため、オーソリNG");
					
					// NG用の設定値を返却する
					// 処理結果
					resultMap.put("result", "1");
					
					// レスポンスコード
					resultMap.put("response_code", "9999");
					// レスポンス詳細
					resultMap.put("response_detail", "スタブテーブルに該当するレコードが存在しません。");
					// 決済ID
					resultMap.put("payment_id", inCBSMsg.getString("py_payment_id"));
					// マーチャント取引ID
					resultMap.put("trading_id", inCBSMsg.getString("py_trading_id"));
					// マスクされたカード番号
					resultMap.put("masked_card_number", "");
					// カード発行会社コード
					resultMap.put("issur_id", "");
					// フィンガープリント
					resultMap.put("fingerprint", "");
					// 取扱カード会社コード
					resultMap.put("acq_id", "");
					// イシュア区分
					resultMap.put("issur_class", "");
					// 取扱カード会社名
					resultMap.put("acq_name", "");
					// カード発行会社名
					resultMap.put("issur_name", "");
					// FC取引有無
					resultMap.put("fc_auth_umu", "");
					// 代行提携コード
					resultMap.put("daiko_code", "");
					// カード種類コード
					resultMap.put("card_shu_code", "");
					// カナカード名称
					resultMap.put("k_card_name", "");
					// ACS支払人認証要求Html
					resultMap.put("out_acs_html", "");
					// Attempt区分
					resultMap.put("attempt_kbn", "");
					// カード有効期限
					resultMap.put("card_valid_term", "");
				}
			}
			catch (SQLException e)
			{
				e.printStackTrace();
				resultMap.put("result", "1");
				resultMap.put("response_detail", "ペイジェント連携独自処理部品（検証環境用）でエラーが発生しました。");
			}
			finally
			{
				try
				{
					if(prstmt != null)
					{
						prstmt.close();
					}
					if(this.connection != null)
					{
						CAANConnectionMgr.getInstance().close(this.connection);
					}
				}
				catch (SQLException e)
				{
					e.printStackTrace();
					resultMap.put("result", "1");
					resultMap.put("response_detail", "ペイジェント連携独自処理部品（検証環境用）でエラーが発生しました。");
				}
			}
		}
		
		return resultMap;
	}
	
	/**
	 * フィンガープリントの末尾9桁のランダムな数値を返却
	 * @return String value ランダムな9桁数値文字列
	 */
	private String getRandFingerPrinte() {
		Random r = new Random();
		String value = String.valueOf(r.nextInt(899999999) + 100000000);
		
		return value;
	}
	
	/**
	 * 承認番号用の7桁のランダムな数値を返却
	 * @return String value ランダムな7桁数値文字列
	 */
	private String getRandShoninNo() {
		Random r = new Random();
		String value = String.valueOf(r.nextInt(8999999) + 1000000);
		
		return value;
	}
	
	/**
	 * null又は空文字の場合、trueを返却する
	 * 
	 * @param str 検査対象文字列
	 * @return true:null、又は空文字／false:左記以外
	 */
	public static boolean isNullBlank(String str)
	{
		if (null == str || "".equals(str))
		{
			return true;
		}
		return false;
	}
	
	@Override
	public void setConnection(Connection con)
	{
		this.connection = con;
	}
	public Connection getConnection()
	{
		return this.connection;
	}
}
