/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUEoTvSvcKeiShokaiCC
*   ソースファイル名：JFUEoTvSvcKeiShokaiCC.java
*   作成者          ：富士通
*   日付            ：2012年06月15日
*＜機能概要＞
*   eo光テレビサービス契約一覧照会(整理番号)コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00	    2012/06/15   FJ）大野    新規作成
*   v5.00       2013/02/14   FJ)瀧澤    【IT1-2013-0000277】静的変数の削除対応
*  v10.00       2014/07/14   FJ)谷本    【ANK-2135-00-00】BSオプションチャンネル「スターチャンネル」とのセット割検討
*  v12.00       2015/01/29   FJ)臼杵    【ANK-2358-00-00】【ＮＯ．１８３３】【スタchセット割】フロントにおけるコース変更抑止条件の変更対応
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.text.ParseException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

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.EKK0081B025CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B025CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0251B502CBSMsg1List;

/**
 * eo光テレビサービス契約一覧照会(整理番号)コモンコンポーネント部品です。
 * <br>
 * @author 富士通
 */

public class JFUEoTvSvcKeiShokaiCC extends JFUBaseCC
{
	/* ===== パラメータ ===== */
	/** 整理番号 */
	private static final String SEIRI_NO = "seiri_no";

	/* ===== eo光テレビサービス契約一覧照会 ===== */
	/** サービス契約番号 */
	private static final String SVC_KEI_NO_TV = "svc_kei_no_tv";
	/**  料金コースコード */
	private static final String TV_KEI_PCRS_CD = "tv_kei_pcrs_cd";
	/**  料金コースコード */
	private static final String TV_KEI_PRC_GRP_CD = "tv_prc_grp_cd";

	/* ■□ サービス契約一覧照会（整理番号） ■□ */
	/** テンプレートID(サービス契約一覧照会（整理番号）) */
	private static final String TEMPLATE_ID_SVC_KEI = "EKK0081B025";

	/** テンプレートID(サービス契約一覧照会（整理番号）明細) */
	private static final String TEMPLATE_ID_DTL = EKK0081B025CBSMsg.EKK0081B025CBSMSG1LIST;

	/** IN項目リスト(サービス契約一覧照会) */
	private static final List<String> IN_COLUMN_TV_SVC = Arrays.asList(EKK0081B025CBSMsg.KEY_SEIRI_NO);

	/** SC実行結果取得キー(サービス契約一覧照会) */
	private static final String TEMP_TEMP_KEY_SVC_KEI_STK = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_SVC_KEI + TEMP_TEMPLATE_PRIFIX_SEP + "1";

	/* ■□ テレビコース名表示切替部品呼出 ■□ */
	/** サービスメッセージ　テレビコース名表示切替コンポーネント部品 */
	private static final String TV_COURSE_DSP_SWCH = "TvCourseDspSwch";
	/** マップキー(サービス契約番号) */
	private static final String KEY_SVC_KEI_NO = "key_svc_kei_no";
	/** マップキー(サービス名称) */
	private static final String CHBF_SVC_NM = "chbf_svc_nm";
	/** マップキー料金プランコード （テレビコース名表示切替部品)  */
	private static final String CHBF_PPLN_CD = "chbf_pplan_cd";

	/**
	 * eo光テレビサービス契約一覧照会(整理番号)実行処理です。
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	public IRequestParameterReadWrite eoTvSvcKeiShokai(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// -----------------------------------------------------
		// ■リクエストパラメータ取得
		// -----------------------------------------------------
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		// 整理番号
		String seiriNo = (String)inMap.get(SEIRI_NO);

		// -----------------------------------------------------
		// ■eo光テレビサービス契約一覧照会(整理番号)
		// -----------------------------------------------------
		// 上りマッピング
		setInMapTvSvcKei(param, fixedText, seiriNo);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_SVC_KEI, TEMPLATE_ID_DTL, IN_COLUMN_TV_SVC, BLANK);
		// 下りマッピング
		setOutMapTvSvcKei(inMap);
		
		// ●テレビコース名表示切替部品呼出
		HashMap map = new HashMap();
		map.put(KEY_SVC_KEI_NO, inMap.get(SVC_KEI_NO_TV));
		param.setData(TV_COURSE_DSP_SWCH, map);
		JFUBPCommon.getTvCourseDspSwch(handle, param, TV_COURSE_DSP_SWCH);
		// サービス名称 テレビコース名表示切替用
		inMap.put(CHBF_SVC_NM, ((HashMap)param.getData(TV_COURSE_DSP_SWCH)).get(CHBF_SVC_NM));
		// サービス名称 テレビコース名表示切替用
		inMap.put(CHBF_PPLN_CD, ((HashMap)param.getData(TV_COURSE_DSP_SWCH)).get(CHBF_PPLN_CD));

		return param;
	}

	/**
	 * 上りマッピング項目設定(サービス契約一覧照会（整理番号）)処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param seiriNo 整理番号
	 * @throws RequestParameterException
	 * @throws ParseException 
	 */
	private void setInMapTvSvcKei(IRequestParameterReadWrite param, String fixedText, String seiriNo) throws RequestParameterException,
			ParseException
	{
		// 機能コード設定(1:サービス契約一覧照会（整理番号）)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// リクエストパラメータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		// ＫＥＹ＿整理番号
		inMap.put(EKK0081B025CBSMsg.KEY_SEIRI_NO, seiriNo);
	}

	/**

	/**
	 * 下りマッピング項目設定(サービス契約一覧照会（整理番号）)処理です。
	 * <br>
	 * @param inMap
	 * @throws RequestParameterException
	 * @throws ParseException
	 */
	private void setOutMapTvSvcKei(HashMap<String, Object> inMap) throws RequestParameterException, ParseException
	{
		// 料金グループコード"11"を設定
		inMap.put(TV_KEI_PRC_GRP_CD, JFUStrConst.CD00133_11);
		// サービス契約一覧照会（整理番号）明細
		for (HashMap<Object, Object> workMap : getTemplateList(inMap, TEMP_TEMP_KEY_SVC_KEI_STK, TEMPLATE_ID_DTL))
		{
			// 2013.09.12 サービス契約ステータス：910(解約済),920(キャンセル済)を除外する
			if(JFUStrConst.CD00037_910.equals(workMap.get(EKK0081B025CBSMsg1List.SVC_KEI_STAT)) ||
					JFUStrConst.CD00037_920.equals(workMap.get(EKK0081B025CBSMsg1List.SVC_KEI_STAT)))
			{
				continue;
			}

			// サービスコードが"03"（テレビサービス）の場合のみ下りマッピング
			if (JFUStrConst.CD00130_03.equals(workMap.get(EKK0081B025CBSMsg1List.SVC_CD)))
			{
				// サービス契約番号
				inMap.put(SVC_KEI_NO_TV, workMap.get(EKK0081B025CBSMsg1List.SVC_KEI_NO));
				// 料金コースコード
				inMap.put(TV_KEI_PCRS_CD, workMap.get(EKK0081B025CBSMsg1List.PCRS_CD));

				// 2013/04/17 KCN/再送信対応 >>>
				inMap.put(TV_KEI_PRC_GRP_CD, workMap.get(EKK0081B025CBSMsg1List.PRC_GRP_CD));
				// 2013/04/17 KCN/再送信対応 <<<E
				break;
			}
		}
	}

	/**
	 * チェック処理です。
	 * 
	 * <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;
	}
}
