/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JSCSV002601CC
*   ソースファイル名：JSCSV002601CC.java
*   作成者          ：富士通
*   日付            ：2011年10月04日
*＜機能概要＞
*   ＶＬＡＮ依頼受信法人を行います。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/10/04   FJ）前岡    新規作成
*
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.BPMLogManager;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
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.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.ICommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.common.x00.log.BasicLevel;
import com.fujitsu.futurity.common.x00.log.ILogger;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.ejb.cbs.cbsmsg.ESC0021D010CBSMsg;

/**
 *  電話用ＶＬＡＮサービスオーダ発行SC（法人）を実行する。
 * <BR>
 * @author 富士通
 */
public class JSCSV002601CC extends AbstractCommonComponent implements ICommonComponent
{

	/**
	 * 共通コンポーネント実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite executeMain(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		ILogger logger = BPMLogManager.getLogger(handle.getHandleID(), this.getClass());

		String returnCd = "0";		//リターンコード（0:正常終了、1:データなしエラー、9:システムエラー）
		Map userResult = new HashMap();
		

		//ＶＬＡＮ依頼受付法人データ取得
		Map<String, Object> ccParam = (Map<String, Object>)param.getData("SCSV002601CC");

		Map<Object, Object> paramTelVlanOrd = new HashMap<Object, Object>();
		
		//法人ｅｏ読替サービス契約番号
		paramTelVlanOrd.put(ESC0021D010CBSMsg.HJIN_EO_YKAE_SVKEI_NO, ccParam.get("hjin_eo_ykae_svkei_no"));
		//サービス契約番号へ法人ｅｏ読替サービス契約番号を設定
		paramTelVlanOrd.put(ESC0021D010CBSMsg.SVC_KEI_NO, ccParam.get("hjin_eo_ykae_svkei_no"));
		//要求元アプリ種別コード
		paramTelVlanOrd.put(ESC0021D010CBSMsg.YOKYU_MT_APL_SBT_CD, ccParam.get("yokyu_mt_apl_sbt_cd"));
		//ＶＬＡＮオーダコード
		paramTelVlanOrd.put(ESC0021D010CBSMsg.VLAN_ORDER_CD, ccParam.get("vlan_order_cd"));
		//要求種別コード
		paramTelVlanOrd.put(ESC0021D010CBSMsg.YOKYU_SBT_CD, ccParam.get("yokyu_sbt_cd"));
		//ＶＬＡＮサーバコード
		paramTelVlanOrd.put(ESC0021D010CBSMsg.VLAN_SERVER_CD, ccParam.get("vlan_server_cd"));
		//依頼時申込書番号
		paramTelVlanOrd.put(ESC0021D010CBSMsg.REQ_JI_MSKMSHO_NO, ccParam.get("req_ji_mskmsho_no"));
		//依頼時工事案件番号
		paramTelVlanOrd.put(ESC0021D010CBSMsg.REQ_JI_KJAK_NO, ccParam.get("req_ji_kjak_no"));
		//電話ＶＬＡＮ−ＩＤ
		//paramTelVlanOrd.put(ESC0021D010CBSMsg.TEL_VLAN_ID, ccParam.get("tel_vlan_id"));
		//ＢＡＳ−ホストＩＤ
		//paramTelVlanOrd.put(ESC0021D010CBSMsg.BAS_HOST_ID, ccParam.get("bas_host_id"));

		/***************************************************/
		/** 電話用ＶＬＡＮオーダ発行新規登録SC呼び出し処理 */
		/***************************************************/
		Map<?, ?> result = executeTelVlanOrder(handle, param, logger, paramTelVlanOrd);
		
