/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKOpSvKeiSaiInfCht
*	ソースファイル名	：JBSbatKKOpSvKeiSaiInfCht.java
*	作成者				：富士通　
*	作成日				：2011年06月10日
*＜機能概要＞
*　オプションサービス契約差分情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/06/10   富士通		新規作成
*	v3.00.00	2012/06/28	FJ)北守		【IT2-2012-0000711】サービス開始基準対応（一時金）
*	v7.00.00	2014/03/08	FJ)星野		OM-2013-0002901
*	v8.00.00	2014/04/02	AS)安井		【OM-2014-0001368】
*	v10.00.00	2014/09/17	FJ)沖田		【OM-2014-0002915】住変時の倍額課金対応
*	v10.00.01	2014/09/25	AS)村田		【OM-2014-0003154】(OM2915資産戻しのため同修正追加)
*	v20.00.00	2015/12/09	FJ)中山		【OM-2015-0003094】性能改善
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.Set;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JBSbatKKPrcIfCommon;
import eo.business.common.JKKBatConst;
import eo.business.common.JKKbatSaiInfChtCommon;
import eo.business.util.file.JBSbatKKIFM019;
import eo.business.util.file.JBSbatKKIFM023;
import eo.business.util.file.JBSbatKKIFM682;
import eo.business.util.table.JBSbatKK_T_OPSVKEI_ISP;
import eo.business.util.table.JBSbatKK_T_OPSVKEI_TEL;
import eo.business.util.table.JBSbatKK_T_OPSVKEI_TV;
import eo.business.util.table.JBSbatKK_T_OP_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_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 JBSbatKKOpSvKeiSaiInfCht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(オプションサービス契約)*/
	private static final String D_TBL_NAME_KK_T_OP_SVC_KEI = "KK_T_OP_SVC_KEI";

//OM-2015-0003094 ADD START
	/** テーブル(オプションサービス契約<ISP>)*/
	private static final String D_TBL_NAME_KK_T_OPSVKEI_ISP = "KK_T_OPSVKEI_ISP";

	/** テーブル(オプションサービス契約<TV>)*/
	private static final String D_TBL_NAME_KK_T_OPSVKEI_TV = "KK_T_OPSVKEI_TV";
//OM-2015-0003094 ADD END

// OM-2013-0002901対応 20140308 星野 DEL START
//	/** SQL定義キー(KK_SELECT_006)*/
//	private static final String KK_T_OP_SVC_KEI_KK_SELECT_006 = "KK_SELECT_006";
// OM-2013-0002901対応 20140308 星野 DEL END

	/** SQL定義キー(KK_SELECT_091)*/
	private static final String KK_T_OP_SVC_KEI_KK_SELECT_091 = "KK_SELECT_091";

	/** SQL定義キー(KK_SELECT_068)*/
	private static final String KK_T_OP_SVC_KEI_KK_SELECT_068 = "KK_SELECT_068";

//OM-2015-0003094 DEL START
//	/** SQL定義キー(KK_SELECT_099)*/
//	private static final String KK_T_OP_SVC_KEI_KK_SELECT_099 = "KK_SELECT_099";
//
//	/** SQL定義キー(KK_SELECT_100)*/
//	private static final String KK_T_OP_SVC_KEI_KK_SELECT_100 = "KK_SELECT_100";
//OM-2015-0003094 DEL END

//OM-2015-0003094 ADD START
	/** SQL定義キー(KK_SELECT_026)*/
	private static final String KK_T_OPSVKEI_ISP_KK_SELECT_026 = "KK_SELECT_026";

	/** SQL定義キー(KK_SELECT_011)*/
	private static final String KK_T_OPSVKEI_TV_KK_SELECT_011 = "KK_SELECT_011";
//OM-2015-0003094 ADD END

	// ++++++++++ ★性能改善対応 追加開始 ++++++++++ //
	/** SQL定義キー(KK_SELECT_034)*/
	private static final String KK_T_OP_SVC_KEI_KK_SELECT_034 = "KK_SELECT_034";
	
	/** 契約数 */
	private static final int KEI_CNT = 1;
	
	// 共通クラスインスタンス生成
	private JBSbatKKPrcIfCommon prcIfCommon = null;
	// ++++++++++ ★性能改善対応 追加終了 ++++++++++ //

	/** テーブルアクセスクラス(オプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_OP_SVC_KEI = null;

//OM-2015-0003094 ADD START
	/** テーブルアクセスクラス(オプションサービス契約<ISP>)*/
	private JBSbatSQLAccess db_KK_T_OPSVKEI_ISP = null;

	/** テーブルアクセスクラス(オプションサービス契約<TV>)*/
	private JBSbatSQLAccess db_KK_T_OPSVKEI_TV = null;
//OM-2015-0003094 ADD END
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 運用月開始日保持の為の変数 */
	private String strSta = null;
	
	/** 運用月終了日保持の為の変数 */
	private String strEnd = null;
	
	/** バッチ運用日保持の為の変数 */
	private String strDate = null;
	
	/** フリー項目[処理月区分] */
	private String free = null;
// OM-2013-0002901対応 20140308 星野 ADD START
	/** フリー項目[親契約識別コード] */
	private String oyaKeiSkbtCd = null;
// OM-2013-0002901対応 20140308 星野 ADD END

	/** 前回使用のサービス契約番号 */
	private String svcKeiNo = "";

	// ++++++++++ 性能改善対応 追加開始 ++++++++++ //
	/** 差分抽出共通クラス */
	private JKKbatSaiInfChtCommon saiInfChtCmn = null;
	// ++++++++++ 性能改善対応 追加終了 ++++++++++ //

	/** 異動タイミングチェックレコード退避リスト(DBカラム名) */
	ArrayList<ArrayList<String[]>> WkIdoTmgdbcolNm = null;
	/** 異動タイミングチェックレコード退避リスト(出力ファイル項目名) */
	ArrayList<ArrayList<String[]>> WkIdoTmgOutfilecolNm = null;
	/** 異動タイミングチェックレコード退避リスト(DB実値) */
	ArrayList<ArrayList<String[]>> WkIdoTmgdbValue = null;

