/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKAdChgSmtvlRnki
*	ソースファイル名	：JBSbatKKAdChgSmtvlRnki.java
*	作成者				：富士通　
*	作成日				：2012年09月26日
*＜機能概要＞
*　住所変更スマートバリュー連携部品です。
*＜修正履歴＞
*	バージョン	修正日		 修正者		修正内容
*	v1.00.00	2012/09/26   富士通		新規作成
*	v8.00.00	2014/06/11   FJ)星野	OM-2014-0002047対応
*	v9.00.00	2014/07/18   FJ)藤本	【ANK-2186-00-00】スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う
*	v9.01.00	2014/08/02   FJ)星野	OM-2014-0002549対応
*	v10.00.00	2014/07/25   FJ)齋藤	【ANK-1918-00-00】ＵＳ管理Ｓ向けｅｏ顧客ＳのＩ／Ｆ改修
*	v10.01.00	2014/10/07   FJ)松本	ST-2014-0000158 対応
*	v11.00.00	2014/11/25   FJ)谷口	OM-2014-0003664 対応
*	v12.00.00	2015/02/12   FJ)江藤	OM-2014-0003554 対応
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM267;
import eo.business.util.table.JBSbatKK_T_IDO_RSV;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_TAJGS_WRIB_KEI;
import eo.business.util.table.JBSbatKK_T_TAJGSWKEI_TGKEI;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
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;
import eo.framework.util.JBSbatOracleSeqUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKAdChgSmtvlRnki extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(他事業者割引契約対象契約)*/
	private static final String D_TBL_NAME_KK_T_TAJGSWKEI_TGKEI = "KK_T_TAJGSWKEI_TGKEI";

	/** テーブル(進捗)*/
	private static final String D_TBL_NAME_KK_T_PRG = "KK_T_PRG";

// OM-2014-0002047対応 20140611 星野 ADD START
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";
// OM-2014-0002047対応 20140611 星野 ADD END

	// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 START
	/** テーブル(異動予約)*/
	private static final String D_TBL_NAME_KK_T_IDO_RSV = "KK_T_IDO_RSV";
	// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 END

	// OM-2014-00003664対応 ADD START
	/** テーブル(他事業者割引契約対象契約)*/
	private static final String D_TBL_NAME_KK_T_TAJGS_WRIB_KEI = "KK_T_TAJGS_WRIB_KEI";
	// OM-2014-00003664対応 ADD END

	/** SQL定義キー(KK_SELECT_028)*/
	private static final String KK_T_PRG_KK_SELECT_028 = "KK_SELECT_028";

// OM-2014-0002047対応 20140611 星野 ADD START
	/** SQL定義キー(KK_SELECT_023)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_023 = "KK_SELECT_023";
// OM-2014-0002047対応 20140611 星野 ADD END

	// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 START
	/** SQL定義キー(KK_SELECT_080)*/
	private static final String KK_T_IDO_RSV_KK_SELECT_080 = "KK_SELECT_080";
	// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 END
	
	// OM-2014-00003664対応 ADD START
	/** SQL定義キー(KK_SELECT_004)*/
	private static final String KK_T_TAJGS_WRIB_KEI_KK_SELECT_004 = "KK_SELECT_004";
	// OM-2014-00003664対応 ADD END
	
	/** テーブルアクセスクラス(他事業者割引契約対象契約)*/
	private JBSbatSQLAccess db_KK_T_TAJGSWKEI_TGKEI = null;

	/** テーブルアクセスクラス(進捗)*/
	private JBSbatSQLAccess db_KK_T_PRG = null;
	
// OM-2014-0002047対応 20140611 星野 ADD START
	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
// OM-2014-0002047対応 20140611 星野 ADD END

	// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 START
	/** テーブルアクセスクラス(異動予約)*/
	private JBSbatSQLAccess db_KK_T_IDO_RSV = null;
	// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 END

	// OM-2014-00003664対応 ADD START
	/** テーブルアクセスクラス(他事業者割引契約)*/
	private JBSbatSQLAccess db_KK_T_TAJGS_WRIB_KEI = null;
	// OM-2014-00003664対応 ADD END
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	// ***** ユースケースID・オペレーションID *****
	/** ユースケースID */
	private static final String USECASE_ID = "KKSV0710";

	/** オペレーションID */
	private static final String OPERATION_ID = "KKSV0710OP";

	/** ユーザ定義文字列 */
	private static final String FIXED_TEXT = "KKSV071001CC";

