/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKdtKjRsvHsInfoCst
*	ソースファイル名	：JBSbatKKKdtKjRsvHsInfoCst.java
*	作成者				：富士通
*	作成日				：2024年06月25日
*＜機能概要＞
*　戸建て工事予定配送情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v72.00.00	2024/06/25	FJ)丸田		【ANK-4577-00-00】 新規作成
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM607;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKKdtKjRsvHsInfoCst extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** テーブル(工事案件)*/
	private static final String D_TBL_NAME_KU_T_KOJIAK = "KU_T_KOJIAK";
	
	/** SQL定義キー(KK_SELECT_054)*/
	private static final String KU_T_KOJIAK_KK_SELECT_054 = "KK_SELECT_054";
	
	/** テーブルアクセスクラス(工事案件)*/
	private JBSbatSQLAccess db_KU_T_KOJIAK = null;
	
	/** 配送．配送番号 列名 */
	private static final String HAISO_NO = "HAISO_NO";
	
	/** 工事案件．機器出荷予定日算出基準年月日 列名 */
	private static final String KKSHKA_RSVD_SNSTSTD_YMD = "KKSHKA_RSVD_SNSTSTD_YMD";
	
	/** 機器提供サービス契約．配送依頼指定年月日 列名 */
	private static final String HAISO_REQ_SHITEI_YMD = "HAISO_REQ_SHITEI_YMD";
	
	/** 空白 */
	private static final String BLANK = "";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// DBアクセスクラスを生成
		db_KU_T_KOJIAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KOJIAK);
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");
		
		// 出力電文の設定
		JBSbatOutputItem output = new JBSbatOutputItem();
		
		// 工事案件KK_SELECT_054実行
		executeKU_T_KOJIAK_KK_SELECT_054();
		
		// 工事案件スキーマより戸建て工事予定配送の検索結果を取得する。
		JBSbatCommonDBInterface kojiakDbMap = db_KU_T_KOJIAK.selectNext();
		
		// 戸建て工事予定配送更新情報格納用
		ArrayList<HashMap<String, String>> kkifm963DataList = new ArrayList<HashMap<String, String>>();
		
		if(kojiakDbMap != null)
		{
			// 戸建て工事予定配送の検索結果がある場合
			// 取得した工事案件レコードがなくなるまでループ
			while(null != kojiakDbMap)
			{
				// 工事案件レコード格納用MAP初期化
				HashMap <String, String> kojiakMap = new HashMap <String, String>();
				
				// 配送番号
				String haisoNo = JBSbatStringUtil.Rtrim(kojiakDbMap.getString(HAISO_NO));
				// 機器出荷予定日算出基準年月日
				String kkshRsvdSnststdYmd = JBSbatStringUtil.Rtrim(kojiakDbMap.getString(KKSHKA_RSVD_SNSTSTD_YMD));
				// 配送依頼指定年月日
				String haisoReqShiteiYmd = JBSbatStringUtil.Rtrim(kojiakDbMap.getString(HAISO_REQ_SHITEI_YMD));
				
				// 配送依頼指定年月日がnullの場合(機器出荷指定日が指定されていない場合)
				if (BLANK.equals(haisoReqShiteiYmd))
				{
					// 配送番号
					kojiakMap.put(HAISO_NO, haisoNo);
					// 機器出荷予定日算出基準年月日
					kojiakMap.put(KKSHKA_RSVD_SNSTSTD_YMD, kkshRsvdSnststdYmd);
					
					// レコード単位でリストに格納する
					kkifm963DataList.add(kojiakMap);
				}				
				// 次のレコードを取得
				kojiakDbMap = db_KU_T_KOJIAK.selectNext();
			}
		}
		// 中間ファイル(戸建て工事予定配送更新ファイル)を作成する。
		output = createKkifm607(kkifm963DataList);
		super.logPrint.printDebugLog("execute_END");
		
		// 作成した中間ファイル(戸建て工事予定配送更新ファイル)を返す。
		return output;
		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		// DBアクセスクラスをクローズ
		db_KU_T_KOJIAK.close();
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * SQLKEY(KK_SELECT_054)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * </pre>
	 * <p>
	 * @param param バイント変数の値リスト。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKU_T_KOJIAK_KK_SELECT_054() throws Exception
	{
		// バイント変数のリストを生成
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// バインド変数設定
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		
		// DBアクセスを実行
		db_KU_T_KOJIAK.selectBySqlDefine(paramList, KU_T_KOJIAK_KK_SELECT_054);
	}
	
	/**
	 * 中間ファイル(戸建て工事予定配送更新ファイル)を作成します。
	 *  
	 * @param kkifm963DataList ArrayList<HashMap<String, String>> 出力内容情報が格納されたリストオブジェクト
	 * @return outputBean JBSbatOutputItem 出力共通電文クラス
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private JBSbatOutputItem createKkifm607(ArrayList<HashMap<String, String>> kkifm963DataList) throws Exception
	{
		
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// 重複チェック用
		HashMap<String, String> distMap = new HashMap<String, String>();
		
		// 一時ファイル件数分ループ
		for (int i = 0; i < kkifm963DataList.size(); i++) 
		{
			// 配送番号が既に登録されている場合スキップ
			if (distMap.get(kkifm963DataList.get(i).get(HAISO_NO)) != null) 
			{
				continue;
			}
			
			// 重複行チェックのために登録
			distMap.put(kkifm963DataList.get(i).get(HAISO_NO), kkifm963DataList.get(i).get(KKSHKA_RSVD_SNSTSTD_YMD));
			//入出力インターフェースオブジェクトを生成
			JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
			
			// 配送番号
			outmap.setString(JBSbatKKIFM607.HAISO_NO, kkifm963DataList.get(i).get(HAISO_NO));
			// 配送予定年月日
			outmap.setString(JBSbatKKIFM607.HAISO_RSV_YMD, kkifm963DataList.get(i).get(KKSHKA_RSVD_SNSTSTD_YMD));
			
			//出力フラグを設定
			outmap.setOutFlg(true);
			
			//出力共通電文に入出力インターフェースを設定する。
			outputBean.addOutMapList(outmap);
		}
		
		//出力共通電文を返却
		return outputBean;
	}
}