//OM-2015-0003094 ADD START
	/** 処理対象オプションサービス契約番号 */
	private String opSvcKeiNo = null;
	
	/** 初回レコードフラグ */
	boolean frstRecFlg = false;
	
	/** オプションサービス契約スキップフラグ */
	boolean opSvcKeiSkipFlg = false;
//OM-2015-0003094 ADD END

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_OP_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_OP_SVC_KEI);
//OM-2015-0003094 ADD START
		db_KK_T_OPSVKEI_ISP = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_OPSVKEI_ISP);
		db_KK_T_OPSVKEI_TV = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_OPSVKEI_TV);
//OM-2015-0003094 ADD END
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// 運用日付取得
		strDate = commonItem.getOpeDate();
		String ym = strDate.substring(0, 6);
		
// OM-2013-0002901対応 20140308 星野 MOD START
//		// フリー項目[処理月区分]
//		free = commonItem.getFreeItem();
		
		// フリー項目をセミコロン区切りで取得
		String[] freeItems = commonItem.getFreeItem().split(JKKBatConst.S_PARAM_DELIM);
		
		// フリー項目[処理月区分]
		if(freeItems.length > 0){
			free = freeItems[0];
		}else{
			free = "";
		}
		
		//▼▼▼OM-2014-0001368▼▼▼
		commonItem.setFreeItem(free);
		//▲▲▲OM-2014-0001368▲▲▲
		
		// フリー項目[親契約識別コード]
		if(freeItems.length > 1){
			oyaKeiSkbtCd = freeItems[1];
		}else{
			oyaKeiSkbtCd = "";
		}
// OM-2013-0002901対応 20140308 星野 MOD END
		
		// 抽出対象期間を算出
		// 運用日付から当月の月初、月末、翌月月初を算出
		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);
		// ++++++++++ 性能改善対応 追加終了 ++++++++++ //
		
		// ++++++++++ ★性能改善対応 追加開始 ++++++++++ //
		// 処理区分が従量の場合
		if (JBSbatKKConst.TRAN_TRGT_JURYO.equals(free))
		{
			// 共通クラスインスタンス生成
			prcIfCommon = new JBSbatKKPrcIfCommon(commonItem);
		}
		// ++++++++++ ★性能改善対応 追加終了 ++++++++++ //
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
//OM-2015-0003094 MOD START
//		// 抽出契約区分取得
//		String chshtKeiDiv = inMap.getString(JBSbatKKIFM023.CHSHT_KEI_DIV);
//		
//		//抽出契約区分の判定
//		if(!(JBSbatKKConst.CHSHT_KEI_DIV_20.equals(chshtKeiDiv)))
//		{
//			//オプションサービス契約以外が入っている場合はエラー
//			throw new Exception();
//		}
//		
//		// 前回と同じサービス契約番号なら処理しない
//		if (svcKeiNo.equals(inMap.getString(JBSbatKKIFM023.SVC_KEI_NO)))
//		{
//			return null;
//		}
//		svcKeiNo = inMap.getString(JBSbatKKIFM023.SVC_KEI_NO);
		JBSbatCommonDBInterface svInfo = null;
//OM-2015-0003094 MOD END
		
		// フリー項目[処理区分]が[キャンセル]の場合には個別SQLを発行
		if(JBSbatKKConst.TRAN_TRGT_CANCEL.equals(free))
		{
			// オプションサービス契約情報取得_SQLKEY(KK_SELECT_068)
			executeKK_T_OP_SVC_KEI_KK_SELECT_068(getOpSvcKei_S068Param(inMap));
		// ++++++++++ ★性能改善対応 変更開始 ++++++++++ //
		// フリー項目[処理区分]が[従量分]の場合には個別SQLを発行
		} else if (JBSbatKKConst.TRAN_TRGT_JURYO.equals(free))
		{
//OM-2015-0003094 ADD START
			// 抽出契約区分取得
			String chshtKeiDiv = inMap.getString(JBSbatKKIFM023.CHSHT_KEI_DIV);
		
			//抽出契約区分の判定
			if(!(JBSbatKKConst.CHSHT_KEI_DIV_20.equals(chshtKeiDiv)))
			{
				//オプションサービス契約以外が入っている場合はエラー
				throw new Exception();
			}
			
			// 前回と同じサービス契約番号なら処理しない
			if (svcKeiNo.equals(inMap.getString(JBSbatKKIFM023.SVC_KEI_NO)))
			{
				return null;
			}
			svcKeiNo = inMap.getString(JBSbatKKIFM023.SVC_KEI_NO);
//OM-2015-0003094 ADD END
			
			// サービス契約情報取得_SQLKEY(KK_SELECT_034)
			executeKK_T_OP_SVC_KEI_KK_SELECT_034(getSvcKei_S034Param(inMap));
		// ++++++++++ ★性能改善対応 変更終了 ++++++++++ //
		// フリー項目[処理区分]が[開始済]の場合には個別SQLを発行
		} else if (JBSbatKKConst.TRAN_TRGT_KAISHI.equals(free))
		{
			// サービス契約情報取得_SQLKEY(KK_SELECT_091)
			executeKK_T_OP_SVC_KEI_KK_SELECT_091(getOpSvcKei_S091Param(inMap));
		}
		else
		{
// OM-2013-0002901対応 20140308 星野 DEL START
//			// オプションサービス契約情報取得_SQLKEY(KK_SELECT_006)
//			executeKK_T_OP_SVC_KEI_KK_SELECT_006(getOpSvcKei_S006Param(inMap));
//			
//			// ++++++++++ 性能改善対応 変更開始 ++++++++++ //
//			JBSbatCommonDBInterface svInfoSub = db_KK_T_OP_SVC_KEI.selectNext();
//			// 取得件数が0件の場合には後続処理不要
//			if(svInfoSub == null)
//			{
//				return null;
//			}
//			
//			String oyaKeiSkbtCd = svInfoSub.getString(JBSbatKK_T_OP_SVC_KEI.OYA_KEI_SKBT_CD);
// OM-2013-0002901対応 20140308 星野 DEL END
//OM-2015-0003094 MOD START
//			if (JBSbatKKConst.OYA_KEI_SKBT_CD_SVC_KEI.equals(oyaKeiSkbtCd))
//			{
//				executeKK_T_OP_SVC_KEI_KK_SELECT_099(getOpSvcKei_S099Param(inMap));
//			}
//			else if (JBSbatKKConst.OYA_KEI_SKBT_CD_SVC_KEI_UCWK.equals(oyaKeiSkbtCd))
//			{
//				executeKK_T_OP_SVC_KEI_KK_SELECT_100(getOpSvcKei_S100Param(inMap));
//			}
//			else 
//			{
//				return null;
//			}
//			// ++++++++++ 性能改善対応 変更終了 ++++++++++ //
			// JBSbatServiceInterfaceMapオブジェクトのデータを、JBSbatCommonDBInterfaceオブジェクトに転送
			svInfo = new JBSbatCommonDBInterface();
			Set<String> keys = (Set<String>)inMap.getMap().keySet();
			for (String key : keys)
			{
				svInfo.setValue(key, inMap.get(key));
			}
			
			// 親契約識別コードが「サービス契約」で料金プランが「ケーブルガイド誌」の場合はオプションサービス契約<TV>、
			// 　親契約識別コードが「サービス契約内訳」で料金プランが「マルチセッション」の場合はオプションサービス契約<ISP>からデータを取得する。
			if (JBSbatKKConst.SKBT_SVC.equals(oyaKeiSkbtCd)
					&& JBSbatKKConst.CD00565_CABLE_GUDMG.equals(inMap.getString(JBSbatKKIFM682.PPLAN_CD)))
			{
				executeKK_T_OPSVKEI_TV_KK_SELECT_011(getOpSvcKeiTv_S011Param(inMap));
				JBSbatCommonDBInterface dbMap = db_KK_T_OPSVKEI_TV.selectNext();
				if (null != dbMap)
				{
					svInfo.setValue(JBSbatKK_T_OPSVKEI_TV.CABLE_GUIDE_MSKM_CNT,
							dbMap.getString(JBSbatKK_T_OPSVKEI_TV.CABLE_GUIDE_MSKM_CNT));
				}
			}
			else if (JBSbatKKConst.SKBT_UTWK.equals(oyaKeiSkbtCd)
					&& JBSbatKKConst.CD00565_MLTISE.equals(inMap.getString(JBSbatKKIFM682.PPLAN_CD)))
			{
				executeKK_T_OPSVKEI_ISP_KK_SELECT_026(getOpSvcKeiIsp_S026Param(inMap));
				JBSbatCommonDBInterface dbMap = db_KK_T_OPSVKEI_ISP.selectNext();
				if (null != dbMap)
				{
					svInfo.setValue(JBSbatKK_T_OPSVKEI_ISP.MLTISE_SESSION_CNT,
							dbMap.getString(JBSbatKK_T_OPSVKEI_ISP.MLTISE_SESSION_CNT));
				}
			}
//OM-2015-0003094 MOD END
		}
		