// IT1-2013-0001233 2013.05.24 T.TORIKAI ADD START
	/** 他事業者割引契約対象契約番号の採番シーケンス */
	private static final String SEQ_TAJGSWKEI_TGKEI_NO = "SEQ_TAJGSWKEI_TGKEI_NO";

	/** 日付の最大日 */
	private static final String MAX_DATE = "20991231";
// IT1-2013-0001233 2013.05.24 T.TORIKAI ADD END
	
	// ***** データ *****
	// 処理対象データList
	ArrayList<HashMap<String, Object>> trgDataList = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_TAJGSWKEI_TGKEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_TAJGSWKEI_TGKEI);
		db_KK_T_PRG = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_PRG);
// OM-2014-0002047対応 20140611 星野 ADD START
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
// OM-2014-0002047対応 20140611 星野 ADD END
		// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 START
		db_KK_T_IDO_RSV = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_IDO_RSV);
		// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 END
		// OM-2014-00003664対応 ADD START
		db_KK_T_TAJGS_WRIB_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_TAJGS_WRIB_KEI);
		// OM-2014-00003664対応 ADD END
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @param outputInItem 入力情報
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		// 入力電文の読み込みが終了した場合
		if (inMap == null) {

			// 中間ファイルが0件の場合
			if (outputInItem == null || outputInItem.getOutMapList().isEmpty()) {
				return null;
			}

			// 中間ファイルの件数分、以下の処理を繰り返す
			for (int i = 0; i < outputInItem.getOutMapList().size(); i++) {

				// ----- 入力電文 -----

				// 処理対象データを取得
				JBSbatServiceInterfaceMap trgMap = null;
				trgMap = (JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(i);

				// 移転元サービス契約番号
				String inItnmSvcKeiNo = null;
				inItnmSvcKeiNo = trgMap.getString(JBSbatKKIFM267.ITNM_SVC_KEI_NO);
				// 移転先サービス契約番号
				String inItnsSvcKeiNo = null;
				inItnsSvcKeiNo = trgMap.getString(JBSbatKKIFM267.ITNS_SVC_KEI_NO);
				// 他事業者割引契約番号
				String inTajgsWribKeiNo = null;
				inTajgsWribKeiNo = trgMap.getString(JBSbatKKIFM267.TAJGS_WRIB_KEI_NO);
				// 他事業者割引契約対象契約番号
				String inTajgswkeiTgkeiNo = null;
				inTajgswkeiTgkeiNo = trgMap.getString(JBSbatKKIFM267.TAJGSWKEI_TGKEI_NO);
				// 世代登録年月日時分秒
				String inGeneAddDtm = null;
				inGeneAddDtm = trgMap.getString(JBSbatKKIFM267.GENE_ADD_DTM);
				// 更新年月日時分秒
				String inUpdDtm = null;
				inUpdDtm = trgMap.getString(JBSbatKKIFM267.UPD_DTM);

				if (!(isBlank(inItnmSvcKeiNo) || isBlank(inItnsSvcKeiNo) || isBlank(inTajgsWribKeiNo) || isBlank(inTajgswkeiTgkeiNo) || isBlank(inGeneAddDtm) || isBlank(inUpdDtm))) {

					if (!inItnmSvcKeiNo.equals(inItnsSvcKeiNo)) {

// IT1-2013-0001233 2013.05.24 T.TORIKAI MOD START
//						JBSbatCommonDBInterface resultMap = null;
//
//						try {
//
//							JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
//
//							whereMap.setValue("TAJGS_WRIB_KEI_NO", inTajgsWribKeiNo);
//							whereMap.setValue("TAJGSWKEI_TGKEI_NO", inTajgswkeiTgkeiNo);
//							whereMap.setValue("GENE_ADD_DTM", inGeneAddDtm);
//
//							resultMap = db_KK_T_TAJGSWKEI_TGKEI.selectByPrimaryKeysForUpdateWait(whereMap);
//						} catch(JBSbatBusinessException bie) {
//// ST2-2013-0001403対応 20130316 星野 MOD START
////							throw new JBSbatBusinessException(JPCBatchMessageConstant.CS00002W, new String[]{""});
//							throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0360KE, new String[]{"他事業者割引契約対象契約", inTajgsWribKeiNo + ", " + inTajgswkeiTgkeiNo + ", " + inGeneAddDtm});
//// ST2-2013-0001403対応 20130316 星野 MOD START
//						} catch(Exception ex) {
//							throw new JBSbatBusinessException("予期せぬ例外が発生しました。");
//						}
//
//						if (!inUpdDtm.equals(resultMap.getString("UPD_DTM"))) {
//// ST2-2013-0001403対応 20130316 星野 MOD START
////							throw new JBSbatBusinessException(JPCBatchMessageConstant.CS00002W, new String[]{""});
//							throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0360KE, new String[]{"他事業者割引契約対象契約", inTajgsWribKeiNo + ", " + inTajgswkeiTgkeiNo + ", " + inGeneAddDtm});
//// ST2-2013-0001403対応 20130316 星野 MOD START
//						}
//
//						executeKK_T_TAJGSWKEI_TGKEI_PKUPDATE(new String[]{inItnsSvcKeiNo}, new String[]{inTajgsWribKeiNo, inTajgswkeiTgkeiNo, inGeneAddDtm});

						// ネットが解約／新規の場合は他事業者割引契約対象契約のサービス契約番号の付替えを行う
						changeTajgswkeiTgkeiSvcKeiNo(inTajgsWribKeiNo, inTajgswkeiTgkeiNo, inGeneAddDtm, inItnsSvcKeiNo);
// IT1-2013-0001233 2013.05.24 T.TORIKAI MOD END
					}
				}
			}

// IT1-2013-0001233 2013.05.24 T.TORIKAI ADD START
			//---------------------------------------------------------------------------------------------
			// スマートバリュー連携部品(KKSV071001CC)で、サービス契約番号の切替を検知できないでコミットする
			//---------------------------------------------------------------------------------------------
			super.commit();
// IT1-2013-0001233 2013.05.24 T.TORIKAI ADD END

			if (!(trgDataList == null || trgDataList.isEmpty())) {

				HashMap<String, Object> paramMap = new HashMap<String, Object>();
				HashMap<String, Object> inputMap = new HashMap<String, Object>();
				HashMap<String, Object> outputMap = new HashMap<String, Object>();

				paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, USECASE_ID);
				paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, OPERATION_ID);

				inputMap.put(FIXED_TEXT, trgDataList);

				JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inputMap, outputMap);

				String returnCode = outputMap.get(JCCBatchEsbInterface.RETURN_CODE).toString();

				if (!JCCBatchEsbInterface.RETURN_CODE_SUCCESS.equals(returnCode)) {
					throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0270CE, new String[]{"住所変更スマートバリュー連携"});
				}
			}
		} else {
			// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 START
			// 解約・新規以外もスマートバリュー異動情報を登録するため下記条件は削除
//// IT1-2013-0001233対応 20130527 OKU ADD START
//			if (!inMap.getString(JBSbatKKIFM267.ITNM_SVC_KEI_NO).equals(inMap.getString(JBSbatKKIFM267.ITNS_SVC_KEI_NO))) {
//				// 解約・新規の場合のみ
//// IT1-2013-0001233対応 20130527 OKU ADD END
			// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 END
				
// OM-2014-0002047対応 20140611 星野 MOD START
//// IT1-2013-0001233対応 20130527 OKU MOD START
////				executeKK_T_PRG_KK_SELECT_028(new String[]{inMap.getString(JBSbatKKIFM267.MSKM_DTL_NO), inMap.getString(JBSbatKKIFM267.ITNM_SVC_KEI_NO)});
//				executeKK_T_PRG_KK_SELECT_028(new String[]{inMap.getString(JBSbatKKIFM267.MSKM_DTL_NO), inMap.getString(JBSbatKKIFM267.ITNS_SVC_KEI_NO)});
//// IT1-2013-0001233対応 20130527 OKU MOD END
//				
//				JBSbatCommonDBInterface prgInfo = null;
//				for (prgInfo = db_KK_T_PRG.selectNext(); prgInfo != null; prgInfo = db_KK_T_PRG.selectNext()) {
//					
//					if (trgDataList == null) {
//						trgDataList = new ArrayList<HashMap<String, Object>>();
//					}
//					
//					HashMap<String, Object> trgtData = null;
//					trgtData = new HashMap<String, Object>();
//					
//// IT1-2013-0001233対応 20130527 OKU MOD START
////					trgtData.put("svc_kei_no", inMap.getString(JBSbatKKIFM267.ITNM_SVC_KEI_NO));
//					trgtData.put("svc_kei_no", inMap.getString(JBSbatKKIFM267.ITNS_SVC_KEI_NO));
//// IT1-2013-0001233対応 20130527 OKU MOD END
//					trgtData.put("svc_kei_ucwk_no", prgInfo.getString(JBSbatKK_T_PRG.SVC_KEI_UCWK_NO));
//					trgtData.put("ido_div", prgInfo.getString(JBSbatKK_T_PRG.IDO_DIV));
//					trgtData.put("prg_stat", prgInfo.getString(JBSbatKK_T_PRG.PRG_STAT));
//					trgtData.put("prg_dtm", prgInfo.getString(JBSbatKK_T_PRG.PRG_DTM));
//					
//					trgDataList.add(trgtData);
//				}
				// OM-2014-0003664対応 ADD START
				// 他事業者割引契約番号を取得
				String tajgsWribKeiNo = inMap.getString(JBSbatKKIFM267.TAJGS_WRIB_KEI_NO);
				// 他事業者割引契約番号を元に対象データを抽出
				ArrayList<HashMap<String, Object>> tajgsWribKeiList = selectTajgsWribKeiByTajgsWribSvcKeiNo(tajgsWribKeiNo);
				
				if (null != tajgsWribKeiList && 0 < tajgsWribKeiList.size())
				{
					// 解約済かどうか
					boolean dskZumiFlg = false;
					// 全解約通知済(ネット、電話共に解約済)かどうか
					boolean allDslTchiZumiFlg = true;
					
					
					for (int i =0 ; i < tajgsWribKeiList.size() ; i++)
					{
						HashMap<String, Object> tajgsWribKeiMap = tajgsWribKeiList.get(i);
						// 他事業者割引契約解約年月日
						String tajgsDslYmd = (String)tajgsWribKeiMap.get(JBSbatKK_T_TAJGS_WRIB_KEI.TAJGS_WRIB_KEI_DSL_YMD);
						// 他事業者割引契約締結年月日
						String tajgsCncYmd = (String)tajgsWribKeiMap.get(JBSbatKK_T_TAJGS_WRIB_KEI.TAJGS_WRIB_KEI_CNC_YMD);
						// 解約他事業者通知年月日
						String tajgsTchYmd = (String)tajgsWribKeiMap.get(JBSbatKK_T_TAJGSWKEI_TGKEI.DSL_TAJGS_TCH_YMD);
						
						// スマートバリューが締結済か
						if (null != tajgsCncYmd && !MAX_DATE.equals(tajgsCncYmd))
						{
							// スマートバリューが既に解約済の場合異動通知対象としない
							if (null != tajgsDslYmd && !MAX_DATE.equals(tajgsDslYmd))
							{
								dskZumiFlg = true;
								break;
							}
							else
							{
								// 解約他事業者通知年月日が設定されていない場合は通知済フラグをfalseにする。
								if (null == tajgsTchYmd || MAX_DATE.equals(tajgsTchYmd))
								{
									allDslTchiZumiFlg = false;
									break;
								}
							}
						}
						// 仮登録の場合
						else
						{
							allDslTchiZumiFlg = false;
							break;
						}
					}
					// スマートバリューが解約済または全解約通知済の場合
					if (dskZumiFlg || allDslTchiZumiFlg)
					{
						return outputInItem;
					}
				}
				// OM-2014-0003664対応 ADD END
				
				String svcKeiNo = inMap.getString(JBSbatKKIFM267.ITNS_SVC_KEI_NO);
				//ANK-1918-00-00 ADD START
				String adchgNo = inMap.getString(JBSbatKKIFM267.ADCHG_NO);
				//ANK-1918-00-00 ADD END
				// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 START
//				String svcKeiStat = getSvcKeiStat(svcKeiNo);
				// 移転先サービス契約情報
				String itnsSvcCd = "";
				String itnsSvcKeiStat = "";
				//ANK-1918-00-00 ADD START
				String itnsSysid = "";
				//ANK-1918-00-00 ADD END
				// 移転先サービス契約番号が設定されている場合
				if (!isBlank(svcKeiNo))
				{
					// 移転先サービス契約情報を取得
					JBSbatCommonDBInterface itnsSvcKei = getSvcKei(svcKeiNo);
					if (null != itnsSvcKei)
					{
						itnsSvcCd = itnsSvcKei.getString(JBSbatKK_T_SVC_KEI.SVC_CD);
						itnsSvcKeiStat = itnsSvcKei.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT);
						//ANK-1918-00-00 ADD START
						itnsSysid = itnsSvcKei.getString(JBSbatKK_T_SVC_KEI.SYSID);
						//ANK-1918-00-00 ADD END
					}
				}
				// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 END

				// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 START
