/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUBaseEoElecSvcKeiShokaiCC
*   ソースファイル名：JFUBaseEoElecSvcKeiShokaiCC.java
*   作成者          ：富士通
*   日付            ：2015年05月19日
*＜機能概要＞
*   eo電気サービス契約一覧照会基底コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*  v16.0.0     2015/05/19   FJ)横山    【ANK-2480-00-00】新電力対応により新規作成
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.text.ParseException;
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.custom.constant.JFUSearchSvKeiListConstCC;
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.JFUStrConst;
import eo.common.constant.JPCModelConstant;

import eo.ejb.cbs.cbsmsg.EKK0081B519CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2961B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2961B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EAC0401A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;

/**
 * eo電気のサービス契約一覧照会明細を取得する。
 * <br>
 * @author 富士通
 */

public class JFUBaseEoElecSvcKeiShokaiCC extends JFUBaseCC
{
	/* ===== パラメータ ===== */
	/** サービス契約グループ設定番号 */
	private static final String SVKEI_GRP_SETTE_NO = "svkei_grp_sette_no";

	/* ===== サービス契約グループ設定一覧照会 ===== */
	/** サービス契約番号 */
	private static final String SVC_KEI_NO = "svc_kei_no";
	/** サービス契約グループ種別コード */
	private static final String SVKEI_GRP_SBT_CD = "svkei_grp_sbt_cd";

	/** テンプレートID(サービス契約グループ設定一覧照会) */
	private static final String TEMPLATE_ID_SVC_KEI_GROUP = "EKK2961B002";

	/** テンプレートID(サービス契約グループ設定一覧照会.明細) */
	private static final String TEMPLATE_ID_SVC_KEI_GROUP_DTL = EKK2961B002CBSMsg.EKK2961B002CBSMSG1LIST;

	/** IN項目リスト(サービス契約グループ設定一覧照会) */
	private static final List<String> IN_COLUMN_ELEC_SVC = Arrays.asList(EKK2961B002CBSMsg.KEY_SVKEI_GRP_SKBT_NO, EKK2961B002CBSMsg.KEY_SVKEI_GRP_SBT_CD);

	/** SC実行結果取得キー(サービス契約グループ設定一意照会) */
	private static final String TEMP_TEMP_KEY_SVC_KEI_GRP_STK = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_SVC_KEI_GROUP + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ===== サービス契約一意照会 ===== */
	/** サービス契約ステータス */
	private static final String SVC_KEI_STAT = "svc_kei_stat";
	/** サービスコード */
	private static final String SVC_CD = "svc_cd";
	/** サービス名 */
	private static final String SVC_CD_NM = "svc_cd_nm";
	/** 整理番号 */
	private static final String SEIRI_NO = "seiri_no";
	/** 料金グループコード */
	private static final String PRC_GRP_CD = "prc_grp_cd";
	/** 料金グループ名 */
	private static final String PRC_GRP_CD_NM = "prc_grp_cd_nm";
	/** 料金コースコード */
	private static final String PCRS_CD = "pcrs_cd";
	/** 料金コース名 */
	private static final String PCRS_CD_NM = "pcrs_cd_nm";
	/** 料金プランコード */
	private static final String PPLAN_CD = "pplan_cd";
	/** 料金プラン名 */
	private static final String PPLAN_CD_NM = "pplan_cd_nm";

	/** テンプレートID(サービス契約一意照会) */
	private static final String TEMPLATE_ID_SVC_KEI = "EKK0081A010";

	/** テンプレートID(サービス契約一意照会.明細) */
	private static final String TEMPLATE_ID_SVC_KEI_DTL = EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST;

	/** IN項目リスト(サービス契約一意照会) */
	private static final List<String> IN_COLUMN_SVC = Arrays.asList(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, EKK0081A010CBSMsg.KEY_RSV_APLY_YMD);

	/** SC実行結果取得キー(サービス契約一意照会) */
	private static final String TEMP_TEMP_KEY_SVC_KEI_STK = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_SVC_KEI + TEMP_TEMPLATE_PRIFIX_SEP;

