/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACTsryoHoseiInfoAddDtl
*	ソースファイル名	：JBSbatACTsryoHoseiInfoAddDtl.java
*	作成者				：富士通　
*	作成日				：2012年12月04日
*＜機能概要＞
*　通信量補正情報登録（明細登録用）部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/12/04  FJ）垣内	【ANK-0363-00-00】新規作成
*	v4.00.01	2013/04/24  FJ) 早崎	【TG1-2013-0000XXX】再計算対象情報出力処理を追加
*	v9.00.00	2014/07/05  FJ) 鈴木	【OM-2014-0002090】ＦＴＴＨ通信明細の検索、更新条件に請求年月を追加
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatACIFM160;
import eo.business.util.file.JBSbatACIFM180;
import eo.business.util.table.JBSbatAC_T_FTTH_TUSHIN_DTL;
import eo.common.constant.JACStrConst;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACTsryoHoseiInfoAddDtl 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_AC_T_TRGT_KEY_WK = "AC_T_TRGT_KEY_WK";

	/** テーブルアクセスクラス(ＦＴＴＨ通信明細)*/
	private JBSbatSQLAccess db_AC_T_FTTH_TUSHIN_DTL = null;

	/** テーブルアクセスクラス(対象キーワーク)*/
	private JBSbatSQLAccess db_AC_T_TRGT_KEY_WK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 退避.対象キーワーク使用機能コード（再集計対象情報（当月）） */
	private String tgKeyWkUseKino 	= null;

	/** 単位変換用：1000 */
	private BigDecimal THOUSAND 	= new BigDecimal("1000");

	/** 退避．登録キー */
	private String thAddKey = null;

	/**
	 * 初期処理
	 * @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_AC_T_TRGT_KEY_WK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_T_TRGT_KEY_WK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		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 + "]");

		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		try
		{
			// 対象キーワーク使用機能コード（再集計対象情報（当月））取得
			this.tgKeyWkUseKino = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_TWK_RE_SHUK_NO1);
		}
		finally
		{
			paramUtil.close();
		}
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param  inMap            入力電文
	 * @param  outputInItem     入力情報
	 * @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 outputInItem = new JBSbatOutputItem();
		
		// 入力情報≠nullの場合
		if(inMap != null)
		{
			// 補正通信量変換
			BigDecimal tushinryo = new BigDecimal(inMap.getString(JBSbatACIFM160.HOSEI_TSRYO));
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setTushin][tushinryo=" + tushinryo + "]");

			BigDecimal chHoseiTsryo = tushinryo.multiply(THOUSAND);
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setTushin][tushinryo=" + chHoseiTsryo + "]");

			// FTTH通信明細更新
			this.searchFtthDtl(inMap, chHoseiTsryo);
			
			// 入力．登録キーに設定
			String inAddKey = getShukeiKey(inMap);

			// 退避．登録キーがnullの場合（1レコード目）または、退避．登録キー ≠ 入力．登録キーの場合のみ登録
			if(this.thAddKey == null || !this.thAddKey.equals(inAddKey))
			{
				// 登録キーの退避
				this.thAddKey = getShukeiKey(inMap);
				
				// 対象キーワーク登録
				this.insertTrgtKeyWk(inMap);
				
				// 再計算対象情報(FTTH補正)出力
				outPutInfoSet(inMap, outputInItem);
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_AC_T_FTTH_TUSHIN_DTL.close();
		db_AC_T_TRGT_KEY_WK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SVC_KEI_NO
	 *		 	PCRS_CD
	 *		 	PRC_SVC_CD
	 *		 	NINSHO_ID
	 *		 	USE_YM
	 *		 	DATA_STKU_YMD
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeAC_T_FTTH_TUSHIN_DTL_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		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 start

		// DBアクセスを実行します
		return db_AC_T_FTTH_TUSHIN_DTL.selectByPrimaryKeys(whereMap);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	補正通信量				HOSEI_TSRYO
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SVC_KEI_NO
	 *		 	PCRS_CD
	 *		 	PRC_SVC_CD
	 *		 	NINSHO_ID
	 *		 	USE_YM
	 *		 	DATA_STKU_YMD
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_FTTH_TUSHIN_DTL_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("HOSEI_TSRYO", 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アクセスを実行します
		db_AC_T_FTTH_TUSHIN_DTL.updateByPrimaryKeys(whereMap, setMap);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	サービス契約番号				SVC_KEI_NO
	 *		 	料金コースコード				PCRS_CD
	 *		 	料金サービスコード				PRC_SVC_CD
	 *		 	請求契約番号				SEIKY_KEI_NO
	 *		 	請求年月				SEIKY_YM
	 *		 	認証ＩＤ				NINSHO_ID
	 *		 	利用年月				USE_YM
	 *		 	データ取得年月日				DATA_STKU_YMD
	 *		 	利用通信量				USE_TSRYO
	 *		 	補正通信量				HOSEI_TSRYO
	 *		 	課金可否				CHRG_KH
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 *		 	登録運用年月日				ADD_UNYO_YMD
	 *		 	登録処理ＩＤ				ADD_TRN_ID
	 *		 	更新運用年月日				UPD_UNYO_YMD
	 *		 	更新処理ＩＤ				UPD_TRN_ID
	 *		 	削除運用年月日				DEL_UNYO_YMD
	 *		 	削除処理ＩＤ				DEL_TRN_ID
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_FTTH_TUSHIN_DTL_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SVC_KEI_NO", setParam[0]);
		setMap.setValue("PCRS_CD", setParam[1]);
		setMap.setValue("PRC_SVC_CD", setParam[2]);
		setMap.setValue("SEIKY_KEI_NO", setParam[3]);
		setMap.setValue("SEIKY_YM", setParam[4]);
		setMap.setValue("NINSHO_ID", setParam[5]);
		setMap.setValue("USE_YM", setParam[6]);
		setMap.setValue("DATA_STKU_YMD", setParam[7]);
		setMap.setValue("USE_TSRYO", setParam[8]);
		setMap.setValue("HOSEI_TSRYO", setParam[9]);
		setMap.setValue("CHRG_KH", setParam[10]);
		setMap.setValue("ADD_DTM", setParam[11]);
		setMap.setValue("ADD_OPEACNT", setParam[12]);
		setMap.setValue("UPD_DTM", setParam[13]);
		setMap.setValue("UPD_OPEACNT", setParam[14]);
		setMap.setValue("DEL_DTM", setParam[15]);
		setMap.setValue("DEL_OPEACNT", setParam[16]);
		setMap.setValue("MK_FLG", setParam[17]);
		setMap.setValue("ADD_UNYO_YMD", setParam[18]);
		setMap.setValue("ADD_TRN_ID", setParam[19]);
		setMap.setValue("UPD_UNYO_YMD", setParam[20]);
		setMap.setValue("UPD_TRN_ID", setParam[21]);
		setMap.setValue("DEL_UNYO_YMD", setParam[22]);
		setMap.setValue("DEL_TRN_ID", setParam[23]);
	
		// DBアクセスを実行します
		db_AC_T_FTTH_TUSHIN_DTL.insertByPrimaryKeys(setMap);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	対象キーワーク番号				TRGT_KEY_WK_NO
	 *		 	対象キーワーク使用機能コード				TRGT_KEY_WK_USE_KINO_CD
	 *		 	対象キー１				TRGT_KEY_1
	 *		 	対象キー２				TRGT_KEY_2
	 *		 	対象キー３				TRGT_KEY_3
	 *		 	対象キー４				TRGT_KEY_4
	 *		 	対象キー５				TRGT_KEY_5
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_TRGT_KEY_WK_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("TRGT_KEY_WK_NO", setParam[0]);
		setMap.setValue("TRGT_KEY_WK_USE_KINO_CD", setParam[1]);
		setMap.setValue("TRGT_KEY_1", setParam[2]);
		setMap.setValue("TRGT_KEY_2", setParam[3]);
		setMap.setValue("TRGT_KEY_3", setParam[4]);
		setMap.setValue("TRGT_KEY_4", setParam[5]);
		setMap.setValue("TRGT_KEY_5", setParam[6]);
		setMap.setValue("ADD_DTM", setParam[7]);
		setMap.setValue("ADD_OPEACNT", setParam[8]);
		setMap.setValue("UPD_DTM", setParam[9]);
		setMap.setValue("UPD_OPEACNT", setParam[10]);
		setMap.setValue("DEL_DTM", setParam[11]);
		setMap.setValue("DEL_OPEACNT", setParam[12]);
		setMap.setValue("MK_FLG", setParam[13]);
	
		// DBアクセスを実行します
		db_AC_T_TRGT_KEY_WK.insertByPrimaryKeys(setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * FTTH通信明細を検索し、結果を取得できた場合は更新、取得できなかった場合は登録をします。
	 * @param  inMap            入力電文
	 * @param  chHoseiTsryo     変換後補正通信量
	 * @return String    集計キー
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void searchFtthDtl(JBSbatServiceInterfaceMap inMap, BigDecimal chHoseiTsryo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][updFtthDtl]");
		
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		whereParam.setValue(inMap.getString(JBSbatACIFM160.SVC_KEI_NO));		// サービス契約番号
		whereParam.setValue(inMap.getString(JBSbatACIFM160.PCRS_CD));			// 料金コースコード
		whereParam.setValue(inMap.getString(JBSbatACIFM160.PRC_SVC_CD));		// 料金サービスコード
		whereParam.setValue(inMap.getString(JBSbatACIFM160.ISP_NINSHO_ID));		// 認証ID
		whereParam.setValue(inMap.getString(JBSbatACIFM160.USE_YM));			// 利用年月
		whereParam.setValue(inMap.getString(JBSbatACIFM160.DATE_STKU_YMD));		// データ取得年月日
//2014.07.02 OM-2014-0002090 add start
		whereParam.setValue(inMap.getString(JBSbatACIFM160.SEIKY_YM));			// 請求年月
//2014.07.02 OM-2014-0002090 add end
		
		JBSbatCommonDBInterface dbMap = executeAC_T_FTTH_TUSHIN_DTL_PKSELECT(whereParam.getList().toArray());
		if(dbMap != null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updFtthDtl][FTTH通信明細更新]");
			
			// 補正通信量加算
			chHoseiTsryo = dbMap.getBigDecimal(JBSbatAC_T_FTTH_TUSHIN_DTL.HOSEI_TSRYO).add(chHoseiTsryo);
			
			// FTTH通信明細更新
			this.updFtthDtl(inMap, chHoseiTsryo);
		}
		else
		{
			// FTTH通信明細登録
			this.addFtthDtl(inMap, chHoseiTsryo);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][updFtthDtl]");
		return;
	}

	/**
	 * FTTH通信明細を更新します。
	 * @param  inMap            入力電文
	 * @param  chHoseiTsryo     変換後補正通信量
	 * @return String    集計キー
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void updFtthDtl(JBSbatServiceInterfaceMap inMap, BigDecimal chHoseiTsryo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][updFtthDtl]");
		
		// 更新項目
		Object[] setParam = new Object[5];
		
		setParam[0] = chHoseiTsryo.toString();									// 補正通信量

		// PK項目
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		whereParam.setValue(inMap.getString(JBSbatACIFM160.SVC_KEI_NO));		// サービス契約番号
		whereParam.setValue(inMap.getString(JBSbatACIFM160.PCRS_CD));			// 料金コースコード
		whereParam.setValue(inMap.getString(JBSbatACIFM160.PRC_SVC_CD));		// 料金サービスコード
		whereParam.setValue(inMap.getString(JBSbatACIFM160.ISP_NINSHO_ID));		// 認証ID
		whereParam.setValue(inMap.getString(JBSbatACIFM160.USE_YM));			// 利用年月
		whereParam.setValue(inMap.getString(JBSbatACIFM160.DATE_STKU_YMD));		// データ取得年月日
//2014.07.02 OM-2014-0002090 add start
		whereParam.setValue(inMap.getString(JBSbatACIFM160.SEIKY_YM));		// 請求年月
//2014.07.02 OM-2014-0002090 add end
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updateFtthTsnGK][whereParam=" + whereParam.getList().toString() + "]");
		
		executeAC_T_FTTH_TUSHIN_DTL_PKUPDATE(setParam, whereParam.getList().toArray());

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][updFtthDtl]");
		return;
	}

	/**
	 * FTTH通信明細へ登録します。
	 * @param  inMap            入力電文
	 * @param  chHoseiTsryo     変換後補正通信量
	 * @return String    集計キー
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void addFtthDtl(JBSbatServiceInterfaceMap inMap, BigDecimal chHoseiTsryo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][addFtthDtl]");
		
		Object[] setParam = new Object[25];
		
		setParam[0]  = inMap.getString(JBSbatACIFM160.SVC_KEI_NO);		// サービス契約番号
		setParam[1]  = inMap.getString(JBSbatACIFM160.PCRS_CD);			// 料金コースコード
		setParam[2]  = inMap.getString(JBSbatACIFM160.PRC_SVC_CD);		// 料金サービスコード
		setParam[3]  = inMap.getString(JBSbatACIFM160.SEI_KEI_NO);		// 請求契約番号
		setParam[4]  = inMap.getString(JBSbatACIFM160.SEIKY_YM);		// 請求年月
		setParam[5]  = inMap.getString(JBSbatACIFM160.ISP_NINSHO_ID);	// 認証ID
		setParam[6]  = inMap.getString(JBSbatACIFM160.USE_YM);			// 利用年月
		setParam[7]  = inMap.getString(JBSbatACIFM160.DATE_STKU_YMD);	// データ取得年月日
		setParam[8]  = 0;												// 利用通信量
		setParam[9]  = chHoseiTsryo.toString();							// 補正通信量
		setParam[10] = inMap.getString(JBSbatACIFM160.CHRG_KH);			// 課金可否

		executeAC_T_FTTH_TUSHIN_DTL_PKINSERT(setParam);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][addFtthDtl]");
		return;
	}

	/**
	 * 集計キーを取得します。
	 * @param  inMap     入力電文
	 * @return String    集計キー
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String getShukeiKey(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getShukeiKey]");
		// 集計キー
		String shukeiKey = null;

		StringBuffer keyBuf = new StringBuffer();
		if (inMap != null)
		{
			keyBuf.append(inMap.getString(JBSbatACIFM160.SVC_KEI_NO)); 		// サービス契約番号
			keyBuf.append(inMap.getString(JBSbatACIFM160.SEI_KEI_NO)); 		// 請求契約番号
			keyBuf.append(inMap.getString(JBSbatACIFM160.SEIKY_YM)); 		// 請求年月
			shukeiKey = keyBuf.toString();
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getShukeiKey][shukeiKey=" + shukeiKey + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getShukeiKey]");
	
		return shukeiKey;
	}

	/**
	 * 対象キーワークへ登録します。
	 * @param  inMap            入力電文
	 * @return String    集計キー
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void insertTrgtKeyWk(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][addTrgtKeyWk]");
		
		Object[] setParam = new Object[20];
		
		setParam[0]  = JCCBatCommon.getFormatedNextSeq(super.commonItem, JACStrConst.SEQ_TRGT_KEY_WK, "", 20);		// 対象キーワーク番号
		setParam[1]  = this.tgKeyWkUseKino;								// 対象キーワーク使用機能コード
		setParam[2]  = inMap.getString(JBSbatACIFM160.SEIKY_YM);		// 対象キー１：請求年月
		setParam[3]  = inMap.getString(JBSbatACIFM160.SEI_KEI_NO);		// 対象キー２：請求契約番号
		setParam[4]  = inMap.getString(JBSbatACIFM160.SVC_KEI_NO);		// 対象キー３：サービス契約番号
		setParam[5]  = null;											// 対象キー４：null
		setParam[6]  = null;											// 対象キー５：null

		executeAC_T_TRGT_KEY_WK_PKINSERT(setParam);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][addTrgtKeyWk]");
		return;
	}
	
	/**
	 * FTTH通信量補正情報より出力共通電文を取得します。
	 * 
	 * @param inMap 利用料金情報
	 * @param outputItem 出力共通電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outPutInfoSet(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputItem) throws Exception
	{
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();

		outMap.set(JBSbatACIFM180.TRGT_KEY_1, inMap.getString(JBSbatACIFM160.SEIKY_YM));	// 請求年月
		outMap.set(JBSbatACIFM180.TRGT_KEY_2, inMap.getString(JBSbatACIFM160.SEI_KEI_NO));	// 請求契約番号
		outMap.set(JBSbatACIFM180.TRGT_KEY_3, inMap.getString(JBSbatACIFM160.SVC_KEI_NO));	// サービス契約番号

		// 出力フラグ設定
		outMap.setOutFlg(true);

		outputItem.addOutMapList(outMap);

	}
}
