/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKTekkyoKjFinIdoRsvAddCutToolUse
*	ソースファイル名	：JBSbatKKTekkyoKjFinIdoRsvAddCutToolUse.java(JBSbatKKTekkyoKjFinIdoRsvAdd.javaを流用)
*	作成者				：富士通　
*	作成日				：2020年01月14日
*＜機能概要＞
*　撤去工事完了情報抽出異動予約登録(切断ツール利用)部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v48.00.00	2020/01/04   富士通		【ANK-3734-00-00】光ケーブル切断ツール対応　新規作成
*********************************************************************/
package eo.business.service;


import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatCHIFI010;
import eo.business.util.table.JBSbatCH_M_PRC_SCHDL_TEIGI;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.db.JBSbatSQLAccess;

/**
* 工事完了ワークより撤去（解約）が完了した情報を
* 異動予約テーブルへ反映を行う。<p>
*<BR>
* @author 富士通
*/
public class JBSbatKKTekkyoKjFinIdoRsvAddCutToolUse extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(異動予約)*/
	private static final String D_TBL_NAME_KK_T_IDO_RSV = "KK_T_IDO_RSV";

	/** テーブルアクセスクラス(異動予約)*/
	private JBSbatSQLAccess db_KK_T_IDO_RSV = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 空文字 */
	private static final String STRING_BLANK = "";
	/** レコードキー 異動予約番号 **/
	private static String IDO_RSV_NO = "IDO_RSV_NO";
	/** レコードキー サービス契約番号 **/
	private static String SVC_KEI_NO = "SVC_KEI_NO";
	/** レコードキー サービス契約回線内訳番号 **/
	private static String SVC_KEI_KAISEN_UCWK_NO = "SVC_KEI_KAISEN_UCWK_NO";
	/** レコードキー 申込明細番号 **/
	private static String MSKM_DTL_NO = "MSKM_DTL_NO";
	/** レコードキー サービス契約ステータス **/
	private static String SVC_KEI_STAT = "SVC_KEI_STAT";
	/** レコードキー 更新年月日 **/
	private static String UPD_DTM = "UPD_DTM";
	/** レコードキー 予約適用年月日 **/
	private static String RSV_APLY_YMD = "RSV_APLY_YMD";
	/** レコードキー 工事案件実施年月日 **/
	private static String KOJIAK_JSSI_YMD = "KOJIAK_JSSI_YMD";
	/** レコードキー 工事案件番号 **/
	private static String KOJIAK_NO = "KOJIAK_NO";
	/** レコードキー レコード区分 **/
	private static String DATE_CATEGORY = "DATE_CATEGORY";
	/** テーブルアクセスクラス(料金スケジュール定義)*/
	private JBSbatSQLAccess db_CH_M_PRC_SCDL_TEIGI = null;
	/** テーブル(料金スケジュール定義)*/
	private static final String D_TBL_NAME_CH_M_PRC_SCDL_TEIGI = "CH_M_PRC_SCHDL_TEIGI";
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";
	// 20130813 KT1-2013-0000803 削除 DEL START
//	/** SQL定義キー(KK_SELECT_002)*/
//	private static final String KK_T_PRG_KK_SELECT_002 = "KK_SELECT_002";
	// 20130813 KT1-2013-0000803 削除 DEL END
	// 20130813 KT1-2013-0000803 運用日時点の請求年月取得 ADD START
	/** SQL定義キー(KK_SELECT_017)*/
	private static final String CH_M_PRC_SCHDL_TEIGI_KK_SELECT_017 = "KK_SELECT_017";
	// 20130813 KT1-2013-0000803 運用日時点の請求年月取得 ADD END
	/** SQL定義キー(KK_SELECT_012)*/
	private static final String KK_T_IDO_RSV_KK_SELECT_012 = "KK_SELECT_012";
	/** レコードキー **/
	private static String EVENT_YMD = "EVENT_YMD";
	/** レコード区分 解約日設定対象 **/
	private static String DATE_CATEGORY_DSL_DATE_TARGET = "1";
	/** レコード区分 解約日希望日到来対象 **/
	private static String DATE_CATEGORY_DSL_KIBO_TARGET = "2";
	/** 更新オペレーターアカウント **/
	private static String UPD_OPERATOR = "SYSTEM";
	/** サービス契約ステータス 解約済 **/
	private static String SVCKEI_STAT_DSL = "910";
	/** サービス契約ステータス キャンセル済 **/
	private static String SVCKEI_STAT_CSL = "920";
	/** 異動予約状態コード 未反映 **/
	private static String IDO_RSV_STAT_CD_MHE = "00";
	/** 異動予約状態コード 取消済 **/
	private static String IDO_RSV_STAT_CD_CSL = "02";
	
	/** エラー文言 異動予約の排他 **/
	private static String ERR_DESC_IDO_RSV_UPD_DTM = "異動予約レコードの排他エラー";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_IDO_RSV = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_IDO_RSV);
		db_CH_M_PRC_SCDL_TEIGI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_SCDL_TEIGI);
		
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		super.logPrint.printDebugLog("********** サービス契約解約完了対象抽出 メイン処理 JBSbatKKTekkyoKjFinIdoRsvAddCutToolUse Start **********");
		
		String kojiakJssiYmd = null;
		String rsvAplyYmd = null;
		String batOpeDate = null;
		// 20130813 KT1-2013-0000803 料金計算日は不要のため削除 DEL START
