/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACPrcCalcRsltTwDtlErr
*	ソースファイル名	：JBSbatACPrcCalcRsltTwDtlErr.java
*	作成者				：富士通　
*	作成日				：2011年09月14日
*＜機能概要＞
*　料金計算結果情報作成（通話明細エラー）部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/09/14   富士通		新規作成
*	v4.00.00	2012/12/27   FJ）加島	【TG1-2012-0000204】料金計算結果リスト「CDR課金なしエラー」明細不備対応
*	v4.00.01	2013/05/08   FJ)黒木	【TG1-2013-0000307】料金計算結果リスト不正対応
*	v5.00		2013/07/09   FJ）河井	【TG1-2013-0000662】マスタ参照基準日変更対応
*	v5.01.00	2013/09/17   FJ）狭間	【OM-2013-0002081】数値、日付編集を廃止
*															ダブルクォーテーション付与の廃止※後続の処理で行う
*	v8.00.00	2013/12/06   FJ）柴田	【ANK-1584-00-00】出力ファイルにサービス詳細識別番号を追加。
*	v8.00.01	2014/02/21   FJ）伊藤	【OM-2014-0000775】連携請求金額を、小数点つき金額にするように修正。
*	v8.00.02	2014/02/25   FJ）伊藤	【OM-2014-0000775】小数点調整を廃止（上位処理で実施）
*********************************************************************/
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.JACbatParamUtil;
import eo.business.common.JACbatRknBusinessUtil;
import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatACIFM097;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_OPUT_NM;
import eo.business.util.table.JBSbatKK_T_SEIKY_KEI;
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.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 JBSbatACPrcCalcRsltTwDtlErr extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(料金項目出力名称)*/
	private static final String D_TBL_NAME_CH_M_PRC_KMK_OPUT_NM = "CH_M_PRC_KMK_OPUT_NM";

	/** テーブル(請求契約)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";

	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** SQL定義キー(AC_SELECT_003)*/
	private static final String CH_M_PRC_KMK_OPUT_NM_AC_SELECT_003 = "AC_SELECT_003";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String KK_T_SEIKY_KEI_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_003)*/
	private static final String ZM_M_CD_NM_KANRI_AC_SELECT_003 = "AC_SELECT_003";

	/** テーブルアクセスクラス(料金項目出力名称)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_OPUT_NM = null;

	/** テーブルアクセスクラス(請求契約)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;

	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	/**▼▼▼▼▼▼クラス変数追加 開始▼▼▼▼▼▼*/
	
	/** コード名称管理情報マップ */
	private HashMap<String, String> cdNmKnriInfMap = null;
	
	/** 料金項目出力名称情報マップ */
	private HashMap<ArrayList<String>, String> prcKmkOutputNmInfMap = null;
	
	/** 料金計算結果内容コード */
	private String prcClcRsltCd = JACStrConst.KARA_MOJI;

	/** 料金計算結果内容コード種別名 */
	private String prcRsltNyo = JACStrConst.KARA_MOJI;

	/** 集計キー */
	private String bkKey            = null;
	
	/** 請求金額 */
	private BigDecimal wkCntSikyAmt = BigDecimal.ZERO;
	
	/** 通信量 */
	private BigDecimal wkCntTsryo   = BigDecimal.ZERO;
	
	/** 退避．入力電文 */
	private JBSbatServiceInterfaceMap taihiMap = null;
	
	/** 請求年月 */
	private String tmpSeikyuYm = null;
	
	/** 月末日 */
	private String tmpSeikyuYmEndDay = null;
	
	/**▲▲▲▲▲▲クラス変数追加 終了▲▲▲▲▲▲*/
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CH_M_PRC_KMK_OPUT_NM = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_OPUT_NM);
		db_KK_T_SEIKY_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_KEI);
		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, "[S][initial][opeDate=" + super.opeDate + "]");
		
		this.cdNmKnriInfMap = new HashMap<String, String>();
		this.prcKmkOutputNmInfMap = new HashMap<ArrayList<String>, String>();
		this.taihiMap = new JBSbatServiceInterfaceMap();
		
		// 業務パラメータ取得
		JACbatParamUtil pu = new JACbatParamUtil(commonItem);
		try
		{
			// 結果内容コード取得
			this.prcClcRsltCd = pu.getGyoumuParameter(JACStrConst.WKPARA_AC_RSLT_CDR);
		}
		finally
		{
			pu.close();
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][prcClcRsltCd=" + prcClcRsltCd + "]");
		
		// コード名称管理検索
		this.getCdNmKnriInf();
		
		// コード種別名検索
		prcRsltNyo = this.getRsltNyo(this.prcClcRsltCd);
		
		JACbatSchdlUtil schdUtil = new JACbatSchdlUtil(commonItem);
		try
		{
			// 請求年月
			this.tmpSeikyuYm = schdUtil.getBillDate(super.opeDate, JACStrConst.EVENT_CD_RYOKIN_KEISAN_YMD);
			
			// 月初日[0] 月末日[1]
			String[] rtn = schdUtil.getUseStrEnd(this.tmpSeikyuYm, JACStrConst.EVENT_CD_USE_STAYMD, JACStrConst.EVENT_CD_USE_ENDYMD);
			this.tmpSeikyuYmEndDay = rtn[1];
		}
		finally
		{
			schdUtil.close();
		}
		
		// 料金項目出力名称検索
		this.getPrcKmkOutputNmInf();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @param outputInItem 入力情報
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;

		// 最終レコードの場合
		if(inMap == null)
		{
			// 出力
			outputInItem.addOutMapList(getOutputInf());
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
			
			return outputInItem;
		}
		
		// 料金計算結果内容コードが存在しない、
		// 料金計算結果内容コードと入力．結果内容コードが異なる場合
		if(this.prcClcRsltCd == null || !this.prcClcRsltCd.contains(inMap.getString(JBSbatACIFM097.RSLT_NYO_CD)))
		{
			return outputInItem;
		}
		
		if(!outputInItem.isOutMapList())
		{
			// ダミーレコード作成
			outputInItem.addOutMapList(new JBSbatServiceInterfaceMap());
		}
		
		// 集計キー設定
		String inKey = inMap.getString(JBSbatACIFM097.TRN_YMD)
			.concat(inMap.getString(JBSbatACIFM097.SEIKY_KEI_NO))
			.concat(inMap.getString(JBSbatACIFM097.SVC_KEI_NO))
			.concat(inMap.getString(JBSbatACIFM097.SEIKY_YM))
			.concat(inMap.getString(JBSbatACIFM097.PCRS_CD))
			.concat(inMap.getString(JBSbatACIFM097.PRC_SVC_CD))
			.concat(inMap.getString(JBSbatACIFM097.PRC_KMK_CD));
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][集計キー(今回) = " + inKey + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][集計キー(前回) = " + bkKey + "]");
		
		// 請求金額・通信量
		String strSikyAmnt = inMap.getString(JBSbatACIFM097.SIKY_AMNT);
		String strTsryo = inMap.getString(JBSbatACIFM097.TSRYO);
		BigDecimal sikyAmnt = BigDecimal.ZERO;
		BigDecimal tsryo = BigDecimal.ZERO;
		
		if(!(strSikyAmnt == null || strSikyAmnt.equals(JACStrConst.KARA_MOJI)))
		{
			sikyAmnt = new BigDecimal(inMap.getString(JBSbatACIFM097.SIKY_AMNT));
		}
		if(!(strTsryo == null || strTsryo.equals(JACStrConst.KARA_MOJI)))
		{
			tsryo = new BigDecimal(inMap.getString(JBSbatACIFM097.TSRYO));
		}

		if(!inKey.equals(bkKey))
		{
			if(bkKey != null)
			{
				// 出力
				outputInItem.addOutMapList(getOutputInf());
			}
			
			// 請求金額
			this.wkCntSikyAmt = sikyAmnt;
			
			// 通信量
			this.wkCntTsryo   = tsryo;
		
			// 退避
			taihiMap = inMap;
			
			bkKey = inKey;
		}
		else
		{
			// 請求金額
			this.wkCntSikyAmt = this.wkCntSikyAmt.add(sikyAmnt);
			
			// 通信量
			this.wkCntTsryo   = this.wkCntTsryo.add(tsryo);
			
			// 退避
			taihiMap = inMap;
			
			bkKey = inKey;
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][請求金額       = " + wkCntSikyAmt + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][通信量         = " + wkCntTsryo + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CH_M_PRC_KMK_OPUT_NM.close();
		db_KK_T_SEIKY_KEI.close();
		db_ZM_M_CD_NM_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**▼▼▼▼▼▼メソッド追加 開始▼▼▼▼▼▼*/
	
	/**
	 * コード名称管理からコード名称管理情報を取得します。
	 * 
	 * @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;
	}
	
	/**
	 * 料金項目出力名称から料金項目出力名称情報を取得します。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void getPrcKmkOutputNmInf() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getPrcKmkOutputNmInf]");
		
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();

		// 料金項目出力名称識別コード（料金項目名称）
		whereParam.setValue(JACStrConst.PRC_KMK_NM_SBT_CD_PRC_KMK_NM_RYAK);
		// 料金項目出力名称．適用開始年月日
		whereParam.setValue(this.tmpSeikyuYmEndDay);
		// 料金項目出力名称．適用終了年月日
		whereParam.setValue(this.tmpSeikyuYmEndDay);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getPrcKmkOutputNmInf][whereParam=" + whereParam.getList().toString() + "]");
		
		// SQL実行
		executeCH_M_PRC_KMK_OPUT_NM_AC_SELECT_003(whereParam.getList().toArray());
		
		JBSbatCommonDBInterface dbMap = db_CH_M_PRC_KMK_OPUT_NM.selectNext();
		
		// 取得できなかった場合
		if(dbMap == null)
		{
			// ログ出力
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0250CE,
					new String[] {JBSbatCH_M_PRC_KMK_OPUT_NM.TABLE_NAME, whereParam.getList().toString()});
		}
		// 上記以外の場合
		else
		{
			while(dbMap != null)
			{
				// マップキー作成
				ArrayList<String> mapKey = new ArrayList<String>();
				
				
				mapKey.add(dbMap.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PCRS_CD));		// 料金コースコード
				
				mapKey.add(dbMap.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PRC_SVC_CD));		// 料金サービスコード
				
				mapKey.add(dbMap.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PRC_KMK_CD));		// 料金項目コード
				
				
				// 料金項目出力名称情報マップに検索結果を設定（キー：料金コースコード、料金サービスコード、料金項目コード）
				prcKmkOutputNmInfMap.put(mapKey, dbMap.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PRC_KMK_NM));
				
				dbMap = db_CH_M_PRC_KMK_OPUT_NM.selectNext();
			}
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getPrcKmkOutputNmInf]");
		
		return;
	}
	
	/**
	 * 請求契約スキーマから送付先カナ名を取得します。
	 * 
	 * @param inMap 入力情報
	 * @return String 送付先カナ名
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getSeikyKeiInf(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getSeikyInf]");
		String rtnStr = null;
		
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		whereParam.setValue(inMap.getString(JBSbatACIFM097.SEIKY_KEI_NO));		// 請求契約番号
		whereParam.setValue(super.opeDate);										// バッチ運用日
		whereParam.setValue(JACStrConst.RSV_APLY_CD_FIX);						// 予約適用コード（予約適用）
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getSeikyInf][whereParam=" + whereParam.getList().toString() + "]");
		
		// SQL実行
		executeKK_T_SEIKY_KEI_AC_SELECT_001(whereParam.getList().toArray());
		
		JBSbatCommonDBInterface dbMap = db_KK_T_SEIKY_KEI.selectNext();
		// 取得できなかった場合
		if(dbMap == null)
		{
			// ログ出力
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0240CW,
					new String[] {JBSbatKK_T_SEIKY_KEI.TABLE_NAME, whereParam.getList().toString()});
			
		}
		// 上記以外の場合
		else
		{
			// 送付先カナ名
			rtnStr = dbMap.getString(JBSbatKK_T_SEIKY_KEI.SHS_KANA);
		}
		// 送付先カナ名＝null
		if(rtnStr == null)
		{
			// 空文字を設定
			rtnStr = JACStrConst.KARA_MOJI;
		}
		// 送付先カナ名の長さが25文字より長い場合
		else if(rtnStr.length() > JACStrConst.SIKYS_KANA_LEN)
		{
			rtnStr = rtnStr.substring(0, JACStrConst.SIKYS_KANA_LEN);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getSeikyInf][rtnStr=" + rtnStr + "]");
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getSeikyInf]");
		return rtnStr;
	}
	
	/**
	 * 出力情報を取得します。
	 * 
	 * @param inMap 入力情報
	 * @return JBSbatServiceInterfaceMap 出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap getOutputInf() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getOutputInf]");
		
		// 送付先名（カナ）
		String wkShsKana = null;
		
		// 送付先名（カナ）の取得
		wkShsKana = getSeikyKeiInf(taihiMap);
		
		// 請求金額(端数切捨て)
		wkCntSikyAmt = JACbatRknBusinessUtil.round(JACStrConst.ROUND_DOWN, wkCntSikyAmt, 2);
		
		// 通信量  (端数切捨て)
		wkCntTsryo   = JACbatRknBusinessUtil.round(JACStrConst.ROUND_DOWN, wkCntTsryo, 0);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getOutputInf][請求金額  = " + wkCntSikyAmt + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getOutputInf][通信量    = " + wkCntTsryo + "]");
		
		JBSbatServiceInterfaceMap outputMap = new JBSbatServiceInterfaceMap();
		outputMap.setString(JBSbatACIFM097.RSLT_NYO_CD,		this.prcClcRsltCd);										// 結果内容コード
		outputMap.setString(JBSbatACIFM097.RSLT_NYO,		this.prcRsltNyo);										// 結果内容
		outputMap.setString(JBSbatACIFM097.TRN_YMD,			super.opeDate);											// 処理日(バッチ運用日)
		outputMap.setString(JBSbatACIFM097.SEIKY_KEI_NO,	taihiMap.getString(JBSbatACIFM097.SEIKY_KEI_NO));		// 請求契約番号
		outputMap.setString(JBSbatACIFM097.SIKYS_KANA,		wkShsKana);												// 請求先カナ名
		outputMap.setString(JBSbatACIFM097.SVC_KEI_NO,		taihiMap.getString(JBSbatACIFM097.SVC_KEI_NO));			// サービス契約番号
		outputMap.setString(JBSbatACIFM097.SVC_DTL_SKBT_NO, JACStrConst.KARA_MOJI);									// サービス詳細識別番号
		outputMap.setString(JBSbatACIFM097.SEIKY_YM,		taihiMap.getString(JBSbatACIFM097.SEIKY_YM));			// 請求年月
		outputMap.setString(JBSbatACIFM097.PCRS_CD,			taihiMap.getString(JBSbatACIFM097.PCRS_CD));			// 料金コースコード
		outputMap.setString(JBSbatACIFM097.PRC_SVC_CD,		taihiMap.getString(JBSbatACIFM097.PRC_SVC_CD));			// 料金サービスコード
		outputMap.setString(JBSbatACIFM097.PRC_KMK_CD,		taihiMap.getString(JBSbatACIFM097.PRC_KMK_CD));			// 料金項目コード
		outputMap.setString(JBSbatACIFM097.PRC_UW_NM,		this.getPrcUtwkNm());									// 料金内訳名称
		outputMap.setString(JBSbatACIFM097.SIKY_AMNT,		wkCntSikyAmt.toString());								// 請求金額
		outputMap.setString(JBSbatACIFM097.TSRYO,			wkCntTsryo.toString());									// 通信料
		outputMap.setString(JBSbatACIFM097.TONYU_DIV,		JACStrConst.KARA_MOJI);									// 投入区分
		
		outputMap.setOutFlg(true);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getOutputInf]");
		return outputMap;
	}
	
	/**
	 * 料金項目出力名称情報マップから料金内訳名を取得します。
	 * 
	 * @param inMap 入力情報
	 * @return String 料金内訳名称
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getPrcUtwkNm() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getPrcUtwkNm]");
		String prcUtwkNm = null;
		// 料金項目出力名称情報マップに値が存在する場合
		if(!this.prcKmkOutputNmInfMap.isEmpty())
		{
			// マップキー作成
			ArrayList<String> mapKey = new ArrayList<String>();
			
			mapKey.add(taihiMap.getString(JBSbatACIFM097.PCRS_CD));			// 料金コースコード
			
			mapKey.add(taihiMap.getString(JBSbatACIFM097.PRC_SVC_CD));		// 料金サービスコード
			
			mapKey.add(taihiMap.getString(JBSbatACIFM097.PRC_KMK_CD));		// 料金項目コード
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getPrcUtwkNm][mapKey=" + mapKey.toString() + "]");
		
			// 料金内訳名取得
			prcUtwkNm = this.prcKmkOutputNmInfMap.get(mapKey);
			
		}
		// 料金内訳名称がnullの場合
		if(prcUtwkNm == null)
		{
			// ""（空文字）を設定
			prcUtwkNm = JACStrConst.KARA_MOJI;
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getPrcUtwkNm][prcUtwkNm=" + prcUtwkNm + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getPrcUtwkNm]");
		return prcUtwkNm;
	}
	
	/**
	 * コード名称管理情報マップから結果内容を取得します。
	 * 
	 * @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;
	}
	
	/**▲▲▲▲▲▲メソッド追加 終了▲▲▲▲▲▲*/
	
	
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * 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 executeCH_M_PRC_KMK_OPUT_NM_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_CH_M_PRC_KMK_OPUT_NM.selectBySqlDefine(paramList, CH_M_PRC_KMK_OPUT_NM_AC_SELECT_003);
	}

	/**
	 * 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 executeKK_T_SEIKY_KEI_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_KK_T_SEIKY_KEI.selectBySqlDefine(paramList, KK_T_SEIKY_KEI_AC_SELECT_001);
	}

	/**
	 * 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);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