//				// 転居先サービス契約がサービス開始済か確認
//				if("100".compareTo(svcKeiStat) <= 0 && svcKeiStat.compareTo("910") < 0){
				// 移転先サービス契約がネットでサービス提供中以降（解約済を除く）の場合
				if (JKKStrConst.CD00130_01.equals(itnsSvcCd) && "100".compareTo(itnsSvcKeiStat) <= 0 && itnsSvcKeiStat.compareTo("910") < 0)
				{
					// スマートバリュー異動情報登録対象データかどうか
					boolean isTrgtData = false;

					// 移転元サービス契約番号
					String itnmSvcKeiNo = inMap.getString(JBSbatKKIFM267.ITNM_SVC_KEI_NO);
					// サービス契約番号が変わる場合
					if (!itnmSvcKeiNo.equals(svcKeiNo))
					{
						isTrgtData = true;
					}
					// サービス契約番号が変わらない場合
					else
					{
						// 異動予約からコース変更予約を取得
						JBSbatCommonDBInterface idoRsv = getIdoRsvCourseChg(itnmSvcKeiNo);
						// コース変更がある場合
						if (null != idoRsv)
						{
							String itnmEohntPplanTikiSkcd = idoRsv.getString("OLD_EOHNT_PPLAN_TIKI_SKCD");
							String itnsEohntPplanTikiSkcd = idoRsv.getString("NEW_EOHNT_PPLAN_TIKI_SKCD");
							// 移転元サービス契約、移転先サービス契約の料金プランがどちらも定額制である場合
							if (JKKStrConst.CD01421_TEGAK.equals(itnmEohntPplanTikiSkcd)
								&& JKKStrConst.CD01421_TEGAK.equals(itnsEohntPplanTikiSkcd))
							{
								// 20150202 OM-2014-0003554 コース変更予約が存在しても料金プランが同じ場合があるため(メゾン→メゾンの場合)、プランが変更されている場合のみ通知対象とする MOD START
//								isTrgtData = true;
							    String newPplanCd = idoRsv.getString(JBSbatKK_T_IDO_RSV.NEW_PPLAN_CD);
							    String oldPplanCd = idoRsv.getString(JBSbatKK_T_IDO_RSV.OLD_PPLAN_CD);
							    if (!isBlank(oldPplanCd) && !oldPplanCd.equals(newPplanCd))
							    {
							    	// 変更前後のプランが異なる場合は、通知対象
							    	isTrgtData = true;
							    }
							    else
							    {
							    	// 変更前後のプランが同じ場合は、通知不要
							    }
								// 20150202 OM-2014-0003554 コース変更予約が存在しても料金プランが同じ場合があるため(メゾン→メゾンの場合)、プランが変更されている場合のみ通知対象とする MOD END
							}
							else
							{
								// 定額制⇔従量制の場合はコース変更確定処理がスマートバリュー異動情報を登録するため何もしない
								// 従量制⇔従量制の場合は通知不要（移転元が従量制に変更された契機で通知済みのため）
							}
						}
						// コース変更がない場合
						else
						{
							// 通知不要
						}
					}

					if (isTrgtData)
					{
				// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 END
						if (trgDataList == null) {
							trgDataList = new ArrayList<HashMap<String, Object>>();
						}
						
						HashMap<String, Object> trgtData = null;
						trgtData = new HashMap<String, Object>();
						trgtData.put("svc_kei_no", svcKeiNo);
						trgtData.put("ido_div", "00019");
						trgtData.put("prg_stat", "1000");
						trgtData.put("prg_dtm", JBSbatDateUtil.getSystemDateTimeStamp());
						//ANK-1918-00-00 ADD START
						trgtData.put("adchg_no", adchgNo);
						trgtData.put("sysid", itnsSysid);
						//ST-2014-0000158 ADD START
						trgtData.put("hantei_flg", "1");
						//ST-2014-0000158 ADD END
						//ANK-1918-00-00 ADD END
						trgDataList.add(trgtData);
					// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 START
					}
					// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 END
				}
