/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKSeikyusHoseiListSksi
*	ソースファイル名	：JBSbatKKSeikyusHoseiListSksi.java
*	作成者				：富士通　
*	作成日				：2012年05月24日
*＜機能概要＞
*　請求書作成要否補正リスト作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/05/24   富士通		新規作成
*	v4.00.00	2013/02/07   富士通		ST3-2013-0000274
*	v14.00.00	2015/06/15   富士通		OM-2015-0000500 性能改善
*	v49.00.00	2020/04/21	 GDC)ニール	【ANK-3853-00-00】 ネットmineo追加時の料金明細発行手数料請求対応
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.common.JKKBatStringUtil;
import eo.business.util.file.JBSbatKKIFE191;
import eo.business.util.file.JBSbatKKIFM258;
import eo.business.util.file.JBSbatKKIFM640;
import eo.business.util.table.JBSbatKK_T_SEIKY_KEI;
import eo.common.util.JKKStringUtil;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKSeikyusHoseiListSksi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL START
//	/** テーブル(サービス契約)*/
//	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";
// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL END

	/** テーブル(異動予約)*/
	private static final String D_TBL_NAME_KK_T_IDO_RSV = "KK_T_IDO_RSV";

	/** テーブル(請求契約)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";

// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL START
//	/** SQL定義キー(KK_SELECT_170)*/
//	private static final String KK_T_SVC_KEI_KK_SELECT_170 = "KK_SELECT_170";
// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL END

	/** SQL定義キー(KK_SELECT_021)*/
	private static final String KK_T_IDO_RSV_KK_SELECT_021 = "KK_SELECT_021";

	/** SQL定義キー(KK_SELECT_027)*/
	private static final String KK_T_SEIKY_KEI_KK_SELECT_027 = "KK_SELECT_027";

// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL START
//	/** テーブルアクセスクラス(サービス契約)*/
//	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL END

	/** テーブルアクセスクラス(異動予約)*/
	private JBSbatSQLAccess db_KK_T_IDO_RSV = null;

	/** テーブルアクセスクラス(請求契約)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 処理結果メッセージ（ＮＧ（未来日登録あり））*/
	private static final String RESULT_MESSAGE_NG = "ＮＧ（未来日登録あり）";

	/** 処理結果メッセージ（ＯＫ）*/
	private static final String RESULT_MESSAGE_OK = "ＯＫ";

	/** 処理結果コード（ＮＧ＝"1"）*/
	private static final String RESULT_CD_NG = "1";

	/** 処理結果コード（ＯＫ＝"0"）*/
	private static final String RESULT_CD_OK = "0";

	/** コード種別コード（請求方法コード）*/
	private static final String SEIKY_WAY_CD = "CD00166";

//	/** 改行コード（CRLF） */
//	private static final String RETURN_CD_CRLF = "CR+LF";

//	// 出力1ファイル名
//	private String otf1FileName = null;

//	// ソート項目
//	private static final String[] SORT_KEYS  = {
//		JBSbatKKIFE191.RESULT_NM,
//		JBSbatKKIFE191.SEIKY_WAY_NM,
//		JBSbatKKIFE191.SVC_KEI_NO,
//		JBSbatKKIFE191.SEIKY_KEI_NO
//	};

// ST4-2013-0000472 2013.06.20 T.TORIKAI ADD START
	/** 補正対象判定処理中の請求契約情報 */
	private SeikyKeiInfo currentSeikyKei = null;
	
	/** 取得済みの請求方法コード／名称を保持するマップ */
	private Map<String, String> payWayMap = new HashMap<String, String>();
// ST4-2013-0000472 2013.06.20 T.TORIKAI ADD END

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL START
//		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL END
		db_KK_T_IDO_RSV = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_IDO_RSV);
		db_KK_T_SEIKY_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

