/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKPlaceNoChgRnkiInfCst
*	ソースファイル名	：JBSbatKKPlaceNoChgRnkiInfCst.java
*	作成者				：富士通　
*	作成日				：2012年09月20日
*＜機能概要＞
*　場所番号変更連携情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/09/20   富士通		新規作成
*	v8.00.00	2014/04/28	FJ)星野		OM-2014-0001680対応
*	v8.01.00	2014/04/28	FJ)星野		OM-2014-0001147対応
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM270;
import eo.business.util.table.JBSbatKK_T_ADCHG;
import eo.business.util.table.JBSbatKK_T_ADCHG_DTL;
import eo.business.util.table.JBSbatKK_T_KJ_FIN_WK;
import eo.business.util.table.JBSbatKK_T_KKTK_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_OP_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI_UCWK;
import eo.common.util.JKKStringUtil;
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.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKPlaceNoChgRnkiInfCst extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約回線内訳)*/
	private static final String D_TBL_NAME_KK_T_SVKEI_KAISEN_UW = "KK_T_SVKEI_KAISEN_UW";

// ST2-2013-0001008対応 20130301 OKITA ADD START
	/** テーブル(住所変更明細)*/
	private static final String D_TBL_NAME_KK_T_ADCHG_DTL = "KK_T_ADCHG_DTL";
// ST2-2013-0001008対応 20130301 OKITA ADD END

	/** テーブル(工事完了ワーク)*/
	private static final String D_TBL_NAME_KK_T_KJ_FIN_WK = "KK_T_KJ_FIN_WK";

	/** テーブル(サービス契約＿工事案件)*/
	private static final String D_TBL_NAME_KU_T_SVKEI_KOJIAK = "KU_T_SVKEI_KOJIAK";

	/** テーブル(機器提供サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";

// OM-2013-0000735 2013.09.08 T.TORIKAI ADD START
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";
// OM-2013-0000735 2013.09.08 T.TORIKAI ADD END

	/** SQL定義キー(KK_SELECT_026)*/
	private static final String KK_T_SVKEI_KAISEN_UW_KK_SELECT_026 = "KK_SELECT_026";

	/** SQL定義キー(KK_SELECT_020)*/
	private static final String KK_T_KJ_FIN_WK_KK_SELECT_020 = "KK_SELECT_020";

	/** SQL定義キー(KK_SELECT_007)*/
	private static final String KU_T_SVKEI_KOJIAK_KK_SELECT_007 = "KK_SELECT_007";

	/** SQL定義キー(KK_SELECT_092)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_092 = "KK_SELECT_092";

	/** SQL定義キー(KK_SELECT_093)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_093 = "KK_SELECT_093";

	/** SQL定義キー(KK_SELECT_094)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_094 = "KK_SELECT_094";

	/** SQL定義キー(KK_SELECT_095)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_095 = "KK_SELECT_095";

	/** SQL定義キー(KK_SELECT_096)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_096 = "KK_SELECT_096";

	/** SQL定義キー(KK_SELECT_097)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_097 = "KK_SELECT_097";

// ANK-1429-00-00 2013.03.21 T.TORIKAI ADD START
	/** SQL定義キー(KK_SELECT_138)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_139 = "KK_SELECT_139";
// ANK-1429-00-00 2013.03.21 T.TORIKAI ADD END
// OM-2013-0000735 2013.09.08 T.TORIKAI ADD START
	/** SQL定義キー(KK_SELECT_003)*/
	private static final String KK_T_ADCHG_DTL_KK_SELECT_003 = "KK_SELECT_003";
// OM-2013-0000735 2013.09.08 T.TORIKAI ADD END
// ST2-2013-0001008対応 20130301 OKITA ADD START
	/** SQL定義キー(KK_SELECT_020)*/
	private static final String KK_T_ADCHG_DTL_KK_SELECT_020 = "KK_SELECT_020";
