/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKAdChgTekkyoKjFinUpd
*	ソースファイル名	：JBSbatKKAdChgTekkyoKjFinUpd.java
*	作成者				：富士通　	
*	作成日				：2014年09月01日
*＜機能概要＞
*　住所変更中撤去工事完了登録部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v10.00.00   2014/09/01  FJ)齋藤    【ANK-2120-00-00】新規作成
*   v11.00.00   2014/11/25  FJ)齋藤    【OM-2014-0003696】解約起算日が撤去工事完了が連携された運用日となっている
*	v29.00.00	2017/02/13  FJ)森脇    【OM-2016-0002358】サービス課金終了年月日更新不備
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKKBatCommon;
import eo.business.util.file.JBSbatKKIFM629;
import eo.business.util.table.JBSbatKK_T_IDO_RSV;
import eo.business.util.table.JBSbatKK_T_MSKM_DTL;
import eo.business.util.table.JBSbatKK_T_SVKEI_EXC_CTRL;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.log.JBSbatLogUtil;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JBSbatCheckUtil;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKAdChgTekkyoKjFinUpd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(申込明細)*/
	private static final String D_TBL_NAME_KK_T_MSKM_DTL = "KK_T_MSKM_DTL";

	/** テーブル(異動予約)*/
	private static final String D_TBL_NAME_KK_T_IDO_RSV = "KK_T_IDO_RSV";
	
	/** テーブル(サービス契約排他制御)*/
	private static final String D_TBL_NAME_KK_T_SVKEI_EXC_CTRL = "KK_T_SVKEI_EXC_CTRL";

	/** SQL定義キー(KK_SELECT_037)*/
	private static final String KK_T_MSKM_DTL_KK_SELECT_037 = "KK_SELECT_037";

	/** SQL定義キー(KK_SELECT_083)*/
	private static final String KK_T_IDO_RSV_KK_SELECT_083 = "KK_SELECT_083";

	/** テーブルアクセスクラス(申込明細)*/
	private JBSbatSQLAccess db_KK_T_MSKM_DTL = null;

	/** テーブルアクセスクラス(サービス契約排他制御)*/
	private JBSbatSQLAccess db_KK_T_SVKEI_EXC_CTRL = null;

	/** テーブルアクセスクラス(異動予約)*/
	private JBSbatSQLAccess db_KK_T_IDO_RSV = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	/**
	 * 申込明細情報リスト
	 * */
	private ArrayList<JBSbatCommonDBInterface> mskm_dtl_inf_list = null;
	
	/**
	 * 異動予約情報リスト
	 * */
	private ArrayList<JBSbatCommonDBInterface> ido_rsv_inf_list = null;
	
	//申込明細情報
	private JBSbatCommonDBInterface mskm_dtl_inf = null;
	
	//申込明細．申込明細番号
	private String mskmdtl_mskm_dtl_no = "";
	
	//異動予約．異動予約番号
	private String ido_rsv_no = "";
	
	//異動予約．予約適用年月日
	private String rsv_aply_ymd = "";
	
	// OM-2016-0002358 ADD START
	//異動予約．サービス課金終了年月日
	private String svc_chrg_endymd = "";
	// OM-2016-0002358 ADD END
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_MSKM_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DTL);
		db_KK_T_SVKEI_EXC_CTRL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVKEI_EXC_CTRL);
		db_KK_T_IDO_RSV = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_IDO_RSV);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("");
		super.logPrint.printDebugLog("execute_START------------------------------------------------");
		// 入力ファイルの内容を転記
		String inSvcKeiNo = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM629.SVC_KEI_NO));
		String inKojiAnkNo = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM629.KOJI_ANK_NO));
		String inMskmNo = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM629.MSKM_NO));
		//OM-2014-0003696 ADD START
		String inKojiakJssiYmd = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM629.KOJIAK_JSSI_YMD));
		//OM-2014-0003696 ADD END
		super.logPrint.printDebugLog("----住所変更中撤去工事完了データ：サービス契約番号[" + inSvcKeiNo + "]");
		super.logPrint.printDebugLog("----住所変更中撤去工事完了データ：工事案件番号[" + inKojiAnkNo + "]");
		super.logPrint.printDebugLog("----住所変更中撤去工事完了データ：申込番号[" + inMskmNo + "]");
		//OM-2014-0003696 ADD START
		super.logPrint.printDebugLog("----住所変更中撤去工事完了データ：工事案件実施年月日[" + inKojiakJssiYmd + "]");
		//OM-2014-0003696 ADD END
		// データをHashMapに格納
		HashMap rsMap = inMap.getMap();

		// 入力情報（住所変更中撤去工事完了データ）の単項目チェック
		if (!isSingleCheckKKIFM629_INF1(rsMap, getItemvalueMap()))
		{
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);
			super.logPrint.printDebugLog("execute_END--------------------------------------------------");
			return null;
		}
		
		//申込番号とサービス契約番号に紐付く申込明細番号を検索
		getMskmDtlNo(inMskmNo,inSvcKeiNo);
		
		if(mskm_dtl_inf_list.size() != 0)
		{
			// 処理対象のサービス契約番号保持用
			List<String> svcKeiNoList = new ArrayList<String>();
			
			svcKeiNoList.add(inSvcKeiNo);
			for (int j = 0; j < mskm_dtl_inf_list.size(); j++)
			{

				//申込明細．申込明細番号
				mskmdtl_mskm_dtl_no = "";
				
				JBSbatCommonDBInterface db_map_mskm_dtl = null;
				db_map_mskm_dtl = mskm_dtl_inf_list.get(j);
				mskmdtl_mskm_dtl_no = JBSbatStringUtil.Rtrim(db_map_mskm_dtl.getString(JBSbatKK_T_MSKM_DTL.MSKM_DTL_NO));
				super.logPrint.printDebugLog("申込明細番号で異動予約を検索"+"["+(j+1)+"件目]" + "START");
				super.logPrint.printDebugLog("----申込明細：申込明細番号"+ "["+mskmdtl_mskm_dtl_no+"]");
				//申込番号明細番号に紐付く異動予約を検索
				getIdoRsv(mskmdtl_mskm_dtl_no);
				if(ido_rsv_inf_list.size() != 0)
				// サービス契約排他制御の排他チェック
				{
					for (int k = 0; k < ido_rsv_inf_list.size(); k++)
					{
						// サービス契約排他制御から最終更新日時を取得（引数で渡したsvKeiExcLastUpdateListにセット）
						List<String> svKeiExcLastUpdateList = new ArrayList<String>();
						String errSvcKeiNo = searchSvkeiExcCtrl(svcKeiNoList, svKeiExcLastUpdateList);
						if(errSvcKeiNo != null)
						{
							super.logPrint.printBusinessErrorLog("EKKB0360KE", new String[]{"サービス契約排他制御TBL", errSvcKeiNo});
							super.logPrint.printDebugLog("サービス契約排他制御テーブルにサービス契約番号：" + errSvcKeiNo + "が存在しません。}");
							super.logPrint.printDebugLog("execute_END--------------------------------------------------");
							return null;
						}
						//タイムスタンプチェック
						if(!timeStampCheckSvcExecHaita(svcKeiNoList, svKeiExcLastUpdateList))
						{
							return null;
						};
						
						JBSbatCommonDBInterface db_ido_rsv = null;
						db_ido_rsv = ido_rsv_inf_list.get(k);
						ido_rsv_no = JBSbatStringUtil.Rtrim(db_ido_rsv.getString(JBSbatKK_T_IDO_RSV.IDO_RSV_NO));
						rsv_aply_ymd = JBSbatStringUtil.Rtrim(db_ido_rsv.getString(JBSbatKK_T_IDO_RSV.RSV_APLY_YMD));
						// OM-2016-0002358 ADD START
						svc_chrg_endymd = JBSbatStringUtil.Rtrim(db_ido_rsv.getString(JBSbatKK_T_IDO_RSV.SVC_CHRG_ENDYMD));
						// OM-2016-0002358 ADD END
						super.logPrint.printDebugLog("----更新対象の異動予約番号    ："+"[" +(k+1)+ "件目]"+"["+ido_rsv_no+"]");
						super.logPrint.printDebugLog("----更新対象の予約適用年月日  ："+"[" +(k+1)+ "件目]"+"["+rsv_aply_ymd+"]");
						// 異動予約更新 設定パラメータ
						// OM-2016-0002358 MOD START
//						String[] setParam = new String[5];
						String[] setParam = new String[6];
						// OM-2016-0002358 MOD END
						// 予約適用年月日
						//OM-2014-0003696 MOD START
						//setParam[0] = super.opeDate;//バッチ運用日
						setParam[0] = inKojiakJssiYmd;//住所変更中撤去工事完了データ：工事案件実施年月日
						//OM-2014-0003696 MOD END
						super.logPrint.printDebugLog("----対象の異動予約の予約適用年月日を更新：" + setParam[0]);
						// 更新年月日時分秒
						setParam[1] = JBSbatDateUtil.getSystemDateTime();
						// 更新オペレータアカウント
						setParam[2] = super.batchUserId;
						// 更新運用年月日
						setParam[3] = super.opeDate;
						// 更新処理ＩＤ
						setParam[4] = super.jobid;
						// OM-2016-0002358 ADD START
						// サービス課金終了年月日
						setParam[5] = svc_chrg_endymd;
						// OM-2016-0002358 ADD END
						// 異動予約更新 検索パラメータ
						String[] whereParam = new String[1];
						// 異動予約番号
						whereParam[0] = ido_rsv_no;	
						// 異動予約更新（予約適用年月日）
						executeKK_T_IDO_RSV_KK_PKUPDATE(setParam, whereParam);
						
						// サービス契約排他制御の更新
						updateSvkeiExecCtrl(svcKeiNoList);
					}
				}
				super.logPrint.printDebugLog("申込明細番号で異動予約を検索"+"["+(j+1)+"件目]" + "END");
			}
		}
		
		super.logPrint.printDebugLog("execute_END--------------------------------------------------");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * エラーメッセージに関する項目値を格納されたHashMap<String, String>を生成します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.エラーメッセージに関する項目値を格納されたHashMapを生成する。<br>
	 *
	 * 2.エラーメッセージに関する項目値を格納されたHashMapに値を設定する。<br>
	 * </pre>
	 * <p>
	 * @return itemvalueMap エラーメッセージに関する項目値を格納されたHashMap
	 */
	private HashMap<String, String> getItemvalueMap()
	{
		// エラーメッセージに関する項目値が格納されたHashMapを設定
		HashMap<String, String> itemvalueMap = new HashMap<String, String>();
		itemvalueMap.put("TXT-KKIFM629-INF1.SVC_KEI_NO", "サービス契約番号");
		itemvalueMap.put("TXT-KKIFM629-INF1.KOJI_ANK_NO", "工事案件番号");
		itemvalueMap.put("TXT-KKIFM629-INF1.MSKM_NO", "申込番号");
		//OM-2014-0003696 ADD START
		itemvalueMap.put("TXT-KKIFM629-INF1.KOJIAK_JSSI_YMD", "工事案件実施年月日");
		//OM-2014-0003696 ADD END
		
		return itemvalueMap;
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_MSKM_DTL.close();
		db_KK_T_IDO_RSV.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 *入力情報（住所変更中撤去工事完了データ）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-KKIFM629-INF1.SVC_KEI_NO			住所変更中撤去工事完了データ.サービス契約番号
	 *			 TXT-KKIFM629-INF1.SVC_KEI_NO			住所変更中撤去工事完了データ.サービス契約番号
	 *			 TXT-KKIFM629-INF1.SVC_KEI_NO			住所変更中撤去工事完了データ.サービス契約番号
	 *			 TXT-KKIFM629-INF1.KOJI_ANK_NO			住所変更中撤去工事完了データ.工事案件番号
	 *			 TXT-KKIFM629-INF1.KOJI_ANK_NO			住所変更中撤去工事完了データ.工事案件番号
	 *			 TXT-KKIFM629-INF1.KOJI_ANK_NO			住所変更中撤去工事完了データ.工事案件番号
	 *			 TXT-KKIFM629-INF1.MSKM_NO			住所変更中撤去工事完了データ.申込番号
	 *			 TXT-KKIFM629-INF1.MSKM_NO			住所変更中撤去工事完了データ.申込番号
	 *			 TXT-KKIFM629-INF1.MSKM_NO			住所変更中撤去工事完了データ.申込番号
	 *			 TXT-KKIFM629-INF1.KOJIAK_JSSI_YMD		住所変更中撤去工事完了データ.工事案件実施年月日
	 *			 TXT-KKIFM629-INF1.KOJIAK_JSSI_YMD		住所変更中撤去工事完了データ.工事案件実施年月日
	 *			 TXT-KKIFM629-INF1.KOJIAK_JSSI_YMD		住所変更中撤去工事完了データ.工事案件実施年月日
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckKKIFM629_INF1(HashMap rsMap, HashMap itemvalueMap)
	{
		super.logPrint.printDebugLog("----単項目チェックを行います。：");
		// 単項目チェックを行います
		String strValue = null;

		// サービス契約番号項目チェック
		strValue = (String)rsMap.get("SVC_KEI_NO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM629-INF1.SVC_KEI_NO")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM629-INF1.SVC_KEI_NO")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM629-INF1.SVC_KEI_NO")});
			return false;
		}

		// 工事案件番号項目チェック
		strValue = (String)rsMap.get("KOJI_ANK_NO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM629-INF1.KOJI_ANK_NO")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM629-INF1.KOJI_ANK_NO")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM629-INF1.KOJI_ANK_NO")});
			return false;
		}

		// 申込番号項目チェック
		strValue = (String)rsMap.get("MSKM_NO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM629-INF1.MSKM_NO")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "12"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM629-INF1.MSKM_NO")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM629-INF1.MSKM_NO")});
			return false;
		}
		//OM-2014-0003696 ADD START
		// 工事案件実施年月日チェック
		strValue = (String)rsMap.get("KOJIAK_JSSI_YMD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM629-INF1.KOJIAK_JSSI_YMD")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "8"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM629-INF1.KOJIAK_JSSI_YMD")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM629-INF1.KOJIAK_JSSI_YMD")});
			return false;
		}
		//OM-2014-0003696 ADD END

		return true;
	}

	/**
	 * SQLKEY(KK_SELECT_037)で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_MSKM_DTL_KK_SELECT_037(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DTL.selectBySqlDefine(paramList, KK_T_MSKM_DTL_KK_SELECT_037);
	}

	/**
	 * SQLKEY(KK_SELECT_083)で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_IDO_RSV_KK_SELECT_083(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_IDO_RSV.selectBySqlDefine(paramList, KK_T_IDO_RSV_KK_SELECT_083);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	IDO_RSV_NO
	 *		 	UPD_DTM
	 *		 	UPD_OPEACNT
	 *		 	UPD_UNYO_YMD
	 *		 	UPD_TRN_ID
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_IDO_RSV_KK_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("RSV_APLY_YMD", setParam[0]);
		setMap.setValue("UPD_DTM", setParam[1]);
		setMap.setValue("UPD_OPEACNT", setParam[2]);
		setMap.setValue("UPD_UNYO_YMD", setParam[3]);
		setMap.setValue("UPD_TRN_ID", setParam[4]);
		// OM-2016-0002358 ADD START
		if (setParam[5] != null && !setParam[5].equals(""))
		{
			// サービス課金終了年月日が設定されている場合は更新
			setMap.setValue("SVC_CHRG_ENDYMD", JBSbatDateUtil.adjustDate((String) setParam[0], -1));
		}
		// OM-2016-0002358 ADD END
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("IDO_RSV_NO", whereParam[0]);

		// DBアクセスを実行します
		db_KK_T_IDO_RSV.updateByPrimaryKeys(whereMap, setMap);
	}

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 申込明細情報を検索
	 * 
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void getMskmDtlNo(String inMskmNo,String inSvcKeiNo) throws Exception 
	{
		super.logPrint.printDebugLog("申込明細情報を検索_START");

		
		JBSbatCommonDBInterface db_map_inf_mskm_dtl = null;
		
		//申込明細情報リスト生成
		mskm_dtl_inf_list = new ArrayList<JBSbatCommonDBInterface>();
		
		// 検索条件の設定
		Object[] param = {inMskmNo,inSvcKeiNo};	
		//申込明細情報検索実施。
		executeKK_T_MSKM_DTL_KK_SELECT_037(param);
		
		//申込明細情報情報取得
		db_map_inf_mskm_dtl = db_KK_T_MSKM_DTL.selectNext();
		
		while(null != db_map_inf_mskm_dtl)
		{
			//申込明細情報格納
			mskm_dtl_inf_list.add(db_map_inf_mskm_dtl);

			db_map_inf_mskm_dtl = db_KK_T_MSKM_DTL.selectNext();
			
		}
		
		
		super.logPrint.printDebugLog("----申込明細情報件数: " + mskm_dtl_inf_list.size());
		
		super.logPrint.printDebugLog("申込明細情報を検索_END");
		
	}
	
	/**
	 * 異動予約情報を検索
	 * 
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void getIdoRsv(String mskmdtl_mskm_dtl_no) throws Exception 
	{
		super.logPrint.printDebugLog("異動予約情報を検索_START");

		
		JBSbatCommonDBInterface db_map_inf_ido_rsv = null;
		
		//異動予約情報リスト生成
		ido_rsv_inf_list = new ArrayList<JBSbatCommonDBInterface>();
		
		// 検索条件の設定
		Object[] param = {mskmdtl_mskm_dtl_no,super.opeDate};		
		// 異動予約情報検索実施。
		executeKK_T_IDO_RSV_KK_SELECT_083(param);
		
		//サービス契約情報取得
		db_map_inf_ido_rsv = db_KK_T_IDO_RSV.selectNext();
		
		while(null != db_map_inf_ido_rsv)
		{
			//申込明細情報格納
			ido_rsv_inf_list.add(db_map_inf_ido_rsv);

			db_map_inf_ido_rsv = db_KK_T_IDO_RSV.selectNext();
			
		}
		super.logPrint.printDebugLog("----異動予約情報件数: " + ido_rsv_inf_list.size());
		
		super.logPrint.printDebugLog("異動予約情報を検索_END");
		
	}
	/**
	 * サービス契約排他制御テーブルの検索を行います。
	 * <br>
	 * @param svcKeiNoList サービス契約番号リスト
	 * @param lastUpdateList 最終更新年月日リスト（取得した値をセットする）
	 * @throws Exception 
	 */
	private String searchSvkeiExcCtrl(List<String> svcKeiNoList, List<String> lastUpdateList) throws Exception
	{
		for(String svcKeiNo : svcKeiNoList)
		{
			// PK検索を行う
			JBSbatCommonDBInterface outMap = searchSvkeiExcCtrl(svcKeiNo);
			
			if(outMap == null)
			{
				super.logPrint.printDebugLog("サービス契約排他制御情報が存在しません。");
				// エラーのサービス契約番号を返却
				return svcKeiNo;
			}
			lastUpdateList.add(JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVKEI_EXC_CTRL.LAST_UPD_DTM)));
		}
		// 正常終了時はnullを返却
		return null;
	}
	
	/**
	 * サービス契約排他制御テーブルの検索を行います。
	 * @param svcKeiNo
	 * @return
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface searchSvkeiExcCtrl(String svcKeiNo) throws Exception
	{
		// SQL実行結果取得用mapを生成（サービス契約TBL）
		JBSbatCommonDBInterface pkMap = new JBSbatCommonDBInterface();
	
		// 条件項目を設定します
		pkMap.setValue(JBSbatKK_T_SVKEI_EXC_CTRL.SVC_KEI_NO, svcKeiNo);
	
		// PK検索を行う
		JBSbatCommonDBInterface outMap = db_KK_T_SVKEI_EXC_CTRL.selectByPrimaryKeys(pkMap);
		return outMap;
	}
	/**
	 * サービス契約排他制御のタイムスタンプチェックをします（同時にロックしておく）
	 * @param svcKeiNoList
	 * @param lastUpdateList
	 * @throws Exception
	 */
	private boolean timeStampCheckSvcExecHaita(List<String> svcKeiNoList, List<String> lastUpdateList) throws Exception
	{
		super.logPrint.printDebugLog("タイムスタンプチェック_START");
		
		for(int i=0;i<svcKeiNoList.size();i++)
		{
			String svcKeiNo = svcKeiNoList.get(i);
			String lastUpdateBf = lastUpdateList.get(i);
			
			// サービス契約排他制御より最終更新日時を取得し同じ場合排他をかけます。
			// サービス契約排他制御（outMap）のnull判定ないが、事前に検索済みのため不要。
			JBSbatCommonDBInterface outMap = searchSvkeiExcCtrl(svcKeiNo);
			if(null == isTimeStampCheck(svcKeiNo, 
											lastUpdateBf, 
											JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVKEI_EXC_CTRL.LAST_UPD_DTM))))
			{
				super.logPrint.printBusinessErrorLog("EKKB0360KE", new String[]{"サービス契約排他制御TBL", svcKeiNo});
				super.logPrint.printDebugLog("住所変更中撤去工事完了登録処理で排他エラーが発生しました。{SVC_KEI_NO:" + svcKeiNo + "}");
				return false;
			}
		}
		super.logPrint.printDebugLog("タイムスタンプチェック_END");
		return true;
	}
	
	/**
	 * タイムスタンプチェックを実施します。
	 * <br>
	 * @param svcKeiNo サービス契約番号。
	 * @param lastUpdDtmStrBf 最終更新年月日時分秒。
	 * @param lastUpdDtmStrAf 最終更新年月日時分秒。
	 * @throws Exception 
	 */
	private JBSbatCommonDBInterface isTimeStampCheck(String svcKeiNo, String lastUpdDtmStrBf, String lastUpdDtmStrAf) throws Exception
	{
		// ログレベルがデバッグモードの場合
		if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
		{
			super.logPrint.printDebugLog("----更新年月日時分秒(初期検索)：" + lastUpdDtmStrBf);
			super.logPrint.printDebugLog("----更新年月日時分秒(直前値)  ：" + lastUpdDtmStrAf);
		}
		
		// タイムスタンプチェックの実施。
		if(lastUpdDtmStrAf.equals(lastUpdDtmStrBf))
		{
			JBSbatCommonDBInterface svkeiExcCtrlMap = new JBSbatCommonDBInterface();
			
			// サービス契約排他制御テーブルに排他制御処理を実行する
			svkeiExcCtrlMap.setValue(JBSbatKK_T_SVKEI_EXC_CTRL.SVC_KEI_NO, svcKeiNo);
			JBSbatCommonDBInterface dbmap = db_KK_T_SVKEI_EXC_CTRL.selectByPrimaryKeysForUpdateWait(svkeiExcCtrlMap);
			
			if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
			{
				super.logPrint.printDebugLog("タイムスタンプチェック結果_OK");
			}
			return dbmap;
		}
	
		if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
		{
			super.logPrint.printDebugLog("タイムスタンプチェック結果_NG");
		}
		return null;
	}
	
	/**
	 * サービス契約排他制御の更新を行います
	 * @param svcKeiNoList
	 * @throws Exception
	 */
	private void updateSvkeiExecCtrl(List<String> svcKeiNoList) throws Exception
	{
		for(String svcKeiNo:svcKeiNoList)
		{
			// サービス契約排他制御の最終更新年月日時分秒の更新を行う。
			JBSbatCommonDBInterface paramMap = new JBSbatCommonDBInterface();
			JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
			
			// サービス契約番号を設定
			whereMap.setValue(JBSbatKK_T_SVKEI_EXC_CTRL.SVC_KEI_NO, svcKeiNo);
			
			// 最終更新年月日時分秒を更新。
			paramMap.setValue(JBSbatKK_T_SVKEI_EXC_CTRL.LAST_UPD_DTM, JBSbatDateUtil.getSystemDateTimeStamp());
			db_KK_T_SVKEI_EXC_CTRL.updateByPrimaryKeys(whereMap, paramMap);
			super.logPrint.printDebugLog("更新年月日時分秒を更新        ：" + paramMap.getValue(JBSbatKK_T_SVKEI_EXC_CTRL.LAST_UPD_DTM));
		}
	}
}