//		String prcDate = null;
		// 20130813 KT1-2013-0000803 料金計算日は不要のため削除 DEL END
		String dslDate = null;
		String svcKeiNo = null;
		String svcKeiKaisenUcwkNo = null;
		String mskmDtlNo = null;
		String kojiAkNo = null;
		String updDtm = null;
		String idoRsvNo = null;
		String svcKeiStat = null;
		String nowUpdDtm = null;
		JBSbatCommonDBInterface whereMap = null;
		JBSbatCommonDBInterface setMap = null;
		// 20130813 KT1-2013-0000803 請求年月 ADD START
		String seikyYm = null;
		// 20130813 KT1-2013-0000803 請求年月 ADD END
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		// 20131222 OM-2013-0004788 撤去工事依頼中情報ファイルの出力処理を追加 START
		boolean fileOutPutFlg = false;		//true:撤去工事依頼中情報ファイルを出力する
		// 20131222 OM-2013-0004788 撤去工事依頼中情報ファイルの出力処理を追加 END
		try{

			//サービス契約番号の取得
			svcKeiNo = inMap.getString(SVC_KEI_NO);
			
			//サービス契約回線内訳番号の取得
			svcKeiKaisenUcwkNo = inMap.getString(SVC_KEI_KAISEN_UCWK_NO);
			
			//申込明細番号の取得
			mskmDtlNo = inMap.getString(MSKM_DTL_NO);
			
			//工事案件番号の取得
			kojiAkNo = inMap.getString(KOJIAK_NO);
			
			//異動予約.更新年月日の取得
			updDtm = inMap.getString(UPD_DTM);

			//異動予約番号の取得
			idoRsvNo = inMap.getString(IDO_RSV_NO);
			
			//サービス契約ステータスの取得
			svcKeiStat = inMap.getString(SVC_KEI_STAT);
			
			//--解約日算出
			//工事案件実施年月日(工事完了日)の取得
			kojiakJssiYmd = inMap.getString(KOJIAK_JSSI_YMD);
			
			//予約適用年月日の取得
			rsvAplyYmd = inMap.getString(RSV_APLY_YMD);
			
			//バッチ運用日付の取得
			batOpeDate = super.opeDate;
			
			super.logPrint.printDebugLog("/****************サービス契約解約完了対象抽出 Begin Debug Log Start ****************/");
			super.logPrint.printDebugLog("運用日 : [" + toString(batOpeDate) + "]");
			super.logPrint.printDebugLog("異動予約番号 : [" 				+ toString(idoRsvNo) + "]");
			super.logPrint.printDebugLog("サービス契約番号 : [" 				+ toString(svcKeiNo) + "]");
			super.logPrint.printDebugLog("サービス契約回線内訳番号 : [" 				+ toString(svcKeiKaisenUcwkNo) + "]");
			super.logPrint.printDebugLog("申込明細番号 : [" 				+ toString(mskmDtlNo) + "]");
			super.logPrint.printDebugLog("工事案件番号 : [" 				+ toString(kojiAkNo) + "]");
			super.logPrint.printDebugLog("サービス契約ステータス : [" 				+ toString(svcKeiStat) + "]");
			super.logPrint.printDebugLog("/****************サービス契約解約完了対象抽出 Begin Debug Log End ****************/");

			// 20130813 KT1-2013-0000803 削除 DEL START
//			//料金計算日の取得（CH_M_PRC_SCHDL_TEIGIから取得）
//			prcDate = executeCH_M_PRC_SCHDL_TEIGI_SELECT_002(new String[]{batOpeDate.substring(0, 6)});
//			
//			super.logPrint.printDebugLog("料金計算日 : [" 				+ toString(prcDate) + "]");
			// 20130813 KT1-2013-0000803 削除 DEL END
			
			// 20130813 KT1-2013-0000803 請求年月取得 ADD START
			// 請求年月
			seikyYm = executeCH_M_PRC_SCHDL_TEIGI_KK_SELECT_017(new String[]{ batOpeDate });
			super.logPrint.printDebugLog("請求年月 : ["+ toString(seikyYm) + "]");
			// 20130813 KT1-2013-0000803 請求年月取得 ADD END
			
			//解約日算出
			// 20130813 KT1-2013-0000803 料金計算日→請求年月にパラメータ変更 MOD START
//			dslDate = getDslDate(kojiakJssiYmd, rsvAplyYmd, batOpeDate, prcDate, inMap);
			dslDate = getDslDate(kojiakJssiYmd, rsvAplyYmd, batOpeDate, seikyYm, inMap);
			
			if (dslDate == null)
			{
				super.logPrint.printDebugLog("料金計算対象外のためスキップ 異動予約番号=" + idoRsvNo + "  予約適用年月日=" + rsvAplyYmd + "  運用日=" +batOpeDate);
				return outputBean;
			}
			
			// 20130813 KT1-2013-0000803 料金計算日→請求年月にパラメータ変更 MOD END
			
			super.logPrint.printDebugLog("解約日 : [" 				+ toString(dslDate) + "]");

			//現地点の異動予約レコードから更新日時を取得
			nowUpdDtm = executeKK_T_IDO_RSV_SELECT_009(new String[]{idoRsvNo});
			
			//ここで更新日時に差異がある場合は排他エラーとする
			if(!updDtm.equals(nowUpdDtm))
			{
				super.logPrint.printDebugLog("!!!!!!!!!! 異動予約レコードにて排他エラー IDO_RSV_NO=" + idoRsvNo + "  before=" + updDtm +"  after=" + nowUpdDtm + "!!!!!!!!!!");
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, new String[]{ERR_DESC_IDO_RSV_UPD_DTM});
				// OM-2013-0002188 2013/09/19 START
				super.commonItem.setErrFlg(true);
				// OM-2013-0002188 2013/09/19 END
				return outputBean;
			}
			
			//--更新用パラメータ構築
			//WHERE句(主キー)
			whereMap = new JBSbatCommonDBInterface();
			//異動予約番号
			whereMap.setValue("IDO_RSV_NO", idoRsvNo);

			//SET句（更新値）
			setMap = new JBSbatCommonDBInterface();
			
			//サービス契約ステータスによる分岐
			if(svcKeiStat.equals(SVCKEI_STAT_DSL) || svcKeiStat.equals(SVCKEI_STAT_CSL))
			{
				
				//--取消時の更新
				super.logPrint.printDebugLog("/**************** 更新処理（取消時の更新） Update Debug Log Start ****************/");
				super.logPrint.printDebugLog("異動予約番号 : [" 				+ toString(idoRsvNo) + "]");

				//予約取消年月日 <= バッチ運用年月日
				setMap.setValue("IDO_RSV_CL_YMD", batOpeDate);
				super.logPrint.printDebugLog("予約取消年月日 : [" 				+ toString(batOpeDate) + "]");

				//異動予約状態コード <= 取消済(02)
				setMap.setValue("IDO_RSV_STAT_CD", IDO_RSV_STAT_CD_CSL);
				super.logPrint.printDebugLog("異動予約状態コード : [" 				+ toString(IDO_RSV_STAT_CD_CSL) + "]");

				//工事案件番号 <= 工事案件番号（あれば）
				if(kojiAkNo != null && !kojiAkNo.equals(""))
				{
					setMap.setValue("KOJIAK_NO", kojiAkNo);
					super.logPrint.printDebugLog("工事案件番号 : [" 				+ toString(kojiAkNo) + "]");
				}

				//更新年月日時分秒 <= 処理実行年月日
				String wkTimeStamp = JCCBatCommon.getSysDateTimeStamp();
				setMap.setValue("UPD_DTM", wkTimeStamp);
				super.logPrint.printDebugLog("更新年月日時分秒 : [" 				+ toString(wkTimeStamp) + "]");

				//更新オペレータアカウント
				setMap.setValue("UPD_OPEACNT", UPD_OPERATOR);
				super.logPrint.printDebugLog("更新オペレータアカウント : [" 				+ toString(UPD_OPERATOR) + "]");

			}
			else
			{

				// 20131222 OM-2013-0004788 撤去工事依頼中情報ファイルの出力処理を追加 START
				fileOutPutFlg = true;
				// 20131222 OM-2013-0004788 撤去工事依頼中情報ファイルの出力処理を追加 END

				//--解約日設定時の更新
				super.logPrint.printDebugLog("/**************** 更新処理（解約日設定時の更新） Update Debug Log Start ****************/");
				super.logPrint.printDebugLog("異動予約番号 : [" 				+ toString(idoRsvNo) + "]");

				//予約適用年月日 <= 解約日
				setMap.setValue("RSV_APLY_YMD", dslDate);
				super.logPrint.printDebugLog("予約適用年月日 : [" 				+ toString(dslDate) + "]");
				
				//異動予約状態コード <= 未反映(00)
				setMap.setValue("IDO_RSV_STAT_CD", IDO_RSV_STAT_CD_MHE);
				super.logPrint.printDebugLog("異動予約状態コード : [" 				+ toString(IDO_RSV_STAT_CD_MHE) + "]");

				//工事案件番号 <= 工事案件番号（あれば）
				if(kojiAkNo != null && !kojiAkNo.equals(""))
				{
					setMap.setValue("KOJIAK_NO", kojiAkNo);
					super.logPrint.printDebugLog("工事案件番号 : [" 				+ toString(kojiAkNo) + "]");
				}

				//更新年月日時分秒 <= 処理実行年月日
				String wkTimeStamp = JCCBatCommon.getSysDateTimeStamp();
				setMap.setValue("UPD_DTM", wkTimeStamp);
				super.logPrint.printDebugLog("更新年月日時分秒 : [" 				+ toString(wkTimeStamp) + "]");
				
				//更新オペレータアカウント
				setMap.setValue("UPD_OPEACNT", UPD_OPERATOR);
				super.logPrint.printDebugLog("更新オペレータアカウント : [" 				+ toString(UPD_OPERATOR) + "]");

			}
			
			//更新実行
			db_KK_T_IDO_RSV.updateByPrimaryKeys(whereMap, setMap);
			
			super.logPrint.printDebugLog("/**************** 更新処理 Update Debug Log End ****************/");
			
			// 20131222 OM-2013-0004788 撤去工事依頼中情報ファイルの出力処理を追加 START
			if (fileOutPutFlg)
			{
				JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
				// サービス契約番号
				outmap.setString(JBSbatCHIFI010.SVC_KEI_NO, svcKeiNo);
				// 撤去解約年月日
				outmap.setString(JBSbatCHIFI010.TK_DSL_YMD, dslDate);
				// 処理年月日
				outmap.setString(JBSbatCHIFI010.TRN_YMD, batOpeDate);
				// ファイルに出力
				outmap.setOutFlg(true);
				outputBean.addOutMapList(outmap);
			}
			// 20131222 OM-2013-0004788 撤去工事依頼中情報ファイルの出力処理を追加 END
			
			super.logPrint.printDebugLog("********** サービス契約解約完了対象抽出 メイン処理 JBSbatKKTekkyoKjFinIdoRsvAddCutToolUse End **********");

			// 出力共通電文を返却
			return outputBean;
			
		}
