/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKaitoriKikiSend
*	ソースファイル名	：JBSbatKKKaitoriKikiSend.java
*	作成者				：富士通　
*	作成日				：2012年04月12日
*＜機能概要＞
*　買取機器情報送信部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/04/12	FJ)濱村		新規作成
*	v5.00.00	2013/10/24	FJ			OM-2013-0003018
*	v6.00.00	2013/11/26	FJ			OM-2013-0004278 ディレイドでの処理時、ファイルのコピーを作成する
*	v14.00.00	2015/06/25	FJ)藤本		【OM-2015-0000432】買取機器情報送信（ディレイド用）で複数ファイルの送信ができない
*   v28.00.00   2017/01/31  FJ)江藤     【OM-2016-0001720】買取機器情報送信（ディレイド用）バッチ廃止
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.common.util.JCCFrameworkException;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKKaitoriKikiSend extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 送信対象インターフェースID */
	private static final String TARGET_IF_ID = "KKIFE187";
// v5.00.00 2013.10.24 MOD START
	// OM-2016-0001720 2017/01/31 DEL START
//	/** 実行ジョブＩＤ（ディレイド処理） */
//	private static final String JOB_ID_DLYD = "EO2B40220J0";
	// OM-2016-0001720 2017/01/31 DEL END
	
	// １回あたりのスリープ時間
	private static int SLEEP_TIME = 15000;

	// FTPエラー時のリトライ回数
	private static int SLEEP_RETRY = 10;
// v5.00.00 2013.10.24 MOD END

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
// v5.00.00 2013.10.24 MOD START
//		String fileName = super.freeItem;
//		if (fileName != null && fileName.length() > 0)
//		{
//			ArrayList<String> ftpSendFileName = new ArrayList<String>();
//			ftpSendFileName.add(fileName);
//			JKKBatCommon.putFile(super.commonItem, TARGET_IF_ID, JCCBatCommon.ISI, ftpSendFileName);
//		}
		String[] fileName = freeItem.split(JKKBatConst.S_PARAM_DELIM);
		String shoriIraiNo = null;
		if (fileName != null && fileName.length > 0)
		{
			ArrayList<String> ftpSendFileName = new ArrayList<String>();
			
			// OM-2016-0001720 2017/01/31 DEL START
//			if(this.jobid.equals(JOB_ID_DLYD))
//			{
//				// 実行ジョブＩＤがディレイド処理用の場合、電子ファイル管理からファイル情報を取得して送信処理を行う。
//				// ディレイド処理依頼取得
//				ArrayList<HashMap<String,Object>> dlydList = JCCbatShoriIraiUtil.getShoriIraiInfo(super.commonItem, this.jobid);
//				if (dlydList != null)
//				{
//					// 買取機器情報ファイルのファイル定義を取得
//					String kkife187FileDefName = JBSbatAplConst.getAplConstValue("IND") + "/" + "KKIFE187.def";
//					
//					for(HashMap<String, Object> resutlMap:dlydList)
//					{
//						// 20150625 OM-2015-0000432 買取機器情報送信（ディレイド用）で複数ファイルの送信ができない ADD START
//						ftpSendFileName = new ArrayList<String>();
//						// 20150625 OM-2015-0000432 買取機器情報送信（ディレイド用）で複数ファイルの送信ができない ADD END
//						// ディレイド処理依頼番号
//						shoriIraiNo = resutlMap.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO).toString();
//						// 入力電子ファイル管理番号
//						String fileKanriNo = resutlMap.get(JBSbatCC_T_DLYD_TRN_REQ.INPUT_EFILE_KANRI_NO).toString();
//						
//						// 電子ファイル管理番号から該当のファイルパスを取得
//						String filePath = JCCBatCommon.searchDenshiFile(commonItem, fileKanriNo);
//						JBSbatInputFileUtil fileUtil = new JBSbatInputFileUtil(filePath);
//						JBSbatDefFileUtil fileDef    = new JBSbatDefFileUtil(kkife187FileDefName, fileUtil);
//						JBSbatServiceInterfaceMap fileMap = null;
//						
//						// Readerオブジェクトを生成する
//						fileUtil.createReader();
//						
//						JBSbatOutputItem outputBean = new JBSbatOutputItem();
//						String line = null;
//						int recordCnt = 0;
//						while (fileUtil.ready())
//						{
//							// １レコードを読込む
//							line = fileUtil.readLine();
//							recordCnt++;
//							// 読込んだ１レコードを電文オブジェクトに変換する（出力フラグはtrue）
//							fileMap = fileDef.lineToObject(line, fileUtil, recordCnt);
//							fileMap.setOutFlg(true);
//							// 電文オブジェクトをリストに格納
//							outputBean.addOutMapList(fileMap);
//						}
//						// ファイルを出力する（連携用ファイル）
//						JKKBatOutputUtil.editOutFile(super.commonItem, outputBean, TARGET_IF_ID, fileName[0], fileName[1]);
//
//// 2013.11.26 OM-2013-0004278 add start
//						// YYYYMMDDhhmmssSSS形式の日付
//						String sysDateTimeStamp = JCCBatCommon.getSysDateTimeStamp();
//						// 時刻部分を切り取る
//						String timeStamp = sysDateTimeStamp.substring(8);
//						// ディレイド起動なので、オンライン日付を使う
//						String opeDateTime = super.onlineOpeDate + timeStamp;
//						// 運用日+hhmmssSSS_KKIFE187.csv
//						String fileNameCp = opeDateTime + "_DLYD_" + fileName[1];
//						
//						// ファイルを出力する（コピー）
//						JKKBatOutputUtil.editOutFile(super.commonItem, outputBean, TARGET_IF_ID, fileName[0], fileNameCp);
//						super.logPrint.printDebugLog("連携用ファイル：" + fileName[0] + fileName[1]);
//						super.logPrint.printDebugLog("コピーファイル：" + fileName[0] + fileNameCp);
//// 2013.11.26 OM-2013-0004278 add start
//						
//						// ファイルクローズ
//						fileUtil.close();
//						
//						// ディレイド処理依頼（正常にファイル出力まで完了したので、ディレイド処理依頼結果コードを "完了" で更新する）
//						JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JKKBatConst.RESULT_FIX, null);
//						
//						// 送信するファイルを設定する（FREE項目[0]のディレクトリパスとFREE項目[2]のファイル名を結合）
//						ftpSendFileName.add(fileName[0] + fileName[1]);					
//						
//						// ファイルを送信する
//						int i = 0;
//						sendFile(ftpSendFileName, i, shoriIraiNo);
//					}
//				}
//				else
//				{
//					// 処理依頼なしで処理を終了する
//					super.logPrint.printDebugLog("ディレイド処理依頼情報なし");
//					return null;
//				}
//			}
//			else
//			{
			// OM-2016-0001720 2017/01/31 DEL END
				// 送信するファイルを設定する（FREE項目[0]のファイルのフルパスを設定）
				ftpSendFileName.add(fileName[0]);
				
				// ファイルを送信する
				int i = 0;
				sendFile(ftpSendFileName, i, shoriIraiNo);
			// OM-2016-0001720 2017/01/31 DEL START
//			}
			// OM-2016-0001720 2017/01/31 DEL END
		}
