/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKHhibHuseigoInfCht
*	ソースファイル名	：JBSbatKKHhibHuseigoInfCht.java
*	作成者				：富士通　
*	作成日				：2012年02月15日
*＜機能概要＞
*　光ハイブリッド不整合情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/02/15   富士通		新規作成
*	v5.00.00	2012/01/09   富士通		【ANK-1174-00-00】eoモバイル3Ｇ ハイブリッド連携管理対応
*********************************************************************/
package eo.business.service;

import java.util.HashMap;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatInterface;
import eo.business.common.JBSbatKKConst;
import eo.framework.util.JBSbatDateUtil;
import eo.business.util.file.JBSbatKKIFE167;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKK_T_KAKINS;
import eo.business.util.table.JBSbatKK_T_PRG;
import eo.business.util.table.JBSbatKK_T_SVC_KEI_EOMOBA;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;


/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKHhibHuseigoInfCht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";

	/** テーブル(進捗)*/
	private static final String D_TBL_NAME_KK_T_PRG = "KK_T_PRG";

	/** テーブル(機器提供サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";

	/** テーブル(サービス契約＜ｅｏモバイル＞)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI_EOMOBA = "KK_T_SVC_KEI_EOMOBA";

	/** SQL定義キー(KK_SELECT_016)*/
	private static final String ZM_M_WORK_PARAM_KNRI_KK_SELECT_016 = "KK_SELECT_016";

	/** SQL定義キー(KK_SELECT_050)*/
	private static final String CK_T_CUST_KK_SELECT_050 = "KK_SELECT_050";

	/** SQL定義キー(KK_SELECT_031)*/
	private static final String KK_T_PRG_KK_SELECT_031 = "KK_SELECT_031";

	/** SQL定義キー(KK_SELECT_032)*/
	private static final String KK_T_PRG_KK_SELECT_032 = "KK_SELECT_032";

	/** SQL定義キー(KK_SELECT_126)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_126 = "KK_SELECT_126";

	/** SQL定義キー(KK_SELECT_003)*/
	private static final String KK_T_SVC_KEI_EOMOBA_KK_SELECT_003 = "KK_SELECT_003";

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;

	/** テーブルアクセスクラス(進捗)*/
	private JBSbatSQLAccess db_KK_T_PRG = null;

	/** テーブルアクセスクラス(機器提供サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;

	/** テーブルアクセスクラス(サービス契約＜ｅｏモバイル＞)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI_EOMOBA = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** SQL文のSELECT句：行区分 */
	private static final String SQL_COL_GYO_KBN  = "GYO_KBN";

	/** 出力用項目データなし置き換え文字列 */
	private static final String OUT_CKAN_MOJI   = "−";
	// ANK-1174-00-00 2013/01/09 ADD START
	/** 出力用項目データあり文字列 */
	private static final String OUT_ARI_MOJI   = "○";

	/** 出力用項目契約状態・工事ＮＧ時付与文字列 */
	private static final String KOJING   = "（工事ＮＧ）";
	/** 工事ＮＧエラー時経過日数 */
	private static final String KOJINGERR_KIKNISU   = "KOJINGERR_KIKNISU";
	// ANK-1174-00-00 2013/01/09 ADD END
	
	/** 行タイプ */
	/** 不整合エラー（光ネットサービス提供中）*/
	private static final String GYO_KBN_1 = "1";
	/** 不整合エラー（光ネット停止中、休止・中断中、解約済、キャンセル済） */
	private static final String GYO_KBN_2 = "2";
	/** 不整合エラー（光ネット受付済、照査済、締結済） */
	private static final String GYO_KBN_3 = "3";
	/** 不整合エラー（光ネット契約なし） */
	private static final String GYO_KBN_4 = "4";
	/** プラン変更エラー */
	private static final String GYO_KBN_5 = "5";

	/** 業務パラメータID */
	/** 光ハイブリッド最大契約数 */
	private static final String KK_HHB_MAX_KEI_CNT   = "KK_HHB_MAX_KEI_CNT";
	// ANK-1174-00-00 2013/01/09 MOD START
	/** 光ハイブリッド不整合判断用光ネット登録後経過日数 */
