/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JCNIspKssaiWayChgCC
*	ソースファイル名：JCNIspKssaiWayChgCC.java
*	作成者			：FJ
*	日付			：2024年12月11日
*＜機能概要＞
*	ISP決済方法変更の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v73.00.00	2024/12/11	FJ)謝		【ANK-4570-00-00】コンテンツ新規同時申込み時契約仕様見直し対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
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 com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.bp.x21.sc.exception.SCException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.ECNA0220001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECNA0220001CBSMsg1List;

/**
 * ISP決済方法変更の共通コンポーネントクラスです。
 * <br>
 * @author 富士通
 *
 */
public class JCNIspKssaiWayChgCC extends AbstractCommonComponent
{
	/**
	 * ISP決済方法変更を行う。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		String dataMapKey = fixedText;
		
		// ISP決済方法変更CCマップ
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		if (ccMsg == null)
		{
			return param;
		}
		String sysid = (String)ccMsg.get("sysid");
		String settlementWayId = (String)ccMsg.get("settlement_way_id");
		String updateId = (String)ccMsg.get("update_id");
		String updateName = (String)ccMsg.get("update_name");
		
		/***********************************************************/
		/** CCMG連携(ISP決済方法変更API)SCへの上りマッピング       */
		/***********************************************************/
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		param4serviceIf.put(ECNA0220001CBSMsg.SYSID, sysid);
		param4serviceIf.put(ECNA0220001CBSMsg.SETTLEMENT_WAY_ID, settlementWayId);
		param4serviceIf.put(ECNA0220001CBSMsg.UPDATE_ID, updateId);
		param4serviceIf.put(ECNA0220001CBSMsg.UPDATE_NAME, updateName);
		
		HashMap<String, Object> paramMap = JCKBPCommon.createScParamForSearch(param, ECNA0220001CBSMsg.class , param4serviceIf, JPCModelConstant.FUNC_CD_1);
		
		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		Map<?, ?> result = scCallRun(param, handle, paramMap);
		
		CAANMsg[] resultMap =(CAANMsg[]) result.get("templates");
		int status = resultMap[0].getInt(ECNA0220001CBSMsg.STATUS);
		CAANMsg[] ResultList = getResultMsgList(result, ECNA0220001CBSMsg.ECNA0220001CBSMSG1LIST);
		
		String errCd = "";
		if(ResultList != null && ResultList.length != 0)
		{
			errCd = ResultList[0].getString(ECNA0220001CBSMsg1List.ERR_CD);
		}
		if(0 != status)
		{
			ccMsg.put("err_cd", errCd);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
			return param;
		}
		
		return param;
	}
	
	/**
	 * SCを実行します。
	 * <br />
	 * SCの実行結果はリクエストパラメータのユーザデータにも設定される。(マップキー：#LCS_LAST_RESULT# )
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param paramMap パラメータマップ
	 * @return 実行結果
	 * @throws SCException
	 * @throws RequestParameterException
	 */
	public static Map<?, ?> scCallRun(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> paramMap) throws SCException,
			RequestParameterException
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		return result;
	}
	
	/**
	 * SCの返却情報からCAANMsgリストを取得する。
	 * @param result SCの返却情報
	 * @param listName リスト名
	 * @return CAANMsgリスト
	 */
	public static CAANMsg[] getResultMsgList(Map<?, ?> result, String listName)
	{
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = parentTemplate.getCAANMsgList(listName);
		if (templateArray == null)
		{
			templateArray = new CAANMsg[]{};
		}
		return templateArray;
	}
}