/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKWrisvcAutoAplyGetSvcInfoCC
*   ソースファイル名：JKKWrisvcAutoAplyGetSvcInfoCC.java
*   作成者          ：富士通
*   日付            ：2012年05月28日
*＜機能概要＞
*   割引サービス自動適用入力情報取得コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/05/28   FJ）佐藤    新規作成
*   v4.00.00    2012/12/14   FJ) 中山    【IT2-2012-0001954】割引サービス自動適用CCの呼び出し方を修正
*   v4.01.00    2012/12/18   FJ) 北浦    【ANK-1247-00-00】 申込スキーマ「工事依頼情報連絡事項」の桁数不正対応(破棄対応)
*   v5.00.00    2013/02/28   FJ）多田    【IT1-2013-0000337】割引集約対応
*  v37.09.00    2018/06/14   FJ) 澤田    【IT1-2018-0000086】工事費割賦請求STEP2 照査画面で自治体ＣＰを付与をしたら 相当額ＣＰが解約されない。
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
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.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;

/**
 * 割引サービス自動適用入力情報取得コモンコンポーネント部品
 * <br>
 * @author 富士通
 */
public class JKKWrisvcAutoAplyGetSvcInfoCC extends AbstractCommonComponent
{
	/** リターンメッセージ */
	private static final String RETURN_MESSAGE_STRING = "RETURN_MESSAGE_";
	/** リターンメッセージ */
	private static final String RETURN_MESSAGE_FORMAT = "%1$04d";
	/** エラー用 */
	private static final String SC_ERROR_STRING = "サービスコンポーネントエラー";
	/** 作業マップ名 */
	private static final String CC_WORK_AREA_NAME_KEISHA = "JKKAddKeishaServiceCCWork";
	/** 作業マップ名 */
	private static final String CC_WORK_AREA_NAME_MSKM = "JKKAddMskmServiceCCWork";
	/** 作業マップ名 */
	private static final String CC_WORK_AREA_NAME_WRI_GET_INFO = "JKKWrisvcAutoAplyGetSvcInfoCCWork";

	/**
	 * 割引サービス自動適用入力情報取得処理を行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getSvcInfo(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		Map<?, ?> result = null;
		CAANMsg template = null;
		
		HashMap inMap = (HashMap)param.getData(fixedText);
		
		// マップに値が設定されていない場合は処理を行わない。
		if (inMap == null)
		{
			return param;
		}
		
		ArrayList<HashMap> cclSvcKeiList = null;
		ArrayList<HashMap> cclList = (ArrayList<HashMap>)inMap.get("cancel_inf_list");
		if (null != cclList)
		{
			cclSvcKeiList = new ArrayList<HashMap>();
			
			for (HashMap childMap : cclList)
			{
				HashMap dataMap = new HashMap();
				
				template = editInEKK0081A010(param, fixedText, (String)childMap.get("svc_kei_no"));
				result = scCall.run(putParamMap(paramMap, template), handle);
				editRetEKK0081A010(result, param, fixedText, "05", dataMap, null);
				if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
				{ // ステータスが単項目エラー以上であれば例外をスロー
					throw new CCException(SC_ERROR_STRING, new Exception());
				}
				
				cclSvcKeiList.add(dataMap);
			}
		}
		
		ArrayList<HashMap> addSvcKeiList = null;
		ArrayList<HashMap> addList = (ArrayList<HashMap>)inMap.get("add_inf_list");
		if (null != addList)
		{
			addSvcKeiList = new ArrayList<HashMap>();
			
			// サービス契約番号取得処理
			getSvkeiNo(param, fixedText);
			
			for (HashMap childMap : addList)
			{
				HashMap dataMap = new HashMap();
				
				template = editInEKK0081A010(param, fixedText, (String)childMap.get("svc_kei_no"));
				result = scCall.run(putParamMap(paramMap, template), handle);
				editRetEKK0081A010(result, param, fixedText, "01", dataMap, childMap);
				if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
				{ // ステータスが単項目エラー以上であれば例外をスロー
					throw new CCException(SC_ERROR_STRING, new Exception());
				}
				
				addSvcKeiList.add(dataMap);
			}
		}
		
		ArrayList<HashMap> updSvcKeiList = null;
		ArrayList<HashMap> updList = (ArrayList<HashMap>)inMap.get("upd_inf_list");
		if (null != updList)
		{
			updSvcKeiList = new ArrayList<HashMap>();
			
			for (HashMap childMap : updList)
			{
				HashMap dataMap = new HashMap();
				
				template = editInEKK0081A010(param, fixedText, (String)childMap.get("svc_kei_no"));
				result = scCall.run(putParamMap(paramMap, template), handle);
				editRetEKK0081A010(result, param, fixedText, "02", dataMap, childMap);
				if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
				{ // ステータスが単項目エラー以上であれば例外をスロー
					throw new CCException(SC_ERROR_STRING, new Exception());
				}
				
				updSvcKeiList.add(dataMap);
			}
		}

		// 割引サービス自動適用ＣＣを区分：キャンセルで実行
		if (null != cclSvcKeiList)
		{
			for (HashMap childMap : cclSvcKeiList)
			{
				param.setData("cancelWrisvcMap", childMap);
				
				(new JKKCallWrisvcAutoAplyUtil()).callWrisvcAutoAply(handle, param, "cancelWrisvcMap");
			}
		}
		
		// 割引サービス自動適用ＣＣを区分：登録で実行
		if (null != addSvcKeiList)
		{
			for (HashMap childMap : addSvcKeiList)
			{
				param.setData("addWrisvcMap", childMap);
				
				(new JKKCallWrisvcAutoAplyUtil()).callWrisvcAutoAply(handle, param, "addWrisvcMap");
			}
		}
		
		// 割引サービス自動適用ＣＣを区分：プラン変更で実行
		if (null != updSvcKeiList)
		{
			for (HashMap childMap : updSvcKeiList)
			{
				param.setData("updWrisvcMap", childMap);
				
				(new JKKCallWrisvcAutoAplyUtil()).callWrisvcAutoAply(handle, param, "updWrisvcMap");
			}
		}
		
		return param;
	}

	/**
	 * SCの実行ステータスの取得処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @return SCの実行ステータス
	 * @throws Exception
	 */
	private int getReturnCode(IRequestParameterReadWrite param) throws Exception
	{
		return Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
	}

