/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*   システム名              ：eo顧客基幹システム
*   モジュール名            ：JBSbatKKAuthRsltGetIktAddIvr
*   ソースファイル名        ：JBSbatKKAuthRsltGetIktAddIvr.java
*   作成者                  ：富士通　
*	作成日                  ：2022年04月26日
*＜機能概要＞
*　IVR進捗管理の「処理前（処理中含む）」について、IVRへ状況取得APIを用いて「完了」
*  の場合にクレジットカード情報の登録と請求契約情報の変更を行う。
*＜修正履歴＞
*   バージョン          修正日            修正者                   修正内容
*   v58.00.01           2022/04/18        GDC)J.Hortilano         【ANK-3846-00-00】【クレカ】クリアパス→ペイジェント移行
*   v58.00.02           2022/12/06        FJ)永井                 【ANK-3846-13-00】【クレカ】クリアパス→ペイジェント移行_仕変13
*   v58.00.03           2023/01/16        FJ)永井                 【ANK-3846-13-00】【クレカ】クリアパス→ペイジェント移行_仕変13
*   v66.00.00           2023/05/29        FJ)謝                   【ANK-4408-01-00】口振請求及びWeb申込システム移行 事前対応（ＩＶＲマイナーエラー対応）
*   v67.00.00           2023/07/19        FJ)三角                 【ANK-4428-00-00】クレカIVRの識別ID有効期限切れ対応
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.model.common.check.DatetimeCheck;
import com.fujitsu.futurity.model.common.check.LengthCheck;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatNameStkuUtil;
import eo.business.util.table.JBSbatKK_T_CREDIT_AUTH_JSK;
import eo.business.util.table.JBSbatKK_T_IVR_PRG_KANRI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JKKAuthoriRsltEinmConv;
import eo.common.util.JKKCommonUtil;
import eo.common.util.JKKStringUtil;
import eo.common.util.JPCDateUtil;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatOracleSeqUtil;
import eo.framework.util.JBSbatStringUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
* オーソリ結果取得一括登録（ＩＶＲ） <p>
*<BR>
* @author J.Hortilano
*/
public class JBSbatKKAuthRsltGetIktAddIvr extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	
	/** APLConst.properties KEY:KK_IVR_API_KEY */
	public final static String APL_CONST_KK_IVR_API_KEY = "PAYGENT_CONNECTID";
	/** APLConst.properties KEY:KK_IVR_API_PASSWORD */
	public final static String APL_CONST_KK_IVR_API_PASSWORD = "PAYGENT_CONNECT_PASSID";
	
	
	/** テーブルアクセスクラス(機器提供サービス契約工事会社通知ワーク)*/
	private JBSbatSQLAccess db_KK_T_IVR_PRG_KANRI = null;
	/** テーブルアクセスクラス(クレジットオーソリ実績)*/
	private JBSbatSQLAccess db_KK_T_CREDIT_AUTH_JSK = null;
	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
	/** テーブルアクセスクラス(請求契約)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;
// ANK-4428-00-00 ADD START
	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;
// ANK-4428-00-00 ADD END
	
	
	/** テーブル(機器提供サービス契約工事会社通知ワーク)*/
	private static final String D_TBL_NAME_KK_T_IVR_PRG_KANRI = "KK_T_IVR_PRG_KANRI";
	/** テーブル(機器提供サービス契約工事会社通知ワーク)*/
	private static final String D_TBL_NAME_KK_T_CREDIT_AUTH_JSK = "KK_T_CREDIT_AUTH_JSK";
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";
	/** テーブル(請求契約)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";
// ANK-4428-00-00 ADD START
	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";
// ANK-4428-00-00 ADD END
	
	
	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_T_IVR_PRG_KANRI_KK_SELECT_001 = "KK_SELECT_001";
	/** SQL定義キー(KK_SELECT_345)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_345 = "KK_SELECT_345";
	/** SQL定義キー(KK_SELECT_068)*/
	private static final String KK_T_SEIKY_KEI_KK_SELECT_068 = "KK_SELECT_068";
// ANK-4428-00-00 ADD START
	/** SQL定義キー(KK_SELECT_028)*/
	private static final String ZM_M_WORK_PARAM_KNRI_KK_SELECT_028 = "KK_SELECT_028";
