/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JCHejbCH0191getMinNyukinNo
*	ソースファイル名：JCHejbCH0191getMinNyukinNo.java
*	作成者			：富士通
*	日付			：2011年11月16日
*＜機能概要＞
*	入金番号取得部品クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/12/2	富士通		新規作成
*   v5.00.00	2013/08/03  FJ) 河井   【IT1-2013-0001509】入金番号取得処理追加
*
**********************************************************************/

package eo.ejb.common.edit;

import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.util.JCRUtilCommon;
import eo.ejb.cbs.cbsmsg.ECH0191C030CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0191C030CBSMsg1List;

/**
 * <p>
 * 入金番号を取得する部品。
 * </p>
 * @author 富士通
 */
public class JCHejbCH0191getMinNyukinNo extends JACejbNumberPartsBase
{

	/** 入金番号マップキー */
	private static final String KEY_TG_NYUKIN_NO = "TG_NYUKIN_NO";
	
	/**
	 * コンストラクタです。
	 */
	public JCHejbCH0191getMinNyukinNo()
	{
	}

	/**
	 * <p>
	 * 統合対象金庫情報明細の中で入金処理年月日が最古の「統合対象＿入金番号」を取得する。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return CBSMsg1Listの統合対象金庫情報明細中、入金処理年月日が最古の統合対象＿入金番号
	 */
	public static String getMinNyukinNo(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		
		CAANMsg[] caECH0191C030CBSMsg1LIST = inMsg.getCAANMsgList(ECH0191C030CBSMsg.ECH0191C030CBSMSG1LIST);
		
		//最古の入金処理年月日を設定
		String minNyukinTrnYMD = null;

		//最古の入金処理年月日が入っているデータが明細の何番目のデータかを判定するために使用
		int minDataNum = 0;
		
		//明細の中で最古の統合対象＿入金処理年月日をMinNyukinTrnYMDに設定する。
		for(int n = 0; n < caECH0191C030CBSMsg1LIST.length; n++)
		{
			if (JCRUtilCommon.isNull(minNyukinTrnYMD))
			{
				minNyukinTrnYMD = caECH0191C030CBSMsg1LIST[n].getString(ECH0191C030CBSMsg1List.TG_NYUKIN_TRN_YMD);
				minDataNum = n;
			}
			else
			{
				String sNyukinTrnYMD = caECH0191C030CBSMsg1LIST[n].getString(ECH0191C030CBSMsg1List.TG_NYUKIN_TRN_YMD);
				if (!JCRUtilCommon.isNull(sNyukinTrnYMD))
				{
					if(minNyukinTrnYMD.compareTo(sNyukinTrnYMD) > 0)
					{
						minNyukinTrnYMD = caECH0191C030CBSMsg1LIST[n].getString(ECH0191C030CBSMsg1List.TG_NYUKIN_TRN_YMD);
						minDataNum = n;
					}
				}
			}
			
		}

		// 統合対象＿入金番号
		String tgNyukinNo = "";

		if (!JCRUtilCommon.isNull(minNyukinTrnYMD))
		{
			//入金番号にCBSMsg1Listの統合対象金庫情報明細の中で入金処理年月日が最古の「統合対象＿入金番号」を設定する。
			tgNyukinNo = caECH0191C030CBSMsg1LIST[minDataNum].getString(ECH0191C030CBSMsg1List.TG_NYUKIN_NO);
		}

		return tgNyukinNo;
	}

	/**
	 * <p>
	 * 統合先金庫に設定する入金番号を取得する。<br>
	 * 統合元金庫の入金番号が同じ場合は統合先に引継ぐ。<br>
	 * 統合元金庫の入金番号が複数の場合は統合先に引継がない。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 統合先金庫の入金番号
	 */
	public static String getNyukinNo(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		
		CAANMsg[] caECH0191C030CBSMsg1LIST = inMsg.getCAANMsgList(ECH0191C030CBSMsg.ECH0191C030CBSMSG1LIST);
		
		// 入金番号
		String nyukinNo = "";
		HashMap<String, String> nyukinNoMap = new HashMap<String, String>();
		
		// 統合元金庫の入金番号を比較し統合先金庫に設定する入金番号を確定する
		for(int n = 0; n < caECH0191C030CBSMsg1LIST.length; n++)
		{
			nyukinNo = caECH0191C030CBSMsg1LIST[n].getString(ECH0191C030CBSMsg1List.TG_NYUKIN_NO);
			
			if (nyukinNoMap.size() == 0)
			{
				nyukinNoMap.put(KEY_TG_NYUKIN_NO, nyukinNo);
			}
			else
			{
				if(!nyukinNoMap.containsValue(nyukinNo))
				{
					return "";
				}
			}
		}
		
		return nyukinNo;
	}
}
