/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKTgWbSKCkanUpdTgCs
*	ソースファイル名	：JBSbatKKTgWbSKCkanUpdTgCs.java
*	作成者				：富士通　
*	作成日				：2012年09月25日
*＜機能概要＞
*　対象割引サービス契約更新対象（置換型）抽出（集約）部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/09/25   FJ)団		新規作成
*	v4.00.01	2013/02/07   FJ)藤本	【ST2-2013-0000632】障害対応
*	v4.00.02	2013/02/27   FJ)中作	【ST2-2013-0001012】更新対象条件追加
*	v4.00.03	2013/04/01   FJ)岡田	【IKK-2013-0000627】障害対応
*	v7.00.00	2013/11/27   FJ)桑島	【ANK-1578-00-00】多機能ルーター（機器追加）対応
*	v9.00.00	2014/04/21   FJ)小林	【ANK-2054-00-00】光電話セレクトオプションパック対応
*	v9.00.01	2014/06/18   FJ)小林	【ST1-2014-0000119】障害対応
*	v9.00.02	2014/06/20   FJ)小林	【IT1-2014-0000221】障害対応
*	v10.00.00	2014/07/07   FJ)小林	【ANK-2135-00-00】地デジ・ＢＳコース　スターチャンネルセット割引
*	v10.00.01	2014/09/25   FJ)山野	【OM-2014-0003106】障害対応
*	v22.00.00	2015/11/24   FJ)広部	【ANK-2732-00-00】プロジェクト正常化施策 ソースの可読性向上
*	v28.00.00	2016/01/11   FJ)岡田	【OM-2016-0002397】
*	v29.00.00	2017/05/09   FJ)鈴木	【OM-2017-0000473】OM-2016-0002397の修正を戻す対応
*	v32.00.00	2017/04/17   FJ)阪口	【ANK-3149-00-00】新セキュリティパック導入
*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM068;
import eo.business.util.file.JBSbatKKIFM264;
import eo.business.util.file.JBSbatKKIFM269;
import eo.business.util.table.JBSbatKK_T_MSKM_DTL;
import eo.business.util.table.JBSbatKK_T_OP_SVC_KEI;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JPCUtilCommon;
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.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKTgWbSKCkanUpdTgCs extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(申込明細)*/
	private static final String D_TBL_NAME_KK_T_MSKM_DTL = "KK_T_MSKM_DTL";

	/** SQL定義キー(KK_SELECT_023)*/
	private static final String KK_T_MSKM_DTL_KK_SELECT_023 = "KK_SELECT_023";

	/** テーブルアクセスクラス(申込明細)*/
	private JBSbatSQLAccess db_KK_T_MSKM_DTL = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	// ++++++++++ v9.00.00 修正開始 ++++++++++ //
	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/** SQL定義キー(KK_SELECT_016)*/
	private static final String ZM_M_WORK_PARAM_KNRI_KK_SELECT_016 = "KK_SELECT_016";

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** 業務パラメータ設定値(電話オプションパック割引サービスコード)*/
	protected String workParamTelOpWribSvcCd = "";
	// ++++++++++ v9.00.00 修正終了 ++++++++++ //

	// ++++++++++ v22.00.00 削除開始 ++++++++++
//	// ++++++++++ v10.00.00 追加開始 ++++++++++ //
//	/** 割引サービスコード(ファミリーパック割引)*/
//	private static final String WRIB_SVC_CD_FMLY_PK = "W00000006";
//	// ++++++++++ v10.00.00 追加終了 ++++++++++ //
	// ++++++++++ v22.00.00 削除終了 ++++++++++

	// ++++++++++ v9.00.02 修正開始 ++++++++++ //
	/** テーブル(割引サービス契約)*/
	private static final String D_TBL_NAME_KK_T_WRIB_SVC_KEI = "KK_T_WRIB_SVC_KEI";
	/** SQL定義キー(KK_SELECT_061)*/
	private static final String KK_T_WRIB_SVC_KEI_KK_SELECT_061 = "KK_SELECT_061";
	/** テーブルアクセスクラス(割引サービス契約)*/
	private JBSbatSQLAccess db_KK_T_WRIB_SVC_KEI = null;
	// ++++++++++ v9.00.02 修正終了 ++++++++++ //

	// ++++++++++ v10.00.01 追加開始 ++++++++++ //
	/** SQL定義キー(KK_SELECT_064)*/
	private static final String KK_T_WRIB_SVC_KEI_KK_SELECT_064 = "KK_SELECT_064";
	/** テーブルアクセスクラス(割引サービス契約)*/
	private JBSbatSQLAccess db_KK_T_WRIB_SVC_KEI_064 = null;
	// ++++++++++ v10.00.01 追加終了 ++++++++++ //