// OM-2014-0002047対応 20140611 星野 MOD END
				
				outputInItem.addOutMapList(inMap);
				
				return outputInItem;
			// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 START
//// IT1-2013-0001233対応 20130527 OKU ADD START
//			}
//// IT1-2013-0001233対応 20130527 OKU ADD END
			// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 END
		}

		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_TAJGSWKEI_TGKEI.close();
		db_KK_T_PRG.close();
// OM-2014-0002047対応 20140611 星野 ADD START
		db_KK_T_SVC_KEI.close();
// OM-2014-0002047対応 20140611 星野 ADD END
		// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 START
		db_KK_T_IDO_RSV.close();
		// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 END
		// OM-2014-00003664対応 ADD START
		db_KK_T_TAJGS_WRIB_KEI.close();
		// OM-2014-00003664対応 ADD END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
// IT1-2013-0001233 2013.05.24 T.TORIKAI DEL START
//	/**
//	 * 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項目は以下に説明します。
//	 *		 	TAJGS_WRIB_KEI_NO
//	 *		 	TAJGSWKEI_TGKEI_NO
//	 *		 	GENE_ADD_DTM
//	 * </pre>
//	 * <p>
//	 * @param setParam 設定項目の値。
//	 * @param whereParam 条件項目の値。
//	 * @throws Exception 業務サービス内で発生した例外全般。
//	 */
//	private void executeKK_T_TAJGSWKEI_TGKEI_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
//	{
//		// 設定値のマップを作成します
//		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
//		setMap.setValue("SVC_KEI_NO", setParam[0]);
//	
//		// 条件のマップを作成します
//		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
//		whereMap.setValue("TAJGS_WRIB_KEI_NO", whereParam[0]);
//		whereMap.setValue("TAJGSWKEI_TGKEI_NO", whereParam[1]);
//		whereMap.setValue("GENE_ADD_DTM", whereParam[2]);
//
//		// DBアクセスを実行します
//		db_KK_T_TAJGSWKEI_TGKEI.updateByPrimaryKeys(whereMap, setMap);
//	}
// IT1-2013-0001233 2013.05.24 T.TORIKAI DEL END

