/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACPrcCalcRsltFormat
*	ソースファイル名	：JBSbatACPrcCalcRsltFormat.java
*	作成者				：富士通　
*	作成日				：2013年09月17日
*＜機能概要＞
*　料金計算結果情報項目編集部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/09/17   富士通		新規作成
*	v7.00.00	2014/02/21  FJ)伊藤		【OM-2014-0000775】小数点の請求金額は金額形式に編集しない修正
*	v8.00.00	2013/12/16	FJ)田内		【ANK-1584-00-00】サービス詳細識別番号追加
*	v8.00.01	2014/03/07  FJ)江森		【OM-2014-0000984】請求金額"0.00"を0円として扱うように修正
*
*********************************************************************/
package eo.business.service;

import eo.business.common.JACBatCommon;
import eo.common.util.JPCUtilCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatACIFM243;
import eo.business.util.file.JBSbatACIFM244;
import eo.common.constant.JACStrConst;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACPrcCalcRsltFormat extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @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();

		String sikyAmnt = inMap.getString(JBSbatACIFM243.SIKY_AMNT);
		
		// 請求金額がnullではない場合
		if(!JACBatCommon.isNull(sikyAmnt))
		{
			// String型をFloat型に変換（小数点表記対応のため）
			Float fSeikyAmnt = Float.parseFloat(sikyAmnt);
			
			// 請求金額が0円の場合、変数に"0"を設定
			if(fSeikyAmnt == 0)
			{
				sikyAmnt = "0";
			}
		}
		
		String tsRyo = inMap.getString(JBSbatACIFM243.TSRYO);

		// 出力項目設定
		if(sikyAmnt.equals("0") && (tsRyo.equals("0") || tsRyo.equals(JACStrConst.KARA_MOJI)))
		{
			// 金額が0でかつ通信量が0または空なら退避ファイルへ
			outputItem.addOutMapList_2(this.getOutputInf(inMap));
		}
		else
		{
			// それ以外は蓄積ファイル（当日分へ）
			outputItem.addOutMapList(this.getOutputInf(inMap));
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 出力情報を取得します。
	 * 
	 * @param inMap 入力情報
	 * @return JBSbatServiceInterfaceMap 出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap getOutputInf(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getOutputInf]");
		
		JBSbatServiceInterfaceMap outputMap = new JBSbatServiceInterfaceMap();
		
		
		outputMap.setString(JBSbatACIFM244.RSLT_NYO_CD,		inMap.getString(JBSbatACIFM243.RSLT_NYO_CD));		// 結果内容コード
		
		outputMap.setString(JBSbatACIFM244.RSLT_NYO,		inMap.getString(JBSbatACIFM243.RSLT_NYO));			// 結果内容
		
		outputMap.setString(JBSbatACIFM244.TRN_YMD,			JPCUtilCommon.formatDate(
															inMap.getString(JBSbatACIFM243.TRN_YMD)));			// 処理日
		
		outputMap.setString(JBSbatACIFM244.SEIKY_KEI_NO,	inMap.getString(JBSbatACIFM243.SEIKY_KEI_NO));		// 請求契約番号
		
		outputMap.setString(JBSbatACIFM244.SIKYS_KANA,		inMap.getString(JBSbatACIFM243.SIKYS_KANA));		// 請求先名
		
		outputMap.setString(JBSbatACIFM244.SVC_KEI_NO,		inMap.getString(JBSbatACIFM243.SVC_KEI_NO));		// サービス契約番号
		
		outputMap.setString(JBSbatACIFM244.SVC_DTL_SKBT_NO, inMap.getString(JBSbatACIFM243.SVC_DTL_SKBT_NO));	// サービス詳細識別番号
		
		String seikyYm = inMap.getString(JBSbatACIFM243.SEIKY_YM);
		if(!seikyYm.equals(JACStrConst.KARA_MOJI))
		{
			outputMap.setString(JBSbatACIFM244.SEIKY_YM,		JPCUtilCommon.formatDate(
									inMap.getString(JBSbatACIFM243.SEIKY_YM).concat("01")).substring(0, 7));	// 請求年月
		}
		else
		{
			outputMap.setString(JBSbatACIFM244.SEIKY_YM,		JACStrConst.KARA_MOJI);							// 請求年月
		}
		outputMap.setString(JBSbatACIFM244.PCRS_CD,			inMap.getString(JBSbatACIFM243.PCRS_CD));			// 料金コースコード
		
		outputMap.setString(JBSbatACIFM244.PRC_SVC_CD,		inMap.getString(JBSbatACIFM243.PRC_SVC_CD));		// 料金サービスコード
		
		outputMap.setString(JBSbatACIFM244.PRC_KMK_CD,		inMap.getString(JBSbatACIFM243.PRC_KMK_CD));		// 料金項目コード
		
		outputMap.setString(JBSbatACIFM244.PRC_UW_NM,		inMap.getString(JBSbatACIFM243.PRC_UW_NM));			// 料金内訳名称
		
		String sikyAmnt = inMap.getString(JBSbatACIFM243.SIKY_AMNT);
		if(!sikyAmnt.equals(JACStrConst.KARA_MOJI))
		{
			if(sikyAmnt.contains(JACStrConst.DECIMAL_POINT))
			{
				outputMap.setString(JBSbatACIFM244.SIKY_AMNT,		sikyAmnt);									// 請求金額
			}
			else
			{
				outputMap.setString(JBSbatACIFM244.SIKY_AMNT,		JPCUtilCommon.formatNumber(sikyAmnt));		// 請求金額
			}
		}
		else
		{
			outputMap.setString(JBSbatACIFM244.SIKY_AMNT,		JACStrConst.KARA_MOJI);							// 請求金額
		}
		
		String tsRyo = inMap.getString(JBSbatACIFM243.TSRYO);
		if(!tsRyo.equals(JACStrConst.KARA_MOJI))
		{
			outputMap.setString(JBSbatACIFM244.TSRYO,			JPCUtilCommon.formatNumber(tsRyo));				// 通信量
		}
		else
		{
			outputMap.setString(JBSbatACIFM244.TSRYO,			JACStrConst.KARA_MOJI);							// 通信量
		}
		
		outputMap.setString(JBSbatACIFM244.TONYU_DIV,		inMap.getString(JBSbatACIFM243.TONYU_DIV));			// 投入区分
		
		// 出力情報を""で囲む
		outputMap.setMap(JACBatCommon.quote(outputMap.getMap(), JACStrConst.DOUBLE_QUOTE, JACStrConst.DOUBLE_QUOTE));
		
		outputMap.setOutFlg(true);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getOutputInf]");
		return outputMap;
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