// ST2-2013-0001008対応 20130301 OKITA ADD END
// OM-2013-0000735 2013.09.08 T.TORIKAI ADD START
	/** SQL定義キー(KK_SELECT_023)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_023 = "KK_SELECT_023";
// OM-2013-0000735 2013.09.08 T.TORIKAI ADD END

	/** テーブルアクセスクラス(サービス契約回線内訳)*/
	private JBSbatSQLAccess db_KK_T_SVKEI_KAISEN_UW = null;

// ST2-2013-0001008対応 20130301 OKITA ADD START
	/** テーブルアクセスクラス(住所変更明細)*/
	private JBSbatSQLAccess db_KK_T_ADCHG_DTL = null;
// ST2-2013-0001008対応 20130301 OKITA ADD END

	/** テーブルアクセスクラス(工事完了ワーク)*/
	private JBSbatSQLAccess db_KK_T_KJ_FIN_WK = null;

	/** テーブルアクセスクラス(サービス契約＿工事案件)*/
	private JBSbatSQLAccess db_KU_T_SVKEI_KOJIAK = null;

	/** テーブルアクセスクラス(機器提供サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;

// OM-2013-0000735 2013.09.08 T.TORIKAI ADD START
	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
// OM-2013-0000735 2013.09.08 T.TORIKAI ADD END
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
// ST2-2013-0000980対応 20130225 星野 ADD START
	/** ディレイド（起動） */
	public static final String DELAYED_START = "1";

	/** ディレイド（でない） */
	public static final String DELAYED_NOT_START = "0";
// ST2-2013-0000980対応 20130225 星野 ADD END


// ST2-2013-0001008対応 20130301 OKITA ADD START
	/** 住所変更明細種別コード（工事案件番号） */
	private static final String ADCHG_DTL_SBT_CD_KOJIAK_NO = "06";
	
	/** 工事案件ステータス（中止） */
	public static final String KU_T_KOJIAK_KOJIAK_STAT = "900";
// ST2-2013-0001008対応 20130301 OKITA ADD END

// OM-2013-0000735 2013.09.08 T.TORIKAI ADD START
	/** 住所変更明細種別コード（ サービス契約番号） */
	private static final String ADCHG_DTL_SBT_CD_SVC_KEI_NO = "01";
// OM-2013-0000735 2013.09.08 T.TORIKAI ADD END

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SVKEI_KAISEN_UW = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVKEI_KAISEN_UW);
// ST2-2013-0001008対応 20130301 OKITA ADD START
		db_KK_T_ADCHG_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_ADCHG_DTL);
// ST2-2013-0001008対応 20130301 OKITA ADD END
		db_KK_T_KJ_FIN_WK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KJ_FIN_WK);
		db_KU_T_SVKEI_KOJIAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_SVKEI_KOJIAK);
		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
// OM-2013-0000735 2013.09.08 T.TORIKAI ADD START
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
// OM-2013-0000735 2013.09.08 T.TORIKAI ADD END
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		// +++++ 初期処理 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

		// ----- 出力部品 -----
		JBSbatOutputItem outputItem = new JBSbatOutputItem();

		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		outMap.setOutFlg(true);

		// ----- 入力電文 -----
		// 住所変更番号
		String inAdchgNo = inMap.getString(JBSbatKK_T_ADCHG.ADCHG_NO);
//		// 申込番号
//		String inMskmNo = inMap.getString(JBSbatKK_T_ADCHG.MSKM_NO);
//		// 移転元サービス契約回線内訳番号
//		String inItnmSvkeiKisuwNo = inMap.getString(JBSbatKK_T_ADCHG.ITNM_SVKEI_KISUW_NO);
		// 移転先サービス契約回線内訳番号
		String inItensSvkeiKisuwNo = inMap.getString(JBSbatKK_T_ADCHG.ITENS_SVKEI_KISUW_NO);
		// 変更対象契約番号
		String inChgTgKeiNo = inMap.getString(JBSbatKK_T_ADCHG_DTL.CHG_TG_KEI_NO);
		// 変更前識別番号
		String inChbfSkbtNo = inMap.getString(JBSbatKK_T_ADCHG_DTL.CHBF_SKBT_NO);
		// 変更後識別番号
		String inChafSkbtNo = inMap.getString(JBSbatKK_T_ADCHG_DTL.CHAF_SKBT_NO);