// ANK-4428-00-00 ADD END
	
	
	
	/** サービス呼出時のリターンコード："0000"（正常） */
	private static final String RETURN_CODE_0000 = "0000";
	
	/** "0"(成功)、） */
	private static final String RESULT_CODE_0 = "0";
	
	/** "0"(処理前) */
	private static final String STATUS_CODE_0 = "0";
	/** "1"(処理中) */
	private static final String STATUS_CODE_1 = "1";
	/** "2"(完了) */
	private static final String STATUS_CODE_2 = "2";
	
	/** "0"(成功) */
	private static final String RESULT_0 = "0";
	/** "1"(失敗) */
	private static final String RESULT_1 = "1";
	
	/** "0"(失敗) */
	private static final String SAVE_SUCCESS_FLG_0 = "0";
	/** "1"(成功) */
	private static final String SAVE_SUCCESS_FLG_1 = "1";
	
	/** "0"(成功) */
	private static final String PSP_STATUS_CODE_0 = "0";
	/** "1"(失敗) */
	private static final String PSP_STATUS_CODE_1 = "1";
	
	/** 出力済フラグ: 0 */
	private static final String OUT_FLG_0 = "0";
	/** 出力済フラグ: 1 */
	private static final String OUT_FLG_1 = "1";
	
	/** アスタリスク（正規表現） */
	private static final String ASTERISK_REGEX = "\\*";
	/** 番号：0 */
	private static final String NUMBER_0 = "0";
	
	/** 空白 */
	private static final String EMPTY = "";
	/** 空白1桁 */
	private static final String ONE_BLANK = " ";
	
	/** 属性: 半角数字1" */
	private static final String ATTR_HLFWD_NUM_1 = "半角数字1";
	/** 属性: 半角英字1 */
	private static final String ATTR_HLFWD_ALP_1 = "半角英字1";
	/** 属性: 半角英数字1 */
	private static final String ATTR_HLFWD_ALPNUM_1 = "半角英数字1";
	/** 属性: 半角英数字21 */
	private static final String ATTR_HLFWD_ALPNUM_2 = "半角英数字2";
	/** 属性: 年月日1 */
	private static final String ATTR_DATE_1 = "年月日1";
	
	
	/** シーケンス(SEQ_CREDIT_AUTH_JSK_NO) */
	private static final String SEQ_CREDIT_AUTH_JSK_NO = "SEQ_CREDIT_AUTH_JSK_NO";
	/** 固定値"02"(入会オーソリ)) */
	private static final String FIXED_VALUE_02 = "02";
	/** 固定値"1" */
	private static final String FIXED_VALUE_1 = "1";
	/** 固定値"20" */
	private static final String FIXED_VALUE_20 = "20";
	/** 固定値"1"(有効) */
	private static final String ENABLED = "1";
	/** 固定値"0"(無効) */
	private static final String DISABLED = "0";
	/** 固定値"2"(支払方法変更) */
	private static final String PAYMENT_METHOD_CHANGE = "2";
	/** 固定値"1"(処理済) */
	private static final String PROCESSED = "1";
	/** 固定値"1"(処理済) */
	private static final String EXTRACTED  = "1";
	/** 固定値"0"(未処理) */
	private static final String UNPROCESSED = "0";
	
	/** 機能コード */
	private static final String FUNC_CODE = "func_code";	
	/** APIキー */
	private static final String API_KEY = "apiKey";
	/** APIパスワード */
	private static final String API_PASSWORD = "apiPassword";
	/** 受付番号 */
	private static final String RECEIPT_NO = "receiptNo";
	
	
	/** オーソリ状況取得API（IVR）明細 */
	private static final String EKKA0120002CBSMSG1LIST = "EKKA0120002CBSMsg1List";
	/** 結果コード */
	private static final String RESULTCODE = "resultCode";
	
	/** エラーメッセージ一覧 */
	private static final String EKKA0120002CBSMSG2LIST = "EKKA0120002CBSMsg2List";
	/** エラーメッセージ */
	private static final String ERRORMESSAGE = "errorMessage";
	
	/** 識別ID 有効期限 */
	private static final String DISCERNMENTIDENDDATETIME = "discernmentIdEndDatetime";
	/** ステータスコード */
	private static final String STATUSCODE = "statusCode";
	/** フローレベルID */
	private static final String FLOWLEVELID = "flowLevelId";
	/** フローレベル名称 */
	private static final String FLOWLEVELNAME = "flowLevelName";
	/** 発信者電話番号 */
	private static final String CALLERTELNO = "callerTelNo";
	/** 着信日時 */
	private static final String INCOMINGDATETIME = "incomingDatetime";
	/** カード登録成功フラグ */
	private static final String SAVESUCCESSFLG = "saveSuccessFlg";
	/** PSP ステータスコード */
	private static final String PSPSTATUSCODE = "pspStatusCode";
	/** 処理実行日時 */
	private static final String TRANSACTIONDATETIME = "transactionDatetime";
	/** 処理結果 */
	private static final String RESULT = "result";
	/** レスポンスコード */
	private static final String RESPONSECODE = "responseCode";
	/** レスポンス詳細 */
	private static final String RESPONSEDETAIL = "responseDetail";
	/** マスクされたカード番号 */
	private static final String MASKEDCARDNUMBER = "maskedCardNumber";
	/** カード有効期限 */
	private static final String CARDVALIDTERM = "cardValidTerm";
	/** 取扱カード会社コード */
	private static final String ACQID = "acqId";
	/** 顧客ID */
	private static final String CUSTOMERID = "customerId";
	/** デビット・プリペイド判定結果 */
	private static final String DEBITPREPAIDTYPE = "debitPrepaidType";
	/** イシュア区分 */
	private static final String ISSURCLASS = "issurClass";
	/** カードブランド */
	private static final String CARDBRAND = "cardBrand";
	
	
	/** サービス(オーソリ状況取得API（IVR）) */
	private static final String KKSV1003 = "KKSV1003";
	/** サービス(クレジット支払方法変更一括登録) */
	private static final String KKSV0883 = "KKSV0883";
	/** サービス(KKSV1003OP) */
	private static final String KKSV1003OP = "KKSV1003OP";
	/** サービス(KKSV0883OP) */
	private static final String KKSV0883OP = "KKSV0883OP";
	/** key1 */
	private static final String KEY1 = "key1";
	/** key2 */
	private static final String KEY2 = "key2";
	
	
	/** サービスインターフェイス/共通コンポーネント(KKSV100301SC) */
	private static final String KKSV100301SC = "KKSV100301SC";
	/** サービスインターフェイス/共通コンポーネント(KKSV088301CC)*/
	private static final String KKSV088301CC = "KKSV088301CC";
	
	
	/** 有効期限日付形式チェックエラ: E020 */
	private static final String ERR_CD_E020 = "E020";
	/** 必須チェックエラー: E030 */
	private static final String ERR_CD_E030 = "E030";
	/** 桁数チェックエラーの場合: E040 */
	private static final String ERR_CD_E040 = "E040";
	/** 形式チェックエラーの場合: E050 */
	private static final String ERR_CD_E050 = "E050";
	/** 同一処理内で複数回カード登録成功しているため、該当の受付番号は取込していません: E060 */
	private static final String ERR_CD_E060 = "E060";
	/** 途中離脱のためオーソリ実施なし: E070 */
	private static final String ERR_CD_E070 = "E070";
	/** オーソリＮＧ（通信失敗）: E080 */
	private static final String ERR_CD_E080 = "E080";
	/** オーソリＮＧ（PSPエラー）: E090 */
	private static final String ERR_CD_E090 = "E090";
	/** 請求契約テーブルに未来予約のレコードが存在します。: E100 */
	private static final String ERR_CD_E100 = "E100";
	/** 入力ファイルの顧客ID（請求契約番号）に紐付くデータが存在しません。: E110 */
	private static final String ERR_CD_E110 = "E110";
	/** 排他チェックエラー: E140 */
	private static final String ERR_CD_E140 = "E140";
	/** その他エラー: E999 */
	private static final String ERR_CD_E999 = "E999";
	
	
	/** コード種別コード:"CD01728"(クレジット支払方法一括登録チェック) */
	private static final String CD_SBT_CD_CD01728 = "CD01728";
	
	/** コンシューマ (4211) */
	private static final String SITE_ID_4211 = "4211";
	
	/** IE (クレジット支払申込（ＩＶＲ） */
	private static final String IDO_RSN_CD_IE = "IE"; 
	/** リターンコード */
	private static final String RETURN_CODE = "RETURN_CODE";
	/** エラーコード */
	private static final String ERR_CD = "err_cd";
	/** "請求方法番号（クレジットカード） */
	private static final String SEIKY_WAY_NO_CRECARD = "seiky_way_no_crecard";
	
	
	/**
	 * 0 - 項目名
	 * 1 - 桁数チェック (最小)
	 * 2 - 桁数チェック (最大)
	 * 3 - 属性チェック
	 */
	private static final String[][] checkTable= new String[][] {
			{ACQID,	 				"5", 	"5", 	ATTR_HLFWD_NUM_1},
			{CARDBRAND, 			"1", 	"24", 	ATTR_HLFWD_ALP_1},
			{MASKEDCARDNUMBER,	 	"14", 	"16", 	ATTR_HLFWD_ALPNUM_2},
			{CARDVALIDTERM, 		"4", 	"4", 	ATTR_HLFWD_NUM_1},
			{CUSTOMERID, 			"16", 	"16", 	ATTR_HLFWD_ALPNUM_1},
			{TRANSACTIONDATETIME, 	"8", 	"8", 	ATTR_DATE_1},
			{DEBITPREPAIDTYPE, 		"1", 	"7", 	ATTR_HLFWD_ALP_1},
			{ISSURCLASS, 			"1", 	"1", 	ATTR_HLFWD_NUM_1}
	};
	
	/** 索引: 0 */
	private static final int ITEM_INDEX = 0;
	/** 索引: 1 */
	private static final int MIN_INDEX = 1;
	/** 索引: 2 */
	private static final int MAX_INDEX = 2;
	/** 索引: 3 */
	private static final int ATTR_INDEX = 3;
		
	
	
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		

		
		
		db_KK_T_IVR_PRG_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_IVR_PRG_KANRI);
		db_KK_T_CREDIT_AUTH_JSK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_CREDIT_AUTH_JSK);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_SEIKY_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_KEI);
// ANK-4428-00-00 ADD START
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
// ANK-4428-00-00 ADD END
		
		super.logPrint.printDebugLog("[E][initial]");
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("[S][execute]");
		// @.変数初期化。
		HashMap<String, HashMap<String, Object>> processingTargetMap = new HashMap<String, HashMap<String, Object>>();
		
// ANK-4428-00-00 ADD START
		// @-1.IVR進捗管理有効期限切れの基準日を取得する。
		executeZM_M_WORK_PARAM_KNRI_KK_SELECT_028();
		JBSbatCommonDBInterface zmMWorkParamKnriKKSelect028map = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		// IVR進捗管理有効期間取得エラーが発生した場合、以下の処理を行う。
		if (JKKCommonUtil.isNull(zmMWorkParamKnriKKSelect028map))
		{
			// DB未存在エラー
			String[] msgParam = new String[]
			{ JBSbatZM_M_WORK_PARAM_KNRI.TABLE_NAME };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0720KW, msgParam);
		}
		
		// 業務パラメータ設定値
		String vaildPeriod = zmMWorkParamKnriKKSelect028map.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);
		// オンライン運用日付取得
		String onOpeDate = super.onlineOpeDate;
		// 基準日 = オンライン運用日付 - 業務パラメータ設定値
		String stdardDay = JPCDateUtil.addDay(onOpeDate, Integer.parseInt(vaildPeriod) * -1);
// ANK-4428-00-00 ADD END
		// A.IVR進捗管理からデータ抽出を行う。
		executeKK_T_IVR_PRG_KANRI_KK_SELECT_001();
		
		 JBSbatCommonDBInterface kkTIvrPrgKanriKKSelect001map = null;
		 
		 // B.Aで取得したデータの件数分、以下の処理を行う。
		 while (null != (kkTIvrPrgKanriKKSelect001map = db_KK_T_IVR_PRG_KANRI.selectNext()))
		 {
			 // ＩＶＲ受付番号
			 String receiptNo = kkTIvrPrgKanriKKSelect001map.getString(JBSbatKK_T_IVR_PRG_KANRI.IVR_UK_NO);
			 // 請求契約番号
			 String seikyKeiNo = kkTIvrPrgKanriKKSelect001map.getString(JBSbatKK_T_IVR_PRG_KANRI.SEIKY_KEI_NO);
			 
			// サービスの処理結果が格納されるMAP
			HashMap<String, Object> outputMap = new HashMap<String, Object>();
// ANK-4408-01-00 DEL START
//			 boolean hasError = false;
// ANK-4408-01-00 DEL END
			 try
			 {
				 // (a).オーソリ状況取得API（IVR）サービスを呼び出す。
				 outputMap = getEKKA0120002(receiptNo, outputMap);
			 }
			 // E.上記Bの(c)-1でオーソリ状況取得API（IVR）エラーが発生した場合、以下の処理を行う。
			 catch(Exception e)
			 {
// ANK-4408-01-00 MOD START
//				 hasError = true;
				 super.logPrint.printDebugLog("Exception:" + e.getMessage());
				 throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0270CE, new String[]{"オーソリ状況取得API（IVR）"});
// ANK-4408-01-00 MOD END
			 }
			 
			 // (b).オーソリ状況取得API（IVR）サービス処理結果取得。
			 // サービスの処理結果より取得
