/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUGetEonetTwGkCC
*   ソースファイル名：JFUGetEonetTwGkCC.java
*   作成者          ：富士通
*   日付            ：2011年12月12日
*＜機能概要＞
*   eo-netフォン通話明細照会メニューコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/12/12   FJ）垣本    新規作成
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EAC0431A010CBSMsg;

/**
 * 通話明細照会メニューコンポーネント部品
 * 
 * <br>
 * @author 富士通
 */
public class JFUGetEonetTwGkCC extends JFUBaseCC
{
	/* ■□ eo-netフォン通話合計一意照会SC ■□ */
	/** テンプレートID(eo-netフォン通話合計一意照会) */
	private static final String TEMPLATE_ID_SEARCH = "EAC0431A010";
	/** テンプレートID(eo-netフォン通話合計一意照会明細) */
	private static final String TEMPLATE_ID_SEARCH_DETAIL = EAC0431A010CBSMsg.EAC0431A010CBSMSG1LIST;
	/** INリスト項目値(eo-netフォン通話合計一意照会) */
	private static final List<String> IN_COLUMN_LIST_SEARCH =
			Arrays.asList(EAC0431A010CBSMsg.KEY_SVC_KEI_NO, EAC0431A010CBSMsg.KEY_OP_SVC_KEI_NO, EAC0431A010CBSMsg.KEY_PCRS_CD,
					EAC0431A010CBSMsg.KEY_PRC_SVC_CD, EAC0431A010CBSMsg.KEY_SEIKY_YM, EAC0431A010CBSMsg.KEY_KAKINS_TELNO);
	/** ＫＥＹ_請求年月リスト */
	private static final String KEY_SEIKY_YM_LIST = "key_seiky_ym_list";
	/** ＫＥＹ_請求年月 */
	private static final String KEY_SEIKY_YM = "key_seiky_ym";

	/**
	 * eo-netフォン通話合計処理<br>
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getEonetTwGk(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap<String, Object> inMap = (HashMap<String, Object>)(param.getData(fixedText));
		// ＫＥＹ＿請求年月リスト
		ArrayList<Object> seikyYmLst = (ArrayList<Object>)inMap.get(KEY_SEIKY_YM_LIST);
		// 検索結果リスト
		List<HashMap> resultList = new ArrayList<HashMap>();
		// ＫＥＹ＿請求年月リストの件数分、eo-netフォン通話合計一意照会を実行
		for (int i = 0; i < seikyYmLst.size(); i++)
		{
			HashMap dataMap = (HashMap)param.getData(fixedText);
			dataMap.remove(TEMPLATE_ID_SEARCH_DETAIL);
			// ●eo-netフォン通話合計一意照会
			// 照会対象の請求年月を取得
			HashMap<String, String> seikyYmMap = (HashMap<String, String>)seikyYmLst.get(i);
			String keySeikyYm = seikyYmMap.get(KEY_SEIKY_YM);
			// 上りマッピング項目設定
			setInMapTaiikiCtrlSykSearch(param, fixedText, keySeikyYm);
			// 検索エラーなし設定
			ignoreSearchError(param, fixedText);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_SEARCH, TEMPLATE_ID_SEARCH_DETAIL, IN_COLUMN_LIST_SEARCH, BLANK);
			// 実行結果を検索結果リストに保存
			dataMap = (HashMap)param.getData(fixedText);
			List<HashMap> result = (List<HashMap>)dataMap.get(TEMPLATE_ID_SEARCH_DETAIL);
			result = (List<HashMap>)dataMap.get(TEMPLATE_ID_SEARCH_DETAIL);
			if (result != null)
			{
				HashMap resultMap = result.get(0);
				resultList.add(resultMap);
			}
		}
		// 業務データ取得
		HashMap dataMap = (HashMap)param.getData(fixedText);
		// 検索結果リストを検索結果マップに設定
		dataMap.put(TEMPLATE_ID_SEARCH_DETAIL, resultList);
		param.setData(fixedText, dataMap);

		return param;
	}

	/**
	 * チェック処理<br>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return HashMap<String, Object> チェック処理用マップ
	 * @throws Exception 
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap inMap = (HashMap)param.getData(fixedText);

		// マップに値が設定されていない場合は処理を行わない。
		if (inMap == null)
		{
			return null;
		}
		// ＫＥＹ＿請求年月リスト
		ArrayList<Object> seikyYmLst = (ArrayList<Object>)inMap.get(KEY_SEIKY_YM_LIST);
		HashMap<String, String> seikyYmMap = (HashMap<String, String>)seikyYmLst.get(0);
		String keySeikyYm = seikyYmMap.get(KEY_SEIKY_YM);
		// 上りマッピング項目設定
		setInMapTaiikiCtrlSykSearch(param, fixedText, keySeikyYm);
		return getInvokeCBS(handle, param, fixedText, TEMPLATE_ID_SEARCH, TEMPLATE_ID_SEARCH_DETAIL, IN_COLUMN_LIST_SEARCH);
	}

	/**
	 * 上りマッピング項目設定(eo-netフォン通話合計一意照会)<br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param seikyYm 請求年月
	 * @throws RequestParameterException 
	 */
	@SuppressWarnings("unchecked")
	private void setInMapTaiikiCtrlSykSearch(IRequestParameterReadWrite param, String fixedText, String seikyYm) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// ＫＥＹ＿請求年月
		inMap.put(EAC0431A010CBSMsg.KEY_SEIKY_YM, seikyYm);

	}
}