// ST2-2013-0000980対応 20130225 星野 ADD START
		// ディレイド起動フラグ
		String isDelayed = inMap.getString("IS_DELAYED");
		if (isDelayed == null || "".equals(isDelayed.trim())) {
			isDelayed = DELAYED_NOT_START;
		}
// ST2-2013-0000980対応 20130225 星野 ADD END

		// +++++ 主処理 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// OM-2014-0001680対応 20140428 星野 DEL START
//// ST2-2013-0001008 20130301 OKITA START
//		// 処理対象外判定 工事案件ステータス＝900(中止)データの場合、処理対象外
//		executeKK_T_ADCHG_DTL_KK_SELECT_020(new String[]{inAdchgNo, ADCHG_DTL_SBT_CD_KOJIAK_NO, KU_T_KOJIAK_KOJIAK_STAT});
//		JBSbatCommonDBInterface kojiakInf = db_KK_T_ADCHG_DTL.selectNext();
//		if (kojiakInf != null) {
//			// 業務ログをワーニング出力し、処理をスキップする
//// OM-2013-0000735 2013.09.08 T.TORIKAI MOD START
////			super.logPrint.printBusinessErrorLog("EKKB0310JW", new String[]{"新設工事","工事案件ステータス", "ADCHG_NO:[" + inAdchgNo + "], KOJIAK_NO:[" + kojiakInf.getValue("KOJIAK_NO") + "]"});
//			String msg = "新設工事が中止されているため処理対象外となります。";
//			msg += "住所変更番号:" + inAdchgNo;
//			msg += " 工事案件番号:" + kojiakInf.getValue("KOJIAK_NO");
//			msg += getLogMsgKojiStop(inAdchgNo);
//			super.logPrint.printBusinessErrorLog("EKKB0310JW", new String[]{"新設工事","工事案件ステータス", msg});
//// OM-2013-0000735 2013.09.08 T.TORIKAI MOD END
//			return outputItem;
//		}
//// ST2-2013-0001008 20130301 OKITA END
// OM-2014-0001680対応 20140428 星野 DEL END
		// ----- 機器異動チェック -----
		if (isStringEmpty(inChbfSkbtNo) || isStringEmpty(inChafSkbtNo)) {
			return null;
		}

		// ----- 返品チェック -----
		executeKK_T_KKTK_SVC_KEI_KK_SELECT_092(new String[]{inChgTgKeiNo, inChbfSkbtNo, opeDate});
		JBSbatCommonDBInterface hmpinInfo = db_KK_T_KKTK_SVC_KEI.selectNext();

		if (hmpinInfo != null) {
			return null;
		}