//↓↓↓2013-06-26追加　巻取BIT2-2013-0000562（撤去の異動予約が反映されない）↓↓↓
		catch (JBSbatBusinessError be) 
		{
			super.commonItem.setErrFlg(true);
			throw new JBSbatBusinessError();
		}
//↑↑↑2013-06-26追加　巻取BIT2-2013-0000562（撤去の異動予約が反映されない）↑↑↑
		catch (Exception e) 
		{
			
			super.logPrint.printDebugLog("!!!!!!!!!! サービス契約解約完了対象抽出 エラー !!!!!!!!!!");
			super.logPrint.printDebugLog(e.toString());
			super.logPrint.printDebugLog("業務エラーとして次のトランザクション処理を行います");
			super.commonItem.setErrFlg(true);
			super.logPrint.printDebugLog("********** サービス契約解約完了対象抽出 メイン処理 JBSbatKKTekkyoKjFinIdoRsvAddCutToolUse End **********");
//↓↓↓2013-06-26変更　巻取BIT2-2013-0000562（撤去の異動予約が反映されない）↓↓↓
//			throw new JBSbatBusinessError(JPCBatchMessageConstant.EKKB0010CW);
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, new String[]{e.toString()});
			throw new JBSbatBusinessError();
//↑↑↑2013-06-26変更　巻取BIT2-2013-0000562（撤去の異動予約が反映されない）↑↑↑
		}

		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
