/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKWribSvKeiSaiInfCht
*	ソースファイル名	：JBSbatKKWribSvKeiSaiInfCht.java
*	作成者				：富士通　
*	作成日				：2011年06月20日
*＜機能概要＞
*　割引サービス契約差分情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/06/20   富士通		新規作成
*	v3.00.00	2012/06/28	FJ)北守		【IT2-2012-0000711】サービス開始基準対応（一時金）
*	v4.00.00	2013/04/21	FJ)上田		【ST2-2013-0001747】解約および回復レコードの判定変更
*	v13.00.00	2015/03/03  FJ)田枝     【ANK-2348-00-00】光電話セレクトオプションパック／休止対応
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JKKbatSaiInfChtCommon;
import eo.business.util.file.JBSbatKKIFM019;
import eo.business.util.file.JBSbatKKIFM023;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_WRIB_SVC_KEI;
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 JBSbatKKWribSvKeiSaiInfCht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(割引サービス契約)*/
	private static final String D_TBL_NAME_KK_T_WRIB_SVC_KEI = "KK_T_WRIB_SVC_KEI";

	/** SQL定義キー(KK_SELECT_003)*/
	private static final String KK_T_WRIB_SVC_KEI_KK_SELECT_003 = "KK_SELECT_003";

	/** SQL定義キー(KK_SELECT_023)*/
	private static final String KK_T_WRIB_SVC_KEI_KK_SELECT_023 = "KK_SELECT_023";

	/** SQL定義キー(KK_SELECT_025)*/
	private static final String KK_T_WRIB_SVC_KEI_KK_SELECT_025 = "KK_SELECT_025";

	/** テーブルアクセスクラス(割引サービス契約)*/
	private JBSbatSQLAccess db_KK_T_WRIB_SVC_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 運用月開始日保持の為の変数 */
	private String strSta = null;
	
	/** 運用月終了日保持の為の変数 */
	private String strEnd = null;
	
	/** バッチ運用日保持の為の変数 */
	private String strDate = null;
	
	/** フリー項目[処理月区分] */
	private String free = null;

	/** 前回使用のサービス契約番号 */
	private String svcKeiNo = "";

// v13.00.00 ADD START
	/** 休止中断コード(00) */
	static String PAUSE_STP_CD_00 = "00";
// v13.00.00 ADD END

	// ++++++++++ v4.00.00 追加開始 ++++++++++ //
	/** 異動タイミングチェックレコード退避リスト */
	ArrayList<JBSbatCommonDBInterface> WkIdoTmgSvInfo = null;
	// ++++++++++ v4.00.00 追加終了 ++++++++++ //

	// ++++++++++ 性能改善対応 追加開始 ++++++++++ //
	/** 差分抽出共通クラス */
	private JKKbatSaiInfChtCommon saiInfChtCmn = null;
	// ++++++++++ 性能改善対応 追加終了 ++++++++++ //
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_WRIB_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRIB_SVC_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// 運用日付取得
		strDate = commonItem.getOpeDate();
		String ym = strDate.substring(0, 6);
		
		// フリー項目[処理月区分]
		free = commonItem.getFreeItem();
		
		// 抽出対象期間を算出
		// 運用日付から当月の月初、月末、翌月月初を算出
		strSta = ym + "01";
		strEnd = ym + JBSbatDateUtil.getEndOfMonth(ym);
		
		// 処理対象が[前月]の場合、前月分の値に編集
		if(JBSbatKKConst.TRAN_TRGT_MON_BF.equals(free))
		{
			strSta = JBSbatDateUtil.adjustMonth(strSta, -1);
			strEnd = JBSbatDateUtil.adjustMonth(strEnd, -1);
		}
		
		// ++++++++++ 性能改善対応 追加開始 ++++++++++ //
		// 差分抽出共通クラスを生成
		saiInfChtCmn = new JKKbatSaiInfChtCommon(commonItem);
		// ++++++++++ 性能改善対応 追加終了 ++++++++++ //
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 抽出契約区分取得
		String chshtKeiDiv = inMap.getString(JBSbatKKIFM023.CHSHT_KEI_DIV);
		
		//抽出契約区分の判定
		if(!(JBSbatKKConst.CHSHT_KEI_DIV_50.equals(chshtKeiDiv)))
		{
			//割引サービス契約以外が入っている場合はエラー
			throw new Exception();
		}
		
		// 前回と同じサービス契約番号なら処理しない
		if (svcKeiNo.equals(inMap.getString(JBSbatKKIFM023.SVC_KEI_NO)))
		{
			return null;
		}
		svcKeiNo = inMap.getString(JBSbatKKIFM023.SVC_KEI_NO);
		
		// フリー項目[処理区分]が[キャンセル]の場合には個別SQLを発行
		if(JBSbatKKConst.TRAN_TRGT_CANCEL.equals(free))
		{
			// 割引サービス契約情報取得_SQLKEY(KK_SELECT_025)
			executeKK_T_WRIB_SVC_KEI_KK_SELECT_025(getWribSvcKei_S025Param(inMap));
		// フリー項目[処理区分]が[開始済]の場合には個別SQLを発行
		} else if (JBSbatKKConst.TRAN_TRGT_KAISHI.equals(free)) {
			// 割引サービス契約情報取得_SQLKEY(KK_SELECT_023)
			executeKK_T_WRIB_SVC_KEI_KK_SELECT_023(getWribSvcKei_S023Param(inMap));
		}
		else
		{
			// 割引サービス契約情報取得_SQLKEY(KK_SELECT_003)
			executeKK_T_WRIB_SVC_KEI_KK_SELECT_003(getWribSvcKei_S003Param(inMap));
		}
		
		// 抽出結果取得
		// ++++++++++ 性能改善対応 変更開始 ++++++++++ //
