/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKRsvTokiHakTgCst
*	ソースファイル名	：JBSbatKKRsvTokiHakTgCst.java
*	作成者				：富士通　
*	作成日				：2011年09月12日
*＜機能概要＞
*　予定トーキ発行対象抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/09/12   富士通		新規作成
*	v4.00.00	2012/09/20   富士通		案件ａFST2-2012-0001008 スキーマ変更対応
*	v5.00.00	2013/04/21   FJ)藤本	ANK-1429-00-00：住所変更に伴うVA移動機器登録の解除対応（全面改訂に伴い再作成）
*	v19.00.00	2015/09/09   FJ)藤本	【OM-2015-0002055】リソース削減の個別対応（追加対応）
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatInterface;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM112;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI_UCWK;
import eo.business.util.table.JBSbatKK_T_SVKEIUW_EOH_TEL;
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;

/**
* サービス契約内訳＜ｅｏ光電話＞より、予定トーキ対象を抽出する。 <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKRsvTokiHakTgCst extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約内訳)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI_UCWK = "KK_T_SVC_KEI_UCWK";

	// 20150909 OM-2015-0002055 リソース削減の個別対応（追加対応） ADD START
	/** SQL定義キー(KK_SELECT_014)*/
	private static final String KK_T_SVC_KEI_UCWK_KK_SELECT_014 = "KK_SELECT_014";
	// 20150909 OM-2015-0002055 リソース削減の個別対応（追加対応） ADD END
	
	/** テーブルアクセスクラス(サービス契約内訳)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI_UCWK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	// KT1-2013-0000585 予定トーキの処理タイミングがICSと異なっている 2013/05/22 START
	/** 処理運用日 */
	private String trnOpeDate;
	// KT1-2013-0000585 予定トーキの処理タイミングがICSと異なっている 2013/05/22 END

	/** 改行コード(ログ用) */
	private static final String LF = JKKBatConst.S_LINE_SEPARAOR_LF;

	/** 世代登録年月日時分秒（サービス契約） */
	private static final String SK_GENE_ADD_DTM = "SK_GENE_ADD_DTM";

	/** 世代登録年月日時分秒（サービス契約内訳） */
	private static final String SKU_GENE_ADD_DTM = "SKU_GENE_ADD_DTM";

	/** 世代登録年月日時分秒（サービス契約内訳＜ｅｏ光電話＞） */
	private static final String SKUT_GENE_ADD_DTM = "SKUT_GENE_ADD_DTM";

	/** サービス契約内訳ステータス(移転先開通後トーキ転送先サービス契約内訳番号) */
	private static final String SAKI_SVC_KEI_UCWK_STAT = "SAKI_SVC_KEI_UCWK_STAT";

	/** SOD発行種別コード SOD発行無し */
	private static final String SOD_HAK_SBT_CD_NONE = "0";

	/** SOD発行種別コード 開始SOD発行 */
	private static final String SOD_HAK_SBT_CD_STA = "1";

	/** SOD発行種別コード 終了SOD発行 */
	private static final String SOD_HAK_SBT_CD_END = "2";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI_UCWK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		// KT1-2013-0000585 予定トーキの処理タイミングがICSと異なっている 2013/05/22 START
		// オンライン運用日で処理する
		trnOpeDate = super.onlineOpeDate;
		// KT1-2013-0000585 予定トーキの処理タイミングがICSと異なっている 2013/05/22 END
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap 入力電文
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 20150909 OM-2015-0002055 リソース削減の個別対応（追加対応） ADD START
		// 移転先開通後トーキの転送先サービス契約内訳情報を入力情報に設定する
		setItnsSvcKeiUcwk(inMap);
		// 20150909 OM-2015-0002055 リソース削減の個別対応（追加対応） ADD END

		commonItem.getLogPrint().printDebugLog(toString(inMap));

		// 出力共通電文を生成
		JBSbatOutputItem outputBean = new JBSbatOutputItem();

		// 移転元解約によるトーキを取消または終了したかどうか
		boolean isEndItenmDslToki = false;

		// トーキ開始対象のファイル出力
		isEndItenmDslToki = outputTokiStart(inMap, outputBean);

		// トーキ終了対象のファイル出力
		outputTokiEnd(inMap, outputBean, isEndItenmDslToki);

		// 出力共通電文を返却
		return outputBean;

	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * トーキ開始対象のデータを予定トーキ発行用中間ファイルに出力します。<br>
	 * 
	 * @param inMap 入力電文
	 * @param outputBean 出力電文
	 * @return 移転元解約によるトーキを取消または終了した場合はtrue、していない場合はfalse
	 * @throws Exception 例外が発生した場合
	 */
	private boolean outputTokiStart(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputBean)
	throws Exception
	{
		// 入力電文より必要項目を取得
		String dslPauseTokiAddCd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_ADD_CD));
		String dslPauseTokiStaYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_STA_YMD));
		String dslPauseTokiEndRsymd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_END_RSYMD));
		String dslPauseTokiEndYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_END_YMD));
		String itensOpafTokiAddCd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_ADD_CD));
		String itensOpafTokiStaYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_STA_YMD));
		String itensOpafTokiEndRsymd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_END_RSYMD));
		String itensOpafTokiEndYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_END_YMD));
		String svcKeiUcwkStat = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT));
		String pauseStpCd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PAUSE_STP_CD));
		String svcDlreCd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_DLRE_CD));
		String sakiSvcKeiUcwkStat = JBSbatInterface.trim(inMap.getString(SAKI_SVC_KEI_UCWK_STAT));

		// 移転元解約によるトーキを取消または終了したかどうか
		boolean isEndItenmDslToki = false;

		// (a) 移転先登録によるトーキ
		// ・移転先開通後トーキ登録コードが『移転先登録によるトーキ』
		// ・サービス契約内訳ステータスが『解約済』、かつサービス解約理由コードが『強制解約』以外、もしくは、サービス契約内訳ステータスが『キャンセル済』
		// ・移転先開通後トーキ開始年月日が未設定
		// ・移転先開通後トーキ終了年月日が未設定
		// ・移転先開通後トーキ転送先サービス契約内訳番号に紐付くサービス契約内訳のサービス契約内訳ステータスが『サービス提供中』
		if (JKKBatConst.ITNTOKI_ADD_CD_ITENS.equals(itensOpafTokiAddCd)
			&& ((JKKBatConst.SVC_KEI_STAT_DSL_ZM.equals(svcKeiUcwkStat) && !JKKBatConst.SVC_DLRE_CD_KSI_SLRE.equals(svcDlreCd))
				|| JKKBatConst.SVC_KEI_STAT_CNCL_ZM.equals(svcKeiUcwkStat))
			&& isNullDate(itensOpafTokiStaYmd)
			&& isNullDate(itensOpafTokiEndYmd)
			&& JKKBatConst.SVC_KEI_STAT_SVCTKCHU.equals(sakiSvcKeiUcwkStat))
		{
			// (a-1) トーキ予定終了日の経過チェック（トーキ取消対象の抽出）
			String sodHkSbtCd = getSodHkSbtCd(itensOpafTokiEndRsymd);
			// トーキ取消対象でない場合
			if (!SOD_HAK_SBT_CD_NONE.equals(sodHkSbtCd))
			{
				// (a-2) 移転元解約トーキの存在チェック（移転元解約トーキ連動対象の抽出）
				// (a-2-1) 移転元解約によるトーキが開始前、または(a-2-2) 移転元解約によるトーキ中
				// ・解約・休止トーキ登録コードが『移転元解約によるトーキ』
				// ・解約・休止トーキ開始年月日が未設定、または設定済
				// ・解約・休止トーキ終了年月日が未設定
				JBSbatServiceInterfaceMap outmapItenmEnd = null;
				if (JKKBatConst.ITNTOKI_ADD_CD_ITENM.equals(dslPauseTokiAddCd)
					&& isNullDate(dslPauseTokiEndYmd))
				{
					// 解約・休止トーキ開始年月日が未設定
					if (isNullDate(dslPauseTokiStaYmd))
					{
						// SOD発行種別コードは『SOD発行無し』
						outmapItenmEnd = createRsvTokiHakFile(inMap, SOD_HAK_SBT_CD_NONE, JKKBatConst.ITNTOKI_ADD_CD_ITENM);
					}
					else
					{
						// SOD発行種別コードは『終了SOD発行』
						outmapItenmEnd = createRsvTokiHakFile(inMap, SOD_HAK_SBT_CD_END, JKKBatConst.ITNTOKI_ADD_CD_ITENM);
					}

					// 移転元解約によるトーキを取消または終了した
					isEndItenmDslToki = true;
				}

				if (null != outmapItenmEnd)
				{
					// 移転元解約によるトーキの取消または終了を予定トーキ発行用中間ファイルに出力
					// ※開始より先に出力されるようにする
					outputBean.addOutMapList(outmapItenmEnd);
				}
			}

			// 移転先登録によるトーキの開始を予定トーキ発行用中間ファイルに出力
			// KT1-2013-0000587 トーキ終了予定日を過ぎていてもトーキの開始SODが発行される 2013/05/20 START
//			JBSbatServiceInterfaceMap outmap = createRsvTokiHakFile(inMap, SOD_HAK_SBT_CD_STA, JKKBatConst.ITNTOKI_ADD_CD_ITENS);
			JBSbatServiceInterfaceMap outmap = createRsvTokiHakFile(inMap, sodHkSbtCd, JKKBatConst.ITNTOKI_ADD_CD_ITENS);
			// KT1-2013-0000587 トーキ終了予定日を過ぎていてもトーキの開始SODが発行される 2013/05/20 END
			outputBean.addOutMapList(outmap);
		}

		// 移転元解約によるトーキを取消または終了させていない場合
		if (!isEndItenmDslToki)
		{
			// (b) 移転元解約によるトーキ
			// ・解約・休止トーキ登録コードが『移転元解約によるトーキ』
			// ・サービス契約内訳ステータスが『解約済』、かつサービス解約理由コードが『強制解約』以外、もしくは、サービス契約内訳ステータスが『キャンセル済』
			// ・解約・休止トーキ開始年月日が未設定
			// ・解約・休止トーキ終了年月日が未設定
			if (JKKBatConst.ITNTOKI_ADD_CD_ITENM.equals(dslPauseTokiAddCd)
				&& ((JKKBatConst.SVC_KEI_STAT_DSL_ZM.equals(svcKeiUcwkStat) && !JKKBatConst.SVC_DLRE_CD_KSI_SLRE.equals(svcDlreCd))
					|| JKKBatConst.SVC_KEI_STAT_CNCL_ZM.equals(svcKeiUcwkStat))
				&& isNullDate(dslPauseTokiStaYmd)
				&& isNullDate(dslPauseTokiEndYmd))
			{
				// 予定トーキ発行用中間ファイルに出力
				// KT1-2013-0000587 トーキ終了予定日を過ぎていてもトーキの開始SODが発行される 2013/05/20 START
//				JBSbatServiceInterfaceMap outmap = createRsvTokiHakFile(inMap, SOD_HAK_SBT_CD_STA, JKKBatConst.ITNTOKI_ADD_CD_ITENM);
				JBSbatServiceInterfaceMap outmap = createRsvTokiHakFile(inMap, getSodHkSbtCd(dslPauseTokiEndRsymd), JKKBatConst.ITNTOKI_ADD_CD_ITENM);
				// KT1-2013-0000587 トーキ終了予定日を過ぎていてもトーキの開始SODが発行される 2013/05/20 END
				outputBean.addOutMapList(outmap);
			}

			// (c) 休止によるトーキ
			// ・解約・休止トーキ登録コードが『休止によるトーキ』
			// ・サービス契約内訳ステータスが『休止・中断中』、かつ休止中断コードが『休止中(SOD発行済)』
			// ・解約・休止トーキ開始年月日が未設定
			// ・解約・休止トーキ終了年月日が未設定
			if (JKKBatConst.ITNTOKI_ADD_CD_PAUSE.equals(dslPauseTokiAddCd)
				&& (JKKBatConst.SVC_KEI_STAT_PAUSE_STP.equals(svcKeiUcwkStat) && JKKBatConst.PAUSE_STP_CD_PAUSECHU_SODHAKZM.equals(pauseStpCd))
				&& isNullDate(dslPauseTokiStaYmd)
				&& isNullDate(dslPauseTokiEndYmd))
			{
				// 予定トーキ発行用中間ファイルに出力
				// KT1-2013-0000587 トーキ終了予定日を過ぎていてもトーキの開始SODが発行される 2013/05/20 START
//				JBSbatServiceInterfaceMap outmap = createRsvTokiHakFile(inMap, SOD_HAK_SBT_CD_STA, JKKBatConst.ITNTOKI_ADD_CD_PAUSE);
				JBSbatServiceInterfaceMap outmap = createRsvTokiHakFile(inMap, getSodHkSbtCd(dslPauseTokiEndRsymd), JKKBatConst.ITNTOKI_ADD_CD_PAUSE);
				// KT1-2013-0000587 トーキ終了予定日を過ぎていてもトーキの開始SODが発行される 2013/05/20 END
				outputBean.addOutMapList(outmap);
			}
		}

		return isEndItenmDslToki;
	}

	/**
	 * トーキ終了対象のデータを予定トーキ発行用中間ファイルに出力します。<br>
	 * 
	 * @param inMap 入力電文
	 * @param outputBean 出力電文
	 * @param isEndItenmDslToki 移転元解約によるトーキを取消または終了したかどうか
	 * @throws Exception 例外が発生した場合
	 */
	private void outputTokiEnd(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputBean, boolean isEndItenmDslToki)
	throws Exception
	{
		// 入力電文より必要項目を取得
		String dslPauseTokiAddCd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_ADD_CD));
		String dslPauseTokiStaYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_STA_YMD));
		String dslPauseTokiEndRsymd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_END_RSYMD));
		String dslPauseTokiEndYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_END_YMD));
		String itensOpafTokiAddCd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_ADD_CD));
		String itensOpafTokiStaYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_STA_YMD));
		String itensOpafTokiEndRsymd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_END_RSYMD));
		String itensOpafTokiEndYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_END_YMD));
		String svcKeiUcwkStat = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT));
		String sakiSvcKeiUcwkStat = JBSbatInterface.trim(inMap.getString(SAKI_SVC_KEI_UCWK_STAT));

		// (a) 移転先登録によるトーキ
		// ・移転先開通後トーキ登録コードが『移転先登録によるトーキ』
		// ・移転先開通後トーキ開始年月日が設定済
		// ・移転先開通後トーキ終了年月日が未設定
		if (JKKBatConst.ITNTOKI_ADD_CD_ITENS.equals(itensOpafTokiAddCd)
			&& !isNullDate(itensOpafTokiStaYmd)
			&& isNullDate(itensOpafTokiEndYmd))
		{
			// (a-1) トーキ終了予定年月日を経過
			// ・移転先開通後トーキ終了予定年月日が運用年月日より過去日（運用年月日当日を含む）
			// (a-2) トーキ終了予定年月日以前に移転先サービスが利用停止か終了
			// ・移転先開通後トーキ転送先サービス契約内訳番号に紐付くサービス契約内訳のサービス契約内訳ステータスが、『解約済』か『キャンセル済』
			if (!isNullDate(itensOpafTokiEndRsymd) && JKKBatCommon.isPastDate(itensOpafTokiEndRsymd, trnOpeDate, "1")
				|| (JKKBatConst.SVC_KEI_STAT_DSL_ZM.equals(sakiSvcKeiUcwkStat) || JKKBatConst.SVC_KEI_STAT_CNCL_ZM.equals(sakiSvcKeiUcwkStat)))
			{
				// 予定トーキ発行用中間ファイルに出力
				JBSbatServiceInterfaceMap outmap = createRsvTokiHakFile(inMap, SOD_HAK_SBT_CD_END, JKKBatConst.ITNTOKI_ADD_CD_ITENS);
				outputBean.addOutMapList(outmap);
			}
		}

		// 移転元解約によるトーキを取消または終了させていない場合
		if (!isEndItenmDslToki)
		{
			// (b) 移転元解約によるトーキ
			// ・解約・休止トーキ登録コードが『移転元解約によるトーキ』
			// ・解約・休止トーキ開始年月日が設定済
			// ・解約・休止トーキ終了年月日が未設定
			// ・解約・休止トーキ終了予定年月日が運用年月日より過去日（運用年月日当日を含む）
			if (JKKBatConst.ITNTOKI_ADD_CD_ITENM.equals(dslPauseTokiAddCd)
				&& !isNullDate(dslPauseTokiStaYmd)
				&& isNullDate(dslPauseTokiEndYmd)
				&& !isNullDate(dslPauseTokiEndRsymd) && JKKBatCommon.isPastDate(dslPauseTokiEndRsymd, trnOpeDate, "1"))
			{
				// 予定トーキ発行用中間ファイルに出力
				JBSbatServiceInterfaceMap outmap = createRsvTokiHakFile(inMap, SOD_HAK_SBT_CD_END, JKKBatConst.ITNTOKI_ADD_CD_ITENM);
				outputBean.addOutMapList(outmap);
			}

			// (c) 休止によるトーキ
			// ・解約・休止トーキ登録コードが『休止によるトーキ』
			// ・解約・休止トーキ開始年月日が設定済
			// ・解約・休止トーキ終了年月日が未設定
			if (JKKBatConst.ITNTOKI_ADD_CD_PAUSE.equals(dslPauseTokiAddCd)
				&& !isNullDate(dslPauseTokiStaYmd)
				&& isNullDate(dslPauseTokiEndYmd))
			{
				// (c-1) トーキ終了予定年月日を経過
				// ・解約・休止トーキ終了予定年月日が運用年月日より過去日（運用年月日当日を含む）
				// (c-2) トーキ終了予定年月日以前にサービスが利用停止か終了、もしくは休止が終了
				// ・サービス契約内訳ステータスが『サービス提供中』か『停止中』か『キャンセル済』か『解約済』
				if (!isNullDate(dslPauseTokiEndRsymd) && JKKBatCommon.isPastDate(dslPauseTokiEndRsymd, trnOpeDate, "1")
					|| (JKKBatConst.SVC_KEI_STAT_SVCTKCHU.equals(svcKeiUcwkStat) || JKKBatConst.SVC_KEI_STAT_STP.equals(svcKeiUcwkStat)
						|| JKKBatConst.SVC_KEI_STAT_CNCL_ZM.equals(svcKeiUcwkStat) || JKKBatConst.SVC_KEI_STAT_DSL_ZM.equals(svcKeiUcwkStat)))
				{
					// 予定トーキ発行用中間ファイルに出力
					JBSbatServiceInterfaceMap outmap = createRsvTokiHakFile(inMap, SOD_HAK_SBT_CD_END, JKKBatConst.ITNTOKI_ADD_CD_PAUSE);
					outputBean.addOutMapList(outmap);
				}
			}
		}
	}

	/**
	 * 予定トーキ発行用中間ファイルへの出力データを作成します。<br>
	 * 
	 * @param inMap 入力電文
	 * @param sodHakSbtCd SOD発行種別コード
	 * @param itntokiAddCd 移転トーキ登録コード
	 * @return 出力データ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap createRsvTokiHakFile(JBSbatServiceInterfaceMap inMap, String sodHakSbtCd, String itntokiAddCd)
	throws Exception
	{
		// 入力電文より必要項目を取得
		String svcKeiNo = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
		String skGeneAddDtm = JBSbatInterface.trim(inMap.getString(SK_GENE_ADD_DTM));
		String svcKeiUcwkNo = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.SVC_KEI_UCWK_NO));
		String skuGeneAddDtm = JBSbatInterface.trim(inMap.getString(SKU_GENE_ADD_DTM));
		String sketGeneAddDtm = JBSbatInterface.trim(inMap.getString(SKUT_GENE_ADD_DTM));
		String itntokiStaYmd = "";
		String itntokiEndYmd = "";
		// 移転トーキ登録コードが「移転先登録によるトーキ」の場合
		if (JKKBatConst.ITNTOKI_ADD_CD_ITENS.equals(itntokiAddCd))
		{
			itntokiStaYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_STA_YMD));
			itntokiEndYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_END_YMD));
		}
		// 移転トーキ登録コードが「移転元解約によるトーキ」または「休止によるトーキ」の場合
		else
		{
			itntokiStaYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_STA_YMD));
			itntokiEndYmd = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_END_YMD));
		}

		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();

		// 項目を設定
		outmap.setString(JBSbatKKIFM112.SVC_KEI_NO, svcKeiNo);
		outmap.setString(JBSbatKKIFM112.SK_GENE_ADD_DTM, skGeneAddDtm);
		outmap.setString(JBSbatKKIFM112.SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		outmap.setString(JBSbatKKIFM112.SKU_GENE_ADD_DTM, skuGeneAddDtm);
		outmap.setString(JBSbatKKIFM112.SKET_GENE_ADD_DTM, sketGeneAddDtm);
		outmap.setString(JBSbatKKIFM112.ITNTOKI_STA_YMD, itntokiStaYmd);
		outmap.setString(JBSbatKKIFM112.ITNTOKI_END_YMD, itntokiEndYmd);
		outmap.setString(JBSbatKKIFM112.SOD_HAK_SBT_CD, sodHakSbtCd);
		outmap.setString(JBSbatKKIFM112.ITNTOKI_ADD_CD, itntokiAddCd);

		// レコード出力判定フラグを設定
		outmap.setOutFlg(true);

		// 入出力インターフェースを返却
		return outmap;
	}

	// KT1-2013-0000587 トーキ終了予定日を過ぎていてもトーキの開始SODが発行される 2013/05/20 START
	/**
	 * 予定トーキ発行用中間ファイルに出力するSOD発行種別を判定して返します。<br>
	 * 
	 * @param tokiEndRsymd 移転先開通後トーキ終了予定年月日、または解約・休止トーキ終了予定年月日
	 * @return SOD発行種別コード 
	 */
	private String getSodHkSbtCd(String tokiEndRsymd)
	{
		String sodHkSbtCd;

		// 移転先開通後トーキ終了予定年月日、または解約・休止トーキ終了予定年月日が運用年月日以前の場合
		if (!isNullDate(tokiEndRsymd) && JKKBatCommon.isPastDate(tokiEndRsymd, trnOpeDate, "1"))
		{
			// SOD発行種別コードは『SOD発行無し』（取消）
			sodHkSbtCd = SOD_HAK_SBT_CD_NONE;
		}
		else
		{
			// SOD発行種別コードは『開始SOD発行』
			sodHkSbtCd = SOD_HAK_SBT_CD_STA;
		}

		return sodHkSbtCd;
	}
	// KT1-2013-0000587 トーキ終了予定日を過ぎていてもトーキの開始SODが発行される 2013/05/20 END

	// 20150909 OM-2015-0002055 リソース削減の個別対応（追加対応） ADD START
	/**
	 * 移転先開通後トーキの転送先サービス契約内訳情報を入力情報に設定します。<br>
	 * 
	 * @param inMap 入力情報
	 * @throws Exception 例外が発生した場合
	 */
	private void setItnsSvcKeiUcwk(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// サービス契約内訳ステータス(移転先開通後トーキ転送先サービス契約内訳番号)
		String sakiSvcKeiUcwkStat = "";

		// 移転先開通後トーキ転送先サービス契約内訳番号
		String itnsOpafTokiTssSvkuwno = JBSbatInterface.trim(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITNS_OPAF_TOKI_TSS_SVKUWNO));

		if (null != itnsOpafTokiTssSvkuwno && !itnsOpafTokiTssSvkuwno.isEmpty())
		{
			// サービス契約内訳を取得
			executeKK_T_SVC_KEI_UCWK_KK_SELECT_014(new String[]{
					itnsOpafTokiTssSvkuwno,
					trnOpeDate
				});
			JBSbatCommonDBInterface svcKeiUcwk = db_KK_T_SVC_KEI_UCWK.selectNext();

			if (null != svcKeiUcwk)
			{
				// サービス契約内訳ステータスを取得
				sakiSvcKeiUcwkStat = JBSbatInterface.trim(svcKeiUcwk.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT));
			}
		}

		// 入力情報のサービス契約内訳ステータス(移転先開通後トーキ転送先サービス契約内訳番号)を設定
		inMap.setString(SAKI_SVC_KEI_UCWK_STAT, sakiSvcKeiUcwkStat);
	}

	/**
	 * SQLKEY(KK_SELECT_014)で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_SVC_KEI_UCWK_KK_SELECT_014(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI_UCWK.selectBySqlDefine(paramList, KK_T_SVC_KEI_UCWK_KK_SELECT_014);
	}
	// 20150909 OM-2015-0002055 リソース削減の個別対応（追加対応） ADD END

	/**
	 * 日付項目に有効な値が設定されているか判定します。<br>
	 * 
	 * @param arg0 判定するオブジェクト
	 * @return 日付に値が設定されていない、または最大値の場合はtrue
	 */
	private boolean isNullDate(Object arg0) 
	{
		if (null == arg0)
		{
			return true;
		}

		return (0 == arg0.toString().length() || arg0.equals(JKKBatConst.S_MAX_DATE));
	}

	/**
	 * 入力電文の全項目の値を文字列で返します。<br>
	 * 
	 * @param inMap 入力電文
	 * @return 入力電文の全項目の値
	 * @throws Exception 例外が発生した場合
	 */
	private String toString(JBSbatServiceInterfaceMap inMap)
	throws Exception
	{
		StringBuffer sb = new StringBuffer();
		sb.append(commonItem.getInputCount()).append("レコード目").append(LF);
		sb.append("サービス契約番号:").append(inMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO)).append(LF);
		sb.append("世代登録年月日時分秒（サービス契約）:").append(inMap.getString(SK_GENE_ADD_DTM)).append(LF);
		sb.append("サービス契約内訳番号:").append(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.SVC_KEI_UCWK_NO)).append(LF);
		sb.append("世代登録年月日時分秒（サービス契約内訳）:").append(inMap.getString(SKU_GENE_ADD_DTM)).append(LF);
		sb.append("世代登録年月日時分秒（サービス契約内訳＜EO光電話＞）:").append(inMap.getString(SKUT_GENE_ADD_DTM)).append(LF);
		sb.append("解約・休止トーキ登録コード:").append(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_ADD_CD)).append(LF);
		sb.append("解約・休止トーキ開始年月日:").append(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_STA_YMD)).append(LF);
		sb.append("解約・休止トーキ終了予定年月日:").append(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_END_RSYMD)).append(LF);
		sb.append("解約・休止トーキ終了年月日:").append(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.DSL_PAUSE_TOKI_END_YMD)).append(LF);
		sb.append("移転先開通後トーキ登録コード:").append(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_ADD_CD)).append(LF);
		sb.append("移転先開通後トーキ開始年月日:").append(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_STA_YMD)).append(LF);
		sb.append("移転先開通後トーキ終了予定年月日:").append(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_END_RSYMD)).append(LF);
		sb.append("移転先開通後トーキ終了年月日:").append(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITENS_OPAF_TOKI_END_YMD)).append(LF);
		sb.append("サービス契約内訳ステータス:").append(inMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT)).append(LF);
		sb.append("休止中断コード:").append(inMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PAUSE_STP_CD)).append(LF);
		sb.append("サービス解約理由コード（サービス契約内訳）:").append(inMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_DLRE_CD)).append(LF);
		sb.append("移転先開通後トーキ転送先サービス契約内訳番号:").append(inMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.ITNS_OPAF_TOKI_TSS_SVKUWNO)).append(LF);
		sb.append("サービス契約内訳ステータス(移転先開通後トーキ転送先サービス契約内訳番号):").append(inMap.getString(SAKI_SVC_KEI_UCWK_STAT));

		return sb.toString();
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI_UCWK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
}