//OM-2015-0003094 DEL START
//		// 抽出結果取得
//		// ++++++++++ 性能改善対応 変更開始 ++++++++++ //
////		JBSbatCommonDBInterface svInfo = new JBSbatCommonDBInterface();
////		svInfo = db_KK_T_OP_SVC_KEI.selectNext();
//		JBSbatCommonDBInterface svInfo = db_KK_T_OP_SVC_KEI.selectNext();
//		// ++++++++++ 性能改善対応 変更終了 ++++++++++ //
//		
//		// 取得件数が0件の場合には後続処理不要
//		if(svInfo == null)
//		{
//			return null;
//		}
//OM-2015-0003094 DEL END
		
		// 出力情報格納領域
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		// ++++++++++ ★性能改善対応 追加開始 ++++++++++ //
		// 出力情報Map
		JBSbatServiceInterfaceMap outMap = null;
		
		// フリー項目[処理区分]が[従量分]の場合には個別出力処理を実行
		if (JBSbatKKConst.TRAN_TRGT_JURYO.equals(free))
		{
//OM-2015-3094 ADD START
			// 抽出結果取得
			svInfo = db_KK_T_OP_SVC_KEI.selectNext();
			
			// 取得件数が0件の場合には後続処理不要
			if(svInfo == null)
			{
				return null;
			}
//OM-2015-3094 ADD END
			
			while(svInfo != null)
			{
				// 料金計算用サービス契約情報レコードの作成 */
				outMap = setOutMap(svInfo);
				
				// ファイル編集にて基本情報のサービス契約番号が取得できなかった場合
				if (outMap == null)
				{
					// 出力領域にnullを返却する
					return null;
				}
				
				// オプションサービス従量キー(公衆網電話番号)
				String telNo = outMap.getString(JBSbatKKIFM019.TELNO);
				
				if(null == telNo || 0 == telNo.length())
				{
					// 処理なし
				} else
				{
					// 出力フラグをON
					outMap.setOutFlg(true);
					// 出力データを格納
					outputBean.addOutMapList(outMap);
				}
				// 次レコード取得
				svInfo = db_KK_T_OP_SVC_KEI.selectNext();
			}
			return outputBean;
		}
		// ++++++++++ ★性能改善対応 追加終了 ++++++++++ //
		
