/********************************************************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
*********************************************************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCRTaioRkAddAticleSohuFileSksi
*	ソースファイル名	：JBSbatCRTaioRkAddAticleSohuFileSksi.java
*	作成者				：FJ)中野(真)
*	作成日				：2019年11月19日
*
*＜機能概要＞
*	対応履歴登録・資料送付依頼ファイル作成処理
*	API連携にてディレイド起動されるバッチ処理。リクエストより問合せ履歴、Web資料受付情報を
*	サービス側にて生成し当処理にて問合せ履歴ファイル、Web資料受付情報ファイル、それに紐づく
*	件数ファイル、フラグファイルを生成し所定のフォルダへ格納する。
*
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2019/11/19  FJ)中野(真)	ANK-3701-00-00_ワンストップ向け資料送付機能追加 新規作成
********************************************************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCRBatCommon;
import eo.business.util.table.JBSbatCC_T_DLYD_TRN_REQ;
import eo.business.util.table.JBSbatCR_T_TORK_EFILE_KNRI;
import eo.common.constant.JCRStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCRUtilCommon;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.log.JBSbatLogPrintControl;
import eo.framework.util.JBSbatBusinessFileUtil;

/**
* 対応履歴登録・資料送付依頼ファイル作成処理 <p>
*<BR>
* @author 富士通
*/
public class JBSbatCRTaioRkAddAticleSohuFileSksi extends JBSbatBusinessService
{
	/** テーブル(対応履歴電子ファイル管理)*/
	private static final String D_TBL_NAME_CR_T_TORK_EFILE_KNRI = "CR_T_TORK_EFILE_KNRI";
	
	/** テーブルアクセスクラス(対応履歴電子ファイル管理)*/
	private JBSbatSQLAccess db_CR_T_TORK_EFILE_KNRI = null;
	
	/** SQL定義キー(CR_SELECT_002)*/
	private static final String CR_T_TORK_EFILE_KNRI_CR_SELECT_002 = "CR_SELECT_002";
	
	/** 問合せ履歴ファイル名キー*/
	private static final String TOIAWASE_FILEPATH = "TOIAWASE_FILEPATH";
	
	/** 問合せ履歴ファイル名を取得するキー */
	private static final String KEY_TOIAWASE_FILENAME = "KEY_TOIAWASE_FILENAME";
	
	/** 初期処理エラーメッセージ */
	private String initErrMessage = null;

	/** 問合せ履歴ファイルディレクトリ */
	private String toiawaseOutputPath = null;
	
	/** 問合せ履歴一時ファイルを配置する */
	private String toiawaseTempFilePath = null;
	
	/** Web資料受付情報ファイルディレクトリ */
	private String webAticleOutputPath = null;
	
	/**  Web資料受付情報一時ファイルを配置する */
	private String webAticleTempOutputPath = null;
	
	/** 変換処理後のファイルを取得するキー */
	static final String KEY_HENKANGO_FILE = "KEY_HENKANGO_FILE";

