/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUGetIswSetWribPrcCC
*   ソースファイル名：JFUGetIswSetWribPrcCC.java
*   作成者          ：富士通
*   日付            ：2017年04月26日
*＜機能概要＞
*  インターネットサギウォールセット割引金額取得コモンコンポーネント部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v32.00      2017/04/26   FJ)岡井     【ANK-3149-00-00】新セキュリティパック導入
*   v47.0.0     2019/06/28   FJ)大島     【ANK-3636-00-00】消費増税対応（8%⇒10%）
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.JACStrConst;
import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JACCommonUtil;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.EAC0231B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EAC0231B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EAC0251B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EAC0251B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0601B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0601B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0711B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0711B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0311A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0311A010CBSMsg1List;

/**
 * インターネットサギウォールセット割引金額取得部品です。
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUGetIswSetWribPrcCC extends JFUBaseCC
{
	// ■割引サービス単価一覧照会（割引サービスコード）
	/** テンプレートID(割引サービス単価一覧照会（割引サービスコード）) */
	private static final String TEMP_ID_EKK0711B001 = "EKK0711B001";
	/** テンプレートID(割引サービス単価一覧照会（割引サービスコード）明細) */
	private static final String TEMP_ID_DTL_EKK0711B001 = EKK0711B001CBSMsg.EKK0711B001CBSMSG1LIST;
	/** IN項目リスト(割引サービス単価一覧照会（割引サービスコード）) */
	private static final List<String> IN_LIST_EKK0711B001 = Arrays.asList(EKK0711B001CBSMsg.KEY_WRIB_SVC_CD);
	/** 関連チェックエラー項目(割引サービス単価一覧照会（割引サービスコード）) */
	private static final String ERR_EKK0711B001 = EKK0711B001CBSMsg.KEY_WRIB_SVC_CD_ERR;
	/** SC実行結果取得キー(割引サービス単価一覧照会（割引サービスコード）) */
	private static final String TEMP_TEMP_KEY_EKK0711B001 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0711B001 + TEMP_TEMPLATE_PRIFIX_SEP;

	// ■システムパラメータ管理一意照会
	/** テンプレートID(システムパラメータ管理一意照会) */
	private static final String TEMP_ID_EZM0311A010 = "EZM0311A010";
	/** テンプレートID(システムパラメータ管理一意照会明細) */
	private static final String TEMP_ID_DTL_EZM0311A010 = EZM0311A010CBSMsg.EZM0311A010CBSMSG1LIST;
	/** IN項目リスト(システムパラメータ管理一意照会) */
	private static final List<String> IN_LIST_EZM0311A010 = Arrays.asList(EZM0311A010CBSMsg.KEY_SYS_PARAM_BUNRUI_CD,
			EZM0311A010CBSMsg.KEY_SYS_PARAM_ID);
	/** 関連チェックエラー項目(システムパラメータ管理一意照会) */
	private static final String ERR_EZM0311A010 = EZM0311A010CBSMsg.KEY_SYS_PARAM_BUNRUI_CD_ERR;
	/** SC実行結果取得キー(システムパラメータ管理一意照会) */
	private static final String TEMP_TEMP_KEY_EZM0311A010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EZM0311A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	// ■割引集計＜料金シミュレーション＞一覧照会
	/** テンプレートID(割引集計＜料金シミュレーション＞一覧照会) */
	private static final String TEMP_ID_EAC0231B010 = "EAC0231B010";
	/** テンプレートID(割引集計＜料金シミュレーション＞一覧照会明細) */
	private static final String TEMP_ID_DTL_EAC0231B010 = EAC0231B010CBSMsg.EAC0231B010CBSMSG1LIST;
	/** IN項目リスト(割引集計＜料金シミュレーション＞一覧照会) */
	private static final List<String> IN_LIST_EAC0231B010 = Arrays.asList(EAC0231B010CBSMsg.KEY_SYS_CD, EAC0231B010CBSMsg.KEY_PRC_SVC_CD);
	/** 関連チェックエラー項目(割引集計＜料金シミュレーション＞一覧照会) */
	private static final String ERR_EAC0231B010 = EAC0231B010CBSMsg.KEY_SYS_CD_ERR;
	/** SC実行結果取得キー(割引集計＜料金シミュレーション＞一覧照会) */
	private static final String TEMP_TEMP_KEY_EAC0231B010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EAC0231B010 + TEMP_TEMPLATE_PRIFIX_SEP;

	// ■割引料金＜料金シミュレーション＞一覧照会
	/** テンプレートID(割引料金＜料金シミュレーション＞一覧照会) */
	private static final String TEMP_ID_EAC0251B010 = "EAC0251B010";
	/** テンプレートID(割引料金＜料金シミュレーション＞一覧照会明細) */
	private static final String TEMP_ID_DTL_EAC0251B010 = EAC0251B010CBSMsg.EAC0251B010CBSMSG1LIST;
	/** IN項目リスト(割引料金＜料金シミュレーション＞一覧照会) */
	private static final List<String> IN_LIST_EAC0251B010 = Arrays.asList(EAC0251B010CBSMsg.KEY_SYS_CD, EAC0251B010CBSMsg.KEY_PRC_SVC_CD,
			EAC0251B010CBSMsg.KEY_WRIB_SHUK_CD);
	/** 関連チェックエラー項目(割引料金＜料金シミュレーション＞一覧照会) */
	private static final String ERR_EAC0251B010 = EAC0251B010CBSMsg.KEY_SYS_CD_ERR;
	/** SC実行結果取得キー(割引料金＜料金シミュレーション＞一覧照会) */
	private static final String TEMP_TEMP_KEY_EAC0251B010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EAC0251B010 + TEMP_TEMPLATE_PRIFIX_SEP;

	// ■料金プラン固定単価（オプション申込料金）一覧照会
	/** テンプレートID(料金プラン固定単価（オプション申込料金）一覧照会) */
	private static final String TEMP_ID_EKK0601B001 = "EKK0601B001";
	/** テンプレートID(料金プラン固定単価（オプション申込料金）一覧照会明細) */
	private static final String TEMP_ID_DTL_EKK0601B001 = EKK0601B001CBSMsg.EKK0601B001CBSMSG1LIST;
	/** IN項目リスト(料金プラン固定単価（オプション申込料金）一覧照会) */
	private static final List<String> IN_LIST_EKK0601B001 = Arrays.asList(EKK0601B001CBSMsg.KEY_PCRS_CD, EKK0601B001CBSMsg.KEY_PPLAN_CD,
			EKK0601B001CBSMsg.MAX_SEARCH_NUM);
	/** 関連チェックエラー項目(料金プラン固定単価（オプション申込料金）一覧照会) */
	private static final String ERR_EKK0601B001 = EKK0601B001CBSMsg.KEY_PPLAN_CD_ERR;
	/** SC実行結果取得キー(料金プラン固定単価（オプション申込料金）一覧照会) */
	private static final String TEMP_TEMP_KEY_EKK0601B001 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0601B001 + TEMP_TEMPLATE_PRIFIX_SEP;

	// ■その他
	/** 料金項目コード：インターネットサギウォール　ｆｏｒ　ｅｏ　（セット割） */