// IKK-2013-0000707 20130403 Nao.F START
//		// ----- 配送チェック -----
//		executeKK_T_KKTK_SVC_KEI_KK_SELECT_093(new String[]{inChgTgKeiNo, inChafSkbtNo, opeDate});
//		JBSbatCommonDBInterface haisoInfo = db_KK_T_KKTK_SVC_KEI.selectNext();
//
//		if (haisoInfo != null) {
//			return null;
//		}
// IKK-2013-0000707 20130403 Nao.F END

		// ----- サービス契約取得 -----
		JBSbatCommonDBInterface kktkSvcKeiInfo = null;
		String trgSvcKeiNo = null;

		{
			if (kktkSvcKeiInfo == null) {
				// 親がサービス契約
				executeKK_T_KKTK_SVC_KEI_KK_SELECT_094(new String[]{"20991231", inChgTgKeiNo, inChafSkbtNo, "01", "20991231"});
				kktkSvcKeiInfo = db_KK_T_KKTK_SVC_KEI.selectNext();
				if (kktkSvcKeiInfo != null) {
					trgSvcKeiNo = kktkSvcKeiInfo.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
				}
			}
			if (kktkSvcKeiInfo == null) {
				// 親がサービス契約回線内訳
				executeKK_T_KKTK_SVC_KEI_KK_SELECT_095(new String[]{"20991231", "20991231", "20991231", inChgTgKeiNo, inChafSkbtNo, "02", "20991231"});
				for (JBSbatCommonDBInterface svkeiKaisenUwiInfo = db_KK_T_KKTK_SVC_KEI.selectNext(); svkeiKaisenUwiInfo != null; svkeiKaisenUwiInfo = db_KK_T_KKTK_SVC_KEI.selectNext()) {
					kktkSvcKeiInfo = svkeiKaisenUwiInfo;
					if (kktkSvcKeiInfo != null) {
						trgSvcKeiNo = kktkSvcKeiInfo.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
						break;
					}
				}
			}
			if (kktkSvcKeiInfo == null) {
				// 親がサービス契約内訳
				executeKK_T_KKTK_SVC_KEI_KK_SELECT_096(new String[]{"20991231", inChgTgKeiNo, inChafSkbtNo, "03", "20991231"});
				kktkSvcKeiInfo = db_KK_T_KKTK_SVC_KEI.selectNext();
				if (kktkSvcKeiInfo != null) {
					trgSvcKeiNo = kktkSvcKeiInfo.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_NO);
				}
			}
			if (kktkSvcKeiInfo == null) {
				// 親がオプションサービス契約
				executeKK_T_KKTK_SVC_KEI_KK_SELECT_097(new String[]{"01", "20991231", inChgTgKeiNo, inChafSkbtNo, "04", "20991231"});
				kktkSvcKeiInfo = db_KK_T_KKTK_SVC_KEI.selectNext();
				if (kktkSvcKeiInfo != null) {
					trgSvcKeiNo = kktkSvcKeiInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_NO);
				}
			}
		}

		if (kktkSvcKeiInfo == null) {
			return null;
		}
		if (isStringEmpty(trgSvcKeiNo)) {
			return null;
		}

// ST2-2013-0000980対応 20130225 星野 ADD START
		// ----- ディレイドの起動を確認 -----
		if (DELAYED_START.equals(isDelayed)) {
			// ----- 中間ファイルに出力 -----
			// 宅内機器型式コード
			outMap.setString(JBSbatKKIFM270.TAKNKIKI_MODEL_CD,
					kktkSvcKeiInfo.getString(JBSbatKK_T_KKTK_SVC_KEI.TAKNKIKI_MODEL_CD));
			// 機器製造番号
			outMap.setString(JBSbatKKIFM270.KIKI_SEIZO_NO,
					kktkSvcKeiInfo.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SEIZO_NO));
			// 機器変更理由コード
// OM-2014-0001147対応 20140429 星野 MOD START
//			outMap.setString(JBSbatKKIFM270.KIKI_CHG_RSN_CD, "2");
			outMap.setString(JBSbatKKIFM270.KIKI_CHG_RSN_CD, "1");
// OM-2014-0001147対応 20140429 星野 MOD END
			// 機器設置先場所番号
			outMap.setString(JBSbatKKIFM270.KIKI_STC_SAKI_PLACE_NO,
					kktkSvcKeiInfo.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_STC_SAKI_PLACE_NO));
			// サービス契約番号
			outMap.setString(JBSbatKKIFM270.SVC_KEI_NO,
					kktkSvcKeiInfo.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));

// ANK-1429-00-00 2013.03.21 T.TORIKAI MOD START
			//outputItem.addOutMapList(outMap);
			// 機器提供サービス契約が解約されていない場合のみ抽出する
			if (!isSurrenderService(inChgTgKeiNo)) {
				outputItem.addOutMapList(outMap);
			}
