/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatAKSaikenInfSelect
*	ソースファイル名	：JBSbatAKSaikenInfSelect.java
*	作成者				：富士通　
*	作成日				：2013年07月04日
*＜機能概要＞
*　債権情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/07/04   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatAKIFM051;
import eo.business.util.file.JBSbatAKIFM059;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatAKSaikenInfSelect extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 集計金額 */
	private BigDecimal sum_amnt = BigDecimal.ZERO;
	
	/** ＯＬＤステータスキー */
	private String old_stat_key = null;
	
	/** ステータス別集計金額設定マップ */
	private HashMap<String, BigDecimal> statSumAmntMap = new HashMap<String, BigDecimal>();
	
	/** 債権ステータス配列 */
	private String [] saikenStat = {"000", "010", "020", "030", "040", "050", "060", "080", "090", "100"};

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @param outputInItem 入力情報
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 1件目（退避リストが空のとき）
	    if (!outputInItem.isOutMapList()) {
	    	//金額を集計する
			sum_amnt = sum_amnt.add(inMap.getBigDecimal(JBSbatAKIFM059.AMNT));
			
			//ＯＬＤステータスキーに退避
			old_stat_key = inMap.getString(JBSbatAKIFM059.STAT);
			
	        // 出力電文に入力電文を設定して返却。（出力フラグはfalse）
	        outputInItem.addOutMapList(inMap);            
	        return outputInItem;
	    }


	    // 入力なし（＝最終処理）の場合、集計結果を出力して処理を終了する。
	    if (inMap == null) {
	    	//集計金額をマップに退避する
	    	this.statSumAmntMap.put(old_stat_key, sum_amnt);
	    	
	    	// マップに退避した集計金額を出力する
			JBSbatOutputItem item = new JBSbatOutputItem();
			
			JBSbatServiceInterfaceMap outRecord = null;
			
			//債権ステータス配列のステータス分レコードを出力する
			for (int i = 0; i < saikenStat.length; i++) {
				
				outRecord = new JBSbatServiceInterfaceMap();
				
				//ステータス
				outRecord.setString(JBSbatAKIFM051.STAT, saikenStat [i]);
				
				//金額
				if (statSumAmntMap.get(saikenStat [i]) == null){
					outRecord.setBigDecimal(JBSbatAKIFM051.AMNT, BigDecimal.ZERO);
				}else{
					outRecord.setBigDecimal(JBSbatAKIFM051.AMNT, statSumAmntMap.get(saikenStat [i]));
				}
				
				// 出力フラグを設定します
				outRecord.setOutFlg(true);
				// 出力レコード1件設定します
				item.addOutMapList(outRecord);
			}
	    	
	        return item;
	    }


	    // キー（入力）の設定。
	    StringBuffer inkeyBuf = new StringBuffer();
	    inkeyBuf.append(inMap.getString(JBSbatAKIFM059.STAT));   // ステータス
	    String inKey = inkeyBuf.toString();                      // キー（マスタ）メイン生成

	    // キー（退避）の設定。
	    StringBuffer keyBufTmp = new StringBuffer();
	    keyBufTmp.append(old_stat_key);                          // ステータス
	    String tmpKey = keyBufTmp.toString();                    // キー（退避）メイン生成

	    // キーが不一致
	    if (!inKey.equals(tmpKey)) {
	    	//集計金額をマップに退避する
	    	this.statSumAmntMap.put(old_stat_key, sum_amnt);
	    	
	    	// 集計金額クリア
	    	sum_amnt = BigDecimal.ZERO;
	    	
	        // 現レコードを出力領域に設定。ただし出力フラグはオフのまま。
	        outputInItem.addOutMapList(inMap);
	    }
	    
	    //金額を集計する
		sum_amnt = sum_amnt.add(inMap.getBigDecimal(JBSbatAKIFM059.AMNT));
	    
		//ＯＬＤステータスキーに退避
		old_stat_key = inMap.getString(JBSbatAKIFM059.STAT);
		
	    return outputInItem;

	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
