/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKKA1890001TPMA
*	ソースファイル名：JEKKA1890001TPMA.java
*	作成者			：FJ）宇野
*	日付			：2022年07月16日
*＜機能概要＞
*	MT管理情報照会スキーマクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v60.00.00	2022/07/16	FJ）宇野	【ANK-4244-00-00】_【eo定期】MT既設賃貸対応
********************************************************************************/
package eo.ejb.cbs.mainproc;

import eo.ejb.cbs.cbsmsg.EKKA1890001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA1890001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA1890001CBSMsg2List;
import gyomu.JKKcommonApiKKA1890001;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;
import com.k_opti.api_parts.client._parts.ApiClientSetting;
import com.k_opti.api_parts.client.constant.ApiClientConst;

public class JEKKA1890001TPMA implements TemplateMainHandler
{	
	/**
	 * 連携の実行
	 * <br>
	 * @param inCBSMsg
	 * @param inContext
	 */
	
	List <String> inCBSMsg = new ArrayList<String>();
	
	public static void executeKKIFE496(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		
		HashMap<String, Object> serviceMap = new HashMap<String,Object>();
		
		//serviceMapにパラメータの値を代入
		serviceMap.put(JKKcommonApiKKA1890001.FUNC_CODE, inCBSMsg.getString(EKKA1890001CBSMsg.FUNC_CODE));
		serviceMap.put(JKKcommonApiKKA1890001.KEY_PID, inCBSMsg.getString(EKKA1890001CBSMsg.KEY_PID));
		serviceMap.put(JKKcommonApiKKA1890001.KEY_SEQ, inCBSMsg.getString(EKKA1890001CBSMsg.KEY_SEQ));
		serviceMap.put(JKKcommonApiKKA1890001.KEY_TOU_NO_GET_FLG, inCBSMsg.getString(EKKA1890001CBSMsg.TOUNOGETFLG));
		serviceMap.put(JKKcommonApiKKA1890001.KEY_RM_NO_GET_FLG, inCBSMsg.getString(EKKA1890001CBSMsg.RMNOGETFLG));
		serviceMap.put(JKKcommonApiKKA1890001.KEY_MAE_KOJI_NO_GET_FLG, inCBSMsg.getString(EKKA1890001CBSMsg.MAEKOJINOGETFLG));
		serviceMap.put(JKKcommonApiKKA1890001.KEY_CFM_RSLT_CD_GET_FLG, inCBSMsg.getString(EKKA1890001CBSMsg.CFMRSLTCDGETFLG));
		serviceMap.put(JKKcommonApiKKA1890001.KEY_SPMPORT_MAX_GET_FLG, inCBSMsg.getString(EKKA1890001CBSMsg.SPMPORTMAXGETFLG));
		serviceMap.put(JKKcommonApiKKA1890001.KEY_SPMPORT_USE_GET_FLG, inCBSMsg.getString(EKKA1890001CBSMsg.SPMPORTUSEGETFLG));
		serviceMap.put(JKKcommonApiKKA1890001.KEY_SEKOU_NG_FLG_GET_FLG, inCBSMsg.getString(EKKA1890001CBSMsg.SEKOUNGFLGGETFLG));
		serviceMap.put(JKKcommonApiKKA1890001.KEY_CCT_SET_CD_GET_FLG, inCBSMsg.getString(EKKA1890001CBSMsg.CCTSETCDGETFLG));
		serviceMap.put(JKKcommonApiKKA1890001.KEY_BIKO_GET_FLG, inCBSMsg.getString(EKKA1890001CBSMsg.BIKOGETFLG));
		serviceMap.put(JKKcommonApiKKA1890001.KEY_UPDDT_GET_FLG, inCBSMsg.getString(EKKA1890001CBSMsg.UPDDTGETFLG));
		
		try
		{
			
			JKKcommonApiKKA1890001 instance = new JKKcommonApiKKA1890001();
			
			Map<String, Object> resposeMap = instance.callApiKKA1890001(serviceMap);
			// 入力チェックの結果を受信
			inCBSMsg.set(EKKA1890001CBSMsg.RESULTCODE, (String)resposeMap.get(ApiClientConst.IF_HEADER_RESULTCODE));
			inCBSMsg.set(EKKA1890001CBSMsg.RESULTDETAILCODE, (String)resposeMap.get(ApiClientConst.IF_HEADER_RESULTDETAILCODE));
			ArrayList<CAANMsg> errList = new ArrayList<CAANMsg>();
			ArrayList<?> gyoumErrorList = (ArrayList<?>)resposeMap.get(ApiClientConst.IF_HEADER_GYOMUERRORLIST);
			if (gyoumErrorList != null)
			{
				for (Object obj : gyoumErrorList)
				{
					
					if (obj instanceof HashMap)
					{
						//エラーリストにエラーコードとエラーメッセージを代入
						CAANMsg msg = new CAANMsg(EKKA1890001CBSMsg2List.class.getName());
						HashMap<?, ?> errMap = (HashMap<?, ?>)obj;
						msg.set(EKKA1890001CBSMsg2List.ERRCODE, toStingObj(errMap.get(JKKcommonApiKKA1890001.ERR_CODE)));
						msg.set(EKKA1890001CBSMsg2List.ERRMESSAGE, toStingObj(errMap.get(JKKcommonApiKKA1890001.ERR_MESSAGE)));
						errList.add(msg);
					}
				}
				if (errList.size() > 0)
				{
					inCBSMsg.set(EKKA1890001CBSMsg.EKKA1890001CBSMSG2LIST, errList.toArray(new CAANMsg[0]));
				}
			}
			
			ApiClientSetting.firstReadApiSetting();
			
	        String operationMode = ApiClientSetting.getValue("MANMOS0001", "MAIF0102", ApiClientConst.SETTING_OPERATION_MODE);
			
			HashMap<?,?> bodyMap = (HashMap<?,?>)resposeMap.get(ApiClientConst.IF_BODY);
			if (bodyMap != null && !bodyMap.isEmpty())
			{
				//各リストを作成
				ArrayList<CAANMsg> resList = new ArrayList<CAANMsg>();
				ArrayList<HashMap<String, Object>> mtMngInfoList = new ArrayList<HashMap<String, Object>>();
				mtMngInfoList = (ArrayList<HashMap<String, Object>>) bodyMap.get("mtMngInfoList");
				
				String IN_SEQ = toStingObj(inCBSMsg.getString(EKKA1890001CBSMsg.KEY_SEQ));
				
				
				if (mtMngInfoList != null)
				{
					for (int i = 0; i < mtMngInfoList.size(); i++)
					{
						CAANMsg msg = new CAANMsg(EKKA1890001CBSMsg1List.class.getName());
						HashMap mtMngInfoMap = new HashMap();
						mtMngInfoMap = mtMngInfoList.get(i);
		
						String OUT_SEQ = toStingObj(mtMngInfoMap.get("seq"));
						//連番が入力されていて、連番がレスポンスの値と一致ししてなかった場合
						if(IN_SEQ != null && !"".equals(IN_SEQ) && !IN_SEQ.equals(OUT_SEQ) && ApiClientConst.OPERATION_MODE_STUB_CLIENT.equals(operationMode))
						{
							continue;
						}
						
						String pid = toStingObj(mtMngInfoMap.get("pid"));
						//スタブモードの場合は、@@@@@@@@@@をリクエスト項目のP-IDに変換
						if (ApiClientConst.OPERATION_MODE_STUB_CLIENT.equals(operationMode))
						{
							msg.set(EKKA1890001CBSMsg1List.PID, pid.replace("@@@@@@@@@@", toStingObj(inCBSMsg.getString(EKKA1890001CBSMsg.KEY_PID))));
						}
						else
						{
							msg.set(EKKA1890001CBSMsg1List.PID, pid);
						}
						
						msg.set(EKKA1890001CBSMsg1List.SEQ, toStingObj(mtMngInfoMap.get("seq")));
						
						//各フラグが0の場合空白を代入
						//棟情報
						if(("0").equals(inCBSMsg.getString(EKKA1890001CBSMsg.TOUNOGETFLG))){
							msg.set(EKKA1890001CBSMsg1List.TOUNO, "");
						}else{
							msg.set(EKKA1890001CBSMsg1List.TOUNO, toStingObj(mtMngInfoMap.get("touNo")));
						}
						//部屋番号
						if(("0").equals(inCBSMsg.getString(EKKA1890001CBSMsg.RMNOGETFLG))){
							msg.set(EKKA1890001CBSMsg1List.RMNO, "");
						}else{
							msg.set(EKKA1890001CBSMsg1List.RMNO, toStingObj(mtMngInfoMap.get("rmNo")));
						}
						//前入居者工事案件番号
						if(("0").equals(inCBSMsg.getString(EKKA1890001CBSMsg.MAEKOJINOGETFLG))){
							msg.set(EKKA1890001CBSMsg1List.MAEKOJINO, "");
						}else{
							msg.set(EKKA1890001CBSMsg1List.MAEKOJINO, toStingObj(mtMngInfoMap.get("maeKojiNo")));
						}
						//確認結果コード
						if(("0").equals(inCBSMsg.getString(EKKA1890001CBSMsg.CFMRSLTCDGETFLG))){
							msg.set("cfmRsltCd", "");
						}else{
							msg.set(EKKA1890001CBSMsg1List.CFMRSLTCD, toStingObj(mtMngInfoMap.get("cfmRsltCd")));
						}
						//SPMポート上限数
						if(("0").equals(inCBSMsg.getString(EKKA1890001CBSMsg.SPMPORTMAXGETFLG))){
							msg.set(EKKA1890001CBSMsg1List.SPMPORTMAX, "");
						}else{
							msg.set(EKKA1890001CBSMsg1List.SPMPORTMAX, toStingObj(mtMngInfoMap.get("spmportMax")));
						}
						// SPMポート使用数
						if(("0").equals(inCBSMsg.getString(EKKA1890001CBSMsg.SPMPORTUSEGETFLG))){
							msg.set(EKKA1890001CBSMsg1List.SPMPORTUSE, "");
						}else{
							msg.set(EKKA1890001CBSMsg1List.SPMPORTUSE, toStingObj(mtMngInfoMap.get("spmportUse")));
						}
						// 施工不可フラグ
						if(("0").equals(inCBSMsg.getString(EKKA1890001CBSMsg.SEKOUNGFLGGETFLG))){
							msg.set(EKKA1890001CBSMsg1List.SEKOUNGFLG, "");
						}else{
							msg.set(EKKA1890001CBSMsg1List.SEKOUNGFLG, toStingObj(mtMngInfoMap.get("sekouNgFlg")));
						}
						// コンセント設置内容
						if(("0").equals(inCBSMsg.getString(EKKA1890001CBSMsg.CCTSETCDGETFLG))){
							msg.set(EKKA1890001CBSMsg1List.CCTSETCD, "");
						}else{
							msg.set(EKKA1890001CBSMsg1List.CCTSETCD, toStingObj(mtMngInfoMap.get("cctSetCd")));
						}
						// 工事備考欄
						if(("0").equals(inCBSMsg.getString(EKKA1890001CBSMsg.BIKOGETFLG))){
							msg.set(EKKA1890001CBSMsg1List.BIKO, "");
						}else{
							msg.set(EKKA1890001CBSMsg1List.BIKO, toStingObj(mtMngInfoMap.get("biko")));
						}
						// 更新日時
						if(("0").equals(inCBSMsg.getString(EKKA1890001CBSMsg.UPDDTGETFLG))){
							msg.set(EKKA1890001CBSMsg1List.UPDDT, "");
						}else{
							msg.set(EKKA1890001CBSMsg1List.UPDDT, toStingObj(mtMngInfoMap.get("upddt")));
						}
						
						resList.add(msg);
					}
				}
				if (resList.size() > 0){
					inCBSMsg.set(EKKA1890001CBSMsg.EKKA1890001CBSMSG1LIST, resList.toArray(new CAANMsg[0]));
				}
			}
			// 処理結果コード"000":正常終了の場合
			if (resposeMap.get("resultCode").equals("000"))
			{
				// 正常終了
				inCBSMsg.set(EKKA1890001CBSMsg.RESULT_CD, "00");
			}
			else
			{
				// 異常終了
				inCBSMsg.set(EKKA1890001CBSMsg.RESULT_CD, "99");
			}
		}
		catch (Exception e)
		{
			//異常終了
			inCBSMsg.set(EKKA1890001CBSMsg.RESULT_CD, "99");
		}
		
	}


	/**
	 * 文字に変換する。
	 * <br>
	 * @param obj 対象のオブジェクト
	 * @return 文字列
	 */
	private static String toStingObj(Object obj)
	{
		if (obj == null)
		{
			return "";
		}
		return obj.toString();
	}
}
