/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCRTiokrkTpflDel
*	ソースファイル名	：JBSbatCRTiokrkTpflDel.java
*	作成者				：富士通　
*	作成日				：2023年03月29日
*＜機能概要＞
*　対応記録添付ファイル削除部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v66.00.00	2023/03/22	FJ)渋谷	【ANK-4382-00-00】ケース内添付データの一括削除
*	v73.00.00	2024/10/23	FJ)山岡	【ANK-4593-00-00】ケース内添付データの一括削除　追加対応
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Set;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatCKConst;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatShoriIraiUtil;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatCRIFM008;
import eo.business.util.table.JBSbatCC_T_DLYD_TRN_REQ;
import eo.business.util.table.JBSbatCR_T_TORK_EFILE_KNRI;
import eo.common.constant.JKKStrConst;
import eo.common.util.JKKStringUtil;
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;

public class JBSbatCRTiokrkTpflDel extends JBSbatBusinessService{

	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	
	/** テーブル(対応履歴電子ファイル管理)*/
	private static final String D_TBL_NAME_CR_T_TORK_EFILE_KNRI = "CR_T_TORK_EFILE_KNRI";
	
	/** テーブル(添付ファイル)*/
	private static final String D_TBL_NAME_CC_T_TEMP_FILE = "CC_T_TEMP_FILE";
	
	/** テーブル(電子ファイル管理)*/
	private static final String D_TBL_NAME_CC_T_EFILE_KANRI = "CC_T_EFILE_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_ZM_T_DATAIKTTRK_KNRI = "ZM_T_DATAIKTTRK_KNRI";
	
	/** SQL定義キー(CR_SELECT_001)*/
	private static final String CR_T_TORK_EFILE_KNRI_CR_SELECT_001 = "CR_SELECT_001";
	/** SQL定義キー(CC_SELECT_004)*/
	private static final String CC_T_TEMP_FILE_CR_SELECT_004 = "CR_SELECT_004";
	/** SQL定義キー(CC_SELECT_001)*/
	private static final String CC_T_EFILE_KANRI_CR_SELECT_002 = "CR_SELECT_002";
	/** SQL定義キー(KK_INSERT_002)*/
	private static final String ZM_T_DL_FILE_KANRI_KK_INSERT_002 = "KK_INSERT_002";
	/** SQL定義キー(CR_UPDATE_001)*/
	private static final String CR_T_TORK_EFILE_KNRI_CR_UPDATE_001 = "CR_UPDATE_001";
	/** SQL定義キー(CR_UPDATE_007)*/
	private static final String CC_T_TEMP_FILE_CR_UPDATE_007 = "CR_UPDATE_007";
	/** SQL定義キー(ZM_DELETE_001)*/
	private static final String CC_T_EFILE_KANRI_ZM_DELETE_001 = "ZM_DELETE_001";
	
	/** テーブルアクセスクラス(対応履歴電子ファイル管理)*/
	private JBSbatSQLAccess db_CR_T_TORK_EFILE_KNRI = null;
	
	/** テーブルアクセスクラス(添付ファイル)*/
	private JBSbatSQLAccess db_CC_T_TEMP_FILE = null;
	
	/** テーブルアクセスクラス(電子ファイル管理)*/
	private JBSbatSQLAccess db_CC_T_EFILE_KANRI = null;
	
	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	
	/** テーブルアクセスクラス(ディレイド処理依頼)*/
	private JBSbatSQLAccess db_ZM_T_DATAIKTTRK_KNRI = null;
	
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** ファイルエンコード(SJIS) */
	private static final String ENCODE_SHIFT_JIS = "Shift-JIS";
	
	/** エラーコード＆エラー理由 */
	private static enum ErrCdEnum
	{
		/** E010：入力レコードがフォーマット不正 */
		E010("入力値フォーマットエラー")
		/** E020：問合せIDなしエラー */
		,E020("問合せIDなしエラー")
		/** E030：更新対象なしエラー */
		,E030("更新対象なしエラー")
		/** E040：入力値必須チェックエラー */
		,E040("入力値必須チェックエラー")
		/** E050：入力値属性チェックエラー */
		,E050("入力値属性チェックエラー")
		/** E060：入力値桁数チェックエラー */
		,E060("入力値桁数チェックエラー")
		/** E070：更新処理エラー */
		,E070("更新処理エラー")
		;
		
