/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACContJgshaEfileAdd
*	ソースファイル名	：JBSbatACContJgshaEfileAdd.java
*	作成者				：富士通　
*	作成日				：2013年08月05日
*＜機能概要＞
*　コンテンツ事業者間精算電子ファイル登録部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v5.00.00	2013/08/05   前田		新規作成
*	v13.00.00 2015/03/27   FJ) 寺村【OM-2015-0000297】コンテンツ事業者間精算照会:ACW01301
*	v15.00.00 2015/07/23   FJ) 岡田【OM-2015-0001129】コンテンツ事業者間精算照会:ACW01301 性能障害
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import eo.business.common.JACBatCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JACbatRknBusinessUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatACIFM241;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatCN_M_CONT;
import eo.business.util.table.JBSbatCN_M_CONT_SVC;
import eo.business.util.table.JBSbatCN_T_CONT_ISP_CHRG;
import eo.business.util.table.JBSbatCN_T_CONT_KEI;
import eo.business.util.table.JBSbatCN_T_CONT_KEI_HUKA;
import eo.business.util.table.JBSbatKK_T_KAKINS;
import eo.business.util.table.JBSbatKK_T_SEIKY_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_WRIB_SVC_KEI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCCCompressFileUtil;
import eo.common.util.JCCFileUtil;
import eo.common.util.JCCFrameworkException;
import eo.common.util.JPCDateUtil;
import eo.common.util.JPCFomatString;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.application.JCCbatFrameworkException;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACContJgshaEfileAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(コンテンツ契約)*/
	private static final String D_TBL_NAME_CN_T_CONT_KEI = "CN_T_CONT_KEI";
	
	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";
	
	//v15.00.00 DEL START
	/** SQL定義キー(AC_SELECT_003)*/
	//private static final String CN_T_CONT_KEI_AC_SELECT_003 = "AC_SELECT_003";
	
	/** SQL定義キー(AC_SELECT_004)*/
	//private static final String CN_T_CONT_KEI_AC_SELECT_004 = "AC_SELECT_004";
	//v15.00.00 DEL END
	
	//v15.00.00 ADD START
	/** SQL定義キー(AC_SELECT_005)*/
	private static final String CN_T_CONT_KEI_AC_SELECT_005 = "AC_SELECT_005";
	
	/** SQL定義キー(AC_SELECT_006)*/
	private static final String CN_T_CONT_KEI_AC_SELECT_006 = "AC_SELECT_006";
	
	/** SQL定義キー(AC_SELECT_007)*/
	private static final String CN_T_CONT_KEI_AC_SELECT_007 = "AC_SELECT_007";
	//v15.00.00 ADD END

	/** テーブルアクセスクラス(課金先)*/
	private JBSbatSQLAccess db_CN_T_CONT_KEI = null;
	
	//v15.00.00 ADD START
	/** テーブルアクセスクラス(契約先)*/
	private JBSbatSQLAccess db_CN_T_CONT_KEI_2 = null;
	//v15.00.00 ADD END

	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	//  仮コードを設定↓↓↓
	/** ファイルコード */
	private static final String FILE_CD = "0000";
	// ↑↑↑↑↑↑↑↑↑↑↑↑↑
	
	/** ファイルdef */
	private String fileDef = null;
	
	/** ファイル絶対パス */
	private String filePath = null;
	
	/** ダウンロード管理登録制御フラグ*/
	private String dlKnrFlg = null;
	
	/** ファイル保存月数*/
	private String fileSaveMonCnt = null;
	
	/** ファイル削除年月日*/
	private String fileDelYmd = null;
	
	/** 処理管理番号*/
	private String trnKanriNo = null;
	
	/** ダウンロード管理登録制御フラグが"1"（登録）*/
	private static final String DLTOUROKU = "1";

	/** メッセージ用文字（ファイルパス） */
	private static final String MESSEGI_STR = "ファイルパス";
	
	/** シーケンス接頭辞（ファイル番号） */
	private static final String SEQ_PREFIX_SEQ_FILE_NOO = "";
	
	/** シーケンス桁数（ファイル番号） */
	private static final int SEQ_LEN_SEQ_FILE_NO = 12;
	
	/** ディレイド処理依頼番号 **/
	private String dlydTrnReqNo = null;
	
	/** ジョブID **/
	private String jobId = null;
	
	/** 電子ファイル管理番号 **/
	private String efileKanriNo = null;
	
	/** 文字セット(win31j, ms932) */
	public static final String CHAR_SET_WIN31J = "Windows-31J";
	
	/** 業務パラメータID（クレジットカード事業コード　コンテンツ） */
	private static final String WKPARA_PARA_CH_CRECARD_CONTENTS = "CH_CRECARD_CONTENTS";
	
	/** データ件数 */
	private int count = 0;
	
	/** クレジットカードコンテンツ */
	private String wkparaChCrecardContens = JACStrConst.KARA_MOJI;

	/** プロパティキー(出力ファイル定義ディレクトリ) */
	public static final String AC_DIR_IND = "IND";
	
	/** ワイルドカード文字列 */
	private static final String[] ESCAPE_TARGET = {"\\", "%", "_", "％", "＿"};
	
	/** ワイルドカード置き換え文字列 */
	private static final String[] ESCAPE_TARGET_REPLACE_RESULT = {"\\\\", "\\%", "\\_", "\\％", "\\＿"};
	
	/** SQL用% */
	private static final String PERCENT = "%";
	
	/** zipファイル名 */
	private String zipName = null;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CN_T_CONT_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CN_T_CONT_KEI);
		
		//v15.00.00 ADD START
		db_CN_T_CONT_KEI_2 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CN_T_CONT_KEI);
		//v15.00.00 ADD END
		
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial][opeDate=" + super.opeDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial][freeItem=" + super.freeItem + "]");
		
		// システム時間の取得
		String sysdate = JCCBatCommon.getSysDateTime();
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial]super.onlineOpeDate[オンライン運用日]：" + super.onlineOpeDate);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial]JCCBatCommon.getSysDateTime()[システム日時]：" + sysdate);

		
		
		this.jobId = commonItem.getJobid();
		
		// フリー項目を分割する
		String[] freeItem = super.freeItem.split(JACStrConst.FREE_DIV, -1);
		this.fileDef = freeItem[0];
		this.filePath = freeItem[1];
		this.trnKanriNo = freeItem[2];
		this.dlKnrFlg = freeItem[3];
		this.zipName = JACStrConst.FILE_NM_CONT_JGSHAKSSN + "_" + sysdate + ".zip";

		if(JACStrConst.KARA_MOJI.equals(this.filePath) || null == this.filePath)
		{
			// ファイルパス未存在エラー
			String[] msgParam = new String[] {MESSEGI_STR, JACStrConst.KARA_MOJI, JACStrConst.KARA_MOJI};
			
			// コネクションのロールバック
			commonItem.getConnection().rollback();

			// ディレイド処理依頼結果更新
			JCCBatCommon.updateShoriIraiResult(commonItem, dlydTrnReqNo, JACStrConst.DLYD_TRN_RSLT_CD_SYS_ERR, null);

			// コネクションのコミット
			commonItem.getConnection().commit();

			// 業務エラーとして処理
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0430CE, msgParam);
		}
		
		
		// 業務パラメータの取得
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		wkparaChCrecardContens 	= paramUtil.getGyoumuParameter(WKPARA_PARA_CH_CRECARD_CONTENTS);

		paramUtil.close();
		
		assert this.fileDef != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][fileDef = " + this.fileDef + "]") : true;
		assert this.filePath != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][filePath = " + this.filePath + "]") : true;
		assert this.trnKanriNo != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][trnKanriNo = " + this.trnKanriNo + "]") : true;
		assert this.dlKnrFlg != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][dlKnrFlg = " + this.dlKnrFlg + "]") : true;
		
		assert this.fileSaveMonCnt != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint
						, "[L][initial][fileSaveMonCnt = " + this.fileSaveMonCnt + "]") : true;
		
		// ファイル削除年月日の取得
		if(null != this.fileSaveMonCnt)
		{
			this.fileDelYmd = JPCDateUtil.addMonth(super.opeDate, Integer.valueOf(this.fileSaveMonCnt));
			assert this.fileDelYmd != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][fileDelYmd = " + this.fileDelYmd + "]") : true;
		}
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		//申込日別集計結果の照会結果を格納
		List<JBSbatCommonDBInterface> mdbtMkcSrltList = null;
		String zipPath = null; 
		
		// コンテンツ事業者間精算ダウンロード依頼パラメータの取得
		
		String[] contJgshaDlParamList = this.getDlydShoriIrai();	
		
		// 戻り値がnullの場合は処理を終了する
		if ((contJgshaDlParamList) == null)
		{
			return null;
		}

		String[] contJgshaParam = contJgshaDlParamList[0].split(",");

		//フォーマットチェック（データ部のチェック）
		// 要素数が4でない場合
		if(contJgshaParam.length != 4)
		{
			// コネクションのロールバック
			commonItem.getConnection().rollback();

			// ディレイド処理依頼結果更新
			JCCBatCommon.updateShoriIraiResult(commonItem, dlydTrnReqNo, JACStrConst.DLYD_TRN_RSLT_CD_SYS_ERR, null);

			// コネクションのコミット
			commonItem.getConnection().commit();

			// システムエラーログの出力
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0530CE,
							new String[]{"電子ファイルに登録されているファイルの項目数(" + contJgshaParam.length + ",電子ファイル管理番号：" + efileKanriNo + ")"});
		}

		try
		{
		
			String[] contSvcCdParam = contJgshaParam[0].split(";");

			// コンテンツ事業者間精算ダウンロード依頼パラメータの取得
			mdbtMkcSrltList = this.getEfile(contSvcCdParam, contJgshaParam);
		
			//出力ファイルリストにデータを出力する。
			List<Map<String, Object>> outMapList = new ArrayList<Map<String, Object>>();

			outMapList.add(headerDataMap());

			for(JBSbatCommonDBInterface mdbtMkcStltMap : mdbtMkcSrltList)
			{
				outMapList.add(convertMap(mdbtMkcStltMap));
				count++;
			}

			//ディレイド処理依頼結果更新を行う。
			JCCBatCommon.updateShoriIraiResult(commonItem, dlydTrnReqNo, JACStrConst.DLYD_TRN_RSLT_CD_FIN, null);

			// ファイル出力用リストを返却用パラメータにセットする
			putACFile(outMapList, true);
			
			// 圧縮ファイル格納作業ディレクトリの取得とチェック
			String outDirPath = getCompTempDir();
			// 圧縮レベル
			String compLevel =  getCompLevel();
			
			//圧縮処理実行
			zipPath = JCCCompressFileUtil.compressFile(this.filePath, outDirPath, "", "0", compLevel);

			// 電子ファイル管理スキーマ登録
			String[] eFileInfo = new String[]{};

			eFileInfo = JCCBatCommon.createDenshiFile(super.commonItem, FILE_CD, zipPath, this.fileDelYmd);
			
			// ダウンロード管理制御フラグが"1"(登録)の場合、ダウンロード管理テーブルに登録する
			if(DLTOUROKU.equals(dlKnrFlg))
			{
				// ダウンロードファイル管理スキーマ登録
				insZmTDlFileKanri(eFileInfo);
			}
		}
		catch (Exception ex )
		{
			// コネクションのロールバック
			commonItem.getConnection().rollback();

			// ディレイド処理依頼結果更新
			JCCBatCommon.updateShoriIraiResult(commonItem, dlydTrnReqNo, JACStrConst.DLYD_TRN_RSLT_CD_SYS_ERR, null);

			// コネクションのコミット
			commonItem.getConnection().commit();

			throw ex;

		}
		finally
		{
			if(zipPath != null) {
				removeDir(zipPath);
			}
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * ディレイド処理依頼を取得
	 * @return strDlydList ディレイド処理依頼
	 * @throws Exception
	 */
	private String[] getDlydShoriIrai() throws Exception 
	{
		// ディレイド処理依頼取得
		ArrayList<HashMap<String, Object>> dlydShoriIraiList
					= JCCBatCommon.getShoriIraiInfo(commonItem, this.jobId);

		// ディレイド処理依頼が存在しなかった場合
		if ((dlydShoriIraiList) == null)
		{
			//コンテンツ事業者間精算電子ファイル登録処理を終了します。
			return null;
		}

		// ディレイド処理依頼情報から最後のHashMapを取得する。
		HashMap<String, Object> dlydMap = dlydShoriIraiList.get(dlydShoriIraiList.size() - 1);

		dlydTrnReqNo = dlydMap.get("DLYD_TRN_REQ_NO").toString();

		//電子ファイル管理番号
		efileKanriNo = dlydMap.get("INPUT_EFILE_KANRI_NO").toString();

		// 実ファイル存在チェック
		if (null == ((byte[])dlydMap.get("INPUT_EFILE")))
		{

			// ディレイド処理依頼結果更新
			JCCBatCommon.updateShoriIraiResult(commonItem, dlydTrnReqNo, JACStrConst.DLYD_TRN_RSLT_CD_WORK_ERR, null);

			// マイナーエラー処理
			commonItem.addErrorCount(1);

			// 実ファイル(解凍済)が存在しない場合はマイナーエラーとして処理を終了
			commonItem.getLogPrint().printBusinessErrorLog(
					JPCBatchMessageConstant.EKKB0520CE, new String[]{"電子ファイル管理テーブルの電子ファイル", "(電子ファイル管理番号:" + efileKanriNo + ")"});
			return null;
		}

		// マップから実ファイルを取得
		byte[] dlydByte = (byte[])dlydMap.get("INPUT_EFILE");
		
		// ファイルの中身を取得する
		String dlydString = new String(dlydByte, CHAR_SET_WIN31J);

		// 文字列から改行コードで分割
		String[] strDlydList = dlydString.split(JACBatCommon.chgKaigyo(JACStrConst.LINE_CRLF));

		// 配列の第１要素が空の場合、
		if (null == (strDlydList[0]))
		{
			// ディレイド処理依頼結果更新
			JCCBatCommon.updateShoriIraiResult(commonItem, dlydTrnReqNo, JACStrConst.DLYD_TRN_RSLT_CD_WORK_ERR, null);

			// マイナーエラー処理
			commonItem.addErrorCount(1);

			// 業務エラーログの出力
			commonItem.getLogPrint().printBusinessErrorLog(
					JPCBatchMessageConstant.EKKB0520CE, new String[]{"電子ファイル管理テーブルの電子ファイル内容の", "(電子ファイル管理番号:" + efileKanriNo + ")"});
			return null;
		}
		return strDlydList;
		
	}
	
	/**
	 * ダウンロードファイル管理スキーマに登録します。
	 * 
	 * @param eFileInfo 電子ファイル管理情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void insZmTDlFileKanri(String[] eFileInfo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][insZmTDlFileKanri]");

		JBSbatCommonDBInterface param = new JBSbatCommonDBInterface();
		//  1.ファイル番号
		param.setValue(JCCBatCommon.getFormatedNextSeq(super.commonItem, JACStrConst.SEQ_FILE_NO, SEQ_PREFIX_SEQ_FILE_NOO, SEQ_LEN_SEQ_FILE_NO));
		//  2.処理管理番号
		param.setValue(this.trnKanriNo);
		//  3.電子ファイル管理番号
		param.setValue(eFileInfo[0]);
		//  4.ファイル名
		param.setValue(this.zipName);
		//  5.ファイルサイズ
		param.setValue(JCCFileUtil.getFileSize(this.filePath));
		//  6.データ件数
		param.setValue(this.count);
		//  7.ファイル登録年月日時分秒
		param.setValue(eFileInfo[1]);
		//  8.ファイル削除年月日
		param.setValue(this.fileDelYmd);
		//  9.登録年月日時分秒
		param.setValue(null);
		// 10.登録オペレータアカウント
		param.setValue(null);
		// 11.更新年月日時分秒
		param.setValue(null);
		// 12.更新オペレータアカウント
		param.setValue(null);
		// 13.削除年月日時分秒
		param.setValue(null);
		// 14.削除オペレータアカウント
		param.setValue(null);
		// 15.無効フラグ
		param.setValue(null);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][insZmTDlFileKanri][param = " + param.getList().toString() + "]");

		// SQL実行
		executeZM_T_DL_FILE_KANRI_PKINSERT(param.getList().toArray());

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][insZmTDlFileKanri]");
	}

	/**
	 * 格納用リストにヘッダを追加
	 * @return headerDataMap
	 * @throws Exception 
	 */
	private Map<String, Object> headerDataMap() throws Exception
	{
		Map<String, Object> headerDataMap = new HashMap<String, Object>();
		
		headerDataMap.put(JBSbatACIFM241.SVC_KEI_NO, "サービス契約番号");
		headerDataMap.put(JBSbatACIFM241.SEIKY_KEI_NO, "請求契約番号");
		headerDataMap.put(JBSbatACIFM241.EOID, "ｅｏ−ＩＤ");
		headerDataMap.put(JBSbatACIFM241.SYSID, "ＳＹＳＩＤ");
		headerDataMap.put(JBSbatACIFM241.TEST_ID_FLG, "テストID");
		headerDataMap.put(JBSbatACIFM241.CONT_SVC_CD, "サービスコード");
		headerDataMap.put(JBSbatACIFM241.CONT_SVC_NM, "サービス名称");
		headerDataMap.put(JBSbatACIFM241.CONT_CD, "コンテンツコード");
		headerDataMap.put(JBSbatACIFM241.CONT_NM, "コンテンツ名称");
		headerDataMap.put(JBSbatACIFM241.CONT_KEI_STA_DTM, "契約開始日時");
		headerDataMap.put(JBSbatACIFM241.CONT_KEI_END_DTM, "契約解除日時");
		headerDataMap.put(JBSbatACIFM241.KSSAI_WAY, "決済方法");
		headerDataMap.put(JBSbatACIFM241.SUPPLIER, "仕入先");
		headerDataMap.put(JBSbatACIFM241.CONT_TANKA, "単価");
		headerDataMap.put(JBSbatACIFM241.CONT_BUY_CNT, "数量");
		headerDataMap.put(JBSbatACIFM241.CHRG_AMNT, "金額");
		headerDataMap.put(JBSbatACIFM241.TEISE_KINGAKU, "訂正金額");
		headerDataMap.put(JBSbatACIFM241.SVC_STA_YMD, "サービス開始日");
		headerDataMap.put(JBSbatACIFM241.KEI_CNC_YMD, "ＦＰ契約日");
		headerDataMap.put(JBSbatACIFM241.VIRUSBUSTER_ID, "ＶＢ−ＩＤ");
		headerDataMap.put(JBSbatACIFM241.TRENDMICRO_CEREAL_NO, "シリアル番号");
	
		return headerDataMap;
	}
	
	/**
	 * ファイル出力型式に変換する。
	 * @param dateMap
	 * @return convertMap
	 * @throws Exception
	 */
	private Map<String, Object> convertMap(JBSbatCommonDBInterface dateMap) throws Exception
	{
		Map<String, Object> convertMap = new HashMap<String, Object>();
		convertMap.put(JBSbatACIFM241.SVC_KEI_NO, dateMap.getString(JBSbatKK_T_KAKINS.SVC_KEI_NO));
		convertMap.put(JBSbatACIFM241.SEIKY_KEI_NO, dateMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO));
		convertMap.put(JBSbatACIFM241.EOID, dateMap.getString(JBSbatCK_T_CUST.EOID));
		convertMap.put(JBSbatACIFM241.SYSID, dateMap.getString(JBSbatCN_T_CONT_KEI.SYSID));
		convertMap.put(JBSbatACIFM241.TEST_ID_FLG, JACStrConst.KARA_MOJI);
		convertMap.put(JBSbatACIFM241.CONT_SVC_CD, dateMap.getString(JBSbatCN_T_CONT_KEI.CONT_SVC_CD));
		convertMap.put(JBSbatACIFM241.CONT_SVC_NM, dateMap.getString(JBSbatCN_M_CONT_SVC.CONT_SVC_NM));
		convertMap.put(JBSbatACIFM241.CONT_CD, dateMap.getString(JBSbatCN_T_CONT_KEI.CONT_CD));
		convertMap.put(JBSbatACIFM241.CONT_NM, dateMap.getString(JBSbatCN_M_CONT.CONT_NM));
		convertMap.put(JBSbatACIFM241.CONT_KEI_STA_DTM, JPCFomatString.formatDatetimeSS(dateMap.getString(JBSbatCN_T_CONT_KEI.CONT_KEI_STA_DTM)));
		convertMap.put(JBSbatACIFM241.CONT_KEI_END_DTM, JPCFomatString.formatDatetimeSS(dateMap.getString(JBSbatCN_T_CONT_KEI.CONT_KEI_END_DTM)));
		convertMap.put(JBSbatACIFM241.KSSAI_WAY, dateMap.getString("KSSAI_WAY"));
		convertMap.put(JBSbatACIFM241.SUPPLIER, dateMap.getString(JBSbatCN_T_CONT_KEI.SUPPLIER));
		convertMap.put(JBSbatACIFM241.CONT_TANKA, JPCFomatString.formatNumber(dateMap.getString(JBSbatCN_T_CONT_ISP_CHRG.CONT_TANKA)));
		convertMap.put(JBSbatACIFM241.CONT_BUY_CNT, JPCFomatString.formatNumber(dateMap.getString(JBSbatCN_T_CONT_ISP_CHRG.CONT_BUY_CNT)));
		convertMap.put(JBSbatACIFM241.CHRG_AMNT, JPCFomatString.formatNumber(dateMap.getString(JBSbatCN_T_CONT_ISP_CHRG.CHRG_AMNT)));
		convertMap.put(JBSbatACIFM241.TEISE_KINGAKU, JPCFomatString.formatNumber(dateMap.getString("TEISE_KINGAKU")));
		convertMap.put(JBSbatACIFM241.SVC_STA_YMD, JPCFomatString.formatDate(dateMap.getString(JBSbatKK_T_SVC_KEI.SVC_STA_YMD)));
		convertMap.put(JBSbatACIFM241.KEI_CNC_YMD, JPCFomatString.formatDate(dateMap.getString(JBSbatKK_T_WRIB_SVC_KEI.KEI_CNC_YMD)));
		convertMap.put(JBSbatACIFM241.VIRUSBUSTER_ID, dateMap.getString(JBSbatCN_T_CONT_KEI_HUKA.VIRUSBUSTER_ID));
		convertMap.put(JBSbatACIFM241.TRENDMICRO_CEREAL_NO, dateMap.getString(JBSbatCN_T_CONT_KEI_HUKA.TRENDMICRO_CEREAL_NO));
		return convertMap;
	}
	
	/**
	 * ファイルの出力処理
	 * @param fileType 出力ファイルタイプ
	 * @param dataList 出力データ
	 * @param doubleFlg
	 * @return 出力ファイル名
	 * @throws Exception 例外
	 */
	private void putACFile(List<Map<String, Object>> dataList, boolean doubleFlg) throws Exception
	{
		// 出力ファイル形式設定
		JBSbatOutputFileUtil outFile = new JBSbatOutputFileUtil(this.filePath);
		outFile.setEncode(JACStrConst.ENCODE_MS932);		// 文字コード
		outFile.setLine(JACStrConst.LINE_CRLF);			// 改行コード

		try
		{
			outFile.createWriter();
		}
		catch (IOException ex)
		{
			commonItem.getConnection().rollback();
			commonItem.getLogPrint().printBusinessErrorLog("コンテンツ事業者間精算データ作成失敗");
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0500CE, 
					new String[] {"(ファイルパス：" + this.filePath + ",ディレイド処理依頼番号：" + dlydTrnReqNo + ")"});
		}
		
		try
		{
			
			String defFile = this.rnktPath(JBSbatAplConst.getAplConstValue(AC_DIR_IND), this.fileDef);
			
			JBSbatDefFileUtil defDataUtil = new JBSbatDefFileUtil(defFile, outFile);

			JBSbatServiceInterfaceMap outDataMap = null;
			String data = JACStrConst.KARA_MOJI;
			
			outFile.setEncode(JACStrConst.ENCODE_MS932);		// 文字コード再セット
			outFile.setLine(JACStrConst.LINE_CRLF);				// 改行コード再セット
			
			for (Map<String, Object> dataMap : dataList)
			{
				outDataMap = new JBSbatServiceInterfaceMap();

				for (String key : dataMap.keySet())
				{
					data = (String)dataMap.get(key);
					
					outDataMap.set(key, data);
				}

				outFile.print(outDataMap, defDataUtil);
			}

		}
		catch (IOException ex)
		{
			commonItem.getConnection().rollback();
			commonItem.getLogPrint().printBusinessErrorLog("コンテンツ事業者間精算データ書き込み失敗");
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0970CE, new String[] {"ディレイド処理依頼番号：" + dlydTrnReqNo});
		}
		finally
		{
			// ファイルのクローズ
			try
			{
				outFile.close();
			}
			catch (IOException ex2)
			{
				commonItem.getConnection().rollback();
				super.logPrint.printDebugLog("ファイル書込みオブジェクトのクローズ失敗:" + filePath);
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0970CE, new String[] {"ディレイド処理依頼番号：" + dlydTrnReqNo});
			}
		}
		
	}
	
	/**
	 * パス文字列の連結
	 * 連結するパス文字列にパス区切り文字の設定を制御する。
	 * @param path1 パス文字列
	 * @param path2 パス文字列
	 * @return 連結したパス文字列
	 */
	private String rnktPath(String path1, String path2)
	{
		String pathDlmt = JACStrConst.SLASH;
		if (path1.indexOf(JACStrConst.YEN_SIGN) > -1 || path2.indexOf(JACStrConst.YEN_SIGN) > -1)
		{
			pathDlmt = JACStrConst.YEN_SIGN;
		}
		if (!path1.endsWith(pathDlmt))
		{
			return path1 + pathDlmt + path2;
		}
		return path1 + path2;
	}
	
	/**
	 * LIKE検索に設定する値に対して、ワイルドカードが含まれている場合、
	 * ESCAPE文字列を追加して値を返却します。
	 * 
	 * @param value ：設定値
	 * @return      : 変換後文字列
	 */
	public static String replaceLikeValue(Object value)
	{
		if(value == null)
		{
			return null;
		}
		
		String returnValue = value.toString();
		for(int index = 0; index < ESCAPE_TARGET.length; index++)
		{
			returnValue = returnValue.replace(ESCAPE_TARGET[index], ESCAPE_TARGET_REPLACE_RESULT[index]);
		}
		return returnValue;
	}
	
	/**
	 * アプリケーションプロパティファイルからの圧縮ファイル格納作業ディレクトリの
	 * 取得とチェック
	 * <br>
	 * @return 圧縮ファイル格納作業ディレクトリ
	 * @throws JCCbatFrameworkException バッチフレームワーク例外
	 */
	private String getCompTempDir() throws JCCbatFrameworkException
	{
		// プロパティファイルから圧縮ファイル格納作業ディレクトリの読み込み
		String outDirPath = JCCBatCommon.getApplicationConst("DIR_COMP_TMP");
		if(outDirPath == null)
		{
			throw new JCCbatFrameworkException("APLConst.propertiesに圧縮ファイル格納作業ディレクトリの定義がありません。");				
		}
		
		// 圧縮ファイル格納作業ディレクトリのFileインスタンスの生成
		File f_outDirPath = new  File(outDirPath);
		// 圧縮ファイル格納作業ディレクトリのチェック(存在チェック、ディレクトリチェック、書き込み権限チェック)
		if(!f_outDirPath.exists() || !f_outDirPath.isDirectory() || !f_outDirPath.canWrite())
		{
			throw new JCCbatFrameworkException("圧縮ファイル格納作業ディレクトリに書き込めません。値：" + outDirPath);
		}
		
		return outDirPath;
	}
	
	/**
	 * アプリケーションプロパティファイルから圧縮レベルを取得する。
	 * <br>
	 * @return 圧縮レベル
	 * @throws JCCbatFrameworkException バッチフレームワーク例外
	 */
	private String getCompLevel() throws JCCbatFrameworkException 
	{
		// 圧縮レベル
		String compLevel = JCCBatCommon.getApplicationConst("COMP_LEVEL");
		if (!JCCBatCommon.isNotNull(compLevel))
		{
			throw new JCCbatFrameworkException("APLConst.propertiesに圧縮レベルの定義がありません。");
		}
		
		// 圧縮レベル（範囲チェック用）
		int intCompLevel = 0;
		try
		{
			intCompLevel = Integer.parseInt(compLevel);
		}
		catch (NumberFormatException e)
		{
			throw new JCCbatFrameworkException("圧縮レベルの定義が不正です。");
		}
		
		// 圧縮レベルの範囲確認
		if (intCompLevel < 1 || 9 < intCompLevel)
		{
			throw new JCCbatFrameworkException("圧縮レベルが範囲外の設定です。");
		}
		return compLevel;
	}
	
	/**
	 * 引数のファイルが残っている場合、そのファイルが入っているディレクトリごと削除する。
	 * @param filePath 削除対象のファイルパス
	 * @throws JCCFrameworkException
	 */
	private void removeDir(String filePath) throws JCCFrameworkException
	{
		// 作業ディレクトリが残っていた場合、削除
		if(filePath != null)
		{
			File f_dir = new File(new File(filePath).getParent());
			if(f_dir.exists())
			{
				JCCFileUtil.removeDir(new File(filePath).getParent());
			}

		}
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CN_T_CONT_KEI.close();
		//v15.00.00 ADD START
		db_CN_T_CONT_KEI_2.close();
		//v15.00.00 ADD END
		db_ZM_T_DL_FILE_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");

	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/** 
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	ファイル番号				FILE_NO
	 *		 	処理管理番号				TRN_KANRI_NO
	 *		 	電子ファイル管理番号				EFILE_KANRI_NO
	 *		 	ファイル名				FILE_NM
	 *		 	ファイルサイズ				FILE_SIZE
	 *		 	データ件数				DATA_CNT
	 *		 	ファイル登録年月日時分秒				FILE_ADD_DTM
	 *		 	ファイル削除年月日				FILE_DEL_YMD
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("FILE_NO", setParam[0]);
		setMap.setValue("TRN_KANRI_NO", setParam[1]);
		setMap.setValue("EFILE_KANRI_NO", setParam[2]);
		setMap.setValue("FILE_NM", setParam[3]);
		setMap.setValue("FILE_SIZE", setParam[4]);
		setMap.setValue("DATA_CNT", setParam[5]);
		setMap.setValue("FILE_ADD_DTM", setParam[6]);
		setMap.setValue("FILE_DEL_YMD", setParam[7]);
		setMap.setValue("ADD_DTM", setParam[8]);
		setMap.setValue("ADD_OPEACNT", setParam[9]);
		setMap.setValue("UPD_DTM", setParam[10]);
		setMap.setValue("UPD_OPEACNT", setParam[11]);
		setMap.setValue("DEL_DTM", setParam[12]);
		setMap.setValue("DEL_OPEACNT", setParam[13]);
		setMap.setValue("MK_FLG", setParam[14]);
	
		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.insertByPrimaryKeys(setMap);
	}

	/**
	 * 登録する電子ファイルを取得します。
	 * @param paramContSvcCdList
	 * @param paramlist
	 * @return selectList
	 * @throws Exception
	 */
	private List<JBSbatCommonDBInterface> getEfile(String[] paramContSvcCdList, String[] paramlist) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getSeikyKei]");

		//v15.00.00 ADD START
		// SQL定義キーを指定してSQL文を取得
		String sqlBefore = db_CN_T_CONT_KEI.getSql(CN_T_CONT_KEI_AC_SELECT_005);

		// 加工対象の文字列
		String strBefore = "CONT_SVC_CD IN (?)";

		String param = "?";

		// IN句の対象数を変更（CONT_SVC_CD）
		StringBuffer paraAfter = new StringBuffer();
		for(int i = 0; paramContSvcCdList.length > i; i++)
		{
			if(i > 0)
			{
				paraAfter.append(JACStrConst.COMMA);
			}

			paraAfter.append(param);
		}
		String strAfter = strBefore.replace(param, paraAfter.toString());


		// SQLを置き換える
		HashMap<String, String> target = new HashMap<String, String>();
		target.put(strBefore, strAfter);

		String sqlAfter = JACbatRknBusinessUtil.ckanUmeMojiHanyo(sqlBefore, target);

		//SQL定義キーを指定し、加工したSQLをセット
		db_CN_T_CONT_KEI.setSqlMap(CN_T_CONT_KEI_AC_SELECT_005, sqlAfter);

		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface paraList = new JBSbatCommonDBInterface();
		
		// CN_T_CONT_ISP_CHRG CN0081 パラメータの設定
		// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間開始年月日を指定)
		paraList.setValue(paramlist[2]);										// 画面．対象期間開始日
		// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
		paraList.setValue(paramlist[3]);										// 画面．対象期間終了日
		// CN_T_CONT_KEI CN0021 パラメータの設定
		// CONT_SVC_CDパラメータの設定(ＫＥＹ＿コンテンツサービスコード)
		for(int i = 0; paramContSvcCdList.length > i; i++)
		{
			paraList.setValue(paramContSvcCdList[i]);								// 画面．コンテンツサービスコード
		}
		// CHRG_TRAN_YMDパラメータの設定(ＫＥＹ＿対象期間開始年月日を指定)
		paraList.setValue(paramlist[2]);										// 画面．対象期間開始日
		// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
		paraList.setValue(paramlist[3]);										// 画面．対象期間終了日
		// CN_T_CONT_CRECA_CHRG CN0071 パラメータの設定
		// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間開始年月日を指定)
		paraList.setValue(paramlist[2]);										// 画面．対象期間開始日
		// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
		paraList.setValue(paramlist[3]);										// 画面．対象期間終了日
		// KK_M_CRECARD_COMP KK0531 パラメータの設定
		// CRECARD_JIGYO_CD パラメータの設定(WK_PARA_CH_CRECARD_CONTENTS)
		paraList.setValue(wkparaChCrecardContens);								// クレジットカード事業コード
		// CRECARD_COMP_TSTAYMD パラメータの設定(運用日を指定)
		paraList.setValue(super.onlineOpeDate);									// クレジットカード会社適用開始年月日
		// CRECARD_COMP_TENDYMD パラメータの設定(運用日を指定)
		paraList.setValue(super.onlineOpeDate);									// クレジットカード会社適用終了年月日
		// CN_T_CONT_KEI CN0021 パラメータの設定
		// CONT_SVC_CDパラメータの設定(ＫＥＹ＿コンテンツサービスコード)
		for(int i = 0; paramContSvcCdList.length > i; i++)
		{
			paraList.setValue(paramContSvcCdList[i]);								// 画面．コンテンツサービスコード
		}
		// CN_T_CONT_CRECA_CHRG CN0071 パラメータの設定
		// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間開始年月日を指定)
		paraList.setValue(paramlist[2]);										// 画面．対象期間開始日
		// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
		paraList.setValue(paramlist[3]);										// 画面．対象期間終了日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getEfile]sqlBefore：" + sqlBefore);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getEfile]sqlAfter：" + sqlAfter);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getEfile]paraList：" + paraList.getList().toString());

		// 請求データ取得
		executeCN_T_CONT_KEI_AC_SELECT_005(paraList.getList().toArray());
		
		List<JBSbatCommonDBInterface> selectList = new ArrayList<JBSbatCommonDBInterface>();
		
		JBSbatCommonDBInterface kakinMap = new JBSbatCommonDBInterface();
		
		kakinMap = db_CN_T_CONT_KEI.selectNext();
		while(kakinMap != null)
		{
			// ＤＢアクセス用のパラメータ定義
			JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
			
			// KAKINS_TSTAYMD パラメータの設定(運用日を指定)
			dbList.setValue(super.onlineOpeDate);									// 課金開始終了年月日
			// RSV_APLY_YMD パラメータの設定(運用日を指定)
			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
			// CONT_SVC_TSTAYMD パラメータの設定(運用日を指定)
			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス開始年月日
			// CONT_SVC_TENDYMD パラメータの設定(運用日を指定)
			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス終了年月日
			// KAKINS_TSTAYMD パラメータの設定(運用日を指定)
			dbList.setValue(super.onlineOpeDate);									// 課金開始終了年月日
			// RSV_APLY_YMD パラメータの設定(運用日を指定)
			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
			// RSV_APLY_YMD パラメータの設定(運用日を指定)
			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
			// RSV_APLY_YMD パラメータの設定(運用日を指定)
			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
			// RSV_APLY_YMD パラメータの設定(運用日を指定)
			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
			// CONT_KEI_NO パラメータの設定
			dbList.setValue(kakinMap.getString(JBSbatCN_T_CONT_KEI.CONT_KEI_NO));	// コンテンツ契約番号
			
			// コンテンツ名が設定されている場合
			if(paramlist[1] != null && !"".equals(paramlist[1]))
			{
				// CONT_NM パラメータの設定(コンテンツ名を指定)
				dbList.setValue(PERCENT + replaceLikeValue(paramlist[1]) + PERCENT);	// コンテンツ名
			
				//契約情報取得
				executeCN_T_CONT_KEI_AC_SELECT_006(dbList.getList().toArray());
			}
			else
			{
				//契約情報取得
				executeCN_T_CONT_KEI_AC_SELECT_007(dbList.getList().toArray());
			}
			
			JBSbatCommonDBInterface selectMap = new JBSbatCommonDBInterface();
			
			selectMap = db_CN_T_CONT_KEI_2.selectNext();
			while(selectMap != null)
			{
				// 取得した請求データを契約情報に設定
				selectMap.setValue(JBSbatKK_T_KAKINS.SVC_KEI_NO, kakinMap.getString(JBSbatKK_T_KAKINS.SVC_KEI_NO));
				selectMap.setValue("KSSAI_WAY", kakinMap.getString("KSSAI_WAY"));
				selectMap.setValue(JBSbatCN_T_CONT_ISP_CHRG.CONT_TANKA, kakinMap.getString(JBSbatCN_T_CONT_ISP_CHRG.CONT_TANKA));
				selectMap.setValue(JBSbatCN_T_CONT_ISP_CHRG.CONT_BUY_CNT, kakinMap.getString(JBSbatCN_T_CONT_ISP_CHRG.CONT_BUY_CNT));
				selectMap.setValue(JBSbatCN_T_CONT_ISP_CHRG.CHRG_AMNT, kakinMap.getString(JBSbatCN_T_CONT_ISP_CHRG.CHRG_AMNT));
				selectMap.setValue("TEISE_KINGAKU", JPCFomatString.formatNumber(kakinMap.getString("TEISE_KINGAKU")));
				
				selectList.add(selectMap);
				
				selectMap = db_CN_T_CONT_KEI_2.selectNext();
			}
			kakinMap = db_CN_T_CONT_KEI.selectNext();
		}
		//v15.00.00 ADD END