// ANK-4408-01-00 MOD START
//			 HashMap<String, Object>  kksv100301SCMap = (HashMap<String, Object>)outputMap.get(KKSV100301SC);
//			 ArrayList<HashMap<String, Object>> ekka0120002CBSMsg1List = (ArrayList<HashMap<String, Object>>) kksv100301SCMap.get(EKKA0120002CBSMSG1LIST);
			 HashMap<String, Object>  kksv100301SCMap = new HashMap<String, Object>();
			 ArrayList<HashMap<String, Object>> ekka0120002CBSMsg1List = new ArrayList<HashMap<String, Object>>();
			 if (outputMap != null)
			 {
				 kksv100301SCMap = (HashMap<String, Object>)outputMap.get(KKSV100301SC);
				 if (kksv100301SCMap != null)
				 {
					 ekka0120002CBSMsg1List = (ArrayList<HashMap<String, Object>>) kksv100301SCMap.get(EKKA0120002CBSMSG1LIST);
				 }
			 }
// ANK-4408-01-00 MOD END
			 
			 HashMap<String, Object> apiResultMap;
			 if(ekka0120002CBSMsg1List != null && !ekka0120002CBSMsg1List.isEmpty())
			 {
				 apiResultMap = ekka0120002CBSMsg1List.get(0);
			 }
			 else
			 {
				 apiResultMap = new HashMap();
			 }
			 
			 
			 // (c).オーソリ状況取得API（IVR）サービス処理結果判定。
			 // 結果コード
			 String resultCode = (String)apiResultMap.get(RESULTCODE);
// ANK-4408-01-00 MOD START
//			 // (c)-1.オーソリ状況取得API（IVR）.結果コードが"0"(成功)以外の場合、
//			 // または例外発生時(HTTPステータス不正等)
//			 if(!RESULT_CODE_0.equals(resultCode) || hasError)
			 // (c)-1.オーソリ状況取得API（IVR）.結果コードが"0"(成功)以外の場合、
			 if(!RESULT_CODE_0.equals(resultCode))
// ANK-4408-01-00 MOD END
			 {
				 ArrayList<HashMap<String, Object>> ekka0120002CBSMsg2List = (ArrayList<HashMap<String, Object>>) apiResultMap.get(EKKA0120002CBSMSG2LIST);
				 List<String> errorList = new ArrayList<String>();
				 if(ekka0120002CBSMsg2List != null)
				 {
					 for(HashMap<String, Object> errorMsgMap : ekka0120002CBSMsg2List)
					 {
						 String errorMsg = (String) errorMsgMap.get(ERRORMESSAGE);
						 if(!JKKStringUtil.isNullBlank(errorMsg))
						 {
							 errorList.add(errorMsg);
						 }
					 }
				 }
				 
				 //・インフォメーションメッセージを出力する。
				 String[] errorMsg = new String[] {
						 "オーソリ状況取得API（IVR）エラー。"
						 + "受付番号：" + receiptNo
						 + "、結果コード：" + resultCode
						 + "、エラーメッセージ一覧：" + errorList
				 };
				 
				 outputLogMessage(JPCBatchMessageConstant.EKKB1200AI, errorMsg);
				 commonItem.addErrorCount(1);
				
				 // // 次レコードの処理を行う。
				 continue;
			 }
			 // (c)-2.上記(c)-1以外の場合、
			 else
			 {
				 // ステータスコード
				 String statusCode = (String) apiResultMap.get(STATUSCODE);
				 // (a).オーソリ状況取得API（IVR）.ステータスコードが"0"(処理前)または"1"(処理中)の場合、
				 if (STATUS_CODE_0.equals(statusCode) || STATUS_CODE_1.equals(statusCode))
				 {
// ANK-4428-00-00 ADD START
					// 識別ID 有効期限
					String discernmentIdEndDatetime = (String) apiResultMap.get(DISCERNMENTIDENDDATETIME);
					// 日付の先頭8桁を取得する。
					String modifiedDiscernmentIdEndDatetime = modifyTransactionDateTime(discernmentIdEndDatetime);
					// (a)-1.オーソリ状況取得API（IVR）.識別ID 有効期限が業務パラメータより取得した基準日以前の場合、
					if (JPCDateUtil.subtractDay(stdardDay, modifiedDiscernmentIdEndDatetime) >= 0)
					{
						// 「(別記1) IVR進捗状況更新処理（有効期限切れ）」を呼び出し、IVR進捗状況の更新を行う。
						executeKK_T_IVR_PRG_KANRI_PK_UPDATE_YK_KIGEN_CHOK(
								kkTIvrPrgKanriKKSelect001map.getMap(), 
								apiResultMap, 
								ERR_CD_E070, 
								JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, ERR_CD_E070));
						// 次レコードの処理を行う。
						continue;
					}
					// (a)-2.上記(a)-1以外の場合、
// ANK-4428-00-00 ADD END
					 // 何もしない。次レコードの処理を行う。
					 
					// 次レコードの処理を行う。
					 continue;
				 }
				 
				 // (b).オーソリ状況取得API（IVR）.ステータスコードが"2"(完了)の場合、
// ANK-4428-00-00 MOD START
// 				 if (STATUS_CODE_2.equals(statusCode) )
				 else if (STATUS_CODE_2.equals(statusCode) )
// ANK-4428-00-00 MOD END
				 {
					 // カード登録成功フラグ
					 String saveSuccessFlg = (String) apiResultMap.get(SAVESUCCESSFLG);
					 // PSP ステータスコード
					 String pspStatusCode = (String) apiResultMap.get(PSPSTATUSCODE);
					 // 処理結果
					 String result = (String) apiResultMap.get(RESULT);
					
// ANK-3846-13-00 MOD START
//					 if (SAVE_SUCCESS_FLG_0.equals(saveSuccessFlg))
					 // (b)-1.オーソリ状況取得API（IVR）.カード登録成功フラグが設定されていない、または"0"(失敗)の場合、
					 if (JKKStringUtil.isNullBlank(saveSuccessFlg) || SAVE_SUCCESS_FLG_0.equals(saveSuccessFlg))
// ANK-3846-13-00 MOD END
					 {
						 // (b)-1-1.オーソリ状況取得API（IVR）.PSP ステータスコードが設定されていない場合、
						 if (JKKStringUtil.isNullBlank(pspStatusCode))
						 {
							 // 「(別記1) IVR進捗状況更新処理」を呼び出し、IVR進捗状況の更新を行う。
							executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
									kkTIvrPrgKanriKKSelect001map.getMap(), 
									apiResultMap, 
									ERR_CD_E070, 
									JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, ERR_CD_E070),
									EMPTY);
							 
							 // 次レコードの処理を行う。
							 continue;
						 }
						 // (b)-1-2.オーソリ状況取得API（IVR）.PSP ステータスコードが"1"(失敗)の場合、
						 else if (PSP_STATUS_CODE_1.equals(pspStatusCode))
						 {
							// 「(別記1) IVR進捗状況更新処理」を呼び出し、IVR進捗状況の更新を行う。
							executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
									kkTIvrPrgKanriKKSelect001map.getMap(), 
									apiResultMap, 
									ERR_CD_E080, 
									JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, ERR_CD_E080),
									EMPTY);
							
							// 次レコードの処理を行う。
							 continue;
						 }
						 // (b)-1-3.オーソリ状況取得API（IVR）.PSP ステータスコードが"0"(成功)、かつ 処理結果が"1"(失敗)の場合、
						 else if (PSP_STATUS_CODE_0.equals(pspStatusCode) && RESULT_1.equals(result))
						 {
							// 「(別記1) IVR進捗状況更新処理」を呼び出し、IVR進捗状況の更新を行う。
							executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
									kkTIvrPrgKanriKKSelect001map.getMap(), 
									apiResultMap, 
									ERR_CD_E090, 
									JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, ERR_CD_E090),
									EMPTY);
							
							//「(別記3) クレジットオーソリ実績登録処理（ＮＧ）」を呼び出し、クレジットオーソリ実績の登録を行う。
							executeKK_T_CREDIT_AUTH_JSK_NG(seikyKeiNo, apiResultMap);
							
							// 次レコードの処理を行う。
							continue;
						 }
					 }
					 // (b)-2.オーソリ状況取得API（IVR）.カード登録成功フラグが"1"(成功)、かつ
					 // オーソリ状況取得API（IVR）.PSP ステータスコードが"0"(成功)、かつ 処理結果が"0"(正常)の場合、
					 else if (SAVE_SUCCESS_FLG_1.equals(saveSuccessFlg) && PSP_STATUS_CODE_0.equals(pspStatusCode) && RESULT_0.equals(result))
					 {
						 // (b)-2-1.処理対象マップ.KEYにIVR進捗管理.請求契約番号が含まれていない場合、
						 if (!processingTargetMap.containsKey(seikyKeiNo))
						 {
							 // ・処理中の情報を処理対象マップに追加する。
							 addProcessMap(processingTargetMap, seikyKeiNo, kkTIvrPrgKanriKKSelect001map.getMap(), apiResultMap);
							 
							// 次レコードの処理を行う。
							 continue;
						 }
						 else if (processingTargetMap.containsKey(seikyKeiNo))
						 {
							 // 処理実行日時
							 String transactionDatetime = JKKStringUtil.nullToBlank( (String) apiResultMap.get(TRANSACTIONDATETIME) );
							 // ＩＶＲ処理実行日時
							 String ivrTranRunDate = JKKStringUtil.nullToBlank( kkTIvrPrgKanriKKSelect001map.getString(JBSbatKK_T_IVR_PRG_KANRI.IVR_TRAN_RUN_DATE) );
							 
							 if (JKKStringUtil.isNullBlank(transactionDatetime) || transactionDatetime.compareTo(ivrTranRunDate) < 0)
							 {
								// 「(別記1) IVR進捗状況更新処理」を呼び出し、IVR進捗状況の更新を行う。
								executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
										kkTIvrPrgKanriKKSelect001map.getMap(), 
										apiResultMap, 
										ERR_CD_E060, 
										JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, ERR_CD_E060),
										EMPTY);
										
								// 「(別記2) クレジットオーソリ実績登録処理（ＯＫ）」を呼び出し、クレジットオーソリ実績の登録を行う。
								executeKK_T_CREDIT_AUTH_JSK_OK(seikyKeiNo, apiResultMap);
								 
									// 次レコードの処理を行う。
								 continue;
							 }
							 // (b)-2-2.処理対象マップ.KEYにIVR進捗管理.請求契約番号が含まれている場合、
							 else
							 {
								 HashMap<String, Object> apiResult = processingTargetMap.get(seikyKeiNo);
								 
								 HashMap<String, Object> cachedIvrPrgMap =  (HashMap<String, Object>)apiResult.get(KEY1);
								 HashMap<String, Object> cachedIvrApiMap =  (HashMap<String, Object>)apiResult.get(KEY2);
								 
								 // 「(別記1) IVR進捗状況更新処理」を呼び出し、IVR進捗状況の更新を行う。
								 executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
										cachedIvrPrgMap, 
										cachedIvrApiMap, 
										ERR_CD_E060, 
										JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, ERR_CD_E060),
										EMPTY);
									
								 // 「(別記2) クレジットオーソリ実績登録処理（ＯＫ）」を呼び出し、クレジットオーソリ実績の登録を行う。
								 executeKK_T_CREDIT_AUTH_JSK_OK(seikyKeiNo, cachedIvrApiMap);
								 
								 // 処理対象マップに処理中の情報を再設定する。
								 UpdateProcessMap(processingTargetMap, seikyKeiNo, kkTIvrPrgKanriKKSelect001map.getMap(), apiResultMap);
								 
								// 次レコードの処理を行う。
								 continue;
							 }
						 }
					 }
				 }
				 
				 // 「(別記1) IVR進捗状況更新処理」を呼び出し、IVR進捗状況の更新を行う。
				 executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
					kkTIvrPrgKanriKKSelect001map.getMap(), 
					apiResultMap, 
					ERR_CD_E999, 
					JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, ERR_CD_E999),
					EMPTY);
					
				// 次レコードの処理を行う。
				continue;
			 }
		 }
		 
		// C.データベースのコミットを行う。
		 super.commit();
		 
		 // D.処理対象マップの件数分、以下の処理を行う。
		 processTargetMap(processingTargetMap);
		 
		 // オーソリ状況取得API（IVR）エラーが発生した場合、以下の処理を行う。
		 if(commonItem.getErrorCount() > 0)
		 {
			 outputLogMessage(JPCBatchMessageConstant.EKKB1250CW, new String[] {"オーソリ状況取得API（IVR）"});
		 }
		 
		// (3).終了処理
		 super.logPrint.printDebugLog("[E][execute]");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("[S][terminal]");
		if (null != db_KK_T_IVR_PRG_KANRI)
		{
			db_KK_T_IVR_PRG_KANRI.close();
		}
		
		if (null != db_KK_T_CREDIT_AUTH_JSK)
		{
			db_KK_T_CREDIT_AUTH_JSK.close();
		}
		
		if (null != db_KK_T_SVC_KEI)
		{
			db_KK_T_SVC_KEI.close();
		}