//		this.otf1FileName = super.freeItem;
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL START
//	/**
//	 * 主処理
//	 * @param inMap　入力電文
//	 * @return JBSbatOutputItem　出力情報
//	 * @throws Exception
//	 */
//	@SuppressWarnings("unchecked")
//	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
//	{
//	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
//
//		// 出力共通電文を生成する。
//		JBSbatOutputItem outputBean = new JBSbatOutputItem();
//
//		// KK_T_SVC_KEI_KK_SELECT_170用ArrayList
//		List<Map> svcKeiList = new ArrayList<Map>();
//
//		getKK_T_SVC_KEI_KK_SELECT_170(svcKeiList, inMap);
//
//		// 補正対象チェック
//		boolean hoseiTgFlg = chkHoseiTg(svcKeiList);
//
//		if(hoseiTgFlg == false)
//		{
//			return null;
//		}
//
//		// 処理結果の判定（異動予約）
//		boolean resultflg = getKK_T_IDO_RSV_KK_SELECT_021(inMap);
//
//		// 未反映の異動予約がない場合、未来日予約された請求契約情報の有無を確認
//		if(resultflg)
//		{
//			// 処理結果の判定（請求契約）
//			resultflg = getKK_T_SEIKY_KEI_KK_SELECT_027(inMap);
//		}
//
//		String resultMsg = null;
//		String resultCd = null;
//		if (resultflg) {
//			resultMsg = RESULT_MESSAGE_OK;
//			resultCd = RESULT_CD_OK;
//		} else {
//			resultMsg = RESULT_MESSAGE_NG;
//			resultCd = RESULT_CD_NG;
//		}
//
//		// 支払方法のメッセージを取得
//		String cd_div_seiky_way_cd = inMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_WAY_CD);		// 請求方法コード
//		String payWay = JKKBatCommon.getCdDivName(super.commonItem, SEIKY_WAY_CD, cd_div_seiky_way_cd);
//
//		// 外部
//		{
//			for (Map<String, String> svcKeiMap : svcKeiList) {
//
//				JBSbatServiceInterfaceMap mapKKIFE178 = null;
//				mapKKIFE178 = new JBSbatServiceInterfaceMap();
//
//				mapKKIFE178.setString(JBSbatKKIFE191.SEIKY_KEI_NO, inMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO));
//				mapKKIFE178.setString(JBSbatKKIFE191.SVC_KEI_NO, svcKeiMap.get(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
//				mapKKIFE178.setString(JBSbatKKIFE191.SEIKY_WAY_NM, payWay);
//				mapKKIFE178.setString(JBSbatKKIFE191.RESULT_NM, resultMsg);
//
//				mapKKIFE178.setOutFlg(true);
//
//				outputBean.addOutMapList(mapKKIFE178);
//			}
//		}
//
//		// 内部
//		{
//			JBSbatServiceInterfaceMap mapKKIFM258 = new JBSbatServiceInterfaceMap();
//
//			mapKKIFM258.setString(JBSbatKKIFM258.SEIKY_KEI_NO, inMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO));
//			mapKKIFM258.setString(JBSbatKKIFM258.SYSID, inMap.getString(JBSbatKK_T_SEIKY_KEI.SYSID));
//			mapKKIFM258.setString(JBSbatKKIFM258.SEIKY_WAY_CD, inMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_WAY_CD));
//			mapKKIFM258.setString(JBSbatKKIFM258.RESULT_CD, resultCd);
//
//			mapKKIFM258.setOutFlg(true);
//
//			outputBean.addOutMapList_2(mapKKIFM258);
//		}
//
//		return outputBean;
//	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
//	}
// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL END

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL START
//		db_KK_T_SVC_KEI.close();
// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL END
		db_KK_T_IDO_RSV.close();
		db_KK_T_SEIKY_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/