// v5.00.00 2013.10.24 MOD END

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

// v5.00.00 2013.10.24 MOD START
	/**
	 * ファイルの送信処理を行う。
	 * 連携先にファイルが存在する場合、10秒待機して再度送信処理を実施。
	 * 3度送信に失敗した場合にはExceptionをスローする。
	 * @param ftpSendFileName
	 * @param i
	 * @param shoriIraiNo
	 */
	private void sendFile(ArrayList<String> ftpSendFileName, int i, String shoriIraiNo) throws Exception
	{
		try{
			JKKBatCommon.putFile(super.commonItem, TARGET_IF_ID, JCCBatCommon.ISI, ftpSendFileName);
		}
		catch(JCCFrameworkException e)
		{
			// 待機して再実行
			Thread.sleep(SLEEP_TIME);
			i++;
			if(i < SLEEP_RETRY)
			{
				sendFile(ftpSendFileName, i, shoriIraiNo);
			}
			else
			{
				// OM-2016-0001720 2017/01/31 DEL START
//				if(this.jobid.equals(JOB_ID_DLYD))
//				{
//					// ディレイド処理依頼ステータスを処理エラーに更新
//					// 20150625 OM-2015-0000432 買取機器情報送信（ディレイド用）で複数ファイルの送信ができない ADD START
//					JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JKKBatConst.RESULT_SYSERR, null);
//					// 20150625 OM-2015-0000432 買取機器情報送信（ディレイド用）で複数ファイルの送信ができない ADD END
//					super.commonItem.setErrFlg(true);
//					super.logPrint.printBusinessErrorLog("EKKB0120CE", new String[]{"ディレイド処理依頼番号：" + shoriIraiNo});
//				}
				// OM-2016-0001720 2017/01/31 DEL END
			}
		}
	}
// v5.00.00 2013.10.24 MOD END
}