// OM-2014-0002047対応 20140611 星野 DEL START
//	/**
//	 * SQLKEY(KK_SELECT_028)で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_PRG_KK_SELECT_028(Object[] param) throws Exception
//	{
//		// バイント変数のリストを生成します
//		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
//		paramList.setValue(param[0].toString());
//		paramList.setValue(param[1].toString());
//
//		// DBアクセスを実行します
//		db_KK_T_PRG.selectBySqlDefine(paramList, KK_T_PRG_KK_SELECT_028);
//	}
// OM-2014-0002047対応 20140611 星野 DEL END
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	private boolean isBlank(String value) {

		if (value == null || "".equals(value.trim())) {
			return true;
		}

		return false;
	}

// IT1-2013-0001233 2013.05.24 T.TORIKAI ADD START
	/**
	 * 他事業者割引契約対象契約のサービス契約番号を切替える
	 * 
	 * @param tajgsWribKeiNo		切替元の他事業者割引契約番号
	 * @param tajgswkeiTgkeiNo		切替元の他事業者割引契約対象契約番号
	 * @param geneAddDtm			切替元の世代登録年月日時分秒
	 * @param svcKeiNo				切替先のサービス契約番号
	 */
	private void changeTajgswkeiTgkeiSvcKeiNo(String tajgsWribKeiNo, String tajgswkeiTgkeiNo, String geneAddDtm, String svcKeiNo) throws Exception
	{
		// 切替元レコードを検索
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();

		whereMap.setValue("TAJGS_WRIB_KEI_NO", tajgsWribKeiNo);
		whereMap.setValue("TAJGSWKEI_TGKEI_NO", tajgswkeiTgkeiNo);
		whereMap.setValue("GENE_ADD_DTM", geneAddDtm);

		JBSbatCommonDBInterface resultMap = db_KK_T_TAJGSWKEI_TGKEI.selectByPrimaryKeys(whereMap);
		if (resultMap != null) {
			// 適用終了日を設定するレコードを追加
			insertKK_T_TAJGSWKEI_TGKEI(resultMap, null);
			// 適用開始日を設定するレコードを追加
			insertKK_T_TAJGSWKEI_TGKEI(resultMap, svcKeiNo);
		}
	}