// KT1-2013-0000004 2013.01.08 Y.MORIMOTO DEL START
//		outFileSort();
// KT1-2013-0000004 2013.01.08 Y.MORIMOTO DEL END
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL START
//	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
//	/**
//	 * SQLKEY(KK_SELECT_170)でDBアクセスを行います。<br>
//	 * <p>
//	 * <b>処理フロー</b><br>
//	 * <pre>
//	 * 1.引数でバイント変数を設定します。<br>
//	 *
//	 * 2.DBアクセスを実行します。<br>
//	 * 
//	 * 3.メソッドの呼び出し方です。<br>
//	 *		引数:
//	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
//	 *		 	SYSID
//	 *		 	運用日
//	 * </pre>
//	 * <p>
//	 * @param param バイント変数の値配列。
//	 * @throws Exception 業務サービス内で発生した例外全般。
//	 */
//	private void executeKK_T_SVC_KEI_KK_SELECT_170(Object[] param) throws Exception
//	{
//		// バイント変数のリストを生成します
//		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
//		paramList.setValue(param[0].toString());
//		paramList.setValue(param[1].toString());
//
//		// DBアクセスを実行します
//		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_170);
//	}
// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL END

	/**
	 * SQLKEY(KK_SELECT_021)で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_IDO_RSV_KK_SELECT_021(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_IDO_RSV.selectBySqlDefine(paramList, KK_T_IDO_RSV_KK_SELECT_021);
	}

	/**
	 * SQLKEY(KK_SELECT_027)で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_SEIKY_KEI_KK_SELECT_027(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SEIKY_KEI.selectBySqlDefine(paramList, KK_T_SEIKY_KEI_KK_SELECT_027);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL START
//	/**
//	 * サービス契約情報から補正対象かを識別します。
//	 * <BR>
//	 * @param inList KK_T_SVC_KEI_KK_SELECT_170で取得したサービス契約情報
//	 * @return 補正対象ならtrue、違えばfalseを返す
//	 * @throws Exception
//	 */
//	@SuppressWarnings("unchecked")
//	private boolean chkHoseiTg(List<Map> inList) throws Exception
//	{
//		boolean netOnlyFlg = true;				// ネット単独フラグ
//		boolean netUmFlg = false;				// ネットサービス有無フラグ
//		boolean allSvcEndFlg = true;			// 全サービス終了フラグ（全てのサービスが前月以前に終了している場合はtrueを設定）
//		boolean netSvcUseFlg = false;			// ネット利用中フラグ
//		boolean netSvcStaFlg = false;			// ネット開始フラグ
//		boolean telOrTvSvcUseFlg = false;		// 電話orテレビ利用中フラグ
//		boolean telOtTvSvcStaFlg = false;		// 電話orテレビ開始フラグ
//		
//		String svcCd = null;
//		String svcChrgStaYmd = null;
//		String svcChrgStaYm = null;
//		String svcChrgEndYmd = null;
//		String svcChrgEndYm = null;
//		String unyoMonth = JKKBatStringUtil.getLCutString(this.opeDate, 6);
//		
//		String oneMonthAgoYmd = JBSbatDateUtil.adjustMonth(this.opeDate, -1);
//		String oneMonthAgo = JKKBatStringUtil.getLCutString(oneMonthAgoYmd, 6);
//		
//		HashMap svcKeiMap = new HashMap();
//		
//		// サービス契約の取得結果がない場合
//		if(inList == null || inList.size() == 0)
//		{
//			return false;
//		}
//		
//		// サービスコード判定
//		for(int i = 0; i < inList.size(); i++)
//		{
//			svcKeiMap = (HashMap)inList.get(i);
//			svcCd = (String)svcKeiMap.get(JBSbatKK_T_SVC_KEI.SVC_CD);
//			svcChrgStaYmd = (String)svcKeiMap.get(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD);
//			svcChrgStaYm = null;
//			svcChrgEndYmd = (String)svcKeiMap.get(JBSbatKK_T_SVC_KEI.SVC_CHRG_ENDYMD);
//			svcChrgEndYm = null;
//			
//			if(svcChrgStaYmd != null && !("".equals(svcChrgStaYmd)))
//			{
//				svcChrgStaYm = JKKBatStringUtil.getLCutString(svcChrgStaYmd, 6);
//			}
//			
//			if(svcChrgEndYmd != null && !("".equals(svcChrgEndYmd)) && !(JKKBatConst.S_MAX_DATE.equals(svcChrgEndYmd)))
//			{
//				svcChrgEndYm = JKKBatStringUtil.getLCutString(svcChrgEndYmd, 6);
//			}
//			
//			if(JKKBatConst.SVC_CD_NET.equals(svcCd))
//			{
//				netUmFlg = true;
//				
//				// 前月以前から利用中のネットサービスが存在する場合
//				if(svcChrgStaYm != null && (svcChrgStaYm.compareTo(oneMonthAgo)) < 0 && svcChrgEndYm == null)
//				{
//					netSvcUseFlg = true;
//				}
//				// 今月から利用開始のネットサービスが存在する場合
//				else if(svcChrgStaYm != null && (svcChrgStaYm.compareTo(oneMonthAgo)) == 0)
//				{
//					netSvcStaFlg = true;
//				}
//			}
//			else
//			{
//				netOnlyFlg = false;
//				
//				// 前月以前から利用中の電話orテレビのサービスが存在する場合
//				if(svcChrgStaYm != null && (svcChrgStaYm.compareTo(oneMonthAgo)) < 0 && svcChrgEndYm == null)
//				{
//					telOrTvSvcUseFlg = true;
//				}
//				// 今月から利用開始の電話orテレビのサービスが存在する場合
//				else if(svcChrgStaYm != null && (svcChrgStaYm.compareTo(oneMonthAgo)) == 0)
//				{
//					telOtTvSvcStaFlg = true;
//				}
//			}
//		}
//		
//		// ネット単独契約の場合
//		if(netOnlyFlg)
//		{
//			// 全てのネットサービスが前月以前で課金終了している場合は補正対象となる。
//			for(int i = 0; i < inList.size(); i++)
//			{
//				svcKeiMap = (HashMap)inList.get(i);
//				
//				svcChrgEndYmd = (String)svcKeiMap.get(JBSbatKK_T_SVC_KEI.SVC_CHRG_ENDYMD);
//				
//				// 課金終了していないネットサービスが存在する場合（null または 最大年月日）は補正対象外
//				if(svcChrgEndYmd == null || "".equals(svcChrgEndYmd) || svcChrgEndYmd.equals(JKKBatConst.S_MAX_DATE))
//				{
//					allSvcEndFlg = false;
//					break;
//				}
//				// 課金終了が今月以降であるネットサービスが存在する場合は補正対象外
//				svcChrgEndYm = JKKBatStringUtil.getLCutString(svcChrgEndYmd, 6);
//				if(svcChrgEndYm.compareTo(unyoMonth) >= 0)
//				{
//					allSvcEndFlg = false;
//					break;
//				}
//			}
//			// ネットサービス単独で、全てのサービスが終了している場合、補正対象となる。
//			if(allSvcEndFlg)
//			{
//				return true;
//			}
//		}
//		// ネットサービス＋電話orテレビサービスの場合
//		else if(netUmFlg)
//		{
//			// ネットサービスが利用中で、今月から電話orテレビのサービスが開始される場合
//			if(netSvcUseFlg && telOtTvSvcStaFlg)
//			{
//				return true;
//			}
//			// 電話orテレビのサービスが利用中で、今月からネットサービスが開始される場合
//			else if(netSvcStaFlg && telOrTvSvcUseFlg)
//			{
//				return true;
//			}
//		}
//		
//		return false;
//	}
// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL END

// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL START
//	/**
//	 * 請求契約番号にひもづくサービス契約情報を取得します。
//	 * <BR>
//	 * @param outMap KK_T_SVC_KEI_KK_SELECT_170用
//	 * @param inMap 入力電文
//	 * @return 単項目チェックでエラーがある場合はfalseを、なければtrueを返す。
//	 * @throws Exception
//	 */
//	@SuppressWarnings("unchecked")
//	private void getKK_T_SVC_KEI_KK_SELECT_170(List<Map> outList, JBSbatServiceInterfaceMap inMap) throws Exception
//	{
////		String sysid = inMap.getString(JBSbatKK_T_SEIKY_KEI.SYSID);		// SYSID
//		String seiKyKei = inMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO);		// 請求契約番号
//		
//		Map<String, String> childMap = new HashMap();		// 単項目チェック＆出力用マップ
//		JBSbatCommonDBInterface resultMap = new JBSbatCommonDBInterface();		// 結果取得用
//		
//		// パラメータの設定
//		Object[] setParam = {
////				sysid,			// SYSID
//				seiKyKei,		// 請求契約番号
//				this.opeDate	// 予約適用年月日
//		};
//		
//		executeKK_T_SVC_KEI_KK_SELECT_170(setParam);
//		
//		// １件目を先読み
//		resultMap = db_KK_T_SVC_KEI.selectNext();
//
//		// 結果を取得
//		while(resultMap != null)
//		{
//			childMap = new HashMap<String, String>();
//			
//			childMap.put(JBSbatKK_T_SVC_KEI.SVC_KEI_NO, resultMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
//			childMap.put(JBSbatKK_T_SVC_KEI.SVC_CD, resultMap.getString(JBSbatKK_T_SVC_KEI.SVC_CD));
//			childMap.put(JBSbatKK_T_SVC_KEI.SVC_STA_YMD, resultMap.getString(JBSbatKK_T_SVC_KEI.SVC_STA_YMD));
//			childMap.put(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD, resultMap.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD));
//			childMap.put(JBSbatKK_T_SVC_KEI.SVC_ENDYMD, resultMap.getString(JBSbatKK_T_SVC_KEI.SVC_ENDYMD));
//			childMap.put(JBSbatKK_T_SVC_KEI.SVC_CHRG_ENDYMD, resultMap.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_ENDYMD));
//			
//			outList.add(childMap);
//			resultMap = db_KK_T_SVC_KEI.selectNext();
//		}
//	}
// ST4-2013-0000472 2013.06.20 T.TORIKAI DEL START

	/**
	 * 請求契約番号にひもづく異動予約情報を取得します。
	 * <BR>
	 * @param inMap 入力電文
	 * @return 処理結果のメッセージ
	 * @throws Exception
	 */
	private boolean getKK_T_IDO_RSV_KK_SELECT_021(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		//14.0.0 MOD START
		//String seiky_kei_no = inMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO);		// 請求契約番号
		String seiky_kei_no = inMap.getString(JBSbatKKIFM640.SEIKY_KEI_NO);		// 請求契約番号
		//14.0.0 MOD END
		
		JBSbatCommonDBInterface resultMap = new JBSbatCommonDBInterface();		// 結果取得用
		
		// パラメータの設定
		Object[] setParam = {
				seiky_kei_no	// 請求契約番号
		};
		
		executeKK_T_IDO_RSV_KK_SELECT_021(setParam);
		
		// １件目を先読み
		resultMap = db_KK_T_IDO_RSV.selectNext();
		
		if(resultMap == null)
		{
			// "未反映の"異動予約が存在しない場合、trueを返す
			return true;
		}
		else
		{
			// "未反映の"異動予約が存在する場合、falseを返す
			return false;
		}
	}

	/**
	 * 請求契約番号にひもづく請求契約の予約レコードを取得します。
	 * <BR>
	 * @param inMap 入力電文
	 * @return 処理結果のメッセージ
	 * @throws Exception
	 */
	private boolean getKK_T_SEIKY_KEI_KK_SELECT_027(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		//14.0.0 MOD START
		//String seiky_kei_no = inMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO);		// 請求契約番号
		String seiky_kei_no = inMap.getString(JBSbatKKIFM640.SEIKY_KEI_NO);		// 請求契約番号
		//14.0.0 MOD END
		String rsv_aply_cd = null;
		
		JBSbatCommonDBInterface resultMap = new JBSbatCommonDBInterface();		// 結果取得用
		
		// パラメータの設定
		Object[] setParam = {
				seiky_kei_no,	// 請求契約番号
				this.opeDate	// 運用年月日
		};
		
		executeKK_T_SEIKY_KEI_KK_SELECT_027(setParam);
		
		// １件目を先読み
		resultMap = db_KK_T_SEIKY_KEI.selectNext();
		
		// 運用日以降のレコードを最新レコードから順に確認
		while(resultMap != null)
		{
			rsv_aply_cd = resultMap.getString(JBSbatKK_T_SEIKY_KEI.RSV_APLY_CD);
			
			// 取り消されていない予約レコードの場合
			if (!JBSbatKKConst.RSV_APLY_CD_CL.equals(rsv_aply_cd)) {
				return false;
			}
			
			resultMap = db_KK_T_SEIKY_KEI.selectNext();
		}
		
		return true;
	}

//	/**
//	 * ソート処理後のデータファイルを出力します。
//	 * <br>
//	 * @throws Exception 予期しない例外が発生した場合
//	 */
//	private void outFileSort() throws Exception {
//		
//		String inFileName = this.otf1FileName;
//
//		JBSbatInputFileUtil inFileObj = null;
//
//		List<String> inArr = new ArrayList<String>();
//
//		if (!(inFileName == null || "".equals(inFileName.trim()))) {
//
//			inFileObj = new JBSbatInputFileUtil(inFileName);
//			inFileObj.setEncode(JKKBatConst.SJIS);
//			inFileObj.createReader();
//
//			while (inFileObj.ready()) {
//				inArr.add(inFileObj.readLine());
//			}
//
//			inFileObj.close();
//
//			List<String> outMap = sortDataList(inArr);
//
//			String outFileName = this.otf1FileName;
//			JBSbatOutputFileUtil outFileObj = null;
//
//			if (!(inFileName == null || "".equals(inFileName.trim()))) {
//
//				outFileObj = new JBSbatOutputFileUtil(outFileName);
//				outFileObj.setEncode(JKKBatConst.SJIS);
//				outFileObj.setLine(RETURN_CD_CRLF);
//				outFileObj.createWriter();
//				for (String line : outMap) {
//					outFileObj.write(line);
//				}
//				outFileObj.close();
//			}
//		}
//	}