// 20130813 KT1-2013-0000803 削除 DEL START	
//	/**
//	 * 解約日算出
//	 * @param kojiakJssiYmd 工事完了日
//	 * @param rsvAplyYmd 予約適用年月日
//	 * @param batOpeDate 運用年月日
//	 * @param prcDate 料金計算日
//	 * @param inMap 入力データ
//	 * @return
//	 * @throws Exception 
//	 */
//	private String getDslDate(String kojiakJssiYmd,String rsvAplyYmd,String batOpeDate,String prcDate, JBSbatServiceInterfaceMap inMap) throws Exception
//	{
//		
//		String compBaseDate = null;
//		String seikyCompDate = null;
//		String dslDate = null;
//		int wkCompBaseDate;
//		int wkSeikyCompDate;
//		Calendar cal = null;
//		String seikyCompDateY = null;
//		String seikyCompDateM = null;
//		String seikyCompDateD = null;
//		SimpleDateFormat sdf = null;
//
//		super.logPrint.printDebugLog("********** 解約日算出 getDslDate Start **********");
//
//		//比較基準日算出
//		compBaseDate = getCompBaseDate(kojiakJssiYmd, rsvAplyYmd, batOpeDate, prcDate, inMap);
//		
//		//請求完了日算出
//		seikyCompDate = getSeikyCompYmd(kojiakJssiYmd, rsvAplyYmd, batOpeDate, prcDate);
//		
//		//比較用に各日付を数値変換
//		wkCompBaseDate = Integer.parseInt(compBaseDate);
//		wkSeikyCompDate = Integer.parseInt(seikyCompDate);
//		
//		//比較基準日と請求完了月の比較
//		if(wkCompBaseDate > wkSeikyCompDate)
//		{
//			//比較基準日 > 請求完了月 の場合、解約日は比較基準日
//			dslDate = compBaseDate;
//		}
//		else
//		{
//			//比較基準日 <= 請求完了月の場合、解約日は請求完了月の翌月1日
//			//日付計算用にCalendarクラスの生成
//			cal = Calendar.getInstance();
//			
//			//日付の設定
//			seikyCompDateY = seikyCompDate.substring(0, 4);
//			seikyCompDateM = seikyCompDate.substring(4, 6);
//			seikyCompDateD = seikyCompDate.substring(6, 8);
//			cal.set(Calendar.YEAR, Integer.parseInt(seikyCompDateY));
//			cal.set(Calendar.MONTH, Integer.parseInt(seikyCompDateM)-1);
//			cal.set(Calendar.DATE, Integer.parseInt(seikyCompDateD));
//			
//			//請求完了月の翌月設定
//			cal.add(Calendar.MONTH, 1);
//			
//			//１日設定
//			cal.set(Calendar.DATE, 1);
//			
//			//Calendarから文字列変換
//			sdf = new SimpleDateFormat("yyyyMMdd");
//			dslDate = sdf.format(cal.getTime());
//			
//		}
//		
//		super.logPrint.printDebugLog("********** 解約日算出 getDslDate End **********");
//
//		return dslDate;
//		
//	}
	
