/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JBSbatKKdirecChargstartarget
 *	ソースファイル名	：JBSbatKKdirecChargstartarget.java
 *	作成者				：富士通　
 *	作成日				：2014年08月13日
 *＜機能概要＞
 *　ＳＴＢ直送時課金開始対象抽出部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2014/08/13   富士通		新規作成
*	v11.00.00	2014/12/09  FJ)徳永		【OM-2014-0003870】対応
 *********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM622;
import eo.business.util.table.JBSbatDK_T_HAISO;
import eo.business.util.table.JBSbatKK_T_IDO_RSV;
import eo.business.util.table.JBSbatKK_T_KKTK_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI_UCWK;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JBSbatStringUtil;

/**
 * (クラスの機能概要)
 * <p>
 *<BR>
 * 
 * @author 富士通
 */
public class JBSbatKKdirecChargstartarget extends JBSbatBusinessService
{
	/** ▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼ */
	/** テーブル(機器提供サービス契約) */
	private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";

	/** SQL定義キー(KK_SELECT_202) */
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_202 = "KK_SELECT_202";

	/** テーブルアクセスクラス(機器提供サービス契約) */
	private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;
	/** ▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲ */
	
	/* 異動予約.新機器使用開始希望年月日 */
	private static final String NEW_KIKI_USE_STA_KIBO_YMD = "NEW_KIKI_USE_STA_KIBO_YMD";
	/* 異動予約.旧機器変更番号 */
	private static final String OLD_KIKI_CHG_NO = "OLD_KIKI_CHG_NO";
	/* 異動予約.新機器変更番号 */
	private static final String NEW_KIKI_CHG_NO = "NEW_KIKI_CHG_NO";
	