	/**
	 * 初期処理
	 * @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);
		
		// 初期処理開始
		try
		{
			// プロパティーファイルチェックと情報取得
			checkApplicationProperty();
		}
		catch (Exception e)
		{
			// ECRB0260KW:%1%処理中に予期せぬエラーが発生しました。　%2%
			initErrMessage = JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0260KW, new String[] {"対応履歴登録・資料送付依頼ファイル作成", e.toString()});
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0260KW, new String[] {"対応履歴登録・資料送付依頼ファイル作成", e.toString()});
			super.logPrint.printDebugLog("例外発生:" + e.toString());
			super.logPrint.printDebugLog("　　　　:" + e.getMessage());
		}
	}
	

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		// (1) ディレイド処理依頼情報取得
		ArrayList<HashMap<String, Object>> shoriIraiInfoList = JCRBatCommon.getShoriIraiInfo(commonItem, super.jobid);
		
		// ディレイド存在チェック
		if (shoriIraiInfoList == null || 0 == shoriIraiInfoList.size())
		{
			// 処理依頼が0件の場合、処理依頼が存在しないため処理を終了する。
			super.logPrint.printDebugLog("ディレイド処理依頼は存在しません。");
			JCRBatCommon.printShoriCountLog(commonItem, "ディレイド処理依頼件数", 0);
			return null;
		}
		// 処理件数ログ出力
		JCRBatCommon.printShoriCountLog(commonItem, "ディレイド処理依頼件数", shoriIraiInfoList.size());

		// (2) ディレイド処理依頼の件数実行
		for (int i = 0; i < shoriIraiInfoList.size(); i++)
		{
			// 処理結果の初期化
			// ディレイド処理結果コード
			String shoriKekkaCd = JCRStrConst.DLYD_SYSTEM_ERR;

			// 問合せファイルパス
			String toiawaseFilePath = null;

			// 問合せ一時ファイルパス
			File toiawaseTmpFile = null;
			
			// Web資料受付情報ファイル一時ファイルパス
			File mateTmpFile = null;
			
			// (3) ディレイド処理依頼情報1件読込
			// ディレイド処理依頼情報
			HashMap<String, Object> shoriIraiInfo = shoriIraiInfoList.get(i);

			// 処理依頼番号取得と電子ファイル管理番号取得
			String shoriiraiNo = (String)shoriIraiInfo.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO);
			String eFileKanriNo = (String)shoriIraiInfo.get(JBSbatCC_T_DLYD_TRN_REQ.INPUT_EFILE_KANRI_NO);

			super.logPrint.printDebugLog("処理依頼番号：" + shoriiraiNo + " 対応履歴登録・資料送付依頼ファイル作成主処理開始");
			super.logPrint.printDebugLog("電子ファイル管理番号：" + eFileKanriNo);

			try
			{
				// (4) 問合せ履歴ファイル、Web資料受付情報ファイル取得
				Map<String, String> toiawaseFileInfoMap  = checkFilePath(eFileKanriNo);
				String fileName = toiawaseFileInfoMap.get(KEY_TOIAWASE_FILENAME);

				toiawaseFilePath = toiawaseFileInfoMap.get(TOIAWASE_FILEPATH);
				File toiawaseFile = new File(JCRUtilCommon.inspection(toiawaseFilePath));

				
				
				// 問合せ履歴ファイルチェックを行う。
				// 変換後ファイル読込処理
//				Map<String, Object> checkInfoMap = checkToiawaseFile(commonItem, tmpFile, dataCount, fileName, chgCRWord);
				
				BufferedReader br = null;
				List<String>  apiDataList = new ArrayList<String>();
				
				if (initErrMessage == null)
				{
					// 初期処理チェックでエラーがない場合

					// (5) ファイル判定処理
					// 取得したファイル名からCASEファイル作成なのかMATEファイル作成なのかを判定する。
					if("CASE".equals(fileName.substring(0,4)))
					{
						// CASEファイルの場合
						File toiawaseTempFile = new File(JCRUtilCommon.inspection(toiawaseTempFilePath));
						
						// CSV一般化処理(1レコード1行に変換:問合せ一時ディレクトリ)
						Map<String, Object> tmpFileMap = JCRBatCommon.chgToOneRowForCsv(commonItem, toiawaseFile, toiawaseTempFile);
						String chgCRWord = (String)tmpFileMap.get(JCRBatCommon.KEY_KAIGYO_CD_HENKAN_MOJI);	// 改行コード変換文字
						File tmpFile = (File)tmpFileMap.get(JCRBatCommon.KEY_HENKANGO_FILE);				// 変換後一時ファイル
						toiawaseTmpFile = (File)tmpFileMap.get(KEY_HENKANGO_FILE);
						

						String outputPath = toiawaseOutputPath + JCRStrConst.FILE_KUGIRI + fileName;
						
						// アップロードされたファイルからCASEファイルを出力
						try{
							// アップロードファイル
							br = new BufferedReader(new InputStreamReader(new FileInputStream(tmpFile), JCRStrConst.DEFAULT_ENCODE));

//							// 1行読込み
							String data = br.readLine();
							
							// リストに詰め込み
							apiDataList.add(data);
							
							// (6) ファイル出力
							createFile(outputPath, apiDataList, chgCRWord);
							
							// ディレイド処理バッチに正常を設定
							shoriKekkaCd = JCRStrConst.DLYD_OK;
						}
						finally
						{
							if (br != null)
							{
								try
								{
									br.close();
								}
								catch (IOException ioe)
								{
									super.logPrint.printDebugLog("br close error");
								}
							}
						}
					}
					else if("MATE".equals(fileName.substring(0,4)))
					{
						// MATEファイルの場合
						File mateTempFile = new File(JCRUtilCommon.inspection(webAticleTempOutputPath));
						
						// CSV一般化処理(1レコード1行に変換:問合せ一時ディレクトリ)
						Map<String, Object> tmpFileMap = JCRBatCommon.chgToOneRowForCsv(commonItem, toiawaseFile, mateTempFile);
						String chgCRWord = (String)tmpFileMap.get(JCRBatCommon.KEY_KAIGYO_CD_HENKAN_MOJI);	// 改行コード変換文字
						File tmpFile = (File)tmpFileMap.get(JCRBatCommon.KEY_HENKANGO_FILE);				// 変換後一時ファイル
						mateTmpFile = (File)tmpFileMap.get(KEY_HENKANGO_FILE);
						

						String outputPath = webAticleOutputPath + JCRStrConst.FILE_KUGIRI + fileName;
						
						// アップロードされたファイルからCASEファイルを出力
						try{
							// アップロードファイル
							br = new BufferedReader(new InputStreamReader(new FileInputStream(tmpFile), JCRStrConst.DEFAULT_ENCODE));

							// 1行読込み
							String data = br.readLine();
							
							// リストに詰め込み
							apiDataList.add(data);
							
							// (6) ファイル出力
							createFile(outputPath, apiDataList, chgCRWord);
							
							// ディレイド処理バッチに正常を設定
							shoriKekkaCd = JCRStrConst.DLYD_OK;
						}
						finally
						{
							if (br != null)
							{
								try
								{
									br.close();
								}
								catch (IOException ioe)
								{
									super.logPrint.printDebugLog("br close error");
								}
							}
						}
					}
				}
				else
				{
					// 初期処理チェックでエラーがある場合
					// システムエラーフラグを設定する
					shoriKekkaCd = JCRStrConst.DLYD_SYSTEM_ERR;
				}
			}
			catch (JBSbatBusinessException ex)
			{	
				// システムエラーフラグを設定する
				shoriKekkaCd = JCRStrConst.DLYD_SYSTEM_ERR;
				super.logPrint.printDebugLog("処理依頼番号：" + shoriiraiNo);
				super.logPrint.printDebugLog("例外発生:" + ex.toString());
				super.logPrint.printDebugLog("　　　　:" + ex.getMessage());
			}
			finally
			{
				// 正常終了の場合
				if (JCRStrConst.DLYD_OK.equals(shoriKekkaCd))
				{
					// (7) 終了処理
					// (7)-(a)ディレイド処理結果を正常で更新
					JCRBatCommon.updateShoriIraiResult(commonItem, shoriiraiNo, shoriKekkaCd, null);
					super.logPrint.printDebugLog("ディレイド処理依頼結果： 正常");
				}
				// エラーが存在する場合
				else
				{
					// (7) 終了処理
					// (7)-(a)ディレイド処理結果をシステムエラーで更新
						JCRBatCommon.updateShoriIraiResult(commonItem, shoriiraiNo, shoriKekkaCd, null);
						super.logPrint.printDebugLog("ディレイド処理依頼結果： システムエラー");
				}
				
				// (7)-(b)ディレイド処理結果コミット
				super.commit();
				super.logPrint.printDebugLog("処理依頼番号：" + shoriiraiNo + " コミット実行");
				
				if (toiawaseTmpFile != null)
				{
					JCRUtilCommon.deleteTempFile(toiawaseTmpFile.getPath());
					super.logPrint.printDebugLog("一時ファイル物理削除： " + toiawaseTmpFile.getPath());
				}
				
				if (mateTmpFile != null)
				{
					JCRUtilCommon.deleteTempFile(mateTmpFile.getPath());
					super.logPrint.printDebugLog("一時ファイル物理削除： " + mateTmpFile.getPath());
				}
			}
				

		}
		return null;
	}

	/**
	 * プロパティ情報設定とチェック<br>
	 * 初期処理でプロパティ情報を取得し設定します<br>
	 * @throws Exception 例外
	 */
	private void checkApplicationProperty() throws Exception
	{
		if (initErrMessage == null)
		{
			// 問合せ履歴ファイルディレクトリ取得＆チェック
			toiawaseOutputPath = checkToiawaseFilePath();
		}
		
		if (initErrMessage == null)
		{
			// 問合せ履歴一時ファイルディレクトリ取得＆チェック
			toiawaseTempFilePath = checkToiawaseTempFilePath();
		}

		if (initErrMessage == null)
		{
			// Web資料受付情報ファイルディレクトリ取得＆チェック
			webAticleOutputPath = checkwebAticleFilePath();
		}
		
		if (initErrMessage == null)
		{
			//Web資料受付情報一時ファイルディレクトリ取得＆チェック
			webAticleTempOutputPath = checkwebAticleTempFilePath();
		}
	}

