/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JCKSearchKyokyuChtnTokutNoCC
 *   ソースファイル名：JCKSearchKyokyuChtnTokutNoCC.java
 *   作成者          ：FJ
 *   日付            ：2015年05月28日
 *＜機能概要＞
 *   供給地点特定番号検索を実施する。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v16.00.00   2015/05/28  FJ) 酒井    ANK-2480-00-00 新規作成
 *   v41.00.00   2018/03/14  FJ) 中原    OM-2019-0000247 eo電気契約一意照(KKIFE260)で異常なタイムアウト
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.ejb.cbs.cbsmsg.ECKA9030001CBSMsg;

public class JCKSearchKyokyuChtnTokutNoCC extends JCKCommonCC {
	

	/** 供給地点特定番号検索マップ **/
	private static final String CKSV000205CC = "CKSV000205CC";
	
	/** eo電気契約一覧照会依頼 */
	private static final String ECKA9030001 = "ECKA9030001";
	
	/** ＫＥＹ＿供給地点特定番号 */
	private static final String KEY_KYKYCHTN_TKT_NO = "key_kykychtn_tkt_no";
	
	/** 供給地点特定番号明細 **/
	private static final String ECKA9030001CBSMSG1_LIST = "ECKA9030001CBSMsg1List";

	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>グローバルIPアドレス情報を登録する.<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param handle    セッションハンドル
	 * @param param     リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable 
	 */
	public IRequestParameterReadWrite execute(SessionHandle handle,
												IRequestParameterReadWrite param,
												String fixedText) throws Throwable {
		printlnEjbLog("execute start");
		
		/**
		 * 初期処理
		 */
		initSetUp(handle, param, fixedText);
		
		/**
		 * 入力データ設定
		 */
		setWorkParamHissu(KEY_KYKYCHTN_TKT_NO);	// ＫＥＹ＿供給地点特定番号
		
		/**
		 * eo電気契約一覧照会依頼
		 */
		this.ccWorkMap.put(
				ECKA9030001CBSMSG1_LIST, 
				callECKA9030001(FUNC_CD_1, (String) this.ccWorkMap.get(KEY_KYKYCHTN_TKT_NO)));
		
		/**
		 * 出力データ設定
		 */
		HashMap<String, Object> outMap = new HashMap<String, Object>();
		param.setData(CKSV000205CC, outMap);
		outMap.put(KEY_KYKYCHTN_TKT_NO, this.ccWorkMap.get(KEY_KYKYCHTN_TKT_NO));			// ＫＥＹ＿供給地点特定番号
		outMap.put(ECKA9030001CBSMSG1_LIST, this.ccWorkMap.get(ECKA9030001CBSMSG1_LIST));	// 供給地点特定番号明細
		
		printlnEjbLog("execute end");
		return param;
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>eo電気契約一覧照会依頼サービスIFを呼び出す<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param funcCd        機能コード
	 * @param kykychtnTktNo 供給地点特定番号
	 * @return
	 * @throws Throwable
	 */
	private List<HashMap<String, Object>> callECKA9030001(String funcCd, String kykychtnTktNo) throws Throwable {
		printlnEjbLog("callECKA9030001 start");
		
		/**
		 * 上りマッピング処理
		 */
		// サービスインターフェイスの作成（ECKA9030001_eo電気契約一覧照会依頼）
		HashMap<String, Object> inMap = createSCInputData();
		CAANMsg[] templates = new CAANMsg[1];
		inMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		templates[0] = createTemplate(
							new CAANMsg(ECKA9030001CBSMsg.class.getName()),
							new ECKA9030001CBSMsg().getContents(), 
							ECKA9030001,
							funcCd);
		
		// 供給地点特定番号
		templates[0].set(ECKA9030001CBSMsg.KEY_KYKYCHTN_TKT_NO, kykychtnTktNo);

		printlnEjbLog("inMap=" + inMap.toString());
		printlnEjbLog("handle=" + this.handle.toString());

		/**
		 * サービスインターフェイスの実行
		 */
		// SC呼び出しクラス(com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker)を使用して、サービスインターフェイスを実行する。
		Map<?, ?> result = this.scCall.run(inMap, this.handle);
		
		// エラー情報の設定
		this.param = editResultRP(result, this.param, ECKA9030001);
		// サービスIFの処理結果判定
		// OM-2019-0000247 DEL START
		//checkExecutionResult(result);
		// OM-2019-0000247 DEL END

		/**
		 * 下りマッピング処理
		 */
		// 実行結果を取得
		CAANMsg template = getRsltList(result);
		
		// SYSIDを集約してリスト形式で返却
		CAANMsg[] outTemplate = (CAANMsg[])template.getObject(ECKA9030001CBSMsg.ECKA9030001CBSMSG1LIST);
		LinkedHashSet<String> sysidList = new LinkedHashSet<String>();
		
		if(outTemplate != null && outTemplate.length > 0){	
			for(CAANMsg msg : outTemplate){
				sysidList.add((String)msg.getString("sysid"));
			}
		}
		
		List<HashMap<String, Object>> ecka9030001cbsmsg1list = new ArrayList<HashMap<String, Object>>();
		for(String sysid : sysidList){
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put("sysid", sysid);
			ecka9030001cbsmsg1list.add(map);
		}
		
		printlnEjbLog("callECKA9030001 end");
		return ecka9030001cbsmsg1list;
	}

}