		final String message;
		
		private ErrCdEnum(String message)
		{
			this.message = message;
		}
	}
	
	/** 添付資料削除対象一覧ファイル定義ファイル名 */
	private static final String CRIFM008_DEF = "CRIFM008.def";
	
	/** 対応記録添付ファイル削除結果リスト名 */
	private static final String CRIFM009_NAME = "CRIFM009.csv";
	
	/** 入力ファイル定義 */
	private static final String PARAM_IND = "IND";
	
	/** ファイルコード */
	private static final String FILE_CD = "0000";
	
	/** 処理管理番号（添付資料削除対象一覧ファイル） */
	private static final String TRN_KANRI_NO_CRIFM008 = "000000000259";
	
	/** ファイル名編集用（対応記録添付ファイル削除結果リスト） */
	private static final String FILE_NAME_TEMPLATE_CRIFM009 = "対応記録添付ファイル削除結果リスト_yyyyMMddHHmmssSSS.csv";
	
	/** ファイル名で利用するタイムスタンプのフォーマット */
	private static final String FILE_TIMESTAMP_FORMAT = "yyyyMMddHHmmssSSS";
	
	/** 対応記録添付ファイル削除結果リストファイルオブジェクト */
	private JBSbatBusinessFileUtil kcrifm009FileObj = null;
	
	/** 対応記録添付ファイル削除結果リストファイルレコード件数 */
	private int kcrifm009RecordCnt = 0;
	
	/** CSV囲い文字(ダブルクォーテーション) */
	private static final String KAKOIMOJI = "\"";
	
