/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatTUTdisInfoRnkiFileSend
*	ソースファイル名	：JBSbatTUTdisInfoRnkiFileSend.java
*	作成者				：富士通　
*	作成日				：2020年01月20日
*＜機能概要＞
*　TDIS情報連携ファイル送信部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v48.00.00	2020/01/20	FJ）三原	新規作成(【ANK-3507-00-00】TDIS連携の自動化対応)
*	v50.00.00	2020/06/11	FJ) 三原	【ANK-3866-00-00】TDIS自動化追加対応】
*	v54.00.00	2021/08/12	GDC)オーヴィー	【ANK-4069-00-00】EOL対応(バッチ・DBサーバリプレース対応)
*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatTUTdisInfoRnkiFileSend extends JBSbatBusinessService
{
	// ANK-3866-00-00 ADD START
	/** テーブル(電子ファイル管理)*/
	private static final String D_TBL_NAME_CC_T_EFILE_KANRI = "CC_T_EFILE_KANRI";
	
	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";
	
	/** テーブルアクセスクラス(電子ファイル管理)*/
	private JBSbatSQLAccess db_CC_T_EFILE_KANRI = null;
	
	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	
	/** SQL定義キー(KK_INSERT_001)*/
	private static final String ZM_T_DL_FILE_KANRI_KK_INSERT_001 = "KK_INSERT_001";
	// ANK-3866-00-00 ADD END
	
	/**
	 * 外部インターフェイスID
	 */
	private static final String IF_ID = "TUIFE036";
	
	/** エラー区分取得キー */
	private static final String KEY_ERR_KBN = "ERR_KBN";
	
	/** ファイルエラー取得キー */
	private static final String KEY_FILE_ERR = "FILE_ERR";
	
	/** エラーメッセージ取得キー */
	private static final String KEY_ERR_MESSAGE = "ERR_MESSAGE";
	
	/** 接続エラー取得キー */
	private static final String KEY_CONNECT_ERR = "CONNECT_ERR";
	
	/**
	 * 送信ファイル格納場所
	 */
	private static String file_path = "";
	
	// ANK-3866-00-00 ADD START
	/** ファイルコード */
	private static final String FILE_CD = "0000";
	
	/** 処理管理番号 */
	private static final String TRN_KANRI_NO = "000000000228";
	
	/** ファイル名編集用 */
	private static final String FILE_NM = "ＴＤＩＳ情報連携ファイル_";
	
	/** ENDレコード*/
	private String END_RECORD = "END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ";
	// ANK-3866-00-00 ADD END

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		// 共通パラメータを設定する。
		super.setCommonInfo(commonItem);
		
		// ANK-3866-00-00 ADD START
		db_CC_T_EFILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_T_EFILE_KANRI);
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		// ANK-3866-00-00 ADD END
		
		// フリー項目からファイル格納場所を取得する。
		file_path = commonItem.getFreeItem();

		// 取得出来なかった場合、エラーとする。
		if (file_path != null && file_path.length() == 0)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0130CE, new String[]{"フリー項目：送信ファイル格納パス名"});
		}
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		super.logPrint.printDebugLog("execute_START");
		
		// ANK-3866-00-00 ADD START
		// 電子ファイル管理、ダウンロードファイル管理登録処理
		execDnsFileKnriDwnldFileKnri();
		// ANK-3866-00-00 ADD END
		
		// ANK-4069-00-00 DEL START
		// TDIS情報連携ファイル送信処理
		//execFTP(file_path);
		// ANK-4069-00-00 DEL END
		
		super.logPrint.printDebugLog("execute_END");
		
		return null;
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		// ANK-3866-00-00 ADD START
		// DBアクセスクラスをクローズします。
		db_CC_T_EFILE_KANRI.close();
		db_ZM_T_DL_FILE_KANRI.close();
		// ANK-3866-00-00 ADD END
	}

	// ANK-4069-00-00 DEL START
	///**
	// * ESB連携部品を使用してファイル送信を行います。<br>
	// * <p>
	// * <b>処理フロー</b><br>
	// * <pre>
	// * 1.ファイルパスが空の場合、エラーとします。<br>
	// * 
	// * 2.連携部品の引数を作成します。<br>
	// * 
	// * 3.ESB連携部品を実行します。<br>
	// * 
	// * 4.処理結果が正常以外の場合、エラーを発生させます。<br>
	// * 
	// * </pre>
	// * <p>
	// * @param file_path　転送対象ファイルパス。
	// * @throws Exception 業務サービス内で発生した例外全般。
	// */
	//@SuppressWarnings("unchecked")
	//private void execFTP(String filePath) throws Exception
	//{
	//	ArrayList<String> fileList = new ArrayList<String>(1);
	//	HashMap<String, Object> outMap = new HashMap<String, Object>(3);
	//	
	//	// ファイル名が取得できる場合に実行する。
	//	if (filePath != null && filePath.length() != 0)
	//	{
	//		// ファイルリストにファイルパスを追加する。
	//		fileList.add(filePath);
	//		
	//		// 転送処理を実行する。
	//		boolean result = JCCBatCommon.putFTP(super.commonItem, fileList, IF_ID, JCCBatCommon.ISI, outMap);
	//		
	//		// エラー判定
	//		if(!result)
	//		{
	//			String kbn = outMap.get(KEY_ERR_KBN).toString();
	//			String errMsg = "";
	//			
	//			// ファイルエラーの場合
	//			if ("2".equals(kbn))
	//			{
	//				errMsg = (String)((HashMap)((ArrayList)outMap.get(KEY_FILE_ERR)).get(0)).get(KEY_ERR_MESSAGE);
	//			}
	//			else
	//			{
	//				errMsg = (String)((HashMap)outMap.get(KEY_CONNECT_ERR)).get(KEY_ERR_MESSAGE);
	//			}
	//			
	//			throw new JBSbatBusinessException("EKKB0200CE", new String[]{filePath, errMsg});
	//		}
	//	}
	//}
	// ANK-4069-00-00 DEL END

	// ANK-3866-00-00 ADD START
	/**
	 * 電子ファイル管理とダウンロードファイル管理の登録処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.処理対象のファイルを読み込みデータ件数を取得します。<br>
	 * 
	 * 2.電子ファイル管理登録処理を実行します。<br>
	 * 
	 * 3.ダウンロードファイル管理登録処理を実行します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param file_path　転送対象ファイルパス。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void execDnsFileKnriDwnldFileKnri() throws Exception
	{
		// TDIS情報連携ファイル件数取得処理
		FileInputStream in = new FileInputStream(file_path);
		
		InputStreamReader isr = null;
		BufferedReader br = null;
		
		String strLine = new String();
		
		// ファイル読み込み SJISで読み込む
		isr = new InputStreamReader(in, "MS932");
		br = new BufferedReader(isr);
		
		// TDIS情報連携ファイルの行数を保持する変数
		int lineCount = 0;
		
		// データ件数取得
		if (br != null)
		{
			while ((strLine = br.readLine()) != null)
			{
				// ENDレコードを見つけたら処理終了
				if (strLine != null && strLine.indexOf(END_RECORD) == 0)
				{
					break;
				}
				
				// ENDレコード以外のレコード数をカウントする
				lineCount++;
			}
		}
		
		// 電子ファイル管理登録処理
		// 業務共通電文
		JBSbatCommonItem item = super.commonItem;
		
		// ファイルコード
		String fileCd = FILE_CD;
		
		// ファイルパス
		String filePath = file_path;
		
		// ファイル削除年月日（運用日付 + 1ヶ月）
		String fileDelYmd = JBSbatDateUtil.adjustMonth(super.opeDate, 1);
		
		// 電子ファイル管理登録実行
		String[] rc = JCCBatCommon.createDenshiFile(item, fileCd, filePath, fileDelYmd);
		
		// ログ出力
		super.logPrint.printDebugLog("電子ファイル管理番号(" + rc[0] +  ")、世代登録年月日時分秒(" + rc[1] + ")");
		
		// ダウンロードファイル管理登録処理
		// 処理管理番号
		String trnKanriNo = TRN_KANRI_NO;
		
		// システム日時
		String fileTimeStamp = JCCBatCommon.getSysDateTime();
		
		// ファイル名
		String fileName = FILE_NM + JKKStrConst.FILE_NM_TIMESTAMP.replaceAll(JKKStrConst.FILE_TIMESTAMP_FORMAT, fileTimeStamp);
		
		// ファイル登録年月日時分秒
		String fileAddDtm = rc[1];
		
		// 電子ファイル管理番号
		String dnsFileKnriNo = rc[0];
		
		// 世代登録年月日時分秒
		String geneAddDtm = rc[1];
		
		Object params[] = 
		{
			trnKanriNo
			, fileName
			, lineCount
			, fileAddDtm
			, fileDelYmd
			, dnsFileKnriNo
			, geneAddDtm
		};
		
		// ダウンロードファイル管理登録処理
		executeZM_T_DL_FILE_KANRI_KK_INSERT_001(params);
	}
	
	/**
	 * SQLKEY(KK_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		params:順にバイント変数の値をparams配列に入れます。バイント変数は以下に説明します。
	 *		 	処理管理番号
	 *			ファイル名
	 *			データ件数
	 *		 	ファイル登録年月日時分秒
	 *			ファイル削除年月日
	 *		 	電子ファイル管理番号
	 *		 	世代登録年月日時分秒
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_KK_INSERT_001(Object[] params) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(params[0].toString());
		paramList.setValue(params[1].toString());
		paramList.setValue(params[2].toString());
		paramList.setValue(params[3].toString());
		paramList.setValue(params[4].toString());
		paramList.setValue(params[5].toString());
		paramList.setValue(params[6].toString());

		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.executeBySqlDefine(paramList, ZM_T_DL_FILE_KANRI_KK_INSERT_001);
	}
	// ANK-3866-00-00 ADD END
}
