/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACFtthTsnDtlChrgKhUpd
*	ソースファイル名	：JBSbatACFtthTsnDtlChrgKhUpd.java
*	作成者				：富士通　
*	作成日				：2012年09月21日
*＜機能概要＞
*　ＦＴＴＨ通信明細課金可否更新部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00		2012/09/21   FJ）冨井	【ANK-0369-00-00】新規作成
*	v4.00		2012/12/19   FJ）垣内	【内部管理番号-0000196】【ST2-2012-0001779】対応
*	v4.00		2012/12/26   FJ）垣内	【TG1-2012-0000204】料金計算結果リスト「CDR課金なしエラー」の明細不備
*	v4.00		2013/02/05   FJ）高田   【ST4-2013-0000130】対応
*	v4.01		2013/02/21   FJ）狭間   【ST4-2013-0000130】速度改善の為、アンロード化及び更新方法見直し
*	v5.00		2013/07/04   FJ）狭間   【TG1-2013-0000657】サービス契約をデータ取得年月日時点での最新を見るよう修正
*	v5.01		2013/10/11   FJ）間     【 OM-2013-0002931】ｅｏ光ネット料金プラン体系識別コードが定額制の場合、料金計算結果情報にデータを出力しないよう修正
*	v8.00.00	2013/12/11   FJ）柴田	【ANK-1584-00-00】出力ファイルにサービス詳細識別番号を追加。
*	v8.00.01	2014/02/24   FJ) 江森	【OM-2014-00001070】ファイルを出力しないように修正
*	v9.00.00	2014/07/05   FJ) 鈴木	【OM-2014-0002090】ＦＴＴＨ通信明細の更新条件に請求年月を追加
*	v19.00.00	2015/09/11   FJ) 辰野	【OM-2015-0001847】ＦＴＴＨ通信明細更新キー退避処理を追加
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JACBatCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatACIFM196;
import eo.business.util.file.JBSbatACIFM276;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.constant.JZM0171Constant;
import eo.common.util.JPCUtilCommon;
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;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACFtthTsnDtlChrgKhUpd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(ＦＴＴＨ通信明細)*/
	private static final String D_TBL_NAME_AC_T_FTTH_TUSHIN_DTL = "AC_T_FTTH_TUSHIN_DTL";

	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** SQL定義キー(AC_UPDATE_001)*/
	private static final String AC_T_FTTH_TUSHIN_DTL_AC_UPDATE_001 = "AC_UPDATE_001";

	/** SQL定義キー(AC_UPDATE_002)*/
	private static final String AC_T_FTTH_TUSHIN_DTL_AC_UPDATE_002 = "AC_UPDATE_002";

	/** SQL定義キー(AC_SELECT_003)*/
	private static final String ZM_M_CD_NM_KANRI_AC_SELECT_003 = "AC_SELECT_003";

	/** テーブルアクセスクラス(ＦＴＴＨ通信明細)*/
	private JBSbatSQLAccess db_AC_T_FTTH_TUSHIN_DTL = null;
	
	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** ＦＴＴＨ通信明細_UPDATE_001 */
	private static final String FTTHTSNDTLUPD01 = "1";
	
	/** 料金計算結果内容コード */
	private String prcClcRsltCd = JACStrConst.KARA_MOJI;

	/** 料金計算結果内容コード種別名 */
	private String prcRsltNyo = JACStrConst.KARA_MOJI;

	/** コード名称管理情報マップ */
	private HashMap<String, String> cdNmKnriInfMap = null;
		
	/** ＦＴＴＨ通信量明細更新数 */
	private int ftthTushinDtlCnt = 0;
	
	/** 異動区分（解約） */
	private static final String IDO_DIV_KAIYAKU = "2";
	
	/** 異動区分（回復） */
	private static final String IDO_DIV_KAIFUKU = "3";	
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_AC_T_FTTH_TUSHIN_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_T_FTTH_TUSHIN_DTL);
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		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 + "]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		
		// 業務パラメータの取得
		// パラメータ取得クラス生成
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		// 業務パラメータ情報を取得する
		this.prcClcRsltCd      = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_RSLT_CDR);
		
		// パラメータ取得クラスクローズ
		paramUtil.close();
		
		this.cdNmKnriInfMap = new  HashMap<String, String>();
		
		// コード名称管理検索
		this.getCdNmKnriInf();
		
		// コード種別名検索
		this.prcRsltNyo = this.getRsltNyo(this.prcClcRsltCd);
		
		/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert 	inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;

		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		
		// OM-2015-0001847 ADD START
		// 出力情報
		JBSbatServiceInterfaceMap outPutInfo = null;
		// OM-2015-0001847 ADD END
		
		// 判定値取得
		String dataStkuYmd = inMap.getString(JBSbatACIFM196.DATA_STKU_YMD);		// データ取得年月日
		String chrgKh = inMap.getString(JBSbatACIFM196.CHRG_KH);				// 課金可否
		String svcChrgYmd = inMap.getString(JBSbatACIFM196.SVC_CHRG_STAYMD);	// サービス課金開始年月日
		String idoYmd = inMap.getString(JBSbatACIFM196.IDO_YMD);				// 異動年月日
		String idoDiv = inMap.getString(JBSbatACIFM196.IDO_DIV);				// 異動区分
		String svcDslKisanYmd = JACStrConst.KARA_MOJI;							// サービス解約起算年月日
		String kaihkYmd = JACStrConst.KARA_MOJI;								// 回復年月日
		
		if(IDO_DIV_KAIYAKU.equals(idoDiv))
		{
			// 異動区分が解約ならサービス解約起算年月日に異動年月日をセット
			svcDslKisanYmd = idoYmd;
		}
		else if(IDO_DIV_KAIFUKU.equals(idoDiv))
		{
			// 異動区分が回復なら回復年月日に異動年月日をセット
			kaihkYmd = idoYmd;
		}

		// 課金可否の更新
		// サービス契約．サービス解約起算年月日 ≠ ""（空文字）の場合
		if(!(JACBatCommon.isNull(JPCUtilCommon.trim(svcDslKisanYmd))))
		{
			// データ取得年月日 ≧ サービス解約起算年月日
			if(!(dataStkuYmd.compareTo(svcDslKisanYmd) < 0))
			{
				// 課金可否が"0"（課金否）でないなら
				if(!JACStrConst.CHRG_KH_FAIL.equals(chrgKh))
				{
					assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][ＦＴＴＨ通信明細．請求年月 ＝ サービス契約．サービス解約起算年月日（YYYYMM） の場合]");
					
					// 更新処理実行
					// データ取得年月日 ← サービス契約．サービス解約起算年月日
					// 課金可否         ← "0"（課金否）
					this.updateFtthTushinDtl(inMap, JACStrConst.CHRG_KH_FAIL);
					
					// OM-2015-0001847 ADD START
					// 出力情報作成
					outPutInfo = makeOutPutInfo(inMap);
					// 出力フラグ設定
					outPutInfo.setOutFlg(true);
					// 出力共通電文設定
					outputItem.addOutMapList(outPutInfo);
					// OM-2015-0001847 ADD END
					
					assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
					return outputItem;
				}
			}
		}

		// サービス契約．回復年月日 ≠ ""（空文字）の場合
		if(!(JACBatCommon.isNull(JPCUtilCommon.trim(kaihkYmd))))
		{
			// データ取得年月日 ≧ 回復年月日
			if(!(dataStkuYmd.compareTo(kaihkYmd) < 0))
			{
				// 課金可否が"1"（課金可）でないなら
				if(!JACStrConst.CHRG_KH_PSB.equals(chrgKh))
				{
					assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][ＦＴＴＨ通信明細．請求年月 ＝ サービス契約．回復年月日（YYYYMM） の場合]");
					
					// 更新処理実行
					// データ取得年月日 ← サービス契約．回復年月日
					// 課金可否         ← "1"（課金可）
					this.updateFtthTushinDtl(inMap, JACStrConst.CHRG_KH_PSB);
	
					// OM-2015-0001847 ADD START
					// 出力情報作成
					outPutInfo = makeOutPutInfo(inMap);
					// 出力フラグ設定
					outPutInfo.setOutFlg(true);
					// 出力共通電文設定
					outputItem.addOutMapList(outPutInfo);
					// OM-2015-0001847 ADD END

					assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
					return outputItem;
				}
			}
		}
		
		// サービス契約．サービス課金開始年月日 ≠ ""（空文字）の場合
		if(!(JACBatCommon.isNull(JPCUtilCommon.trim(svcChrgYmd))))
		{
			// データ取得年月日 ＜ サービス課金開始年月日
			if(dataStkuYmd.compareTo(svcChrgYmd) < 0)
			{
				// 課金可否が"0"（課金否）でないなら
				if(!JACStrConst.CHRG_KH_FAIL.equals(chrgKh))
				{
					assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][サービス契約．サービス課金開始年月日 ≠ ''（空文字） の場合]");
					
					// 更新処理実行
					// データ取得年月日 ← サービス契約．サービス課金開始年月日
					// 課金可否         ← "0"（課金否）
					this.updateFtthTushinDtl(inMap, JACStrConst.CHRG_KH_FAIL);
					
					// OM-2015-0001847 ADD START
					// 出力情報作成
					outPutInfo = makeOutPutInfo(inMap);
					// 出力フラグ設定
					outPutInfo.setOutFlg(true);
					// 出力共通電文設定
					outputItem.addOutMapList(outPutInfo);
					// OM-2015-0001847 ADD END
				}
			}
		}

		// サービス契約．サービス課金開始年月日 ＝ ""（空文字）の場合
		else
		{
			// 課金可否が"1"（課金可）でないなら
			if(!JACStrConst.CHRG_KH_PSB.equals(chrgKh))
			{
				assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][サービス契約．サービス課金開始年月日 ＝ ''（空文字） の場合]");
				
				// 更新処理実行
				// データ取得年月日 ← サービス契約．サービス課金開始年月日
				// 課金可否         ← "1"（課金可）
				this.updateFtthTushinDtl(inMap, JACStrConst.CHRG_KH_PSB);
				
				// OM-2015-0001847 ADD START
				// 出力情報作成
				outPutInfo = makeOutPutInfo(inMap);
				// 出力フラグ設定
				outPutInfo.setOutFlg(true);
				// 出力共通電文設定
				outputItem.addOutMapList(outPutInfo);
				// OM-2015-0001847 ADD END
			}
		}
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		
		// 配列更新を実行する
		db_AC_T_FTTH_TUSHIN_DTL.clearBatch();
		
		// DBアクセスクラスをクローズします
		db_AC_T_FTTH_TUSHIN_DTL.close();
		db_ZM_M_CD_NM_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB1190AI, new String[]
			{ D_TBL_NAME_AC_T_FTTH_TUSHIN_DTL, String.valueOf(ftthTushinDtlCnt) });
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	金額					AMNT
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	債権番号				SAIKEN_NO
	 *		 	料金グループコード		PRC_GRP_CD
	 *		 	料金コースコード		PCRS_CD
	 *		 	料金サービスコード		PRC_SVC_CD
	 *		 	料金項目コード			PRC_KMK_CD
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_SAIKEN_UCWK_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("CHRG_KH", setParam[0]);
	
		// 条件のマップを作成します
		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("NINSHO_ID",		whereParam[3]);
		whereMap.setValue("USE_YM", 		whereParam[4]);
		whereMap.setValue("DATA_STKU_YMD",	whereParam[5]);
