/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKSendKanuoreSo
*	ソースファイル名	：JBSbatKKSendKanuoreSo.java
*	作成者				：富士通　
*	作成日				：2011年06月02日
*＜機能概要＞
*　加入御礼書ファイル送信部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00		2011/06/02   富士通		新規作成
*	v4.00		2012/09/20	FJ)井熊		【ANK-0546-00-00】端末購入通知書同時送信追加
*	v4.02		2012/12/31	FJ)藤原		【IT1-2012-0002601】ディレイド処理依頼取得部品を使用し、依頼がなければ終了するように修正
*	v5.00		2013/10/21	 FJ)鈴木	【OM-2013-0002358】ディレード共通部品変更対応
*  v46.00		2019/08/19	 FJ)澤田	【ANK-3359-00-00】加入御礼書ファイル送信時のMT提供条件関連項目の連携
*  v56.00		2021/12/09	 FJ)西窪	【ANK-4174-00-00】開通前マイページ関連業務改善（2022年1月下旬リリース）
*	v54.00.00	2021/08/12	GDC)オーヴィー	【ANK-4069-00-00】EOL対応(バッチ・DBサーバリプレース対応)
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSBatKKShoriIraiUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatShoriIraiUtil;
import eo.business.common.JKKBatConst;
import eo.business.common.JKKBatFTPUtil;
import eo.business.util.table.JBSbatCC_T_DLYD_TRN_REQ;
import eo.common.constant.JCNStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.util.JKKStringUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;

/**
* (クラスの機能概要) <p>
* 加入御礼書ファイル送信処理<BR>
* <BR>
* 加入御礼書ファイルを守口印刷の指定ディレクトリにHULFT送信するため<BR>
* ファイル転送部品を使用して、任意ディレクトリに転送する。
*<BR>
* @author 富士通
*/
public class JBSbatKKSendKanuoreSo extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	//■■■ IT1-2012-0002601 ディレイド処理結果反映 M.Ikuma ■■■
	/** ディレイド処理結果：完了 .*/
	private static final String SUCCESS = "1";
	/** ディレイド処理結果：業務エラー .*/
	private static final String WORK_ERROR = "2";
	/** ディレイド処理結果：システムエラー .*/
	private static final String SYS_ERROR = "3";
	/** ディレイド処理結果コード .*/
	private String mRES_CD = null;
	
	/** ディレイドジョブ依頼ＩＤ .*/
	private String mREQ_JOB_ID = null;
	
	/** シェル処理結果コード：正常 .*/
	private static final String RES_CD_OK = "0";
	/** シェル処理結果コード：業務エラー：8 .*/
	private static final String RES_CD_8 = "8";
	/** シェル処理結果コード：業務エラー：127 .*/
	private static final String RES_CD_127 = "127";
	//■■■ IT1-2012-0002601 ディレイド処理結果反映 M.Ikuma ■■■

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// FreeパラメータよりインターフェイスIDとファイル名を取得
		// セパレータはセミコロン（;）
		String[] freeItems = super.freeItem.split(";");
		