//		JBSbatCommonDBInterface svInfo = new JBSbatCommonDBInterface();
//		svInfo = db_KK_T_WRIB_SVC_KEI.selectNext();
		JBSbatCommonDBInterface svInfo = db_KK_T_WRIB_SVC_KEI.selectNext();
		// ++++++++++ 性能改善対応 変更終了 ++++++++++ //
		
		// 取得件数が0件の場合には後続処理不要
		if(svInfo == null)
		{
			return null;
		}
		
		// 出力情報格納領域
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// ++++++++++ 性能改善対応 変更開始 ++++++++++ //
//		// 差分情報抽出共通クラスインスタンス生成
//		// ++++++++++ v3.00.00 変更開始 ++++++++++ //
////		JKKbatSaiInfChtCommon saiInfChtCmn = new JKKbatSaiInfChtCommon();
//		JKKbatSaiInfChtCommon saiInfChtCmn = new JKKbatSaiInfChtCommon(commonItem);
//		// ++++++++++ v3.00.00 変更終了 ++++++++++ //
		saiInfChtCmn.initialize();
		// ++++++++++ 性能改善対応 変更終了 ++++++++++ //
		
		// バッチ運用月月初設定
		saiInfChtCmn.setStrSta(strSta);
		
		// 抽出契約区分設定
		saiInfChtCmn.setChshtKeiDiv(chshtKeiDiv);
		
		// 初回レコードフラグ
		boolean frstRecFlg = true;
		
		// ++++++++++ v4.00.01 追加開始 ++++++++++ //
		// 異動タイミングチェックリスト初期化
		initialize();
		// ++++++++++ v4.00.01 追加終了 ++++++++++ //
		
		// 抽出結果全件について出力情報を編集
		while(svInfo != null)
		{
			// 異動タイミングチェック(翌月分の解約回復は連携対象外)
			if(chkIdoTmg(svInfo))
			{
				// ++++++++++ v4.00.00 変更開始 ++++++++++ //
				// チェック結果にて出力対象レコードが存在する場合
				for(int i=0; i < WkIdoTmgSvInfo.size(); i++)
				{
					/** タイミングチェックレコード格納用リスト */
					JBSbatCommonDBInterface WkIdoTmgSvRec = WkIdoTmgSvInfo.get(i);
					
					if(frstRecFlg)
					{
						// 集約情報作成(初回レコード)
//						saiInfChtCmn.makeSykInf(getKeyList(svInfo, 0), getKeyList(svInfo, 1), getKeyList(svInfo, 2), true);
						saiInfChtCmn.makeSykInf(getKeyList(WkIdoTmgSvRec, 0), getKeyList(WkIdoTmgSvRec, 1), getKeyList(WkIdoTmgSvRec, 2), true);
						frstRecFlg = false;
					}
					else
					{
						// 集約情報作成(N件目レコード)
//						saiInfChtCmn.makeSykInf(getKeyList(svInfo, 0), getKeyList(svInfo, 1), getKeyList(svInfo, 2), false);
						saiInfChtCmn.makeSykInf(getKeyList(WkIdoTmgSvRec, 0), getKeyList(WkIdoTmgSvRec, 1), getKeyList(WkIdoTmgSvRec, 2), false);
					}
				}
				// 異動タイミングチェックリスト初期化
				initialize();
				// ++++++++++ v4.00.00 変更終了 ++++++++++ //
			}
			// 次レコード取得
			svInfo = db_KK_T_WRIB_SVC_KEI.selectNext();
		}
		
		// 編集情報作成
		saiInfChtCmn.makeEditInf();
		
		// 出力情報編集
		saiInfChtCmn.editSaiInf(outputBean);
		
		return outputBean;
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_WRIB_SVC_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/

		// ++++++++++ 性能改善対応 追加開始 ++++++++++ //
		// 差分抽出共通クラスをクローズします。
		saiInfChtCmn.close();
		// ++++++++++ 性能改善対応 追加終了 ++++++++++ //
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(KK_SELECT_003)で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_WRIB_SVC_KEI_KK_SELECT_003(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_WRIB_SVC_KEI.selectBySqlDefine(paramList, KK_T_WRIB_SVC_KEI_KK_SELECT_003);
	}

	/**
	 * SQLKEY(KK_SELECT_023)で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_WRIB_SVC_KEI_KK_SELECT_023(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		
		// DBアクセスを実行します
		db_KK_T_WRIB_SVC_KEI.selectBySqlDefine(paramList, KK_T_WRIB_SVC_KEI_KK_SELECT_023);
	}

	/**
	 * SQLKEY(KK_SELECT_025)で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_WRIB_SVC_KEI_KK_SELECT_025(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_WRIB_SVC_KEI.selectBySqlDefine(paramList, KK_T_WRIB_SVC_KEI_KK_SELECT_025);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * SQLKEY(KK_SELECT_003)でDBアクセスを実行する際に必要なパラメータを設定します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.パラメータ設定処理。
	 * </pre>
	 * <p>
	 * @param inMap 入力電文
	 * @return param SQLKEY(KK_SELECT_003)でDBアクセスを実行する際に必要なパラメータ
	 * @throws Exception 
	 */
	private Object[] getWribSvcKei_S003Param(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		Object[] ret_Param = {
				JBSbatKKConst.APLY_STAT_RENKEI,
				strDate,
				inMap.getString(JBSbatKKIFM023.SVC_KEI_NO),
				strDate,
				JBSbatKKConst.APLY_STAT_RENKEI
		};
		return ret_Param;
	}

	/**
	 * SQLKEY(KK_SELECT_023)でDBアクセスを実行する際に必要なパラメータを設定します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.パラメータ設定処理。
	 * </pre>
	 * <p>
	 * @param inMap 入力電文
	 * @return param SQLKEY(KK_SELECT_023)でDBアクセスを実行する際に必要なパラメータ
	 * @throws Exception 
	 */
	private Object[] getWribSvcKei_S023Param(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		Object[] ret_Param = {
				inMap.getString(JBSbatKKIFM023.SVC_KEI_NO),
				strDate
		};
		return ret_Param;
	}

	/**
	 * SQLKEY(KK_SELECT_025)でDBアクセスを実行する際に必要なパラメータを設定します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.パラメータ設定処理。
	 * </pre>
	 * <p>
	 * @param inMap 入力電文
	 * @return param SQLKEY(KK_SELECT_025)でDBアクセスを実行する際に必要なパラメータ
	 * @throws Exception 
	 */
	private Object[] getWribSvcKei_S025Param(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		Object[] ret_Param = {
				JBSbatKKConst.APLY_STAT_RENKEI,
				JBSbatKKConst.TG_SKBT_SVC,
				JBSbatKKConst.APLY_STAT_RENKEI,
				inMap.getString(JBSbatKKIFM023.SVC_KEI_NO),
				strDate
		};
		return ret_Param;
	}

	/**
	 * 比較・出力対象情報作成処理
	 * @param svInfo
	 * @param ctlFlg
	 * @return
	 * @throws Exception
	 */
	private ArrayList<String[]> getKeyList(JBSbatCommonDBInterface svInfo, int wrkDiv) throws Exception
	{
		ArrayList<String[]> aryList = new ArrayList<String[]>();
		
		// 集約キー(ListA)ArrayList(String配列:[0]DBカラム名 [1]出力ファイル項目名 [2]DB実値)
		if(wrkDiv == 0)
		{
			// 出力情報定義ArrayList(String配列:[0]DBカラム名 [1]出力ファイル項目名 [2]DB実値)
			aryList.add(setStrctVal(JBSbatKK_T_SVC_KEI.SEIRI_NO,	 				JBSbatKKIFM019.SEIRI_NO, 				svInfo));	// 整理番号
			aryList.add(setStrctVal(JBSbatKK_T_SVC_KEI.SVC_KEI_NO,					JBSbatKKIFM019.SVC_KEI_NO,				svInfo));	// サービス契約番号
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_CD,			JBSbatKKIFM019.SVC_CD,					svInfo));	// サービスコード
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_CD,			JBSbatKKIFM019.TRGT_KEI_SVC_CD,			svInfo));	// 割引サービスコード（対象契約サービスコード）
			aryList.add(setStrctVal(JBSbatKK_T_SVC_KEI.PCRS_CD,						JBSbatKKIFM019.PCRS_CD,					svInfo));	// 料金コースコード
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.PPLAN_CD,				JBSbatKKIFM019.PPLAN_CD,				svInfo));	// 料金プランコード
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_NO,		JBSbatKKIFM019.WRIB_SVC_KEI_NO,			svInfo));	// 割引サービス契約番号
			
			// 割引額算出基準年月日が設定されている場合サービス開始年月日に設定
			if(isNullBlunk(svInfo.getString(JBSbatKK_T_WRIB_SVC_KEI.WRIB_AMNT_SNST_STDARDYMD)))
			{
				aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.SVC_STA_YMD,			JBSbatKKIFM019.SVC_STAYMD,				svInfo));	// サービス開始年月日
			}
			else
			{
				aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.WRIB_AMNT_SNST_STDARDYMD,			JBSbatKKIFM019.SVC_STAYMD,	svInfo));	// 割引額算出基準年月日
			}
			
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.SVC_CHRG_STAYMD,		JBSbatKKIFM019.SVC_CHRG_STAYMD,			svInfo));	// サービス課金開始年月日
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.PLAN_CHRG_STAYMD,		JBSbatKKIFM019.PLAN_STAYMD,				svInfo));	// プラン課金開始年月日
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.SVC_CANCEL_YMD,			JBSbatKKIFM019.SVC_CANCEL_YMD,			svInfo));	// サービスキャンセル年月日
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.IDO_DIV,				JBSbatKKIFM019.IDO_DIV,					svInfo));	// 異動区分
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.PLAN_END_SBT_CD,		JBSbatKKIFM019.PLAN_END_SBT_CD,			svInfo));	// プラン終了種別コード
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.PLAN_CHRG_ENDYMD,		JBSbatKKIFM019.PLAN_ENDYMD,				svInfo));	// プラン課金終了年月日
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.SVC_ENDYMD,				JBSbatKKIFM019.SVC_ENDYMD,				svInfo));	// サービス終了年月日
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.SVC_CHRG_ENDYMD,		JBSbatKKIFM019.SVC_CHRG_ENDYMD,			svInfo));	// サービス課金終了年月日
		}
		// 解約系項目群(ListB)ArrayList(String配列:[0]DBカラム名 [1]出力ファイル項目名 [2]DB実値)
		else if(wrkDiv == 1)
		{
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.SVC_DSL_YMD,			JBSbatKKIFM019.SVC_DSL_YMD,				svInfo));	// サービス解約年月日
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.PNLTY_HASSEI_CD,		JBSbatKKIFM019.PNLTY_HASSEI_CD,			svInfo));	// 違約金発生コード
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.SVC_DLRE_CD,			JBSbatKKIFM019.SVC_DLRE_CD,				svInfo));	// サービス解約理由
			aryList.add(setStrctVal(JBSbatKK_T_WRIB_SVC_KEI.KAIHK_YMD,				JBSbatKKIFM019.KAIHK_YMD,				svInfo));	// サービス回復年月日
		}
		// 休止系項目群(ListB)ArrayList(String配列:[0]DBカラム名 [1]出力ファイル項目名 [2]DB実値)
		else if(wrkDiv == 2)
		{
// v13.00.00 ADD START
			aryList.add(setStrctVal(JBSbatKK_T_SVC_KEI.PAUSE_STP_CD,			JBSbatKKIFM019.PAUSE_STP_CD,			svInfo));	// 休止中断コード
			aryList.add(setStrctVal(JBSbatKK_T_SVC_KEI.SVC_PAUSE_YMD,			JBSbatKKIFM019.SVC_PAUSE_YMD,			svInfo));	// サービス休止年月日
			aryList.add(setStrctVal(JBSbatKK_T_SVC_KEI.SVC_PAUSE_CHRG_STA_YMD,	JBSbatKKIFM019.SVC_PAUSE_PRC_TSTAYMD,	svInfo));	// サービス休止料金適用開始年月日
			aryList.add(setStrctVal(JBSbatKK_T_SVC_KEI.SVC_PAUSE_RLS_YMD,		JBSbatKKIFM019.SVC_PAUSE_RLS_YMD,		svInfo));	// サービス休止解除年月日
// v13.00.00 ADD END
		}
		return aryList;
	}

	/**
	 * 翌月異動情報のオミット判定をします。
	 * @param  svInfo    データ取得情報Map
	 * @return outMap    判定結果(true:有効レコード/false:不要レコード)
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean chkIdoTmg(JBSbatCommonDBInterface svInfo) throws Exception
	{
		// ++++++++++ v4.00.00 追加開始 ++++++++++ //
		// 編集前情報取得領域
		WkIdoTmgSvInfo.add(svInfo);
		// ++++++++++ v4.00.00 追加終了 ++++++++++ //
		
		// ++++++++++ v4.00.00 変更開始 ++++++++++ //
//		boolean rtnFlg = true;
		boolean rtnFlg = false;
		
		// 回復年月日
		String kfkYmd = svInfo.getString(JBSbatKK_T_WRIB_SVC_KEI.KAIHK_YMD);
		// 解約年月日
		String dslYmd = svInfo.getString(JBSbatKK_T_WRIB_SVC_KEI.SVC_DSL_YMD);
		// 課金終了年月日
		String ChrgEndYmd = svInfo.getString(JBSbatKK_T_WRIB_SVC_KEI.PLAN_CHRG_ENDYMD);
		
//		if(null != dslYmd && 0 != dslYmd.length() && dslYmd.compareTo(strEnd) > 0)
		if(null != dslYmd && 0 != dslYmd.length())
		{
			if(ChrgEndYmd.compareTo(strEnd) <= 0)
			{
				rtnFlg = true;
			}
			else
			{
				// 異動タイミングチェックリスト初期化
				initialize();
			}
			// 回復年月日が未設定の場合
		}
		else if (!(null != kfkYmd && 0 != kfkYmd.length()))
		{
			rtnFlg = true;
		}
		
//		if(null != kfkYmd && 0 != kfkYmd.length() && kfkYmd.compareTo(strEnd) > 0)
//		{
//			rtnFlg = false;
//		}
		// ++++++++++ v4.00.00 変更終了 ++++++++++ //
		
		return rtnFlg;
	}
	
	// ++++++++++ v4.00.00 追加開始 ++++++++++ //
	/**
	 * 各変数の初期化を行います。
	 */
	public void initialize() {
		// 退避リスト初期化
		WkIdoTmgSvInfo = new ArrayList<JBSbatCommonDBInterface>();
	}
	// ++++++++++ v4.00.00 追加終了 ++++++++++ //

	/**
	 * String型配列に値を設定
	 * [0]：DBカラム名
	 * [1]：出力ファイル項目名
	 * [2]：[0]のカラムのDB値
	 * @param cstName
	 * @param outName
	 * @param svInfo
	 * @return
	 * @throws Exception
	 */
	private String[] setStrctVal(String cstName, String outName, JBSbatCommonDBInterface svInfo) throws Exception
	{
		String[] strctStr = new String[3];
		
		strctStr[0] = cstName;
		strctStr[1] = outName;
		strctStr[2] = svInfo.getString(cstName);
		
		return strctStr;
	}

	/**
	 * null、空文字を判定
	 * @param str
	 * @return true:値なし／false:値あり
	 */
	private boolean isNullBlunk(String str)
	{
		if (str == null || str.equals(""))
		{
			return true;
		}
		return false;
	}

}