// ANK-3636-00-00 MOD START
	private static final String RKC_21006051601 = "21006051601";
// ANK-3636-00-00 MOD END

	/** 料金グループリスト：ホーム、メゾン */
	private static final List HOME_MEZON_LIST = Arrays.asList(JFUStrConst.CD00133_02, JFUStrConst.CD00133_03);

	// ■項目
	/** 項目ID：割引サービス名 */
	private static final String WRIB_SVC_NM = "wrib_svc_nm";
	/** 項目ID：料金用システムコード */
	private static final String AC_SYS_CD = "ac_sys_cd";
	/** 項目ID：割引料金 */
	private static final String WRIB_PRC = "wrib_prc";

	// ■IN項目
	/** IN：料金グループコード */
	private static final String IN_PRC_GRP_CD = "in_prc_grp_cd";
	/** IN：料金コースコード */
	private static final String IN_PCRS_CD = "in_pcrs_cd";
	/** IN：料金プランコード */
	private static final String IN_PPLAN_CD = "in_pplan_cd";

	// ■OUT項目
	/** OUT：固定金額 */
	private static final String ISW_PRC = "isw_prc";
	/** OUT：セット割引金額 */
	private static final String SET_WRIB_PRC = "set_wrib_prc";
	/** OUT：インターネットサギウォールセット割引適用金額 */
	private static final String ISW_WRIB_PRC = "isw_set_wrib_prc";

	/**
	 * インターネットサギウォールセット割引金額取得処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception
	 */
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// リクエストパラメータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		if (inMap == null || inMap.size() == 0)
		{
			// 情報が存在しない場合
			return param;
		}

		// シミュレーション依頼リストの作成
		List<Map<String, String>> simuIraiList = getSimuIraiList(handle, param, fixedText);

		if(simuIraiList != null && simuIraiList.size() > 0)
		{
			// 割引料金取得
			getWribPrc(handle, param, fixedText, simuIraiList);
			// 割引料金計算処理
			getCalcPrc(handle, param, fixedText);
		}

		return param;
	}

	/**
	 * チェック処理（共通処理）です。
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}

	/**
	 * シミュレーション依頼リストの作成処理です。
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return シミュレーション依頼リスト
	 * @throws Exception 
	 */
	private List<Map<String, String>> getSimuIraiList(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
		throws Exception
	{
		// シミュレーション依頼リスト
		List<Map<String, String>> iraiList = new ArrayList<Map<String, String>>();

		// リクエストパラメータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ●割引サービス単価一覧照会（割引サービスコード）
		// ユーザデータ初期化
		initData(param, fixedText, IN_LIST_EKK0711B001);
		// 上りマッピング
		setEKK0711B001(param, fixedText);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMP_ID_EKK0711B001, TEMP_ID_DTL_EKK0711B001, IN_LIST_EKK0711B001, ERR_EKK0711B001);
		// 下りマッピング
		List<HashMap> eKK0711B001List = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0711B001), TEMP_ID_DTL_EKK0711B001);

		if(eKK0711B001List == null || eKK0711B001List.size() == 0)
		{
			// 取得できない場合は処理を終了する
			return iraiList;
		}

		String netPrcGrpCd = (String)inMap.get(IN_PRC_GRP_CD);
		String netPcrsCd = (String)inMap.get(IN_PCRS_CD);
		String netPplanCd = (String)inMap.get(IN_PPLAN_CD);

		for (int i = 0; i < eKK0711B001List.size(); i++)
		{
			HashMap eKK0711B001Map = eKK0711B001List.get(i);

			String wribPcrsCd = (String)eKK0711B001Map.get(EKK0711B001CBSMsg1List.PCRS_CD);
			String wribPplanCd = (String)eKK0711B001Map.get(EKK0711B001CBSMsg1List.PPLAN_CD);
			String wriboOpSvcCd = (String)eKK0711B001Map.get(EKK0711B001CBSMsg1List.OP_SVC_CD);

			if(JFUStrConst.CD00134_BE2.equals(wribPcrsCd) && JFUStrConst.CD00565_PBE201.equals(wribPplanCd)
					&& JFUStrConst.CD00136_B131.equals(wriboOpSvcCd))
			{
				// インターネットサギウォールセット割の場合
				Map iraiMap = new HashMap();

				iraiMap.put(EKK0711B001CBSMsg1List.WRIB_SVC_CD, eKK0711B001Map.get(EKK0711B001CBSMsg1List.WRIB_SVC_CD));
				iraiMap.put(EKK0711B001CBSMsg1List.WRIB_SVC_TANKA_NO, eKK0711B001Map.get(EKK0711B001CBSMsg1List.WRIB_SVC_TANKA_NO));
				iraiMap.put(EKK0711B001CBSMsg1List.SVC_CD, eKK0711B001Map.get(EKK0711B001CBSMsg1List.SVC_CD));
// ANK-3636-00-00 MOD START
				iraiMap.put(EKK0711B001CBSMsg1List.PRC_KMK_CD, RKC_21006051601);
// ANK-3636-00-00 MOD END
				iraiMap.put(EKK0711B001CBSMsg1List.PRC_GRP_CD, netPrcGrpCd);
				iraiMap.put(EKK0711B001CBSMsg1List.PCRS_CD, netPcrsCd);
				iraiMap.put(EKK0711B001CBSMsg1List.PPLAN_CD, netPplanCd);
				iraiMap.put(WRIB_SVC_NM, JFUStrConst.EMPTY);

				iraiList.add(iraiMap);
				break;
			}
		}

		return iraiList;
	}

	/**
	 * 割引料金取得処理です。
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param simuIraiList シミュレーション依頼リスト
	 * @throws Exception 
	 */
	private void getWribPrc(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			List<Map<String, String>> simuIraiList) throws Exception
	{
		// リクエストパラメータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 料金系サービスIF実行前処理
		if(HOME_MEZON_LIST.contains((String)inMap.get(IN_PRC_GRP_CD)))
		{
			// ホーム・メゾン
			acIfInit(handle, param, fixedText, JPCModelConstant.FUNC_CD_1);
		}
		else
		{
			// マンション
			acIfInit(handle, param, fixedText, JPCModelConstant.FUNC_CD_2);
		}

		ArrayList resultList = new ArrayList();

		// 割引集計処理
		List<Map<String, String>> waribikiLst = new ArrayList<Map<String, String>>();
		for (Map<String, String> msg : simuIraiList)
		{
			String wribPcrsCd = msg.get(EKK0711B001CBSMsg1List.PCRS_CD);
			String wribSvcTnkNo = msg.get(EKK0711B001CBSMsg1List.WRIB_SVC_TANKA_NO);

			// 割引サービス単価番号が入ってないときはループを抜ける
			if (JFUBPCommon.isNull(wribSvcTnkNo))
			{
				continue;
			}

			// ●割引集計＜料金シミュレーション＞一覧照会
			// ユーザデータ初期化
			initData(param, fixedText, IN_LIST_EAC0231B010);
			// 上りマッピング
			setEAC0231B010(param, fixedText, JPCUtilCommon.fillHalfSpace(wribSvcTnkNo, 12, true));
			//検索エラーなし設定
			ignoreSearchError(param, fixedText);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMP_ID_EAC0231B010, TEMP_ID_DTL_EAC0231B010, IN_LIST_EAC0231B010, ERR_EAC0231B010);
			// 下りマッピング
			List<HashMap> eAC0231B010List = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EAC0231B010), TEMP_ID_DTL_EAC0231B010);

			if(eAC0231B010List == null || eAC0231B010List.size() == 0)
			{
				continue;
			}

			for (HashMap outMsg : eAC0231B010List)
			{
				if(outMsg.get(EAC0231B010CBSMsg1List.SHUK_PCRS_CD).equals(wribPcrsCd))
				{
					// 集計料金コースコードと対象の料金コースコードが一致した場合に集計する。
					Map<String, String> waribiki = new HashMap<String, String>();

					waribiki.put(EAC0231B010CBSMsg1List.PRC_SVC_CD, (String)outMsg.get(EAC0231B010CBSMsg1List.PRC_SVC_CD));
					waribiki.put(EAC0231B010CBSMsg1List.WRIB_CTRL_SKBT_CD, (String)outMsg.get(EAC0231B010CBSMsg1List.WRIB_CTRL_SKBT_CD));
					waribiki.put(EAC0231B010CBSMsg1List.SHUK_TANI_CD, (String)outMsg.get(EAC0231B010CBSMsg1List.SHUK_TANI_CD));
					waribiki.put(EAC0231B010CBSMsg1List.WRIB_SHUK_CD, (String)outMsg.get(EAC0231B010CBSMsg1List.WRIB_SHUK_CD));
					waribiki.put(EAC0231B010CBSMsg1List.SHUK_PCRS_CD, (String)outMsg.get(EAC0231B010CBSMsg1List.SHUK_PCRS_CD));
					waribiki.put(EAC0231B010CBSMsg1List.SHUK_PRC_SVC_CD, (String)outMsg.get(EAC0231B010CBSMsg1List.SHUK_PRC_SVC_CD));
					waribiki.put(EAC0231B010CBSMsg1List.SHUK_PRC_KMK_CD, (String)outMsg.get(EAC0231B010CBSMsg1List.SHUK_PRC_KMK_CD));
					waribiki.put(EAC0231B010CBSMsg1List.WRIB_YUSEN_JUN, (String)outMsg.get(EAC0231B010CBSMsg1List.WRIB_YUSEN_JUN));
					waribiki.put(WRIB_PRC, String.valueOf(0));
					waribiki.put(EKK0711B001CBSMsg1List.WRIB_SVC_CD, msg.get(EKK0711B001CBSMsg1List.WRIB_SVC_CD));
					waribiki.put(EKK0711B001CBSMsg1List.PCRS_CD, wribPcrsCd);
					waribiki.put(EKK0711B001CBSMsg1List.WRIB_SVC_TANKA_NO, wribSvcTnkNo);

					waribikiLst.add(waribiki);
					break;
				}
			}
		}

		// 割引対象情報集計
		Map<List<String>, Map<String, String>> shukeiMap = new HashMap<List<String>, Map<String, String>>();
		for (Map<String, String> waribiki : waribikiLst)
		{
			List<String> key = new ArrayList<String>();

			key.add(waribiki.get(EAC0231B010CBSMsg1List.PRC_SVC_CD));
			key.add(waribiki.get(EAC0231B010CBSMsg1List.WRIB_CTRL_SKBT_CD));
			key.add(waribiki.get(EAC0231B010CBSMsg1List.WRIB_SHUK_CD));

			if (shukeiMap.containsKey(key))
			{
				// 集計情報に存在する場合はまとめる。
				BigDecimal shukeiPrc = new BigDecimal(shukeiMap.get(key).get(WRIB_PRC));
				BigDecimal waribikiPrc = new BigDecimal(waribiki.get(WRIB_PRC));
				BigDecimal plus = shukeiPrc.add(waribikiPrc);
				shukeiMap.get(key).put(WRIB_PRC, plus.toString());
			}
			else
			{
				// 集計情報に存在しない場合はそのまま格納する。
				shukeiMap.put(key, waribiki);
			}
		}

		// 割引計算
		for (Map<String, String> shukei : shukeiMap.values())
		{
			// ●割引料金＜料金シミュレーション＞一覧照会
			// ユーザデータ初期化
			initData(param, fixedText, IN_LIST_EAC0251B010);
			// 上りマッピング
			setEAC0251B010(param, fixedText, shukei);
			//検索エラーなし設定
			ignoreSearchError(param, fixedText);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMP_ID_EAC0251B010, TEMP_ID_DTL_EAC0251B010, IN_LIST_EAC0251B010, ERR_EAC0251B010);
			// 下りマッピング
			List<HashMap> eAC0251B010List = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EAC0251B010), TEMP_ID_DTL_EAC0251B010);

			if(eAC0251B010List == null || eAC0251B010List.size() == 0)
			{
				continue;
			}

			HashMap outMsg = eAC0251B010List.get(0);

			BigDecimal wariPrc = BigDecimal.ZERO;
			BigDecimal wribValue = new BigDecimal((String)outMsg.get(EAC0251B010CBSMsg1List.WRIB_VALUE));
			BigDecimal prc = new BigDecimal(shukei.get(WRIB_PRC));

			// 割引計算方法コード
			String wribCalcWayCd = (String)outMsg.get(EAC0251B010CBSMsg1List.WRIB_CALC_WAY_CD);
			if (JACStrConst.WRIB_CALC_WAY_CKAN_CKAN.equals(wribCalcWayCd)
					|| JACStrConst.WRIB_CALC_WAY_CKAN_NEBIKI.equals(wribCalcWayCd))
			{
				// 置換割引
				if (wribValue.compareTo(prc) < 0)
				{
					wariPrc = prc.subtract(wribValue);
					wariPrc = wariPrc.negate();
				}
			}
			else if (JACStrConst.WRIB_CALC_WAY_AMNT_CKAN.equals(wribCalcWayCd)
					|| JACStrConst.WRIB_CALC_WAY_AMNT_NEBIKI.equals(wribCalcWayCd))
			{
				// 金額割引
				if (wribValue.compareTo(prc) >= 0)
				{
					wariPrc = prc;
				}
				else
				{
					wariPrc = wribValue;
				}
			}
			else if (JACStrConst.WRIB_CALC_WAY_RT_CKAN.equals(wribCalcWayCd)
					|| JACStrConst.WRIB_CALC_WAY_RT_NEBIKI.equals(wribCalcWayCd))
			{
				// 率割引
				wariPrc = prc.multiply(wribValue).divide(new BigDecimal(100));
			}

			wariPrc = JACCommonUtil.round(JACStrConst.ROUND_DOWN, wariPrc, 0);

			Map<String, String> usePrc = new HashMap<String, String>();
			usePrc.put(WRIB_PRC, wariPrc.toString());
			resultList.add(usePrc);
		}

		// ここで1つの割引金額が取得できている想定
		if(resultList != null && resultList.size() > 0)
		{
			// 割引金額を設定
			Map<String, String> usePrc = (Map<String, String>)resultList.get(0);
			inMap.put(SET_WRIB_PRC, usePrc.get(WRIB_PRC));
		}
		else
		{
			// 取得できない場合は「0」を設定
			inMap.put(SET_WRIB_PRC, String.valueOf(0));
		}
	}

	/**
	 * 割引料金計算処理です。
	 * 
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @throws Exception 
	 */
	private void getCalcPrc(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// リクエストパラメータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ●料金プラン固定単価（オプション申込料金）一覧照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_LIST_EKK0601B001);
		// 上りマッピング
		setEKK0601B001(param, fixedText);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMP_ID_EKK0601B001, TEMP_ID_DTL_EKK0601B001, IN_LIST_EKK0601B001, ERR_EKK0601B001);
		// 下りマッピング
		List<HashMap> eKK0601B001List = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0601B001), TEMP_ID_DTL_EKK0601B001);

		if(eKK0601B001List == null || eKK0601B001List.size() == 0)
		{
			return;
		}

		HashMap priceMap =
				getTemplateListMap(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0601B001), TEMP_ID_DTL_EKK0601B001, 0);

		// インターネットサギウォールの料金を取得
		String iswPrc = (String)priceMap.get(EKK0601B001CBSMsg1List.PPLAN_KOTEI_AMNT);
		if(JFUBPCommon.isNull(iswPrc))
		{
			iswPrc = String.valueOf(0);
		}
		// 割引金額を取得
		String wribPrc = (String)inMap.get(SET_WRIB_PRC);

		// セット割適用後の金額を取得
		int setWribPrc = 0;

		int iswPrcInt = Integer.parseInt(iswPrc);
		int wribPrcInt = Integer.parseInt(wribPrc);

		if(wribPrcInt == 0)
		{
			// 割引金額が0の場合：インターネットサギウォールの金額を設定
			setWribPrc = iswPrcInt;
		}
		else if(wribPrcInt > 0)
		{
			// 割引金額が0より大きい場合：インターネットサギウォールの金額 - 割引金額を設定
			setWribPrc = iswPrcInt - wribPrcInt;
		}
		else
		{
			// 割引金額が0より小さい場合：インターネットサギウォールの金額 + 割引金額を設定
			setWribPrc = iswPrcInt + wribPrcInt;
		}

		if(setWribPrc < 0)
		{
			// セット割適用後の金額が0より小さい場合は0を設定する。
			setWribPrc = 0;
		}

		// 計算結果を設定
		inMap.put(ISW_PRC, String.valueOf(iswPrcInt));
		inMap.put(ISW_WRIB_PRC, String.valueOf(setWribPrc));
	}

	/**
	 * 料金系サービスIF実行前処理です。
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param funcCode 機能コード
	 * @throws Exception
	 */
	private void acIfInit(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String funcCode) throws Exception
	{
		// リクエストパラメータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 料金用システムコードの取得
		inMap.put(AC_SYS_CD, getSysParam(handle, param, fixedText,
				JACStrConst.SYSPARA_SYSTEM_CD, JACStrConst.SYSTEM_CD_PRC_SIMULATION));
	}

	/**
	 * システムパラメータ取得処理です。
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param bunruiId システムパラメータ分類コード
	 * @param paramId システムパラメータＩＤ
	 * @return システムパラメータ設定値
	 * @throws Exception 
	 */
	private String getSysParam(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String bunruiId, String paramId) throws Exception
	{
		// リクエストパラメータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		String result = JFUStrConst.EMPTY;

		// ●システムパラメータ管理一意照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_LIST_EZM0311A010);
		// 上りマッピング
		setEZM0311A010(param, fixedText, bunruiId, paramId);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMP_ID_EZM0311A010, TEMP_ID_DTL_EZM0311A010, IN_LIST_EZM0311A010, ERR_EZM0311A010);
		// 下りマッピング
		List<HashMap> eZM0311A010List = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EZM0311A010), TEMP_ID_DTL_EZM0311A010);

		if(eZM0311A010List != null && eZM0311A010List.size() > 0)
		{
			// 一意照会であるため、0番目を取得。
			HashMap eZM0311A010Map = eZM0311A010List.get(0);
			result = (String)eZM0311A010Map.get(EZM0311A010CBSMsg1List.SYS_PARAM_SETTE_VALUE_1);
		}

		return result;
	}

	/**
	 * 割引サービス単価一覧照会（割引サービスコード）の上りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @throws RequestParameterException
	 */
	private void setEKK0711B001(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
		// ＫＥＹ＿割引サービスコード
		inMap.put(EKK0711B001CBSMsg.KEY_WRIB_SVC_CD, JFUStrConst.KK0841_WRIB_SVC_CD_SECUPA);
	}

	/**
	 * システムパラメータ管理一意照会の上りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @param bunruiId 分類ID
	 * @param paramId パラメータID
	 * @throws RequestParameterException
	 */
	private void setEZM0311A010(IRequestParameterReadWrite param, String fixedText, String bunruiId, String paramId)
		throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
		// ＫＥＹ＿システムパラメータ分類コード
		inMap.put(EZM0311A010CBSMsg.KEY_SYS_PARAM_BUNRUI_CD, bunruiId);
		// ＫＥＹ＿システムパラメータＩＤ
		inMap.put(EZM0311A010CBSMsg.KEY_SYS_PARAM_ID, paramId);
	}

	/**
	 * 割引集計＜料金シミュレーション＞一覧照会の上りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @param prcSvcCd 料金サービスコード
	 * @throws RequestParameterException
	 */
	private void setEAC0231B010(IRequestParameterReadWrite param, String fixedText, String prcSvcCd) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
		// ＫＥＹ＿システムコード
		inMap.put(EAC0231B010CBSMsg.KEY_SYS_CD, inMap.get(AC_SYS_CD));
		// ＫＥＹ＿料金サービスコード
		inMap.put(EAC0231B010CBSMsg.KEY_PRC_SVC_CD, prcSvcCd);
	}

	/**
	 * 割引料金＜料金シミュレーション＞一覧照会の上りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @param shukeiMap 集計マップ
	 * @throws RequestParameterException
	 */
	private void setEAC0251B010(IRequestParameterReadWrite param, String fixedText, Map shukeiMap) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
		// ＫＥＹ＿システムコード
		inMap.put(EAC0251B010CBSMsg.KEY_SYS_CD, inMap.get(AC_SYS_CD));
		// ＫＥＹ＿料金サービスコード
		inMap.put(EAC0251B010CBSMsg.KEY_PRC_SVC_CD, shukeiMap.get(EAC0231B010CBSMsg1List.PRC_SVC_CD));
		// ＫＥＹ＿割引集計コード
		inMap.put(EAC0251B010CBSMsg.KEY_WRIB_SHUK_CD, shukeiMap.get(EAC0231B010CBSMsg1List.WRIB_SHUK_CD));
	}

	/**
	 * 割引料金＜料金シミュレーション＞一覧照会の上りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @throws RequestParameterException
	 */
	private void setEKK0601B001(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
		// ＫＥＹ＿料金コースコード
		inMap.put(EKK0601B001CBSMsg.KEY_PCRS_CD, JFUStrConst.CD00134_BE2);
		// ＫＥＹ＿料金プランコード
		inMap.put(EKK0601B001CBSMsg.KEY_PPLAN_CD, JFUStrConst.CD00565_PBE201);
		// 最大検索件数
		inMap.put(EKK0601B001CBSMsg.MAX_SEARCH_NUM, JFUStrConst.MAX_SEARCH_NUM);
	}
}
