/*********************************************************************
*  All Rights reserved,Copyright (c) Fujitsu ,2016					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHTokusokuStatSjishoRnk
*	ソースファイル名	：JBSbatCHTokusokuStatSjishoRnk.java
*	作成者				：富士通　
*	作成日				：2016年01月19日
*＜機能概要＞
*　督促ステータス指示書連携部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v22.00.00	2016/01/19   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatCHIFM249;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHTokusokuStatSjishoRnk extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(連携ファイル制御)*/
	private static final String D_TBL_NAME_KK_T_RNKI_FILE_CTRL = "KK_T_RNKI_FILE_CTRL";

	/** テーブル(指示書)*/
	private static final String D_TBL_NAME_CK_T_SJISHO = "CK_T_SJISHO";

	/** SQL定義キー(CH_UPDATE_001)*/
	private static final String KK_T_RNKI_FILE_CTRL_CH_UPDATE_001 = "CH_UPDATE_001";

	/** SQL定義キー(CH_INSERT_001)*/
	private static final String KK_T_RNKI_FILE_CTRL_CH_INSERT_001 = "CH_INSERT_001";

	/** SQL定義キー(CH_INSERT_001)*/
	private static final String CK_T_SJISHO_CH_INSERT_001 = "CH_INSERT_001";

	/** テーブルアクセスクラス(連携ファイル制御)*/
	private JBSbatSQLAccess db_KK_T_RNKI_FILE_CTRL = null;

	/** テーブルアクセスクラス(指示書)*/
	private JBSbatSQLAccess db_CK_T_SJISHO = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 今回処理年月日時分秒*/
	private String targetDtm = "";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_RNKI_FILE_CTRL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_RNKI_FILE_CTRL);
		db_CK_T_SJISHO = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_SJISHO);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// フルパスを生成。
		String[] freeItem = commonItem.getFreeItem().split(";");
		
		String filePath = freeItem[0];
		
		// 今回実行年月日時分秒情報ファイルを読み込みます。
		ArrayList<String> fileDataName = getInputFile(filePath);
		
		// 今回実行年月日時分秒を取得
		if (null != fileDataName && fileDataName.size() != 0) {
			targetDtm = fileDataName.get(0);
		}
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap1) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		String[] param = new String[18];
		
		// 入力ファイルから情報を取得します
		// バッチ運用日
		param[0]  = super.opeDate;
		// 指示書内容枝番
		param[1]  = "1";
		// 処理コード
		param[2]  = "N01";
		// 対象テーブルＩＤ
		param[3]  = "TNM00060";
		// エラー回数
		param[4]  = "0";
		// 処理対象ＳＹＳＩＤ
		param[5]  = inMap1.getString(JBSbatCHIFM249.SYSID);
		// 結果フラグ
		param[6]  = "0";
		// パラメータ有効数
		param[7]  = "13";
		// パラメータ１
		param[8]  = inMap1.getString(JBSbatCHIFM249.SYSID);
		// パラメータ２
		param[9]  = inMap1.getString(JBSbatCHIFM249.PAYWAY_INPUT_SHIEN_CD);
		// パラメータ３
		param[10]  = inMap1.getString(JBSbatCHIFM249.TSYRN_PAY_SEQ);
		// パラメータ４
		param[11]  = inMap1.getString(JBSbatCHIFM249.ISP_KSSAI_SVC_KEI_NO);
		// パラメータ６
		param[12]  = inMap1.getString(JBSbatCHIFM249.MK_FLG);
		// パラメータ７
		param[13]  = inMap1.getString(JBSbatCHIFM249.ADD_DTM);
		// パラメータ８
		param[14]  = inMap1.getString(JBSbatCHIFM249.ADD_OPEACNT);
		// パラメータ１０
		param[15]  = inMap1.getString(JBSbatCHIFM249.UPD_DTM);
		// パラメータ１１
		param[16] = inMap1.getString(JBSbatCHIFM249.UPD_OPEACNT);
		// パラメータ１３
		param[17] = inMap1.getString(JBSbatCHIFM249.TOKUSOKU_STAT);
		
		executeCK_T_SJISHO_CH_INSERT_001(param);

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		
		String[] updateParam = new String[2];
		
		// 前回処理年月日時分秒
		updateParam[0]  = this.targetDtm;
		// ジョブID
		updateParam[1]  = "CHPRC08601";
		
		// 連携ファイル制御更新
		int updateCnt = executeKK_T_RNKI_FILE_CTRL_CH_UPDATE_001(updateParam);
		
		// 連携ファイル制御更新の件数が0件の場合、登録をする
		if(updateCnt == 0){
			
			String[] insertParam = new String[4];
			
			// 前回処理年月日時分秒
			insertParam[0]  = "CHPRC08601";
			// ジョブID
			insertParam[1]  = "0000000000";
			// ジョブID
			insertParam[2]  = "00000";
			// ジョブID
			insertParam[3]  = this.targetDtm;
			
			executeKK_T_RNKI_FILE_CTRL_CH_INSERT_001(insertParam);
			
		}
		
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_RNKI_FILE_CTRL.close();
		db_CK_T_SJISHO.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(CH_UPDATE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private int executeKK_T_RNKI_FILE_CTRL_CH_UPDATE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		return db_KK_T_RNKI_FILE_CTRL.executeBySqlDefine(paramList, KK_T_RNKI_FILE_CTRL_CH_UPDATE_001);
	}

	/**
	 * SQLKEY(CH_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_RNKI_FILE_CTRL_CH_INSERT_001(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());

		// DBアクセスを実行します
		db_KK_T_RNKI_FILE_CTRL.executeBySqlDefine(paramList, KK_T_RNKI_FILE_CTRL_CH_INSERT_001);
	}

	/**
	 * SQLKEY(CH_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_SJISHO_CH_INSERT_001(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());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());
		paramList.setValue(param[10].toString());
		paramList.setValue(param[11].toString());
		paramList.setValue(param[12].toString());
		paramList.setValue(param[13].toString());
		paramList.setValue(param[14].toString());
		paramList.setValue(param[15].toString());
		paramList.setValue(param[16].toString());
		paramList.setValue(param[17].toString());

		// DBアクセスを実行します
		db_CK_T_SJISHO.executeBySqlDefine(paramList, CK_T_SJISHO_CH_INSERT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 今回処理年月日時分秒情報ファイルを読み込みます。<br>
	 * <p>
	 * @param file_name ファイル名(フルパス)
	 * @return 今回処理年月日時分秒情報
	 * @throws JBSbatBusinessException 
	 * @throws IOException 業務サービス内で発生した例外全般。
	 */	
	private ArrayList<String> getInputFile(String file_name) throws IOException
	{
		
		// ファイル情報保持
		ArrayList<String> data_list = new ArrayList<String>();
		BufferedReader br = null;
		
		// 今回処理年月日時分秒情報ファイルを読み込みます。
		InputStreamReader is = new InputStreamReader(new FileInputStream(file_name), "Shift-JIS");
		br = new BufferedReader(is);
		
		while (br.ready())
		{
			// 1行読込み
			data_list.add(br.readLine());
		}
		
		if (null != br)
		{
			br.close();
		}
		
		return data_list;
	}
	

}