// ANK-3149-00-00 ADD START
	/** テーブル(オプションサービス契約)*/
	private static final String D_TBL_NAME_KK_T_OP_SVC_KEI = "KK_T_OP_SVC_KEI";

	/** SQL定義キー(KK_SELECT_128)*/
	private static final String KK_T_OP_SVC_KEI_KK_SELECT_128 = "KK_SELECT_128";

	/** テーブルアクセスクラス(オプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_OP_SVC_KEI = null;
// ANK-3149-00-00 ADD END
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_MSKM_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DTL);
		// ++++++++++ v10.00.01 追加開始 ++++++++++ //
		db_KK_T_WRIB_SVC_KEI_064 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRIB_SVC_KEI);
		// ++++++++++ v10.00.01 追加終了 ++++++++++ //
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		// ++++++++++ v9.00.00 修正開始 ++++++++++ //
		// DBアクセスクラスを生成します
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
// ANK-3149-00-00 ADD START
		db_KK_T_OP_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_OP_SVC_KEI);
// ANK-3149-00-00 ADD END
		
		// 電話オプションパック割引サービスコードの業務パラメータを取得します
		Object[] setParam = {
				"KK_TELOP_WRIB_SVC_CD",
				this.opeDate,
				this.opeDate
			};
		executeZM_M_WORK_PARAM_KNRI_KK_SELECT_016(setParam);
		JBSbatCommonDBInterface retMap = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		workParamTelOpWribSvcCd = retMap.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);
		// ++++++++++ v9.00.00 修正終了 ++++++++++ //
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
	super.logPrint.printDebugLog("execute_START");
		
		// ファイルを読み込んだ結果を割引サービス契約番号単位で保持したリストを保持するマップです。
		HashMap<String, ArrayList<JBSbatServiceInterfaceMap>> workMap = new HashMap<String, ArrayList<JBSbatServiceInterfaceMap>>();
		
		// 出力対象外リスト
		ArrayList<String> outTgList = new ArrayList<String>();
		
		// [0]:読み込みファイル [1]：出力先フォルダパス [2]：出力ファイル名
		String[] strFree = super.commonItem.getFreeItem().split(";");
		
		// ファイル読み込み変数の初期化
		BufferedReader br = null;
		
		try
		{
			// 割引サービス対象契約（置換型）抽出ファイル情報を読み込みます。
			br = new BufferedReader(new InputStreamReader(new FileInputStream(strFree[0]), JKKBatConst.SJIS));
			
			while (br.ready())
			{
				// 1行を読込み、カンマで区切ります。
				String[] workValue = br.readLine().split(",");
				
				// 割引サービス契約番号
				String wrib_svc_kei_no = JBSbatStringUtil.Rtrim(workValue[0]).replaceAll("\"", "");
				
				// ++++++++++ v9.00.00 追加開始 ++++++++++ //
				// 割引サービスコード
				String wrib_svc_cd = JBSbatStringUtil.Rtrim(workValue[26]).replaceAll("\"", "");
				// ++++++++++ v9.00.00 追加終了 ++++++++++ //
				
				// 更新対象フラグ
				String updTgFlg = workValue[25];
				
				super.logPrint.printDebugLog("更新対象フラグ--->" + updTgFlg + "<----");
				
				// 更新対象ではなかった場合は出力対象としない。（サービス契約ステータスが"100：サービス提供中"以外があった場合）
				String[] stat = new String[] {workValue[5].replaceAll("\"", ""), workValue[8].replaceAll("\"", ""), workValue[11].replaceAll("\"", ""), workValue[14].replaceAll("\"", ""), workValue[17].replaceAll("\"", ""), workValue[20].replaceAll("\"", ""), workValue[23].replaceAll("\"", "")};
				
				super.logPrint.printDebugLog("サービス契約ステータス--->" + stat + "<----");
				
				// ++++++++++ v9.00.00 修正開始 ++++++++++ //
				if(!isUpdTrgt(stat))
				{
					// 割引サービスコードが業務パラメータ設定値(電話オプションパック割引サービスコード)に含まれる場合
					if(workParamTelOpWribSvcCd.indexOf(wrib_svc_cd) != -1)
					{
						// 割引サービス契約番号を保持しておく
						if(!outTgList.contains(wrib_svc_kei_no))
						{
							outTgList.add(wrib_svc_kei_no);
						}
						continue;
					}
					else
					{
						// 更新対象外
						if("0".equals(updTgFlg))
						{
							// 割引サービス契約番号を保持しておく
							if(!outTgList.contains(wrib_svc_kei_no))
							{
								outTgList.add(wrib_svc_kei_no);
							}
							continue;
						}
					}

					super.logPrint.printDebugLog("サービス契約ステータスで対象外");
					continue;
				}
				// ++++++++++ v9.00.00 修正終了 ++++++++++ //
				
				// 項目インターフェースを生成し項目を設定する。
				JBSbatServiceInterfaceMap inMap = new JBSbatServiceInterfaceMap();
				
				inMap.setString(JBSbatKKIFM264.WRIB_SVC_KEI_NO,			wrib_svc_kei_no);						// 割引サービス契約番号
				inMap.setString(JBSbatKKIFM264.MSKM_DTL_NO,				JBSbatStringUtil.Rtrim(workValue[1]));	// 申込明細番号
				inMap.setString(JBSbatKKIFM264.WRIB_TYPE_CD,			JBSbatStringUtil.Rtrim(workValue[2]));	// 割引タイプコード
				inMap.setString(JBSbatKKIFM264.MSKM_KISAN_YMD,			JBSbatStringUtil.Rtrim(workValue[3]));	// 申込起算年月日
				inMap.setString(JBSbatKKIFM264.SVC_KEI_NO,				JBSbatStringUtil.Rtrim(workValue[4]));	// サービス契約番号
				inMap.setString(JBSbatKKIFM264.SVC_KEI_STAT,			JBSbatStringUtil.Rtrim(workValue[5]));	// サービス契約ステータス
				inMap.setString(JBSbatKKIFM264.SVC_STA_YMD_SVC,			JBSbatStringUtil.Rtrim(workValue[6]));	// サービス開始年月日（ＳＶＣ）
				inMap.setString(JBSbatKKIFM264.SVC_KEI_UCWK_NO,			JBSbatStringUtil.Rtrim(workValue[7]));	// サービス契約内訳番号
				inMap.setString(JBSbatKKIFM264.SVC_KEI_UCWK_STAT,		JBSbatStringUtil.Rtrim(workValue[8]));	// サービス契約内訳ステータス
				inMap.setString(JBSbatKKIFM264.SVC_STA_YMD_SVCUC,		JBSbatStringUtil.Rtrim(workValue[9]));	// サービス開始年月日（ＳＶＣＵＣ）
				inMap.setString(JBSbatKKIFM264.OP_SVC_KEI_NO,			JBSbatStringUtil.Rtrim(workValue[10]));	// オプションサービス契約番号
				inMap.setString(JBSbatKKIFM264.OP_SVC_KEI_STAT,			JBSbatStringUtil.Rtrim(workValue[11]));	// オプションサービス契約ステータス
				inMap.setString(JBSbatKKIFM264.SVC_STA_YMD_OP,			JBSbatStringUtil.Rtrim(workValue[12]));	// サービス開始年月日（ＯＰ）
				inMap.setString(JBSbatKKIFM264.SBOP_SVC_KEI_NO,			JBSbatStringUtil.Rtrim(workValue[13]));	// サブオプションサービス契約番号
				inMap.setString(JBSbatKKIFM264.SBOP_SVC_KEI_STAT,		JBSbatStringUtil.Rtrim(workValue[14]));	// サブオプションサービス契約ステータス
				inMap.setString(JBSbatKKIFM264.SVC_STA_YMD_SBOP,		JBSbatStringUtil.Rtrim(workValue[15]));	// サービス開始年月日（ＳＢＯＰ）
				inMap.setString(JBSbatKKIFM264.KKTK_SVC_KEI_NO,			JBSbatStringUtil.Rtrim(workValue[16]));	// 機器提供サービス契約番号
				inMap.setString(JBSbatKKIFM264.KKTK_SVC_KEI_STAT,		JBSbatStringUtil.Rtrim(workValue[17]));	// 機器提供サービス契約ステータス
				inMap.setString(JBSbatKKIFM264.SVC_STA_YMD_KKTK,		JBSbatStringUtil.Rtrim(workValue[18]));	// サービス開始年月日（ＫＫＴＫ）
				inMap.setString(JBSbatKKIFM264.SEIOPSVC_KEI_NO,			JBSbatStringUtil.Rtrim(workValue[19]));	// 請求オプションサービス契約番号
				inMap.setString(JBSbatKKIFM264.SEIOPSVC_KEI_STAT,		JBSbatStringUtil.Rtrim(workValue[20]));	// 請求オプションサービス契約ステータス
				inMap.setString(JBSbatKKIFM264.SVC_STA_YMD_SEIOP,		JBSbatStringUtil.Rtrim(workValue[21]));	// サービス開始年月日（ＳＥＩＯＰ）
				inMap.setString(JBSbatKKIFM264.KKOP_SVC_KEI_NO,			JBSbatStringUtil.Rtrim(workValue[22]));	// 機器オプションサービス契約番号
				inMap.setString(JBSbatKKIFM264.KKOP_SVC_KEI_STAT,		JBSbatStringUtil.Rtrim(workValue[23]));	// 機器オプションサービス契約ステータス
				inMap.setString(JBSbatKKIFM264.SVC_STA_YMD_KKOP,		JBSbatStringUtil.Rtrim(workValue[24]));	// サービス開始年月日（ＫＫＯＰ）
				// ++++++++++ v9.00.00 修正開始 ++++++++++ //
				inMap.setString(JBSbatKKIFM264.WRIB_SVC_CD,				JBSbatStringUtil.Rtrim(workValue[26]));	// 割引サービスコード
				inMap.setString(JBSbatKKIFM264.SVC_USE_STA_KIBO_YMD,	JBSbatStringUtil.Rtrim(workValue[27]));	// サービス利用開始希望年月日
				// ++++++++++ v9.00.00 修正終了 ++++++++++ //
				// ++++++++++ v10.00.00 追加開始 ++++++++++ //
				inMap.setString(JBSbatKKIFM264.PLAN_CHRG_STAYMD_SVC,	JBSbatStringUtil.Rtrim(workValue[28]));	// プラン課金開始年月日（ＳＶＣ）
				// ++++++++++ v10.00.00 追加終了 ++++++++++ //
				
				// 割引サービス契約番号をキーにマップに設定されていたら
				if(null != workMap.get(wrib_svc_kei_no))
				{
					// 割引サービス契約番号をキーとして格納されているリストに追加する。
					workMap.get(wrib_svc_kei_no).add(inMap);
				}
				else
				{
					// 割引サービス契約番号をキーとし、マップに保持する
					ArrayList<JBSbatServiceInterfaceMap> inMapList = new ArrayList<JBSbatServiceInterfaceMap>();
					inMapList.add(inMap);
					workMap.put(wrib_svc_kei_no, inMapList);
				}
			}
			
			// 出力対象外となった割引サービス契約番号が設定されている場合
			for (String key_wrib_svc_kei_no: outTgList)
			{
				// 該当する割引サービス契約番号はマップより削除する。
				if(null != workMap.get(key_wrib_svc_kei_no))
				{
					workMap.remove(key_wrib_svc_kei_no);
				}
			}
			
			// ファイルを出力します。
			this.execOutFile(workMap);
			
			super.logPrint.printDebugLog("execute_END");
			
			return null;
		}
		catch (FileNotFoundException fne)
		{
			// 割引サービス対象契約抽出ファイルがない場合はエラー。
			JBSbatBusinessException jbEx = new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0020CE, new String[]{strFree[0]});
			jbEx.setEx(fne);
			throw jbEx;
		}
		catch (IOException ioe)
		{
			// その他の異常の場合はエラー。
			JBSbatBusinessException jbEx = new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0100AE, new String[]{strFree[0]});
			jbEx.setEx(ioe);
			throw jbEx;
		}
		
		finally
		{
			if (null != br)
			{
				br.close();
			}
		}
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_MSKM_DTL.close();
		// ++++++++++ v10.00.01 追加開始 ++++++++++ //
		db_KK_T_WRIB_SVC_KEI_064.close();
		// ++++++++++ v10.00.01 追加終了 ++++++++++ //
// ANK-3149-00-00 ADD START
		db_KK_T_OP_SVC_KEI.close();
// ANK-3149-00-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * 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_MSKM_DTL_KK_SELECT_023(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DTL.selectBySqlDefine(paramList, KK_T_MSKM_DTL_KK_SELECT_023);
	}
	
	// ++++++++++ v10.00.01 追加開始 ++++++++++ //
	/**
	 * SQLKEY(KK_SELECT_064)で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_064(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_WRIB_SVC_KEI_064.selectBySqlDefine(paramList, KK_T_WRIB_SVC_KEI_KK_SELECT_064);
	}
	// ++++++++++ v10.00.01 追加終了 ++++++++++ //

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * ファイルの出力を行います。<br>
	 * <p>
	 * @param  workMap　割引サービス契約番号単位で格納されたリストを持つマップ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void execOutFile(HashMap<String, ArrayList<JBSbatServiceInterfaceMap>> workMap) throws Exception
	{
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// マップにセットされているキー分、繰り返す
		for (String key_wrib_svc_kei_no: workMap.keySet())
		{
			// 割引サービス契約番号単位で格納されたリストを取り出し、ファイル出力を行う。
			ArrayList<JBSbatServiceInterfaceMap> inMapList = workMap.get(key_wrib_svc_kei_no);
			this.createOutFile(inMapList, outputBean);
		}
		
		// ファイルを出力します。
		// [0]:読み込みファイル [1]：出力先フォルダパス [2]：出力ファイル名
		String[] strFree = super.commonItem.getFreeItem().split(";");
		JKKBatCommon.outFile(super.commonItem, outputBean, "KKIFM269", strFree[1], strFree[2]);
	}

	/**
	 * 出力ファイルの作成を行います。<br>
	 * <p>
	 * @param  inMapList　割引サービス契約番号単位で格納されたリスト
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void createOutFile(ArrayList<JBSbatServiceInterfaceMap> inMapList, JBSbatOutputItem outputBean) throws Exception
	{
		HashMap<String, String> ymdMap = new HashMap<String, String>();
		
// ANK-3149-00-00 ADD START
		// サービス契約.サービス契約番号／サービス開始年月日（SP・PP用）
		String spPpSvcKeiNo = null;
		String spPpSvcStaYmd = null;
// ANK-3149-00-00 ADD END
		
		// サービス開始年月日、サービス課金開始年月日の決定
		for(int i = 0; i < inMapList.size(); i++)
		{
			// 各開始年月日を取得する。
			JBSbatServiceInterfaceMap inMap = inMapList.get(i);
			
			// レコードに設定されている開始年月日を取得する。
			String svcStaYmdTmp = getSvcStaYmd(inMap.getString(JBSbatKKIFM264.SVC_STA_YMD_SVC).replaceAll("\"", ""),
												inMap.getString(JBSbatKKIFM264.SVC_STA_YMD_SVCUC).replaceAll("\"", ""),
												inMap.getString(JBSbatKKIFM264.SVC_STA_YMD_OP).replaceAll("\"", ""),
												inMap.getString(JBSbatKKIFM264.SVC_STA_YMD_SBOP).replaceAll("\"", ""),
												inMap.getString(JBSbatKKIFM264.SVC_STA_YMD_KKTK).replaceAll("\"", ""),
												inMap.getString(JBSbatKKIFM264.SVC_STA_YMD_SEIOP).replaceAll("\"", ""),
												inMap.getString(JBSbatKKIFM264.SVC_STA_YMD_KKOP).replaceAll("\"", ""));

			if(0 == i){
				if(null != svcStaYmdTmp)
				{
					ymdMap.put("svcStaYmdMax", svcStaYmdTmp);
				}
				else
				{
					ymdMap.put("svcStaYmdMax", "");
				}
			}
			else
			{
				if(null != svcStaYmdTmp)
				{
					// サービス開始年月日（退避値）と比べ大きければ退避する
					if(0 > ymdMap.get("svcStaYmdMax").compareTo(svcStaYmdTmp))
					{
						ymdMap.put("svcStaYmdMax", svcStaYmdTmp);
					}
				}
			}
			
// ANK-3149-00-00 ADD START
			// SP・PP開始日判定用に、サービス契約のサービス契約番号／サービス開始年月日を保持する
			if (inMap.getString(JBSbatKKIFM264.SVC_KEI_NO).replaceAll("\"", "") != null
					&& !"".equals(inMap.getString(JBSbatKKIFM264.SVC_KEI_NO).replaceAll("\"", "")))
			{
				spPpSvcKeiNo = inMap.getString(JBSbatKKIFM264.SVC_KEI_NO).replaceAll("\"", "");
			}
			if (inMap.getString(JBSbatKKIFM264.SVC_STA_YMD_SVC).replaceAll("\"", "") != null
					&& !"".equals(inMap.getString(JBSbatKKIFM264.SVC_STA_YMD_SVC).replaceAll("\"", "")))
			{
				spPpSvcStaYmd = inMap.getString(JBSbatKKIFM264.SVC_STA_YMD_SVC).replaceAll("\"", "");
			}
// ANK-3149-00-00 ADD END
		}
		
		// ++++++++++ v9.00.00 修正開始 ++++++++++ //
		// 申込明細番号より申込年月日を取得する。
		String mskmYmd = "";
		String[] param = {inMapList.get(0).getString(JBSbatKKIFM264.MSKM_DTL_NO).replaceAll("\"", "")};
		this.executeKK_T_MSKM_DTL_KK_SELECT_023(param);
		JBSbatCommonDBInterface mskm_dtl_map = db_KK_T_MSKM_DTL.selectNext();
		if(null != mskm_dtl_map)
		{
			mskmYmd = JBSbatStringUtil.Rtrim(mskm_dtl_map.getString(JBSbatKK_T_MSKM_DTL.MSKM_YMD));
		}
		
		// 項目インターフェースを生成し項目を設定する。
		JBSbatServiceInterfaceMap inMapTelOp = inMapList.get(0);
		
		// 中間ファイルより割引サービスコードを取得する。
		String wribSvcCd = inMapTelOp.getString(JBSbatKKIFM264.WRIB_SVC_CD).replaceAll("\"", "");
		
		// ++++++++++ v10.00.00 修正開始 ++++++++++ //
		// 「割引サービスコード」がファミリーパック割引の場合
		// ++++++++++ v22.00.00 変更開始 ++++++++++
//		if(WRIB_SVC_CD_FMLY_PK.equals(wribSvcCd))
		if(JBSbatKKConst.KK0841_WRIB_SVC_CD_FAMILY.equals(wribSvcCd))
		// ++++++++++ v22.00.00 変更終了 ++++++++++
		{
			// サービス開始年月日の決定（サービス開始年月日の最大値と申込明細番号．申込年月日を比較し大きい日付）
			String svcStaYmdMax = ymdMap.get("svcStaYmdMax");
			// 申込年月日がサービス開始年月日の最大値と比べ過去日か同日の場合
			if(0 <= svcStaYmdMax.compareTo(mskmYmd))
			{
				// サービス開始年月日：サービス開始年月日の最大値
				ymdMap.put("SVC_STA_YMD", svcStaYmdMax);
				// サービス課金開始年月日：設定したサービス開始年月日の翌月初日
				if(8 == svcStaYmdMax.length())
				{
					String ymd_1 = getNextFirstOfMonth(svcStaYmdMax);
					ymdMap.put("SVC_CHRG_STAYMD", ymd_1);
				}
				else
				{
					ymdMap.put("SVC_CHRG_STAYMD", "");
				}
			}
			// 申込年月日がサービス開始年月日の最大値と比べ未来日の場合
			else
			{
				// サービス開始年月日、サービス課金開始年月日：申込年月日の翌月初日を設定する
				if(8 == mskmYmd.length())
				{
					String ymd_2 = getNextFirstOfMonth(mskmYmd);
// 2017.05.09 OM-2017-0000473 mod start
//					// ++++++++++ v28.00.00 変更開始 ++++++++++
//					// ymdMap.put("SVC_STA_YMD", ymd_2);
//					ymdMap.put("SVC_STA_YMD", mskmYmd);
//					// ++++++++++ v28.00.00 変更終了 ++++++++++
					ymdMap.put("SVC_STA_YMD", ymd_2);
// 2017.05.09 OM-2017-0000473 mod end
					ymdMap.put("SVC_CHRG_STAYMD", ymd_2);
				}
				else
				{
					ymdMap.put("SVC_STA_YMD", "");
					ymdMap.put("SVC_CHRG_STAYMD", "");
				}
			}
		}
//		// 割引サービスコードが業務パラメータ設定値(電話オプションパック割引サービスコード)に含まれる場合
//		if(workParamTelOpWribSvcCd.indexOf(wribSvcCd) != -1)
		// 「割引サービスコード」が上記以外の場合
		else
		{
			// サービス開始年月日、サービス課金開始年月日を初期化する。
			String svcStaYmd = "00000000";
			String svcChrgStaYmd = "00000000";
			
			// 中間ファイルよりサービス利用開始希望年月日を取得する。
			String svcUseStaKiboYmd = inMapTelOp.getString(JBSbatKKIFM264.SVC_USE_STA_KIBO_YMD).replaceAll("\"", "");
			
			// サービス利用開始希望年月日が未設定の場合
			if(svcUseStaKiboYmd == null || "".equals(svcUseStaKiboYmd))
			{
				svcUseStaKiboYmd = "00000000";
			}
			
			// サービス開始年月日判定
//			// 中間ファイルよりサービス開始年月日（ＳＶＣＵＣ）を取得する。
//			String svcStaYmdSvcuc = inMapTelOp.getString(JBSbatKKIFM264.SVC_STA_YMD_SVCUC).replaceAll("\"", "");
			// サービス開始年月日（割引サービス契約に紐付く各サービス開始年月日の最大値）
//			String svcStaYmdSvcuc = ymdMap.get("svcStaYmdMax");
			String svcStaYmdMax = ymdMap.get("svcStaYmdMax");
			
			// サービス開始年月日：下記のうち最大の日付を設定
			// サービス利用開始希望年月日、サービス開始年月日（最大値）、申込年月日
//			if(0 < svcUseStaKiboYmd.compareTo(svcStaYmdSvcuc))
//			{
//				svcStaYmd = svcUseStaKiboYmd;
//			}
//			else
//			{
//				svcStaYmd = svcStaYmdSvcuc;
//			}
//			if(0 < mskmYmd.compareTo(svcStaYmd))
//			{
//				svcStaYmd = mskmYmd;
//			}
			if(0 < svcUseStaKiboYmd.compareTo(svcStaYmdMax))
			{
				svcStaYmd = svcUseStaKiboYmd;
			}
			else if(0 < svcStaYmdMax.compareTo(mskmYmd))
			{
				svcStaYmd = svcStaYmdMax;
			}
			else
			{
				svcStaYmd = mskmYmd;
			}

			// サービス課金開始年月日判定
			// 割引サービスコードが業務パラメータ設定値(電話オプションパック割引サービスコード)に含まれる場合
			if(workParamTelOpWribSvcCd.indexOf(wribSvcCd) != -1)
			{
				// ++++++++++ v9.00.02 修正開始 ++++++++++ //
				// 月初日の場合
				String thisMonthFirstYmd = getThisFirstOfMonth(svcStaYmd);
				if (thisMonthFirstYmd.equals(svcStaYmd))
				{
					// DBアクセスクラスを生成します
					db_KK_T_WRIB_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRIB_SVC_KEI);

					// 引数設定
					Object[] setParam1 = {
							inMapTelOp.getString(JBSbatKKIFM264.WRIB_SVC_KEI_NO).replaceAll("\"", ""),
							this.opeDate,
					};

					// 異動区分が"00042"電話番号変更の対象割引サービス契約の場合、
					executeKK_T_WRIB_SVC_KEI_KK_SELECT_061(setParam1);
					JBSbatCommonDBInterface retMap = db_KK_T_WRIB_SVC_KEI.selectNext();
					if (retMap != null)
					{
						// ++++++++++ v10.00.01 追加開始 ++++++++++ //
						// サービス契約内訳.サービス課金開始年月日とサービス開始年月日の比較
						// サービス契約内訳の取得
						Object[] setParam2 = {
								this.opeDate,
								this.opeDate,
								inMapTelOp.getString(JBSbatKKIFM264.WRIB_SVC_KEI_NO).replaceAll("\"", "")
						};
						
						// 検索結果の取得
						executeKK_T_WRIB_SVC_KEI_KK_SELECT_064(setParam2);
						JBSbatCommonDBInterface svcKeiUcwkMap = db_KK_T_WRIB_SVC_KEI_064.selectNext();
						
						// 検索結果が0件以外の場合
						if (svcKeiUcwkMap != null)
						{
							if (JPCUtilCommon.isFutureDate(svcKeiUcwkMap.getString("SVC_CHRG_STAYMD"), svcStaYmd, "0"))
							{
								// サービス契約内訳．サービス課金開始日が未来日
								// サービス課金開始年月日：サービス開始年月日の翌月初日
								svcChrgStaYmd = getNextFirstOfMonth(svcStaYmd);
							}
							else
							{
								// サービス契約内訳．サービス課金開始日が同日、または過去日
								// サービス開始日をサービス課金開始年月日に設定
								// ++++++++++ v10.00.01 追加終了 ++++++++++ //
								svcChrgStaYmd = thisMonthFirstYmd;
								// ++++++++++ v10.00.01 追加開始 ++++++++++ //
							}
						}
						else
						{
							// 検索結果が0件の場合
							// サービス課金開始年月日：サービス開始年月日の翌月初日
							svcChrgStaYmd = getNextFirstOfMonth(svcStaYmd);
						}
						// ++++++++++ v10.00.01 追加終了 ++++++++++ //
					}
					// 翌月初日を設定
					else
					{
						// サービス課金開始年月日：サービス開始年月日の翌月初日
						svcChrgStaYmd = getNextFirstOfMonth(svcStaYmd);
					}
				}
				// 月初日でない場合、翌月初日を設定
				else
				{
					// サービス課金開始年月日：サービス開始年月日の翌月初日
					svcChrgStaYmd = getNextFirstOfMonth(svcStaYmd);
				}
				// ++++++++++ v9.00.02 修正終了 ++++++++++ //
			}
// ANK-3149-00-00 ADD START
			// ｅｏセキュリティーパックもしくはスマートリンクプレミアムの場合
			else if (JKKStrConst.WRIB_SVC_CD_SECURITY_PACK.equals(wribSvcCd)
						|| JKKStrConst.WRIB_SVC_SMARTLINK_PREMIUM.equals(wribSvcCd))
			{
				// サービス開始年月日：下記のうち最大の日付を設定
				// 割引サービス契約.サービス利用開始希望年月日、サービス契約.サービス開始年月日、申込明細.申込年月日
				if(0 < svcUseStaKiboYmd.compareTo(spPpSvcStaYmd))
				{
					svcStaYmd = svcUseStaKiboYmd;
				}
				else if (0 < spPpSvcStaYmd.compareTo(mskmYmd))
				{
					svcStaYmd = spPpSvcStaYmd;
				}
				else
				{
					svcStaYmd = mskmYmd;
				}
				
				// サービス課金開始年月日（サービス開始日の翌月初日）
				svcChrgStaYmd = getNextFirstOfMonth(svcStaYmd);
				
				// スマートリンクプレミアムの場合
				if (JKKStrConst.WRIB_SVC_SMARTLINK_PREMIUM.equals(wribSvcCd))
				{
					String smlnprmopStaYmd = null;
					String smlnprmopStaChrgYmd = null;
					
					// スマートリンクプレミアムオプションのサービス開始日とサービス課金開始日を取得する
					Object[] setParam = {
							this.opeDate,
							spPpSvcKeiNo,
							};
					executeKK_T_OP_SVC_KEI_KK_SELECT_128(setParam);
					JBSbatCommonDBInterface smlnprmopMap = db_KK_T_OP_SVC_KEI.selectNext();
					if (smlnprmopMap != null)
					{
						smlnprmopStaYmd = smlnprmopMap.getString(JBSbatKK_T_OP_SVC_KEI.SVC_STAYMD);
						smlnprmopStaChrgYmd = smlnprmopMap.getString(JBSbatKK_T_OP_SVC_KEI.SVC_CHRG_STAYMD);
					}
					
					// スマートリンクプレミアムオプションのサービス開始日が上記で算出したサービス開始日よりも早い場合
					// スマートリンクプレミアムオプションのサービス開始日をサービス開始日とする
					if ((smlnprmopStaYmd != null && !"".equals(smlnprmopStaYmd))
							&& 0 > smlnprmopStaYmd.compareTo(svcStaYmd))
					{
						svcStaYmd = smlnprmopStaYmd;
					}
					// スマートリンクプレミアムオプションのサービス課金開始日が上記で算出したサービス課金開始日よりも早い場合
					// スマートリンクプレミアムオプションのサービス課金開始日をサービス課金開始日とする
					if ((smlnprmopStaChrgYmd != null && !"".equals(smlnprmopStaChrgYmd))
							&& 0 > smlnprmopStaChrgYmd.compareTo(svcChrgStaYmd))
					{
						svcChrgStaYmd = smlnprmopStaChrgYmd;
					}
				}
			}
// ANK-3149-00-00 ADD END
			else
			{
				// 中間ファイルよりプラン課金開始年月日（ＳＶＣ）を取得
				String planChrgStaYmdSvc = inMapTelOp.getString(JBSbatKKIFM264.PLAN_CHRG_STAYMD_SVC).replaceAll("\"", "");
				
				// サービス課金開始年月日：下記のうち最大の日付を設定
				// サービス開始年月日、プラン課金開始年月日（ＳＶＣ）
				if(0 < svcStaYmd.compareTo(planChrgStaYmdSvc))
				{
					svcChrgStaYmd = svcStaYmd;
				}
				else
				{
					svcChrgStaYmd = planChrgStaYmdSvc;
				}
			}

			// サービス開始年月日、サービス課金開始年月日を保持
			ymdMap.put("SVC_STA_YMD", svcStaYmd);
			ymdMap.put("SVC_CHRG_STAYMD", svcChrgStaYmd);
		}
		// ++++++++++ v9.00.00 修正終了 ++++++++++ //
//		// 「割引サービスコード」が"eo光電話パック3"または"eo光電話パック7"以外の場合、申込年月日の取得を行う。
//		else
//		{
////			// 申込明細番号より申込年月日を取得する。
////			String mskmYmd = "";
////			String[] param = {inMapList.get(0).getString(JBSbatKKIFM264.MSKM_DTL_NO).replaceAll("\"", "")};
////			this.executeKK_T_MSKM_DTL_KK_SELECT_023(param);
////			JBSbatCommonDBInterface mskm_dtl_map = db_KK_T_MSKM_DTL.selectNext();
////			if(null != mskm_dtl_map)
////			{
////				mskmYmd = JBSbatStringUtil.Rtrim(mskm_dtl_map.getString(JBSbatKK_T_MSKM_DTL.MSKM_YMD));
////			}
//			// サービス開始年月日の決定（サービス開始年月日の最大値と申込明細番号．申込年月日を比較し大きい日付）
//			String svcStaYmdMax = ymdMap.get("svcStaYmdMax");
//			// 申込年月日がサービス開始年月日の最大値と比べ過去日か同日の場合
//			if(0 <= svcStaYmdMax.compareTo(mskmYmd))
//			{
//				// サービス開始年月日：サービス開始年月日の最大値
//				ymdMap.put("SVC_STA_YMD", svcStaYmdMax);
//				// サービス課金開始年月日：設定したサービス開始年月日の翌月初日
//				if(8 == svcStaYmdMax.length())
//				{
//					String ymd_1 = getNextFirstOfMonth(svcStaYmdMax);
//					ymdMap.put("SVC_CHRG_STAYMD", ymd_1);
//				}
//				else
//				{
//					ymdMap.put("SVC_CHRG_STAYMD", "");
//				}
//			}
//			// 申込年月日がサービス開始年月日の最大値と比べ未来日の場合
//			else
//			{
//				// サービス開始年月日、サービス課金開始年月日：申込年月日の翌月初日を設定する
//				if(8 == mskmYmd.length())
//				{
//					String ymd_2 = getNextFirstOfMonth(mskmYmd);
//					ymdMap.put("SVC_STA_YMD", ymd_2);
//					ymdMap.put("SVC_CHRG_STAYMD", ymd_2);
//				}
//				else
//				{
//					ymdMap.put("SVC_STA_YMD", "");
//					ymdMap.put("SVC_CHRG_STAYMD", "");
//				}
//			}
//		}
		// ++++++++++ v10.00.00 修正終了 ++++++++++ //
		
		// 出力ファイルの項目設定を行う。
		for(int i = 0; i < inMapList.size(); i++)
		{
			JBSbatServiceInterfaceMap inMap = inMapList.get(i);
			// 入出力インターフェースオブジェクトを生成
			JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
			// 割引サービス契約番号
			outmap.setString(JBSbatKKIFM269.WRIB_SVC_KEI_NO, inMap.getString(JBSbatKKIFM264.WRIB_SVC_KEI_NO).replaceAll("\"", ""));
			// サービス開始年月日
			outmap.setString(JBSbatKKIFM269.SVC_STA_YMD, ymdMap.get("SVC_STA_YMD").replaceAll("\"", ""));
			// サービス課金開始年月日
			outmap.setString(JBSbatKKIFM269.SVC_CHRG_STAYMD,  ymdMap.get("SVC_CHRG_STAYMD").replaceAll("\"", ""));
			// 申込明細番号
			outmap.setString(JBSbatKKIFM269.MSKM_DTL_NO, inMap.getString(JBSbatKKIFM068.MSKM_DTL_NO).replaceAll("\"", ""));
			// 割引タイプコード
			outmap.setString(JBSbatKKIFM269.WRIB_TYPE_CD, inMap.getString(JBSbatKKIFM068.WRIB_TYPE_CD).replaceAll("\"", ""));
			// サービス契約番号
			outmap.setString(JBSbatKKIFM269.SVC_KEI_NO, inMap.getString(JBSbatKKIFM068.SVC_KEI_NO).replaceAll("\"", ""));
			// サービス契約内訳番号
			outmap.setString(JBSbatKKIFM269.SVC_KEI_UCWK_NO, inMap.getString(JBSbatKKIFM068.SVC_KEI_UCWK_NO).replaceAll("\"", ""));
			// オプションサービス契約番号
			outmap.setString(JBSbatKKIFM269.OP_SVC_KEI_NO, inMap.getString(JBSbatKKIFM068.OP_SVC_KEI_NO).replaceAll("\"", ""));
			// サブオプションサービス契約番号
			outmap.setString(JBSbatKKIFM269.SBOP_SVC_KEI_NO, inMap.getString(JBSbatKKIFM068.SBOP_SVC_KEI_NO).replaceAll("\"", ""));
			// 機器提供サービス契約番号
			outmap.setString(JBSbatKKIFM269.KKTK_SVC_KEI_NO, inMap.getString(JBSbatKKIFM068.KKTK_SVC_KEI_NO).replaceAll("\"", ""));
			// 請求オプションサービス契約番号
			outmap.setString(JBSbatKKIFM269.SEIOPSVC_KEI_NO, inMap.getString(JBSbatKKIFM068.SEIOPSVC_KEI_NO).replaceAll("\"", ""));
			
			// 請求オプションサービス契約番号
			outmap.setString(JBSbatKKIFM269.KKOP_SVC_KEI_NO, inMap.getString(JBSbatKKIFM264.KKOP_SVC_KEI_NO).replaceAll("\"", ""));
			// ++++++++++ v9.00.00 修正開始 ++++++++++ //
			// 割引サービスコード
			outmap.setString(JBSbatKKIFM269.WRIB_SVC_CD, inMap.getString(JBSbatKKIFM264.WRIB_SVC_CD).replaceAll("\"", ""));
			// ++++++++++ v9.00.00 修正終了 ++++++++++ //
			
			outmap.setOutFlg(true);
			outputBean.addOutMapList(outmap);
		}
	}

	/**
	 * 
	 * 更新の対象であるか判定を行います。
	 * <br>
	 * @param  stat 判断対象配列
	 * @return 更新の実行判定結果
	 * @throws Exception 
	 */
	private boolean isUpdTrgt(String[] stat) throws Exception
	{
		boolean result = false;
		for(int i = 0; i < stat.length; i++)
		{
			// ++++++++++ v22.00.00 変更開始 ++++++++++
//			if("100".equals(stat[i]))
			if(JBSbatKKConst.SVC_KEI_STAT_SVCTK_CHU.equals(stat[i]))
			// ++++++++++ v22.00.00 変更終了 ++++++++++
			{
				result = true;
				break;
			}
		}
		return result;
	}

	/**
	 * 
	 * 設定されているサービス開始年月日を返します。
	 * <br>
	 * @param  svcYmd サービス開始年月日（ＳＶＣ）
	 * @param  svcucYmd サービス開始年月日（ＳＶＣＵＣ）
	 * @param  opYmd サービス開始年月日（ＯＰ）
	 * @param  sbopYmd サービス開始年月日（ＳＢＯＰ）
	 * @param  kktkYmd サービス開始年月日（ＫＫＴＫ）
	 * @param  seiopYmd サービス開始年月日（ＳＥＩＯＰ）
	 * @param  kkopYmd サービス開始年月日（ＫＫＯＰ）
	 * @return 設定されているサービス開始年月日
	 * @throws Exception 
	 */
	private String getSvcStaYmd(String svcYmd, String svcucYmd, String opYmd, String sbopYmd, String kktkYmd, String seiopYmd, String kkopYmd) throws Exception
	{
		String svcStaYmd = "";
		
		if(!"".equals(svcYmd)){
			svcStaYmd = svcYmd;
			return svcStaYmd;
		}
		if(!"".equals(svcucYmd)){
			svcStaYmd = svcucYmd;
			return svcStaYmd;
		}
		if(!"".equals(opYmd)){
			svcStaYmd = opYmd;
			return svcStaYmd;
		}
		if(!"".equals(sbopYmd)){
			svcStaYmd = sbopYmd;
			return svcStaYmd;
		}
		if(!"".equals(kktkYmd)){
			svcStaYmd = kktkYmd;
			return svcStaYmd;
		}
		if(!"".equals(seiopYmd)){
			svcStaYmd = seiopYmd;
			return svcStaYmd;
		}
		if(!"".equals(kkopYmd)){
			svcStaYmd = kkopYmd;
			return svcStaYmd;
		}
		return null;
	}

	/**
     * 翌月初日取得処理 指定された年月の翌月初日を返却する。
     * <BR>
     * @param ymd 年月日
     * @return String 翌月初日
     */
	private String getNextFirstOfMonth(String ymd)
	{
		SimpleDateFormat form = new SimpleDateFormat("yyyyMMdd");
		Calendar calendar = new GregorianCalendar(Integer.parseInt(ymd.substring(0, 4)), Integer.parseInt(ymd.substring(4, 6)), 1);
		return form.format(calendar.getTime());
	}

	/**
	 * SQLKEY(KK_SELECT_016)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	業務パラメータID
	 *		 	バッチ運用日付
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_WORK_PARAM_KNRI_KK_SELECT_016(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_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_KK_SELECT_016);
	}
	
	// ++++++++++ v9.00.02 修正開始 ++++++++++ //
	/**
	 * SQLKEY(KK_SELECT_061)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	業務パラメータID
	 *		 	バッチ運用日付
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_WRIB_SVC_KEI_KK_SELECT_061(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_061);
	}
	
	/**
     * 初日取得処理 指定された年月の初日を返却する。
     * <BR>
     * @param ymd 年月日
     * @return String 翌月初日
     */
	private String getThisFirstOfMonth(String ymd)
	{
		SimpleDateFormat form = new SimpleDateFormat("yyyyMMdd");
		Calendar calendar = new GregorianCalendar(Integer.parseInt(ymd.substring(0, 4)), Integer.parseInt(ymd.substring(4, 6)) - 1 , 1);
		return form.format(calendar.getTime());
	}
	// ++++++++++ v9.00.02 修正終了 ++++++++++ //
	
// ANK-3149-00-00 ADD START
	/**
	 * SQLKEY(KK_SELECT_128)で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_128(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KK_SELECT_128);
	}
//  ANK-3149-00-00 ADD END
}