//	/**
//	 * データのソート処理を行います。
//	 * <br>
//	 * @param inArr ソート対象データリスト
//	 * @return List<String> ソート後データリスト
//	 * @throws Exception 予期しない例外が発生した場合
//	 */
//	@SuppressWarnings("unchecked")
//	private List<String> sortDataList(List<String> inArr) throws Exception {
//
//		List<Map<String, Comparable>> sortList = new ArrayList<Map<String, Comparable>>();
//
//		List<String> outData = new ArrayList<String>();
//
//		for (int i = 0; i < inArr.size(); i++) {
//
//			Map<String, Comparable> dataMap = null;
//			dataMap = new HashMap<String, Comparable>();
//
//			String[] line = null;
//			line = inArr.get(i).split(JKKBatConst.S_SEP_CAM, -1);
//
//			dataMap.put(JBSbatKKIFE191.SEIKY_KEI_NO, line[0]);
//			dataMap.put(JBSbatKKIFE191.SVC_KEI_NO, line[1]);
//			dataMap.put(JBSbatKKIFE191.SEIKY_WAY_NM, line[2]);
//			dataMap.put(JBSbatKKIFE191.RESULT_NM, line[3]);
//
//			sortList.add(dataMap);
//		}
//
//		Collections.sort(sortList, new Comparator<Object>() {
//
//			/**
//			 * データのソート処理を行います。
//			 * <br>
//			 * @param arg0
//			 * @param arg1
//			 * @return int
//			 * @throws Exception 予期しない例外が発生した場合
//			 */
//			public int compare(Object arg0, Object arg1) {
//
//				for (String key : SORT_KEYS) {
//
//					HashMap<String, Comparable> o1 = (HashMap<String, Comparable>)arg0;
//					HashMap<String, Comparable> o2 = (HashMap<String, Comparable>)arg1;
//
//					Comparable c1 = o1.get(key);
//					Comparable c2 = o2.get(key);
//					int check = c1.compareTo(c2);
//
//					if (0 != check) {
//						return check;
//					}
//				}
//				return 0;
//			}
//		});
//
//		for (int j = 0; j < sortList.size(); j++) {
//
//			StringBuffer databuf = null;
//			databuf = new StringBuffer();
//
//			Map<String, Comparable> outMap = null;
//			outMap = sortList.get(j);
//
//			databuf.append(outMap.get(JBSbatKKIFE191.SEIKY_KEI_NO));
//			databuf.append(JKKBatConst.S_SEP_CAM);
//			databuf.append(outMap.get(JBSbatKKIFE191.SVC_KEI_NO));
//			databuf.append(JKKBatConst.S_SEP_CAM);
//			databuf.append(outMap.get(JBSbatKKIFE191.SEIKY_WAY_NM));
//			databuf.append(JKKBatConst.S_SEP_CAM);
//			databuf.append(outMap.get(JBSbatKKIFE191.RESULT_NM));
//
//			outData.add(databuf.toString());
//		}
//
//		return outData;
//	}

// ST4-2013-0000472 2013.06.20 T.TORIKAI メソッド追加（バッチの処理パターンを「集約」へ変更）
	/**
	 * 主処理
	 * 
	 * @param inMap			入力電文
	 * @param outputItem	出力情報
	 * @return				出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputItem) throws Exception {
		
		// 出力対象の請求契約
		SeikyKeiInfo outputSeikyKeiInfo = null;
		
		if (inMap != null) {
			// データ取得
			if (currentSeikyKei == null) {
				// 初回
				currentSeikyKei = new SeikyKeiInfo(inMap, this.opeDate);
			} else {
				// ２件目以降
				if (!currentSeikyKei.addSvcKei(inMap)) {
					// 前レコードと異なる請求契約
					outputSeikyKeiInfo = currentSeikyKei;
					currentSeikyKei = new SeikyKeiInfo(inMap, this.opeDate);
				}
			}
		} else {
			// 最終呼出
			outputSeikyKeiInfo = currentSeikyKei;
		}
		
		// 補正要の場合は出力内容を編集する
		if (judgeHosei(outputSeikyKeiInfo)) {
			editOutputData(outputItem, outputSeikyKeiInfo);
		}

		// 出力リストが空の場合はダミーをセットしておく（空のままだとEOF後の呼出がされない）
		if (!outputItem.isOutMapList()) {
			JBSbatServiceInterfaceMap mapKKIFE191 = new JBSbatServiceInterfaceMap();
			mapKKIFE191.setOutFlg(false);
			outputItem.addOutMapList(mapKKIFE191);
		}
		
		return outputItem;
	}
	
// ST4-2013-0000472 2013.06.20 T.TORIKAI メソッド追加
	/**
	 * 補正対象判定
	 * 
	 * @param seikyKeiInfo		請求契約情報
	 * @return					true：補正対象 false：補正対象外
	 */
	private boolean judgeHosei(SeikyKeiInfo seikyKeiInfo) {
		
		if (seikyKeiInfo == null) {
			return false;		// 対象データなし
		}
// OM-2013-0002028 2013.09.20 T.TORIKAI MOD START
//		// ネット単独契約で課金終了している場合は補正対象
//		if (seikyKeiInfo.isNetSvcOnly && seikyKeiInfo.isAllSvcEnd) {
//			return true;
//		}
//		// ネット契約が存在する場合
//		if (seikyKeiInfo.existNetSvc) {
//			// ネットが利用中で、今月から開始のサービスが存在する場合は補正対象
//			if (seikyKeiInfo.isNetSvcUse && seikyKeiInfo.isOtherStart) {
//				return true;
//			}
//			// 今月からネットが開始で、他に利用中のサービスが存在する場合は補正対象
//			if (seikyKeiInfo.isNetSvcStart && seikyKeiInfo.isOtherUse) {
//				return true;
//			}
//		}
//		// 上記以外は補正対象外
//		return false;
		
		// 料金計算対象期間に課金開始されたネットサービスが存在しない場合は対象外
		if (!seikyKeiInfo.netSvcStartNow) {
			return false;
		}
		// 料金計算対象期間より前から使用中のネットサービスがある場合は対象外
		if (seikyKeiInfo.netSvcUseBefor) {
			return false;
		}
		// 料金計算日を越えて利用中のネットサービスが存在しない場合は対象外
		if (!seikyKeiInfo.netSvcUseAfter) {
			return false;
		}
		// 料金計算対象期間より前に課金開始されたネット以外のサービスが存在しない場合は対象外
		if (!seikyKeiInfo.otherSvcUseBefor) {
			return false;
		}
		// 上記以外は補正対象
		return true;
// OM-2013-0002028 2013.09.20 T.TORIKAI MOD START
	}

