/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatDKShkInfoSendFileSakusei
*	ソースファイル名	：JBSbatDKShkInfoSendFileSakusei.java
*	作成者				：富士通　
*	作成日				：2011年04月27日
*＜機能概要＞
*　出荷情報送信ファイル作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/04/27   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JDKBatOutputFileUtil;
import eo.business.util.file.JBSbatDKIFM024;
import eo.business.util.file.JBSbatDKIFM025;
import eo.business.util.file.JBSbatDKIFM026;
import eo.business.util.file.JBSbatDKIFM009;
import eo.common.constant.JDKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
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.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatDKShkInfoSendFileSakusei extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(配送)*/
	private static final String D_TBL_NAME_DK_T_HAISO = "DK_T_HAISO";

	/** テーブル(バッチ用宅内機器ワーク)*/
	private static final String D_TBL_NAME_DK_T_BAT_TKKIKI_WK = "DK_T_BAT_TKKIKI_WK";

	/** SQL定義キー(DK_SELECT_001)*/
	private static final String DK_T_HAISO_DK_SELECT_001 = "DK_SELECT_001";

	/** SQL定義キー(DK_SELECT_002)*/
	private static final String DK_T_HAISO_DK_SELECT_002 = "DK_SELECT_002";

	/** SQL定義キー(DK_UPDATE_001)*/
	private static final String DK_T_HAISO_DK_UPDATE_001 = "DK_UPDATE_001";

	/** SQL定義キー(DK_SELECT_003)*/
	private static final String DK_T_BAT_TKKIKI_WK_DK_SELECT_003 = "DK_SELECT_003";

	/** テーブルアクセスクラス(配送)*/
	private JBSbatSQLAccess db_DK_T_HAISO = null;

	/** テーブルアクセスクラス(バッチ用宅内機器ワーク)*/
	private JBSbatSQLAccess db_DK_T_BAT_TKKIKI_WK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 製造番号有無（有） */
	private static final String SEIZO_NO_UM_ARI = "1";

	/** ジョブＩＤ */
	private static final String JOB_ID = "EO5070310J0";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_DK_T_HAISO = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_T_HAISO);
		db_DK_T_BAT_TKKIKI_WK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_T_BAT_TKKIKI_WK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		/* ++++++++++ v1.00.00 追加開始 ++++++++++ */
		Long idx = new Long(0);		// カウンター
		HashMap<String, String> haisoMap = new HashMap<String, String>();	// 配送番号マップ

		// 外部出力ファイルパス（パス + ファイル名）
		String outFilePath = commonItem.getFreeItem();
		JBSbatOutputFileUtil outFile = new JBSbatOutputFileUtil(outFilePath);
		outFile.setEncode(JDKStrConst.ENCODE_SJIS);		// 文字コード
		outFile.setLine(JDKStrConst.LINE_LF);			// 改行コード

		// 配送情報を取得
		String [] param = {""};
		executeDK_T_HAISO_DK_SELECT_001(param);

		JBSbatCommonDBInterface dbMap = new JBSbatCommonDBInterface();

		// ファイルの作成
		try
		{
			outFile.createWriter();
		}
		catch (IOException ex)
		{
			super.logPrint.printDebugLog("出力ファイル作成失敗");
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0030CE,
					new String[] {outFilePath});
			throw ex;
		}

		// ヘッダ部生成
		outHeader(outFile, outFilePath);

		while (true)
		{

			dbMap = this.db_DK_T_HAISO.selectNext();
			// 取得データが存在しない場合終了
			if (null == dbMap)
			{
				break;
			}

			// 配送対象物品情報取得判定
			String strHaisoTbpNo = dbMap.getString("HAISO_TAIBPIN_NO");			// 配送対象物品番号
			String strSvkeiNo = dbMap.getString("HOJIN_SVC_KEI_UK_NOPARTS");	// サービス契約番号
			String strHaisoNo = dbMap.getString("HAISO_NO");					// 配送番号
			if (null == strHaisoTbpNo || "".equals(strHaisoTbpNo))
			{
				super.logPrint.printDebugLog("配送対象物品番号なし");
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EDKB0020KE, 
													new String[] {JDKStrConst.S_DK_T_HAISO_TG_BPIN_NM, 
													"法人サービス契約受付番号子=" + strSvkeiNo 
													+ ":" + "配送番号=" + strHaisoNo 
													+ ":" + "配送対象物品番号=" + strHaisoTbpNo});
			}
			
			// 宅内機器情報抽出
			String strModelCd = dbMap.getString("TAKNKIKI_MODEL_CD");			// 宅内機器型式コード
			String strKikiSeizoNo = dbMap.getString("KIKI_SEIZO_NO");			// 機器製造番号
			String strSeizoNoUmT = dbMap.getString("SEIZO_NO_UM_T");			// 製造番号有無（宅内機器型式）
			String strMacad = "";												// ＭＡＣアドレス
			String strMsisdn = "";												// ＭＳＩＳＤＮ
			String strEmKeishaCd = "";											// ＥＭ契約者コード

			// 製造番号有無が製造番号ありの場合のみ宅内機器情報抽出
			if (SEIZO_NO_UM_ARI.equals(strSeizoNoUmT))
			{
				
				String[] taknkikiParam = {JOB_ID, strModelCd, strKikiSeizoNo};
				JBSbatCommonDBInterface taknkikiMap = new JBSbatCommonDBInterface();
				executeDK_T_BAT_TKKIKI_WK_DK_SELECT_003(taknkikiParam);
				taknkikiMap = this.db_DK_T_BAT_TKKIKI_WK.selectNext();
				
				// 該当データが存在しなかった場合
				if (taknkikiMap == null)
				{
					super.logPrint.printDebugLog("バッチ用宅内機器ワーク情報なし");
					throw new JBSbatBusinessException(JPCBatchMessageConstant.EDKB0020KE, 
														new String[] {"バッチ用宅内機器ワーク", 
														"法人サービス契約受付番号子=" + strSvkeiNo 
														+ ":" + "宅内機器型式コード=" + strModelCd 
														+ ":" + "配送番号=" + strHaisoNo 
														+ ":" + "配送対象物品番号=" + strHaisoTbpNo});
				}
				// データ抽出
				strMacad = taknkikiMap.getString("MACAD");
				strMsisdn = taknkikiMap.getString("MSISDN");
				strEmKeishaCd = taknkikiMap.getString("EM_KEISHA_CD");
			}
			
			// データ部生成
			JBSbatServiceInterfaceMap outDataMap = new JBSbatServiceInterfaceMap();
			// レコード種別
			outDataMap.set(JBSbatDKIFM025.REC_SBT, 
							JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.RECORD_SBT_DKIFM025_DATA));
			// 連携レコード区分
			outDataMap.set(JBSbatDKIFM025.RNKI_REC_DIV, 
							JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.KIKI_SHUKKA_FIN));
			// 契約受付番号
			outDataMap.set(JBSbatDKIFM025.HOJIN_SVC_KEI_UK_NO, 
							JDKBatOutputFileUtil.encloseDQuot(strSvkeiNo));
			// サービス契約番号
			outDataMap.set(JBSbatDKIFM025.SVC_KEI_UK_NO, 
							JDKBatOutputFileUtil.encloseDQuot(dbMap.getString("HJIN_EO_YKAE_SVKEI_NO")));
			// 宅内機器型式コード
			outDataMap.set(JBSbatDKIFM025.TAKNKIKI_MODEL_CD, 
							JDKBatOutputFileUtil.encloseDQuot(strModelCd));
			// MACアドレス
			outDataMap.set(JBSbatDKIFM025.MACAD, JDKBatOutputFileUtil.encloseDQuot(strMacad));
			// 機器製造番号
			outDataMap.set(JBSbatDKIFM025.KIKI_SEIZO_NO, 
							JDKBatOutputFileUtil.encloseDQuot(dbMap.getString("KIKI_SEIZO_NO")));
			// 電話番号
			outDataMap.set(JBSbatDKIFM025.TELNO, JDKBatOutputFileUtil.encloseDQuot(strMsisdn));
			// EM契約者コード
			outDataMap.set(JBSbatDKIFM025.EM_KEI_CD, JDKBatOutputFileUtil.encloseDQuot(strEmKeishaCd));
			// 処理連番
			outDataMap.set(JBSbatDKIFM025.TRAN_SERIAL, 
							JDKBatOutputFileUtil.encloseDQuot(String.valueOf(idx + 1)));
			// 連携日時分秒
			outDataMap.set(JBSbatDKIFM025.RNKI_DATEHMS, 
							JDKBatOutputFileUtil.encloseDQuot(getOpeDateTime()));

			try
			{
				String defFile = rnktPath(JBSbatAplConst.getAplConstValue(JDKStrConst.DK_DIR_IND), "")
								+ JDKStrConst.DEF_DATA_SHUKKA_INFO;
				JBSbatDefFileUtil defDataUtil = new JBSbatDefFileUtil(defFile, outFile);
				outFile.print(outDataMap, defDataUtil);
			}
			catch (Exception ex)
			{
				super.logPrint.printDebugLog("出力ファイルデータ部書き込み失敗");
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0050CE,
						new String[] {outFilePath});
				throw ex;
			}

			// DB更新を行うため、配送番号をキーにサービス契約番号をマップに追加
			haisoMap.put(strHaisoNo, strSvkeiNo);

			idx += 1;	// 連番に1追加
		}

		// トレーラ部生成
		outTrailer(idx, outFile, outFilePath);

		// DB更新
		updateHaiso(haisoMap);

		// 中間ファイルパス（パス + ファイル名）の取得
		String midFilePath = 
			rnktPath(JBSbatAplConst.getAplConstValue(JDKStrConst.ENV_MID_DIR), "") 
			+ JDKStrConst.OUT_MID_SHUKKA_INFO_NM;

		// 中間ファイル出力
		outMidFile(outFilePath, midFilePath);
		
		/* ++++++++++ v1.00.00 追加終了 ++++++++++ */

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_DK_T_HAISO.close();
		db_DK_T_BAT_TKKIKI_WK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(DK_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 executeDK_T_HAISO_DK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();

		// DBアクセスを実行します
		db_DK_T_HAISO.selectBySqlDefine(paramList, DK_T_HAISO_DK_SELECT_001);
	}

	/**
	 * SQLKEY(DK_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 executeDK_T_HAISO_DK_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_DK_T_HAISO.selectBySqlDefine(paramList, DK_T_HAISO_DK_SELECT_002);
	}

	/**
	 * SQLKEY(DK_UPDATE_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 executeDK_T_HAISO_DK_UPDATE_001(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());

		// DBアクセスを実行します
		db_DK_T_HAISO.executeBySqlDefine(paramList, DK_T_HAISO_DK_UPDATE_001);
	}

	/**
	 * SQLKEY(DK_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 executeDK_T_BAT_TKKIKI_WK_DK_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_DK_T_BAT_TKKIKI_WK.selectBySqlDefine(paramList, DK_T_BAT_TKKIKI_WK_DK_SELECT_003);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/* ++++++++++ v1.00.00 追加開始 ++++++++++ */

	/**
	 * 配送テーブルの更新を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.配送番号をキーに配送テーブルの更新を行います。<br>
	 * </pre>
	 * <p>
	 * @param map 配送番号配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void updateHaiso(HashMap<String, String> map) throws Exception 
	{
		Iterator<String> it = map.keySet().iterator();
		while (it.hasNext())
		{
			// データロック
			String strHaisoNo = (String)it.next();
			JBSbatCommonDBInterface dbLockList = new JBSbatCommonDBInterface();
			dbLockList.setValue(strHaisoNo);	// 配送番号
			executeDK_T_HAISO_DK_SELECT_002(dbLockList.getList().toArray());

			JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
			dbList.setValue(commonItem.getOpeDate());			// 他システム連携年月日
			dbList.setValue(JCCBatCommon.getSysDateTimeStamp());// 更新年月日時分秒
			dbList.setValue(commonItem.getBatchUserId());		// 更新オペレータアカウント
			dbList.setValue(strHaisoNo);						// 配送番号

			try
			{
				executeDK_T_HAISO_DK_UPDATE_001(dbList.getList().toArray());
				super.commit();
			}
			catch (Exception ex)
			{
				commonItem.getConnection().rollback();
				super.logPrint.printDebugLog("配送情報更新失敗");
				String strSvcKeiNo = (String)map.get(strHaisoNo);
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0040CE,
						new String[] {JDKStrConst.S_DK_T_HAISO_NM,
						"法人サービス契約受付番号子=" + strSvcKeiNo
						+ "；配送番号=" + strHaisoNo});
				throw ex;
			}
		}
	}

	/**
	 * 中間ファイル出力を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.中間ファイルの出力を行います。<br>
	 * </pre>
	 * <p>
	 * @param outFile 出荷情報送信ファイル名（パス ＋ ファイル名）。
	 * @param midFile 中間ファイル名（パス ＋ ファイル名）。
	 * @return なし。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void outMidFile(String outFile, String midFile) throws Exception 
	{
		JBSbatOutputFileUtil outMidFile = new JBSbatOutputFileUtil(midFile);
		outMidFile.setEncode(JDKStrConst.ENCODE_SJIS);		// 文字コード
		outMidFile.setLine(JDKStrConst.LINE_CRLF);			// 改行コード

		// ファイル出力
		try
		{
			outMidFile.createWriter();
		}
		catch (IOException ex)
		{
			super.logPrint.printDebugLog("中間ファイル作成失敗");
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0030CE,
					new String[] {midFile});
			throw ex;
		}

		// ファイル書き込み
		JBSbatServiceInterfaceMap outMidMap = new JBSbatServiceInterfaceMap();
		outMidMap.set(JBSbatDKIFM009.FILE_NM, outFile);	// 出荷情報送信ファイル名

		try
		{
			String defFile = rnktPath(JBSbatAplConst.getAplConstValue(JDKStrConst.DK_DIR_IND), "")
							+ JDKStrConst.DEF_MID_SHUKKA_INFO;
			JBSbatDefFileUtil defMidUtil = new JBSbatDefFileUtil(defFile, outMidFile);
			outMidFile.print(outMidMap, defMidUtil);
		}
		catch (Exception ex)
		{
			super.logPrint.printDebugLog("中間ファイル書き込み失敗");
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0050CE,
					new String[] {midFile});
			throw ex;
		}
		finally
		{
			outMidFile.close();	// ファイルクローズ
		}
	}

	/**
	 * トレーラ部出力を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.トレーラ部の出力を行います。<br>
	 * </pre>
	 * <p>
	 * @param idx カウンター
	 * @param outFile ファイル出力制御クラス。
	 * @param outFilePath 出荷情報送信ファイル名（パス ＋ ファイル名）。
	 * @return なし。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void outTrailer(long idx, JBSbatOutputFileUtil outFile, String outFilePath) throws Exception 
	{
		JBSbatServiceInterfaceMap outTrailerMap = new JBSbatServiceInterfaceMap();
		// レコード種別
		outTrailerMap.set(JBSbatDKIFM026.REC_SBT, 
							JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.RECORD_SBT_DKIFM026_TRAILER));
		// レコード件数
		outTrailerMap.set(JBSbatDKIFM026.REC_CNT, 
							JDKBatOutputFileUtil.encloseDQuot(String.valueOf(idx)));

		try
		{
			String defFile = rnktPath(JBSbatAplConst.getAplConstValue(JDKStrConst.DK_DIR_IND), "")
							+ JDKStrConst.DEF_TRAILER_SHUKKA_INFO;
			JBSbatDefFileUtil defTrailerUtil = new JBSbatDefFileUtil(defFile, outFile);
			outFile.print(outTrailerMap, defTrailerUtil);
		}
		catch (Exception ex)
		{
			super.logPrint.printDebugLog("出力ファイルトレーラ部書き込み失敗");
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0050CE,
					new String[] {outFilePath});
			throw ex;
		}
		finally
		{
			outFile.close();	// ファイルクローズ
		}
	}

	/**
	 * ヘッダ部出力を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.ヘッダ部の出力を行います。<br>
	 * </pre>
	 * <p>
	 * @param outFile ファイル出力制御クラス。
	 * @param outFilePath 出力ファイル名（パス ＋ ファイル名）。
	 * @return なし。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void outHeader(JBSbatOutputFileUtil outFile, String outFilePath) throws Exception 
	{
		JBSbatServiceInterfaceMap outHeadMap = new JBSbatServiceInterfaceMap();
		// レコード種別
		outHeadMap.set(JBSbatDKIFM024.REC_SBT, 
						JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.RECORD_SBT_DKIFM024_HEADER));
		// ファイル作成年月日字分秒
		outHeadMap.set(JBSbatDKIFM024.RNKI_DATEHMS, 
						JDKBatOutputFileUtil.encloseDQuot(JCCBatCommon.getSysDateTime()));

		try
		{
			String defFile = rnktPath(JBSbatAplConst.getAplConstValue(JDKStrConst.DK_DIR_IND), "")
							+ JDKStrConst.DEF_HEAD_SHUKKA_INFO;
			JBSbatDefFileUtil defHeadUtil = new JBSbatDefFileUtil(defFile, outFile);
			outFile.print(outHeadMap, defHeadUtil);

		}
		catch (Exception ex)
		{
			super.logPrint.printDebugLog("出力ファイルヘッダ部書き込み失敗");
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0050CE,
					new String[] {outFilePath});
			throw ex;
		}
	}

	/**
	 * 運用日付時分秒の取得を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.運用日付(yyyyMMdd) + システム日時(hhmmss)を返却します。<br>
	 * </pre>
	 * <p>
	 * @return String 運用日付時分秒。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getOpeDateTime() throws Exception 
	{
		String strDate = commonItem.getOpeDate();
		String strTime = JCCBatCommon.getSysDateTime().substring(8);

		return (strDate + strTime);
	}

	/**
	 * パス文字列の連結<br>
	 * 連結するパス文字列にパス区切り文字の設定を制御する。
	 * @param path1 パス文字列
	 * @param path2 パス文字列
	 * @return 連結したパス文字列
	 */
	private String rnktPath(String path1, String path2)
	{
		String pathDlmt = "/";
		if (path1.indexOf("\\") > -1 || path2.indexOf("\\") > -1)
		{
			pathDlmt = "\\";
		}
		if (!path1.endsWith(pathDlmt))
		{
			return path1 + pathDlmt + path2;
		}
		return path1 + path2;
	}
	/* ++++++++++ v1.00.00 追加終了 ++++++++++ */
}