//v15.00.00 DEL START
//// v13.00.00 2015/03/27 MOD START
////		if(paramlist[1] != null)
//		if(paramlist[1] != null && !"".equals(paramlist[1]))
//// v13.00.00 2015/03/27 MOD END
//		{
//			// SQL定義キーを指定してSQL文を取得
//			String sqlBf = db_CN_T_CONT_KEI.getSql(CN_T_CONT_KEI_AC_SELECT_003);
//
//			// 加工対象の文字列
//			String ckn1Bf = "CN0021.CONT_SVC_CD IN (?)";
//
//			String para = "?";
//
//
//			// IN句の対象数を変更（CONT_SVC_CD）
//			StringBuffer paraAf = new StringBuffer();
//			for(int i = 0; paramContSvcCdList.length > i; i++)
//			{
//				if(i > 0)
//				{
//					paraAf.append(JACStrConst.COMMA);
//				}
//
//				paraAf.append(para);
//			}
//			String ckn1Af = ckn1Bf.replace(para, paraAf.toString());
//
//
//			// SQLを置き換える
//			HashMap<String, String> tgt = new HashMap<String, String>();
//			tgt.put(ckn1Bf, ckn1Af);
//
//			String sqlAf = JACbatRknBusinessUtil.ckanUmeMojiHanyo(sqlBf, tgt);
//
//			//SQL定義キーを指定し、加工したSQLをセット
//			db_CN_T_CONT_KEI.setSqlMap(CN_T_CONT_KEI_AC_SELECT_003, sqlAf);
//
//			// ＤＢアクセス用のパラメータ定義
//			JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
//
//			// 対象キーの設定
//
//// v13.00.00 2015/03/27 MOD START
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			dbList.setValue(super.onlineOpeDate);									// 課金開始終了年月日
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス開始年月日
////			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス終了年月日
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			dbList.setValue(super.onlineOpeDate);									// 課金開始終了年月日
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			for(int i = 0; paramContSvcCdList.length > i; i++)
////			{
////				dbList.setValue(paramContSvcCdList[i]);								// 画面．コンテンツサービスコード
////			}
////
////			dbList.setValue(paramlist[3] + "999999");								// 画面．対象期間終了日
////			dbList.setValue(paramlist[2] + "000000");								// 画面．対象期間開始日
////			dbList.setValue(PERCENT + replaceLikeValue(paramlist[1]) + PERCENT);	// サービス名
////			
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス開始年月日
////			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス終了年月日
////			dbList.setValue(wkparaChCrecardContens);								// クレジットカード事業コード
////			dbList.setValue(super.onlineOpeDate);									// クレジットカード会社適用開始年月日
////			dbList.setValue(super.onlineOpeDate);									// クレジットカード会社適用終了年月日
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			
////			for(int i = 0; paramContSvcCdList.length > i; i++)
////			{
////				dbList.setValue(paramContSvcCdList[i]);								// 画面．コンテンツサービスコード
////			}
////
////			dbList.setValue(paramlist[3] + "999999");								// 画面．対象期間終了日
////			dbList.setValue(paramlist[2] + "000000");								// 画面．対象期間開始日
////			dbList.setValue(PERCENT + replaceLikeValue(paramlist[1]) + PERCENT);	// サービス名
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
//			
//			// -------------------------------------------------- //
//			// 最終的なSELECT句
//			// -------------------------------------------------- //
//			// KK_T_SVC_KEI KK0081 パラメータの設定
//			// RSV_APLY_YMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
//			
//			// -------------------------------------------------- //
//			// コンテンツISP課金のSELECT句
//			// -------------------------------------------------- //
//			// KK_T_SEIKY_KEI KK0491 パラメータの設定
//			// RSV_APLY_YMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
//			// KK_T_WRIB_SVC_KEI KK0451 パラメータの設定
//			// RSV_APLY_YMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
//			
//			// CN_T_CONT_ISP_CHRG CN0081 パラメータの設定
//			// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間開始年月日を指定)
//			dbList.setValue(paramlist[2]);											// 画面．対象期間開始日
//			// CHRG_TRAN_YMDCHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
//			dbList.setValue(paramlist[3]);											// 画面．対象期間終了日
//			// CHRG_TRAN_YMDパラメータの設定(ＫＥＹ＿対象期間開始年月日を指定)
//			dbList.setValue(paramlist[2]);											// 画面．対象期間開始日
//			// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
//			dbList.setValue(paramlist[3]);											// 画面．対象期間終了日
//			// KAKINS_TSTAYMD,KAKINS_TENDYMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// 課金開始終了年月日
//			// CN_T_CONT_KEI CN0021 パラメータの設定
//			// CONT_SVC_CDパラメータの設定(ＫＥＹ＿コンテンツサービスコード)
//			for(int i = 0; paramContSvcCdList.length > i; i++)
//			{
//				dbList.setValue(paramContSvcCdList[i]);								// 画面．コンテンツサービスコード
//			}
//			// CONT_NM パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
//			dbList.setValue(PERCENT + replaceLikeValue(paramlist[1]) + PERCENT);	// サービス名
//			
//			// -------------------------------------------------- //
//			// コンテンツクレカ課金のSELECT句
//			// -------------------------------------------------- //
//			// KK_M_CRECARD_COMP KK0531 パラメータの設定
//			// CRECARD_JIGYO_CD パラメータの設定(WK_PARA_CH_CRECARD_CONTENTS)
//			dbList.setValue(wkparaChCrecardContens);								// クレジットカード事業コード
//			// CRECARD_COMP_TSTAYMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// クレジットカード会社適用開始年月日
//			// CRECARD_COMP_TENDYMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// クレジットカード会社適用終了年月日
//			// CN_T_CONT_CRECA_CHRG CN0071 パラメータの設定
//			// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間開始年月日を指定)
//			dbList.setValue(paramlist[2]);											// 画面．対象期間開始日
//			// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
//			dbList.setValue(paramlist[3]);											// 画面．対象期間終了日
//			// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間開始年月日を指定)
//			dbList.setValue(paramlist[2]);											// 画面．対象期間開始日
//			// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
//			dbList.setValue(paramlist[3]);											// 画面．対象期間終了日
//			// CN_T_CONT_KEI CN0021 パラメータの設定
//			// CONT_SVC_CDパラメータの設定(ＫＥＹ＿コンテンツサービスコード)
//			for(int i = 0; paramContSvcCdList.length > i; i++)
//			{
//				dbList.setValue(paramContSvcCdList[i]);								// 画面．コンテンツサービスコード
//			}
//			// CONT_NM パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
//			dbList.setValue(PERCENT + replaceLikeValue(paramlist[1]) + PERCENT);	// サービス名
//			
//			// -------------------------------------------------- //
//			// 最終的な条件句
//			// -------------------------------------------------- //
//			// KK_M_CRECARD_COMP KK0531 パラメータの設定
//			// CONT_SVC_TSTAYMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス開始年月日
//			// CONT_SVC_TENDYMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス終了年月日
//			// CK_T_CUST CK0011 パラメータの設定
//			// RSV_APLY_YMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
//// v13.00.00 2015/03/27 MOD END
//			
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getEfile]sqlBf：" + sqlBf);
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getEfile]sqlAf：" + sqlAf);
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getEfile]dbList：" + dbList.getList().toString());
//
//			// 請求データ取得
//			executeCN_T_CONT_KEI_AC_SELECT_003(dbList.getList().toArray());
//		}
//		else
//		{
//			// SQL定義キーを指定してSQL文を取得
//			String sqlBf = db_CN_T_CONT_KEI.getSql(CN_T_CONT_KEI_AC_SELECT_004);
//
//			// 加工対象の文字列
//			String ckn1Bf = "CN0021.CONT_SVC_CD IN (?)";
//
//			String para = "?";
//
//			// IN句の対象数を変更（CONT_SVC_CD）
//			StringBuffer paraAf = new StringBuffer();
//			for(int i = 0; paramContSvcCdList.length > i; i++)
//			{
//				if(i > 0)
//				{
//					paraAf.append(JACStrConst.COMMA);
//				}
//
//				paraAf.append(para);
//			}
//			String ckn1Af = ckn1Bf.replace(para, paraAf.toString());
//
//
//			// SQLを置き換える
//			HashMap<String, String> tgt = new HashMap<String, String>();
//			tgt.put(ckn1Bf, ckn1Af);
//
//			String sqlAf = JACbatRknBusinessUtil.ckanUmeMojiHanyo(sqlBf, tgt);
//
//			//SQL定義キーを指定し、加工したSQLをセット
//			db_CN_T_CONT_KEI.setSqlMap(CN_T_CONT_KEI_AC_SELECT_004, sqlAf);
//
//			// ＤＢアクセス用のパラメータ定義
//			JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
//
//			// 対象キーの設定
//
//// v13.00.00 2015/03/27 MOD START
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			dbList.setValue(super.onlineOpeDate);									// 課金開始終了年月日
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス開始年月日
////			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス終了年月日
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			dbList.setValue(super.onlineOpeDate);									// 課金開始終了年月日
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			for(int i = 0; paramContSvcCdList.length > i; i++)
////			{
////				dbList.setValue(paramContSvcCdList[i]);								// 画面．コンテンツサービスコード
////			}
////
////			dbList.setValue(paramlist[3] + "999999");								// 画面．対象期間終了日
////			dbList.setValue(paramlist[2] + "000000");								// 画面．対象期間開始日
////
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス開始年月日
////			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス終了年月日
////			dbList.setValue(wkparaChCrecardContens);								// クレジットカード事業コード
////			dbList.setValue(super.onlineOpeDate);									// クレジットカード会社適用開始年月日
////			dbList.setValue(super.onlineOpeDate);									// クレジットカード会社適用終了年月日
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
////			
////			for(int i = 0; paramContSvcCdList.length > i; i++)
////			{
////				dbList.setValue(paramContSvcCdList[i]);								// 画面．コンテンツサービスコード
////			}
////			dbList.setValue(paramlist[3] + "999999");								// 画面．対象期間終了日
////			dbList.setValue(paramlist[2] + "000000");								// 画面．対象期間開始日
////			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
//			
//			// -------------------------------------------------- //
//			// 最終的なSELECT句
//			// -------------------------------------------------- //
//			// KK_T_SVC_KEI KK0081 パラメータの設定
//			// RSV_APLY_YMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
//			
//			// -------------------------------------------------- //
//			// コンテンツISP課金のSELECT句
//			// -------------------------------------------------- //
//			// KK_T_SEIKY_KEI KK0491 パラメータの設定
//			// RSV_APLY_YMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
//			// KK_T_WRIB_SVC_KEI KK0451 パラメータの設定
//			// RSV_APLY_YMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
//			
//			// CN_T_CONT_ISP_CHRG CN0081 パラメータの設定
//			// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間開始年月日を指定)
//			dbList.setValue(paramlist[2]);											// 画面．対象期間開始日
//			// CHRG_TRAN_YMDCHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
//			dbList.setValue(paramlist[3]);											// 画面．対象期間終了日
//			// CHRG_TRAN_YMDパラメータの設定(ＫＥＹ＿対象期間開始年月日を指定)
//			dbList.setValue(paramlist[2]);											// 画面．対象期間開始日
//			// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
//			dbList.setValue(paramlist[3]);											// 画面．対象期間終了日
//			// KAKINS_TSTAYMD,KAKINS_TENDYMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// 課金開始終了年月日
//			// CN_T_CONT_KEI CN0021 パラメータの設定
//			// CONT_SVC_CDパラメータの設定(ＫＥＹ＿コンテンツサービスコード)
//			for(int i = 0; paramContSvcCdList.length > i; i++)
//			{
//				dbList.setValue(paramContSvcCdList[i]);								// 画面．コンテンツサービスコード
//			}
//			
//			// -------------------------------------------------- //
//			// コンテンツクレカ課金のSELECT句
//			// -------------------------------------------------- //
//			// KK_M_CRECARD_COMP KK0531 パラメータの設定
//			// CRECARD_JIGYO_CD パラメータの設定(WK_PARA_CH_CRECARD_CONTENTS)
//			dbList.setValue(wkparaChCrecardContens);								// クレジットカード事業コード
//			// CRECARD_COMP_TSTAYMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// クレジットカード会社適用開始年月日
//			// CRECARD_COMP_TENDYMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// クレジットカード会社適用終了年月日
//			// CN_T_CONT_CRECA_CHRG CN0071 パラメータの設定
//			// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間開始年月日を指定)
//			dbList.setValue(paramlist[2]);											// 画面．対象期間開始日
//			// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
//			dbList.setValue(paramlist[3]);											// 画面．対象期間終了日
//			// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間開始年月日を指定)
//			dbList.setValue(paramlist[2]);											// 画面．対象期間開始日
//			// CHRG_TRAN_YMD パラメータの設定(ＫＥＹ＿対象期間終了年月日を指定)
//			dbList.setValue(paramlist[3]);											// 画面．対象期間終了日
//			// CN_T_CONT_KEI CN0021 パラメータの設定
//			// CONT_SVC_CDパラメータの設定(ＫＥＹ＿コンテンツサービスコード)
//			for(int i = 0; paramContSvcCdList.length > i; i++)
//			{
//				dbList.setValue(paramContSvcCdList[i]);								// 画面．コンテンツサービスコード
//			}
//			
//			// -------------------------------------------------- //
//			// 最終的な条件句
//			// -------------------------------------------------- //
//			// KK_M_CRECARD_COMP KK0531 パラメータの設定
//			// CONT_SVC_TSTAYMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス開始年月日
//			// CONT_SVC_TENDYMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// コンテンツサービス終了年月日
//			// CK_T_CUST CK0011 パラメータの設定
//			// RSV_APLY_YMD パラメータの設定(運用日を指定)
//			dbList.setValue(super.onlineOpeDate);									// 予約適用年月日
//// v13.00.00 2015/03/27 MOD END
//
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getEfile]sqlBf：" + sqlBf);
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getEfile]sqlAf：" + sqlAf);
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getEfile]dbList：" + dbList.getList().toString());
//
//			executeCN_T_CONT_KEI_AC_SELECT_004(dbList.getList().toArray());
//		}
//		
//		List<JBSbatCommonDBInterface> selectList = new ArrayList<JBSbatCommonDBInterface>();
//		
//		JBSbatCommonDBInterface selectMap = new JBSbatCommonDBInterface();
//		
//		
//		while(true)
//		{
//			selectMap = db_CN_T_CONT_KEI.selectNext();
//			
//			if(selectMap != null)
//			{
//				selectList.add(selectMap);
//			}
//			else
//			{
//				break;
//			}
//		}
//v15.00.00 DEL END
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getEfile]");
		
		return selectList;
	}

