/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKCsmYkRsltHsFileChk
*	ソースファイル名	：JBSbatKKCsmYkRsltHsFileChk.java
*	作成者				：富士通　
*	作成日				：2024年11月07日
*＜機能概要＞
*　コンシューマ有効性結果補正ファイルチェック部品です。
*＜修正履歴＞
*	バージョン	修正日  修正者       修正内容
*	v72.00.00       2024/11/07  GDC)J.Zabala  【ANK-4606-00-00】コンシューマ有効性結果補正ファイルチェック
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatShoriIraiUtil;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatWorkParamKanriUtil;
import eo.business.util.file.JBSbatKKLST13301;
import eo.business.util.table.JBSbatCC_T_DLYD_TRN_REQ;
import eo.business.util.table.JBSbatKK_T_SEIKY_KEI;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
import eo.common.constant.JKKStrConst;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatCheckUtil;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKCsmYkRsltHsFileChk extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";

	/** テーブル(請求契約)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";
	
	/** テーブル(クレジットカード)*/
	private static final String D_TBL_NAME_KK_T_CRECARD = "KK_T_CRECARD";
	
	/** SQL定義キー(KK_SELECT_011)*/
	private static final String ZM_M_CD_NM_KANRI_KK_SELECT_011 = "KK_SELECT_011";

	/** SQL定義キー(KK_INSERT_002)*/
	private static final String ZM_T_DL_FILE_KANRI_KK_INSERT_002 = "KK_INSERT_002";
	
	/** SQL定義キー(KK_SELECT_073)*/
	private static final String KK_T_SEIKY_KEI_KK_SELECT_073 = "KK_SELECT_073";
	
	/** SQL定義キー(KK_SELECT_010)*/
	private static final String KK_T_CRECARD_KK_SELECT_010 = "KK_SELECT_010";
	
	/** SQL定義キー(KK_SELECT_011)*/
	private static final String KK_T_CRECARD_KK_SELECT_011 = "KK_SELECT_011";

	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;

	/** テーブルアクセスクラス(請求契約)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;
	
	/** テーブルアクセスクラス(クレジットカード)*/
	private JBSbatSQLAccess db_KK_T_CRECARD = null;

	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 入力定義ファイルパス */
	private static final String DIR_IND = "IND";
	
	/** 改行コード */
	private static final String LINE_SEPARATOR = "\r\n";
	
	/** ディレイド処理結果コード(完了) */
	private static final String DLYD_TRN_RSLT_CD_COMPLETE = "1";
	
	/** ディレイド処理結果コード(業務エラー) */
	private static final String DLYD_TRN_RSLT_CD_APP_ERR = "2";
	
	/** コンシューマ有効性結果補正アップロードファイル定義ファイル名 */
	private static final String KKLST13301_DEF = "KKLST13301.def";
	
	/** ファイルコード */
	private static final String FILE_CD = "0000";
	
	/** 処理管理番号：コンシューマ有効性結果補正ファイル */
	private static final String TRN_KANRI_NO = "000000000278";
	
	/** コンシューマ有効性結果補正アップロードファイルチェック結果リストファイル名編集用 */
	private static final String FILE_NM = "KKLST13302_yyyyMMddHHmmss.csv";
	
	/** ファイル名で利用するタイムスタンプのフォーマット */
	private static final String FILE_TIMESTAMP_FORMAT = "yyyyMMddHHmmss";
	
	/** コンシューマ有効性結果補正アップロードファイルチェックエラーコード */
	private HashMap<String, String> chkErrMsgList = null;
	
	/** コンシューマ有効性結果補正アップロードファイルチェック結果リストファイルオブジェクト */
	private JBSbatBusinessFileUtil kklst13302FileObj = null;
	
	/** コンシューマ有効性結果補正アップロードファイルチェック結果リストファイル件数 */
	private int kklst13302Cnt = 0;
	
	/** コンシューマ有効性結果補正オブジェクト */
	private JBSbatBusinessFileUtil kkifm970FileObj = null;
	
	/** 有効性チェック対象年月算出パラメーター */
	private static final String KK_YUKO_YM_SNST_PRM = "KK_YUKO_YM_SNST_PRM";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		System.out.println("initial - start");
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		db_KK_T_CRECARD = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_CRECARD);
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		db_KK_T_SEIKY_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_KEI); 
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
		System.out.println("initial - end");
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		System.out.println("execute - start");
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// ディレイド処理依頼情報リストを取得する
		List<HashMap<String, Object>> shoriIraiList = JCCbatShoriIraiUtil.getShoriIraiInfo(commonItem, this.jobid);
		
		// ディレイド処理依頼情報リストが取得できない場合、処理を終了する
		if (null == shoriIraiList)
		{System.out.println("execute - shoriIraiList is null");
			return null;
		}
		
		// 初回処理フラグ true:初回、false:初回以外
		boolean firstTranFlg = true;
		// クレジットカード番号預りIDチェックリスト
		HashSet<String> crecardNoAzkriIdChkList = new HashSet<String>();
		// コンシューマ有効性結果補正アップロードファイルチェックエラーコード
		chkErrMsgList = new HashMap<String, String>();
		
		// フリー項目を取得する
		String[] freeItems = freeItem.split(JKKStrConst.SEMI_COLON);
		
		// コード名称管理を取得する
		String[] selectParam001 = new String[2];
		selectParam001[0] = super.opeDate;
		selectParam001[1] = super.opeDate;
		executeZM_M_CD_NM_KANRI_KK_SELECT_011(selectParam001);
		JBSbatCommonDBInterface cdNmKanriMap = db_ZM_M_CD_NM_KANRI.selectNext();
		while (cdNmKanriMap != null)
		{
			// コンシューマ有効性結果補正アップロードファイルチェックエラーコード
			chkErrMsgList.put(cdNmKanriMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV), cdNmKanriMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM));
			
			// 次のデータを読む
			cdNmKanriMap = db_ZM_M_CD_NM_KANRI.selectNext();
		}
		
		// 有効性依頼ファイル(コンシューマ)ファイルパス
		String kkife482ContFilePath = freeItems[2];
		
		// 有効性依頼ファイル(コンシューマ)オブジェクトを生成する
		JBSbatInputFileUtil kkife482ContFileUtil = new JBSbatInputFileUtil(kkife482ContFilePath);
		kkife482ContFileUtil.setEncode(JKKStrConst.ENCODE_SJIS);						// 文字コード
		kkife482ContFileUtil.setLine(LINE_SEPARATOR);							// 改行コード
		
		// Readerオブジェクトを生成する
		kkife482ContFileUtil.createReader();
		
		// 有効性依頼ファイル(コンシューマ)の件数分繰り返す
		while (kkife482ContFileUtil.ready())
		{
			// ファイルから１レコードを取得する
			String line = kkife482ContFileUtil.readLine();
			
			if (line != null)
			{
				String[] columns = line.split(JKKStrConst.KDDI_CONMA, -1);
				
				if (columns.length >= 3)
				{
					if (isNotNullCheck(columns[2]) && !crecardNoAzkriIdChkList.contains(columns[2]))
					{
						crecardNoAzkriIdChkList.add(columns[2]);
					}
				}
			}
		}
		
		// 有効性依頼ファイル(コンシューマ)を閉じる
		if (kkife482ContFileUtil != null)
		{
			kkife482ContFileUtil.close();
		}
		
		for (HashMap<String, Object> shoriIrai : shoriIraiList)
		{
			// ディレイド処理依頼番号
			String shoriIraiNo = (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO);
			
			// 初回以外の場合
			if (!firstTranFlg)
			{
				// ディレイド処理依頼結果更新
				JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, DLYD_TRN_RSLT_CD_COMPLETE, null);
				continue;
			}
			
			firstTranFlg = false;
			
			// コンシューマ有効性結果補正アップロードファイル定義ファイル名を取得する
			String kklst13301DefName = JBSbatAplConst.getAplConstValue(DIR_IND) + KKLST13301_DEF;
			
			// チェックエラーフラグ false:エラーなし、true:チェックあり
			boolean fileChkErrFlg = false;
			
			// エラーコード
			String errCode = "";
			
			// システム日時を取得する
			String sysDateTime = JCCBatCommon.getSysDateTime();
			
			// コンシューマ有効性結果補正アップロードファイルチェック結果リストファイル名
			String fileName = FILE_NM.replaceAll(FILE_TIMESTAMP_FORMAT, sysDateTime);
			
			// コンシューマ有効性結果補正アップロードファイルチェック結果リストファイルパス
			String kklst13302FilePath = freeItems[0] + fileName;
			
			// コンシューマ有効性結果補正アップロードファイルチェック結果リストファイルオブジェクトを生成する
			kklst13302FileObj = JCCBatCommon.createBusinessFileUtil(kklst13302FilePath,
					JKKStrConst.ENCODE_SJIS, LINE_SEPARATOR, JKKStrConst.KDDI_CONMA);
			
			// コンシューマ有効性結果補正アップロードファイルチェック結果リストファイルレコード件数
			kklst13302Cnt = 0;
			
			// コンシューマ有効性結果補正ファイルのファイルパス
			String kkifm970FilePath = freeItems[1];
			
			// コンシューマ有効性結果補正ファイルオブジェクトを生成する
			kkifm970FileObj = JCCBatCommon.createBusinessFileUtil(kkifm970FilePath,
					JKKStrConst.ENCODE_SJIS, LINE_SEPARATOR, JKKStrConst.KDDI_CONMA);
			
			// 電子ファイル管理からコンシューマ有効性結果補正アップロードファイルを取得する
			String kklst13301FilePath = JCCBatCommon.searchDenshiFile(commonItem, (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.INPUT_EFILE_KANRI_NO));
			
			// コンシューマ有効性結果補正アップロードファイルオブジェクトを生成する
			JBSbatInputFileUtil kklst13301FileUtil = new JBSbatInputFileUtil(kklst13301FilePath);
			
			// コンシューマ有効性結果補正アップロード定義ファイルオブジェクトを生成する
			JBSbatDefFileUtil kklst13301FileDef = new JBSbatDefFileUtil(kklst13301DefName, kklst13301FileUtil);
			
			// アップロード期間チェック処理を行う
			String day = "";
			if (JCCBatCommon.checkDate(super.opeDate, 8))
			{
				day = super.opeDate.substring(6, 8);
			}
			if (!(day.compareTo(freeItems[3]) >= 0 && day.compareTo(freeItems[4]) <= 0))
			{
				fileChkErrFlg = true;
				errCode = "E100";
				createKklst13302(errCode, chkErrMsgList.get(errCode), "", "");
			}
			
			// エラーなしの場合
			if (!fileChkErrFlg)
			{
				// Readerオブジェクトを生成する
				kklst13301FileUtil.createReader();
				
				// コンシューマ有効性結果補正アップロードファイルの件数分繰り返す
				while (kklst13301FileUtil.ready())
				{
					// ファイルから１レコードを取得する
					String line = kklst13301FileUtil.readLine();
					
					// １レコードの情報をマップに格納する
					JBSbatServiceInterfaceMap recordMap = kklst13301FileDef.lineToObject(line, kklst13301FileUtil, 0);
					
					// 項目数不一致の場合
					if (recordMap.isInputErrorFlg())
					{
						fileChkErrFlg = true;
						errCode = "E010";
						createKklst13302(errCode, chkErrMsgList.get(errCode), "", "");
						break;
					}
				}
				
				// エラーなしの場合
				if (!fileChkErrFlg)
				{
					// Readerオブジェクトを生成する
					kklst13301FileUtil.createReader();
					
					// コンシューマ有効性結果補正アップロードファイルの件数分繰り返す
					while (kklst13301FileUtil.ready())
					{
						// ファイルから１レコードを取得する
						String line = kklst13301FileUtil.readLine();
						
						// １レコードの情報をマップに格納する
						JBSbatServiceInterfaceMap recordMap = kklst13301FileDef.lineToObject(line, kklst13301FileUtil, 0);
						
						// 請求契約番号
						String seikyKeiNo = (String)recordMap.getMap().get(JBSbatKKLST13301.SEIKY_KEI_NO);
						// クレジットカード番号預りID
						String crecardNoAzkriId = (String)recordMap.getMap().get(JBSbatKKLST13301.CRECARD_NO_AZKRI_ID);
						
						// 単項目チェックを行う
						if (isSingleCheck(recordMap))
						{
							fileChkErrFlg = true;
							
							// 次のレコードを処理する
							continue;
						}
						
						// @ クレジットカード有効性依頼ファイルへの存在チェックを行う
						if (!crecardNoAzkriIdChkList.contains(crecardNoAzkriId))
						{
							fileChkErrFlg = true;
							errCode = "E110";
							createKklst13302(errCode, chkErrMsgList.get(errCode), seikyKeiNo, crecardNoAzkriId);
							
							// 次のレコードを処理する
							continue;
						}
						
						// A 請求契約の存在チェック
						int yukoYmParam = Integer.parseInt(JKKBatWorkParamKanriUtil.getWorkParamSetteValue(commonItem, KK_YUKO_YM_SNST_PRM));
						String yukoYmOpeDate = JBSbatDateUtil.adjustMonth(opeDate, yukoYmParam);
						String[] selectParam002 = new String[2];
						selectParam002[0] = seikyKeiNo;
						selectParam002[1] = yukoYmOpeDate;
						executeKK_T_SEIKY_KEI_KK_SELECT_073(selectParam002);
						JBSbatCommonDBInterface seikyKeiMap = db_KK_T_SEIKY_KEI.selectNext();
						if (seikyKeiMap == null) 
						{
							fileChkErrFlg = true;
							errCode = "E120";
							createKklst13302(errCode, chkErrMsgList.get(errCode), seikyKeiNo, crecardNoAzkriId);
							
							// 次のレコードを処理する
							continue;
						}
						
						// B (a) の請求方法番号（クレジットカード）をもとにクレジットカードを取得する。
						String seikyWayNoCreCard = seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_WAY_NO_CRECARD);
						String[] selectParam003 = new String[1];
						selectParam003[0] = seikyWayNoCreCard;
						executeKK_T_CRECARD_KK_SELECT_010(selectParam003);
						JBSbatCommonDBInterface creCardMap003 = db_KK_T_CRECARD.selectNext();
						if (creCardMap003 == null)
						{
							fileChkErrFlg = true;
							errCode = "E130";
							createKklst13302(errCode, chkErrMsgList.get(errCode), seikyKeiNo, crecardNoAzkriId);
							
							// 次のレコードを処理する
							continue;
						}
						
						// B (b) クレジットカード番号預りIDをもとにクレジットカードを取得する。
						String[] selectParam004 = new String[1];
						selectParam004[0] = crecardNoAzkriId;
						executeKK_T_CRECARD_KK_SELECT_011(selectParam004);
						JBSbatCommonDBInterface creCardMap004 = db_KK_T_CRECARD.selectNext();
						if (creCardMap004 == null)
						{
							fileChkErrFlg = true;
							errCode = "E130";
							createKklst13302(errCode, chkErrMsgList.get(errCode), seikyKeiNo, crecardNoAzkriId);
							
							// 次のレコードを処理する
							continue;
						}
						
						// チェックOKの場合
						createKklst13302("", "", seikyKeiNo, crecardNoAzkriId);
						createKkifm970(seikyKeiNo, crecardNoAzkriId);
					}
				}
			}
			
			// コンシューマ有効性結果補正アップロードファイルチェック結果リストを閉じる
			JKKBatCommon.closeBusinessFileUtil(kklst13302FileObj);
			
			// コンシューマ有効性結果補正ファイルを閉じる
			JKKBatCommon.closeBusinessFileUtil(kkifm970FileObj);
			
			// ディレイド処理依頼結果更新
			// エラーなしの場合
			if (!fileChkErrFlg)
			{
				JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, DLYD_TRN_RSLT_CD_COMPLETE, null);
			}
			else
			{
				JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, DLYD_TRN_RSLT_CD_APP_ERR, null);
			}
			
			// 電子ファイル管理登録処理, ダウンロードファイル管理登録処理
			JBSbatCommonItem common = commonItem;										// 業務共通電文
			String fileCd = FILE_CD;													// ファイルコード
			String fileDir = freeItems[0];												// ファイルディレクトリ
			String fileDeletionDt = JBSbatDateUtil.adjustMonth(super.opeDate, 3);		// ファイル削除年月日（運用日付 + 3ヶ月）
			JKKBatCommon.createFile(common, TRN_KANRI_NO, new Long(kklst13302Cnt), fileCd, fileDir, fileName, 
					fileDeletionDt, db_ZM_T_DL_FILE_KANRI, false);
			
			// コンシューマ有効性結果補正アップロードファイルチェック結果リストを削除する
			File kklst13302File = new File(kklst13302FilePath);
			if (kklst13302File.exists())
			{
				kklst13302File.delete();
			}
			
			// エラーありの場合、コンシューマ有効性結果補正を削除する
			if (fileChkErrFlg)
			{
				File kkifm970File = new File(kkifm970FilePath);
				if (kkifm970File.exists())
				{
					kkifm970File.delete();
				}
			}
			
			// コンシューマ有効性結果補正アップロードファイルを閉じる
			if (kklst13301FileUtil != null)
			{
				kklst13301FileUtil.close();
			}
		}
		System.out.println("joshua - execute - end");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		System.out.println("joshua - terminal - start");
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_CD_NM_KANRI.close();
		db_KK_T_SEIKY_KEI.close();
		db_KK_T_CRECARD.close();
		db_ZM_T_DL_FILE_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
		System.out.println("joshua - terminal - end");
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_011)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	コード適用開始年月日
	 *		 	コード適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_CD_NM_KANRI_KK_SELECT_011(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_KK_SELECT_011);
	}

	/**
	 * SQLKEY(KK_SELECT_073)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	請求契約番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SEIKY_KEI_KK_SELECT_073(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SEIKY_KEI.selectBySqlDefine(paramList, KK_T_SEIKY_KEI_KK_SELECT_073);
	}
	
	/**
	 * SQLKEY(KK_SELECT_010)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	請求方法番号（クレジットカード）
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_CRECARD_KK_SELECT_010(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_CRECARD.selectBySqlDefine(paramList, KK_T_CRECARD_KK_SELECT_010);
	}
	
	/**
	 * SQLKEY(KK_SELECT_011)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	クレジットカード番号預りID
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_CRECARD_KK_SELECT_011(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_CRECARD.selectBySqlDefine(paramList, KK_T_CRECARD_KK_SELECT_011);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * パラメタの単項目チェックを行う。<br>
	 * @param recordMap 入力データ
	 * @return boolean false：エラーなし、true：エラーあり
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private boolean isSingleCheck(JBSbatServiceInterfaceMap recordMap) throws Exception
	{
		String errCode = "";
		String errName = "";
		boolean checkErrFlg = false;
		
		// 請求契約番号
		String seikyKeiNo = (String)recordMap.getMap().get(JBSbatKKLST13301.SEIKY_KEI_NO);
		// クレジットカード番号預りID
		String crecardNoAzkriId = (String)recordMap.getMap().get(JBSbatKKLST13301.CRECARD_NO_AZKRI_ID);
		
		// ■請求契約番号
		errName = "請求契約番号";
		
		// 必須チェック
		if (!isNotNullCheck(seikyKeiNo))
		{
			checkErrFlg = true;
			errCode = "E020";
			createKklst13302(errCode, getNullToStr(chkErrMsgList.get(errCode)) + "（" + errName + "）", seikyKeiNo, crecardNoAzkriId);
			return checkErrFlg;
		}
		// 桁数チェック
		else if (!JBSbatCheckUtil.invoke(seikyKeiNo, new String[]{"ketasuu1","10"}))
		{
			checkErrFlg = true;
			errCode = "E030";
			createKklst13302(errCode, getNullToStr(chkErrMsgList.get(errCode)) + "（" + errName + "）", seikyKeiNo, crecardNoAzkriId);
			return checkErrFlg;
		}
		// 形式チェック
		else if (!JBSbatCheckUtil.invoke(seikyKeiNo, new String[]{"hannkakuesuuji1"}))
		{
			checkErrFlg = true;
			errCode = "E040";
			createKklst13302(errCode, getNullToStr(chkErrMsgList.get(errCode)) + "（" + errName + "）", seikyKeiNo, crecardNoAzkriId);
			return checkErrFlg;
		}
		
		// ■クレジットカード番号預りID
		errName = "クレジットカード番号預りID";
		
		// 必須チェック
		if (!isNotNullCheck(crecardNoAzkriId))
		{
			checkErrFlg = true;
			errCode = "E020";
			createKklst13302(errCode, getNullToStr(chkErrMsgList.get(errCode)) + "（" + errName + "）", seikyKeiNo, crecardNoAzkriId);
			return checkErrFlg;
		}
		// 桁数チェック
		else if (!JBSbatCheckUtil.invoke(crecardNoAzkriId, new String[]{"ketasuu1","16"}))
		{
			checkErrFlg = true;
			errCode = "E030";
			createKklst13302(errCode, getNullToStr(chkErrMsgList.get(errCode)) + "（" + errName + "）", seikyKeiNo, crecardNoAzkriId);
			return checkErrFlg;
		}
		// 形式チェック
		else if (!JBSbatCheckUtil.invoke(crecardNoAzkriId, new String[]{"hannkakuesuuji1"}))
		{
			checkErrFlg = true;
			errCode = "E040";
			createKklst13302(errCode, getNullToStr(chkErrMsgList.get(errCode)) + "（" + errName + "）", seikyKeiNo, crecardNoAzkriId);
			return checkErrFlg;
		}
		
		return checkErrFlg;
	}
	
	/**
	 * コンシューマ有効性結果補正アップロードファイルチェック結果リストを出力する。<br>
	 * @param errCode エラーコード
	 * @param errNaiyo エラー内容
	 * @param seikyKeiNo 請求契約番号
	 * @param crecardNoAzkriId クレジットカード番号預りID
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void createKklst13302(String errCode, String errNaiyo, String seikyKeiNo, String crecardNoAzkriId) throws Exception
	{
		ArrayList<String> outputInfo = new ArrayList<String>();
		
		// エラーコード
		outputInfo.add(getNullToStr(errCode));
		// エラー内容
		outputInfo.add(getNullToStr(errNaiyo));
		// 請求契約番号
		outputInfo.add(getNullToStr(seikyKeiNo));
		// クレジットカード番号預りID
		outputInfo.add(getNullToStr(crecardNoAzkriId));
		
		JKKBatCommon.printDoubleQuoteBusinessFileUtil(kklst13302FileObj, outputInfo);
		
		// ファイル件数カウント
		kklst13302Cnt++;
	}
	
	/**
	 * コンシューマ有効性結果補正ファイルを出力する。<br>
	 * @param seikyKeiNo 請求契約番号
	 * @param crecardNoAzkriId クレジットカード番号預りID
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void createKkifm970(String seikyKeiNo, String crecardNoAzkriId) throws Exception
	{
		ArrayList<String> outputInfo = new ArrayList<String>();
		
		// 請求契約番号
		outputInfo.add(getNullToStr(seikyKeiNo));
		// クレジットカード番号預りID
		outputInfo.add(getNullToStr(crecardNoAzkriId));
		
		JKKBatCommon.printBusinessFileUtil(kkifm970FileObj, outputInfo);
	}
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		if (str == null || "".equals(str.trim()))
		{
			return "";
		}
		return str;
	}
	
	/**
	 * 文字列のNULLおよび空文字チェックを行います。
	 * <br>
	 * @param value チェック対象の文字列
	 * @return 文字列に値が格納されている場合はtrue、格納されていない場合はfalse
	 */
	public static boolean isNotNullCheck(String value)
	{
		if (value == null)
		{
			return false;
		}
		
		if (0 == value.trim().length())
		{
			return false;
		}
		
		return true;
	}
}