// ANK-4428-00-00 ADD START
		if (null != db_ZM_M_WORK_PARAM_KNRI)
		{
			db_ZM_M_WORK_PARAM_KNRI.close();
		}
// ANK-4428-00-00 ADD END
		super.logPrint.printDebugLog("[E][terminal]");
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	
	/**
	 * 地図の更新プロセス
	 * @param processingTargetMap
	 * @param seikyKeiNo
	 * @param proggressMgmtInfo
	 * @param ivrApiResult
	 */
	private void addProcessMap(
			HashMap<String, HashMap<String, Object>> processingTargetMap, 
			String seikyKeiNo, 
			HashMap<String, Object> kkTIvrPrgKanriKKSelect001map, 
			HashMap<String, Object>  ivrApiResult)
	{
		HashMap<String, Object> seikyKeiNoMap = new HashMap<String, Object>();
		seikyKeiNoMap.put(KEY1, kkTIvrPrgKanriKKSelect001map);
		seikyKeiNoMap.put(KEY2, ivrApiResult);
		 
		processingTargetMap.put(seikyKeiNo, seikyKeiNoMap);
	}
	
	
	/**
	 * 地図の更新プロセス
	 * @param processingTargetMap
	 * @param seikyKeiNo
	 * @param proggressMgmtInfo
	 * @param ivrApiResult
	 */
	private void UpdateProcessMap(
			HashMap<String, HashMap<String, Object>> processingTargetMap, 
			String seikyKeiNo, 
			HashMap<String, Object> kkTIvrPrgKanriKKSelect001map, 
			HashMap<String, Object>  ivrApiResult)
	{
		HashMap<String, Object> seikyKeiNoMap = processingTargetMap.get(seikyKeiNo);
		
		seikyKeiNoMap.put(KEY1, kkTIvrPrgKanriKKSelect001map);
		seikyKeiNoMap.put(KEY2, ivrApiResult);
	}
	
	
	/**
	 * 処理を行う。
	 * @param processingTargetMap
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	private void processTargetMap(HashMap<String, HashMap<String, Object>> processingTargetMap) throws Exception
	{
		for (Map.Entry<String, HashMap<String, Object>> entry: processingTargetMap.entrySet())
		{
			String seikyKeiNo = entry.getKey();
			
			HashMap<String, Object> ivrMap = (HashMap<String, Object>)entry.getValue();
			
			HashMap<String, Object>  kkTIvrPrgKanriKKSelect001map = (HashMap<String, Object>)ivrMap.get(KEY1);
			
			HashMap<String, Object> ivrApiResult = (HashMap<String, Object>)ivrMap.get(KEY2);
			
			if(!checkRecord(seikyKeiNo, kkTIvrPrgKanriKKSelect001map, ivrApiResult) )
			{
				// 「(別記1) IVR進捗状況更新処理」はcheckRecordメソッド内で実施
				
				// 「(別記2) クレジットオーソリ実績登録処理（ＯＫ）」を呼び出し、クレジットオーソリ実績の登録を行う。
				executeKK_T_CREDIT_AUTH_JSK_OK(seikyKeiNo, ivrApiResult);
				
				// 次レコードの処理を行う。
				continue;
			}
			
			// (b).更新対象サービス契約・お客様情報の取得処理。
			// (b)-1.サービス契約の検索を行う。
			executeKK_T_SVC_KEI_KK_SELECT_345(seikyKeiNo);
			
			JBSbatCommonDBInterface kkTsvcKeiKSelect345map = db_KK_T_SVC_KEI.selectNext();
			
			// (b)-2.上記(b)-1で検索結果が存在しない場合、
			if (JKKCommonUtil.isNull(kkTsvcKeiKSelect345map))
			{
				// 「(別記1) IVR進捗状況更新処理」を呼び出し、IVR進捗状況の更新を行う。
				executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
						kkTIvrPrgKanriKKSelect001map, 
						ivrApiResult, 
						ERR_CD_E110, 
						JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, ERR_CD_E110),
						EMPTY);
				
				// 「(別記2) クレジットオーソリ実績登録処理（ＯＫ）」を呼び出し、クレジットオーソリ実績の登録を行う。
				executeKK_T_CREDIT_AUTH_JSK_OK(seikyKeiNo, ivrApiResult);
				
				// 次レコードの処理を行う。
				continue;
			}
			
			// ＳＹＳＩＤ 
			String sysId = kkTsvcKeiKSelect345map.getString(JBSbatKK_T_SVC_KEI.SYSID);
			// サービス契約番号 
			String svcKeiNo = kkTsvcKeiKSelect345map.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
			
			// (c).請求契約番号の未来レコード存在チェック。
			// (c)-1.請求契約の検索を行う。
			executeKK_T_SEIKY_KEI_KK_SELECT_068(seikyKeiNo);
			
			// (c)-2.上記(c)-1で検索結果が存在する場合、
			if (!JKKCommonUtil.isNull(db_KK_T_SEIKY_KEI.selectNext()))
			{
				// 「(別記1) IVR進捗状況更新処理」を呼び出し、IVR進捗状況の更新を行う。
				executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
						kkTIvrPrgKanriKKSelect001map, 
						ivrApiResult, 
						ERR_CD_E100, 
						JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, ERR_CD_E100),
						EMPTY);
				
				// 「「(別記2) クレジットオーソリ実績登録処理（ＯＫ）」を呼び出し、クレジットオーソリ実績の登録を行う。
				executeKK_T_CREDIT_AUTH_JSK_OK(seikyKeiNo, ivrApiResult);
				
				// 次レコードの処理を行う。
				continue;
			}
			
			HashMap<String, Object>  kKsV0883Map = new HashMap<String, Object>();
			String retCode;
			try{
				// (d).データ登録処理。
				// (d)-1.クレジット支払方法変更一括登録サービスを呼び出す。
				HashMap<String, Object> outputMap = getKKSV0883(seikyKeiNo, sysId, svcKeiNo, kkTIvrPrgKanriKKSelect001map, ivrApiResult);
				
				// サービスの処理結果より取得
				 kKsV0883Map = (HashMap<String, Object>)outputMap.get(KKSV088301CC);
				 
				 // リターンコード
				 retCode = (String) outputMap.get(RETURN_CODE);
			}
			catch(Exception e)
			{
				// 例外発生時はリターンコードを元に異常系処理へ流す
				retCode = JCCBatchEsbInterface.RETURN_CODE_SYSTEMERR;
			}
			 // エラーコード 
			 String errCode = (String) kKsV0883Map.get(ERR_CD);
			 // 請求方法番号（クレジットカード）
			 String seikyWayNoCrecard = (String) kKsV0883Map.get(SEIKY_WAY_NO_CRECARD);
			 
			 if (!RETURN_CODE_0000.equals(retCode))
			 {
				 	// 「(別記1) IVR進捗状況更新処理」を呼び出し、IVR進捗状況の更新を行う。
					executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
							kkTIvrPrgKanriKKSelect001map, 
							ivrApiResult, 
							ERR_CD_E140, 
							JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, ERR_CD_E140),
							EMPTY);
					
					// 「(別記2) クレジットオーソリ実績登録処理（ＯＫ）」を呼び出し、クレジットオーソリ実績の登録を行う。
					executeKK_T_CREDIT_AUTH_JSK_OK(seikyKeiNo, ivrApiResult);
					
					// データベースのコミットを行い、次レコードの処理を行う。
					super.commit();
			 }
			 // (4).上記(ア)以外の場合
			 else
			 {
				 // (b)-1.クレジット支払方法変更一括登録.エラーコードが設定されている場合、
				 if (!JKKStringUtil.isNullEmpty(errCode))
				 {
					 	// 「(別記1) IVR進捗状況更新処理」を呼び出し、IVR進捗状況の更新を行う。
						executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
								kkTIvrPrgKanriKKSelect001map, 
								ivrApiResult, 
								errCode, 
								JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, errCode),
								EMPTY);
						
						// 「(別記2) クレジットオーソリ実績登録処理（ＯＫ）」を呼び出し、クレジットオーソリ実績の登録を行う。
						executeKK_T_CREDIT_AUTH_JSK_OK(seikyKeiNo, ivrApiResult);
						
						// データベースのコミットを行い、次レコードの処理を行う。
						super.commit();
				 }
				 else
				 {
					 	// 「(別記1) IVR進捗状況更新処理」を呼び出し、IVR進捗状況の更新を行う。
						executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
								kkTIvrPrgKanriKKSelect001map, 
								ivrApiResult, 
								EMPTY, 
								EMPTY,
								seikyWayNoCrecard);
						
						
						// データベースのコミットを行い、次レコードの処理を行う。
						super.commit();
				 }
			 }
		}
	}
	
	
	/**
	 * 記録チェック
	 * @param svcSeikyNo
	 * @param kkTIvrPrgKanriKKSelect001map
	 * @param ivrApiResult
	 * @throws Exception 例外
	 */
	private boolean checkRecord(String svcSeikyNo, HashMap<String, Object> kkTIvrPrgKanriKKSelect001map, HashMap<String, Object>  ivrApiResult) throws Exception
	{
		for (String[] arrayValue: checkTable)
		{
			// 必須チェック
			if (!checkMandatory((String) ivrApiResult.get(arrayValue[ITEM_INDEX])))
			{
				executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
						kkTIvrPrgKanriKKSelect001map, 
						ivrApiResult, 
						ERR_CD_E030, 
						createErrMsg(ERR_CD_E030, arrayValue[ITEM_INDEX]),
						EMPTY);
				
				return false;
			}
			// 桁数チェック
			if (!checkDigit(arrayValue[ITEM_INDEX], (String) ivrApiResult.get(arrayValue[ITEM_INDEX]), arrayValue[MIN_INDEX], arrayValue[MAX_INDEX]))
			{
				executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
						kkTIvrPrgKanriKKSelect001map, 
						ivrApiResult, 
						ERR_CD_E040, 
						createErrMsg(ERR_CD_E040, arrayValue[ITEM_INDEX]),
						EMPTY);
				
				return false;
			}
			// 属性チェック
			if (!checkAttibute(arrayValue[ITEM_INDEX], (String) ivrApiResult.get(arrayValue[ITEM_INDEX]), (String) ivrApiResult.get(arrayValue[ATTR_INDEX])))
			{
				executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
						kkTIvrPrgKanriKKSelect001map, 
						ivrApiResult, 
						ERR_CD_E050, 
						createErrMsg(ERR_CD_E050, arrayValue[ITEM_INDEX]),
						EMPTY);
				
				return false;
			}
			// 有効期限日付形式チェック
			if (!checkExpirationDateFormat(arrayValue[ITEM_INDEX], (String) ivrApiResult.get(arrayValue[ITEM_INDEX])))
			{
				executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
						kkTIvrPrgKanriKKSelect001map, 
						ivrApiResult, 
						ERR_CD_E020, 
						JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, ERR_CD_E020),
						EMPTY);
				
				return false;
			}
		}
		
		return true;
	}
	
	
	/**
	 * 　エラーコードのコード区分名称＋"（"該当する項目名を設定"）"を設定する
	 * @param cdDivName
	 * @param itemName
	 * @return String
	 * @throws Exception 例外
	 */
	private String createErrMsg(String errCd, String itemName) throws Exception
	{
		// コード区分名称取得部品(JKKBatNameStkuUtil.getCdDivName)使用
		// コード種別コード:""CD01728""(クレジット支払方法一括登録チェック)
		String cdDivName = JKKBatNameStkuUtil.getCdDivName(super.commonItem, CD_SBT_CD_CD01728, errCd);
		
		return cdDivName.concat(" (").concat(itemName).concat(")");
	}
	
	
	/**
	 * 必須のエラーチェック
	 * @param val 値
	 * @return boolean ブール値
	 */
	private boolean checkMandatory(String  val)
	{
		if (JKKStringUtil.isNullBlank(val))
		{
			return false;
		}
		
		return true;
	}
	
	
	/**
	 * 桁数変更
	 * @param itemName 項目名
	 * @param val 値
	 * @param minDigit 桁数最小
	 * @param maxDigit 桁数最大
	 * @return boolean ブール値
	 */
	private boolean checkDigit(String itemName, String val, String minDigit, String maxDigit)
	{
		if (TRANSACTIONDATETIME.equals(itemName))
		{
			val = modifyTransactionDateTime(val);
		}
		
		if (!JKKCommonUtil.isNull(val))
		{
			// 属性チェックを行う。
			if(!LengthCheck.isLength2Check(val, Integer.parseInt(minDigit), Integer.parseInt(maxDigit)))
			{
				return false;
			}
		}
		
		return true;
	}

	private String modifyTransactionDateTime(String val) {
		if(JKKStringUtil.isNullBlank(val))
		{
			return val;
		}
		
		// 日付記号("/"(半角スラッシュ)、" "(半角スペース)、":"(半角コロン))を除去した文字列を取得する。
		 String modifiedVal = val.replaceAll("/", "").replaceAll(ONE_BLANK, "").replaceAll(":", "");
		
		// ８桁以上の場合、先頭８桁を取得してチェックする。
		if (modifiedVal.length() >= 8)
		{
			modifiedVal = modifiedVal.substring(0, 8);
		}
		return modifiedVal;
	}
	
	
	/**
	 * フォーマットエラーチェック
	 * @param val
	 * @param attrVal
	 * @return boolean
	 */
	private boolean checkAttibute(String itemName, String val, String attrVal)
	{
		if (TRANSACTIONDATETIME.equals(itemName))
		{
			val = modifyTransactionDateTime(val);
		}
		
		// 属性チェックを行う。
		if (!JKKCommonUtil.isNull(val))
		{
			// 半角数字1
			if (ATTR_HLFWD_NUM_1.equals(attrVal))
			{
				if(!JKKBatCommon.isHannkakuSuuji1(val))
				{
					return false;
				}
			
			}
			// 半角英字1
			else if (ATTR_HLFWD_ALP_1.equals(attrVal))
			{
				if(!JKKBatCommon.isHannkakuEji1(val))
				{
					return false;
				}
			}
			// 半角英数字1
			else if (ATTR_HLFWD_ALPNUM_1.equals(attrVal))
			{
				if(!JKKBatCommon.isHannkakuESuuji1(val))
				{
					return false;
				}
			}
			// 半角英数字2
			else if (ATTR_HLFWD_ALPNUM_2.equals(attrVal))
			{
				if(!JKKBatCommon.isHannkakuESuuji2(val))
				{
					return false;
				}
			}
			// 年月日1
			else if (ATTR_DATE_1.equals(attrVal))
			{
				if(!DatetimeCheck.isDateCheck(val))
				{
					return false;
				}
			}
		}
		
		return true;
	}
	
	
	/**
	 * 有効期限日付形式チェック
	 * @param itemName
	 * @param val
	 * @return boolean
	 */
	private boolean checkExpirationDateFormat(String itemName, String val)
	{
		if (CARDVALIDTERM.equals(itemName))
		{
			if (!DatetimeCheck.isYearMonthCheck(modifyCrecardExpDate(val)))
			{
				return false;
			}
		}
		
		return true;
	}
	
	
	/**
	 * MMYY→20YYMM日付形式に変する
	 * @param crecardDate
	 * @return String
	 */
	private String modifyCrecardExpDate(String crecardDate)
	{
		if(JKKStringUtil.isNullBlank(crecardDate))
		{
			return crecardDate;
		}
		if(crecardDate.length() != 4)
		{
			return crecardDate;
		}
		// MMYY→20YYMM日付形式に変更後チェックする
		return  FIXED_VALUE_20 + crecardDate.substring(2, 4) + crecardDate.substring(0, 2);
	}
	
	
	/**
	 * オーソリ状況取得API（IVR）サービスを呼び出す。
	 * @param ivrReceptionNumber
	 * @return HashMap<String, Object> 
	 * @throws Exception 例外
	 */
	private HashMap<String, Object> getEKKA0120002(String ivrReceptionNumber, HashMap<String, Object> outputMap) throws Exception
	{
		HashMap<String, String> mapEKKA0120002CBSMsg = new HashMap<String, String>();

		
		// 機能コード
		mapEKKA0120002CBSMsg.put(FUNC_CODE, "1");
		// APIキー
		mapEKKA0120002CBSMsg.put(API_KEY, APL_CONST_KK_IVR_API_KEY);
		// APIパスワード
		mapEKKA0120002CBSMsg.put(API_PASSWORD, APL_CONST_KK_IVR_API_PASSWORD);
		// 受付番号
		mapEKKA0120002CBSMsg.put(RECEIPT_NO, ivrReceptionNumber);
		
		// サービスに渡す業務データを格納するMAP
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		inputMap.put(KKSV100301SC, mapEKKA0120002CBSMsg);
		
		// ユースケースIDを格納するMAP
		HashMap<Object, Object> paramMap = new HashMap<Object, Object>();
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, KKSV1003);
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, KKSV1003OP);
		
		// サービス呼び出し
		JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inputMap, outputMap);
		