//	/**
//	 * 請求完了日算出
//	 * @param kojiakJssiYmd 工事完了日
//	 * @param rsvAplyYmd 予約適用年月日
//	 * @param batOpeDate 運用年月日
//	 * @param prcDate 料金計算日
//	 * @return
//	 */
//	private String getSeikyCompYmd(String kojiakJssiYmd,String rsvAplyYmd,String batOpeDate,String prcDate)
//	{
//		
//		int wkPrcDate;
//		int wkBatOpeDate;
//		Calendar cal = null;
//		String prcDateY = null;
//		String prcDateM = null;
//		String prcDateD = null;
//		String retDate = null;
//		SimpleDateFormat sdf = null;
//		
//		super.logPrint.printDebugLog("********** 請求完了日算出 getSeikyCompYmd Start **********");
//
//		//日付クラスを生成
//		cal = Calendar.getInstance();
//		
//		//日付を設定
//		prcDateY = prcDate.substring(0, 4);
//		prcDateM = prcDate.substring(4, 6);
//		prcDateD = prcDate.substring(6, 8);
//		cal.set(Calendar.YEAR, Integer.parseInt(prcDateY));
//		cal.set(Calendar.MONTH, Integer.parseInt(prcDateM)-1);
//		cal.set(Calendar.DATE, Integer.parseInt(prcDateD));
//		
//		//比較用に日付を数値変換
//		wkPrcDate = Integer.parseInt(prcDate);
//		wkBatOpeDate = Integer.parseInt(batOpeDate);
//		
//		//料金計算日とバッチ運用日を比較
//		if(wkPrcDate > wkBatOpeDate)
//		{
//			//料金計算日 > バッチ運用日 の場合、料金計算日の２ヶ月前
//			cal.add(Calendar.MONTH, -2);
//		}
//		else
//		{
//			//料金計算日 <= バッチ運用日 の場合、料金計算日の１ヶ月前
//			cal.add(Calendar.MONTH, -1);
//		}
//		
//		//カレンダーを日付文字列に展開
//		sdf = new SimpleDateFormat("yyyyMMdd");
//		retDate = sdf.format(cal.getTime());
//		
//		super.logPrint.printDebugLog("********** 請求完了日算出 getSeikyCompYmd End **********");
//
//		return retDate;
//	}
// 20130813 KT1-2013-0000803 削除 DEL END