//ANK-1429-00-00 2013.03.21 T.TORIKAI MOD END

			return outputItem;

		}
// ST2-2013-0000980対応 20130225 星野 ADD END
		
		// ----- 入居予定日の到来を確認 -----
		// 入居予定日が到来したサービス契約回線内訳情報
		JBSbatCommonDBInterface nyukyoRsvTriKisnInfo = null;
		{
			// サービス契約回線内訳番号と運用日の前日を基にサービス契約回線内訳を取得
			executeKK_T_SVKEI_KAISEN_UW_KK_SELECT_026(new String[]{inItensSvkeiKisuwNo, JBSbatDateUtil.adjustDate(opeDate, 1)});
			nyukyoRsvTriKisnInfo = db_KK_T_SVKEI_KAISEN_UW.selectNext();
		}

		if (nyukyoRsvTriKisnInfo != null) {

			// ----- 中間ファイルに出力 -----
			{
				// 宅内機器型式コード
				outMap.setString(JBSbatKKIFM270.TAKNKIKI_MODEL_CD,
						kktkSvcKeiInfo.getString(JBSbatKK_T_KKTK_SVC_KEI.TAKNKIKI_MODEL_CD));
				// 機器製造番号
				outMap.setString(JBSbatKKIFM270.KIKI_SEIZO_NO,
						kktkSvcKeiInfo.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SEIZO_NO));
				// 機器変更理由コード
// OM-2014-0001147対応 20140429 星野 MOD START
//				outMap.setString(JBSbatKKIFM270.KIKI_CHG_RSN_CD, "2");
				outMap.setString(JBSbatKKIFM270.KIKI_CHG_RSN_CD, "1");
// OM-2014-0001147対応 20140429 星野 MOD END
				// 機器設置先場所番号
				outMap.setString(JBSbatKKIFM270.KIKI_STC_SAKI_PLACE_NO,
						kktkSvcKeiInfo.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_STC_SAKI_PLACE_NO));
				// サービス契約番号
				outMap.setString(JBSbatKKIFM270.SVC_KEI_NO,
						kktkSvcKeiInfo.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
			}

// ANK-1429-00-00 2013.03.21 T.TORIKAI MOD START
			//outputItem.addOutMapList(outMap);
			// 機器提供サービス契約が解約されていない場合のみ抽出する
			if (!isSurrenderService(inChgTgKeiNo)) {
				outputItem.addOutMapList(outMap);
			}
//ANK-1429-00-00 2013.03.21 T.TORIKAI MOD END

			return outputItem;
		}

		// ----- 新設工事の完了を確認 -----
		{
			// 住所変更番号と運用日を基に新設の工事完了ワークを取得
			executeKK_T_KJ_FIN_WK_KK_SELECT_020(new String[]{inAdchgNo, opeDate});

			JBSbatCommonDBInterface newKjFinRnkiInfo = null;
			for (newKjFinRnkiInfo = db_KK_T_KJ_FIN_WK.selectNext(); newKjFinRnkiInfo != null; newKjFinRnkiInfo = db_KK_T_KJ_FIN_WK.selectNext()) {

				String trgKojiakNo = null;
				trgKojiakNo = newKjFinRnkiInfo.getString(JBSbatKK_T_KJ_FIN_WK.KOJIAK_NO);

				executeKU_T_SVKEI_KOJIAK_KK_SELECT_007(new String[]{trgSvcKeiNo, trgKojiakNo});

				if (db_KU_T_SVKEI_KOJIAK.selectNext() == null) {
					continue;
				}

				// ----- 中間ファイルに出力 -----
				{
					// 宅内機器型式コード
					outMap.setString(JBSbatKKIFM270.TAKNKIKI_MODEL_CD,
							kktkSvcKeiInfo.getString(JBSbatKK_T_KKTK_SVC_KEI.TAKNKIKI_MODEL_CD));
					// 機器製造番号
					outMap.setString(JBSbatKKIFM270.KIKI_SEIZO_NO,
							kktkSvcKeiInfo.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SEIZO_NO));
					// 機器変更理由コード
// OM-2014-0001147対応 20140429 星野 MOD START
//					outMap.setString(JBSbatKKIFM270.KIKI_CHG_RSN_CD, "2");
					outMap.setString(JBSbatKKIFM270.KIKI_CHG_RSN_CD, "1");
// OM-2014-0001147対応 20140429 星野 MOD END
					// 機器設置先場所番号
					outMap.setString(JBSbatKKIFM270.KIKI_STC_SAKI_PLACE_NO,
							kktkSvcKeiInfo.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_STC_SAKI_PLACE_NO));
					// サービス契約番号
					outMap.setString(JBSbatKKIFM270.SVC_KEI_NO,
							kktkSvcKeiInfo.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
				}

// ANK-1429-00-00 2013.03.21 T.TORIKAI MOD START
				//outputItem.addOutMapList(outMap);
				// 機器提供サービス契約が解約されていない場合のみ抽出する
				if (!isSurrenderService(inChgTgKeiNo)) {
					outputItem.addOutMapList(outMap);
				}
//ANK-1429-00-00 2013.03.21 T.TORIKAI MOD END

				return outputItem;
			}
		}

		// どれにも該当しない場合は何もしない
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVKEI_KAISEN_UW.close();
// ST2-2013-0001008対応 20130301 OKITA ADD START
		db_KK_T_ADCHG_DTL.close();