// ANK-4408-01-00 DEL START
//		// サービスの処理結果が格納されたoutputMapからリターンコードを取得する。
//		String returnCode = JCCBatchEsbInterface.getReturnCode(outputMap);
//		// エラー判定
//		if(!JCCBatchEsbInterface.RETURN_CODE_SUCCESS.equals(returnCode))
//		{
//			throw new Exception("サービス層でエラーが発生しました。リターンコード：" + returnCode);
//		}
// ANK-4408-01-00 DEL END
		
		return outputMap;
	}
	
	
	/**
	 * .クレジット支払方法変更一括登録サービスを呼び出す。
	 * @param seikyKeiNo
	 * @param sysId
	 * @param svcKeiNo
	 * @param kkTIvrPrgKanriKKSelect001map
	 * @param ivrApiResult
	 * @return HashMap<String, Object>
	 * @throws Exception 例外
	 */
	private HashMap<String, Object> getKKSV0883(
			String seikyKeiNo, 
			String sysId,
			String svcKeiNo,
			HashMap<String, Object> kkTIvrPrgKanriKKSelect001map, 
			HashMap<String, Object>  ivrApiResult) throws Exception
	{
		String creCardNo = ivrApiResult.get(MASKEDCARDNUMBER).toString().replaceAll(ASTERISK_REGEX, NUMBER_0);
		
		HashMap<String, String> reqMap = new HashMap<String, String>();
		
		// サイトID
		reqMap.put("site_id", SITE_ID_4211);
		// 顧客ID
		reqMap.put("cust_id", seikyKeiNo);
		// 取扱カード会社コード
		reqMap.put("trat_card_comp_cd", (String) ivrApiResult.get(ACQID));
		// カードブランド
		reqMap.put("card_brand", (String) ivrApiResult.get(CARDBRAND));
		// クレジットカード番号
		reqMap.put("crecard_no", creCardNo);
		// クレジットカード有効期限
		reqMap.put("crecard_yk_kigen", (String) ivrApiResult.get(CARDVALIDTERM));
		// オーソリ承認番号
		reqMap.put("authori_shonin_no", EMPTY);
		// クレジットカード番号預りID
		reqMap.put("crecard_no_azkri_id", (String) ivrApiResult.get(CUSTOMERID));
		// クリアパス取引ID
		reqMap.put("clearpass_deal_id", EMPTY);
		// フィンガープリント
		reqMap.put("finger_print", EMPTY);
		// MINEO識別コード
		reqMap.put("mineo_skbt_cd", EMPTY);
		// 発送日 ※YYYYMMDD形式に変換して設定
		reqMap.put("hasso_niti", modifyTransactionDateTime( (String) ivrApiResult.get(TRANSACTIONDATETIME) ) );
		// 送付日 ※YYYYMMDD形式に変換して設定
		reqMap.put("sohu_niti", modifyTransactionDateTime( (String) ivrApiResult.get(TRANSACTIONDATETIME) ) );
		// クレジットカード有効期限(20YYMM)
		reqMap.put("ykKigen", modifyCrecardExpDate((String) ivrApiResult.get(CARDVALIDTERM)));
		// デビット・プリペイド判定結果
		reqMap.put("debit_prepaid_jdgrslt", (String) ivrApiResult.get(DEBITPREPAIDTYPE));
		// クレジットイシュア区分
		reqMap.put("crdt_issuer_div", (String) ivrApiResult.get(ISSURCLASS));
		// SYSID
		reqMap.put("sysid", sysId);
		// サービス契約番号
		reqMap.put("svc_kei_no", svcKeiNo);
		// お客様カナ名
		reqMap.put("cust_kana", (String)kkTIvrPrgKanriKKSelect001map.get(JBSbatKK_T_IVR_PRG_KANRI.CUST_KANA));
		// 異動理由コード
		reqMap.put("ido_rsn_cd", IDO_RSN_CD_IE);
		
//		// サービスに渡す業務データを格納するMAP
//		HashMap<String, Object> inputMap = new HashMap<String, Object>();
//		inputMap.put(KKSV088301CC, reqMap);
		
		// ユースケースIDを格納するMAP
		HashMap<Object, Object> paramMap = new HashMap<Object, Object>();
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, KKSV0883);
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, KKSV0883OP);
		
		// サービスの処理結果が格納されるMAP
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// サービス呼び出し
		// KKSV0883OPOperation.java でccMapへ詰め替えをしているので
		// 母体実装に合わせてreqMapをそのまま設定する
		JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, reqMap, outputMap);
		
		return outputMap;
	}
	
	
	/**
	 * 
	 * @param msgConst
	 * @param msg
	 */
	private void outputLogMessage(String msgConst, String[] msg)
	{
		// 処理レコードのレスポンスコード、レスポンス詳細をbusログに出力する。
		super.logPrint.printBusinessErrorLog(msgConst, msg);
	}
	
	
	/**
	 * ＩＶＲ進捗管理の検索を行う。
	 * @throws Exception 例外
	 */
	private void executeKK_T_IVR_PRG_KANRI_KK_SELECT_001() throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// DBアクセスを実行します
		db_KK_T_IVR_PRG_KANRI.selectBySqlDefine(paramList, KK_T_IVR_PRG_KANRI_KK_SELECT_001);
	}
	
	
	/**
	 * サービス契約の検索を行う。
	 * @throws Exception 例外
	 */
	private void executeKK_T_SVC_KEI_KK_SELECT_345(String seikyKeiNo) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		// 請求契約番号
		paramList.setValue(seikyKeiNo);
		// 運用日付
		paramList.setValue(super.opeDate);
		// 運用日付
		paramList.setValue(super.opeDate);
		
		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_345);
	}
	
	
	/**
	 * 請求契約の検索を行う。
	 * @throws Exception 例外
	 */
	private void executeKK_T_SEIKY_KEI_KK_SELECT_068(String seikyKeiNo) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		// 請求契約番号
		paramList.setValue(seikyKeiNo);
		// 運用日付
		paramList.setValue(super.opeDate);

		// DBアクセスを実行します
		db_KK_T_SEIKY_KEI.selectBySqlDefine(paramList, KK_T_SEIKY_KEI_KK_SELECT_068);
	}
	