	/** 添付資料削除対象一覧ファイル 項目マップ */
	private static final HashMap<String, String> TIOKRK_TPFL_DEL_ITEM = new HashMap<String, String>()
	{
		{
			put(String.valueOf(0), JBSbatCRIFM008.TOIAWASE_ID);
		}
	};
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_CR_T_TORK_EFILE_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TORK_EFILE_KNRI);
		db_CC_T_TEMP_FILE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_T_TEMP_FILE);
		db_CC_T_EFILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_T_EFILE_KANRI);
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		db_ZM_T_DATAIKTTRK_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DATAIKTTRK_KNRI);
			
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// ディレイド処理依頼情報リストを取得する
		List<HashMap<String, Object>> shoriIraiList = JCCbatShoriIraiUtil.getShoriIraiInfo(commonItem, this.jobid);
		
		// ディレイド処理依頼情報リストが取得できない場合、処理を終了する
		if (null == shoriIraiList)
		{
			return null;
		}
		
		// フリー項目を取得する
		String[] freeItems = freeItem.split(JKKBatConst.S_PARAM_DELIM);
		
		// 添付資料削除対象一覧定義ファイル名を取得する
		String crifm008DefName = JBSbatAplConst.getAplConstValue(PARAM_IND) + CRIFM008_DEF;
		// 対応記録添付ファイル削除結果リストパス
		String crifm009FilePath = freeItems[0] + CRIFM009_NAME;
		// 更新処理開始フラグ
		boolean updTrnStaFlg = false;
		// ディレイド処理依頼情報リストの件数分繰り返す
		for (HashMap<String, Object> shoriIrai : shoriIraiList)
		{
			try
			{
				// 更新開始フラグ
				updTrnStaFlg = false;
				
				// チェックエラーフラグ
				boolean checkErrFlg = false;
				
				// 電子ファイル管理から添付資料削除対象一覧ファイルを取得する
				JBSbatInputFileUtil crifm008FileUtil = 
					new JBSbatInputFileUtil(JCCBatCommon.searchDenshiFile(commonItem, (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.INPUT_EFILE_KANRI_NO)));
				
				// 添付資料削除対象一覧定義ファイルオブジェクトを生成する
				JBSbatDefFileUtil crifm008FileDef = new JBSbatDefFileUtil(crifm008DefName, crifm008FileUtil);
				
				// 対応記録添付ファイル削除結果リストファイルオブジェクトを生成する
				kcrifm009FileObj = JKKBatCommon.createBusinessFileUtil(crifm009FilePath, ENCODE_SHIFT_JIS, JKKStrConst.LINE_SEPARATOR, JKKStrConst.COMMA);
				
				// 添付資料削除対象一覧ファイルレコード件数
				int crifm008RecordCnt = 0;
				
				// 対応記録添付ファイル削除結果リストファイルレコード件数
				kcrifm009RecordCnt = 0;
				
				// Readerオブジェクトを生成する
				crifm008FileUtil.createReader();
				
				// 添付資料削除対象一覧ファイルの１レコードの情報を保持するマップ
				HashMap<String, String> readMap = null;
				
				// 更新処理開始フラグをTRUEにしてから添付資料削除対象一覧ファイルを読み込む
				updTrnStaFlg = true;
				
				// 添付資料削除対象一覧ファイルの件数分繰り返す
				while (crifm008FileUtil.ready())
				{
					// ファイルから１レコードを取得する
					String line = crifm008FileUtil.readLine();
					
					// 添付資料削除対象一覧ファイルレコード件数カウント
					crifm008RecordCnt++;
					
					// １レコードの内容を文字列からマップに変換
					readMap = convNonQuateStringToList(line);
					
					// １レコードの情報をマップに格納する
					JBSbatServiceInterfaceMap recordMap = crifm008FileDef.lineToObject(line, crifm008FileUtil, crifm008RecordCnt);
					
					// ********** 入力ファイルの設定値チェック **********
					
					// 入力値フォーマットチェック
					boolean fmtErrFlg = fmtErrCheck(recordMap,line);
					
					if (!fmtErrFlg)
					{
						createCrifm009(readMap, ErrCdEnum.E010);
						checkErrFlg = true;
						continue;
					}
					// 入力値チェック
					HashMap<String, Object> inputErrMap = inputErrCheck(recordMap);
					
					if (inputErrMap != null && !("".equals(inputErrMap)))
					{
						createCrifm009(readMap, (ErrCdEnum)inputErrMap.get("err_nm"));
						checkErrFlg = true;
						continue;
					}
					
					// ********** 入力ファイルの問合せIDの存在チェック **********
					
					// 対応履歴電子ファイル管理スキーマ照会結果格納マップ
					JBSbatCommonDBInterface torkEfileKnriMap = null;
					
					// 入力ファイルから問合せID(対応記録番号)を取得
					String toiawaseId = recordMap.getString(JBSbatCRIFM008.TOIAWASE_ID);
					
					// 問合せID(対応記録番号)から、電子ファイル管理番号を検索
					executeCR_T_TORK_EFILE_KNRI_CR_SELECT_001(toiawaseId);
					
					// 電子ファイル管理番号を取得
					Set efileKanriNoList = new HashSet();
					
					// 問合せIDに紐づく電子ファイル管理番号を格納
					while ((torkEfileKnriMap = db_CR_T_TORK_EFILE_KNRI.selectNext()) != null)
					{
						efileKanriNoList.add(torkEfileKnriMap.getString(JBSbatCR_T_TORK_EFILE_KNRI.EFILE_KANRI_NO));
					}
					// 問合せID存在チェック
					if (efileKanriNoList.size() <= 0)
					{
						createCrifm009(readMap, ErrCdEnum.E020);
						checkErrFlg = true;
						continue;
					}
					
					// ********** 入力ファイルの問合せIDに紐づく添付資料の存在チェック **********
					
					boolean sonzaichkFlg = true;
					
					// 添付ファイルスキーマ照会結果格納マップ
					JBSbatCommonDBInterface tempFileMap = null;
					
					// 電子ファイル管理スキーマ照会結果格納マップ
					JBSbatCommonDBInterface EfileKnriMap = null;
					
					// 添付ファイル・電子ファイル管理スキーマに取得した電子ファイル管理番号のデータが存在するかチェックする
					for (Object efileKanriNo : efileKanriNoList)
					{
//ANK-4593-00-00 20241023 DEL START
						// 添付ファイルスキーマ照会
//						executeCC_T_TEMP_FILE_CC_SELECT_004(efileKanriNo);
//						tempFileMap = db_CC_T_TEMP_FILE.selectNext();
//						
//						// 更新対象チェック (添付ファイル)
//						if (tempFileMap == null || "".equals(tempFileMap))
//						{
//							sonzaichkFlg = false;
//							break;
//						}
//ANK-4593-00-00 20241023 DEL END
						
						// 電子ファイル管理スキーマ照会
						executeCC_T_EFILE_KANRI_CR_SELECT_002(efileKanriNo);
						EfileKnriMap = db_CC_T_EFILE_KANRI.selectNext();
						
						// 更新対象チェック (電子ファイル)
						if (EfileKnriMap == null || "".equals(EfileKnriMap))
						{
							sonzaichkFlg = false;
							break;
						}
					}
					
					// 入力ファイルの問合せIDに紐づく電子ファイル番号のデータが１件でも存在しない場合更新処理を行わない
					if (!sonzaichkFlg)
					{
						createCrifm009(readMap, ErrCdEnum.E030);
						checkErrFlg = true;
						continue;
					}
					
					// ********** 添付資料削除処理 **********
					
					// 更新判定フラグ
					boolean updateFlg = true;
					
					// システム日付
					String sysDate = JCCBatCommon.getSysDateTimeStamp();
					
					// 対応履歴電子ファイル管理
					String[] torkEfileKnriparam = new String[]{sysDate, batchUserId, sysDate, batchUserId, toiawaseId};
					
					if (executeCR_T_TORK_EFILE_KNRI_CR_UPDATE_001(torkEfileKnriparam) == 0)
					{
						updateFlg = false;
					}
					// 問合せIDに紐づく電子ファイル管理番号すべてに更新・削除処理を行う
					for (Object efileKanriNo : efileKanriNoList)
					{
//ANK-4593-00-00 20241023 MOD START
						// 添付ファイルスキーマ論理削除
//						String[] tenmpFileparam = new String[]{sysDate, batchUserId, sysDate,batchUserId, JBSbatCKConst.MK_FLG_MUKO ,efileKanriNo.toString()};
//						if (executeCC_T_TEMP_FILE_CR_UPDATE_007(tenmpFileparam) == 0)
//						{
//							updateFlg = false;
//							break;
//						}
						
						//添付ファイルスキーマに対象レコードがない場合は、添付ファイルスキーマ論理削除処理を実行しない
						//添付ファイルスキーマに対象レコードがある場合のみ、添付ファイルスキーマのレコードを論理削除する
						// 添付ファイルスキーマ照会
						executeCC_T_TEMP_FILE_CC_SELECT_004(efileKanriNo);
						tempFileMap = db_CC_T_TEMP_FILE.selectNext();
						
						// 更新対象チェック (添付ファイル)
						//添付ファイルに対象データがある場合
						if (tempFileMap != null)
						{ 
							//添付ファイルデータが空以外の場合
							if( !("".equals(tempFileMap)))
							{
								
								String[] tenmpFileparam = new String[]{sysDate, batchUserId, sysDate,batchUserId, JBSbatCKConst.MK_FLG_MUKO ,efileKanriNo.toString()};
								if (executeCC_T_TEMP_FILE_CR_UPDATE_007(tenmpFileparam) == 0)
								{
									updateFlg = false;
									break;
								}
							}
						}
//ANK-4593-00-00 20241023 MOD END
						
						// 電子ファイル管理スキーマ物理削除
						if (executeCC_T_EFILE_KANRI_ZM_DELETE_001(efileKanriNo) == 0)
						{
							updateFlg = false;
							break;
						}
					}
					
					// １件でも更新ができなかった場合は更新処理エラー
					if (!updateFlg)
					{
						commonItem.getConnection().rollback();
						createCrifm009(readMap, ErrCdEnum.E070);
						checkErrFlg = true;
						continue;
					}
					// 問合せID１件を処理する毎にコミット
					commit();
						
					//対応記録添付ファイル削除結果リスト出力(正常)
					createCrifm009(readMap, null);
				}
				// 対応記録添付ファイル削除結果リストを閉じる
				JKKBatCommon.closeBusinessFileUtil(kcrifm009FileObj);
				
				// 電子ファイル管理・ダウンロードファイル管理に登録
				addEfileAndDlFileKanri(crifm009FilePath, FILE_NAME_TEMPLATE_CRIFM009, TRN_KANRI_NO_CRIFM008, String.valueOf(kcrifm009RecordCnt));
				
				// 一時ファイルの削除
				deleteTmpFile(crifm009FilePath);
				
				// ディレイド処理依頼の更新
				updateDelaydTrnReq(shoriIrai, checkErrFlg);
				
				commit();
			}
			catch (Exception e)
			{
				// 想定外のエラー発生時は、ロールバック後にディレイド処理依頼だけをエラー更新してコミット。
				commonItem.getConnection().rollback();
				
				if(updTrnStaFlg)
				{
					// 対応記録添付ファイル削除結果リストを閉じる
					JKKBatCommon.closeBusinessFileUtil(kcrifm009FileObj);
					
					if (kcrifm009RecordCnt > 0)
					{
						// 電子ファイル管理・ダウンロードファイル管理に登録
						addEfileAndDlFileKanri(crifm009FilePath, FILE_NAME_TEMPLATE_CRIFM009, TRN_KANRI_NO_CRIFM008, String.valueOf(kcrifm009RecordCnt));
					}
				}
				// 一時ファイルの削除
				deleteTmpFile(crifm009FilePath);
				
				JCCBatCommon.updateShoriIraiResult(
						commonItem, (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO), JKKStrConst.DLYD_TRN_RSLT_CD_SYS_ERR, null);
				commit();
				// エラー通知は必要なので例外はそのまま投げる
				throw e;
			}
		}
		
		return null;
		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * SQLKEY(CR_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		toiawaseId:入力ファイル.問合せID
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCR_T_TORK_EFILE_KNRI_CR_SELECT_001(String toiawaseId) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(toiawaseId);
		
		// DBアクセスを実行します
		db_CR_T_TORK_EFILE_KNRI.selectBySqlDefine(paramList, CR_T_TORK_EFILE_KNRI_CR_SELECT_001);
	}
	
	/**
	 * SQLKEY(CC_SELECT_004)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		efileKanriNo:電子ファイル管理番号
	 * </pre>
	 * <p>
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCC_T_TEMP_FILE_CC_SELECT_004(Object efileKanriNo) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(efileKanriNo.toString());
		
		// DBアクセスを実行します
		db_CC_T_TEMP_FILE.selectBySqlDefine(paramList,CC_T_TEMP_FILE_CR_SELECT_004);
	}
	
	/**
	 * SQLKEY(CR_SELECT_002)でDBアクセスを行います。<br>	
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		efileKanriNo:電子ファイル管理番号
	 * </pre>
	 * <p>
	 * @throws Exception　Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCC_T_EFILE_KANRI_CR_SELECT_002(Object efileKanriNo) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(efileKanriNo.toString());
		
		// DBアクセスを実行します
		db_CC_T_EFILE_KANRI.selectBySqlDefine(paramList, CC_T_EFILE_KANRI_CR_SELECT_002);
	}
	
	
	/**
	 * 電子ファイル管理・ダウンロードファイル管理に登録します。
	 * <br>
	 * @param tmpFilePath
	 * @param fileNameTemplate
	 * @param trnKanriNo
	 * @param recordCount
	 * @throws Exception
	 */
	private void addEfileAndDlFileKanri(String tmpFilePath, String fileNameTemplate, String trnKanriNo, String recordCount) throws Exception
	{
		// 電子ファイル管理登録処理
		JBSbatCommonItem arg0 = commonItem;								// 業務共通電文
		String arg1 = FILE_CD;											// ファイルコード
		String arg2 = tmpFilePath;										// ファイルパス
		String arg3 = JBSbatDateUtil.adjustMonth(super.opeDate, 3);		// ファイル削除年月日（運用日付 + 3ヶ月）
		
		// 電子ファイル管理登録処理
		String[] rc = JCCBatCommon.createDenshiFile(arg0, arg1, arg2, arg3);
		
		// ログ出力
		super.logPrint.printDebugLog("電子ファイル管理番号(" + rc[0] +  ")、世代登録年月日時分秒(" + rc[1] + ")");
		
		// ファイル名
		String fileName = fileNameTemplate .replaceAll(FILE_TIMESTAMP_FORMAT, JCCBatCommon.getSysDateTime());
		
		// ダウンロードファイル管理登録処理
		String[] insertSetParam2 = new String[5];
		insertSetParam2[0] = trnKanriNo;								// 処理管理番号
		insertSetParam2[1] = fileName;									// ファイル名
		insertSetParam2[2] = recordCount;								// データ件数
		insertSetParam2[3] = rc[0];										// 電子ファイル管理番号
		insertSetParam2[4] = rc[1];										// 世代登録年月日時分秒
		executeZM_T_DL_FILE_KANRI_KK_INSERT_002(insertSetParam2);
	}
	
	/**
	 * 一時ファイルを削除します。
	 * <br>
	 * @param tmpFilePath 一時ファイルのファイルパス
	 */
	private void deleteTmpFile(String tmpFilePath)
	{
		File tmpFile = new File(tmpFilePath);
		if (tmpFile.exists())
		{
			tmpFile.delete();
		}
	}
	
	/**
	 * ディレイド処理依頼を更新します。
	 * <br>
	 * @param shoriIrai
	 * @param checkErrFlg
	 */
	private void updateDelaydTrnReq(HashMap<String, Object> shoriIrai, boolean checkErrFlg)
	{
		// ディレイド処理依頼番号
		String shoriIraiNo = (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO);
		
		// ディレイド処理依頼結果更新
		if (checkErrFlg)
		{
			// チェックエラーフラグがtrueの場合
			JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JKKStrConst.DLYD_TRN_RSLT_CD_APP_ERR, null);
		}
		else
		{
			// チェックエラーフラグがfalseの場合
			JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JKKStrConst.DLYD_TRN_RSLT_CD_COMPLETE, null);
		}
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CR_T_TORK_EFILE_KNRI.close();
		db_CC_T_TEMP_FILE.close();
		db_CC_T_EFILE_KANRI.close();
		db_ZM_T_DL_FILE_KANRI.close();
		db_ZM_T_DATAIKTTRK_KNRI.close();
			/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * SQLKEY(KK_INSERT_002)で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_T_DL_FILE_KANRI_KK_INSERT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		
		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.executeBySqlDefine(paramList, ZM_T_DL_FILE_KANRI_KK_INSERT_002);
	}
	
	/**
	 * 対応記録添付ファイル削除結果リストを出力する。
	 * <br>
	 * @param recordMap 1レコード分の情報
	 * @param errCdEnum エラーコード
	 */
	private void createCrifm009(HashMap<String, String> readMap, ErrCdEnum errCdEnum) throws Exception
	{
		ArrayList<String> outputInfo = new ArrayList<String>();
		
		// 項目値
		if (errCdEnum != null)
		{
			outputInfo.add(readMap.get(JKKStringUtil.nullToBlank(JBSbatCRIFM008.TOIAWASE_ID)));		// 問合せID
			outputInfo.add("ＮＧ");																	// 登録結果
			outputInfo.add(errCdEnum.message);														// 結果内容
		}
		else
		{
			outputInfo.add(JKKStringUtil.nullToBlank(readMap.get(JBSbatCRIFM008.TOIAWASE_ID)));		// 問合せID
			outputInfo.add("ＯＫ");																	// 登録結果
			outputInfo.add("");																		// 結果内容
		}
		
		// 情報を格納
		JKKBatCommon.printDoubleQuoteBusinessFileUtil(kcrifm009FileObj, outputInfo);
		
		// カウントアップ
		kcrifm009RecordCnt++;
	}
	
	/**
	 * 入力ファイルのエラーチェックを行う
	 * 
	 * @param recordMap 入力ファイルが格納されたMap
	 * @return resultMap エラーコード
	 * @throws Exception
	 */
	private HashMap<String, Object> inputErrCheck(JBSbatServiceInterfaceMap recordMap) throws Exception
	{
		String strValue = null;
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		
		// ********** 問合せIDチェック **********
		strValue = (String)recordMap.get(JBSbatCRIFM008.TOIAWASE_ID);
		
		// 必須チェック
		if(JKKStringUtil.isNullBlank(strValue))
		{
			resultMap.put("err_nm", ErrCdEnum.E040);
			return resultMap;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			resultMap.put("err_nm", ErrCdEnum.E050);
			return resultMap;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1","10"}))
		{
			resultMap.put("err_nm", ErrCdEnum.E060);
			return resultMap;
		}
		
		return null;
	}
	/**
	 * 入力ファイルのエラーチェックを行う
	 * 
	 * @param recordMap 入力ファイルが格納されたMap
	 * @return resultMap エラーコード
	 * @throws Exception
	 */
	private boolean fmtErrCheck(JBSbatServiceInterfaceMap recordMap, String lineDate) throws Exception
	{
		try
		{
			String[] result = lineDate.split(",");
			
			for (int i = 0; i < result.length; i++)
			{
				String colm = result[i];
				// カンマ区切りの値の一文字目と、最後の文字を取得する
				String str1 = Character.toString(colm.charAt(0));
				String str2 = Character.toString(colm.charAt(colm.length()-1));
				if (!str1.equals(KAKOIMOJI) && !str2.equals(KAKOIMOJI))
				{
					return false;
				}
			}
		}catch (NoSuchElementException e)
		{
			// 例外処理
			commonItem.getLogPrint().printDebugLog("JBSbatCRTiokrkTpflDel.convNonQuateStringToList NoSuchElementException発生:");
			throw e;
		}
		//項目数チェック
		if (recordMap.isInputErrorFlg())
		{
			return false;
		}
		
		return true;
		
	}
	/**
	 * 引数で指定されたCSVファイルの一行データをMapにして返却する
	 * ダブルクォーテーションで囲まれている場合は、削除した文字列に変換する。
	 * @param commonItem 共通情報
	 * @param lineData 一行分のCSVデータ
	 * @return Map<String> 項目ごとにCSVデータを格納したMap
	 * @throws Exception 例外
	 **/
	private HashMap<String, String> convNonQuateStringToList(String lineData) throws Exception
	{

		// CSV指定ファイル読込み
		// 戻り値格納用Map
		HashMap<String, String> resultMap = new HashMap<String, String>();

		try
		{
			String[] result = lineData.split(",");
			
			for (int i = 0; i < result.length; i++)
			{
				String colm = result[i];

				// 先頭 または 最後がダブルクォートの場合 
				if (colm.startsWith(KAKOIMOJI))
				{
					colm = colm.substring(1);
				}
				if (colm.endsWith(KAKOIMOJI))
				{
					colm = colm.substring(0, colm.length() - 1);
				}
				resultMap.put(TIOKRK_TPFL_DEL_ITEM.get(String.valueOf(i)), colm);
			}
		}
		catch (NoSuchElementException e)
		{
			// 例外処理
			commonItem.getLogPrint().printDebugLog("JBSbatCRTiokrkTpflDel.convNonQuateStringToList NoSuchElementException発生:");
			throw e;
		}

		// 1行分のデータを格納したMapを返却
		return resultMap;
	}
	/**
	 * SQLKEY(CR_UPDATE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:param
	 *		param[0]:システム日付
	 *		param[1]:バッチ更新者ID
	 *		param[2]:システム日付
	 *		param[3]:バッチ更新者ID
	 *		param[4]:入力ファイル.問合せID
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @return 更新件数
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private int executeCR_T_TORK_EFILE_KNRI_CR_UPDATE_001(String[] param) throws Exception
	{

		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0]);
		paramList.setValue(param[1]);
		paramList.setValue(param[2]);
		paramList.setValue(param[3]);
		paramList.setValue(param[4]);

		// DBアクセスを実行します
		int updatecount = db_CR_T_TORK_EFILE_KNRI.executeBySqlDefine(paramList, CR_T_TORK_EFILE_KNRI_CR_UPDATE_001);
		return updatecount;
	}
	/**
	 * SQLKEY(CR_UPDATE_007)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数: param
	 *		param[0]:システム日付
	 *		param[1]:バッチ更新者ID
	 *		param[2]:システム日付
	 *		param[3]:バッチ更新者ID
	 *		param[4]:"1"無効フラグ（無効）
	 *		param[5]:電子ファイル管理番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @return 更新件数
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private int executeCC_T_TEMP_FILE_CR_UPDATE_007(String[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0]);
		paramList.setValue(param[1]);
		paramList.setValue(param[2]);
		paramList.setValue(param[3]);
		paramList.setValue(param[4]);
		paramList.setValue(param[5]);
		
		// DBアクセスを実行します
		int updatecount = db_CC_T_TEMP_FILE.executeBySqlDefine(paramList,CC_T_TEMP_FILE_CR_UPDATE_007);
		
		return updatecount;
	}
	/**
	 * SQLKEY(ZM_DELETE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		efileKanriNo:電子ファイル管理番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @return 削除
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private int executeCC_T_EFILE_KANRI_ZM_DELETE_001(Object efileKanriNo) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(efileKanriNo.toString());

		// DBアクセスを実行します
		int delcount = db_CC_T_EFILE_KANRI.executeBySqlDefine(paramList, CC_T_EFILE_KANRI_ZM_DELETE_001);
		
		return delcount;
	}

}