// IT1-2013-0001233 2013.05.24 T.TORIKAI ADD END

// IT1-2013-0001233 2013.05.24 T.TORIKAI ADD START
	/**
	 * 他事業者割引契約対象契約にサービス契約切替のレコードを追加する<br>
	 * 切替先のサービス契約番号がnullの場合は適用終了のレコード追加を行い<br>
	 * 切替先のサービス契約番号が設定されている場合は適用開始レコードの追加を行う
	 * 
	 * @param param				切替元となる他事業者割引契約対象契約のレコード
	 * @param newSvcKeiNo		切替先のサービス契約番号（適用終了時はnullを設定すること）
	 * @throws Exception
	 */
	private void insertKK_T_TAJGSWKEI_TGKEI(JBSbatCommonDBInterface param, String newSvcKeiNo)  throws Exception
	{
		// 適用終了レコードの追加設定
		String tajgswkeiTgkeiNo = param.getString("TAJGSWKEI_TGKEI_NO");
		String svcKeiNo = param.getString("SVC_KEI_NO");
		String startYmd = param.getString("TAJGSWKEI_TGKEI_TSTAYMD");
// OM-2014-0002549対応 20140802 星野 ADD START
		String dslTajgsTchYmd = param.getString("DSL_TAJGS_TCH_YMD");
		String ppchgTajgsTchYmd = param.getString("PPCHG_TAJGS_TCH_YMD");
// OM-2014-0002549対応 20140802 星野 ADD END
		String endYmd = JBSbatDateUtil.adjustDate(super.opeDate, -1);	// 適用終了日：運用日の前日を設定
		String sysTimeStamp = JBSbatDateUtil.getSystemDateTimeStamp();
		
		// 引数にサービス契約番号が設定されている場合は適用開始レコードの追加設定
		if (newSvcKeiNo != null) {
			// 他事業者割引契約対象契約番号を採番
			tajgswkeiTgkeiNo = JBSbatOracleSeqUtil.getFormatedNextSeq(super.commonItem.getConnection(), SEQ_TAJGSWKEI_TGKEI_NO, "", 15);
			svcKeiNo = newSvcKeiNo;
			startYmd = super.opeDate;	// 適用開始日に運用日を設定
			endYmd = MAX_DATE;			// 適用終了日に日付の最大値を設定
// OM-2014-0002549対応 20140802 星野 ADD START
			dslTajgsTchYmd  = MAX_DATE;
			ppchgTajgsTchYmd  = MAX_DATE;
// OM-2014-0002549対応 20140802 星野 ADD END
		}
		
		// 追加パラメータ
		JBSbatCommonDBInterface insertMap = new JBSbatCommonDBInterface();
		insertMap.setValue("TAJGS_WRIB_KEI_NO"			, param.getString("TAJGS_WRIB_KEI_NO"));
		insertMap.setValue("TAJGSWKEI_TGKEI_NO"			, tajgswkeiTgkeiNo);
		insertMap.setValue("GENE_ADD_DTM"				, sysTimeStamp);
		insertMap.setValue("SVC_KEI_NO"					, svcKeiNo);
// OM-2014-0002549対応 20140802 星野 MOD START
//		insertMap.setValue("DSL_TAJGS_TCH_YMD"			, param.getString("DSL_TAJGS_TCH_YMD"));
//		insertMap.setValue("PPCHG_TAJGS_TCH_YMD"		, param.getString("PPCHG_TAJGS_TCH_YMD"));
		insertMap.setValue("DSL_TAJGS_TCH_YMD"			, dslTajgsTchYmd);
		insertMap.setValue("PPCHG_TAJGS_TCH_YMD"		, ppchgTajgsTchYmd);
// OM-2014-0002549対応 20140802 星野 MOD END
		insertMap.setValue("TAJGSWKEI_TGKEI_TSTAYMD"	, startYmd);
		insertMap.setValue("TAJGSWKEI_TGKEI_TENDYMD"	, endYmd);
		insertMap.setValue("ADD_DTM"					, null);
		insertMap.setValue("ADD_OPEACNT"				, null);
		insertMap.setValue("UPD_DTM"					, null);
		insertMap.setValue("UPD_OPEACNT"				, null);
		insertMap.setValue("DEL_DTM"					, null);
		insertMap.setValue("DEL_OPEACNT"				, null);
		insertMap.setValue("MK_FLG"						, null);
		insertMap.setValue("ADD_UNYO_YMD"				, null);
		insertMap.setValue("ADD_TRN_ID"					, null);
		insertMap.setValue("UPD_UNYO_YMD"				, null);
		insertMap.setValue("UPD_TRN_ID"					, null);
		insertMap.setValue("DEL_UNYO_YMD"				, null);
		insertMap.setValue("DEL_TRN_ID"					, null);
		
		// 追加
		db_KK_T_TAJGSWKEI_TGKEI.insertByPrimaryKeys(insertMap);
	}
