/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKMskmDmenInfoDel
*	ソースファイル名	：JBSbatKKMskmDmenInfoDel.java
*	作成者				：富士通　
*	作成日				：2013年02月13日
*＜機能概要＞
*　申込断面情報物理削除部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/02/13   富士通		新規作成
*	v5.00.00	2013/04/16	FJ)高川		【IT1-2013-0000930】中間ファイルディレクトリ不備対応
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.StringTokenizer;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM405;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.log.JBSbatLogPrintControl;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatCheckUtil;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;


/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKMskmDmenInfoDel extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(申込断面)*/
	private static final String D_TBL_NAME_KK_T_MSKM_DMEN = "KK_T_MSKM_DMEN";

	/** テーブル(申込断面明細)*/
	private static final String D_TBL_NAME_KK_T_MSKM_DMEN_DTL = "KK_T_MSKM_DMEN_DTL";

	/** SQL定義キー(KK_SELECT_003)*/
	private static final String KK_T_MSKM_DMEN_KK_SELECT_003 = "KK_SELECT_003";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_T_MSKM_DMEN_DTL_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_DELETE_001)*/
	private static final String KK_T_MSKM_DMEN_KK_DELETE_001 = "KK_DELETE_001";

	/** SQL定義キー(KK_DELETE_001)*/
	private static final String KK_T_MSKM_DMEN_DTL_KK_DELETE_001 = "KK_DELETE_001";

	/** テーブルアクセスクラス(申込断面)*/
	private JBSbatSQLAccess db_KK_T_MSKM_DMEN = null;

	/** テーブルアクセスクラス(申込断面明細)*/
	private JBSbatSQLAccess db_KK_T_MSKM_DMEN_DTL = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** メッセージキー*/
	private static final String EKKB0130CE = JPCBatchMessageConstant.EKKB0130CE;
	/** メッセージキー*/
	private static final String EKKB0100AE = JPCBatchMessageConstant.EKKB0100AE;
	/** メッセージキー*/
	private static final String EKKB0010CW = JPCBatchMessageConstant.EKKB0010CW;
	/** メッセージキー*/
	private static final String EKKB0060TE = JPCBatchMessageConstant.EKKB0060TE;
	/** メッセージキー*/
	private static final String EKKB0070TE = JPCBatchMessageConstant.EKKB0070TE;
	/** メッセージキー*/
	private static final String EKKB0080TE = JPCBatchMessageConstant.EKKB0080TE;
	/** メッセージキー*/
	private static final String EKKB0780AI = JPCBatchMessageConstant.EKKB0780AI;
	/** メッセージキー*/
	private static final String EKKB0760AI = JPCBatchMessageConstant.EKKB0760AI;
	/** メッセージキー*/
	private static final String EKKB0750AI = JPCBatchMessageConstant.EKKB0750AI;
	/** 削除連携データファイル名称*/
	private static final String DEL_FILE_NAME = "削除連携データファイル";
	/** エラーレコードファイル付与*/
	private static final String ADD_ERR_RECORD_NAME = "_err_record_";
	/** エラーレコードファイルID*/
	private static final String ERR_RECORD_FILE_ID = "KKIFM406";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_KK_T_MSKM_DMEN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DMEN);
		db_KK_T_MSKM_DMEN_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DMEN_DTL);
	/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// シェルからのFREEパラメータ取得
		String strFreeParam = commonItem.getFreeItem();
		
		// パラメータを区切り文字で分割して配列に格納する
		String[] lines = strFreeParam.split(JKKBatConst.S_PARAM_DELIM);
		
		// パラメータ数チェック
		if(lines.length != 1 || "".equals(lines[0]))
		{
			throw new JBSbatBusinessException(EKKB0130CE, new String[]{"FREE"});
		}
		/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 削除データファイルファイル配置先(フルパス)を取得
		String filePath = commonItem.getFreeItem();
		
		//  削除データファイルの値をarrayListに格納
		ArrayList<String> delDataFileObj = readFile(filePath);
		
		// フルパスを/(スラッシュ)で区切る
		String[] strDelFilelist = filePath.split(JKKStrConst.PATH_DLMT_UNIX);
		
		// エラーレコードファイルリスト
		ArrayList<String> errRecFileList =  new ArrayList<String>();
		
		//  ファイルディレクトリを格納
		String fileDirGet = "";
		
		//  ファイルディレクトリを取得する
		for(int i = 0; i < strDelFilelist.length -1; i++)
		{
			fileDirGet += strDelFilelist[i];
			fileDirGet += JKKStrConst.PATH_DLMT_UNIX;
		}
		
		// 取得した削除連携データファイルファイルディレクトリを格納
		String errRecordFileDir =  fileDirGet;
		
		//  削除データファイル定義ファイル名を取得する
		String strDelFileNm = strDelFilelist[strDelFilelist.length - 1];
		
		// システム日時を取得
		String strSysDate = JBSbatDateUtil.getSystemDateTimeStamp();
		
		// ファイル読込件数
		int intfileRecCnt = 0;
		// 申込断面の物理削除数
		int intMdDelCnt = 0;
		// 申込断面明細の物理削除数
		int intMddDelCnt = 0;
		// 単項目チェック用に保持
		HashMap<String, String> itemValueMap = new HashMap<String, String>();
		itemValueMap.put("TXT-KKIFM405-.MSKMSHO_NO", "削除連携データファイル.申込書番号");
		
		//要素数分繰り返す。
		for(String Mskmshorecord : delDataFileObj)
		{
			// 申込断面の削除失敗フラグ
			Boolean DmenNotDelFlg = false;
			
			//申込書番号の""をはずしてリスト格納
			ArrayList<String> delDataFileList = convEscapeStringToList(Mskmshorecord,'"');
			
			//申込書番号を取得
			String MskmshoNo = delDataFileList.get(0);
			
			//単項目チェックを行う(申込書番号一件、)
			if(false == isSingleCheckKKIFM405(MskmshoNo,itemValueMap))
			{
				//入力ファイルがエラーの場合、処理終了
				throw new JBSbatBusinessException(EKKB0100AE, new String[]{DEL_FILE_NAME});
			}
			
			// ファイルレコード件数カウントアップ
			intfileRecCnt++;
			
			//@申込断面情報取得
			// 申込断面データ存在チェック
			JBSbatCommonDBInterface dbList1 = new JBSbatCommonDBInterface();
			dbList1. setValue(MskmshoNo);
			executeKK_T_MSKM_DMEN_KK_SELECT_003(dbList1.getList().toArray());
			JBSbatCommonDBInterface mapMDCnt = new JBSbatCommonDBInterface();
			
			// SQL実行結果の取得
			mapMDCnt = db_KK_T_MSKM_DMEN.selectNext(); 
			int intMDCnt = Integer.parseInt(mapMDCnt.getString("MSKMSHO_NO_KEKKA"));
			
			//申込断面に存在する場合(SELECTの判定結果が1の場合)
			if(1 <= intMDCnt)
			{
				//削除対象の申込書番号があるので削除を実施。
				int delCnt1 = executeKK_T_MSKM_DMEN_KK_DELETE_001(dbList1.getList().toArray());
				
				//削除に失敗した場合
				if(0 == delCnt1)
				{
					errRecFileList.add(MskmshoNo);
					
					//申込断面にて削除しなかった場合のフラグ
					DmenNotDelFlg = true;
				}
				else
				{
					//申込断面_削除数をカウント
					intMdDelCnt += delCnt1;
				}
			}
			
			//A申込断面明細情報取得
			JBSbatCommonDBInterface dbList2 = new JBSbatCommonDBInterface();
			dbList2. setValue(MskmshoNo);
			executeKK_T_MSKM_DMEN_DTL_KK_SELECT_001(dbList2.getList().toArray());
			JBSbatCommonDBInterface mapMDCnt2 = new JBSbatCommonDBInterface();
			
			// SQL実行結果の取得
			mapMDCnt2 = db_KK_T_MSKM_DMEN_DTL.selectNext(); 
			int intMDCnt2 = Integer.parseInt(mapMDCnt2.getString("MSKMSHO_NO_KEKKA"));
			
			//申込断面明細に存在する場合(SELECTの判定結果が1の場合)
			if(1 <= intMDCnt2)
			{
				//削除対象の申込書番号があるので削除を実施。
				int delCnt2 = executeKK_T_MSKM_DMEN_DTL_KK_DELETE_001(dbList2.getList().toArray());
				
				//削除に失敗した場合
				if(0 == delCnt2)
				{
					//申込断面で削除失敗していない場合
					if(!DmenNotDelFlg)
					{
						errRecFileList.add(MskmshoNo);
					}
				}
				else
				{
					//申込断面明細_削除数をカウント
					intMddDelCnt += delCnt2;
				}
			}
		}
		
		if(0 != errRecFileList.size())
		{
			//申込断面削除エラーレコードファイル名作成
			String errorRecordFileName = strSysDate + ADD_ERR_RECORD_NAME + strDelFileNm;
			String fileId = ERR_RECORD_FILE_ID;
			
			JBSbatOutputItem outputBean = new JBSbatOutputItem();
			
			for(int i = 0 ; i < errRecFileList.size();i++)
			{
				String errRecFileNo = errRecFileList.get(i);
				
				JBSbatServiceInterfaceMap outmapKKIFM405 = new JBSbatServiceInterfaceMap();
				
				// 申込断面削除エラーレコードファイル用項目へ設定
				outmapKKIFM405.setString(JBSbatKKIFM405.MSKMSHO_NO, errRecFileNo);
				
				outputBean.addOutMapList(outmapKKIFM405);
				
				//引数@業務共通電文,A編集対象情報,BファイルID,C出力ディレクトリ(「/」で終わっていること),D出力ファイル名
				editOutFile(commonItem,outputBean,fileId, errRecordFileDir, errorRecordFileName);
			}
			// ログ出力
			super.logPrint.printBusinessErrorLog(EKKB0010CW, new String[] {"削除対象レコードの物理削除に失敗しました。"});
			super.logPrint.printBusinessErrorLog(EKKB0760AI, new String[] {"申込断面削除エラーレコード", String.valueOf(errRecFileList.size())});
		}
		
		// 処理件数ログ出力
		super.logPrint.printBusinessErrorLog(EKKB0750AI, new String[] {"削除連携データ", String.valueOf(intfileRecCnt)});
		super.logPrint.printBusinessErrorLog(EKKB0780AI, new String[] {"申込断面", String.valueOf(intMdDelCnt)});
		super.logPrint.printBusinessErrorLog(EKKB0780AI, new String[] {"申込断面明細", String.valueOf(intMddDelCnt)});
		
		return null;
	}
	
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_MSKM_DMEN.close();
		db_KK_T_MSKM_DMEN_DTL.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 *入力情報（削除連携データファイル）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-KKIFM405-.MSKMSHO_NO			削除連携データファイル.申込書番号
	 *			 TXT-KKIFM405-.MSKMSHO_NO			削除連携データファイル.申込書番号
	 *			 TXT-KKIFM405-.MSKMSHO_NO			削除連携データファイル.申込書番号
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckKKIFM405(String MskmshoNo, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// 申込書番号項目チェック
		strValue = MskmshoNo;
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog(EKKB0060TE, new String[]{
															(String)itemvalueMap.get("TXT-KKIFM405-.MSKMSHO_NO")});
			return false;
		}
		
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1", "10", "10"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(EKKB0070TE, new String[]{
															(String)itemvalueMap.get("TXT-KKIFM405-.MSKMSHO_NO")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji8"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(EKKB0080TE, new String[]{
															(String)itemvalueMap.get("TXT-KKIFM405-.MSKMSHO_NO")});
			return false;
		}

		return true;
	}

	/**
	 * SQLKEY(KK_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	申込書番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_MSKM_DMEN_KK_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
	 	db_KK_T_MSKM_DMEN.selectBySqlDefine(paramList, KK_T_MSKM_DMEN_KK_SELECT_003);
		

 	}

	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	申込書番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_MSKM_DMEN_DTL_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DMEN_DTL.selectBySqlDefine(paramList, KK_T_MSKM_DMEN_DTL_KK_SELECT_001);
	}

	/**
	 * SQLKEY(KK_DELETE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	申込書番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private int executeKK_T_MSKM_DMEN_KK_DELETE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します		
		return db_KK_T_MSKM_DMEN.executeBySqlDefine(paramList, KK_T_MSKM_DMEN_KK_DELETE_001);
	}

	/**
	 * SQLKEY(KK_DELETE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	申込書番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private int executeKK_T_MSKM_DMEN_DTL_KK_DELETE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		return db_KK_T_MSKM_DMEN_DTL.executeBySqlDefine(paramList, KK_T_MSKM_DMEN_DTL_KK_DELETE_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	
	/**
	 * 「削除データファイル読み込みArrayListへ一行ずつ格納する」処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で読込ファイルディレクトリ(フルパス)を設定します。<br>
	 *
	 * 2.引数を元にファイル読込を行い、行をListへ格納します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param filePath  (フルパス)。
	 * @return resultList   返却用List
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private static ArrayList<String> readFile(String filePath) throws Exception
	{
		ArrayList<String> resultList = new  ArrayList<String>();
		
		// 外部出力ファイルパス
		JBSbatInputFileUtil inFile = new JBSbatInputFileUtil(filePath);
		inFile.setEncode(JKKStrConst.ENCODE_SJIS);						// 文字コード
		inFile.setLine(JKKStrConst.KAIGYO_CD);			// 改行コード
		inFile.createReader();
		
		try
		{
			while(true)
			{
				String line = inFile.readLine();
				if(line == null)
				{
					inFile.close();
					break;
				}
				
				
				resultList.add(line);
			}
			
			return resultList;
		}
		catch (IOException e)
		{
			throw e;
		}
		finally
		{
			inFile.close();
		}
	}
	
	
	/**
	 * 引数で指定されたCSVファイルの一行データを項目ごとに分割し、
	 * 引数の囲い文字を除外した状態でList格納する。
	 * @param  line 一行分のCSVデータ
	 * @param  kakoiMoji 囲み文字
	 * @return ArrayList 項目ごとにCSVデータを格納したList
	 * @throws Exception 例外
	 */
	private ArrayList<String> convEscapeStringToList(String line, char kakoiMoji) throws Exception
	{

		// 戻り値格納用List
		ArrayList<String> resultList = new ArrayList<String>();

		StringTokenizer st = new StringTokenizer(line, ",");
		StringBuffer bf = new StringBuffer();
		int len = 0;

		while (st.hasMoreElements())
		{
			String s = st.nextToken();
			bf = new StringBuffer();
			bf.append(s);
			len = bf.length();

			// 先頭文字が囲み文字の場合除去
			if(bf.charAt(0) == (kakoiMoji))
			{
				bf.delete(0, 1);
				len = len - 1;
			}

			// 終端文字が囲み文字の場合除去
			if(bf.charAt(len - 1) == (kakoiMoji))
			{
				bf.delete(len - 1, len);
			}

			// 戻り値となるリストに1項目分のデータ格納
			resultList.add(bf.toString());
		}

		// 1行分のデータを格納したListを返却
		return resultList;
	}
	
	/**
	 * ファイル出力処理
	 * ファイル定義を元に編集を行い、指定されたディレクトリ、ファイル名で出力を行う。
	 * @param cmnItem 業務共通電文
	 * @param outputBean　編集対象情報
	 * @param fileId ファイルID
	 * @param directory 出力ディレクトリ(「/」で終わっていること)
	 * @param fileName 出力ファイル名
	 * @return true：正常終了 false：入力チェックエラー
	 * @throws Exception
	 */   
	
	public static boolean editOutFile(JBSbatCommonItem cmnItem,JBSbatOutputItem outputBean, String fileId, 
			String directory, String fileName) throws Exception 
	{
		// ログ部品の取得
		JBSbatLogPrintControl log = cmnItem.getLogPrint();
		log.printDebugLog("ファイル出力処理を行います。");
		try 
		{
			// 編集対象情報がnull、またはファイルID、出力ディレクトリ、出力ファイルが空文字となる場合、リターン
			if (outputBean == null || JBSbatStringUtil.Rtrim(fileId).equals("")
					|| JBSbatStringUtil.Rtrim(directory).equals("")
					|| JBSbatStringUtil.Rtrim(fileName).equals("")) 
			{
				log.printDebugLog("入力パラメータが正しくありません。");
				return false;
			}
			
			// ディレクトリが存在しない場合
			if(new File(directory).exists() == false) 
			{
				log.printDebugLog("出力ディレクトリが存在しません。");
				return false;
			}
			
			// 定義ファイル名
			String fileDefName = fileId + ".def";
			// 出力ファイル名(fullPath)
			String outFileName = directory + fileName;
			
			// 出力ファイルユーティリティの生成
			JBSbatOutputFileUtil outFileObj = new JBSbatOutputFileUtil(outFileName);
			
			//定義ファイル名(fullPath)を取得する。
			String fileDefNameFull = JBSbatAplConst.getAplConstValue("OTD") + fileDefName;
			// 定義ファイルオブジェクトを生成する
			JBSbatDefFileUtil outFileDef = new JBSbatDefFileUtil(fileDefNameFull,outFileObj);
			
			//Writerオブジェクトを生成する。
			outFileObj.createWriter();
			
			// 出力結果リストを取得する
			ArrayList<?> outBeanList = outputBean.getOutMapList(); // 出力結果リスト
			
			// 出力結果レコードの出力および次レコード処理用情報を設定する
			for (int i = 0; i < outBeanList.size(); i++) 
			{
				JBSbatServiceInterfaceMap svcBeanIf = (JBSbatServiceInterfaceMap)outBeanList.get(i);
				
				// ファイルに出力する
				outFileObj.print(svcBeanIf,outFileDef);
			}
			
			// ファイルをクローズする.
			outFileObj.close();
			
			log.printDebugLog("ファイル出力処理が終了しました。");
			return true;
			
		} 
		catch(Exception e) 
		{
			//例外メッセージの取得
			String message = e.getMessage();
			log.printDebugLog("システムエラーが発生しました。（" + message +"）");
			throw e;
		}
	}
}