//2014.07.02 OM-2014-0002090 add start
		whereMap.setValue("SEIKY_YM", whereParam[6]);
//2014.07.02 OM-2014-0002090 add end

		// DBアクセスを実行します
		ftthTushinDtlCnt += db_AC_T_FTTH_TUSHIN_DTL.updateByPrimaryKeysBatch(whereMap, setMap, 1);
	}

	/**
	 * SQLKEY(AC_UPDATE_001)で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 executeAC_T_FTTH_TUSHIN_DTL_AC_UPDATE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());

		// DBアクセスを実行します
		db_AC_T_FTTH_TUSHIN_DTL.executeBySqlDefine(paramList, AC_T_FTTH_TUSHIN_DTL_AC_UPDATE_001);
	}
	
	/**
	 * SQLKEY(AC_UPDATE_002)で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 executeAC_T_FTTH_TUSHIN_DTL_AC_UPDATE_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());

		// DBアクセスを実行します
		db_AC_T_FTTH_TUSHIN_DTL.executeBySqlDefine(paramList, AC_T_FTTH_TUSHIN_DTL_AC_UPDATE_002);
	}
	
	/**
	 * SQLKEY(AC_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 executeZM_M_CD_NM_KANRI_AC_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());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_AC_SELECT_003);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * ＦＴＴＨ通信明細スキーマを更新します。
	 * 
	 * @param inMap　入力電文
	 * @param chrgKh　課金可否
	 * @param sqlFlg　SQL更新フラグ
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void updateFtthTushinDtl(JBSbatServiceInterfaceMap inMap, String chrgKh) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][updateFtthTushinDtl]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(chrgKh);											// 課金可否
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updateFtthTushinDtl][paramList=" + paramList.getList().toString() + "]");
		
		JBSbatCommonDBInterface whereList = new JBSbatCommonDBInterface();
		whereList.setValue(inMap.getString(JBSbatACIFM196.SVC_KEI_NO));		// サービス契約番号
		whereList.setValue(inMap.getString(JBSbatACIFM196.PCRS_CD));		// 料金コースコード
		whereList.setValue(inMap.getString(JBSbatACIFM196.PRC_SVC_CD));		// 料金サービスコード 
		whereList.setValue(inMap.getString(JBSbatACIFM196.NINSHO_ID));		// 認証ＩＤ
		whereList.setValue(inMap.getString(JBSbatACIFM196.USE_YM));			// 利用年月
		whereList.setValue(inMap.getString(JBSbatACIFM196.DATA_STKU_YMD));	// データ取得年月日
//2014.07.02 OM-2014-0002090 add start
		whereList.setValue(inMap.getString(JBSbatACIFM196.SEIKY_YM));		// 請求年月
//2014.07.02 OM-2014-0002090 add end
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updateFtthTushinDtl][whereList=" + whereList.getList().toString() + "]");
		
		// SQL実行
		executeCH_T_SAIKEN_UCWK_PKUPDATE(paramList.getList().toArray(), whereList.getList().toArray());
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][updateFtthTushinDtl]");
	}

	/**
	 * ＦＴＴＨ通信明細スキーマを更新します。
	 * 
	 * @param inMap　入力電文
	 * @param chrgKh　課金可否
	 * @param trgYmd　対象年月
	 * @param sqlFlg　SQL更新フラグ
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public void updateFtthTushinDtl(JBSbatServiceInterfaceMap inMap, String chrgKh, String trgYmd, String sqlFlg) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][updateFtthTushinDtl]");

		// 設定値
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		// 課金可否
		paramList.setValue(chrgKh);
		
		// 条件値
		// サービス契約番号
		paramList.setValue(inMap.get(JBSbatACIFM196.SVC_KEI_NO));
		
		// 料金コースコード
		paramList.setValue(inMap.get(JBSbatACIFM196.PCRS_CD));
		
		// 料金サービスコード
		paramList.setValue(inMap.get(JBSbatACIFM196.PRC_SVC_CD));
		
		// 認証ID
		paramList.setValue(inMap.get(JBSbatACIFM196.NINSHO_ID));
		
		// 利用年月
		paramList.setValue(inMap.get(JBSbatACIFM196.USE_YM));
		
		// データ取得年月日
		paramList.setValue(trgYmd);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updateFtthTushinDtl][setParam=" + paramList.getList().toString() + "]");
		
		// 更新実行
		if(sqlFlg.equals(FTTHTSNDTLUPD01))
		{
			executeAC_T_FTTH_TUSHIN_DTL_AC_UPDATE_001(paramList.getList().toArray());
		}
		else
		{
			executeAC_T_FTTH_TUSHIN_DTL_AC_UPDATE_002(paramList.getList().toArray());
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][updateFtthTushinDtl]");
	}

	/**
	 * コード名称管理からコード名称管理情報を取得します。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void getCdNmKnriInf() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getCdNmKnriInf]");
		
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		whereParam.setValue(JZM0171Constant.CD01172);	// コード種別
		
		whereParam.setValue(super.opeDate);				// 適用開始年月日
		
		whereParam.setValue(super.opeDate);				// 適用終了年月日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getCdNmKnriInf][whereParam=" + whereParam.getList().toString() + "]");
		
		// SQL実行
		executeZM_M_CD_NM_KANRI_AC_SELECT_003(whereParam.getList().toArray());
		
		JBSbatCommonDBInterface dbMap = db_ZM_M_CD_NM_KANRI.selectNext();
		
		// 取得できなかった場合
		if(dbMap == null)
		{
			// ログ出力
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0250CE,
					new String[] {JBSbatZM_M_CD_NM_KANRI.TABLE_NAME, whereParam.getList().toString()});
		}
		// 上記以外の場合
		else
		{
			while(null != dbMap)
			{
				// コード名称管理情報マップに検索結果を設定（キー：コード区分）
				this.cdNmKnriInfMap.put(dbMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV), dbMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM));
				
				dbMap = db_ZM_M_CD_NM_KANRI.selectNext();
			}
		}
		
		assert this.cdNmKnriInfMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getCdNmKnriInf][cdNmKnriInfMap=" + this.cdNmKnriInfMap.toString() + "]") : true;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getCdNmKnriInf]");
		return;
	}

	/**
	 * コード名称管理情報マップから結果内容を取得します。
	 * 
	 * @param clcRsltCd コード区分
	 * @return String 結果内容
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getRsltNyo(String clcRsltCd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getRsltNyo]");
		
		String rsltNyo = null;
		
		// コード管理情報マップに値が存在する場合
		if(!this.cdNmKnriInfMap.isEmpty())
		{
			// コード管理情報マップのコード区分が存在する場合
			if(this.cdNmKnriInfMap.containsKey(clcRsltCd))
			{
				// 結果内容取得
				rsltNyo = this.cdNmKnriInfMap.get(clcRsltCd);		
			}
		}
		
		// 結果内容がnullの場合
		if(rsltNyo == null)
		{
			// ""（空文字）を設定
			rsltNyo = JACStrConst.KARA_MOJI;
		}
		
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getRsltNyo][rsltNyo=" + rsltNyo + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getRsltNyo]");
		
		return rsltNyo;
	}
	
	// OM-2015-0001847 ADD START
	/**
	 * ＦＴＴＨ通信明細更新対象キー情報作成
	 * 
	 * @param prc 料金
	 * @return outPutInfo ＦＴＴＨ通信明細更新対象キー情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private JBSbatServiceInterfaceMap makeOutPutInfo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutPutInfo]");

		// ＦＴＴＨ通信明細更新対象キー情報
		JBSbatServiceInterfaceMap outPutInfo = new JBSbatServiceInterfaceMap();
		
		// サービス契約番号
		outPutInfo.set(JBSbatACIFM276.SVC_KEI_NO, inMap.getString(JBSbatACIFM196.SVC_KEI_NO));
		// 料金コースコード
		outPutInfo.set(JBSbatACIFM276.PCRS_CD, inMap.getString(JBSbatACIFM196.PCRS_CD));
		// 料金サービスコード
		outPutInfo.set(JBSbatACIFM276.PRC_SVC_CD, inMap.getString(JBSbatACIFM196.PRC_SVC_CD));
		// 認証ＩＤ
		outPutInfo.set(JBSbatACIFM276.NINSHO_ID, inMap.getString(JBSbatACIFM196.NINSHO_ID));
		// 利用年月
		outPutInfo.set(JBSbatACIFM276.USE_YM, inMap.getString(JBSbatACIFM196.USE_YM));
		// データ取得年月日
		outPutInfo.set(JBSbatACIFM276.DATA_STKU_YMD, inMap.getString(JBSbatACIFM196.DATA_STKU_YMD));
		// 請求年月
		outPutInfo.set(JBSbatACIFM276.SEIKY_YM, inMap.getString(JBSbatACIFM196.SEIKY_YM));

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutPutInfo][outPutInfo=" + outPutInfo.getMap().toString());
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutPutInfo]");
		
		return outPutInfo;
	}
	// OM-2015-0001847 ADD END
}
