/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCKTCAFileSend
*	ソースファイル名	：JBSbatCKTCAFileSend.java
*	作成者				：富士通　
*	作成日				：2014年06月12日
*＜機能概要＞
*　TCA向けファイル送信処理です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v8.00.00	2014/06/12  FJ)谷口		新規作成(ST-2014-0000120)
*	v49.00.00	2020/05/30  FJ)Eric		ANK-3807-00-00
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatDenshiFileUtil;
import eo.business.common.JKKBatCommon;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JPCDateUtil;
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;

/**
* TCA向けファイル送信 <p>
*<BR>
* @author 富士通
*/
public class JBSbatCKTCAFileSend extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** アプリケーションプロパティ（バッチ） ＴＣＡ向けファイル送信ディレクトリ定義キー */
	private static final String CK_TCA_SEND_DIR_KEY = "CK_TCA_SEND_DIR";
	/** プロパティ値 ＴＣＡ向けファイル送信ディレクトリの区切り文字 */
	private static final String PROP_TCA_SEND_DIR_SEP = ",";
	/** プロパティ値 ＴＣＡ向けファイル送信ディレクトリの区切り文字（事業者ごとの値の中の区切り） */
	private static final String PROP_TCA_SEND_DIR_SEP_2 = ":";
	/** FTP送信ファイル情報のキー名 事業者コード */
	private static final String KEY_JGS_CD = "jgs_cd";
	/** FTP送信ファイル情報のキー名 送信ディレクトリパス */
	private static final String KEY_SEND_DIR_PATH = "send_dir_path";
	/** FTP送信ファイル情報のキー名 IFID */
	private static final String KEY_IFID = "ifid";
	
	// ANK-3807-00-00 ADD START
	/** DBアクセスクラス(ダウンロードファイル管理) */
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	
	private static final String TBL_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";
	
	/** SQL定義キー(ダウンロードファイル管理　INSERT_002) */
	private static final String ZM_T_DL_FILE_KANRI_KK_INSERT_002 = "KK_INSERT_002";
	
	private static final String FILENAME = "加入者交換情報_%s.zip";
	
	private static final String FILE_CD = "0000";
	
	// ANK-3807-00-00 ADD END

	/**
	 * 初期処理<br>
	 * 送信対象の事業者ごとに出力ファイルを作成します。
	 * <br>
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
		
		//ANK 3807-00-00 ADD START
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, TBL_ZM_T_DL_FILE_KANRI);
		//ANK 3807-00-00 ADD END
		
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// エラー件数
		int errorCount = 0;

		// FTP送信ファイル情報リストを取得
		List<Map<String, String>> ftpSendFileList = getFtpSendFileList();

		// 出力ファイル名取得
		String[] freeItem = this.freeItem.split(";");
		String dirPath = freeItem[0];
		String fileName = freeItem[1];
		
		// ANK-3807-00-00 ADD START
		String delYmd = JPCDateUtil.addMonth(opeDate, 1);
		int count = 0;
		
		String fileNameInput = dirPath.concat("/").concat(fileName);
		
		addEfileKanriDlFileKanri(count, FILE_CD, fileNameInput, delYmd, String.format(FILENAME, fileName.substring(0,4)));
		
		// ANK-3807-00-00 ADD END

		//ANK-3807-00-00 DEL START
		//for (Map<String, String> ftpSendFile : ftpSendFileList)
		//{
		//	String sendFileName = "";
		//	try
		//	{
		//		// FTP転送依頼するインターフェイスID
		//		String ifId = ftpSendFile.get(KEY_IFID);

				// ESB種別
		//		int esbSbt = JCCBatCommon.ISI;

				// 連携するファイル名（フルパス）
		//		sendFileName = dirPath + ftpSendFile.get(KEY_SEND_DIR_PATH) + fileName;

		//		File sendFile = new File(sendFileName);
		//		if (sendFile.exists())
		//		{
		//			ArrayList<String> fileNameList = new ArrayList<String>();
		//			fileNameList.add(sendFileName);

					// FTP送信
		//			JKKBatCommon.putFile(super.commonItem, ifId, esbSbt, fileNameList);
		//		}
				// 送信対象のファイルが存在しない場合
		//		else
		//		{
		//			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW,
		//					new String[]{"送信対象のファイルが存在しません。送信対象ファイル：" + sendFileName});
		//			errorCount++;
		//		}
		//	}
		//	catch (Exception e)
		//	{
		//		commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW,
		//				new String[]{"FTP送信処理に失敗しました。送信対象ファイル：" + sendFileName});
		//		errorCount++;
		//	}
		//}

		//if (0 < errorCount)
		//{
		//	// 単一サービス呼び出しパターンの場合は、エラー件数を設定することで警告終了する
		//	commonItem.setErrorCount(errorCount);
		//}

		//ANK-3807-00-00 DEL END
		
		return null;

	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		//ANK-3807-00-00 ADD START
		db_ZM_T_DL_FILE_KANRI.close();
		//ANK-3807-00-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * FTP送信ファイル情報のリストを取得します。
	 * <br>
	 * @return FTP送信ファイル情報（事業者コード、パス、インターフェイスID）のリスト
	 * @throws Exception 例外が発生した場合
	 */
	private List<Map<String, String>> getFtpSendFileList() throws Exception
	{
		List<Map<String, String>> ftpSendFileList = new ArrayList<Map<String, String>>();

		// プロパティファイルから「ＴＣＡ向けファイル送信ディレクトリ」を取得する
		String propValue = JKKBatCommon.getApplicationConst(CK_TCA_SEND_DIR_KEY);

		if (null == propValue || propValue.isEmpty())
		{
			// 該当キー無しのエラー
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0520CE, 
					new String[]{"プロパティファイル（バッチ）", "キー：" + CK_TCA_SEND_DIR_KEY});
		}

		// 「事業者コード:パス:インターフェイスID,事業者コード:パス:インターフェイスID,…」をMapのリストに変換する
		String[] sendDirList = propValue.split(PROP_TCA_SEND_DIR_SEP);
		for (String sendDir : sendDirList)
		{
			String[] val = sendDir.split(PROP_TCA_SEND_DIR_SEP_2);
			Map<String, String> ftpSendFile = new HashMap<String, String>();
			ftpSendFile.put(KEY_JGS_CD, val[0]);
			ftpSendFile.put(KEY_SEND_DIR_PATH, val[1]);
			ftpSendFile.put(KEY_IFID, val[2]);
			ftpSendFileList.add(ftpSendFile);
		}

		return ftpSendFileList;
	}
	
	// ANK-3807-00-00 ADD START
	/**
	 * 電子ファイル管理・ダウンロードファイル管理へ登録します。
	 * <br>
	 * @param dataCnt データ件数
	 * @param fileCd ファイルコード
	 * @param filePath
	 * @param fileDelYmd ファイル削除年月日
	 * @param fileName
	 * @throws Exception 例外が発生した場合
	 */
	private void addEfileKanriDlFileKanri(int dataCnt, String fileCd, String filePath,
			String fileDelYmd, String fileName) throws Exception
	{
		// 電子ファイル管理登録
		String[] ret = JCCbatDenshiFileUtil.createDenshiFile(this.commonItem, fileCd,
				filePath, fileDelYmd);
		
		// ダウンロードファイル管理登録
		String[] paramIns = {
				JKKStrConst.TRAN_KANRI_NO_221								// 処理管理番号
				, fileName												// ダウンロードファイル名
				, String.valueOf(dataCnt)								// データ件数
				, ret[0]												// 電子ファイル管理番号
				, ret[1]												// 世代登録年月日時分秒
		};
		
		executeZM_T_DL_FILE_KANRI_KK_INSERT_002(paramIns);
	}

	/**
	 * SQLKEY(KK_INSERT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			TRN_KANRI_NO
	 *			FILE_NM
	 *			DATA_CNT
	 *			EFILE_KANRI_NO
	 *			GENE_ADD_DTM
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_KK_INSERT_002(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());
		paramList.setValue(param[4].toString());
		
		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.executeBySqlDefine(paramList, ZM_T_DL_FILE_KANRI_KK_INSERT_002);
	}
	// ANK-3807-00-00 ADD END
	

}