// ST4-2013-0000472 2013.06.20 T.TORIKAI メソッド追加
	/**
	 * 出力内容編集
	 * 
	 * @param outputItem		出力情報
	 * @param seikyKeiInfo		請求契約情報
	 * @throws Exception
	 */
	private void editOutputData(JBSbatOutputItem outputItem, SeikyKeiInfo seikyKeiInfo) throws Exception {

		// 未反映の予約データ有無を確認する
		JBSbatServiceInterfaceMap param = new JBSbatServiceInterfaceMap();
		param.setString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO, seikyKeiInfo.seikyKeiNo);
		
		// 異動予約の有無
		boolean notExistRsv = getKK_T_IDO_RSV_KK_SELECT_021(param);
		
		// 異動予約が無い場合は、請求契約の予約データ有無
		if (notExistRsv) {
			notExistRsv = getKK_T_SEIKY_KEI_KK_SELECT_027(param);
		}
		
		// 処理結果メッセージを設定
		String resultMsg = RESULT_MESSAGE_OK;
		String resultCd = RESULT_CD_OK;
		if (!notExistRsv) {
			// 予約データ有り
			resultMsg = RESULT_MESSAGE_NG;
			resultCd = RESULT_CD_NG;
		}		
		// 支払方法のメッセージを取得
		String payWay = getPayWay(seikyKeiInfo.seikyWayCd);
		
		// 外部
		for (String svcKeiNo : seikyKeiInfo.svcKeiNoList) {
			JBSbatServiceInterfaceMap mapKKIFE191 = new JBSbatServiceInterfaceMap();
			mapKKIFE191.setString(JBSbatKKIFE191.SEIKY_KEI_NO, seikyKeiInfo.seikyKeiNo);
			mapKKIFE191.setString(JBSbatKKIFE191.SVC_KEI_NO, svcKeiNo);
			mapKKIFE191.setString(JBSbatKKIFE191.SEIKY_WAY_NM, payWay);
			mapKKIFE191.setString(JBSbatKKIFE191.RESULT_NM, resultMsg);
			mapKKIFE191.setOutFlg(true);
			outputItem.addOutMapList(mapKKIFE191);
		}
		
		// 内部
		JBSbatServiceInterfaceMap mapKKIFM258 = new JBSbatServiceInterfaceMap();
		mapKKIFM258.setString(JBSbatKKIFM258.SEIKY_KEI_NO, seikyKeiInfo.seikyKeiNo);
		mapKKIFM258.setString(JBSbatKKIFM258.SYSID, seikyKeiInfo.sysId);
		mapKKIFM258.setString(JBSbatKKIFM258.SEIKY_WAY_CD, seikyKeiInfo.seikyWayCd);
		mapKKIFM258.setString(JBSbatKKIFM258.RESULT_CD, resultCd);
		mapKKIFM258.setOutFlg(true);
		outputItem.addOutMapList_2(mapKKIFM258);
	}
	
// ST4-2013-0000472 2013.06.20 T.TORIKAI メソッド追加
	/**
	 * 請求方法コードに対応する支払い方法の名称を取得する
	 * 
	 * @param seikyWayCd	請求方法コード 
	 * @return				支払い方法
	 * @throws Exception
	 */
	private String getPayWay(String seikyWayCd) throws Exception {
		if (!this.payWayMap.containsKey(seikyWayCd)) {
			this.payWayMap.put(seikyWayCd, JKKBatCommon.getCdDivName(super.commonItem, SEIKY_WAY_CD, seikyWayCd));
		}
		return payWayMap.get(seikyWayCd);
	}