// ANK-4428-00-00 ADD START
	/**
	 * 業務パラメータ管理の検索を行う。
	 * @throws Exception 例外
	 */
	private void executeZM_M_WORK_PARAM_KNRI_KK_SELECT_028() throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		// 業務パラメータ適用開始年月日
		paramList.setValue(super.opeDate);
		// 業務パラメータ適用終了年月日
		paramList.setValue(super.opeDate);
	
		// DBアクセスを実行します
		db_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_KK_SELECT_028);
	}
	
	/**
	 * ＩＶＲ進捗管理（有効期限切れ）のPK更新を行う。
	 * @param ivrProgressMaagementInfo IVR進捗管理情報
	 * @param ivrApiResults オーソリ状況取得API（IVR）結果
	 * @param errorCode エラーコード (値あり：失敗、値なし：成功)
	 * @param errorReason エラー理由
	 * @throws Exception 例外
	 */
	private void executeKK_T_IVR_PRG_KANRI_PK_UPDATE_YK_KIGEN_CHOK(
			HashMap<String, Object> ivrProgressMaagementInfo,
			HashMap<String, Object> ivrApiResults, 
			String errorCode,
			String errorReason) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		
		// IVRステータスコード
		setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_STAT_CD, "2");
		// IVR発信者電話番号
		setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_HASINSHA_TELNO, ivrApiResults.get(CALLERTELNO));
		// IVR着信日時
		setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_INCOMING_DATE, ivrApiResults.get(INCOMINGDATETIME));
		// カード登録成功フラグ
		String saveSuccessFlg = (String) ivrApiResults.get(SAVESUCCESSFLG);
		if (!JKKStringUtil.isNullBlank(saveSuccessFlg))
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.CARD_ADD_SUCCESS_FLG, ivrApiResults.get(SAVESUCCESSFLG));
		}
		else
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.CARD_ADD_SUCCESS_FLG, SAVE_SUCCESS_FLG_0);
		}
		// IVR処理実行日時
		String ivrTransDateTime = (String) ivrApiResults.get(TRANSACTIONDATETIME);
		if (!JKKStringUtil.isNullBlank(ivrTransDateTime))
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_TRAN_RUN_DATE, ivrTransDateTime);
		}
		else
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_TRAN_RUN_DATE, ivrProgressMaagementInfo.get(JBSbatKK_T_IVR_PRG_KANRI.IVR_TRAN_RUN_DATE));
		}
		
		// クレジットカード番号預りID
		String ivrCustomeId = (String) ivrApiResults.get(CUSTOMERID);
		if (!JKKStringUtil.isNullBlank(ivrCustomeId))
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.CRECARD_NO_AZKRI_ID, ivrCustomeId);
		}
		else
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.CRECARD_NO_AZKRI_ID, ivrProgressMaagementInfo.get(JBSbatKK_T_IVR_PRG_KANRI.CRECARD_NO_AZKRI_ID));
		}
		
		/**
		 * IVR識別ID有効期限,フローレベルID,フローレベル名称,処理結果,
		 * レスポンスコード,レスポンス詳細,クレジットカード番号(下４桁）,
		 * カード有効期限,取扱カード会社コード,デビット・プリペイド判定結果,イシュア区分,カードブランド
		 */
		String crecardNo = (String) ivrApiResults.get(MASKEDCARDNUMBER);
		
		//マスクされたカード番号が値あり、かつ4桁より大きい場合、下4桁以外の文字を除外する
		if (!JKKStringUtil.isNullBlank(crecardNo) && crecardNo.length() > 4)
		{
			crecardNo = crecardNo.substring(crecardNo.length() - 4);
		}
		
		
		String[] ivrAuthoriJokyoInfo = new String[] {
				(String) ivrApiResults.get(DISCERNMENTIDENDDATETIME),
				(String) ivrApiResults.get(FLOWLEVELID),
				(String) ivrApiResults.get(FLOWLEVELNAME),
				(String) ivrApiResults.get(RESULT),
				(String) ivrApiResults.get(RESPONSECODE),
				(String) ivrApiResults.get(RESPONSEDETAIL),
				crecardNo,
				(String) ivrApiResults.get(CARDVALIDTERM),
				(String) ivrApiResults.get(ACQID),
				(String) ivrApiResults.get(DEBITPREPAIDTYPE),
				(String) ivrApiResults.get(ISSURCLASS),
				(String) ivrApiResults.get(CARDBRAND)
		};
		// IVRオーソリ状況情報
		setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_AUTHORI_JOKYO_INFO, strJoin(ivrAuthoriJokyoInfo));
		
		// 引数.エラーコードが値ありの場合
		setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_IKT_ADD_ERR_CD, errorCode);
		setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_IKT_ADD_ERR_RSN, errorReason);
		setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.SEIKY_WAY_NO_CRECARD, ivrProgressMaagementInfo.get(JBSbatKK_T_IVR_PRG_KANRI.SEIKY_WAY_NO_CRECARD));
		setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.OUTPUT_ZUMI_FLG, OUT_FLG_0);
		
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_UK_NO, ivrProgressMaagementInfo.get(JBSbatKK_T_IVR_PRG_KANRI.IVR_UK_NO));
		
		
		// DBアクセスを実行します
		db_KK_T_IVR_PRG_KANRI.updateByPrimaryKeys(whereMap, setMap);
	}
