/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACTsushinRyoUpplTchDchs
*	ソースファイル名	：JBSbatACTsushinRyoUpplTchDchs.java
*	作成者				：富士通　
*	作成日				：2012年03月14日
*＜機能概要＞
*　通信量上限通知データ抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/03/14   富士通		新規作成
*	v3.00.00	2012/05/11   FJ)古谷	【ANK-0050-00-00】超過通知コードの不具合対応
*	v4.00.00	2012/09/11   FJ)冨井	【ANK-0363-00-00】通信量超過通知設定スキーマ検索修正
*	v4.01.00	2013/04/23   FJ)早崎	【ST4-2013-0000441】当月レコードのみ処理対象とする
*	v4.02.00	2013/04/28   FJ)浜口	【KT1-2013-0000496】通信／通話上限超過情報出力の有効メールアドレス判定条件修正
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatRknBusinessUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatACIFM132;
import eo.business.util.file.JBSbatACIFM134;
import eo.business.util.table.JBSbatAC_M_TSRYO_CKTCSETE;
import eo.common.constant.JACStrConst;
import eo.common.util.JPCEditString;
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;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACTsushinRyoUpplTchDchs extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(通信量超過通知設定)*/
	private static final String D_TBL_NAME_AC_M_TSRYO_CKTCSETE = "AC_M_TSRYO_CKTCSETE";

	/** テーブル(ＦＴＴＨ通信合計)*/
	private static final String D_TBL_NAME_AC_T_FTTH_TUSHIN_GK = "AC_T_FTTH_TUSHIN_GK";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String AC_M_TSRYO_CKTCSETE_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_002)*/
	private static final String AC_T_FTTH_TUSHIN_GK_AC_SELECT_002 = "AC_SELECT_002";

	/** テーブルアクセスクラス(通信量超過通知設定)*/
	private JBSbatSQLAccess db_AC_M_TSRYO_CKTCSETE = null;

	/** テーブルアクセスクラス(ＦＴＴＨ通信合計)*/
	private JBSbatSQLAccess db_AC_T_FTTH_TUSHIN_GK = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼クラス変数追加 開始▼▼▼▼▼▼*/
	
	/** 通信量超過通知設定マップ */
	private HashMap<String, ArrayList<HashMap<String, Object>>> tsryoCktcseteMap = null;
	
	/** 通信量超過通知設定番号(1) */
	private static final String TSRYO_CKTCSETE_NO_ONE = "1";
	
	/** 運用年月 */
	private String opeDateYm = JACStrConst.KARA_MOJI;
	
	/**▲▲▲▲▲▲クラス変数追加 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_AC_M_TSRYO_CKTCSETE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_M_TSRYO_CKTCSETE);
		db_AC_T_FTTH_TUSHIN_GK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_T_FTTH_TUSHIN_GK);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][opeDate=" + super.opeDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItem=" + super.freeItem + "]");
		
		// 通信量超過通知設定マップを作成します。
		this.makeTsryoCktcsete();
		
		// 運用年月を取得します
		opeDateYm = super.opeDate.substring(0, 6);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]");
		
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
	
		// 利用年月
		String useYm = inMap.getString(JBSbatACIFM132.RIYOU_YM);
		
		// 当月のデータではなかった場合
		if(!useYm.equals(opeDateYm))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][当月データではないため処理対象外]");
			
			// 処理対象外
			return null;
		}
		
		// 入力キー（料金コースコード＋料金サービスコード）
		String inKey = this.getTmpMapKeyInMap(inMap);
		
		// 退避．通信量超過通知設定マップ．キーに入力キーが含まれる場合
		if(this.tsryoCktcseteMap.containsKey(inKey))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][退避．通信量超過通知設定マップ．キーに入力キーが含まれる]");
			// 利用通信量合計（反映前）
			BigDecimal prcGkhaneiPrv = new BigDecimal(inMap.getString(JBSbatACIFM132.TUSHINRYOGKEI_MAE));
			// 利用通信量合計（反映後）
			BigDecimal prcGkhaneiAf = new BigDecimal(inMap.getString(JBSbatACIFM132.TUSHINRYOGKEI_ATO));
			
			// 通信量超過通知設定リスト
			ArrayList<HashMap<String, Object>> trgList = this.tsryoCktcseteMap.get(inKey);
			// 通信量超過通知設定情報
			HashMap<String, Object> trgMap = null;
			// リストサイズ
			int listSize = trgList.size();
			
			int i = 0;
			// 通信量超過通知設定リスト内を検索します。
			for(; i < listSize; i++)
			{
				// 通信量超過通知設定情報取得
				trgMap = trgList.get(i);
				// 通信量上限通知データ判定結果が該当有の場合
				if(this.isTsushinRyoUpplTrg(prcGkhaneiPrv, prcGkhaneiAf, trgMap))
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][通信量上限通知データ判定結果が該当有]");
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][trgMap=" + trgMap.toString() + "]");
					
					// FTTH通信合計スキーマ検索結果が該当有の場合
					if(this.isFtthTsushinGk(inMap))
					{
						// FTTH通信合計スキーマ更新処理
						this.updateFtthTshushinGk(inMap, trgMap);
						// 出力情報作成処理
						outputItem.addOutMapList(this.makeOutputBean(inMap, trgMap));
					}
					break;
				}
			}
			
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_AC_M_TSRYO_CKTCSETE.close();
		db_AC_T_FTTH_TUSHIN_GK.close();
		db_KK_T_SVC_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	上限超過通知種別コード
	 *		 	通信量超過通知設定適用開始年月日
	 *		 	通信量超過通知設定適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_M_TSRYO_CKTCSETE_AC_SELECT_001(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_AC_M_TSRYO_CKTCSETE.selectBySqlDefine(paramList, AC_M_TSRYO_CKTCSETE_AC_SELECT_001);
	}

	/**
	 * SQLKEY(AC_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	料金コースコード
	 *		 	料金サービスコード
	 *		 	請求契約番号
	 *		 	利用年月
	 *		 	超過通知コード
	 *		 	超過通知コード
	 *		 	超過通知コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_FTTH_TUSHIN_GK_AC_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());

		// DBアクセスを実行します
		db_AC_T_FTTH_TUSHIN_GK.selectBySqlDefine(paramList, AC_T_FTTH_TUSHIN_GK_AC_SELECT_002);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	超過通知コード				CHOK_TCHI_CD
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SVC_KEI_NO
	 *		 	PCRS_CD
	 *		 	PRC_SVC_CD
	 *		 	USE_YM
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_FTTH_TUSHIN_GK_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("CHOK_TCHI_CD", setParam[0]);
		setMap.setValue("UPD_DTM", setParam[1]);
		setMap.setValue("UPD_OPEACNT", setParam[2]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SVC_KEI_NO", whereParam[0]);
		whereMap.setValue("PCRS_CD", whereParam[1]);
		whereMap.setValue("PRC_SVC_CD", whereParam[2]);
		whereMap.setValue("USE_YM", whereParam[3]);

		// DBアクセスを実行します
		db_AC_T_FTTH_TUSHIN_GK.updateByPrimaryKeys(whereMap, setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼メソッド追加 開始▼▼▼▼▼▼*/
	
	/**
	 * 通信量超過通知設定スキーマを検索し、取得した項目を退避させます。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeTsryoCktcsete() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeTsryoCktcsete]");
		
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		// 上限超過通知種別コード
		whereParam.setValue(JACStrConst.UPPL_CHOK_TCH_SBT_CD_TSUSHIN);
		// 通信量超過通知設定適用開始年月日
		whereParam.setValue(super.opeDate);
		// 通信量超過通知設定適用終了年月日
		whereParam.setValue(super.opeDate);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeTsryoCktcsete][whereParam=" + whereParam.getList().toString() + "]");
		
		// SQL実行
		this.executeAC_M_TSRYO_CKTCSETE_AC_SELECT_001(whereParam.getList().toArray());
		
		// 検索結果取得
		JBSbatCommonDBInterface dbMap = db_AC_M_TSRYO_CKTCSETE.selectNext();
		
		this.tsryoCktcseteMap = new HashMap<String, ArrayList<HashMap<String, Object>>>();
		
		if(null == dbMap)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeTsryoCktcsete]");
			return;
		}
		// 退避マップキー（前回分）
		String tmpKey = this.getTmpMapKeyMst(dbMap);
		
		// 検索結果設定値（リスト）
		ArrayList<HashMap<String, Object>> setValue = new ArrayList<HashMap<String, Object>>();
		
		// 取得結果を退避させます。
		while(null != dbMap)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeTsryoCktcsete][dbMap=" + dbMap.getMap().toString() + "]");
			
			// 退避マップキー（今回分）
			String inKey = this.getTmpMapKeyMst(dbMap);
			
			// キーブレイク時
			if(!tmpKey.equals(inKey))
			{
				// 退避．通信量超過通知設定マップに値を追加
				this.tsryoCktcseteMap.put(tmpKey, setValue);
				
				// 検索結果設定値（リスト）生成
				setValue = new ArrayList<HashMap<String, Object>>();
				// 退避マップキー（前回分）　更新
				tmpKey = inKey;
			}
			// 検索結果設定値（リスト）に取得結果を退避
			setValue.add(dbMap.getMap());
			// 次の検索結果を読み込む
			dbMap = db_AC_M_TSRYO_CKTCSETE.selectNext();
		}
		// 退避．通信量超過通知設定マップに値を追加
		this.tsryoCktcseteMap.put(tmpKey, setValue);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeTsryoCktcsete]");
	}
	
	/**
	 * 通信量超過通知設定スキーマの検索結果を基に、退避マップのキーを取得し、返却します。
	 * 退避マップキー：料金コースコード＋料金サービスコード
	 * 
	 * @param dbMap 通信量超過通知設定スキーマ情報
	 * @return String 退避マップキー
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getTmpMapKeyMst(JBSbatCommonDBInterface dbMap) throws Exception
	{
		StringBuffer buf = new StringBuffer();
		
		// 料金コースコード
		buf.append(dbMap.getString(JBSbatAC_M_TSRYO_CKTCSETE.PCRS_CD));
		// 料金プランコード（前後空白を削除の上、料金サービスコードの桁数に合わせて右埋め半角空白パディング）
		buf.append(this.editTrgStr(dbMap.getString(JBSbatAC_M_TSRYO_CKTCSETE.PPLAN_CD), JACStrConst.PRC_SVC_CD_LENGTH));
		
		return buf.toString();
	}
	
	/**
	 * 入力情報を基に退避マップのキーを取得し、返却します。
	 * 退避マップキー：料金コースコード＋料金サービスコード
	 * 
	 * @param inMap 入力情報
	 * @return String 退避マップキー
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getTmpMapKeyInMap(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		StringBuffer buf = new StringBuffer();
		
		// 料金コースコード
		buf.append(inMap.getString(JBSbatACIFM132.PCRS_CD));
		// 料金サービスコード（前後空白を削除の上、料金サービスコードの桁数に合わせて右埋め半角空白パディング）
		buf.append(this.editTrgStr(inMap.getString(JBSbatACIFM132.PRC_SVC_CD), JACStrConst.PRC_SVC_CD_LENGTH));
		
		return buf.toString();
	}
	
	/**
	 * 対象文字列の前後の全角・半角空白文字をトリムし、
	 * 指定された桁数で右埋めの半角空白パディングを行った結果の文字列を返却します。
	 * 
	 * @param trgStr 対象文字列
	 * @param length 右埋め半角空白パディングを行う桁数
	 * @return String 処理結果の文字列
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String editTrgStr(String trgStr, int length) throws Exception
	{
		String rtnStr = JPCEditString.Rtrim(trgStr);
		rtnStr = JACbatRknBusinessUtil.fillHalfSpace(rtnStr, length, true);
		return rtnStr;
	}
	
	/**
	 * 通信量超過通知設定スキーマ情報の通知対象通信量が、
	 * 以下の条件を満たすかの判定を行います。
	 * 条件：引数１（利用通信量合計（反映前））≦通知対象通信量＜引数２（利用通信量合計（反映後））
	 * 
	 * @param prvValue 利用通信量合計（反映前）
	 * @param afValue 利用通信量合計（反映後）
	 * @param trgMap 通信量超過通知設定スキーマ情報
	 * @return boolean 判定結果（true:条件を満たす場合、false:満たさない場合）
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean isTsushinRyoUpplTrg(BigDecimal prvValue, BigDecimal afValue, HashMap<String, Object> trgMap) throws Exception
	{
		// 対象通信量
		BigDecimal trgValue = new BigDecimal(String.valueOf(trgMap.get(JBSbatAC_M_TSRYO_CKTCSETE.TCHI_TG_TSRYO)));
		
		// 引数１　≦　対象通信量　＜　引数２の場合
		if(prvValue.compareTo(trgValue) <= 0 && trgValue.compareTo(afValue) < 0)
		{
			return true;
		}
		return false;
	}
	
	/**
	 * FTTH通信合計スキーマを検索し、該当データの有無を判定します。
	 * 
	 * @param inMap 入力情報
	 * @return boolean 判定結果（true:該当データ有、false:該当データなし）
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean isFtthTsushinGk(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][isFtthTsushinGk]");
		
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		// サービス契約番号
		whereParam.setValue(inMap.getString(JBSbatACIFM132.SVKEI_NO));
		// 料金コースコード
		whereParam.setValue(inMap.getString(JBSbatACIFM132.PCRS_CD));
		// 料金サービスコード（前後空白を削除の上、料金サービスコードの桁数に合わせて右埋め半角空白パディング）
		whereParam.setValue(this.editTrgStr(inMap.getString(JBSbatACIFM132.PRC_SVC_CD), JACStrConst.PRC_SVC_CD_LENGTH));
		// 請求契約番号
		whereParam.setValue(inMap.getString(JBSbatACIFM132.SEIKY_KEI_NO));
		// 利用年月
		whereParam.setValue(opeDateYm);
		// 超過通知コード(未通知)
		whereParam.setValue(JACStrConst.CHOK_TCHI_CD_MI);
		// 超過通知コード(通知済)
		whereParam.setValue(JACStrConst.CHOK_TCHI_CD_ZUMI);
		// 超過通知コード(再判定中)
		whereParam.setValue(JACStrConst.CHOK_TCHI_CD_JUDGE);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isFtthTsushinGk][whereParam=" + whereParam.getList().toString() + "]");
		
		// SQL実行
		this.executeAC_T_FTTH_TUSHIN_GK_AC_SELECT_002(whereParam.getList().toArray());
		
		// 結果取得
		
		// 取得結果なしの場合
		if(null == db_AC_T_FTTH_TUSHIN_GK.selectNext())
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isFtthTsushinGk][FTTH通信合計スキーマに該当レコードなし");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isFtthTsushinGk]");
			return false;
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isFtthTsushinGk][FTTH通信合計スキーマに該当レコードあり");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isFtthTsushinGk]");
		return true;
	}
	
	/**
	 * 入力情報、通信量超過通知設定スキーマ情報を基にFTTH通信料合計スキーマを更新します。
	 * 
	 * @param inMap 入力情報
	 * @param trgMap 通信量超過通知設定スキーマ情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void updateFtthTshushinGk(JBSbatServiceInterfaceMap inMap, HashMap<String, Object> trgMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][updateFtthTshushinGk]");
		
		// 設定値
		JBSbatCommonDBInterface setParam = new JBSbatCommonDBInterface();
		
		// 通信量超過通知設定番号が"1"の場合
		if(String.valueOf(trgMap.get(JBSbatAC_M_TSRYO_CKTCSETE.TSRYO_CKTCSETE_NO)).equals(TSRYO_CKTCSETE_NO_ONE))
		{
			// 超過通知コードに"1"に更新
			setParam.setValue(JACStrConst.CHOK_TCHI_CD_ZUMI);
		}
		// 上記以外の場合
		else
		{
			//超過通知コードに"3"に更新
			setParam.setValue(JACStrConst.CHOK_TCHI_CD_OVER);
		}
		// 更新年月日時分秒
		setParam.setValue(JCCBatCommon.getSysDateTimeStamp());
		// 更新オペレータアカウント
		setParam.setValue(super.batchUserId);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updateFtthTshushinGk][setParam=" + setParam.getList().toString() + "]");
		
		// 条件値
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		// サービス契約番号
		whereParam.setValue(inMap.getString(JBSbatACIFM132.SVKEI_NO));
		// 料金コースコード
		whereParam.setValue(inMap.getString(JBSbatACIFM132.PCRS_CD));
		// 料金サービスコード（前後空白を削除の上、料金サービスコードの桁数に合わせて右埋め半角空白パディング）
		whereParam.setValue(this.editTrgStr(inMap.getString(JBSbatACIFM132.PRC_SVC_CD), JACStrConst.PRC_SVC_CD_LENGTH));
		// 利用年月
		whereParam.setValue(inMap.getString(JBSbatACIFM132.RIYOU_YM));
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updateFtthTshushinGk][whereParam=" + whereParam.getList().toString() + "]");
		
		// SQL実行
		this.executeAC_T_FTTH_TUSHIN_GK_PKUPDATE(setParam.getList().toArray(), whereParam.getList().toArray());
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][updateFtthTshushinGk]");
	}
	
	/**
	 * 入力情報・通信量超過通知設定スキーマ情報を基に出力情報を作成し、返却します。
	 * 
	 * @param inMap 入力情報
	 * @param trgMap 通信量超過通知設定スキーマ情報
	 * @return JBSbatServiceInterfaceMap 出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap makeOutputBean(JBSbatServiceInterfaceMap inMap, HashMap<String, Object> trgMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputBean]");
		JBSbatServiceInterfaceMap outBean = new JBSbatServiceInterfaceMap();
		
		outBean.set(JBSbatACIFM134.SVKEI_NO,				inMap.get(JBSbatACIFM132.SVKEI_NO));							// サービス契約情報
		outBean.set(JBSbatACIFM134.PCRS_CD,					inMap.get(JBSbatACIFM132.PCRS_CD));								// 料金コースコード
		outBean.set(JBSbatACIFM134.PRC_SVC_CD,				inMap.get(JBSbatACIFM132.PRC_SVC_CD));							// 料金サービスコード
		outBean.set(JBSbatACIFM134.SEIKY_KEI_NO,			inMap.get(JBSbatACIFM132.SEIKY_KEI_NO));						// 請求契約番号
		outBean.set(JBSbatACIFM134.SEIKY_YM,				inMap.get(JBSbatACIFM132.SEIKY_YM));							// 請求年月
		outBean.set(JBSbatACIFM134.RIYOU_YM,				inMap.get(JBSbatACIFM132.RIYOU_YM));							// 利用年月
		outBean.set(JBSbatACIFM134.MAIL_CD,					trgMap.get(JBSbatAC_M_TSRYO_CKTCSETE.MAIL_CD));					// メール用メールコード
		outBean.set(JBSbatACIFM134.HAGAKI_YO_WORK_PARAM_ID,	trgMap.get(JBSbatAC_M_TSRYO_CKTCSETE.HAGAKI_YO_WORK_PARAM_ID));	// はがき用業務パラメータＩＤ
		
		// 出力フラグをtrue
		outBean.setOutFlg(true);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutputBean]");
		return outBean;
	}
	
	/**▲▲▲▲▲▲メソッド追加 終了▲▲▲▲▲▲*/
}
