/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKjRsvHsInfoUpd
*	ソースファイル名	：JBSbatKKKjRsvHsInfoUpd.java
*	作成者				：富士通　
*	作成日				：2014年07月04日
*＜機能概要＞
*　マンション工事予定配送情報更新部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v10.00.00	2014/07/04   富士通		新規作成
*	v10.00.01	2014/08/25   富士通		【IT2-2014-0000288】対応
*	v10.00.02	2014/10/02   富士通		【ANK-1918-00-06】新US管理システム対応(案件内仕様変更)
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JCCBatCommon;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.util.JBSbatStringUtil;
import eo.framework.db.JBSbatSQLAccess;

import eo.business.util.file.JBSbatKKIFM607;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKKjRsvHsInfoUpd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** テーブル(配送)*/
	private static final String D_TBL_NAME_DK_T_HAISO = "DK_T_HAISO";
	
	// ++++++++++ v10.00.02 削除開始 ++++++++++ //
	///** テーブル(機器提供サービス契約)*/
	//private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";
	// ++++++++++ v10.00.02 削除終了 ++++++++++ //
	
	/** SQL定義キー(KK_SELECT_023)*/
	private static final String DK_T_HAISO_KK_SELECT_023 = "KK_SELECT_023";
	
	/** SQL定義キー(KK_UPDATE_003)*/
	private static final String DK_T_HAISO_KK_UPDATE_003 = "KK_UPDATE_003";
	
	// ++++++++++ v10.00.02 削除開始 ++++++++++ //
	///** SQL定義キー(KK_UPDATE_010)*/
	//private static final String KK_T_KKTK_SVC_KEI_KK_UPDATE_010 = "KK_UPDATE_010";
	// ++++++++++ v10.00.02 削除終了 ++++++++++ //
	
	/** 配送．配送ステータス 列名 */
	private static final String HAISO_STAT = "HAISO_STAT";
	
	/** 配送．配送予定年月日 列名 */
	private static final String HAISO_RSV_YMD = "HAISO_RSV_YMD";
	
	// ++++++++++ v10.00.02 削除開始 ++++++++++ //
//	/** 配送対象物品．機器提供サービス契約番号 */
//	private static final String KKTK_SVC_KEI_NO = "KKTK_SVC_KEI_NO";
//	
//	/** 配送対象物品．機器変更番号 */
//	private static final String KIKI_CHG_NO = "KIKI_CHG_NO";
	// ++++++++++ v10.00.02 削除終了 ++++++++++ //
	
	/** テーブルアクセスクラス(配送)*/
	private JBSbatSQLAccess db_DK_T_HAISO = null;
	
	// ++++++++++ v10.00.02 削除開始 ++++++++++ //
	///** テーブルアクセスクラス(機器提供サービス契約)*/
	//private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;
	// ++++++++++ v10.00.02 削除終了 ++++++++++ //
	
	/** 配送ステータス　受付済 */
	private static final String HAISO_STAT_001 = "001";
	
	/** 配送番号 */
	protected String strHaisoNo = "";
	
	/** 配送予定年月日 */
	protected String strHaisoRsvYmd = "";
	
	// ++++++++++ v10.00.02 削除開始 ++++++++++ //