// 20130813 KT1-2013-0000803 削除 DEL START	
	/**
	 * 解約起算日算出
	 * @param kojiakJssiYmd 工事完了日
	 * @param rsvAplyYmd 予約適用年月日
	 * @param batOpeDate 運用年月日
	 * @param seikyYm 請求年月
	 * @param inMap 入力データ
	 * @return
	 * @throws Exception 
	 */
	private String getDslDate(String kojiakJssiYmd,String rsvAplyYmd,String batOpeDate, String seikyYm, JBSbatServiceInterfaceMap inMap) throws Exception
	{
		
		String compBaseDate = null;
		String dslDate = null;
		int wkCompBaseDate;
		int wkPrcCompDate;
		
		super.logPrint.printDebugLog("********** 解約起算日算出 getDslDate Start **********");

		//比較基準日算出
		compBaseDate = getCompBaseDate(kojiakJssiYmd, rsvAplyYmd, batOpeDate, seikyYm, inMap);
		
		if (compBaseDate == null)
		{
			// スキップする
			return null;
		}
		
		// 料金計算月初日
		String prcDate = seikyYm + "01";
		
		//比較用に各日付を数値変換
		wkCompBaseDate = Integer.parseInt(compBaseDate);
		wkPrcCompDate = Integer.parseInt(prcDate);
		
		//比較基準日と料金計算月初日の比較
		if(wkCompBaseDate >= wkPrcCompDate)
		{
			//比較基準日 >= 料金計算月初日 の場合、解約起算日は比較基準日
			dslDate = compBaseDate;
		}
		else
		{
			//比較基準日 < 料金計算月初日 の場合、解約起算日は料金計算月初日
			dslDate = prcDate;
		}
		
		super.logPrint.printDebugLog("********** 解約起算日算出 getDslDate End **********");

		return dslDate;
		
	}