// ■■■ 2012/9/20【ANK-0546-00-00】M.IKUMA START ■■■
//		if (freeItems.length == 2) 
//		if (freeItems.length == 4)

		//■■■ IT1-2012-0002601 ディレイド処理結果反映 M.Ikuma Start ■■■
		// ANK-3359-00-00 MOD START
		//if (freeItems != null && freeItems.length == 6)
		if (freeItems != null && freeItems.length == 8)
		// ANK-3359-00-00 MOD END
		{
			// ジョブＩＤ取得
			this.mREQ_JOB_ID = freeItems[4];
			
			// 処理結果を取得
			String result_cd = freeItems[5];
			if(RES_CD_OK.equals(result_cd))
			// 処理結果が「0」
			{
				// ディレイド処理結果 正常完了
				this.mRES_CD = SUCCESS;
			}
			else if(RES_CD_8.equals(result_cd) || RES_CD_127.equals(result_cd))
			// 処理結果が「8」もしくは「127」
			{
				//ディレイド処理結果 業務エラー
				this.mRES_CD = WORK_ERROR;
			}
			else
			// 処理結果が不明なコード
			{
				// ディレイド処理結果 システムエラー
				this.mRES_CD = SYS_ERROR;
			}
			
			// ディレイド処理依頼取得
// 2013.10.21 OM-2013-0002358 mod start
//			ArrayList<HashMap<String,Object>> arrayList = JCCbatShoriIraiUtil.getShoriIraiInfo(super.commonItem, mREQ_JOB_ID);
			ArrayList<HashMap<String,Object>> arrayList = JBSBatKKShoriIraiUtil.getShoriIraiInfo(super.commonItem, mREQ_JOB_ID);
// 2013.10.21 OM-2013-0002358 mod end
			if(arrayList != null)
			{
// 2013.10.21 OM-2013-0002358 mod start
//				HashMap<String, Object> resutlMap = arrayList.get(0);
//				String shori_id = resutlMap.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO).toString();
//				// ディレイド処理結果更新
//				JCCbatShoriIraiUtil.updateShoriIraiResult(super.commonItem, shori_id, this.mRES_CD, null);

				// 取得した件数分、更新する。（２重起動防止しているので１件のはず）
				for (HashMap<String, Object> resutlMap : arrayList) {
					String shori_id = resutlMap.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO).toString();
					if(! JKKStringUtil.isNullBlank(shori_id)) {
						// ディレイド処理結果更新
						JCCbatShoriIraiUtil.updateShoriIraiResult(super.commonItem, shori_id, this.mRES_CD, null);
					}
				}
// 2013.10.21 OM-2013-0002358 mod end
				
				// 先行ＪＯＢが正常終了しているかチェック
				if(!RES_CD_OK.equals(result_cd) && !RES_CD_8.equals(result_cd))
				{
					// 先行ＪＯＢの処理結果が正常、マイナーエラー以上はこのバッチを終了
					return null;
				}
			}
			else
			{
				// 処理依頼がないのでこのバッチを終了
				return null;
			}
			//■■■ IT1-2012-0002601 ディレイド処理結果反映 M.Ikuma   End ■■■

			// 加入御礼書送信
			if ((freeItems[0].length() != 0) && (freeItems[1].length() != 0))
			{
				// ANK-4174-00-00 ADD START
				ArrayList<String> kanuoreList = new ArrayList<String>();
				File kanuoreFile = new File(freeItems[1]);
				// ファイルが存在する場合
				if(kanuoreFile.exists()) 
				{
					kanuoreList = readFile(freeItems[1]);
					if(2 < kanuoreList.size())
					{
				// ANK-4174-00-00 ADD END
						// ANK-4069-00-00 DEL START
						//String ifId = freeItems[0];			// FTP転送依頼するインターフェイスID
						//int esbSbt = JCCBatCommon.ISI;		// ESB種別
						//ArrayList<String> fileNameList = new ArrayList<String>();
						//fileNameList.add(freeItems[1]);		// 連携するファイル名を設定（フルパス指定）
	
						//JKKBatFTPUtil.putFile(super.commonItem, ifId, esbSbt, fileNameList);
						// ANK-4069-00-00 DEL END
				// ANK-4174-00-00 ADD START
					}
					else
					{
						// ファイルを削除
						super.logPrint.printDebugLog("処理対象ファイル(" + kanuoreFile.getPath() + ")");
						super.logPrint.printDebugLog("ファイル削除処理を実施します。");
						kanuoreFile.delete();
					}
				}
				// ANK-4174-00-00 ADD END

				// 端末購入通知書送信
				if ((freeItems[2].length() != 0) && (freeItems[3].length() != 0))
				{
					// ANK-4069-00-00 DEL START
					//String ifId2 = freeItems[2];			// FTP転送依頼するインターフェイスID
					//int esbSbt2 = JCCBatCommon.ISI;		// ESB種別
					//ArrayList<String> fileNameList2 = new ArrayList<String>();
					//fileNameList2.add(freeItems[3]);		// 連携するファイル名を設定（フルパス指定）

					//JKKBatFTPUtil.putFile(super.commonItem, ifId2, esbSbt2, fileNameList2);
					// ANK-4069-00-00 DEL END
// ■■■ 2012/9/20【ANK-0546-00-00】M.IKUMA END ■■■
				}
				// ANK-3359-00-00 ADD START
				// 加入御礼書マンション親情報送信
				if ((freeItems[6].length() != 0) && (freeItems[7].length() != 0))
				{
					// ANK-4174-00-00 ADD START
					if(2 < kanuoreList.size())
					{
					// ANK-4174-00-00 ADD END
					// ANK-4069-00-00 DEL START
					//String ifId3 = freeItems[6];			// FTP転送依頼するインターフェイスID
					//int esbSbt3 = JCCBatCommon.ISI;		// ESB種別
					//ArrayList<String> fileNameList3 = new ArrayList<String>();
					//fileNameList3.add(freeItems[7]);		// 連携するファイル名を設定（フルパス指定）

					//JKKBatFTPUtil.putFile(super.commonItem, ifId3, esbSbt3, fileNameList3);
					// ANK-4069-00-00 DEL END
					// ANK-4174-00-00 ADD START
					}
					else
					{
						File kanuoreManOyaFile = new File(freeItems[7]);
						super.logPrint.printDebugLog("処理対象ファイル(" + kanuoreManOyaFile.getPath() + ")");
						// ファイルが存在する場合
						if(kanuoreManOyaFile.exists()) 
						{
							// ファイルを削除
							super.logPrint.printDebugLog("ファイル削除処理を実施します。");
							kanuoreManOyaFile.delete();
						}
					}
					// ANK-4174-00-00 ADD END
				}
				// ANK-3359-00-00 ADD END
				return null;
			}
		}
		
		// エラーログ出力
		super.logPrint.printBusinessErrorLog("EKKB0130CE",
				new String[] {"FREE=" + super.freeItem});
		// エラーフラグ設定
		super.commonItem.setErrFlg(true);
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	// ANK-4174-00-00 ADD START
	/**
	 * ファイル読み込み処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で読込ファイルディレクトリ(フルパス)を設定します。<br>
	 *
	 * 2.引数を元にファイル読込を行い、行をListへ格納します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param strFileDir    出力ディレクトリ(フルパス)。
	 * @return resultList   返却用List
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private static ArrayList<String> readFile(String strFileDir) throws Exception
	{
		ArrayList<String> resultList = new  ArrayList<String>();
		
		// 外部出力ファイルパス
		JBSbatInputFileUtil inFile = new JBSbatInputFileUtil(strFileDir);
		inFile.setEncode(JKKBatConst.SJIS);						// 文字コード
		inFile.setLine(JKKStrConst.LINE_SEPARATOR);			// 改行コード
		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();
		}
	}
	// ANK-4174-00-00 ADD END

}