//OM-2015-0003094 MOD START
//		// ++++++++++ 性能改善対応 変更開始 ++++++++++ //
////		// 差分情報抽出共通クラスインスタンス生成
////		// ++++++++++ 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;
//		
//		// 異動タイミングチェックリスト初期化
//		initialize();
		// 初回処理、もしくは処理対象オプションサービス契約番号が前回処理から変わる場合は
		// 初期化処理を行なう。
		if (null == opSvcKeiNo || !opSvcKeiNo.equals(inMap.getString(JBSbatKKIFM682.OP_SVC_KEI_NO)))
		{
			if (null != opSvcKeiNo)
			{
				// 編集情報作成
				saiInfChtCmn.makeEditInf();
				// 出力情報編集
				saiInfChtCmn.editSaiInf(outputBean);
			}
			
			// 差分情報抽出共通クラス初期化
			saiInfChtCmn.initialize();
			// バッチ運用月月初設定
			saiInfChtCmn.setStrSta(strSta);
			// 抽出契約区分設定
			saiInfChtCmn.setChshtKeiDiv(JBSbatKKConst.CHSHT_KEI_DIV_20);
			// 初回レコードフラグ
			frstRecFlg = true;
			// オプションサービス契約スキップフラグ
			opSvcKeiSkipFlg = false;
			// 異動タイミングチェックリスト初期化
			initialize();
			
			opSvcKeiNo = svInfo.getString(JBSbatKKIFM682.OP_SVC_KEI_NO);
		}
		
		// 住変時の倍額課金対応
		// プラン開始年月日が未設定の場合、編集不要
		// 解約回復時もプラン開始年月日は設定されているため、この対応によりデータが欠落することはない
		String planStaYmd = svInfo.getString(JBSbatKK_T_OP_SVC_KEI.PLAN_STAYMD);
		if (opSvcKeiSkipFlg || (null == planStaYmd || "".equals(planStaYmd)))
		{
			opSvcKeiSkipFlg = true;
			if (super.commonItem.isEndRecordFlg())
			{
				// 編集情報作成
				saiInfChtCmn.makeEditInf();
				// 出力情報編集
				saiInfChtCmn.editSaiInf(outputBean);
			}
			return outputBean;
		}
//OM-2015-0003094 MOD END
		
		// 抽出結果全件について出力情報を編集
//OM-2015-0003094 MOD START
//		while(svInfo != null)
		if (null != svInfo)
//OM-2015-0003094 MOD END
		{
//OM-2015-0003094 DEL START
//			// OM-2014-0003154 ADD START
//			// 住変時の倍額課金対応
//			// プラン開始年月日が未設定の場合、編集不要
//			// 解約回復時もプラン開始年月日は設定されているため、この対応によりデータが欠落することはない
//			if (null == svInfo.getString(JBSbatKK_T_OP_SVC_KEI.PLAN_STAYMD))
//			{
//				break;
//			}
//			// OM-2014-0003154 ADD END
//OM-2015-0003094 DEL END
			
			// 異動タイミングチェック(翌月分の解約回復は連携対象外)
			if(chkIdoTmg(svInfo))
			{
				// チェック結果にて出力対象レコードが存在する場合
				for(int i=0; i < WkIdoTmgdbcolNm.size(); i++)
				{
					if(frstRecFlg)
					{
						// 集約情報作成(初回レコード)
						saiInfChtCmn.makeSykInf(WkIdoTmgdbcolNm.get(i), WkIdoTmgOutfilecolNm.get(i), WkIdoTmgdbValue.get(i), true);
						frstRecFlg = false;
					}
					else
					{
						// 集約情報作成(N件目レコード)
						saiInfChtCmn.makeSykInf(WkIdoTmgdbcolNm.get(i), WkIdoTmgOutfilecolNm.get(i), WkIdoTmgdbValue.get(i), false);
					}
				}
				
				// 異動タイミングチェックリスト初期化
				initialize();
			}
//OM-2015-0003094 DEL START
//			// 次レコード取得
//			svInfo = db_KK_T_OP_SVC_KEI.selectNext();
//OM-2015-0003094 DEL END
		}
		
//OM-2015-0003094 MOD START
//		// 編集情報作成
//		saiInfChtCmn.makeEditInf();
//		
//		// 出力情報編集
//		saiInfChtCmn.editSaiInf(outputBean);
		if (super.commonItem.isEndRecordFlg())
		{
			// 編集情報作成
			saiInfChtCmn.makeEditInf();
			// 出力情報編集
			saiInfChtCmn.editSaiInf(outputBean);
		}
//OM-2015-0003094 MOD END
		
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_OP_SVC_KEI.close();
//OM-2015-0003094 ADD START
		db_KK_T_OPSVKEI_ISP.close();
		db_KK_T_OPSVKEI_TV.close();
