/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUOpchChfkCC
*   ソースファイル名：JFUOpchChfkCC.java
*   作成者          ：富士通
*   日付            ：2012年03月13日
*＜機能概要＞
*   オプションチャンネル重複一覧照会コンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v3.00.00    2012/03/13    FJ）大野    新規作成:【ANK-0281-01-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 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.ejb.cbs.cbsmsg.EKK0821B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0821B002CBSMsg1List;

/**
 * オプションチャンネル重複一覧照会コンポーネント部品です。
 * <br>
 * @author 富士通
 */

public class JFUOpchChfkCC extends JFUBaseCC
{

	/** 内訳料金コースコードリスト */
	private static final String DATE_HASHMAP_CHILDMAP_01 = "cclist_ucwk_pcrs_cd";
	/** オプションチャンネル重複リスト */
	private static final String DATE_HASHMAP_CHILDMAP_02 = "opch_chfk_list";
	/**  親契約識別コード */
	private static final String SKBT_CD = "skbt_cd";
	/**  サービス契約番号 */
	private static final String SVC_KEI_NO = "kk0081_svc_kei_no";
	/**  サービス契約内訳番号 */
	private static final String SVC_KEI_UCWK_NO = "svc_kei_ucwk_no";
	/**  料金コースコード */
	private static final String KEI_PCRS_CD = "kei_pcrs_cd";
	/**  料金コースコード */
	private static final String PCRS_CD = "pcrs_cd";
	/**  契約台数 */
	private static final String KEY_KEI_DAI = "kei_dai";
	/**  オプションサービスコード */
	private static final String KEY_OP_SVC_CD = "op_svc_cd";
	/**  オプションサービス名 */
	private static final String KEY_OP_SVC_NM = "op_svc_nm";

	/* ■□ オプションチャンネル重複一覧照会SC ■□ */
	/** テンプレートID(オプションチャンネル重複一覧照会) */
	private static final String TEMPLATE_ID_OPCH_CHFK = "EKK0821B002";

	/** テンプレートID(オプションチャンネル重複リスト) */
	private static final String TEMPLATE_ID_OPCH_CHFK_LIST = EKK0821B002CBSMsg.EKK0821B002CBSMSG1LIST;

	/** IN項目リスト(オプションチャンネル重複一覧照会) */
	private static final List<String> IN_COLUMN_LIST_OPCH_CHFK =
			Arrays.asList(EKK0821B002CBSMsg.KEY_OYA_KEI_SKBT_CD, EKK0821B002CBSMsg.KEY_SVC_KEI_NO, EKK0821B002CBSMsg.KEY_SVC_KEI_UCWK_NO,
					EKK0821B002CBSMsg.KEY_PCRS_CD_CUR, EKK0821B002CBSMsg.KEY_PCRS_CD_CHG);

	/** SC実行結果取得キー(オプションチャンネル重複一覧照会) */
	private static final String TEMP_TEMP_KEY_MSKM_NAIYO_SHO = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_OPCH_CHFK + TEMP_TEMPLATE_PRIFIX_SEP;

	/** オプションチャンネル重複リスト */


	/**
	 * eo光テレビ登録(コース変更)実行処理です。
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	public IRequestParameterReadWrite opchChfk(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{

		ArrayList<HashMap<String, Object>> inList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> inMap = (HashMap<String, Object>)(param.getData(fixedText));
		ArrayList<Object> workLst = (ArrayList<Object>)inMap.get(DATE_HASHMAP_CHILDMAP_01);
		
		if(!inMap.get(SKBT_CD).equals(JFUStrConst.CD00804_01))
		{
			int tvCnt = workLst.size();
			for (int i = 0; i < tvCnt; i++)
			{
				// ●オプションチャンネル重複一覧照会
				// 上りマッピング
				setInMapPplanChg(param, fixedText, i);
				//検索エラーなし設定
				ignoreSearchError(param, fixedText);
				// サービスIF実行
				executeSC(handle, param, fixedText, TEMPLATE_ID_OPCH_CHFK, TEMPLATE_ID_OPCH_CHFK_LIST, IN_COLUMN_LIST_OPCH_CHFK, BLANK);
				// 下りマッピング
				setOutMapPplanChg(param, fixedText, i, inList);
			}
			inMap.put(DATE_HASHMAP_CHILDMAP_02, inList);

		}
		else
		{
			inMap.put(DATE_HASHMAP_CHILDMAP_02, inList);
			
		}
	return param;
	}

	/**
	 * 上りマッピング項目設定(オプションチャンネル重複一覧照会)処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param cnt カウント
	 * @throws RequestParameterException
	 * @throws ParseException 
	 */
	private void setInMapPplanChg(IRequestParameterReadWrite param, String fixedText, int cnt) throws RequestParameterException, ParseException
	{
		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		ArrayList<Object> inMapLst = (ArrayList<Object>)inMap.get(DATE_HASHMAP_CHILDMAP_01);
		HashMap<String, Object> workMapLst = (HashMap<String, Object>)inMapLst.get(cnt);

		// 親契約識別コード
		inMap.put(EKK0821B002CBSMsg.KEY_OYA_KEI_SKBT_CD, inMap.get(SKBT_CD));
		// サービス契約番号
		inMap.put(EKK0821B002CBSMsg.KEY_SVC_KEI_NO, inMap.get(SVC_KEI_NO));
		// サービス契約内訳番号
		inMap.put(EKK0821B002CBSMsg.KEY_SVC_KEI_UCWK_NO, workMapLst.get(SVC_KEI_UCWK_NO));
		// 契約中料金コースコード
		inMap.put(EKK0821B002CBSMsg.KEY_PCRS_CD_CUR, workMapLst.get(KEI_PCRS_CD));
		// 選択料金コースコード
		inMap.put(EKK0821B002CBSMsg.KEY_PCRS_CD_CHG, workMapLst.get(PCRS_CD));
	}

	/**
	 * 下りマッピング項目設定(オプションチャンネル重複一覧照会)処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param cnt カウント
	 * @param list オプション重複リスト
	 * @throws RequestParameterException
	 * @throws ParseException 
	 */
	private ArrayList<HashMap<String, Object>> setOutMapPplanChg(IRequestParameterReadWrite param, String fixedText, int cnt, ArrayList<HashMap<String, Object>> list) throws RequestParameterException, ParseException
	{
		int templateNo = cnt + 1;
		List<HashMap> outList =
				getTemplateList((HashMap<String, Object>)param.getData(fixedText), TEMP_TEMP_KEY_MSKM_NAIYO_SHO + templateNo, TEMPLATE_ID_OPCH_CHFK_LIST);

		if (outList.size() > 0)
		{
			for (int i = 0; i < outList.size(); i++)
			{
				HashMap<String, Object> workMapLst = new HashMap<String, Object>();
				HashMap<String, Object> workList = (HashMap<String, Object>)outList.get(i);
				// 契約台数
				String cntstr = Integer.toString(cnt);
				workMapLst.put(KEY_KEI_DAI, cntstr);
				// オプションサービスコード
				workMapLst.put(KEY_OP_SVC_CD, workList.get(EKK0821B002CBSMsg1List.OP_SVC_CD));
				// オプションサービス名
				workMapLst.put(KEY_OP_SVC_NM, workList.get(EKK0821B002CBSMsg1List.OP_SVC_NM));

				list.add(workMapLst);
			}
		}return list;
	}

	/**
	 * チェック処理です。
	 * 
	 * <br>
	 * @param handle セッションハンドルo
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}
}