	/**
	 * 問合せ履歴ファイルディレクトリ取得とチェック<br>
	 * @return 問合せ履歴ファイルディレクトリ
	 * @throws Exception 例外
	 */
	private String checkToiawaseFilePath() throws Exception
	{
		boolean existError = false;

		// 問合せ履歴ファイルディレクトリを取得
		String hozonPath = JCRBatCommon.getApplicationConst("CR_TWS_RK_FILE_DIR");
		if (hozonPath == null || "".equals(hozonPath.trim()))
		{
			// ECRB0010KW:プロパティーファイルの設定が正しくありません。(項目名:%1%)
			initErrMessage = JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0010KW, new String[] {"問合せファイルディレクトリ"});
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0010KW, new String[] {"問合せファイルディレクトリ"});
			existError = true;
		}
		else
		{
			File csvPath = JCRUtilCommon.checkDirExist(hozonPath);
			if (csvPath == null)
			{
				// ECRB0160KW:指定されたパスが存在しません。(%1%)
				String[] messageParams = new String[] {"プロパティ:CR_TWS_RK_FILE_DIR:" + hozonPath};
				initErrMessage = JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0160KW, messageParams);
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0160KW, messageParams);
				existError = true;
			}
			super.logPrint.printDebugLog("問合せファイルディレクトリ:" + csvPath);
		}
		if (existError == true)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0010KW, new String[]{"問合せファイルディレクトリ"});
		}

		return hozonPath;
	}
	
	/**
	 * 問合せ一時ファイルディレクトリ取得とチェック<br>
	 * @return 問合せ履歴一時ファイルディレクトリ
	 * @throws Exception 例外
	 */
	private String checkToiawaseTempFilePath() throws Exception
	{
		boolean existError = false;

		// 問合せ履歴一時ファイルディレクトリを取得
		String hozonPath = JCRBatCommon.getApplicationConst("CR_TWS_RK_TMP_FILE_DIR");
		if (hozonPath == null || "".equals(hozonPath.trim()))
		{
			// ECRB0010KW:プロパティーファイルの設定が正しくありません。(項目名:%1%)
			initErrMessage = JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0010KW, new String[] {"問合せ一時ファイルディレクトリ"});
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0010KW, new String[] {"問合せ一時ファイルディレクトリ"});
			existError = true;
		}
		else
		{
			File csvPath = JCRUtilCommon.checkDirExist(hozonPath);
			if (csvPath == null)
			{
				// 存在しない場合
				// ECRB0160KW:指定されたパスが存在しません。(%1%)
				String[] messageParams = new String[] {"プロパティ:CR_TWS_RK_TMP_FILE_DIR:" + hozonPath};
				initErrMessage = JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0160KW, messageParams);
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0160KW, messageParams);
				existError = true;
			}
			super.logPrint.printDebugLog("問合せ一時ファイルディレクトリ取得:" + csvPath);
		}
		if (existError == true)
		{
			hozonPath = null;
		}
		
		return hozonPath;
	}
	
	/**
	 * Web資料受付情報ファイルディレクトリ取得とチェック<br>
	 * @return Web資料受付情報ファイルディレクトリ
	 * @throws Exception 例外
	 */
	private String checkwebAticleFilePath() throws Exception
	{
		boolean existError = false;

		// Web資料受付情報ファイルディレクトリを取得
		String hozonPath = JCRBatCommon.getApplicationConst("CR_WEB_UKTK_FILE_DIR");
		if (hozonPath == null || "".equals(hozonPath.trim()))
		{
			// ECRB0010KW:プロパティーファイルの設定が正しくありません。(項目名:%1%)
			initErrMessage = JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0010KW, new String[] {"Web資料受付情報ファイルディレクトリ"});
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0010KW, new String[] {"Web資料受付情報ファイルディレクトリ"});
			existError = true;
		}
		else
		{
			File csvPath = JCRUtilCommon.checkDirExist(hozonPath);
			if (csvPath == null)
			{
				// ECRB0160KW:指定されたパスが存在しません。(%1%)
				String[] messageParams = new String[] {"プロパティ:CR_WEB_UKTK_FILE_DIR:" + hozonPath};
				initErrMessage = JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0160KW, messageParams);
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0160KW, messageParams);
				existError = true;
			}
			super.logPrint.printDebugLog("Web資料受付情報ファイルディレクトリ:" + csvPath);
		}
		if (existError == true)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0010KW, new String[]{"Web資料受付情報ファイルディレクトリ"});
		}

		return hozonPath;
	}

		/**
		 * Web資料受付情報一時ファイルディレクトリ取得とチェック<br>
		 * @return 問合せ履歴一時ファイルディレクトリ
		 * @throws Exception 例外
		 */
		private String checkwebAticleTempFilePath() throws Exception
		{
			boolean existError = false;

			// 問合せ履歴一時ファイルディレクトリを取得
			String hozonPath = JCRBatCommon.getApplicationConst("CR_WEB_UKTK_TMP_FILE_DIR");
			if (hozonPath == null || "".equals(hozonPath.trim()))
			{
				// ECRB0010KW:プロパティーファイルの設定が正しくありません。(項目名:%1%)
				initErrMessage = JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0010KW, new String[] {" Web資料受付情報時ファイルディレクトリ"});
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0010KW, new String[] {" Web資料受付情報一時ファイルディレクトリ"});
				existError = true;
			}
			else
			{
				File csvPath = JCRUtilCommon.checkDirExist(hozonPath);
				if (csvPath == null)
				{
					// 存在しない場合
					// ECRB0160KW:指定されたパスが存在しません。(%1%)
					String[] messageParams = new String[] {"プロパティ:CR_WEB_UKTK_TMP_FILE_DIR:" + hozonPath};
					initErrMessage = JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0160KW, messageParams);
					super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0160KW, messageParams);
					existError = true;
				}
				super.logPrint.printDebugLog(" Web資料受付情報一時ファイルディレクトリ取得:" + csvPath);
			}
			if (existError == true)
			{
				hozonPath = null;
			}
			
			return hozonPath;
		}
		
	/**
	 * 問合せ履歴orWeb資料受付情報のファイルパスとファイル名取得<br>
	 * @param eKanriFileNo 電子ファイル管理番号
	 * @return 対応履歴ファイルMap
	 * @throws Exception 例外
	 */
	private Map<String, String> checkFilePath(String eKanriFileNo) throws Exception
	{
		// 対応履歴ファイル情報Map
		Map<String, String> resultMap = new HashMap<String, String>();
	
		// (4)-(a) 共通部品の電子ファイル管理一意照会処理を使用し問合せ履歴ファイルパス、Web資料受付情報ファイルパスを取得する。
		String filePath = getFilePath(eKanriFileNo);
		resultMap.put(TOIAWASE_FILEPATH, filePath);
		
		// (4)-(b) 対応履歴ファイル取込ディレイド処理用ファイル名取得
		executeCR_T_TORK_EFILE_KNRI_CR_SELECT_002(new Object[]{JCRStrConst.CD_DIV_BUNSHO_SBT_CD_TRKM_API_DYLD , eKanriFileNo});
		JBSbatCommonDBInterface selectedData = db_CR_T_TORK_EFILE_KNRI.selectNext();
		if(selectedData == null)
		{
			// ファイル名が取得できない場合
			String[] chikanMoji = {"対応履歴電子ファイル管理テーブル"};
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0250KW, chikanMoji);
			super.logPrint.printDebugLog(JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0250KW, chikanMoji));
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0250KW, chikanMoji);
		}

		resultMap.put(KEY_TOIAWASE_FILENAME, selectedData.getString(JBSbatCR_T_TORK_EFILE_KNRI.TAIORRKI_BUNSHO_FILE_NM));

		return resultMap;
	}

	/**
	 * 問問合せ履歴ファイルパス、Web資料受付情報ファイルパス取得処理<br>
	 * @param eKanriFileNo 電子ファイル番号
	 * @return 問合せ履歴ファイルパスorWeb資料受付情報ファイルパス
	 * @throws Exception 例外
	 */
	private String getFilePath(String eKanriFileNo) throws Exception
	{
		// ファイルパス取得
		String filePath = JCRBatCommon.searchDenshiFile(commonItem, eKanriFileNo);

		// 電子ファイル管理レコードの存在チェック
		if(filePath == null || "".equals(filePath))
		{
			// 電子ファイル管理テーブルの電子ファイルレコードが取得できない場合
			String[] chikanMoji = {"電子ファイル管理テーブル 電子ファイル管理番号:" + eKanriFileNo};
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0250KW, chikanMoji);
			super.logPrint.printDebugLog(JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0250KW, chikanMoji));
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0250KW, chikanMoji);
		}
		
		return filePath;
	}

	/**
	 * SQLKEY(CR_SELECT_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 executeCR_T_TORK_EFILE_KNRI_CR_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CR_T_TORK_EFILE_KNRI.selectBySqlDefine(paramList, CR_T_TORK_EFILE_KNRI_CR_SELECT_002);
	}

	/**
	 * ファイル出力
	 * @param toiawaseFilePath		問合せ履歴ファイルorWeb資料受付情報ファイルディレクトリ
	 * @param dataList				アップロードファイルデータ
	 * @param henkanMoji			変換文字
	 * @throws Exception 例外
	 */
	private void createFile(String toiawaseFilePath, List<String> dataList, String henkanMoji) throws Exception
	{

		// ファイル出力
		int count = createDataFile(toiawaseFilePath, dataList, henkanMoji);
		
		// 件数ファイル出力
		createCountFile(toiawaseFilePath, count);

		// フラグファイル出力
		createFlgFile(toiawaseFilePath);
		
		return;
	}

	/**
	 * データファイル出力
	 * @param toiawaseFilePath		問合せ履歴ファイルディレクトリ
	 * @param dataList				問合せ履歴チェック対応データ
	 * @param henkanMoji			変換文字
	 * @return 出力行数
	 * @throws Exception 例外
	 */
	private int createDataFile(String toiawaseFilePath, List<String> dataList, String henkanMoji) throws Exception
	{

		// ファイル作成
		JBSbatBusinessFileUtil toiawaseFileObj =
			JCRBatCommon.createBusinessFileUtil(toiawaseFilePath, JCRStrConst.MOJI_CD_MS932, JCRStrConst.KAIGYO_CD, "");

		try
		{
			super.logPrint.printDebugLog("ファイル作成:" + toiawaseFilePath);
			// 出力データ作成
			for(int i = 0; i < dataList.size(); i++)
			{	
				// CSV一般化を戻す
				String toiawaseData =  dataList.get(i).replaceAll(henkanMoji, JCRStrConst.KAIGYO_CD);
				
				// ファイルにデータを書き込む
				JCRBatCommon.printBusinessFileUtil(toiawaseFileObj, toiawaseData);
			}
		}
		finally
		{
			// ファイルオブジェクトのクローズ
			JCRBatCommon.closeBusinessFileUtil(toiawaseFileObj);
			super.logPrint.printDebugLog("ファイルオブジェクトクローズ処理実行");
		}

		return dataList.size();
	}

	/**
	 * 件数ファイル出力
	 * @param toiawaseFilePath		出力ファイルディレクトリ
	 * @param count					件数
	 * @throws Exception 例外
	 */
	private void createCountFile(String toiawaseFilePath, int count) throws Exception
	{

		String toiawaseFileName = toiawaseFilePath;	

		// ファイル名の拡張子変更
		int index = toiawaseFileName.lastIndexOf(".");
		if (-1 < index)
		{
			toiawaseFileName = toiawaseFileName.substring(0, index);
		}
		String countFile = toiawaseFileName  + "_CNT.TXT";
		
		// 件数ファイル作成
		JBSbatBusinessFileUtil toiawaseFileObj =
			JCRBatCommon.createBusinessFileUtil(countFile, JCRStrConst.MOJI_CD_MS932, JCRStrConst.KAIGYO_CD, "");
		try
		{
			super.logPrint.printDebugLog("件数ファイル作成:" + countFile);	
	
			JCRBatCommon.printBusinessFileUtil(toiawaseFileObj, Integer.toString(count));
		}
		finally
		{
			// ファイルオブジェクトのクローズ
			JCRBatCommon.closeBusinessFileUtil(toiawaseFileObj);
			super.logPrint.printDebugLog("件数ファイルオブジェクトクローズ処理実行");
		}
		return;
	}

	/**
	 * フラグファイル出力
	 * @param toiawaseFilePath		ファイルディレクトリ
	 * @throws Exception 例外
	 */
	private void createFlgFile(String toiawaseFilePath) throws Exception
	{

		String toiawaseFileName = toiawaseFilePath;	

		// ファイル名の拡張子変更
		int index = toiawaseFileName.lastIndexOf(".");
		if (-1 < index)
		{
			toiawaseFileName = toiawaseFileName.substring(0, index);
		}
		String countFile = toiawaseFileName  + "_FTP.FLG";

		// フラグファイル作成
		JBSbatBusinessFileUtil toiawaseFileObj =
			JCRBatCommon.createBusinessFileUtil(countFile, JCRStrConst.MOJI_CD_MS932, JCRStrConst.KAIGYO_CD, "");
		try
		{
			super.logPrint.printDebugLog("フラグファイル作成:" + countFile);
		}
		finally
		{
			// ファイルオブジェクトのクローズ
			JCRBatCommon.closeBusinessFileUtil(toiawaseFileObj);
			super.logPrint.printDebugLog("フラグファイルオブジェクトクローズ処理実行");
		}

		return;
	}

	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		// DBアクセスクラスをクローズします
		db_CR_T_TORK_EFILE_KNRI.close();

		// データアクセスオブジェクトクローズ
		JCRBatCommon.closeDataAccessObj(commonItem);
	}
}