//OM-2015-0003094 ADD END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/

		// ++++++++++ 性能改善対応 追加開始 ++++++++++ //
		saiInfChtCmn.close();
		// ++++++++++ 性能改善対応 追加終了 ++++++++++ //
		
		// ++++++++++ ★性能改善対応 追加開始 ++++++++++ //
		// 処理区分が従量の場合
		if (JBSbatKKConst.TRAN_TRGT_JURYO.equals(free))
		{
			// 共通クラスクローズ
			prcIfCommon.close();
		}
		// ++++++++++ ★性能改善対応 追加終了 ++++++++++ //
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
// OM-2013-0002901対応 20140308 星野 DEL START
//	/**
//	 * SQLKEY(KK_SELECT_006)で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_OP_SVC_KEI_KK_SELECT_006(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_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KK_SELECT_006);
//	}
// OM-2013-0002901対応 20140308 星野 DEL END

	// ++++++++++ ★性能改善対応 追加開始 ++++++++++ //
	/**
	 * SQLKEY(KK_SELECT_034)で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_OP_SVC_KEI_KK_SELECT_034(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_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KK_SELECT_034);
	}
	// ++++++++++ ★性能改善対応 追加終了 ++++++++++ //

	/**
	 * SQLKEY(KK_SELECT_091)で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_OP_SVC_KEI_KK_SELECT_091(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_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KK_SELECT_091);
	}

	/**
	 * SQLKEY(KK_SELECT_068)で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_OP_SVC_KEI_KK_SELECT_068(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());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());
		paramList.setValue(param[10].toString());
		paramList.setValue(param[11].toString());
		paramList.setValue(param[12].toString());
		
		// DBアクセスを実行します
		db_KK_T_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KK_SELECT_068);
	}

//OM-2015-0003094 DEL START
//	/**
//	 * SQLKEY(KK_SELECT_099)で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_OP_SVC_KEI_KK_SELECT_099(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_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KK_SELECT_099);
//	}
//
//	/**
//	 * SQLKEY(KK_SELECT_100)で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_OP_SVC_KEI_KK_SELECT_100(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_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KK_SELECT_100);
//	}
//OM-2015-0003094 DEL END

//OM-2015-0003094 ADD START

	/**
	 * 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_OPSVKEI_ISP_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_OPSVKEI_ISP.selectBySqlDefine(paramList, KK_T_OPSVKEI_ISP_KK_SELECT_026);
	}

	/**
	 * SQLKEY(KK_SELECT_011)で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_OPSVKEI_TV_KK_SELECT_011(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		
		// DBアクセスを実行します
		db_KK_T_OPSVKEI_TV.selectBySqlDefine(paramList, KK_T_OPSVKEI_TV_KK_SELECT_011);
	}
//OM-2015-0003094 ADD END
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

// OM-2013-0002901対応 20140308 星野 DEL START
//	/**
//	 * SQLKEY(KK_SELECT_006)でDBアクセスを実行する際に必要なパラメータを設定します。<br>
//	 * <p>
//	 * <b>処理フロー</b><br>
//	 * <pre>
//	 * 1.パラメータ設定処理。
//	 * </pre>
//	 * <p>
//	 * @param inMap 入力電文
//	 * @return param SQLKEY(KK_SELECT_006)でDBアクセスを実行する際に必要なパラメータ
//	 * @throws Exception 
//	 */
//	private Object[] getOpSvcKei_S006Param(JBSbatServiceInterfaceMap inMap) throws Exception
//	{
//		Object[] ret_Param = {
//				inMap.getString(JBSbatKKIFM023.SVC_KEI_NO),
//				strDate,
//				JBSbatKKConst.APLY_STAT_RENKEI
//		};
//		return ret_Param;
//	}
// OM-2013-0002901対応 20140308 星野 DEL END

	// ++++++++++ ★性能改善対応 追加開始 ++++++++++ //
	/**
	 * SQLKEY(KK_SELECT_034)でDBアクセスを実行する際に必要なパラメータを設定します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.パラメータ設定処理。
	 * </pre>
	 * <p>
	 * @param inMap 入力電文
	 * @return param SQLKEY(KK_SELECT_034)でDBアクセスを実行する際に必要なパラメータ
	 * @throws Exception 
	 */
	private Object[] getSvcKei_S034Param(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		Object[] ret_Param = {
				strDate,
				strDate,
				strDate,
				strDate,
				inMap.getString(JBSbatKKIFM023.SVC_KEI_NO)
		};
		return ret_Param;
	}
	// ++++++++++ ★性能改善対応 追加終了 ++++++++++ //

	/**
	 * SQLKEY(KK_SELECT_091)でDBアクセスを実行する際に必要なパラメータを設定します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.パラメータ設定処理。
	 * </pre>
	 * <p>
	 * @param inMap 入力電文
	 * @return param SQLKEY(KK_SELECT_091)でDBアクセスを実行する際に必要なパラメータ
	 * @throws Exception 
	 */
	private Object[] getOpSvcKei_S091Param(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		Object[] ret_Param = {
				strDate,
				strDate,
				strDate,
				inMap.getString(JBSbatKKIFM023.SVC_KEI_NO),
				strDate,
				strDate,
				inMap.getString(JBSbatKKIFM023.SVC_KEI_NO)
		};
		return ret_Param;
	}

	/**
	 * SQLKEY(KK_SELECT_068)でDBアクセスを実行する際に必要なパラメータを設定します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.パラメータ設定処理。
	 * </pre>
	 * <p>
	 * @param inMap 入力電文
	 * @return param SQLKEY(KK_SELECT_068)でDBアクセスを実行する際に必要なパラメータ
	 * @throws Exception 
	 */
	private Object[] getOpSvcKei_S068Param(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		Object[] ret_Param = {
				JBSbatKKConst.SKBT_SVC,
				JBSbatKKConst.APLY_STAT_RENKEI,
				JBSbatKKConst.APLY_STAT_RENKEI,
				JBSbatKKConst.APLY_STAT_RENKEI,
				inMap.getString(JBSbatKKIFM023.SVC_KEI_NO),
				strDate,
				JBSbatKKConst.SKBT_UTWK,
				JBSbatKKConst.APLY_STAT_RENKEI,
				JBSbatKKConst.APLY_STAT_RENKEI,
				JBSbatKKConst.APLY_STAT_RENKEI,
				JBSbatKKConst.APLY_STAT_RENKEI,
				inMap.getString(JBSbatKKIFM023.SVC_KEI_NO),
				strDate
		};
		return ret_Param;
	}

//OM-2015-0003094 DEL START
//	/**
//	 * SQLKEY(KK_SELECT_099)でDBアクセスを実行する際に必要なパラメータを設定します。<br>
//	 * <p>
//	 * <b>処理フロー</b><br>
//	 * <pre>
//	 * 1.パラメータ設定処理。
//	 * </pre>
//	 * <p>
//	 * @param inMap 入力電文
//	 * @return param SQLKEY(KK_SELECT_099)でDBアクセスを実行する際に必要なパラメータ
//	 * @throws Exception 
//	 */
//	private Object[] getOpSvcKei_S099Param(JBSbatServiceInterfaceMap inMap) throws Exception
//	{
//		Object[] ret_Param = {
//				JBSbatKKConst.APLY_STAT_RENKEI,
//				JBSbatKKConst.SKBT_SVC,
//				inMap.getString(JBSbatKKIFM023.SVC_KEI_NO),
//				strDate,
//				JBSbatKKConst.APLY_STAT_RENKEI
//		};
//		return ret_Param;
//	}
//
//	/**
//	 * SQLKEY(KK_SELECT_100)でDBアクセスを実行する際に必要なパラメータを設定します。<br>
//	 * <p>
//	 * <b>処理フロー</b><br>
//	 * <pre>
//	 * 1.パラメータ設定処理。
//	 * </pre>
//	 * <p>
//	 * @param inMap 入力電文
//	 * @return param SQLKEY(KK_SELECT_100)でDBアクセスを実行する際に必要なパラメータ
//	 * @throws Exception 
//	 */
//	private Object[] getOpSvcKei_S100Param(JBSbatServiceInterfaceMap inMap) throws Exception
//	{
//		Object[] ret_Param = {
//				JBSbatKKConst.APLY_STAT_RENKEI,
//				strDate,
//				JBSbatKKConst.APLY_STAT_RENKEI,
//				JBSbatKKConst.SKBT_UTWK,
//				inMap.getString(JBSbatKKIFM023.SVC_KEI_NO),
//				strDate,
//				JBSbatKKConst.APLY_STAT_RENKEI
//		};
//		return ret_Param;
//	}
//OM-2015-0003094 DEL END