	/**
	 * eo電気サービス契約一覧照会実行処理です。
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	protected HashMap<String, String> eoElecSvcKeiShokai(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// 結果マップ
		HashMap<String, String> resultMap = new HashMap<String, String>();

		// -----------------------------------------------------
		// ■リクエストパラメータ取得
		// -----------------------------------------------------
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		// サービス契約番号に、nullを設定
		resultMap.put(SVC_KEI_NO, null);

		// サービス契約グループ設定番号
		String svKeiGrpNo = (String)inMap.get(SVKEI_GRP_SETTE_NO);

		// 回線内訳番号が無い場合は処理を行わない
		if(svKeiGrpNo != null && !JFUStrConst.EMPTY.equals(svKeiGrpNo))
		{
			// -----------------------------------------------------
			// ■サービス契約グループ設定一意照会
			// -----------------------------------------------------
			// ユーザデータ初期化
			initData(param, fixedText, IN_COLUMN_ELEC_SVC);
			// 上りマッピング
			setInMapSvcKeiGrpSette(param, fixedText, svKeiGrpNo);
			//検索エラーなし設定
			ignoreSearchError(param, fixedText);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_SVC_KEI_GROUP, TEMPLATE_ID_SVC_KEI_GROUP_DTL, IN_COLUMN_ELEC_SVC, BLANK);

			// 明細取得
			List<HashMap> eKK2961B002List
				= getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_SVC_KEI_GRP_STK), TEMPLATE_ID_SVC_KEI_GROUP_DTL);

			if(eKK2961B002List == null || eKK2961B002List.size() == 0)
			{
				// 明細が存在しない場合、nullを設定
				resultMap.put(SVC_KEI_NO, null);
			}
			else
			{
				for (int i = 0; i < eKK2961B002List.size(); i++)
				{
					HashMap<String, Object> eKK2961B002Map = (HashMap<String, Object>)eKK2961B002List.get(i);

					if(eKK2961B002Map == null || eKK2961B002Map.size() == 0)
					{
						// 明細マップが取得できていない場合、以降の処理を飛ばす
						continue;
					}

					// サービス契約グループ種別コード
					String svKeiGrpSbtCd = (String)eKK2961B002Map.get(EKK2961B002CBSMsg1List.SVKEI_GRP_SBT_CD);

					if(!JFUStrConst.CD01674_01.equals(svKeiGrpSbtCd))
					{
						// サービス契約グループ種別コードが「01:同一場所」以外の場合、以降の処理を飛ばす
						continue;
					}

					// サービス契約番号
					String svKeiNo = (String)eKK2961B002Map.get(EKK2961B002CBSMsg1List.SVC_KEI_NO);

					// -----------------------------------------------------
					// ■サービス契約一意照会
					// -----------------------------------------------------
					// ユーザデータ初期化
					initData(param, fixedText, IN_COLUMN_SVC);
					// 上りマッピング
					setInMapSvcKeiUniqueSearch(param, fixedText, svKeiNo);

					// サービスIF実行
					executeSC(handle, param, fixedText, TEMPLATE_ID_SVC_KEI, TEMPLATE_ID_SVC_KEI_DTL, IN_COLUMN_SVC, BLANK);

					// 明細取得
					List<HashMap> eKK0081A010List
						= getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_SVC_KEI_STK), TEMPLATE_ID_SVC_KEI_DTL);

					if(eKK0081A010List == null || eKK0081A010List.size() == 0)
					{
						// 明細が存在しない場合、以降の処理を飛ばす
						continue;
					}

					// サービス契約ステータス
					String svcKeiStat =
						getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_SVC_KEI_STK), TEMPLATE_ID_SVC_KEI_DTL,
									EKK0081A010CBSMsg1List.SVC_KEI_STAT, 0);

					if((JFUStrConst.CD00037_910.equals(svcKeiStat)) || (JFUStrConst.CD00037_920.equals(svcKeiStat)))
					{
					// サービス契約ステータスが"910","920"の場合、以降の処理を飛ばす
						continue;
					}

					//サービスコード
					String svcKeiCd = 
						getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_SVC_KEI_STK), TEMPLATE_ID_SVC_KEI_DTL,
								EKK0081A010CBSMsg1List.SVC_CD, 0);


					if(JFUStrConst.CD00130_05.equals(svcKeiCd))
					{
						// サービスコードが"05"の場合、返却リストに追加する
						// サービス契約番号
						resultMap.put(SVC_KEI_NO, svKeiNo);
						// サービス契約ステータス
						resultMap.put(SVC_KEI_STAT, svcKeiStat);
						//サービスコード
						resultMap.put(SVC_CD, svcKeiCd);
						// サービス名
						String svcCdNm = 
							getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_SVC_KEI_STK), TEMPLATE_ID_SVC_KEI_DTL,
									EKK0081A010CBSMsg1List.SVC_CD_NM, 0);
						resultMap.put(SVC_CD_NM, svcCdNm);
						// 整理番号
						String seiriNo = 
							getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_SVC_KEI_STK), TEMPLATE_ID_SVC_KEI_DTL,
									EKK0081A010CBSMsg1List.SEIRI_NO, 0);
						resultMap.put(SEIRI_NO, seiriNo);
						// 料金グループコード
						String prcGrpCd = 
							getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_SVC_KEI_STK), TEMPLATE_ID_SVC_KEI_DTL,
									EKK0081A010CBSMsg1List.PRC_GRP_CD, 0);
						resultMap.put(PRC_GRP_CD, prcGrpCd);
						// 料金グループ名
						String prcGrpCdNm = 
							getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_SVC_KEI_STK), TEMPLATE_ID_SVC_KEI_DTL,
									EKK0081A010CBSMsg1List.PRC_GRP_CD_NM, 0);
						resultMap.put(PRC_GRP_CD_NM, prcGrpCdNm);
						// 料金コースコード
						String pcrsCd = 
							getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_SVC_KEI_STK), TEMPLATE_ID_SVC_KEI_DTL,
									EKK0081A010CBSMsg1List.PCRS_CD, 0);
						resultMap.put(PCRS_CD, pcrsCd);
						// 料金コース名
						String pcrsCdNm = 
							getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_SVC_KEI_STK), TEMPLATE_ID_SVC_KEI_DTL,
									EKK0081A010CBSMsg1List.PCRS_CD_NM, 0);
						resultMap.put(PCRS_CD_NM, pcrsCdNm);
						// 料金プランコード
						String pplanCd = 
							getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_SVC_KEI_STK), TEMPLATE_ID_SVC_KEI_DTL,
									EKK0081A010CBSMsg1List.PPLAN_CD, 0);
						resultMap.put(PPLAN_CD, pplanCd);
						// 料金プラン名
						String pplanCdNm = 
							getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_SVC_KEI_STK), TEMPLATE_ID_SVC_KEI_DTL,
									EKK0081A010CBSMsg1List.PPLAN_CD_NM, 0);
						resultMap.put(PPLAN_CD_NM, pplanCdNm);
					}
				}
			}
		}

		//サービス契約番号がnullの場合、他の全項目にnullを設定
		if(resultMap.get(SVC_KEI_NO) == null)
		{
			resultMap.put(SVC_KEI_STAT, null);
			resultMap.put(SVC_CD, null);
			resultMap.put(SVC_CD_NM, null);
			resultMap.put(SEIRI_NO, null);
			resultMap.put(PRC_GRP_CD, null);
			resultMap.put(PRC_GRP_CD_NM, null);
			resultMap.put(PCRS_CD, null);
			resultMap.put(PCRS_CD_NM, null);
			resultMap.put(PPLAN_CD, null);
			resultMap.put(PPLAN_CD_NM, null);
		}

		//取得結果をユーザデータに設定する
		return resultMap;
	}


	/**
	 * 上りマッピング項目設定(サービス契約グループ設定一意照会)処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svKeiGrpNo サービス契約グループ設定番号
	 * @throws RequestParameterException
	 * @throws ParseException 
	 */
	private void setInMapSvcKeiGrpSette(IRequestParameterReadWrite param, String fixedText, String svKeiGrpNo) throws RequestParameterException,
			ParseException
	{
		// 機能コード設定(1:サービス契約グループ設定一覧照会)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// リクエストパラメータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		// ＫＥＹ＿サービス契約グループ識別番号
		inMap.put(EKK2961B002CBSMsg.KEY_SVKEI_GRP_SKBT_NO, svKeiGrpNo);
		// ＫＥＹ＿サービス契約グループ種別コード（固定値"01"同一利用場所)
		inMap.put(EKK2961B002CBSMsg.KEY_SVKEI_GRP_SBT_CD, JFUStrConst.CD01674_01);
	}

	/**
	 * 上りマッピング項目設定(サービス契約一意照会)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @throws RequestParameterException
	 */
	private void setInMapSvcKeiUniqueSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// 機能コード設定(2:カレント)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		// ＫＥＹ＿予約適用年月日
		inMap.put(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));

	}

	/**
	 * チェック処理です。
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}
}