//	/** 機器提供サービス契約 修正前SQL */
//	public static final String KKTK_EDIT_BF_SQL_01 = "KKTK.KKTK_SVC_KEI_NO IN \\(\\?\\) ";
//
//	/** 機器提供サービス契約 修正後SQL */
//	public static final String KKTK_EDIT_AF_SQL_01 = "KKTK.KKTK_SVC_KEI_NO IN ";
//	
//	/** 機器提供サービス契約 修正前SQL */
//	public static final String KKTK_EDIT_BF_SQL_02 = "KKTK.KIKI_CHG_NO IN \\(\\?\\) ";
//
//	/** 機器提供サービス契約 修正後SQL */
//	public static final String KKTK_EDIT_AF_SQL_02 = "KKTK.KIKI_CHG_NO IN ";
	// ++++++++++ v10.00.02 削除終了 ++++++++++ //
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// DBアクセスクラスを生成します
		db_DK_T_HAISO = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_T_HAISO);
		//// ++++++++++ v10.00.02 削除開始 ++++++++++ //
		//db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
		// ++++++++++ v10.00.02 削除終了 ++++++++++ //
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		super.logPrint.printDebugLog("execute_START");
		
		// 中間ファイルの読み込み
		getKkifm607(inMap);
		
		// 配送番号を元に配送データを取得する
		executeDK_T_HAISO_KK_SELECT_023(strHaisoNo);
		
		// 配送存在確認SQLの実行結果を取得
		JBSbatCommonDBInterface hiso_db_map = null;
		hiso_db_map = db_DK_T_HAISO.selectNext();
		
		// 配送が取得できない場合
		if (null == hiso_db_map)
		{
			// 配送番号:Axxxxxxxxxxが存在しませんでした。
			super.logPrint.printBusinessErrorLog("EKKB0290AW", new String[]{"配送番号:" + strHaisoNo});
			return null;
		}
		
		// 配送予定日を取得
		String haiso_rsv_ymd = JBSbatStringUtil.Rtrim(hiso_db_map.getString(HAISO_RSV_YMD));
		
		// 配送予定日とファイル連携された予定日が同じ場合
		if (strHaisoRsvYmd.equals(haiso_rsv_ymd))
		{
			super.logPrint.printDebugLog("既に連携された配送です　配送番号：" + strHaisoNo);
			return null;
		}
		
		// 受付番号を取得
		String haiso_stats = JBSbatStringUtil.Rtrim(hiso_db_map.getString(HAISO_STAT));
		
		// 配送ステータスが"001"(受付済)でない場合
		if (haiso_stats.equals(HAISO_STAT_001) == false)
		{
			// ステータスが受付済みではない為、処理をスキップします。
			super.logPrint.printBusinessErrorLog("EKKB1210CW", new String[]{"配送番号:" + strHaisoNo});
			return null;
			
		}
		
		/* **** 配送．配送予定年月日の更新 ***********************************/
		// 更新パラメータ、検索パラメータをセット
		String[] setParamHaiso = 
		{
			strHaisoRsvYmd,
			strHaisoNo
		};
		
		// 配送予定年月日を更新
		executeDK_T_HAISO_PKUPDATE(setParamHaiso);
		
		// ++++++++++ v10.00.02 削除開始 ++++++++++ //
		// 機器提供サービス契約番号リスト
