/*******************************************************************************
* All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKKA0040002TPMA
*	ソースファイル名：JEKKA0040002TPMA.java
*	作成者			：
*   日付            ：2015年05月25日
*＜機能概要＞
*	eo電気サービス契約お客様変更独自処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v16.00.00   2015/05/25	FJ)頼経		【ANK-2480-00-00】対応 新電力
*   v16.01.00   2015/09/23	FJ)山岡		【ANK-2480-00-00】対応 新電力1-2
********************************************************************************/
package eo.ejb.cbs.mainproc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.fujitsu.futurity.common.JCCWebAddTrnId;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
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.EKKA0040002CBSMsg;
import eo.ejb.common.JCKCtrlCisInfo;

public class JEKKA0040002TPMA implements TemplateMainHandler {
	
	/** 外部インターフェイスID **/
	private static final String KKIFE253 = "KKIFE253";
	
	/** サービスＩＤ **/
	private static final String KKSV0808 = "KKSV0808";
	
	/** サービスインターフェースＩＤ **/
	private static final String KKSV080801SC  = "KKSV080801SC";
	
	/** サービス契約番号**/
	private static String SVC_KEI_NO = "svc_kei_no";
	
	/** SYSID**/
	private static String SYSID = "sysid";
	
	/* 20150914 ANK-2480-00-00対応　ADD START */
	/** 名寄せ連携　画面ID*/
	public static final String SCREEN_ID = "CKA90101";
	/* 20150914 ANK-2480-00-00対応　ADD END */
	
	// コマンド実行部品用
	@SuppressWarnings("unchecked")
	public static void ctrlCisInfo(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		Hashtable<String, Object > serviceMap = new Hashtable<String, Object>();
		
		// オペレータ_ID
		String operatorId = inCBSMsg.getString(EKKA0040002CBSMsg.OPERATORID);
		if(operatorId != null)
		{
			serviceMap.put(EKKA0040002CBSMsg.OPERATORID, operatorId);
		}
		else
		{
			serviceMap.put(EKKA0040002CBSMsg.OPERATORID, "");
		}
		
		// 運用日時
		String operatoDateTime = inCBSMsg.getString(EKKA0040002CBSMsg.OPERATEDATETIME);
		if(operatoDateTime != null)
		{
			serviceMap.put(EKKA0040002CBSMsg.OPERATEDATETIME, operatoDateTime);
		}
		else
		{
			serviceMap.put(EKKA0040002CBSMsg.OPERATEDATETIME, "");
		}
		
		// 外部インターフェイスID
		serviceMap.put(JCKCtrlCisInfo.OUT_IF_ID, KKIFE253);

		// サービスＩＤ
		serviceMap.put(JCKCtrlCisInfo.SERVICEID, KKSV0808);
		
		// サービスインターフェースＩＤ
		serviceMap.put(JCKCtrlCisInfo.SERVICEIFID, KKSV080801SC);
		
		List<LinkedHashMap<String, Object>> list = new ArrayList<LinkedHashMap<String, Object>>();
		LinkedHashMap<String, Object> serviceIf = new LinkedHashMap<String, Object>();
		
		/* 20150914 ANK-2480-00-00対応　MOD START */
		
		// 機能コード
		//serviceIf.put(JCKCtrlCisInfo.FUNC_CODE, "1");

		// 共通メッセージからサービス呼び出し元の区分を取得する
		HashMap<String, Object> commonMsg = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_MESSAGE_COMMON_MAP);

			// 呼び出し元画面ID
		String gamenId = (String)commonMsg.get(JCMConstants.INVOKE_GAMEN_ID_KEY);

		// 機能コード
		//CKA90101で始まる画面IDの場合　機能コード＝２を設定
		if (null != gamenId && gamenId.startsWith(SCREEN_ID))
		{
			serviceIf.put(JCKCtrlCisInfo.FUNC_CODE, "2");
		}else
		{	
			//名寄せ以外のお客様情報変更の場合
			serviceIf.put(JCKCtrlCisInfo.FUNC_CODE, "1");
		}
		/* 20150914 ANK-2480-00-00対応　MOD START */
		
		// サービス契約番号
		if(inCBSMsg.getString(EKKA0040002CBSMsg.SVC_KEI_NO) != null)
		{
			serviceIf.put(SVC_KEI_NO, inCBSMsg.getString(EKKA0040002CBSMsg.SVC_KEI_NO));
		}
		else
		{
			serviceIf.put(SVC_KEI_NO, "");
		}
		
		// SYSID
		if(inCBSMsg.getString(EKKA0040002CBSMsg.SYSID) != null)
		{
			serviceIf.put(SYSID, inCBSMsg.getString(EKKA0040002CBSMsg.SYSID));
		}
		else
		{
			serviceIf.put(SYSID, "");
		}
			
		list.add(serviceIf);
		serviceMap.put(JCKCtrlCisInfo.SERVICEIF,list);
		
		// コマンド発行部品のスタブ用、
		JCKCtrlCisInfo instance = JCKCtrlCisInfo.getInstance();
		
		try
		{
			// CIS連携
			Map ret = instance.call_KKIFE253(serviceMap);
			
			// コマンド実行結果判定
			if(null != ret.get(JCKCtrlCisInfo.CMD_RESULT_CD))
			{
				// 結果コード"1":XML電文処理エラー発生, SOAP例外の場合
				if(ret.get(JCKCtrlCisInfo.CMD_RESULT_CD).equals("1"))
				{
					inCBSMsg.set(EKKA0040002CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
				}
				else if(ret.get(JCKCtrlCisInfo.CMD_RESULT_CD).equals("0"))
				{
					// リターンコードを判定しステータスをセットする。
					if(null != ret.get(JCKCtrlCisInfo.RETURN_CD))
					{
						// "0000":正常
						if("0000".equals((String)ret.get(JCKCtrlCisInfo.RETURN_CD)))
						{
							// ステータス(0:正常終了)セットする。
							inCBSMsg.set(EKKA0040002CBSMsg.STATUS, StatusCodes.NORMAL_END);
						}
						// "1000":単項目チェックエラー
						else if("1000".equals((String)ret.get(JCKCtrlCisInfo.RETURN_CD)))
						{
							// ステータス(1000:単項目チェックエラー)セットする。
							inCBSMsg.set(EKKA0040002CBSMsg.STATUS, StatusCodes.SINGLEDATA_ERR);
							
							// サービスＩＦリスト取得
							List<Map<String, Object>> serviceIfList = null;
							serviceIfList = (List<Map<String, Object>>)ret.get(JCKCtrlCisInfo.SERVICEIF);
							
							if(serviceIfList != null && !serviceIfList.isEmpty() ){
								
								Map<String, Object> map = serviceIfList.get(0);
								
								// 単項目チェックエラー発生項目設定
								// E1:必須チェック
								// E2:属性チェック
								// E3:桁数チェック
								if(map.get(EKKA0040002CBSMsg.SVC_KEI_NO_ERR) != null)
								{
									inCBSMsg.set(EKKA0040002CBSMsg.SVC_KEI_NO_ERR, (String)map.get(EKKA0040002CBSMsg.SVC_KEI_NO_ERR));
									
								}
								
								if(map.get(EKKA0040002CBSMsg.SYSID_ERR) != null)
								{
									inCBSMsg.set(EKKA0040002CBSMsg.SYSID_ERR, (String)map.get(EKKA0040002CBSMsg.SYSID_ERR));
								}
								
							}
							
						}else{
							
							inCBSMsg.set(EKKA0040002CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
						}
						
					}
					
				}
			}
			
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
		}
	}
	
}