// ST4-2013-0000472 2013.06.20 T.TORIKAI クラス追加
	/**
	 * 
	 * 請求契約情報
	 */
	private static class SeikyKeiInfo {
		/** 請求契約番号 */
		String seikyKeiNo = null;
		/** 請求方法コード */
		String seikyWayCd = null;
		/** SYSID */
		String sysId = null;
		/** 運用日 */
		String opeDate = null;
		/** 請求契約番号に関連付くサービス契約番号の一覧 */
		ArrayList<String> svcKeiNoList = new ArrayList<String>();
// OM-2013-0002028 2013.09.20 T.TORIKAI MOD START
//		/** ネットサービスあり */
//		boolean existNetSvc = false;
//		/** ネットサービスのみ */
//		boolean isNetSvcOnly = true;
//		/** 全サービスが課金終了 */
//		boolean isAllSvcEnd = true;
//		/** ネットサービスは今月から利用開始 */
//		boolean isNetSvcStart = false;
//		/** ネット以外のサービスが今月から利用開始 */
//		boolean isOtherStart = false;
//		/** ネットサービスは今月以前から利用中 */
//		boolean isNetSvcUse = false;
//		/** ネット以外のサービスが今月以前から利用中 */
//		boolean isOtherUse = false;
		/** 料金計算対象期間中に課金開始されるネットのサービス契約あり */
		boolean netSvcStartNow = false;
		/** ネットのサービス契約は以前より利用中 */
		boolean netSvcUseBefor = false;
		/** ネットのサービス契約は料金計算日以降も利用 */
		boolean netSvcUseAfter = false;
		/** ネット以外のサービス契約は以前より利用中 */
		boolean otherSvcUseBefor = false;
// OM-2013-0002028 2013.09.20 T.TORIKAI MOD END
		
		/** コンストラクタ */
		public SeikyKeiInfo(JBSbatServiceInterfaceMap inMap, String opeDate) {
			//14.0.0 MOD START
			//this.seikyKeiNo = (String)inMap.get(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO);
			//this.seikyWayCd = (String)inMap.get(JBSbatKK_T_SEIKY_KEI.SEIKY_WAY_CD);
			//this.sysId = (String)inMap.get(JBSbatKK_T_SEIKY_KEI.SYSID);
			this.seikyKeiNo = (String)inMap.get(JBSbatKKIFM640.SEIKY_KEI_NO);
			this.seikyWayCd = (String)inMap.get(JBSbatKKIFM640.SEIKY_WAY_CD);
			this.sysId = (String)inMap.get(JBSbatKKIFM640.SYSID);
			//14.0.0 MOD END
			this.opeDate = opeDate;
			addSvcKei(inMap);
		}

		/** 請求契約番号に関連付くサービス契約番号の追加 */
		public boolean addSvcKei(JBSbatServiceInterfaceMap inMap) {
			//14.0.0 MOD START
			//if (!this.seikyKeiNo.equals(inMap.get(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO))) {
			if (!this.seikyKeiNo.equals(inMap.get(JBSbatKKIFM640.SEIKY_KEI_NO))) {
			//14.0.0 MOD END
				// 異なる請求契約番号
				return false;
			}
// OM-2013-0002028 2013.09.20 T.TORIKAI DEL START
//			this.svcKeiNoList.add((String)inMap.get(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
//			
//			String svcCd = (String)inMap.get(JBSbatKK_T_SVC_KEI.SVC_CD);
//			String svcChrgStaYmd = (String)inMap.get(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD);
//			String svcChrgStaYm = null;
//			String svcChrgEndYmd = (String)inMap.get(JBSbatKK_T_SVC_KEI.SVC_CHRG_ENDYMD);
//			String svcChrgEndYm = null;
//			
//			if (svcChrgStaYmd != null && !("".equals(svcChrgStaYmd))) {
//				svcChrgStaYm = JKKBatStringUtil.getLCutString(svcChrgStaYmd, 6);
//			}
//			
//			if (svcChrgEndYmd != null && !("".equals(svcChrgEndYmd)) && !(JKKBatConst.S_MAX_DATE.equals(svcChrgEndYmd))) {
//				svcChrgEndYm = JKKBatStringUtil.getLCutString(svcChrgEndYmd, 6);
//			}
//			
//			// 運用日の年月に対する前月を取得
//			String oneMonthAgo = JBSbatDateUtil.adjustMonth(this.opeDate, -1).substring(0, 6);
//			
//			if (JKKBatConst.SVC_CD_NET.equals(svcCd)) {
//				// サービス契約：ネット
//				this.existNetSvc = true;
//				if (svcChrgStaYm != null) {
//					if (svcChrgStaYm.compareTo(oneMonthAgo) < 0 && svcChrgEndYm == null) {
//						// 前月以前から利用開始
//						this.isNetSvcUse = true;
//					}
//					if (svcChrgStaYm.compareTo(oneMonthAgo) == 0) {
//						// 前月から利用開始
//						this.isNetSvcStart = true;
//					} 
//				}
//			} else {
//				// サービス契約：ネット以外
//				this.isNetSvcOnly = false;
//				if (svcChrgStaYm != null) {
//					if (svcChrgStaYm.compareTo(oneMonthAgo) < 0 && svcChrgEndYm == null) {
//						// 前月以前から利用開始
//						this.isOtherUse = true;
//					}
//					if (svcChrgStaYm.compareTo(oneMonthAgo) == 0) {
//						// 前月から利用開始
//						this.isOtherStart = true;
//					} 
//				}
//			}
//			
//			// 全てのサービス契約が課金終了しているか判定
//			if (svcChrgEndYmd == null || "".equals(svcChrgEndYmd) || svcChrgEndYmd.equals(JKKBatConst.S_MAX_DATE)) {
//				this.isAllSvcEnd = false;		// 課金終了日は未設定
//			} else {
//				if (svcChrgEndYm.compareTo(this.opeDate.substring(0, 6)) >= 0) {
//					this.isAllSvcEnd = false;	// 課金終了日に今月以降の年月が設定されている
//				}
//			}
// OM-2013-0002028 2013.09.20 T.TORIKAI DEL END

// ANK-3853-00-00 MOD START
//// OM-2013-0002028 2013.09.20 T.TORIKAI ADD START
//			// サービス課金開始年月日より年月を取得
//			//14.0.0 MOD START
//			//String svcChrgStaYmd = (String)inMap.get(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD);
//			String svcChrgStaYmd = (String)inMap.get(JBSbatKKIFM640.SVC_CHRG_STAYMD);
//			//14.0.0 MOD END
//			if (JKKStringUtil.isNullBlank(svcChrgStaYmd)) {
//				return true;	// 未設定のため無視する
//			}
// OM-2013-0004348対応 20131120 星野 ADD START
			String svcStaYmd = (String)inMap.get(JBSbatKKIFM640.SVC_STA_YMD);
			if (JKKStringUtil.isNullBlank(svcStaYmd)) {
				return true;	// 未設定のため無視する
			}
// ANK-3853-00-00 MOD END
			//14.0.0 MOD START
			//String kakinsTstaYmd = (String)inMap.get(JBSbatKK_T_KAKINS.KAKINS_TSTAYMD);
			//String kakinsTendYmd = (String)inMap.get(JBSbatKK_T_KAKINS.KAKINS_TENDYMD);
			String kakinsTstaYmd = (String)inMap.get(JBSbatKKIFM640.KAKINS_TSTAYMD);
			String kakinsTendYmd = (String)inMap.get(JBSbatKKIFM640.KAKINS_TENDYMD);
			//14.0.0 MOD END
			if (JKKStringUtil.isNullBlank(kakinsTstaYmd) || JKKStringUtil.isNullBlank(kakinsTendYmd)) {
				return true;	// 未設定のため無視する
			}
			
			// 課金先の適用開始終了が逆転している場合
			if(kakinsTendYmd.compareTo(kakinsTstaYmd) < 0){
				// 請求契約との紐付けがキャンセルされているので無視する
				return true;
			}
			// 課金開始前に課金先適用終了している場合
// ANK-3853-00-00 MOD START
//			if( kakinsTendYmd.compareTo(svcChrgStaYmd) < 0 ){
			if( kakinsTendYmd.compareTo(svcStaYmd) < 0 ){
// ANK-3853-00-00 MOD END
				// この請求での課金はないので無視する
				return true;
			}
// OM-2013-0004348対応 20131120 星野 ADD END
// ANK-3853-00-00 MOD START
//			String svcChrgStaYm = JKKBatStringUtil.getLCutString(svcChrgStaYmd, 6);
			String svcStaYm = JKKBatStringUtil.getLCutString(svcStaYmd, 6);
// ANK-3853-00-00 MOD END
			
// ANK-3853-00-00 MOD START
//			// サービス課金開終了月日より年月を取得
//			//14.0.0 MOD START
//			//String svcChrgEndYmd = (String)inMap.get(JBSbatKK_T_SVC_KEI.SVC_CHRG_ENDYMD);
//			String svcChrgEndYmd = (String)inMap.get(JBSbatKKIFM640.SVC_CHRG_ENDYMD);
//			//14.0.0 MOD END
//			if (JKKStringUtil.isNullBlank(svcChrgEndYmd)) {
//				svcChrgEndYmd = JKKBatConst.S_MAX_DATE;		// 未設定のため最大日付(2099/12/31)として処理する
//			}
//			
//			// 料金計算の対象期間となる年月（運用日の年月に対する前月）を取得
//			String svcChrgEndYm = JKKBatStringUtil.getLCutString(svcChrgEndYmd, 6);
			
			// サービス終了年月日より年月を取得
			String svcEndYmd = (String)inMap.get(JBSbatKKIFM640.SVC_ENDYMD);
			if (JKKStringUtil.isNullBlank(svcEndYmd)) {
				svcEndYmd = JKKBatConst.S_MAX_DATE;		// 未設定のため最大日付(2099/12/31)として処理する
			}
			String svcEndYm = JKKBatStringUtil.getLCutString(svcEndYmd, 6);
// ANK-3853-00-00 MOD END
			
			// 料金計算の対象期間となる年月（運用日の年月に対する前月）を取得
			String targetMonth = JBSbatDateUtil.adjustMonth(this.opeDate, -1).substring(0, 6);
			
			//14.0.0 MOD START
			//String svcCd = (String)inMap.get(JBSbatKK_T_SVC_KEI.SVC_CD);
			String svcCd = (String)inMap.get(JBSbatKKIFM640.SVC_CD);
			//14.0.0 MOD END
			if (JKKBatConst.SVC_CD_NET.equals(svcCd)
// ANK-1584-00-00対応 20131217 星野 ADD START
				|| "51".equals(svcCd)
// ANK-1584-00-00対応 20131217 星野 ADD END
			){
				// ネットサービス（光ネット、モバイル 等）
				
// ANK-3853-00-00 MOD START
//				if (targetMonth.compareTo(svcChrgStaYm) == 0) {
				
				if (targetMonth.compareTo(svcStaYm) == 0) {
// ANK-3853-00-00 MOD END
					netSvcStartNow = true;		// 料金計算対象期間中に課金開始されるネットのサービス契約あり
					// 出力対象として一覧へ追加
					//14.0.0 MOD START
					//this.svcKeiNoList.add((String)inMap.get(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
					this.svcKeiNoList.add((String)inMap.get(JBSbatKKIFM640.SVC_KEI_NO));
					//14.0.0 MOD END
				}
// ANK-3853-00-00 MOD START
				// if (targetMonth.compareTo(svcChrgStaYm) > 0 && targetMonth.compareTo(svcChrgEndYm) <= 0) {
				if (targetMonth.compareTo(svcStaYm) > 0 && targetMonth.compareTo(svcEndYm) <= 0) {
// ANK-3853-00-00 MOD END
					netSvcUseBefor = true;		// ネットのサービス契約は以前より利用中
				}
				//14.0.0 MOD START
				//String svcKeiStat = (String)inMap.get(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT);
				String svcKeiStat = (String)inMap.get(JBSbatKKIFM640.SVC_KEI_STAT);
				//14.0.0 MOD END
				if ("100".equals(svcKeiStat)) {
					netSvcUseAfter = true;		// ネットのサービス契約は料金計算日以降も利用
				}
			} else {
				// ネットサービス以外（電話、テレビ）
// ANK-3853-00-00 MOD START
				// if (targetMonth.compareTo(svcChrgStaYm) > 0) {
				if (targetMonth.compareTo(svcStaYm) > 0) {
// ANK-3853-00-00 MOD END
					otherSvcUseBefor = true;	// ネット以外のサービス契約は以前より利用中
				}
			}
// OM-2013-0002028 2013.09.20 T.TORIKAI ADD END
			
			return true;
		}
	}
}
