/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatDKNyukaFinReqInfoStku
*	ソースファイル名	：JBSbatDKNyukaFinReqInfoStku.java
*	作成者				：富士通　
*	作成日				：2012年05月22日
*＜機能概要＞
*　入荷完了処理依頼情報取得部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/05/22   FJ)田中	新規作成
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatDKIFM087;
import eo.common.constant.JDKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JDKCommonUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.util.JBSbatAplConst;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatDKNyukaFinReqInfoStku extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 入荷ディレイド処理依頼番号ファイル＿プレフィックス */
	private static final String NYUKA_IRAI_NO = "NYUKA_IRAI_NO";

	/** 入荷ディレイド処理依頼番号ファイル定義 */
	private static final String DEF_NYUKA_DLYD_IRAI = "DKIFM087.def";
	
	/** 入荷完了情報登録＿ジョブID */
	private static final String JOB_ID_NYUKA_FIN = "EO50C0000J0";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// ディレイド処理依頼取得
		ArrayList<HashMap<String, Object>> dlydShoriIraiList
					= JCCBatCommon.getShoriIraiInfo(commonItem, JOB_ID_NYUKA_FIN);

		// ディレイド処理依頼が存在しなかった場合
		if (JDKCommonUtil.isNull(dlydShoriIraiList))
		{
			// 入荷完了処理依頼情報取得を終了する。
			commonItem.getLogPrint().printDebugLog("ディレイド処理依頼情報がないため終了します");
			return null;
		}

		// 入荷ディレイド処理依頼番号ファイルを作成
		// ファイル名の作成
		StringBuffer sbFileNm = new StringBuffer();
		sbFileNm.append(super.jobid)
				.append("_")
				.append(NYUKA_IRAI_NO)
				.append(".csv");
		String fileNm = sbFileNm.toString();
		// ファイルパス（パス + ファイル名）の取得
		String outputFilePath = 
			this.rnktPath(JBSbatAplConst.getAplConstValue(JDKStrConst.ENV_MID_DIR), fileNm);

		// ファイル形式の設定
		JBSbatOutputFileUtil outputFileUtil = new JBSbatOutputFileUtil(outputFilePath);
		outputFileUtil.setEncode(JDKStrConst.ENCODE_SJIS);		// 文字コード
		outputFileUtil.setLine(JDKStrConst.LINE_LF);			// 改行コード

		JBSbatDefFileUtil defData = null;
		try
		{
			// 入荷ディレイド処理依頼番号ファイルを作成する
			outputFileUtil.createWriter();

			String defFilePath = rnktPath(JBSbatAplConst.getAplConstValue(JDKStrConst.DK_DIR_IND), DEF_NYUKA_DLYD_IRAI);
			defData = new JBSbatDefFileUtil(defFilePath, outputFileUtil);
		}
		catch (Exception ex)
		{
			// 入荷ディレイド処理依頼番号ファイル作成失敗
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0030CE,
					new String[] {outputFilePath});
			throw ex;
		}

		try
		{
			for (int i = dlydShoriIraiList.size() - 1; i > -1; i--)
			{
				// ディレイド処理依頼情報からHashMapを取得する。
				HashMap<String, Object> dlydMap = dlydShoriIraiList.get(i);
	
				// 入荷ディレイド処理依頼番号ファイル内容設定
				JBSbatServiceInterfaceMap outDataMap = new JBSbatServiceInterfaceMap();
				
				// ディレイド処理依頼番号
				outDataMap.set(JBSbatDKIFM087.DLYD_TRN_REQ_NO, dlydMap.get("DLYD_TRN_REQ_NO").toString());
				
				// ファイル出力
				outputFileUtil.print(outDataMap, defData);
			}
		}
		catch (Exception ex)
		{
			// 入荷ディレイド処理依頼番号ファイル書込失敗
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0050CE,
					new String[] {outputFilePath});
			throw ex;
		}
		finally
		{
			// ファイルのクローズ
			try
			{
				outputFileUtil.close();
			}
			catch (Exception ex2)
			{
				super.logPrint.printDebugLog("ファイル書込みオブジェクトのクローズ失敗:" + outputFilePath);
			}
		}

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/

		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * パス文字列の連結
	 * 連結するパス文字列にパス区切り文字の設定を制御する。
	 * @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;
	}

}