//v15.00.00 DEL START
//	/**
//	 * SQLKEY(AC_SELECT_003)でDBアクセスを行います。<br>
//	 * <p>
//	 * <b>処理フロー</b><br>
//	 * <pre>
//	 * 1.引数でバイント変数を設定します。<br>
//	 *
//	 * 2.DBアクセスを実行します。<br>
//	 * </pre>
//	 * <p>
//	 * @param param バイント変数の値配列。
//	 * @throws Exception 業務サービス内で発生した例外全般。
//	 */
//	private void executeCN_T_CONT_KEI_AC_SELECT_003(Object[] param) throws Exception
//	{
//		// バイント変数のリストを生成します
//		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
//		for (int i = 0; i < param.length; i++)
//		{
//			paramList.setValue(param[i].toString());
//		}
//
//		// DBアクセスを実行します
//		db_CN_T_CONT_KEI.selectBySqlDefine(paramList, CN_T_CONT_KEI_AC_SELECT_003);
//	}
//	
//	/**
//	 * SQLKEY(AC_SELECT_004)でDBアクセスを行います。<br>
//	 * <p>
//	 * <b>処理フロー</b><br>
//	 * <pre>
//	 * 1.引数でバイント変数を設定します。<br>
//	 *
//	 * 2.DBアクセスを実行します。<br>
//	 * @param param バイント変数の値配列。
//	 * @throws Exception 業務サービス内で発生した例外全般。
//	 */
//	private void executeCN_T_CONT_KEI_AC_SELECT_004(Object[] param) throws Exception
//	{
//		// バイント変数のリストを生成します
//		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
//		for (int i = 0; i < param.length; i++)
//		{
//			paramList.setValue(param[i].toString());
//		}
//
//		// DBアクセスを実行します
//		db_CN_T_CONT_KEI.selectBySqlDefine(paramList, CN_T_CONT_KEI_AC_SELECT_004);
//	}
//v15.00.00 DEL END
//v15.00.00 ADD START
	/**
	 * SQLKEY(AC_SELECT_005)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCN_T_CONT_KEI_AC_SELECT_005(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		for (int i = 0; i < param.length; i++)
		{
			paramList.setValue(param[i].toString());
		}

		// DBアクセスを実行します
		db_CN_T_CONT_KEI.selectBySqlDefine(paramList, CN_T_CONT_KEI_AC_SELECT_005);
	}
	
	/**
	 * SQLKEY(AC_SELECT_006)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCN_T_CONT_KEI_AC_SELECT_006(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		for (int i = 0; i < param.length; i++)
		{
			paramList.setValue(param[i].toString());
		}

		// DBアクセスを実行します
		db_CN_T_CONT_KEI_2.selectBySqlDefine(paramList, CN_T_CONT_KEI_AC_SELECT_006);
	}
	
	/**
	 * SQLKEY(AC_SELECT_007)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCN_T_CONT_KEI_AC_SELECT_007(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		for (int i = 0; i < param.length; i++)
		{
			paramList.setValue(param[i].toString());
		}

		// DBアクセスを実行します
		db_CN_T_CONT_KEI_2.selectBySqlDefine(paramList, CN_T_CONT_KEI_AC_SELECT_007);
	}
//v15.00.00 ADD END
	
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

}