//		ArrayList<String> kktkSvcKeiNoList = new ArrayList<String>();
//		
//		// 機器変更番号リスト
//		ArrayList<String> kkChgNoList = new ArrayList<String>();
//		
//		// 機器提供サービス契約と機器変更番号の取得
//		while(null != hiso_db_map)
//		{
//			// 機器提供サービス契約番号を取得
//			kktkSvcKeiNoList.add(JBSbatStringUtil.Rtrim(hiso_db_map.getString(KKTK_SVC_KEI_NO)));
//			// 機器変更番号を取得
//			kkChgNoList.add(JBSbatStringUtil.Rtrim(hiso_db_map.getString(KIKI_CHG_NO)));
//			
//			// 次のレコードを取得
//			hiso_db_map = db_DK_T_HAISO.selectNext();
//		}
//		
//		// 機器提供サービス契約の配送依頼指定年月日を更新
//		executeKK_T_KKTK_SVC_KEI_PKUPDATE(kktkSvcKeiNoList, kkChgNoList);
		// ++++++++++ v10.00.02 削除終了 ++++++++++ //
		
		super.logPrint.printDebugLog("execute_END");
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		// DBアクセスクラスをクローズします
		db_DK_T_HAISO.close();
		// ++++++++++ v10.00.02 削除開始 ++++++++++ //
		//db_KK_T_KKTK_SVC_KEI.close();
		// ++++++++++ v10.00.02 削除終了 ++++++++++ //
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * SQLKEY(KK_SELECT_023)でDBアクセスを行います。<br>
	 * @param haiso_no 配送番号
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeDK_T_HAISO_KK_SELECT_023(String haiso_no) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// 配送番号をセット
		paramList.setValue(haiso_no);
		
		// DBアクセスを実行します
		db_DK_T_HAISO.selectBySqlDefine(paramList, DK_T_HAISO_KK_SELECT_023);
	}
	
	/**
	 * 配送テーブルにPK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * 
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeDK_T_HAISO_PKUPDATE(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(setParam[0].toString());
		paramList.setValue(setParam[1].toString());

		// DBアクセスを実行します
		db_DK_T_HAISO.executeBySqlDefine(paramList, DK_T_HAISO_KK_UPDATE_003);
	}
	
	// ++++++++++ v10.00.02 削除開始 ++++++++++ //
//	/**
//	 * 機器提供サービス契約にPK(ＰＫ　更新)でDBアクセスを行います。<br>
//	 * 
//	 * @param kktkSvcKeiNoList 機器提供サービス契約番号
//	 * @param kikiChgNoList    機器変更番号
//	 * @throws Exception 業務サービス内で発生した例外全般。
//	 */
//	private void executeKK_T_KKTK_SVC_KEI_PKUPDATE(ArrayList<String> kktkSvcKeiNoList, ArrayList<String> kikiChgNoList) throws Exception
//	{
//		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
//		
//		// 配送(機器提供サービス契約番号)のクエリを加工(DK_T_HAISO_KK_SELECT_022)
//		db_KK_T_KKTK_SVC_KEI.setSqlMap(KK_T_KKTK_SVC_KEI_KK_UPDATE_010, getEditSQL(db_KK_T_KKTK_SVC_KEI.getSql(KK_T_KKTK_SVC_KEI_KK_UPDATE_010) ,kktkSvcKeiNoList ,KKTK_EDIT_BF_SQL_01 ,KKTK_EDIT_AF_SQL_01));
//		
//		// 配送(機器提供サービス契約番号)のクエリを加工(DK_T_HAISO_KK_SELECT_022)
//		db_KK_T_KKTK_SVC_KEI.setSqlMap(KK_T_KKTK_SVC_KEI_KK_UPDATE_010, getEditSQL(db_KK_T_KKTK_SVC_KEI.getSql(KK_T_KKTK_SVC_KEI_KK_UPDATE_010) ,kikiChgNoList ,KKTK_EDIT_BF_SQL_02 ,KKTK_EDIT_AF_SQL_02));
//		
//		super.logPrint.printDebugLog("変更後SQL：" + db_KK_T_KKTK_SVC_KEI.getSql(KK_T_KKTK_SVC_KEI_KK_UPDATE_010));
//		
//		// 設定値のマップを作成します
//		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
//		
//		// 機器提供サービス契約番号数
//		int kktkSvcKeiNoListSize = kktkSvcKeiNoList.size();
//		// 機器変更番号数
//		int kikiChgNoListSize = kikiChgNoList.size();
//		
//		super.logPrint.printDebugLog("機器番号 件数：" + kktkSvcKeiNoListSize);
//		super.logPrint.printDebugLog("機器変更番号 件数：" + kikiChgNoListSize);
//		
//		// 配送依頼指定年月日
//		paramList.setValue(strHaisoRsvYmd);
//		
//		super.logPrint.printDebugLog("配送予定日：" + strHaisoRsvYmd);
//		
//		// 更新日付(システム日付)
//		String updDtm = JCCBatCommon.getSysDateTimeStamp();
//		paramList.setValue(updDtm);
//		
//		super.logPrint.printDebugLog("更新日：" + updDtm);
//		
//		// 機器提供サービス契約番号をセット
//		for (int i = 0;i < kktkSvcKeiNoListSize;i++) 
//		{
//			paramList.setValue(kktkSvcKeiNoList.get(i));
//			super.logPrint.printDebugLog("機器番号：" + kktkSvcKeiNoList.get(i));
//		}
//		
//		// 機器変更番号をセット
//		for (int i = 0;i < kikiChgNoListSize;i++) 
//		{
//			paramList.setValue(kikiChgNoList.get(i));
//			super.logPrint.printDebugLog("機器変更番号：" + kikiChgNoList.get(i));
//		}
//		
//		// DBアクセスを実行します
//		db_KK_T_KKTK_SVC_KEI.executeBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_UPDATE_010);
//	}
	// ++++++++++ v10.00.02 削除終了 ++++++++++ //
	
	/**
	 * 
	 * 中間ファイルの読み込みを行います。
	 * 
	 * @param inMap 中間ファイルの値。
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void getKkifm607(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 配送番号
		strHaisoNo = "";
		// 配送予定年月日
		strHaisoRsvYmd = "";
		
		// 配送番号
		strHaisoNo = inMap.getString(JBSbatKKIFM607.HAISO_NO);
		// 配送予定年月日
		strHaisoRsvYmd = inMap.getString(JBSbatKKIFM607.HAISO_RSV_YMD);
	}
	
	// ++++++++++ v10.00.02 削除開始 ++++++++++ //
//	/**
//	 * SQL文の加工を実施します。
//	 * IN句のリストのサイズ分、カンマ区切りの()閉じに加工します。 <br>
//	 * <p>
//	 * @param  strSQL 元のSQL
//	 * @param  selectList データが格納された配列
//	 * @param  editAfSql 加工適用部分変更前
//	 * @param  editBfSql 加工適用部分変更後一部
//	 * @return editSql 加工後のSQL
//	 */
//	private String getEditSQL(String strSQL, ArrayList<String> selectList, String editAfSql, String editBfSql)
//	{
//		StringBuilder sb = new StringBuilder();
//		sb.append(JBSbatKKConst.STR_STA_KAKKO);
//		int selectListSize = selectList.size();
//		for(int i = 0; i < selectListSize; i++)
//		{
//			if(0 != i)
//			{
//				sb.append(JBSbatKKConst.STR_COMMA);
//			}
//			sb.append(JBSbatKKConst.STR_BIND);
//		}
//		sb.append(JBSbatKKConst.STR_END_KAKKO);
//		String editSql = strSQL.replaceAll(editAfSql, editBfSql + sb.toString());
//		return editSql;
//	}
	// ++++++++++ v10.00.02 削除終了 ++++++++++ //
	
}