// ST2-2013-0001008対応 20130301 OKITA ADD END
		db_KK_T_KJ_FIN_WK.close();
		db_KU_T_SVKEI_KOJIAK.close();
		db_KK_T_KKTK_SVC_KEI.close();
// OM-2013-0000735 2013.09.08 T.TORIKAI ADD START
		db_KK_T_SVC_KEI.close();
// OM-2013-0000735 2013.09.08 T.TORIKAI ADD END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_026)で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_SVKEI_KAISEN_UW_KK_SELECT_026(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVKEI_KAISEN_UW.selectBySqlDefine(paramList, KK_T_SVKEI_KAISEN_UW_KK_SELECT_026);
	}

	/**
	 * SQLKEY(KK_SELECT_020)で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_KJ_FIN_WK_KK_SELECT_020(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_KJ_FIN_WK.selectBySqlDefine(paramList, KK_T_KJ_FIN_WK_KK_SELECT_020);
	}

	/**
	 * SQLKEY(KK_SELECT_007)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	工事案件番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKU_T_SVKEI_KOJIAK_KK_SELECT_007(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KU_T_SVKEI_KOJIAK.selectBySqlDefine(paramList, KU_T_SVKEI_KOJIAK_KK_SELECT_007);
	}

	/**
	 * SQLKEY(KK_SELECT_092)で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_KKTK_SVC_KEI_KK_SELECT_092(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_092);
	}

	/**
	 * SQLKEY(KK_SELECT_093)で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_KKTK_SVC_KEI_KK_SELECT_093(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_093);
	}

	/**
	 * SQLKEY(KK_SELECT_094)で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_KKTK_SVC_KEI_KK_SELECT_094(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_094);
	}

	/**
	 * SQLKEY(KK_SELECT_095)で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_KKTK_SVC_KEI_KK_SELECT_095(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_095);
	}

	/**
	 * SQLKEY(KK_SELECT_096)で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_KKTK_SVC_KEI_KK_SELECT_096(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_096);
	}

	/**
	 * SQLKEY(KK_SELECT_097)で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_KKTK_SVC_KEI_KK_SELECT_097(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_097);
	}

	/**
	 * SQLKEY(KK_SELECT_020)で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_ADCHG_DTL_KK_SELECT_020(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_ADCHG_DTL.selectBySqlDefine(paramList, KK_T_ADCHG_DTL_KK_SELECT_020);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	private boolean isStringEmpty(String value){

		if (value == null || "".equals(value.trim())) {
			return true;
		}

		return false;
	}

// ANK-1429-00-00 2013.03.21 T.TORIKAI ADD（メソッド追加） START
	/**
	 * 指定された機器提供サービスが解約されているか判定する<br>
	 * 但し、異動区分が住所変更の場合は解約済みであっても解約とはしない
	 * @param kktkSvcNo 機器提供サービス契約番号
	 * @return true:解約済み false:解約済み以外
	 * @throws Exception 
	 */
	private boolean isSurrenderService(String kktkSvcNo) throws Exception {
		
		// 機器提供サービス契約番号が無い場合は「解約されていない」と判定
		if (JKKStringUtil.isNullBlank(kktkSvcNo)) {
			return false;
		}
		
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(kktkSvcNo);
		paramList.setValue(opeDate);
		
		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_139);
		if (db_KK_T_KKTK_SVC_KEI.selectNext() == null) {
			return false;		// 解約済みではない
		}
		
		return true;	// 解約済み
	}