//OM-2015-0003094 ADD START

	/**
	 * SQLKEY(KK_SELECT_026)でDBアクセスを実行する際に必要なパラメータを設定します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.パラメータ設定処理。
	 * </pre>
	 * <p>
	 * @param inMap 入力電文
	 * @return param SQLKEY(KK_SELECT_026)でDBアクセスを実行する際に必要なパラメータ
	 * @throws Exception 
	 */
	private Object[] getOpSvcKeiIsp_S026Param(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		Object[] ret_Param = {
				inMap.getString(JBSbatKKIFM682.OP_SVC_KEI_NO),
				inMap.getString(JBSbatKKIFM682.GENE_ADD_DTM)
		};
		return ret_Param;
	}

	/**
	 * SQLKEY(KK_SELECT_011)でDBアクセスを実行する際に必要なパラメータを設定します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.パラメータ設定処理。
	 * </pre>
	 * <p>
	 * @param inMap 入力電文
	 * @return param SQLKEY(KK_SELECT_011)でDBアクセスを実行する際に必要なパラメータ
	 * @throws Exception 
	 */
	private Object[] getOpSvcKeiTv_S011Param(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		Object[] ret_Param = {
				inMap.getString(JBSbatKKIFM682.OP_SVC_KEI_NO),
				inMap.getString(JBSbatKKIFM682.GENE_ADD_DTM)
		};
		return ret_Param;
	}