// 20130813 KT1-2013-0000803 追加 ADD END
	/**
	 * 比較基準日算出
	 * @param kojiakJssiYmd 工事完了日
	 * @param rsvAplyYmd 予約適用年月日
	 * @param batOpeDate 運用年月日
	 * @param prcDate 請求年月
	 * @param inMap 入力データ
	 * @return
	 * @throws Exception 
	 */
// 20130813 KT1-2013-0000803 料金計算日→請求年月にパラメータ変更 MOD START
//	private String getCompBaseDate(String kojiakJssiYmd,String rsvAplyYmd,String batOpeDate,String prcDate
//			, JBSbatServiceInterfaceMap inMap) throws Exception
	private String getCompBaseDate(String kojiakJssiYmd,String rsvAplyYmd,String batOpeDate,String seikyYm
			, JBSbatServiceInterfaceMap inMap) throws Exception
// 20130813 KT1-2013-0000803 料金計算日→請求年月にパラメータ変更 MOD END
	{
		
		String compBaseDate = null;
		int wkKojiAkJissiYmd;
		int wkRsvAplyYmd;
		
		super.logPrint.printDebugLog("********** 比較基準日算出 getCompBaseDate Start **********");

		//工事完了日と予約適用年月日のより過去を判定
		if(kojiakJssiYmd == null)
		{
			// ANK-3734-00-00 DEL START 当処理は日次処理であるため、削除
			//// 20130813 KT1-2013-0000803 工事完了していない場合、請求年月分の予約適用年月日以外は処理対象外にする ADD START
			//if (seikyYm.compareTo(rsvAplyYmd.substring(0, 6)) < 0)
			//{
			//	return null;
			//}
			//// 20130813 KT1-2013-0000803 工事完了していない場合、請求年月分の予約適用年月日以外は処理対象外にする ADD START
			// ANK-3734-00-00 DEL END
			
//↓↓↓2013-07-03変更　巻取BTG1-2013-0000654（解約予定日が料金計算日の前日を越えた契約が異動予約反映で解約されない）↓↓↓
////↓↓↓2013-06-26変更　巻取BIT2-2013-0000562（撤去の異動予約が反映されない）↓↓↓
////			//工事完了日が存在しない場合（工事完了ワークがない）は20991231
////			compBaseDate = "20991231";
//			/** 工事完了日が無い場合は警告を表示して次に進む */
//			String svcKeiNo = inMap.getString(SVC_KEI_NO);							//サービス契約番号の取得
//			String svcKeiKaisenUcwkNo = inMap.getString(SVC_KEI_KAISEN_UCWK_NO);	//サービス契約回線内訳番号の取得
//			final String[] repChr = {"KK1471工事完了ワーク", "OPMS工事案件結果レコード", "/" + svcKeiNo + "/" + svcKeiKaisenUcwkNo + "/"};
////			super.logPrint.printDebugLog(JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.EKKB0630NW, repChr));
//			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0630NW, repChr);
//			commonItem.setErrFlg(true);
//			
//			throw new JBSbatBusinessError();
////↑↑↑2013-06-26変更　巻取BIT2-2013-0000562（撤去の異動予約が反映されない）↑↑↑
			/** 料金計算日の前日に解約異動予約の予約適用日が経過している場合、予約適用日そのままで未反映状態に更新 */
			kojiakJssiYmd = JKKStrConst.END_YMD_DEFAULT;
//↑↑↑2013-07-03変更　巻取BTG1-2013-0000654（解約予定日が料金計算日の前日を越えた契約が異動予約反映で解約されない）↑↑↑
		}
//↓↓↓2013-07-03削除　巻取BTG1-2013-0000654（解約予定日が料金計算日の前日を越えた契約が異動予約反映で解約されない）↓↓↓
//		else
//↑↑↑2013-07-03削除　巻取BTG1-2013-0000654（解約予定日が料金計算日の前日を越えた契約が異動予約反映で解約されない）↑↑↑
		{
			
			//比較用に数値変換
			wkKojiAkJissiYmd = Integer.parseInt(kojiakJssiYmd);
			wkRsvAplyYmd = Integer.parseInt(rsvAplyYmd);
			
			//比較
			if(wkKojiAkJissiYmd > wkRsvAplyYmd)
			{
				//工事案件実施年月日 > 予約適用年月日
				compBaseDate = rsvAplyYmd;
			}
			else if(wkKojiAkJissiYmd < wkRsvAplyYmd)
			{
				//工事案件実施年月日 < 予約適用年月日
				compBaseDate = kojiakJssiYmd;
			}
			else
			{
				//工事案件実施年月日 = 予約適用年月日
				compBaseDate = rsvAplyYmd;
			}

		}
		
		super.logPrint.printDebugLog("********** 比較基準日算出 getCompBaseDate End **********");

		return compBaseDate;
		
	}
	
	/**
	 * SQLKEY(KK_T_IDO_RSV_SELECT_009)でDBアクセスを行います。<br>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String executeKK_T_IDO_RSV_SELECT_009(Object[] param) throws Exception
	{

		super.logPrint.printDebugLog("********** 異動予約レコード（カレント）抽出 executeKK_T_IDO_RSV_SELECT_009 Start **********");

		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		JBSbatCommonDBInterface svInfo = null;
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_IDO_RSV.selectBySqlDefine(paramList, KK_T_IDO_RSV_KK_SELECT_012);
		
		// レコード取得
		svInfo = db_KK_T_IDO_RSV.selectNext();
		
		// 料金計算日の取得
		if(svInfo == null)
		{
			super.logPrint.printDebugLog("********** 異動予約レコード（カレント）抽出 executeKK_T_IDO_RSV_SELECT_009 End **********");
			return null;
		}
		
		super.logPrint.printDebugLog("********** 異動予約レコード（カレント）抽出 executeKK_T_IDO_RSV_SELECT_009 End **********");
		return svInfo.getString(UPD_DTM);
		
	}

// 20130813 KT1-2013-0000803 削除 DEL START
//	/**
//	 * SQLKEY(CH_M_PRC_SCHDL_TEIGI_SELECT_002)でDBアクセスを行います。<br>
//	 * @param param バイント変数の値配列。
//	 * @throws Exception 業務サービス内で発生した例外全般。
//	 */
//	private String executeCH_M_PRC_SCHDL_TEIGI_SELECT_002(Object[] param) throws Exception
//	{
//		
//		super.logPrint.printDebugLog("********** 料金計算日取得 executeCH_M_PRC_SCHDL_TEIGI_SELECT_002 Start **********");
//		
//		// バイント変数のリストを生成します
//		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
//		JBSbatCommonDBInterface svInfo = null;
//		paramList.setValue(param[0].toString());
//
//		// DBアクセスを実行します
//		db_CH_M_PRC_SCDL_TEIGI.selectBySqlDefine(paramList, KK_T_PRG_KK_SELECT_002);
//		
//		// レコード取得
//		svInfo = db_CH_M_PRC_SCDL_TEIGI.selectNext();
//		
//		// 料金計算日の取得
//		if(svInfo == null)
//		{
//			return null;
//		}
//		
//		super.logPrint.printDebugLog("********** 料金計算日取得 executeCH_M_PRC_SCHDL_TEIGI_SELECT_002 End **********");
//
//		return svInfo.getString(EVENT_YMD);
//		
//	}
// 20130813 KT1-2013-0000803 削除 DEL END
// 20130813 KT1-2013-0000803 請求年月取得 ADD START
	/**
	 * SQLKEY(CH_M_PRC_SCHDL_TEIGI_KK_SELECT_017)でDBアクセスを行います。<br>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String executeCH_M_PRC_SCHDL_TEIGI_KK_SELECT_017(Object[] param) throws Exception
	{
		
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		JBSbatCommonDBInterface dbInterface = null;
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_SCDL_TEIGI.selectBySqlDefine(paramList, CH_M_PRC_SCHDL_TEIGI_KK_SELECT_017);
		
		// レコード取得
		dbInterface = db_CH_M_PRC_SCDL_TEIGI.selectNext();
		
		// 請求年月の取得
		if(dbInterface == null)
		{
			return null;
		}
		 
		
		return dbInterface.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.SEIKY_YM);
		
	}
// 20130813 KT1-2013-0000803 請求年月取得 ADD END

	/**
	 * Objectの値がNullの場合は空白文字列を返します。
	 * @param o
	 * @return String
	 */
	private String toString(Object o)
	{
		if(null == o)
		{
			return STRING_BLANK;
		}
		else
		{
			return o.toString();
		}	
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_IDO_RSV.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