		if (JSCTelSvcScParamHenshu.isSuccess(result))
		{
			//-----------------
			//出力データを取得
			//-----------------
			//電話用ＶＬＡＮオーダ番号
			userResult.put("tel_vlan_order_no", JSCTelSvcScParamHenshu.getResultString(result, ESC0021D010CBSMsg.TEL_VLAN_ORDER_NO));
			//電話用ＶＬＡＮオーダステータス
			userResult.put("tel_vlan_order_stat", JSCTelSvcScParamHenshu.getResultString(result, ESC0021D010CBSMsg.TEL_VLAN_ORDER_STAT));
			//電話用ＶＬＡＮオーダ受付年月日時分秒
			userResult.put("tel_vlan_order_uk_dtm", JSCTelSvcScParamHenshu.getResultString(result, ESC0021D010CBSMsg.TEL_VLAN_ORDER_UK_DTM));
			//ＳＯＤ業務連携ステータス
			userResult.put("sod_work_rnki_stat", JSCTelSvcScParamHenshu.getResultString(result, ESC0021D010CBSMsg.SOD_WORK_RNKI_STAT));
			//登録年月日時分秒
			userResult.put("add_dtm", JSCTelSvcScParamHenshu.getResultString(result, ESC0021D010CBSMsg.ADD_DTM));
			//登録オペレータアカウント
			userResult.put("add_opeacnt", JSCTelSvcScParamHenshu.getResultString(result, ESC0021D010CBSMsg.ADD_OPEACNT));
			//更新年月日時分秒
			userResult.put("upd_dtm", JSCTelSvcScParamHenshu.getResultString(result, ESC0021D010CBSMsg.UPD_DTM));
			//更新オペレータアカウント
			userResult.put("upd_opeacnt", JSCTelSvcScParamHenshu.getResultString(result, ESC0021D010CBSMsg.UPD_OPEACNT));
			//無効フラグ
			userResult.put("mkFlg", JSCTelSvcScParamHenshu.getResultString(result, ESC0021D010CBSMsg.MK_FLG));
		}
		else
		{
			returnCd = "1";
			logger.log(BasicLevel.ERROR, "ＶＬＡＮ依頼受信法人でエラーが発生しました。");
		}
	
		/***************************************************/
		/** 下りマッピング処理開始                         */
		/***************************************************/
		// 下りコントロールマップのセット
		JSCTelSvcScParamHenshu.setResultCtrlData(param, result, "SCSV002601CC");

		// 下りユーザデータマップのセット
		// (処理結果はユーザ情報のリターンコードで通知する)
		JSCTelSvcScParamHenshu.setResultUserData(param, "SCSV002601CC", userResult);

		logger.log(BasicLevel.DEBUG, "ＶＬＡＮ依頼受信法人　下りマッピング完了" + param);

		/*************************************************/
		/** 処理結果の判定                               */
		/*************************************************/
		if (!"0".equals(returnCd))
		{
			throw new CCException("ＶＬＡＮ依頼受信法人CCの実行でエラーが発生しました。", 
									new Exception("ＶＬＡＮ依頼受信法人CCの実行でエラーが発生しました。"));
		}
		
		return param;
	}

	/**
	 * 電話用ＶＬＡＮオーダ発行新規登録SC呼び出し処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param logger BPMLogManager
	 * @param paramTelVlanOrd 追加リクエストパラメータ
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private Map<?, ?> executeTelVlanOrder(SessionHandle handle, IRequestParameterReadWrite param, ILogger logger, Map paramTelVlanOrd) throws Throwable
	{

		/***************************************************/
		/** 電話用ＶＬＡＮオーダ発行新規登録SCへの上りマッピング */
		/***************************************************/
		String templateId = "ESC0051D010";
		
		HashMap<String, Object> paramMap = JSCTelSvcScParamHenshu.createScParam(param, templateId, ESC0021D010CBSMsg.class , paramTelVlanOrd, "1");

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		logger.log(BasicLevel.DEBUG, "電話用ＶＬＡＮオーダ発行新規登録SC呼び出し完了" + result);

		return result;
	}

	/**
	 * ＢＰチェック用の入力パラメータを作成する。
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return ＢＰチェック用パラメータ
	 */
	@SuppressWarnings("unchecked")
	public HashMap getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	{
		// BPチェックは行わない(0件のCAANMsg配列を返却)
		HashMap param4BpChek = new HashMap();
		param4BpChek.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{});
		return param4BpChek;
	}

	/**
	 * ＢＰチェック結果を編集する。
	 * <br />
	 * @param param リクエストパラメータ
	 * @param caanMsgs サービスインターフェイス用のパラメータ配列
	 * @param returnCode リターンコード
	 * @return リクエストパラメータ
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] caanMsgs, Integer returnCode)
	{
		// BPチェックを行わない為、チェック結果の編集も不要
		return param;
	}


}
