/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKGetKojiakStatCC
*   ソースファイル名：JKKGetKojiakStatCC.java
*   作成者          ：富士通
*   日付            ：2012年10月01日
*＜機能概要＞
*   工事案件ステータス一覧照会部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00.00    2012/10/01   FJ）松川    新規作成
*   v4.01.00    2012/12/19   FJ）松田    【KAD-2012-0001108】書面での受付番号の申込イメージの紐付けについて
*   v4.02.00    2013/01/18   FJ）渡邉    【ST1-2012-0000846】回線対象サービス契約の終了日判定対応
*   v8.00.00    2014/03/31   FJ）中山    【OM-2014-0001295】住所変更キャンセルのONU対応
**********************************************************************/
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.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKCommonUtil;
import eo.ejb.cbs.cbsmsg.EKK0241B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0241B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0081B050CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0081B050CBSMsg1List;

/**
 * 工事案件ステータス一覧照会部品.
 * <br>
 * @author 富士通
 */
public class JKKGetKojiakStatCC 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 RETURN_CD_NON = "0";
	/** リターンコード */
	private static final String RETURN_CD_ERR_1 = "1";
	/** リターンコード */
	private static final String RETURN_CD_ERR_2 = "2";
	/** リターンコード */
	private static final String RETURN_CD_WARNING = "3";
	
	/**
	 * 工事案件ステータス一覧照会を行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザー固定文字列
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getKojiakStat(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap kojiakStatMap = (HashMap)param.getData(fixedText);
		if (null == kojiakStatMap)
		{
			// 工事案件ステータス一覧照会マップに値が設定されていない場合は処理を行わない。
			return param;
		}
		
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		Map<?, ?> result = null;
		CAANMsg template = null;
		
		// 工事案件ステータス照会作業項目マップの作成
		HashMap mapJKKGetKojiakStatCCWork = new HashMap();
		setWorkMap(mapJKKGetKojiakStatCCWork, kojiakStatMap);
		
		//********************************************************
		// 判定@
		//********************************************************
		String ucwkStat = (String)mapJKKGetKojiakStatCCWork.get("svc_kei_kaisen_ucwk_stat_work");
		// サービス契約回線内訳ステータス判定
		if ((null == ucwkStat || "".equals(ucwkStat))
				|| JKKStrConst.CD00054_210.equals(ucwkStat)
				|| JKKStrConst.CD00054_920.equals(ucwkStat))
		{
			// 取得できないまたは「未使用」または「キャンセル済み」の場合、終了
			setReturnCd(kojiakStatMap, RETURN_CD_ERR_1);
			return param;
		}
		
		//********************************************************
		// 回線対象サービス契約一覧照会
		//********************************************************
		template = editInEKK0241B002(param, fixedText, mapJKKGetKojiakStatCCWork); // 上りマッピング
		result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
		editRetEKK0241B002(result, param, mapJKKGetKojiakStatCCWork, fixedText); // 下りマッピング
		if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
		{ // ステータスが単項目エラー以上であれば例外をスロー
			throw new CCException(SC_ERROR_STRING, new Exception());
		}

		//********************************************************
		// 判定A
		//********************************************************
		ArrayList<HashMap> kojiakStatCCWorkList = (ArrayList<HashMap>)mapJKKGetKojiakStatCCWork.get("JKKGetKojiakStatCCWorkList");
		
		// 対象データ存在しない場合、終了。
		if(0 == kojiakStatCCWorkList.size())
		{
			setReturnCd(kojiakStatMap, RETURN_CD_NON);
			return param;
		}
		
		// 回線対象サービス契約一覧照会明細の件数分処理
		for (HashMap<String, String> workMap : kojiakStatCCWorkList)
		{
			// サービス契約ステータス
			if (!JKKStrConst.CD00037_DSL_ZM.equals((String)workMap.get("svc_kei_stat_work_ki_kei")))
			{
				// 「解約済み」でない場合、終了
				setReturnCd(kojiakStatMap, RETURN_CD_NON);
				return param;
			}
		}
		
		//********************************************************
		// 工事案件ステータス一覧照会（サービス契約）
		//********************************************************
		// 回線対象サービス契約一覧照会明細の件数分処理
		for (HashMap<String, String> workMap : kojiakStatCCWorkList)
		{
			template = editInEKU0081B050(param, fixedText, workMap,
					(String)mapJKKGetKojiakStatCCWork.get("svc_kei_kaisen_ucwk_no_work")); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editRetEKU0081B050(result, param, workMap, fixedText); // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{ // ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
		}
		
		//********************************************************
		// エラー判定
		//********************************************************
		Boolean kojiakSbtFlg = false; // 「撤去(解約)」または「住所変更(撤去)」が1つでもあればTrue
		
		// 回線対象サービス契約一覧照会明細の件数分処理
		for (HashMap workMap : kojiakStatCCWorkList)
		{
			ArrayList<HashMap> kojiakStatWorkList = (ArrayList<HashMap>)workMap.get("KojiakStatWorkList");
			if (null != kojiakStatWorkList)
			{
				// 工事案件一覧照会ワークリストの件数分処理
				for (HashMap kojiakWorkMap :  kojiakStatWorkList)
				{
					// 工事案件種別コード判定
					if (JKKStrConst.CD00577_002.equals((String)kojiakWorkMap.get("kojiak_sbt_cd_work"))
							|| JKKStrConst.CD00577_004.equals((String)kojiakWorkMap.get("kojiak_sbt_cd_work")))
					{
						// 「撤去(解約)」または「住所変更(撤去)」の場合
						// 工事案件ステータス判定
						if (0 >= JKKStrConst.CD00474_140.compareTo((String)kojiakWorkMap.get("kojiak_stat_work")))
						{
							// 1件でも「依頼済み」以上の場合、終了
							setReturnCd(kojiakStatMap, RETURN_CD_ERR_2);
							return param;
						}
						kojiakSbtFlg = true;
					}
				}
			}
		}
		
		if (kojiakSbtFlg)
		{
			// 工事案件種別コードに「撤去(解約)」または「住所変更(撤去)」が1件でも存在する
			// 且つ 工事案件ステータスが「受付済み」以下のみの場合
			setReturnCd(kojiakStatMap, RETURN_CD_WARNING);
		}
		else
		{
			// 工事案件種別コードに「撤去(解約)」または「住所変更(撤去)」が存在しない場合
			setReturnCd(kojiakStatMap, RETURN_CD_ERR_2);
		}
		return param;
	}
	
	/**
	 * 工事案件ステータス照会作業項目マップの設定処理を行います。
	 * <br>
	 * @param workMap 作業項目マップ
	 * @param kojiakStatMap 工事案件ステータスマップ
	 */
	@SuppressWarnings("unchecked")
	private void setWorkMap(HashMap workMap, HashMap kojiakStatMap)
	{
		// サービス契約回線内訳ステータス
		workMap.put("svc_kei_kaisen_ucwk_stat_work", (String)kojiakStatMap.get("svc_kei_kaisen_ucwk_stat"));
		// サービス契約回線内訳番号
		workMap.put("svc_kei_kaisen_ucwk_no_work", (String)kojiakStatMap.get("svc_kei_kaisen_ucwk_no"));
	}
	
	/**
	 * リターンコードの設定処理を行います。
	 * <br>
	 * @param kojiakStatMap 工事案件ステータス照会マップ
	 * @param returnCd リターンコード
	 */
	@SuppressWarnings("unchecked")
	private void setReturnCd(HashMap kojiakStatMap, String returnCd)
	{
		// 工事案件ステータス照会マップ.リターンコード
		kojiakStatMap.put("jkk_get_kojiak_stat_cd", returnCd);
		
	}

	/**
	 * 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 handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws RequestParameterException
	{
		// このCCは先行SCの実行結果をINPUTとして動作するが、getInvokeCBSの段階では実際のデータ取得
		// までは行わないため先行CCの実行結果が取得できない。
		// そのため、このCCは実行されない(実行する必要がないのでBPチェックのマッピング処理をしない)。

		// 0件のCAANMsg配列を返却
		HashMap param4BpChek = new HashMap();
		param4BpChek.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{});
		return param4BpChek;
	}

	/**
	 * 単一CAANMsgのマッピング処理を行います。
	 * <br>
	 * @param paramMap パラメータマップ
	 * @param template CAANMsg
	 * @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 ユーザー固定文字列
	 * @param workMap 作業項目マップ
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0241B002(IRequestParameterReadWrite param, String fixedText, HashMap workMap) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0241B002CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0241B002CBSMsg.TEMPLATEID, "EKK0241B002");

		// 機能コード（デフォルト：１）
		template.set(EKK0241B002CBSMsg.FUNC_CODE, "1");

		// オペレータ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);

		// サービス契約回線内訳番号 → 回線対象サービス契約一覧照会.ＫＥＹ＿サービス契約回線内訳番号
		if (null == workMap || null == workMap.get("svc_kei_kaisen_ucwk_no_work") || "".equals(workMap.get("svc_kei_kaisen_ucwk_no_work")))
		{
			template.setNull(EKK0241B002CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO);
		}
		else
		{
			template.set(EKK0241B002CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, (String)workMap.get("svc_kei_kaisen_ucwk_no_work"));
		}
		
		return template;
	}

	/**
	 * 回線対象サービス契約一覧照会の下りマッピング処理を行います。
	 * <br>
	 * @param msgList メッセージリスト
	 * @param param リクエストパラメータ
	 * @param workMap 作業項目マップ
	 * @param fixedText ユーザー固定文字列
	 * @return リクエストパラメータ
	 * @throws Exception サービス内でエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK0241B002(Map<?, ?> msgList, IRequestParameterReadWrite param, 
			HashMap workMap, String fixedText) throws Exception
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);

		CAANMsg[] templateArray = template.getCAANMsgList(EKK0241B002CBSMsg.EKK0241B002CBSMSG1LIST);
		ArrayList msg1List = (ArrayList)workMap.get("JKKGetKojiakStatCCWorkList");

		if (null == msg1List)
		{
			msg1List = new ArrayList();
			workMap.put("JKKGetKojiakStatCCWorkList", msg1List);
		}
		
		HashMap kojiakStatMap = (HashMap)param.getData(fixedText);
		HashMap<String, String> jiMskmSvcKeiNoList = (HashMap<String, String>)kojiakStatMap.get("ji_mskm_svc_kei_no_list");
		if(JKKCommonUtil.isNull(jiMskmSvcKeiNoList))
		{
			jiMskmSvcKeiNoList = new HashMap<String, String>();
		}
		
		if (null != templateArray)
		{
			int i = 0;
			for (CAANMsg childTemplate : templateArray)
			{
				// キャンセル済は対象外とする。
				if(JKKStrConst.CD00037_CANCEL_ZM.equals(childTemplate.getString(EKK0241B002CBSMsg1List.SVC_KEI_STAT)))
				{
					continue;
				}
				
				// 自申込サービス契約番号リスト内に存在する場合は対象外とする。
				if(jiMskmSvcKeiNoList.containsKey(childTemplate.getString(EKK0241B002CBSMsg1List.SVC_KEI_NO)))
				{
					continue;
				}
				
				if (i >= msg1List.size())
				{
					msg1List.add(new HashMap());
				}
				HashMap childMap = (HashMap)msg1List.get(i);
				i++;
				
				// サービス契約番号 ← 回線対象サービス契約一覧照会.サービス契約番号
				if (childTemplate.isNull(EKK0241B002CBSMsg1List.SVC_KEI_NO))
				{
					childMap.put("svc_kei_no_work_ki_kei", "");
				}
				else
				{
					childMap.put("svc_kei_no_work_ki_kei", childTemplate.getString(EKK0241B002CBSMsg1List.SVC_KEI_NO));
				}
				// サービス契約ステータス ← 回線対象サービス契約一覧照会.サービス契約ステータス
				if (childTemplate.isNull(EKK0241B002CBSMsg1List.SVC_KEI_STAT))
				{
					childMap.put("svc_kei_stat_work_ki_kei", "");
				}
				else
				{
					childMap.put("svc_kei_stat_work_ki_kei", childTemplate.getString(EKK0241B002CBSMsg1List.SVC_KEI_STAT));
				}
			}
		}

		// エラー情報の設定
		editErrInfoEKK0241B002(param, template, (Integer)returnCode, fixedText);

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}

	/**
	 * 工事案件ステータス一覧照会（サービス契約）の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザー小手文字列
	 * @param workMap 作業項目パラメータ
	 * @param svcKeiKaisenUcwkNo サービス契約回線内訳番号
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKU0081B050(IRequestParameterReadWrite param, String fixedText, HashMap workMap,
			String svcKeiKaisenUcwkNo) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKU0081B050CBSMsg.class.getName());

		// テンプレートID
		template.set(EKU0081B050CBSMsg.TEMPLATEID, "EKU0081B050");

		// 機能コード（デフォルト：１）
		template.set(EKU0081B050CBSMsg.FUNC_CODE, "1");

		// オペレータ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);

		// サービス契約番号 → 工事案件ステータス一覧照会（サービス契約）.ＫＥＹ＿サービス契約番号
		if (null == workMap || null == workMap.get("svc_kei_no_work_ki_kei") || "".equals(workMap.get("svc_kei_no_work_ki_kei")))
		{
			template.setNull(EKU0081B050CBSMsg.KEY_SVC_KEI_NO);
		}
		else
		{
			template.set(EKU0081B050CBSMsg.KEY_SVC_KEI_NO, (String)workMap.get("svc_kei_no_work_ki_kei"));
		}

		// サービス契約回線内訳番号 → 工事案件ステータス一覧照会（サービス契約）.ＫＥＹ＿サービス契約回線内訳番号
		if (null == svcKeiKaisenUcwkNo  || "".equals(svcKeiKaisenUcwkNo))
		{
			template.setNull(EKU0081B050CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO);
		}
		else
		{
			template.set(EKU0081B050CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo);
		}
		
		return template;
	}
	
	/**
	 * 工事案件ステータス一覧照会（サービス契約）の下りマッピング処理を行います。
	 * <br>
	 * @param msgList メッセージリスト
	 * @param param リクエストパラメータ
	 * @param workMap 作業項目マップ
	 * @param fixedText ユーザー固定文字列
	 * @return リクエストパラメータ
	 * @throws Exception サービス内でエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKU0081B050(Map<?, ?> msgList, IRequestParameterReadWrite param, 
			HashMap workMap, String fixedText) throws Exception
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);

		CAANMsg[] templateArray = template.getCAANMsgList(EKU0081B050CBSMsg.EKU0081B050CBSMSG1LIST);
		ArrayList msg1List = (ArrayList)workMap.get("KojiakStatWorkList");

		if (null == msg1List)
		{
			msg1List = new ArrayList();
			workMap.put("KojiakStatWorkList", msg1List);
		}

		if (null != templateArray)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];
				if (i >= msg1List.size())
				{
					msg1List.add(new HashMap());
				}
				HashMap childMap = (HashMap)msg1List.get(i);

				// 工事案件種別コード ← 工事案件ステータス一覧照会（サービス契約）.工事案件種別コード
				if (childTemplate.isNull(EKU0081B050CBSMsg1List.KOJIAK_SBT_CD))
				{
					childMap.put("kojiak_sbt_cd_work", "");
				}
				else
				{
					childMap.put("kojiak_sbt_cd_work", childTemplate.getString(EKU0081B050CBSMsg1List.KOJIAK_SBT_CD));
				}
				// 工事案件ステータス ← 工事案件ステータス一覧照会（サービス契約）.工事案件ステータス
				if (childTemplate.isNull(EKU0081B050CBSMsg1List.KOJIAK_STAT))
				{
					childMap.put("kojiak_stat_work", "");
				}
				else
				{
					childMap.put("kojiak_stat_work", childTemplate.getString(EKU0081B050CBSMsg1List.KOJIAK_STAT));
				}
			}
		}

		// エラー情報の設定
		editErrInfoEKU0081B050(param, template, (Integer)returnCode, fixedText);

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}
	
	/**
	 * エラー情報のマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param templates CAANMsg配列
	 * @param returnCode リターンコード
	 * @param fixedText ユーザー固定文字列
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
			throws RequestParameterException
	{
		// getInvokeCBSでBPチェックを行わないので、それに対応するエラーマッピングも行わない。
		return param;
	}

	/**
	 * コントロールマップエラー情報格納処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param itemplateStatus SCの実行ステータス
	 * @param returnCode リターンコード
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	private IRequestParameterReadWrite setControlMapErrInfo(IRequestParameterReadWrite param, int itemplateStatus, int returnCode)
			throws RequestParameterException
	{
		int templateStatus = itemplateStatus;
		
		if (0 != returnCode)
		{
			templateStatus = 9000;
		}
		if (null == JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)))
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (null == obj)
		{
			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 CAANMsg
	 * @param returnCode リターンコード
	 * @param fixedText ユーザー固定文字列
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0241B002(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode, String fixedText)
			throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK0241B002CBSMsg.STATUS), returnCode);

		HashMap inMap = (HashMap)param.getData(fixedText);

		// 回線対象サービス契約一覧照会.サービス契約回線内訳番号 → サービス契約回線内訳番号 のエラー情報返却
		if (!template.isNull(EKK0241B002CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO_ERR))
		{
			if (!inMap.containsKey("key_svc_kei_kaisen_ucwk_no_err"))
			{
				inMap.put("key_svc_kei_kaisen_ucwk_no_err", template.getString(EKK0241B002CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO_ERR));
			}
		}

		return param;
	}
	
	/**
	 * 工事案件ステータス一覧照会（サービス契約）のエラー情報マッピング処理を行います。
	 * <br>
	 * @param iparam リクエストパラメータ
	 * @param template CAANMsg
	 * @param returnCode リターンコード
	 * @param fixedText ユーザー固定文字列
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKU0081B050(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode, String fixedText)
			throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKU0081B050CBSMsg.STATUS), returnCode);

		HashMap inMap = (HashMap)param.getData(fixedText);

		// 工事案件ステータス一覧照会（サービス契約）.ＫＥＹ＿サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却
		if (!template.isNull(EKU0081B050CBSMsg.KEY_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("key_svc_kei_no_err"))
			{
				inMap.put("key_svc_kei_no_err", template.getString(EKU0081B050CBSMsg.KEY_SVC_KEI_NO_ERR));
			}
		}

		// 工事案件ステータス一覧照会（サービス契約）.ＫＥＹ＿サービス契約回線内訳番号 → ＫＥＹ＿サービス契約回線内訳番号 のエラー情報返却
		if (!template.isNull(EKU0081B050CBSMsg.KEY_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("key_svc_kei_kaisen_ucwk_no_err"))
			{
				inMap.put("key_svc_kei_kaisen_ucwk_no_err", template.getString(EKU0081B050CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO_ERR));
			}
		}

		return param;
	}

}