//	private static final String KK_HHB_HUSEI_KIKNISU = "KK_HHB_HUSEI_KIKNISU";
	private static final String KK_HHB_HUSEI_NISU_1 = "KK_HHB_HUSEI_NISU_1";
	// ANK-1174-00-00 2013/01/09 MOD END
	// ANK-1174-00-00 2013/01/09 ADD START
	/** 光ハイブリッド不整合判断用eoモバイル課金開始後経過日数 */
	private static final String KK_HHB_HUSEI_NISU_2 = "KK_HHB_HUSEI_NISU_2";
	// ANK-1174-00-00 2013/01/09 ADD END
	
	/** 保持の為の変数 */
	/** 光ハイブリッド最大契約数 */
	private  String kkHhbMaxKeiCnt = null;
	/** 光ハイブリッド不整合判断用光ネット登録後経過日数 */
	private  String kkHhbHuseigoKiknisu = null;
	// ANK-1174-00-00 2013/01/09 ADD START
	/** 光ハイブリッド不整合判断用eoモバイル課金開始後経過日数 */
	private  String kkHhbHuseigoKiknisuEomoba = null;
	// ANK-1174-00-00 2013/01/09 ADD END
	
	/** 運用日 */
	private  String opeDate = null;
	/** 請求契約番号 */
	private  String seikyuKeiNoWk = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		db_KK_T_PRG = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_PRG);
		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
		db_KK_T_SVC_KEI_EOMOBA = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI_EOMOBA);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		// 運用日を取得
		opeDate = commonItem.getOpeDate();

		// 光ハイブリッド最大契約数を取得
		Object[] whereParam1 = {
				KK_HHB_MAX_KEI_CNT,
				opeDate,
				opeDate
			};
		executeZM_M_WORK_PARAM_KNRI_KK_SELECT_016(whereParam1);
		JBSbatCommonDBInterface workParamKnriMap1 = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		kkHhbMaxKeiCnt = workParamKnriMap1.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);

		// 光ハイブリッド不整合判断用光ネット登録後経過日数を取得
		Object[] whereParam2 = {
				// ANK-1174-00-00 2013/01/09 MOD START
				//	KK_HHB_HUSEI_KIKNISU,
				KK_HHB_HUSEI_NISU_1,
				// ANK-1174-00-00 2013/01/09 MOD END
				opeDate,
				opeDate
			};
		executeZM_M_WORK_PARAM_KNRI_KK_SELECT_016(whereParam2);
		JBSbatCommonDBInterface workParamKnriMap2 = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		kkHhbHuseigoKiknisu = workParamKnriMap2.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);

		// ANK-1174-00-00 2013/01/09 ADD START
		// 光ハイブリッド不整合判断用eoモバイル課金開始後経過日数を取得
		Object[] whereParam3 = {
				KK_HHB_HUSEI_NISU_2,
				opeDate,
				opeDate
			};
		executeZM_M_WORK_PARAM_KNRI_KK_SELECT_016(whereParam3);
		JBSbatCommonDBInterface workParamKnriMap3 = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		kkHhbHuseigoKiknisuEomoba = workParamKnriMap3.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);
		// ANK-1174-00-00 2013/01/09 ADD END

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 内部変数
		boolean outFlg  = true;		// 出力フラグ(false：出力対象外、true：出力対象)
		String kiknisu = null;			// 経過日数
		String gyoKbn = null;			// 行タイプ
		String keiCnt = null;			// ｅｏモバイル契約数
		String jgsChrgStaymd = null;	// 事業者課金開始年月日
		String seikyuKeiNo = null;		// 請求契約番号
		// ANK-1174-00-00 2013/01/09 ADD START
		boolean kojiNgErrFlg  = false;	// 工事NGエラーフラグ(false：工事NGエラー状態以外、true：工事NGエラー状態)
		String sysId = null;			// SYSID
		String keishaType = null;		// 契約者タイプ
		String eohntSvkeiNo = null;		// eo光ネットサービス契約番号
		// ANK-1174-00-00 2013/01/09 ADD END
		
		
		// 入力電文より必要項目を取得
		gyoKbn = JBSbatInterface.trim(inMap.getString(SQL_COL_GYO_KBN));				// 行タイプ
		keiCnt = JBSbatInterface.trim(inMap.getString(JBSbatKKIFE167.KEI_CNT));			// ｅｏモバイル契約数
		jgsChrgStaymd = JBSbatInterface.trim(inMap.getString(JBSbatKKIFE167.KIKNISU));	// 事業者課金開始年月日
		seikyuKeiNo = inMap.getString(JBSbatKK_T_KAKINS.SEIKY_KEI_NO);					// 請求契約番号
		// ANK-1174-00-00 2013/01/09 ADD START
		sysId = inMap.getString(JBSbatKKIFE167.SYSID);									// SYSID
		eohntSvkeiNo = inMap.getString(JBSbatKKIFE167.EOHNT_SVC_KEI_NO);				// ｅｏ光ネットサービス契約番号
		// ANK-1174-00-00 2013/01/09 ADD END
		
		// 出力電文を生成
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// ANK-1174-00-00 2013/01/09 ADD START
		// お客様スキーマより契約者タイプを取得
		Object[] whereParam = {
				sysId,
				opeDate
			};
		
		executeCK_T_CUST_KK_SELECT_050(whereParam);
		JBSbatCommonDBInterface workCustMap = db_CK_T_CUST.selectNext();
		// お客様スキーマから有効なデータが取れない場合は業務エラーを通知する。
		if(workCustMap == null ){
			super.commonItem.setErrFlg(true);	// 処理をスキップ
			return null;
		}
		keishaType = workCustMap.getString(JBSbatCK_T_CUST.KEISHA_TYPE_CD);
			
		// 契約者タイプが個人、法人以外であれば、出力対象としない。
		if(!(JBSbatKKConst.KEISHA_TYPE_CD_KOJIN.equals(keishaType) 
				|| JBSbatKKConst.KEISHA_TYPE_CD_HOJIN.equals(keishaType)))
		{
			return outputBean;
		}
		// ANK-1174-00-00 2013/01/09 ADD END
		
		// 不整合エラー（光ネット受付済、照査済、締結済）の場合は、経過日数を計算します。
		if (GYO_KBN_3.equals(gyoKbn))
		{
			// ANK-1174-00-00 2013/01/09 ADD START
			// 工事ＮＧエラー状態判定実施処理を呼び出す。
			HashMap<String, String> resultHash = new HashMap<String, String>();
			kojiNgErrFlg = jdgKojiNg( eohntSvkeiNo, seikyuKeiNo, resultHash );
			// 工事ＮＧエラー状態判定で使用した経過日数は現在未使用。
			
			// ANK-1174-00-00 2013/01/09 ADD END
			//経過日数を取得します。（事業者課金開始年月日から運用日までの経過日数）
			kiknisu = String.valueOf(JBSbatDateUtil.dayDiff(opeDate, jgsChrgStaymd, JBSbatKKConst.DAYDIFF_3));
	
			// 経過日数のチェックを行います。
			// 光ハイブリッド不整合判断用光ネット登録後経過日数	＞	経過日数	は出力対象としません。
			if (Integer.parseInt(kkHhbHuseigoKiknisu) > Integer.parseInt(kiknisu))
			{
				outFlg = false;		// 出力フラグOFF
			}
		}
		// 不整合エラー（光ネット受付済、照査済、締結済）以外の場合、SQL取得文字列を設定します。
		else
		{
			kiknisu = jgsChrgStaymd;	// 経過日数にSQL側で設定した値（「−」）を設定します。
		}
		// 不整合エラー（光ネットサービス提供中）または、
		// 不整合エラー（光ネット停止中、休止・中断中、解約済、キャンセル済）または、
		// 不整合エラー（光ネット受付済、照査済、締結済）の場合
		if (GYO_KBN_1.equals(gyoKbn) || GYO_KBN_2.equals(gyoKbn) || GYO_KBN_3.equals(gyoKbn))
		{
			// 不整合エラー（光ネットサービス提供中）の場合
			if (GYO_KBN_1.equals(gyoKbn))
			{
				// ネット：モバイル＝１：５のチェックを行う
				// （光ハイブリッド最大契約数	＞	契約数）は出力対象としません。
				if (Integer.parseInt(kkHhbMaxKeiCnt) >= Integer.parseInt(keiCnt))
				{
					outFlg = false;		// 出力フラグOFF
				}
			}
			// 請求契約番号が同じ場合
			if (seikyuKeiNo.equals(seikyuKeiNoWk))
			{
				keiCnt = OUT_CKAN_MOJI;	// 契約数に置き換え文字列を設定します。
			}
			seikyuKeiNoWk = seikyuKeiNo;	// 請求契約番号の退避
		}
		// 出力対象の場合は、編集処理を呼び出します。
		if (outFlg == true)
		{
			// 光ハイブリット不整合リストへの出力情報を設定します。
			// ANK-1174-00-00 2013/01/09 MOD START
			//setOutFileMap(inMap, outputBean, keiCnt, kiknisu);
			setOutFileMap(inMap, outputBean, keiCnt, kiknisu, kojiNgErrFlg);
			// ANK-1174-00-00 2013/01/09 MOD END
		}

		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		db_CK_T_CUST.close();
		db_KK_T_PRG.close();
		db_KK_T_KKTK_SVC_KEI.close();
		db_KK_T_SVC_KEI_EOMOBA.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * 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);
	}

	/**
	 * SQLKEY(KK_SELECT_050)で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 executeCK_T_CUST_KK_SELECT_050(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_KK_SELECT_050);
	}

	/**
	 * SQLKEY(KK_SELECT_031)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	進捗年月日時分秒
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_PRG_KK_SELECT_031(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_PRG.selectBySqlDefine(paramList, KK_T_PRG_KK_SELECT_031);
	}

	/**
	 * SQLKEY(KK_SELECT_032)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_PRG_KK_SELECT_032(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_PRG.selectBySqlDefine(paramList, KK_T_PRG_KK_SELECT_032);
	}

	/**
	 * SQLKEY(KK_SELECT_126)で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_KKTK_SVC_KEI_KK_SELECT_126(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_126);
	}

	/**
	 * SQLKEY(KK_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	予約適用年月日
	 *		 	課金先適用開始年月日
	 *		 	課金先適用終了年月日
	 *		 	請求契約番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_EOMOBA_KK_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI_EOMOBA.selectBySqlDefine(paramList, KK_T_SVC_KEI_EOMOBA_KK_SELECT_003);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	// ANK-1174-00-00 2013/01/09 ADD START
	/**
	 * 工事ＮＧエラー状態かどうか判定する<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.光ネットが工事ＮＧ状態のままモバイル契約が一定期間経過していないかかどうか判定します。また経過年月を取得します。<br>
	 * </pre>
	 * <p>
	 * @param eohntSvkeiNo ｅｏ光ネットサービス契約番号。
	 * @param seikyuKeiNo 請求契約番号。
	 * @param resultHash 算出した経過日数。
	 * @return 工事ＮＧエラー状態であればtrue
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean jdgKojiNg( String eohntSvkeiNo, String seikyuKeiNo, HashMap<String, String> resultHash ) throws Exception
	{

		String minJgsChrgStaymd = null;	// 事業者課金開始年月日
		String kiknisu = null;			// 経過日数
		String kojiNGMaxPrgDtm = null;	// 工事ＮＧの（最大）進捗年月日じｆ
		
		
		// 光ネットのサービス契約番号をパラメータにして進捗スキーマを検索し、
		// 工事ＮＧの最大進捗年月日時分秒を取得する。
		Object[] whereParamPrg = { eohntSvkeiNo };
		executeKK_T_PRG_KK_SELECT_032(whereParamPrg);
		JBSbatCommonDBInterface workPrgMap = db_KK_T_PRG.selectNext();
		if(workPrgMap == null ){
			// 抽出されない場合はその時点で工事ＮＧ状態でないためエラー状態判定結果はfalse
			return false;
		}
		kojiNGMaxPrgDtm = workPrgMap.getString(JBSbatKK_T_PRG.PRG_DTM );
		if(kojiNGMaxPrgDtm == null ){
			// 値が場合は取得できない場合はエラー状態判定結果はfalse
			return false;
		}
		// 光ネットのサービス契約番号をパラメータにして進捗スキーマを検索し、
		// 工事ＮＧ状態かどうかを確認する。
		Object[] whereParamPrg2 = {
				eohntSvkeiNo,
				kojiNGMaxPrgDtm
				};
		executeKK_T_PRG_KK_SELECT_031(whereParamPrg2);
		JBSbatCommonDBInterface workPrgMap2 = db_KK_T_PRG.selectNext();

		// (最新の)工事ＮＧ後に工事ＯＫとなっている進捗の件数が１以上の場合
		if (workPrgMap2.getBigDecimal("PRG_CNT").intValue() >= 1)
		{
			// 工事ＮＧ状態でないため、上位にfalseを返却
			return false;
		}

		// 光ネットと同一の請求契約番号でサービス契約<eoモバイル>を検索
		Object[] whereParam2 = {
				opeDate,
				opeDate,
				opeDate,
				seikyuKeiNo
		};
	
		executeKK_T_SVC_KEI_EOMOBA_KK_SELECT_003(whereParam2);
		JBSbatCommonDBInterface workSvcKeiEoMobaMap = db_KK_T_SVC_KEI_EOMOBA.selectNext();
		if(workSvcKeiEoMobaMap == null ){
			// 抽出されない場合はその時点で工事ＮＧエラー状態判定結果はfalse
			return false;
		}
		minJgsChrgStaymd = workSvcKeiEoMobaMap.getString(JBSbatKK_T_SVC_KEI_EOMOBA.JGS_CHRG_STAYMD);
		//経過日数を取得します。（事業者課金開始年月日から運用日までの経過日数）
		kiknisu = String.valueOf(JBSbatDateUtil.dayDiff(opeDate, minJgsChrgStaymd, JBSbatKKConst.DAYDIFF_3));
		
		// 経過日数のチェックを行います。
		// 光ハイブリッド不整合判断用光ネット登録後経過日数	＞	経過日数	の場合
		if (Integer.parseInt(kkHhbHuseigoKiknisuEomoba) > Integer.parseInt(kiknisu))
		{
			// 工事ＮＧ状態ではあるが、一定期間が経過していないので、上位にfalseを返却
			return false;
		}

		// 算出した工事ＮＧエラー時経過日数を上位に返却
		resultHash.put(KOJINGERR_KIKNISU, kiknisu);
		return true;
	}

	/**
	 * ネット契約に紐づくタブレット機器が存在するかどうか判定する<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.ネット契約に紐づくタブレット機器が存在するかどうか判定する。<br>
	 * </pre>
	 * <p>
	 * @param inMap　入力電文。
	 * @return タブレット機器が有あればtrueを返却。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean jdgTabletUm( JBSbatServiceInterfaceMap inMap) throws Exception
	{
		String gyoKbn = null;			// 行タイプ
		String eohntSvkeiNo = null;		// ｅｏ光ネットサービス契約番号

		gyoKbn = JBSbatInterface.trim(inMap.getString(SQL_COL_GYO_KBN));							// 行タイプ
		eohntSvkeiNo = JBSbatInterface.trim(inMap.getString(JBSbatKKIFE167.EOHNT_SVC_KEI_NO));		// ｅｏ光ネットサービス契約番号


		// 行タイプが不整合エラー（光ネット契約なし）、
		// 不整合エラー（プラン変更エラー）以外の場合
		if(!(GYO_KBN_4.equals(gyoKbn) || GYO_KBN_5.equals(gyoKbn)))
		{
			// 機器提供サービス契約スキーマよりタブレット件数を取得
			Object[] whereParam2 = {
					eohntSvkeiNo,
					opeDate
			};
			
			executeKK_T_KKTK_SVC_KEI_KK_SELECT_126(whereParam2);
			JBSbatCommonDBInterface worKktkSvcKeiMap = db_KK_T_KKTK_SVC_KEI.selectNext();
			// ｅｏ光ネットに紐づく機器の件数が１件以上の場合
			if (worKktkSvcKeiMap.getBigDecimal("TABLET_CNT").intValue() >= 1)
			{
				return true;
			}
		}
		return false;
		
	}
	// ANK-1174-00-00 2013/01/09 ADD END
	
	/**
	 * 光ハイブリット不整合リストへの出力情報を設定します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数情報を元に光ハイブリット不整合リストへの出力情報を設定します。<br>
	 * </pre>
	 * <p>
	 * @param inMap 入力電文。
	 * @param outputBean 出力電文。
	 * @param inKeiCnt 契約数。
	 * @param inKiknisu 経過日数。
	 * @param kojiNgFlg 工事ＮＧエラー状態フラグ。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */

	// ANK-1174-00-00 2013/01/09 MOD START
	//private void setOutFileMap(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputBean, String inKeiCnt, String inKiknisu) throws Exception
	private void setOutFileMap(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputBean, String inKeiCnt, String inKiknisu, boolean kojiNgErrFlg) throws Exception
	// ANK-1174-00-00 2013/01/09 MOD END
	{
		String svkeiStat = null;	// 契約状態
	// ANK-1174-00-00 2013/01/09 ADD START
		boolean tabletUm = false;	// (false：タブレット無、true：タブレット有)
	// ANK-1174-00-00 2013/01/09 ADD END
		
		// 光ハイブリット不整合リストマップを生成
		JBSbatServiceInterfaceMap outFileMap = new JBSbatServiceInterfaceMap();

		// 出力電文編集
		// エラータイプ
		outFileMap.setString(JBSbatKKIFE167.ERR_TYPE, JBSbatInterface.trim(inMap.getString(JBSbatKKIFE167.ERR_TYPE)));
		// ＳＹＳＩＤ
		outFileMap.setString(JBSbatKKIFE167.SYSID, JBSbatInterface.trim(inMap.getString(JBSbatKKIFE167.SYSID)));
		// ｅｏモバイルサービス契約番号を設定
		outFileMap.setString(JBSbatKKIFE167.EOMOBA_SVC_KEI_NO, JBSbatInterface.trim(inMap.getString(JBSbatKKIFE167.EOMOBA_SVC_KEI_NO)));
		// 事業者用契約ＩＤを設定
		outFileMap.setString(JBSbatKKIFE167.JIGYOSHA_KEI_ID, JBSbatInterface.trim(inMap.getString(JBSbatKKIFE167.JIGYOSHA_KEI_ID)));
		// ｅｏモバイル契約数を設定
		outFileMap.setString(JBSbatKKIFE167.KEI_CNT, inKeiCnt);
		// ｅｏ光ネットサービス契約番号を設定
		outFileMap.setString(JBSbatKKIFE167.EOHNT_SVC_KEI_NO, JBSbatInterface.trim(inMap.getString(JBSbatKKIFE167.EOHNT_SVC_KEI_NO)));

		svkeiStat = JBSbatInterface.trim(inMap.getString(JBSbatKKIFE167.SVKEI_STAT));	//契約状態を取得

		// ANK-1174-00-00 2013/01/09 ADD START
		// 工事ＮＧエラー状態フラグがtrueの場合は、契約状態に"（工事ＮＧ）"の文言を付与する。
		if( kojiNgErrFlg == true )
		{
			StringBuilder workSvKeiStat = new StringBuilder(svkeiStat);
			workSvKeiStat.append(KOJING);
			svkeiStat = workSvKeiStat.toString();
		}
		// ANK-1174-00-00 2013/01/09 ADD END
		
		// ANK-1174-00-00 2013/01/09 MOD START
		// 契約状態が7文字以上の場合は、8文字以降を切り捨てます。
		//if(svkeiStat.length() <= 7)
		// 契約状態が9文字以上の場合は、10文字以降を切り捨てます。
		if(svkeiStat.length() <= 9)
		// ANK-1174-00-00 2013/01/09 MOD END
		{
			outFileMap.setString(JBSbatKKIFE167.SVKEI_STAT, svkeiStat);					// 契約状態を設定
		}
		else
		{
			// ANK-1174-00-00 2013/01/09 MOD START
			//outFileMap.setString(JBSbatKKIFE167.SVKEI_STAT, svkeiStat.substring(0, 7));	// 契約状態を設定
			outFileMap.setString(JBSbatKKIFE167.SVKEI_STAT, svkeiStat.substring(0, 9));	// 契約状態を設定
			// ANK-1174-00-00 2013/01/09 MOD END

		}
		// 経過日数を設定
		outFileMap.setString(JBSbatKKIFE167.KIKNISU, inKiknisu);

		// ANK-1174-00-00 2013/01/09 ADD START
		// タブレット有無を判定
		tabletUm = jdgTabletUm(inMap);
		// タブレット有の場合
		if(  tabletUm == true ) {
			outFileMap.setString(JBSbatKKIFE167.TABLET_UM, OUT_ARI_MOJI);
		}
		else
		// タブレット無の場合
		{
			outFileMap.setString(JBSbatKKIFE167.TABLET_UM, OUT_CKAN_MOJI);
		}
		// ANK-1174-00-00 2013/01/09 ADD END
		
		// 出力フラグを設定します。
		outFileMap.setOutFlg(true);
		
		// 光ハイブリット不整合リスト送信マップを追加
		outputBean.addOutMapList(outFileMap);
	}
}
