/*********************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JECKA9010001TPMA
*   ソースファイル名：JECKA9010001TPMA.java
*   作成者          ：富士通
*   日付            ：2011年12月13日
*＜機能概要＞
*   CCMG連携処理呼出(PMP連携)顧客独自処理部品クラス.
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/12/13  富士通      新規作成
*
**********************************************************************/

package eo.ejb.cbs.mainproc;

import static eo.ejb.common.JCKLcsRenkeiUtil.*;

import java.util.Map;

import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.ejb.cbs.cbsmsg.ECNA9010001CBSMsg;

/**
 * <p>
 * CCMG連携処理呼出(PMP連携)顧客独自処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JECNA9010001TPMA implements TemplateMainHandler
{
	public static String PGID = "JECNA9010001TPMA";

	/**
	 * コンストラクタ.
	 */
	public JECNA9010001TPMA()
	{
		super();
	}

	/**
	 * CCMG連携処理呼出(PMP連携)顧客独自処理部品です。
	 * @param inCBSMsg CAANメッセージ
	 * @param inContext コンテキスト
	 */
	@SuppressWarnings("unchecked")
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext) throws CAANException
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "JECNA9010001TPMA#invoke start");

		// 機能コードを取得
		String funcCd = inCBSMsg.getString(ECNA9010001CBSMsg.FUNC_CODE);
		String sysid = inCBSMsg.getString(ECNA9010001CBSMsg.IN_SYS_ID);
		String mmbSbtBf = inCBSMsg.getString(ECNA9010001CBSMsg.MMB_SBT_BF);
		String mmbSbtAf = inCBSMsg.getString(ECNA9010001CBSMsg.MMB_SBT_AF);
		String svcKeiNo = inCBSMsg.getString(ECNA9010001CBSMsg.SVC_KEI_NO);
		String updId = inCBSMsg.getString(ECNA9010001CBSMsg.UPD_ID);
		String updNm = inCBSMsg.getString(ECNA9010001CBSMsg.UPD_NM);

		Map resMap = null;

		String apiName = "";

		if ("1".equals(funcCd)) {
			// コンテンツ全解約API呼出
			resMap = callContSvcAllDsl(sysid, updId, updNm);
			apiName = "コンテンツ全解約API";
		}
		else if ("2".equals(funcCd))
		{
			// 会員種別変更解約API呼出
			resMap = callMbTypeChgeDslApi(sysid, mmbSbtBf, mmbSbtAf, updId, updNm);
			apiName = "会員種別変更解約API";
		}
		else if ("3".equals(funcCd))
		{
			// ISP決済方法変更API呼出
			resMap = callIspksWayChgeApi(sysid, svcKeiNo, updId, updNm);
			apiName = "ISP決済方法変更API";
		}
		else if ("4".equals(funcCd))
		{
			// ISP決済強制解約予告API呼出
			resMap = callIspksDslYkkApi(sysid, updId, updNm);
			apiName = "ISP決済強制解約予告API";
		}
		else
		{
		}

		if (resMap == null)
		{
			// システムエラーフラグの設定
			inCBSMsg.set("system_err_flg", "1");
		}
		else
		{
			// システムエラーフラグの設定
			// ※エラーコードが "00000"(正常)、"99070"(メール送信失敗)、"53001"(契約なし) の場合は "0"(正常)、それ以外は "1"(異常) を設定
			String errCd = (String)resMap.get("ERR_CD_CCMG");
			String systemErrFlg =  (("00000".equals(errCd)) || ("99070".equals(errCd)) || ("53001".equals(errCd))) ? "0" : "1";

			// 結果のセット
			inCBSMsg.set("out_sys_id", resMap.get("SYSID_CCMG"));
			inCBSMsg.set("err_cd", resMap.get("ERR_CD_CCMG"));
			inCBSMsg.set("system_err_flg", systemErrFlg);
		}

		// 連携エラー時は、ステータス=6000(外部システムIFでエラー発生)をセット
		if (!"0".equals(inCBSMsg.getString("system_err_flg")))
		{
			inCBSMsg.set(ECNA9010001CBSMsg.IN_SYS_ID_ERR, "EA");
			inCBSMsg.set(ECNA9010001CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
			String ccmgErrCd = inCBSMsg.getString("err_cd");
			String errMsg = "CCMG連携(" + apiName + ")に失敗しました。";
			errMsg += " CCMGエラーコード = " + ccmgErrCd;
			errMsg += (sysid == null || "".equals(sysid)) ? "" : " SYSID = " + sysid;
			errMsg += (mmbSbtBf == null || "".equals(mmbSbtBf)) ? "" : " 変更前会員種別 = " + mmbSbtBf;
			errMsg += (mmbSbtAf == null || "".equals(mmbSbtAf)) ? "" : " 変更後会員種別 = " + mmbSbtAf;
			errMsg += (svcKeiNo == null || "".equals(svcKeiNo)) ? "" : " サービス契約番号 = " + svcKeiNo;
				throw new CAANException(errMsg);
		}

		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "JECNA9010001TPMA#invoke end");
	}
}