	/**
	 * 初期処理
	 * 
	 * @param JBSbatCommonItem
	 *            commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼ */
		/** ▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼ */
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		// DBアクセスクラスを生成します
		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem,D_TBL_NAME_KK_T_KKTK_SVC_KEI);
		/** ▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲ */
		
		ArrayList<String> param = new ArrayList<String>();
		// 運用日を設定
		param.add(super.opeDate);
		param.add(super.opeDate);
		executeKK_T_KKTK_SVC_KEI_KK_SELECT_202(param);
		
		/** ▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲ */
	}

	/**
	 * 主処理
	 * 
	 * @param inMap
	 *            　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼ */
		
		// ログ
		super.logPrint.printDebugLog("execute_START");
		
		JBSbatCommonDBInterface kktk_db_map = null;
		kktk_db_map = db_KK_T_KKTK_SVC_KEI.selectNext();
		ArrayList<HashMap<String, String>> kkifm622DataList = new ArrayList<HashMap<String, String>>();
		
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		if (null != kktk_db_map)
		{
			while (null != kktk_db_map)
			{
				// 取得する
				String kkiteki_svs_kei_no = JBSbatStringUtil.Rtrim(kktk_db_map.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO));
				String kiki_chg_no = JBSbatStringUtil.Rtrim(kktk_db_map.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_CHG_NO));
				String ido_rsv_no = JBSbatStringUtil.Rtrim(kktk_db_map.getString(JBSbatKK_T_IDO_RSV.IDO_RSV_NO));
				String new_kiki_use_sta_kibo_ymd = JBSbatStringUtil.Rtrim(kktk_db_map.getString(NEW_KIKI_USE_STA_KIBO_YMD));
				String haiso_stat = JBSbatStringUtil.Rtrim(kktk_db_map.getString(JBSbatDK_T_HAISO.HAISO_STAT));
				String old_kiki_chg_no = JBSbatStringUtil.Rtrim(kktk_db_map.getString(OLD_KIKI_CHG_NO));
				String new_kiki_chg_no = JBSbatStringUtil.Rtrim(kktk_db_map.getString(NEW_KIKI_CHG_NO));
				String kiki_soryo_um = JBSbatStringUtil.Rtrim(kktk_db_map.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SORYO_UM));
				String kiki_soryo_saksei_ymd = JBSbatStringUtil.Rtrim(kktk_db_map.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SORYO_SAKSEI_YMD));
				String svc_kei_no = JBSbatStringUtil.Rtrim(kktk_db_map.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_NO));
				String svc_kei_ucwk_stat = JBSbatStringUtil.Rtrim(kktk_db_map.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT));
				
				HashMap<String, String> kktkMap = new HashMap<String, String>();
				
				// 列名(key)：値(value)
				kktkMap.put(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO, kkiteki_svs_kei_no);
				kktkMap.put(JBSbatKK_T_KKTK_SVC_KEI.KIKI_CHG_NO, kiki_chg_no);
				kktkMap.put(JBSbatKK_T_IDO_RSV.IDO_RSV_NO, ido_rsv_no);
				kktkMap.put(NEW_KIKI_USE_STA_KIBO_YMD, new_kiki_use_sta_kibo_ymd);
				kktkMap.put(JBSbatDK_T_HAISO.HAISO_STAT, haiso_stat);
				kktkMap.put(OLD_KIKI_CHG_NO, old_kiki_chg_no);
				kktkMap.put(NEW_KIKI_CHG_NO, new_kiki_chg_no);
				kktkMap.put(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SORYO_UM, kiki_soryo_um);
				kktkMap.put(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SORYO_SAKSEI_YMD, kiki_soryo_saksei_ymd);
				kktkMap.put(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_NO, svc_kei_no);
				kktkMap.put(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT, svc_kei_ucwk_stat);
				
				// レコード単位でリストに格納する
				kkifm622DataList.add(kktkMap);
				
				// 次のレコードを取得
				kktk_db_map = db_KK_T_KKTK_SVC_KEI.selectNext();
			}
		}
		
		else
		{
			// 0件時
			super.logPrint.printDebugLog("0件です");
		}
		
		// 中間ファイルの出力
		outputBean = createKkifm622(kkifm622DataList);
		
		super.logPrint.printDebugLog("execute_END");
		
		return outputBean;
		
	}
	
	/** ▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲ */

	/**
	 * 業務サービス終了処理
	 * 
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼ */
		/** ▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼ */
		// DBアクセスクラスをクローズします
		db_KK_T_KKTK_SVC_KEI.close();
		/** ▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲ */
		/** ▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲ */
	}

	/** ▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼ */
	/**
	 * SQLKEY(KK_SELECT_202)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * 
	 * <pre>
	 * 1.引数でバイント変数を設定します。&lt;br&gt;
	 * 
	 * 2.DBアクセスを実行します。&lt;br&gt;
	 * 
	 * 3.メソッドの呼び出し方です。&lt;br&gt;
	 * 	引数:
	 * 	param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * 	 	RSV_APLY_CD
	 * 	 	RSV_APLY_CD
	 * </pre>
	 * <p>
	 * 
	 * @param param
	 *            バイント変数の値配列。
	 * @throws Exception
	 *             業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KKTK_SVC_KEI_KK_SELECT_202(ArrayList<String> param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// パラメータの設定
		// 格納されている運用日をセット
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		
		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList,KK_T_KKTK_SVC_KEI_KK_SELECT_202);
	}

	/** ▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲ */

	/**
	 * マンション工事予定配送更新情報ファイルの作成を行います。
	 * 
	 * @param outData
	 *            ArrayList<HashMap<String, String>> 出力内容が記載されたファイル
	 * @return outputBean JBSbatOutputItem
	 * @throws Exception
	 *             メソッド内で発生した例外全般。
	 */
	private JBSbatOutputItem createKkifm622(ArrayList<HashMap<String, String>> outData) throws Exception
	{
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// 入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap outmap = null;
		
		// 一時ファイル件数分ループ
		int outDataSize = outData.size();
		for (int i = 0; i < outDataSize; i++)
		{
			outmap = new JBSbatServiceInterfaceMap();
			
			// 機器提供サービス契約番号
			outmap.setString(JBSbatKKIFM622.KKTK_SVC_KEI_NO, outData.get(i).get(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO));
			// 機器変更番号
			outmap.setString(JBSbatKKIFM622.KIKI_CHG_NO, outData.get(i).get(JBSbatKK_T_KKTK_SVC_KEI.KIKI_CHG_NO));
			// 異動予約番号
			outmap.setString(JBSbatKKIFM622.IDO_RSV_NO, outData.get(i).get(JBSbatKK_T_IDO_RSV.IDO_RSV_NO));
			// 新機器使用開始希望年月日
			outmap.setString(JBSbatKKIFM622.NEW_KIKI_USE_STA_KIBO_YMD, outData.get(i).get(NEW_KIKI_USE_STA_KIBO_YMD));
			// 配送ステータス
			outmap.setString(JBSbatKKIFM622.HAISO_STAT, outData.get(i).get(JBSbatDK_T_HAISO.HAISO_STAT));
			// 旧機器変更番号
			outmap.setString(JBSbatKKIFM622.OLD_KIKI_CHG_NO, outData.get(i).get(OLD_KIKI_CHG_NO));
			// 新機器変更番号
			outmap.setString(JBSbatKKIFM622.NEW_KIKI_CHG_NO, outData.get(i).get(NEW_KIKI_CHG_NO));
			// 機器送料有無
			outmap.setString(JBSbatKKIFM622.KIKI_SORYO_UM, outData.get(i).get(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SORYO_UM));
			// 機器送料作成年月日
			outmap.setString(JBSbatKKIFM622.KIKI_SORYO_SAKSEI_YMD, outData.get(i).get(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SORYO_SAKSEI_YMD));
			// サービス契約番号
			outmap.setString(JBSbatKKIFM622.SVC_KEI_NO, outData.get(i).get(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_NO));
			// サービス契約内訳ステータス 
			outmap.setString(JBSbatKKIFM622.SVC_KEI_UCWK_STAT, outData.get(i).get(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT));
			
			// 出力フラグを設定
			outmap.setOutFlg(true);
			
			// 出力共通電文に入出力インターフェースを設定する。
			outputBean.addOutMapList(outmap);
		}
		// 出力共通電文を返却
		return outputBean;
	}
}