// IT1-2013-0001233 2013.05.24 T.TORIKAI ADD END
	
	// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 START
//// OM-2014-0002047対応 20140611 星野 ADD START
//	/**
//	 * サービス契約よりサービス契約ステータスを取得する
//	 */
//	private String getSvcKeiStat(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.SVC_KEI_STAT);
//		}
//
//		return "";
//	}
//// OM-2014-0002047対応 20140611 星野 ADD END

	/**
	 * サービス契約からサービス契約情報を取得します。
	 * <br>
	 * @param svcKeiNo サービス契約番号
	 * @return サービス契約情報
	 * @throws Exception 例外が発生した場合
	 */
	private JBSbatCommonDBInterface getSvcKei(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);

		return db_KK_T_SVC_KEI.selectNext();
	}

	/**
	 * 異動予約からコース変更予約を取得します。
	 * <br>
	 * @param itnmSvcKeiNo 移転元サービス契約番号
	 * @return コース変更予約情報（コース変更予約がない場合はnull）
	 * @throws Exception 例外が発生した場合
	 */
	private JBSbatCommonDBInterface getIdoRsvCourseChg(String itnmSvcKeiNo) throws Exception
	{
		// 条件設定
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(opeDate);
		paramList.setValue(opeDate);
		paramList.setValue(opeDate);
		paramList.setValue(opeDate);
		paramList.setValue(itnmSvcKeiNo);

		// 検索
		db_KK_T_IDO_RSV.selectBySqlDefine(paramList, KK_T_IDO_RSV_KK_SELECT_080);

		return db_KK_T_IDO_RSV.selectNext();
	}
	// ANK-2186-00-00 スマートバリューのホーム⇔メゾン間での住変時にKDDIへ異動通知を行う 2014/07/18 END

	// OM-2014-0003664対応 ADD START
	/**
	 * 他事業者割引契約番号をもとに他事業者割引契約の取得<br>
	 * 
	 * @param tajgsWribKeiNo 他事業者割引契約番号
	 * @return 他事業者割引契約情報
	 * @throws Exception
	 */
	private ArrayList<HashMap<String, Object>> selectTajgsWribKeiByTajgsWribSvcKeiNo(String tajgsWribKeiNo) throws Exception
	{
		// 戻り値
		ArrayList<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();

		String[] param =
		{
			tajgsWribKeiNo, super.opeDate, super.opeDate
		};

		executeKK_T_TAJGS_WRIB_KEI_KK_SELECT_004(param);
		JBSbatCommonDBInterface dbInterface = db_KK_T_TAJGS_WRIB_KEI.selectNext();

		while (dbInterface != null)
		{
			resultList.add((HashMap<String, Object>)dbInterface.getMap());
			dbInterface = db_KK_T_TAJGS_WRIB_KEI.selectNext();
		}

		return resultList;
	}
	
	/**
	 * SQLKEY(KK_SELECT_004)で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_TAJGS_WRIB_KEI_KK_SELECT_004(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_TAJGS_WRIB_KEI.selectBySqlDefine(paramList, KK_T_TAJGS_WRIB_KEI_KK_SELECT_004);
	}
	// OM-2014-0003664対応 ADD END
}