// ANK-4428-00-00 ADD END
	
	/**
	 * ＩＶＲ進捗管理のPK更新を行う。
	 * @param ivrProgressMaagementInfo IVR進捗管理情報
	 * @param ivrApiResults オーソリ状況取得API（IVR）結果
	 * @param errorCode エラーコード (値あり：失敗、値なし：成功)
	 * @param errorReason エラー理由
	 * @param creCard 請求方法番号（クレジットカード）
	 * @throws Exception 例外
	 */
	private void executeKK_T_IVR_PRG_KANRI_PK_UPDATE(
			HashMap<String, Object> ivrProgressMaagementInfo,
			HashMap<String, Object> ivrApiResults, 
			String errorCode,
			String errorReason,
			String creCard) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		
		// IVRステータスコード
		setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_STAT_CD, ivrApiResults.get(STATUSCODE));
		// IVR発信者電話番号
		setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_HASINSHA_TELNO, ivrApiResults.get(CALLERTELNO));
		// IVR着信日時
		setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_INCOMING_DATE, ivrApiResults.get(INCOMINGDATETIME));
		// カード登録成功フラグ
// ANK-3846-13-00 ADD START
		String saveSuccessFlg = (String) ivrApiResults.get(SAVESUCCESSFLG);
		if (!JKKStringUtil.isNullBlank(saveSuccessFlg))
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.CARD_ADD_SUCCESS_FLG, ivrApiResults.get(SAVESUCCESSFLG));
		}
		else
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.CARD_ADD_SUCCESS_FLG, SAVE_SUCCESS_FLG_0);
		}
// ANK-3846-13-00 ADD END
		// IVR処理実行日時
		String ivrTransDateTime = (String) ivrApiResults.get(TRANSACTIONDATETIME);
		if (!JKKStringUtil.isNullBlank(ivrTransDateTime))
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_TRAN_RUN_DATE, ivrTransDateTime);
		}
		else
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_TRAN_RUN_DATE, ivrProgressMaagementInfo.get(JBSbatKK_T_IVR_PRG_KANRI.IVR_TRAN_RUN_DATE));
		}
		
		// クレジットカード番号預りID
		String ivrCustomeId = (String) ivrApiResults.get(CUSTOMERID);
		if (!JKKStringUtil.isNullBlank(ivrCustomeId))
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.CRECARD_NO_AZKRI_ID, ivrCustomeId);
		}
		else
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.CRECARD_NO_AZKRI_ID, ivrProgressMaagementInfo.get(JBSbatKK_T_IVR_PRG_KANRI.CRECARD_NO_AZKRI_ID));
		}
		
		/**
		 * IVR識別ID有効期限,フローレベルID,フローレベル名称,処理結果,
		 * レスポンスコード,レスポンス詳細,クレジットカード番号(下４桁）,
		 * カード有効期限,取扱カード会社コード,デビット・プリペイド判定結果,イシュア区分,カードブランド
		 */
// ANK-3846-13-00 ADD START
		String crecardNo = (String) ivrApiResults.get(MASKEDCARDNUMBER);
		
		//マスクされたカード番号が値あり、かつ4桁より大きい場合、下4桁以外の文字を除外する
		if (!JKKStringUtil.isNullBlank(crecardNo) && crecardNo.length() > 4)
		{
			crecardNo = crecardNo.substring(crecardNo.length() - 4);
		}
		