// ANK-1429-00-00 2013.03.21 T.TORIKAI ADD（メソッド追加） END

// OM-2013-0000735 2013.09.08 T.TORIKAI メソッド追加
	/**
	 * ログ出力用のメッセージ（SYSID、サービス契約番号）を取得する
	 */
	private String getLogMsgKojiStop(String adchgNo) throws Exception {
		
		String msgSvcKei = "";
		String sysId = "";
		
		// 住所変更明細取得（サービス契約）
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(adchgNo);
		paramList.setValue(ADCHG_DTL_SBT_CD_SVC_KEI_NO);
		db_KK_T_ADCHG_DTL.selectBySqlDefine(paramList, KK_T_ADCHG_DTL_KK_SELECT_003);
		while (true) {
			JBSbatCommonDBInterface adchgDtl = db_KK_T_ADCHG_DTL.selectNext();
			if (adchgDtl == null) {
				break;
			}
			String motoSvcKeiNo = adchgDtl.getString(JBSbatKK_T_ADCHG_DTL.CHBF_SKBT_NO);
			String sakiSvcKeiNo = adchgDtl.getString(JBSbatKK_T_ADCHG_DTL.CHAF_SKBT_NO);
			String svcKeiNo = null;
			if (motoSvcKeiNo == null && sakiSvcKeiNo == null) {
				continue;
			}
			if (motoSvcKeiNo == null || sakiSvcKeiNo == null) {
				if (motoSvcKeiNo == null) {
					// 追加
					svcKeiNo = sakiSvcKeiNo;
				} else {
					// 解約、保留
					svcKeiNo = motoSvcKeiNo;
				}
				msgSvcKei += " サービス契約番号:" + svcKeiNo;
			} else {
				// 引越
				if (motoSvcKeiNo.equals(sakiSvcKeiNo)) {
					msgSvcKei += " サービス契約番号:" + motoSvcKeiNo;
				} else {
					// 引越：解約＋新規
					msgSvcKei += " サービス契約番号(転居元・先):" + motoSvcKeiNo + " / " + sakiSvcKeiNo;
				}
				svcKeiNo = motoSvcKeiNo;
			}
			// SYSID未取得の場合のみサービス契約より取得する
			if ("".equals(sysId)) {
				sysId = getSysId(svcKeiNo);
			}
		}
		return " SYSID:" + sysId + msgSvcKei;
	}
	
// OM-2013-0000735 2013.09.08 T.TORIKAI メソッド追加
	/**
	 * サービス契約よりSYSIDを取得する
	 */
	private String getSysId(String svcKeiNo) throws Exception {

		// 条件設定
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(svcKeiNo);
		paramList.setValue(opeDate);

		// 検索
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_023);
		JBSbatCommonDBInterface svcKei = db_KK_T_SVC_KEI.selectNext();
		if (svcKei != null) {
			return svcKei.getString(JBSbatKK_T_SVC_KEI.SYSID);
		}

		return "";
	}
}