//OM-2015-0003094 ADD END

	/**
	 * 比較・出力対象情報作成処理
	 * @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)
		{
			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_SVC_KEI.SVC_CD,							JBSbatKKIFM019.SVC_CD,						svInfo));		 // サービスコード
			aryList.add(setStrctVal(JBSbatKK_T_SVC_KEI.PRC_GRP_CD,						JBSbatKKIFM019.PRC_GRP_CD,					svInfo));		 // 料金グループコード
			aryList.add(setStrctVal(JBSbatKK_T_SVC_KEI.PCRS_CD,							JBSbatKKIFM019.PCRS_CD,						svInfo));		 // 料金コースコード
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.PPLAN_CD,						JBSbatKKIFM019.PPLAN_CD,					svInfo));		 // 料金プランコード
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.OP_SVC_CD,					JBSbatKKIFM019.TRGT_KEI_SVC_CD,				svInfo));		 // オプションサービスコード
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_UCWK_NO,				JBSbatKKIFM019.SVC_KEI_UCWK_NO,				svInfo));		 // サービス契約内訳番号
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.OP_SVC_KEI_NO,				JBSbatKKIFM019.OP_SVC_KEI_NO,				svInfo));		 // オプションサービス契約番号
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.SVC_STAYMD,					JBSbatKKIFM019.SVC_STAYMD,					svInfo));		 // サービス開始年月日
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.SVC_CHRG_STAYMD,				JBSbatKKIFM019.SVC_CHRG_STAYMD,				svInfo));		 // サービス課金開始年月日
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.PLAN_CHRG_STAYMD,				JBSbatKKIFM019.PLAN_STAYMD,					svInfo));		 // プラン課金開始年月日
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.IDO_DIV,						JBSbatKKIFM019.IDO_DIV,						svInfo));		 // 異動区分
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.PLAN_END_SBT_CD,				JBSbatKKIFM019.PLAN_END_SBT_CD,				svInfo));		 // プラン終了種別コード
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.PLAN_CHRG_ENDYMD,				JBSbatKKIFM019.PLAN_ENDYMD,					svInfo));		 // プラン課金終了年月日
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.SVC_CANCEL_YMD,				JBSbatKKIFM019.SVC_CANCEL_YMD,				svInfo));		 // サービスキャンセル年月日
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.SVC_ENDYMD,					JBSbatKKIFM019.SVC_ENDYMD,					svInfo));		 // サービス終了年月日
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.SVC_CHRG_ENDYMD,				JBSbatKKIFM019.SVC_CHRG_ENDYMD,				svInfo));		 // サービス課金終了年月日
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.UPD_UNYO_YMD,					JBSbatKKIFM019.UPD_UNYO_YMD,				svInfo));		 // 更新運用年月日
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.GENE_ADD_DTM,					JBSbatKKIFM019.GENE_ADD_DTM,				svInfo));		 // 世代登録年月日時分秒
			
			String mltiseSession = svInfo.getString(JBSbatKK_T_OPSVKEI_ISP.MLTISE_SESSION_CNT);
			String cableGuide = svInfo.getString(JBSbatKK_T_OPSVKEI_TV.CABLE_GUIDE_MSKM_CNT);
			
			if(null != mltiseSession)
			{
				String[] strCapa =new String[3];
				strCapa[0] = "";
				strCapa[1] = JBSbatKKIFM019.CAPA;
				strCapa[2] = mltiseSession;
			
				String[] strTeizoDiv = new String[3];
				strTeizoDiv[0] = "";
				strTeizoDiv[1] = JBSbatKKIFM019.TEIZO_KMK_DIV;
				strTeizoDiv[2] = JBSbatKKConst.TZKMK_MLTISE_SESSION_CNT;
			
				aryList.add(strCapa);
				aryList.add(strTeizoDiv);
			}
			else if(null != cableGuide)
			{
				String[] strCapa =new String[3];
				strCapa[0] = "";
				strCapa[1] = JBSbatKKIFM019.CAPA;
				strCapa[2] = cableGuide;
			
				String[] strTeizoDiv = new String[3];
				strTeizoDiv[0] = "";
				strTeizoDiv[1] = JBSbatKKIFM019.TEIZO_KMK_DIV;
				strTeizoDiv[2] = JBSbatKKConst.TZKMK_CABLE_GUIDE_MSKM_CNT;
			
				aryList.add(strCapa);			// 容量
				aryList.add(strTeizoDiv);		// 逓増項目区分
			
			}
		}
		// 解約系項目群(ListB)ArrayList(String配列:[0]DBカラム名 [1]出力ファイル項目名 [2]DB実値)
		else if(wrkDiv == 1)
		{
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.SVC_DSL_YMD,				JBSbatKKIFM019.SVC_DSL_YMD,				svInfo));	// サービス解約年月日
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.PNLTY_HASSEI_CD,			JBSbatKKIFM019.PNLTY_HASSEI_CD,			svInfo));	// 違約金発生コード
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.SVC_DLRE_CD,				JBSbatKKIFM019.SVC_DLRE_CD,				svInfo));	// サービス解約理由
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.KAIHK_YMD,				JBSbatKKIFM019.KAIHK_YMD,				svInfo));	// サービス回復年月日
		}
		// 休止系項目群(ListB)ArrayList(String配列:[0]DBカラム名 [1]出力ファイル項目名 [2]DB実値)
		else if(wrkDiv == 2)
		{
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.PAUSE_STP_CD,				JBSbatKKIFM019.PAUSE_STP_CD,			svInfo));	// 休止中断コード
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.SVC_PAUSE_YMD,			JBSbatKKIFM019.SVC_PAUSE_YMD,			svInfo));	// サービス休止年月日
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.SVC_PAUSE_CHRG_STA_YMD,	JBSbatKKIFM019.SVC_PAUSE_PRC_TSTAYMD,	svInfo));	// サービス休止料金適用開始年月日
			aryList.add(setStrctVal(JBSbatKK_T_OP_SVC_KEI.SVC_PAUSE_RLS_YMD,		JBSbatKKIFM019.SVC_PAUSE_RLS_YMD,		svInfo));	// サービス休止解除年月日
		}
		return aryList;
	}

	// ++++++++++ ★性能改善対応 追加開始 ++++++++++ //
	/**
	 * <dd>メソッド名	：ファイル編集
	 * <dd>メソッド説明	：1.ファイル編集対象項目を取得します。
	 *                    2.取得した項目を元にファイル編集を行います。
	 * @param  svInfo    データ取得情報Map
	 * @return outMap    出力Map
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap setOutMap(JBSbatCommonDBInterface svInfo) throws Exception 
	{
		// 出力情報を設定するMap
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
		
		outmap.setString(JBSbatKKIFM019.CHSHT_KEI_DIV, JKKBatConst.CHSHT_KEI_DIV_20);											//抽出契約区分
		outmap.setString(JBSbatKKIFM019.SVC_KEI_NO, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_NO));						//サービス契約番号
		outmap.setString(JBSbatKKIFM019.SVC_CD, svInfo.getString(JBSbatKK_T_SVC_KEI.SVC_CD));									//サービスコード
		outmap.setString(JBSbatKKIFM019.PRC_GRP_CD, svInfo.getString(JBSbatKK_T_SVC_KEI.PRC_GRP_CD));							//料金グループコード
		outmap.setString(JBSbatKKIFM019.PCRS_CD, svInfo.getString(JBSbatKK_T_SVC_KEI.PCRS_CD));									//料金コースコード
		outmap.setString(JBSbatKKIFM019.PPLAN_CD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.PPLAN_CD));							//料金プランコード
		outmap.setString(JBSbatKKIFM019.TRGT_KEI_SVC_CD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.OP_SVC_CD));					//オプションサービスコード		
		outmap.setString(JBSbatKKIFM019.SVC_KEI_UCWK_NO, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_UCWK_NO));				//サービス契約内訳番号
		outmap.setString(JBSbatKKIFM019.OP_SVC_KEI_NO, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.OP_SVC_KEI_NO));					//オプションサービス契約番号
		outmap.setString(JBSbatKKIFM019.SVC_STAYMD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_STAYMD));						//サービス開始年月日
		outmap.setString(JBSbatKKIFM019.SVC_CHRG_STAYMD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_CHRG_STAYMD));				//サービス課金開始年月日
		outmap.setString(JBSbatKKIFM019.PLAN_STAYMD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.PLAN_CHRG_STAYMD));					//プラン課金開始年月日
		outmap.setString(JBSbatKKIFM019.PLAN_ENDYMD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.PLAN_CHRG_ENDYMD));					//プラン課金終了年月日
		outmap.setString(JBSbatKKIFM019.SVC_DSL_YMD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_DSL_YMD));						//サービス解約年月日
		outmap.setString(JBSbatKKIFM019.SVC_DLRE_CD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_DLRE_CD));						//サービス解約理由コード
		outmap.setString(JBSbatKKIFM019.PNLTY_HASSEI_CD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.PNLTY_HASSEI_CD));	 			//違約金発生コード
		outmap.setString(JBSbatKKIFM019.PLAN_END_SBT_CD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.PLAN_END_SBT_CD));	 			//プラン終了種別コード
		outmap.setString(JBSbatKKIFM019.KAIHK_YMD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.KAIHK_YMD));							//回復年月日
		outmap.setString(JBSbatKKIFM019.SVC_ENDYMD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_ENDYMD));						//サービス終了年月日
		outmap.setString(JBSbatKKIFM019.SVC_CHRG_ENDYMD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_CHRG_ENDYMD));				//サービス課金終了年月日
		outmap.setString(JBSbatKKIFM019.IDO_DIV, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.IDO_DIV));								//異動区分
		outmap.setString(JBSbatKKIFM019.TELNO, svInfo.getString(JBSbatKK_T_OPSVKEI_TEL.N_050_OP_TELNO));						//電話番号
		outmap.setBigDecimal(JBSbatKKIFM019.KEI_CNT, KEI_CNT);																	//契約数
		outmap.setString(JBSbatKKIFM019.SEIRI_NO, svInfo.getString(JBSbatKK_T_SVC_KEI.SEIRI_NO));								//整理番号
		outmap.setString(JBSbatKKIFM019.UPD_UNYO_YMD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.UPD_UNYO_YMD));					//更新運用年月日
		outmap.setString(JBSbatKKIFM019.GENE_ADD_DTM, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.GENE_ADD_DTM));					//世代登録年月日時分秒
		
		// 休止・中断情報(中断レコードの場合には設定不要)
		if(!JBSbatKKConst.PAUSE_STP_CD_STP.equals(svInfo.getString(JBSbatKK_T_OP_SVC_KEI.PAUSE_STP_CD)))
		{
			outmap.setString(JBSbatKKIFM019.PAUSE_STP_CD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.PAUSE_STP_CD));					//休止中断コード
			outmap.setString(JBSbatKKIFM019.SVC_PAUSE_YMD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_PAUSE_YMD));					//サービス休止年月日
			outmap.setString(JBSbatKKIFM019.SVC_PAUSE_PRC_TSTAYMD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_PAUSE_CHRG_STA_YMD));	//サービス休止課金開始年月日
			outmap.setString(JBSbatKKIFM019.SVC_PAUSE_RLS_YMD, svInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_PAUSE_RLS_YMD));			//サービス休止解除年月日
		}
		
		// オプションサービス逓増料金項目対応
		outmap = setTeizoKmk(outmap, svInfo);
		
		// [従量分]または[開始基準]の処理の場合、付与する基本契約情報を別途特定(プラン変更時対応)
		if(JBSbatKKConst.TRAN_TRGT_KAISHI.equals(free) || JBSbatKKConst.TRAN_TRGT_JURYO.equals(free))
		{
			// 適用対象となる基本契約の情報を取得(プラン変更時対応)
			JBSbatCommonDBInterface svcKeiInf = prcIfCommon.getSvcKeiInf(outmap.getString(JBSbatKKIFM019.SVC_KEI_NO));
			
			// 基本契約の契約番号が取得できなかった場合
			if(svcKeiInf == null)
			{
				// 出力領域にnullを設定し返却
				return null;
			}
			
			outmap.setString(JBSbatKKIFM019.SVC_CD, svcKeiInf.getString(JBSbatKK_T_SVC_KEI.SVC_CD));			//サービスコード
			outmap.setString(JBSbatKKIFM019.PRC_GRP_CD, svcKeiInf.getString(JBSbatKK_T_SVC_KEI.PRC_GRP_CD));	//料金グループコード
			outmap.setString(JBSbatKKIFM019.PCRS_CD, svcKeiInf.getString(JBSbatKK_T_SVC_KEI.PCRS_CD));			//料金コースコード
			outmap.setString(JBSbatKKIFM019.SEIRI_NO, svcKeiInf.getString(JBSbatKK_T_SVC_KEI.SEIRI_NO)); 		//整理番号
		}
		return outmap;
	}
	// ++++++++++ ★性能改善対応 追加終了 ++++++++++ //
	
	/**
	 * <dd>メソッド名	：逓増料金項目対応
	 * <dd>メソッド説明	：1.サブタイプから取得された逓増項目の契約数量を設定します。
	 *                    2.後続処理(サービス契約情報サービス集約)用に逓増項目ごとに項目区分を設定します。
	 * @param  inMap     データ取得情報Map
	 * @param  outMap    編集前出力Map
	 * @return outMap    編集後出力Map
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap setTeizoKmk(JBSbatServiceInterfaceMap outMap, JBSbatCommonDBInterface svInfo) throws Exception 
	{
		// マルチセッション数
		if(null != svInfo.getBigDecimal(JBSbatKK_T_OPSVKEI_ISP.MLTISE_SESSION_CNT))
		{
			outMap.setBigDecimal(JBSbatKKIFM019.CAPA, svInfo.getBigDecimal(JBSbatKK_T_OPSVKEI_ISP.MLTISE_SESSION_CNT));		//容量
			outMap.setString(JBSbatKKIFM019.TEIZO_KMK_DIV, JBSbatKKConst.TZKMK_MLTISE_SESSION_CNT);							//逓増項目区分
		}
		// ケーブルガイド誌申込数
		else if(null != svInfo.getBigDecimal(JBSbatKK_T_OPSVKEI_TV.CABLE_GUIDE_MSKM_CNT))
		{
			outMap.setBigDecimal(JBSbatKKIFM019.CAPA, svInfo.getBigDecimal(JBSbatKK_T_OPSVKEI_TV.CABLE_GUIDE_MSKM_CNT));		//容量
			outMap.setString(JBSbatKKIFM019.TEIZO_KMK_DIV, JBSbatKKConst.TZKMK_CABLE_GUIDE_MSKM_CNT);						//逓増項目区分
		}
		
		return outMap;
	}

	/**
	 * 翌月異動情報のオミット判定をします。
	 * @param  svInfo    データ取得情報Map
	 * @return outMap    判定結果(true:有効レコード/false:不要レコード)
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean chkIdoTmg(JBSbatCommonDBInterface svInfo) throws Exception
	{
		boolean rtnFlg = false;
		
		// 編集前情報取得(DBカラム名)
		WkIdoTmgdbcolNm.add(getKeyList(svInfo,0));
		// 編集前情報取得領域(出力ファイル項目名)
		WkIdoTmgOutfilecolNm.add(getKeyList(svInfo,1));
		// 編集前情報取得領域(DB実値)
		WkIdoTmgdbValue.add(getKeyList(svInfo,2));
		
		// 回復年月日
		String kihkYmd = svInfo.getString(JBSbatKK_T_OP_SVC_KEI.KAIHK_YMD);
		// 解約年月日
		String dslYmd = svInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_DSL_YMD);
		// 課金終了年月日
		String chrgEndYmd = svInfo.getString(JBSbatKK_T_OP_SVC_KEI.PLAN_CHRG_ENDYMD);
		// 解約年月日が設定されている場合
		if(null != dslYmd && 0 != dslYmd.length())
		{
			// 課金終了日が月末以前だった場合
			if(chrgEndYmd.compareTo(strEnd) <= 0)
			{
				rtnFlg = true;
			} else
			{
				// 異動タイミングチェックリスト初期化
				initialize();
			}
			
		// 回復年月日が未設定の場合
		} else if (!(null != kihkYmd && 0 != kihkYmd.length()))
		{
			rtnFlg = true;
		}
		
		return rtnFlg;
	}

	/**
	 * 各変数の初期化を行います。
	 */
	public void initialize() {
		// ネットレコード退避リスト(DBカラム名)
		WkIdoTmgdbcolNm = new ArrayList<ArrayList<String[]>>();
		// ネットレコード退避リスト(出力ファイル項目名)
		WkIdoTmgOutfilecolNm = new ArrayList<ArrayList<String[]>>();
		// ネットレコード退避リスト(DB実値)
		WkIdoTmgdbValue = new ArrayList<ArrayList<String[]>>();
	}

	/**
	 * 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;
	}
}