// ANK-3846-13-00 ADD END
		
		String[] ivrAuthoriJokyoInfo = new String[] {
				(String) ivrApiResults.get(DISCERNMENTIDENDDATETIME),
				(String) ivrApiResults.get(FLOWLEVELID),
				(String) ivrApiResults.get(FLOWLEVELNAME),
				(String) ivrApiResults.get(RESULT),
				(String) ivrApiResults.get(RESPONSECODE),
				(String) ivrApiResults.get(RESPONSEDETAIL),
// ANK-3846-13-00 MOD START
//				(String) ivrApiResults.get(MASKEDCARDNUMBER),
				crecardNo,
// ANK-3846-13-00 MOD END
				(String) ivrApiResults.get(CARDVALIDTERM),
				(String) ivrApiResults.get(ACQID),
				(String) ivrApiResults.get(DEBITPREPAIDTYPE),
				(String) ivrApiResults.get(ISSURCLASS),
				(String) ivrApiResults.get(CARDBRAND)
		};
		// IVRオーソリ状況情報
		setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_AUTHORI_JOKYO_INFO, strJoin(ivrAuthoriJokyoInfo));
		
		// 引数.エラーコードが値ありの場合
		if (!JKKStringUtil.isNullBlank(errorCode))
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_IKT_ADD_ERR_CD, errorCode);
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_IKT_ADD_ERR_RSN, errorReason);
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.SEIKY_WAY_NO_CRECARD, ivrProgressMaagementInfo.get(JBSbatKK_T_IVR_PRG_KANRI.SEIKY_WAY_NO_CRECARD));
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.OUTPUT_ZUMI_FLG, OUT_FLG_0);
		}
		// 引数.エラーコードが値なしの場合、
		else
		{
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_IKT_ADD_ERR_CD, ivrProgressMaagementInfo.get(JBSbatKK_T_IVR_PRG_KANRI.IVR_IKT_ADD_ERR_CD));
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_IKT_ADD_ERR_RSN, ivrProgressMaagementInfo.get(JBSbatKK_T_IVR_PRG_KANRI.IVR_IKT_ADD_ERR_RSN));
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.SEIKY_WAY_NO_CRECARD, creCard);
			setMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.OUTPUT_ZUMI_FLG, OUT_FLG_1);
		}
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue(JBSbatKK_T_IVR_PRG_KANRI.IVR_UK_NO, ivrProgressMaagementInfo.get(JBSbatKK_T_IVR_PRG_KANRI.IVR_UK_NO));


		// DBアクセスを実行します
		db_KK_T_IVR_PRG_KANRI.updateByPrimaryKeys(whereMap, setMap);
	}
	
	
	/**
	 * クレジットオーソリ実績の全項目登録(OK)を行う。
	 * @param seikyKeiNo 請求契約番号
	 * @param ivrApiResults オーソリ状況取得API（IVR）結果
	 * @throws Exception 例外
	 */
	private void executeKK_T_CREDIT_AUTH_JSK_OK(String seikyKeiNo, HashMap<String, Object> ivrApiResults) throws Exception
	{
		// 加盟店番号
		String creCardNo = (String)ivrApiResults.get(MASKEDCARDNUMBER);
		if(!JKKStringUtil.isNullBlank(creCardNo))
		{
			creCardNo = creCardNo.replaceAll(ASTERISK_REGEX, NUMBER_0);
			creCardNo = JKKBatCommon.getEncryptResult(super.commonItem, creCardNo);
		}
		
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface inMap = new JBSbatCommonDBInterface();
		// 世代登録年月日時分秒
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CREDIT_AUTH_JSK_NO, JBSbatStringUtil.padNumFormString(JBSbatOracleSeqUtil.getNextSeq(commonItem.getConnection(), SEQ_CREDIT_AUTH_JSK_NO), 12));
		// 世代登録年月日時分秒
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.GENE_ADD_DTM, JKKBatCommon.getSysDateTimeStamp());
		// 請求契約番号
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.SEIKY_KEI_NO, seikyKeiNo);
		// 請求契約世代登録年月日時分秒
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.SEIKY_KEI_GENE_ADD_DTM, ONE_BLANK);
		// 請求方法番号（クレジットカード）
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.SEIKY_WAY_NO_CRECARD, null);
		// クレジットカード世代登録年月日時分秒
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CRECARD_GENE_ADD_DTM, ONE_BLANK);
		// クレジットカード会社コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CRECARD_COMP_CD, JKKAuthoriRsltEinmConv.doAuthoriRsltEinmConv(JKKStrConst.CARD_BRAND, (String)ivrApiResults.get(CARDBRAND)));
		// オーソリ処理コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTH_TRAN_CD, FIXED_VALUE_02);
		// 売上オーソリ金額
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.SALES_AUTHORI_AMNT, FIXED_VALUE_1);
		// クレジットカード番号
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CRECARD_NO, creCardNo);
		// 加盟店番号
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.MEMBSTR_NO, null);
		// クレジットカード有効期限
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CRECARD_YK_KIGEN, modifyCrecardExpDate((String)ivrApiResults.get(CARDVALIDTERM)));
		// 有効期限変更有無
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.YK_KIGEN_CHG_UM, null);
		// オーソリフラグ
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTH_FLG, ENABLED);
		// オーソリ審査結果コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTH_SKEKKA_CD, null);
		// オーソリ承認番号
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTHORI_SHONIN_NO, null);
		// オーソリ要求コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTHORI_YOKYU_CD, PAYMENT_METHOD_CHANGE);
		// 仕向先会社コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.SHIKOSAKI_COMP_CD, ivrApiResults.get(ACQID));
		// 処理フラグ
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.TRN_FLG, PROCESSED);
		// 抽出フラグ
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CHSHT_FLG, EXTRACTED);
		// 取消コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CL_CD, UNPROCESSED);
		// クレジットカード番号預りID
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CRECARD_NO_AZKRI_ID, ivrApiResults.get(CUSTOMERID));
		// 決済ID
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.KSSAI_ID, null);
		// マーチャント取引ID
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.MERCHANT_DEAL_ID, null);
		// オーソリ結果応答コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTH_RSLT_RSP_CD, null);
		// オーソリ結果応答詳細
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTH_RSLT_RSP_DTL, null);
		
		
		// DBアクセスを実行します
		db_KK_T_CREDIT_AUTH_JSK.insertByPrimaryKeys(inMap);
	}
	
	
	/**
	 * クレジットオーソリ実績の全項目登録(NG)を行う。
	 * @param seikyKeiNo 請求契約番号
	 * @param ivrApiResults オーソリ状況取得API（IVR）結果
	 * @throws Exception 例外
	 */
	private void executeKK_T_CREDIT_AUTH_JSK_NG(String seikyKeiNo, HashMap<String, Object> ivrApiResults) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface inMap = new JBSbatCommonDBInterface();
		// クレジットオーソリ実績番号
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CREDIT_AUTH_JSK_NO, JBSbatStringUtil.padNumFormString(JBSbatOracleSeqUtil.getNextSeq(commonItem.getConnection(), SEQ_CREDIT_AUTH_JSK_NO), 12));
		// 世代登録年月日時分秒
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.GENE_ADD_DTM, JKKBatCommon.getSysDateTimeStamp());
		// 請求契約番号
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.SEIKY_KEI_NO, seikyKeiNo);
		// 請求契約世代登録年月日時分秒
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.SEIKY_KEI_GENE_ADD_DTM, ONE_BLANK);
		// 請求方法番号（クレジットカード）
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.SEIKY_WAY_NO_CRECARD, null);
		// クレジットカード世代登録年月日時分秒
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CRECARD_GENE_ADD_DTM, ONE_BLANK);
		// クレジットカード会社コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CRECARD_COMP_CD, null);
		// オーソリ処理コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTH_TRAN_CD, FIXED_VALUE_02);
		// 売上オーソリ金額
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.SALES_AUTHORI_AMNT, FIXED_VALUE_1);
		// クレジットカード番号
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CRECARD_NO, null);
		// 加盟店番号
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.MEMBSTR_NO, null);
		// クレジットカード有効期限
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CRECARD_YK_KIGEN, null);
		// 有効期限変更有無
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.YK_KIGEN_CHG_UM, null);
		// オーソリフラグ
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTH_FLG, DISABLED);
		// オーソリ審査結果コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTH_SKEKKA_CD, null);
		// オーソリ承認番号
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTHORI_SHONIN_NO, null);
		// オーソリ要求コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTHORI_YOKYU_CD, PAYMENT_METHOD_CHANGE);
		// 仕向先会社コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.SHIKOSAKI_COMP_CD, null);
		// 処理フラグ
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.TRN_FLG, PROCESSED);
		// 抽出フラグ
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CHSHT_FLG, EXTRACTED);
		// 取消コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CL_CD, UNPROCESSED);
		// クレジットカード番号預りID
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.CRECARD_NO_AZKRI_ID, null);
		// 決済ID
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.KSSAI_ID, null);
		// マーチャント取引ID
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.MERCHANT_DEAL_ID, null);
		// オーソリ結果応答コード
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTH_RSLT_RSP_CD, ivrApiResults.get(RESPONSECODE));
		// オーソリ結果応答詳細
		inMap.setValue(JBSbatKK_T_CREDIT_AUTH_JSK.AUTH_RSLT_RSP_DTL, ivrApiResults.get(RESPONSEDETAIL));
		
		
		// DBアクセスを実行します
		db_KK_T_CREDIT_AUTH_JSK.insertByPrimaryKeys(inMap);
	}
	
	
	
	/**
	 * 文字列ジョイナー
	 * @param arrVal 入力値
	 * @return String 弦
	 */
	private String strJoin(String[] arrVal)
	{
		StringBuilder sb = new StringBuilder();
		boolean firstOne = true;
		for (String val : arrVal) { 
		    if (!firstOne) 
		    {
		    	sb.append(JKKStrConst.COMMA);
		    }
	    	firstOne = false;
		    
		    if (!JKKStringUtil.isNullBlank(val))
		    {
		    	sb.append(val);
		    }
		}
		return sb.toString();
	}
}