	/**
	 * 単一CAANMsgのマッピング処理を行います。
	 * <br>
	 * @param paramMap パラメータマップ
	 * @param template テンプレートリスト
	 * @return パラメータマップ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> putParamMap(HashMap<String, Object> paramMap, CAANMsg template) throws RequestParameterException
	{
		CAANMsg[] templates = { template };
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * SCインプット共通データ設定処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param paramMap パラメータマップ
	 * @return パラメータマップ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> setSCInputCommonData(IRequestParameterReadWrite param, HashMap<String, Object> paramMap)
			throws RequestParameterException
	{
		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		return paramMap;
	}
	
	/**
	 * サービス契約番号取得処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite getSvkeiNo(IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap dataMap = (HashMap)param.getData(fixedText);
		if (dataMap == null)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}
		
		// 抽出キーリストの取得
		ArrayList dataList = (ArrayList)dataMap.get("add_inf_list");
		if (dataList == null)
		{
			return param;
		}
		
		for (int i = 0; i < dataList.size(); i++)
		{
			HashMap map = (HashMap)dataList.get(i);
			
			// リクエストパラメータ内にテンプレートIDをキーとするHashMapが存在するか判定
			if (param.getData(map.get("TemplateId")) != null)
			{
				// テンプレートIDをキーとするHashMapを取得
				HashMap templateMap = (HashMap)param.getData(map.get("TemplateId"));
				
				// サービス契約番号項目を取得
				String svKeiNo = (String)templateMap.get(map.get("SvKeiNoKmkNm"));
				
				if (svKeiNo != null)
				{
					map.put("svc_kei_no", svKeiNo);
				}
			}
		}
		
		return param;
	}
	
	/**
	 * サービス契約一意照会の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param strSvKeiNo サービス契約番号
	 * @return CAANMsg サービスコンポーネント実行用CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0081A010(IRequestParameterReadWrite param, String fixedText, String strSvKeiNo) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0081A010CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0081A010CBSMsg.TEMPLATEID, "EKK0081A010");

		// 機能コード（デフォルト：２）
		template.set(EKK0081A010CBSMsg.FUNC_CODE, "2");

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		HashMap inMap = (HashMap)param.getData(fixedText);

		// サービス契約番号 → サービス契約一意照会.ＫＥＹ＿サービス契約番号
		if ("".equals(strSvKeiNo))
		{
			template.setNull(EKK0081A010CBSMsg.KEY_SVC_KEI_NO);
		}
		else
		{
			template.set(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, strSvKeiNo);
		}
		
		// ＫＥＹ＿世代登録年月日時分秒 → サービス契約一意照会.ＫＥＹ＿世代登録年月日時分秒
		if (inMap == null || inMap.get("key_gene_add_dtm") == null || "".equals(inMap.get("key_gene_add_dtm")))
		{
			template.setNull(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM);
		}
		else
		{
			template.set(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, (String)inMap.get("key_gene_add_dtm"));
		}
		
		// ＫＥＹ＿予約適用年月日 → サービス契約一意照会.ＫＥＹ＿予約適用年月日（未設定の場合、運用日付設定）
		if (inMap == null || inMap.get("key_rsv_aply_ymd") == null || "".equals(inMap.get("key_rsv_aply_ymd")))
		{
			template.setNull(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD);
		}
		else
		{
			template.set(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, (String)inMap.get("key_rsv_aply_ymd"));
		}

		return template;
	}
	
	/**
	 * サービス契約一意照会の下りマッピング処理を行います。
	 * <br>
	 * @param msgList サービスインターフェイス実行結果を格納したリスト
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param addChgeDiv 登録／変更区分
	 * @param outputMap パラメータ格納マップ
	 * @param inpSvcKeiMap 入力用サービス契約情報マップ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK0081A010(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText,
			String addChgeDiv, HashMap outputMap, HashMap inpSvcKeiMap) throws Exception
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);

		HashMap inMap = (HashMap)param.getData(fixedText);
		if (inMap == null)
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}
		
		// 作業領域のマップを取得
		HashMap workDataMapKeisha = null;
		HashMap workDataMapMskm = null;
		HashMap workDataMapWrib = null;
		ArrayList workSvcKeiList = null;
		Map workMap = param.getMappingWorkArea();
		if (workMap != null)
		{
			workDataMapKeisha = (HashMap)workMap.get(CC_WORK_AREA_NAME_KEISHA);
			workDataMapMskm = (HashMap)workMap.get(CC_WORK_AREA_NAME_MSKM);
			workDataMapWrib = (HashMap)workMap.get(CC_WORK_AREA_NAME_WRI_GET_INFO);
			if (null == workDataMapWrib)
			{
				workDataMapWrib = new HashMap();
				workMap.put(CC_WORK_AREA_NAME_WRI_GET_INFO, workDataMapWrib);
			}
			workSvcKeiList = (ArrayList)workDataMapWrib.get("svc_kei_list");
			if (null == workSvcKeiList)
			{
				workSvcKeiList = new ArrayList();
				workDataMapWrib.put("svc_kei_list", workSvcKeiList);
			}
		}
		
		// SYSIDの取得
		String sysid = (String)inMap.get("sysid");
		if (null == sysid || "".equals(sysid))
		{
			// 申込新規登録時は作業領域より取得する
			if (null != workDataMapKeisha)
			{
				sysid = (String)workDataMapKeisha.get("sysid");
			}
		}
		outputMap.put("sysid", sysid);
		workDataMapWrib.put("sysid", sysid);
	
		// 登録／変更区分
		outputMap.put("add_chge_div", addChgeDiv);
		
		// 申込番号の取得
		String mskmNo = (String)inMap.get("mskm_no");
		if (null == mskmNo || "".equals(mskmNo))
		{
			// 申込新規登録時は作業領域より取得する
			if (null != workDataMapMskm)
			{
				mskmNo = (String)workDataMapMskm.get("mskm_no");
			}
		}
		outputMap.put("mskm_no", mskmNo);
		
		// 申込種別コード
		outputMap.put("mskm_sbt_cd", inMap.get("mskm_sbt_cd"));
		
		// 異動区分
		outputMap.put("ido_div", inMap.get("ido_div"));
		
		// 機能コード
		outputMap.put("func_code", inMap.get("func_code"));
			
		// 登録／変更区分が"キャンセル"の場合はキャンセル理由コードセットする
		if ("05".equals(addChgeDiv))
		{
			// キャンセル理由コード
			outputMap.put("svc_cancel_rsn_cd", inMap.get("svc_cancel_rsn_cd"));
		}
		
		// サービス契約リストの取得
		ArrayList svcKeiGrpList = (ArrayList)outputMap.get("svc_kei_grp_list");
		if (null == svcKeiGrpList)
		{
			svcKeiGrpList = new ArrayList();
			outputMap.put("svc_kei_grp_list", svcKeiGrpList);
		}
		
		HashMap<String, Object>  svcKeiGrpMap = new HashMap<String, Object>();
		svcKeiGrpList.add(svcKeiGrpMap);
		
		// グループ区分
		svcKeiGrpMap.put("grp_div", "00");
		
		ArrayList svcKeiList = (ArrayList)svcKeiGrpMap.get("svc_kei_list");
		if (null == svcKeiList)
		{
			svcKeiList = new ArrayList();
			svcKeiGrpMap.put("svc_kei_list", svcKeiList);
		}

		CAANMsg[] templateArray = template.getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		
		if (templateArray != null && 1 <= templateArray.length)
		{
			CAANMsg childTemplate = templateArray[0];
			HashMap svcKeiMap = new HashMap();
			HashMap workSvcKeiMap = new HashMap();
			
			// 対象契約識別コードに設定
			svcKeiMap.put("tg_kei_skbt_cd", "01");  // 01:サービス契約

			// サービス契約番号 ← サービス契約一意照会.サービス契約番号
			if (childTemplate.isNull(EKK0081A010CBSMsg1List.SVC_KEI_NO))
			{
				svcKeiMap.put("svc_kei_no", "");
				workSvcKeiMap.put("svc_kei_no", "");
			}
			else
			{
				svcKeiMap.put("svc_kei_no", childTemplate.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
				workSvcKeiMap.put("svc_kei_no", childTemplate.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
			}

			// サービス契約ステータス ← サービス契約一意照会.サービス契約ステータス
			if (childTemplate.isNull(EKK0081A010CBSMsg1List.SVC_KEI_STAT))
			{
				svcKeiMap.put("svc_kei_stat", "");
			}
			else
			{
				svcKeiMap.put("svc_kei_stat", childTemplate.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
			}
			
			// サービスコード ← サービス契約一意照会.サービスコード
			if (childTemplate.isNull(EKK0081A010CBSMsg1List.SVC_CD))
			{
				svcKeiMap.put("svc_cd", "");
				workSvcKeiMap.put("svc_cd", "");
			}
			else
			{
				svcKeiMap.put("svc_cd", childTemplate.getString(EKK0081A010CBSMsg1List.SVC_CD));
				workSvcKeiMap.put("svc_cd", childTemplate.getString(EKK0081A010CBSMsg1List.SVC_CD));
			}
			
			// 料金グループコード ← サービス契約一意照会.料金グループコード
			if (childTemplate.isNull(EKK0081A010CBSMsg1List.PRC_GRP_CD))
			{
				svcKeiMap.put("prc_grp_cd", "");
				workSvcKeiMap.put("prc_grp_cd", "");
			}
			else
			{
				svcKeiMap.put("prc_grp_cd", childTemplate.getString(EKK0081A010CBSMsg1List.PRC_GRP_CD));
				workSvcKeiMap.put("prc_grp_cd", childTemplate.getString(EKK0081A010CBSMsg1List.PRC_GRP_CD));
			}
			
			// 料金コースコード ← サービス契約一意照会.料金コースコード
			if (childTemplate.isNull(EKK0081A010CBSMsg1List.PCRS_CD))
			{
				svcKeiMap.put("pcrs_cd", "");
				workSvcKeiMap.put("pcrs_cd", "");
			}
			else
			{
				svcKeiMap.put("pcrs_cd", childTemplate.getString(EKK0081A010CBSMsg1List.PCRS_CD));
				workSvcKeiMap.put("pcrs_cd", childTemplate.getString(EKK0081A010CBSMsg1List.PCRS_CD));
			}
			
			// 料金プランコード ← サービス契約一意照会.料金プランコード
			if (childTemplate.isNull(EKK0081A010CBSMsg1List.PPLAN_CD))
			{
				svcKeiMap.put("pplan_cd", "");
				workSvcKeiMap.put("pplan_cd", "");
			}
			else
			{
				svcKeiMap.put("pplan_cd", childTemplate.getString(EKK0081A010CBSMsg1List.PPLAN_CD));
				workSvcKeiMap.put("pplan_cd", childTemplate.getString(EKK0081A010CBSMsg1List.PPLAN_CD));
			}
			
			// 申込明細番号 ← サービス契約一意照会.申込明細番号
			if (childTemplate.isNull(EKK0081A010CBSMsg1List.MSKM_DTL_NO))
			{
				svcKeiMap.put("mskm_dtl_no", "");
				workSvcKeiMap.put("mskm_dtl_no", "");
			}
			else
			{
				svcKeiMap.put("mskm_dtl_no", childTemplate.getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO));
				workSvcKeiMap.put("mskm_dtl_no", childTemplate.getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO));
			}
			
			// 登録／変更区分が"プラン変更"の場合は変更前の情報パラメータをセットする
			if ("02".equals(addChgeDiv))
			{
				// 変更前サービスコード
				svcKeiMap.put("chge_bf_svc_cd", inpSvcKeiMap.get("chge_bf_svc_cd"));
				// 変更前料金グループコード
				svcKeiMap.put("chge_bf_prc_grp_cd", inpSvcKeiMap.get("chge_bf_prc_grp_cd"));
				// 変更前料金コースコード
				svcKeiMap.put("chge_bf_pcrs_cd", inpSvcKeiMap.get("chge_bf_pcrs_cd"));
				// 変更前料金プランコード
				svcKeiMap.put("chge_bf_pplan_cd", inpSvcKeiMap.get("chge_bf_pplan_cd"));
			}
			
			// 取得結果をサービス契約リストに追加
			svcKeiList.add(svcKeiMap);
			
			if ("01".equals(addChgeDiv) || "02".equals(addChgeDiv))
			{
				workSvcKeiList.add(workSvcKeiMap);
			}
		}
		// IT1-2018-0000086 ADD START
		String kojihiKapOperateStat = (String)inMap.get("kojihi_kap_operate_stat");
		if (!(kojihiKapOperateStat == null))
		{
			outputMap.put("kojihi_kap_operate_stat", kojihiKapOperateStat);
		}
		// IT1-2018-0000086 ADD END
		// エラー情報の設定
		editErrInfoEKK0081A010(param, template, (Integer)returnCode, fixedText);

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}

	/**
	 * コントロールマップエラー情報格納処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param itemplateStatus サービスインターフェイスステータス
	 * @param returnCode リターンコード
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	private IRequestParameterReadWrite setControlMapErrInfo(IRequestParameterReadWrite param, int itemplateStatus, int returnCode)
			throws RequestParameterException
	{
		int templateStatus = itemplateStatus;

		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		return param;
	}
	
	/**
	 * サービス契約一意照会のエラー情報マッピング処理を行います。
	 * <br>
	 * @param iparam リクエストパラメータ
	 * @param template テンプレートリスト
	 * @param returnCode リターンコード
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0081A010(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode, String fixedText)
			throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK0081A010CBSMsg.STATUS), returnCode);

		HashMap inMap = (HashMap)param.getData(fixedText);

		// サービス契約一意照会.ＫＥＹ＿サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却
		if (!template.isNull(EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("key_svc_kei_no_err"))
			{
				inMap.put("key_svc_kei_no_err", template.getString(EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR));
			}
		}
		
		// サービス契約一意照会.ＫＥＹ＿世代登録年月日 → ＫＥＹ＿世代登録年月日 のエラー情報返却
		if (!template.isNull(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM_ERR))
		{
			if (!inMap.containsKey("key_gene_add_dtm_err"))
			{
				inMap.put("key_gene_add_dtm_err", template.getString(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM_ERR));
			}
		}
		
		// サービス契約一意照会.ＫＥＹ＿予約適用年月日 → ＫＥＹ＿予約適用年月日 のエラー情報返却
		if (!template.isNull(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD_ERR))
		{
			if (!inMap.containsKey("key_rsv_aply_ymd_err"))
			{
				inMap.put("key_rsv_aply_ymd_err", template.getString(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD_ERR));
			}
		}
		
		return param;
	}
}
