/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKGetSvcWribCC
 *   ソースファイル名：JKKGetSvcWribCC.java
 *   作成者          ：富士通
 *   日付            ：2011年11月16日
 *＜機能概要＞
 *   割引情報照会コモンコンポーネント部品
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/11/16   FJ）上田    新規作成
 *   v5.00.00    2013/02/28   FJ）多田    【IT1-2013-0000337】割引集約対応
 *   v5.01.00    2013/03/12   FJ) 多田    【IT1-2013-0000428】割引照査済対応
 *   v7.00.00    2013/11/05   FJ) 松田    【ANK-1578-00-00】多機能ルーター(機器追加)
 *   v11.00.00   2014/11/20   FJ) 川島    【ANK-2305-00-00】【MT日割課金】既存のマンションCPの移行対応
 **********************************************************************/
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.JKKCommonUtil;
import eo.ejb.cbs.cbsmsg.EKK0451B507CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451B507CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0481B502CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0481B502CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0841B510CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0841B510CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1351B501CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1351B501CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1391B501CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1391B501CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1401B501CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1401B501CBSMsg1List;

/**
 * 割引情報照会部品
 * <br>
 * @author 富士通
 */
public class JKKGetSvcWribCC 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 = "JKKGetSvcWribCCWork";
	/** 作業マップKEY（割引表示用マップ格納ＫＥＹ） */
	private static final String WORK_AREA_KEY_DSP_WRIB = "WORK_AREA_KEY_DSP_WRIB";
	/** 作業マップKEY（汎用表示用マップ格納ＫＥＹ） */
	private static final String WORK_AREA_KEY_DSP_HANYO = "WORK_AREA_KEY_DSP_HANYO";
	/** 作業マップKEY（割引条件紐付きサービスマップ格納ＫＥＹ） */
	private static final String WORK_AREA_KEY_WRIB_TRGET_SVC = "WORK_AREA_KEY_WRIB_TRGET_SVC";
	/** 作業マップKEY（データ抽出項目コード格納ＫＥＹ） */
	private static final String WORK_AREA_KEY_DCHSKM_CD = "WORK_AREA_KEY_DCHSKM_CD";
	/** 作業マップKEY（汎用条件紐付きサービスマップ格納ＫＥＹ） */
	private static final String WORK_AREA_KEY_HANYO_TRGET_SVC = "WORK_AREA_KEY_HANYO_TRGET_SVC";
	/** 作業マップKEY（割引キャンペーン一覧照会明細マップ格納ＫＥＹ） */
	private static final String WORK_AREA_WRIB_CAMPAIGN = "WORK_AREA_WRIB_CAMPAIGN";
	/** 作業マップKEY（汎用コード一覧照会格納マップＫＥＹ） */
	private static final String WORK_AREA_HANYO_CD = "WORK_AREA_HANYO_CD";
	
	/** ワークエリアの設定項目 */
	private static enum WORK_AREA_ITEM
	{
		/** サービス契約番号 */
		SVC_KEI_NO,
		/** サービス契約内訳番号 */
		SVC_KEI_UCWK_NO,
		/** オプションサービス契約番号 */
		OP_SVC_KEI_NO,
		/** サブオプションサービス契約番号 */
		SBOP_SVC_KEI_NO,
		/** 機器提供サービス契約番号 */
		KKTK_SVC_KEI_NO,
		/** 機器オプションサービス契約番号 */
		KKOP_SVC_KEI_NO;
	}

	/**
	 * 割引情報照会処理を行います。
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getSvcWrib(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		Map<?, ?> result = null;
		CAANMsg template = null;
		ArrayList wribSvcKeiNoList = new ArrayList();
		ArrayList dspCampaignCdList = new ArrayList();
		ArrayList dchskmstNoList = new ArrayList();
		ArrayList dspDchskmCdList = new ArrayList();

		// CCへの入力パラメータ取得
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(fixedText);

		// MapがNULLなら処理終了。
		if(null == ccParam)
		{
			return param;
		}
		
		// 割引キャンペーン一覧照会明細
		template = editInEKK0451B507(param, fixedText); // 上りマッピング
		if (null != template)
		{
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editRetEKK0451B507(result, param, fixedText, wribSvcKeiNoList, dspCampaignCdList); // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{ // ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
		}

		for (String wribSvcKeiNo : (ArrayList<String>)wribSvcKeiNoList)
		{
			// 割引サービス対象契約登録制御用一覧照会
			template = editInEKK0481B502(param, fixedText, wribSvcKeiNo); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editRetEKK0481B502(result, param, fixedText); // 下りマッピング
		}

		for (String dspCampaignCd : (ArrayList<String>)dspCampaignCdList)
		{
			// 割引サービス登録制御一覧照会
			template = editInEKK0841B510(param, fixedText, dspCampaignCd); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editRetEKK0841B510(result, param, fixedText); // 下りマッピング
		}

		// 汎用コード一覧照会
		template = editInEKK1391B501(param, fixedText); // 上りマッピング
		if (null != template)
		{
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editRetEKK1391B501(result, param, fixedText, dchskmstNoList, dspDchskmCdList); // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{ // ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
		}

		for (String dchskmstNo : (ArrayList<String>)dchskmstNoList)
		{
			// データ抽出項目設定対象契約登録制御用一覧照会
			template = editInEKK1401B501(param, fixedText, dchskmstNo); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editRetEKK1401B501(result, param, fixedText); // 下りマッピング
		}

		for (String dspDchskmCd : (ArrayList<String>)dspDchskmCdList)
		{
			// データ抽出項目一覧照会（表示データ抽出項目ＣＤ）
			template = editInEKK1351B501(param, fixedText, dspDchskmCd); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editRetEKK1351B501(result, param, fixedText); // 下りマッピング
		}

		ccParam.put("dspWribList", setDspWribList(param, dspCampaignCdList, WORK_AREA_KEY_DSP_WRIB));
		ccParam.put("dspHanyoList", setDspWribList(param, dspDchskmCdList, WORK_AREA_KEY_DSP_HANYO));

		return param;
	}

	/**
	 * 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;
	}

	/**
	 * 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 = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * コントロールマップエラー情報格納処理を行います。
	 * <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 (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 param
	 * @param fixedText
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0451B507(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0451B507CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0451B507CBSMsg.TEMPLATEID, "EKK0451B507");
		
		// 機能コード（デフォルト：１）
		template.set(EKK0451B507CBSMsg.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);
		
		HashMap inMap = (HashMap)param.getData(fixedText);
		
		// 機能コード
		if (null != inMap)
		{
			template.set(EKK0451B507CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));
		}
		
		HashMap workDataMap1 = (HashMap)param.getData("KKSV007901CC");
		if (null == workDataMap1)
		{
			workDataMap1 = (HashMap)param.getData("KKSV008101CC");
		}
		ArrayList workDataList1 = (ArrayList)workDataMap1.get("mskm_svc_kei_ucwk_list");
		if (null == workDataList1)
		{
			return null;
		}
		
		// 割引情報照会マップ.ＫＥＹ＿SYSID → ＫＥＹ＿SYSID
		if (null == inMap || null == inMap.get("key_sysid") || "".equals(inMap.get("key_sysid")))
		{
			HashMap workDataMap3 = (HashMap)workDataList1.get(0);
			String sysid = (String)workDataMap3.get("sysid");
			if ("".equals(sysid) || null == sysid)
			{
				template.setNull(EKK0451B507CBSMsg.KEY_SYSID);
			}
			else
			{
				template.set(EKK0451B507CBSMsg.KEY_SYSID, sysid);
			}
		}
		else
		{
			template.set(EKK0451B507CBSMsg.KEY_SYSID, (String)inMap.get("key_sysid"));
		}
		
		// 申込明細番号の取得
		HashMap workDataMap2 = (HashMap)workDataList1.get(0);
		ArrayList workDataList = (ArrayList)workDataMap2.get("mskm_dtl_list");
		StringBuffer mskmDtlNoBuffer = new StringBuffer();
		if (null != workDataList)
		{
			for (int i = 0; i < workDataList.size(); i++)
			{
				if (0 < i)
				{
					mskmDtlNoBuffer.append(",");
				}
				Map map = (Map)workDataList.get(i);
				mskmDtlNoBuffer.append(map.get("mskm_dtl_no"));
			}
		}
		
		// 割引情報照会マップ.ＫＥＹ＿申込明細番号 → ＫＥＹ＿申込明細番号
		if (null == mskmDtlNoBuffer || "".equals(mskmDtlNoBuffer.toString()))
		{
			template.setNull(EKK0451B507CBSMsg.KEY_MSKM_DTL_NO);
		}
		else
		{
			template.set(EKK0451B507CBSMsg.KEY_MSKM_DTL_NO, mskmDtlNoBuffer.toString());
		}

		return template;
	}

	/**
	 * 割引キャンペーン一覧照会明細の下りマッピング処理を行います。
	 * <br>
	 * @param msgList
	 * @param param
	 * @param fixedText
	 * @param wribSvcKeiNoList 割引サービス契約番号格納リスト
	 * @param dspCampaignCdList 表示用キャンペーンコードリスト
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK0451B507(
			Map<?, ?> msgList,
			IRequestParameterReadWrite param,
			String fixedText,
			ArrayList wribSvcKeiNoList,
			ArrayList dspCampaignCdList) throws Exception
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (null == workMap)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}

		HashMap wribWorkAreaMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		if (wribWorkAreaMap == null)
		{
			wribWorkAreaMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME, wribWorkAreaMap);
		}

		HashMap workAreaWribCampaign = (HashMap)wribWorkAreaMap.get(WORK_AREA_WRIB_CAMPAIGN);
		if (workAreaWribCampaign == null)
		{
			workAreaWribCampaign = new HashMap();
			wribWorkAreaMap.put(WORK_AREA_WRIB_CAMPAIGN, workAreaWribCampaign);
		}

		HashMap dataMap = (HashMap)param.getData(fixedText);
		if (null == dataMap)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}
		
		CAANMsg[] templateArray = template.getCAANMsgList(EKK0451B507CBSMsg.EKK0451B507CBSMSG1LIST);
		ArrayList dataList = (ArrayList)dataMap.get("EKK0451B507CBSMsg1List");

		if (null == dataList)
		{
			dataList = new ArrayList();
		}
		
		if (null != templateArray && 0 != templateArray.length)
		{
			int optSize = dataList.size();
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];
				if (i + optSize >= dataList.size())
				{
					dataList.add(new HashMap());
				}
				
				HashMap childDataMap = (HashMap)dataList.get(i + optSize);

				// 割引サービス契約番号
				setOutData(childDataMap, "wrib_svc_kei_no", childTemplate, EKK0451B507CBSMsg1List.WRIB_SVC_KEI_NO);
				// 割引サービスコード
				setOutData(childDataMap, "wrib_svc_cd", childTemplate, EKK0451B507CBSMsg1List.WRIB_SVC_CD);
				// 申込明細番号
				setOutData(childDataMap, "mskm_dtl_no", childTemplate, EKK0451B507CBSMsg1List.MSKM_DTL_NO);
				// 異動区分
				setOutData(childDataMap, "ido_div", childTemplate, EKK0451B507CBSMsg1List.IDO_DIV);
				// 割引登録契機コード
				setOutData(childDataMap, "wrib_add_opty_cd", childTemplate, EKK0451B507CBSMsg1List.WRIB_ADD_OPTY_CD);
				// 割引サービス種別コード
				setOutData(childDataMap, "wrib_svc_sbt_cd", childTemplate, EKK0451B507CBSMsg1List.WRIB_SVC_SBT_CD);
				// 割引タイプコード
				setOutData(childDataMap, "wrib_type_cd", childTemplate, EKK0451B507CBSMsg1List.WRIB_TYPE_CD);
				// 表示用キャンペーンコード
				setOutData(childDataMap, "dsp_campaign_cd", childTemplate, EKK0451B507CBSMsg1List.DSP_CAMPAIGN_CD);
				// 割引サービス名
				setOutData(childDataMap, "wrib_svc_nm", childTemplate, EKK0451B507CBSMsg1List.WRIB_SVC_NM);
				// 受付開始年月日時分
				setOutData(childDataMap, "uk_sta_ymdhm", childTemplate, EKK0451B507CBSMsg1List.UK_STA_YMDHM);
				// 受付終了年月日時分
				setOutData(childDataMap, "uk_end_ymdhm", childTemplate, EKK0451B507CBSMsg1List.UK_END_YMDHM);
				// 割引登録条件コード
				setOutData(childDataMap, "wrib_add_joken_cd", childTemplate, EKK0451B507CBSMsg1List.WRIB_ADD_JOKEN_CD);

				if (!wribSvcKeiNoList.contains(childTemplate.getString(EKK0451B507CBSMsg1List.WRIB_SVC_KEI_NO)))
				{
					wribSvcKeiNoList.add(childTemplate.getString(EKK0451B507CBSMsg1List.WRIB_SVC_KEI_NO));
				}

				if (!dspCampaignCdList.contains(childTemplate.getString(EKK0451B507CBSMsg1List.DSP_CAMPAIGN_CD)))
				{
					dspCampaignCdList.add(childTemplate.getString(EKK0451B507CBSMsg1List.DSP_CAMPAIGN_CD));
				}

				// ワークに格納
				HashMap wribSvcMap = new HashMap();
				wribSvcMap.put("mskm_dtl_no", childTemplate.getString(EKK0451B507CBSMsg1List.MSKM_DTL_NO));
				wribSvcMap.put("wrib_add_opty_cd", childTemplate.getString(EKK0451B507CBSMsg1List.WRIB_ADD_OPTY_CD));
				workAreaWribCampaign.put(childTemplate.getString(EKK0451B507CBSMsg1List.WRIB_SVC_CD), wribSvcMap);
			}
		}

		dataMap.put("EKK0451B507CBSMsg1List", dataList);
		
		// エラー情報の設定
		editErrInfoEKK0451B507(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 iparam
	 * @param template
	 * @param returnCode
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0451B507(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode, String fixedText)
			throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK0451B507CBSMsg.STATUS), returnCode);
		
		HashMap inMap = (HashMap)param.getData(fixedText);
		
		// ＫＥＹ＿SYSID のエラー情報返却
		if (!template.isNull(EKK0451B507CBSMsg.KEY_SYSID_ERR))
		{
			if (!inMap.containsKey("key_sysid_err"))
			{
				inMap.put("key_sysid_err", template.getString(EKK0451B507CBSMsg.KEY_SYSID_ERR));
			}
		}
		
		// ＫＥＹ＿申込明細番号 のエラー情報返却
		if (!template.isNull(EKK0451B507CBSMsg.KEY_MSKM_DTL_NO_ERR))
		{
			if (!inMap.containsKey("key_mskm_dtl_no_err"))
			{
				inMap.put("key_mskm_dtl_no_err", template.getString(EKK0451B507CBSMsg.KEY_MSKM_DTL_NO_ERR));
			}
		}
		
		return param;
	}
	
	/**
	 * 汎用コード一覧照会の上りマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param svcKeiMap
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK1391B501(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK1391B501CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK1391B501CBSMsg.TEMPLATEID, "EKK1391B501");
		
		// 機能コード（デフォルト：１）
		template.set(EKK1391B501CBSMsg.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);
		
		HashMap inMap = (HashMap)param.getData(fixedText);
		
		// 機能コード
		if (null != inMap)
		{
			template.set(EKK1391B501CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));
		}
		
		HashMap workDataMap1 = (HashMap)param.getData("KKSV007901CC");
		if (null == workDataMap1)
		{
			workDataMap1 = (HashMap)param.getData("KKSV008101CC");
		}
		ArrayList workDataList1 = (ArrayList)workDataMap1.get("mskm_svc_kei_ucwk_list");
		if (null == workDataList1)
		{
			return null;
		}
		
		// 割引情報照会マップ.ＫＥＹ＿SYSID → ＫＥＹ＿SYSID
		if (null == inMap || null == inMap.get("key_sysid") || "".equals(inMap.get("key_sysid")))
		{
			HashMap workDataMap3 = (HashMap)workDataList1.get(0);
			String sysid = (String)workDataMap3.get("sysid");
			if ("".equals(sysid) || null == sysid)
			{
				template.setNull(EKK1391B501CBSMsg.KEY_SYSID);
			}
			else
			{
				template.set(EKK1391B501CBSMsg.KEY_SYSID, sysid);
			}
		}
		else
		{
			template.set(EKK1391B501CBSMsg.KEY_SYSID, (String)inMap.get("key_sysid"));
		}
		
		// 申込明細番号の取得
		HashMap workDataMap2 = (HashMap)workDataList1.get(0);
		ArrayList workDataList = (ArrayList)workDataMap2.get("mskm_dtl_list");
		StringBuffer mskmDtlNoBuffer = new StringBuffer();
		for (int i = 0; i < workDataList.size(); i++)
		{
			if (0 < i)
			{
				mskmDtlNoBuffer.append(",");
			}
			Map map = (Map)workDataList.get(i);
			mskmDtlNoBuffer.append(map.get("mskm_dtl_no"));
		}
		
		// 割引情報照会マップ.ＫＥＹ＿申込明細番号 → ＫＥＹ＿申込明細番号
		if (null == mskmDtlNoBuffer || "".equals(mskmDtlNoBuffer.toString()))
		{
			template.setNull(EKK1391B501CBSMsg.KEY_MSKM_DTL_NO);
		}
		else
		{
			template.set(EKK1391B501CBSMsg.KEY_MSKM_DTL_NO, mskmDtlNoBuffer.toString());
		}
		
		return template;
	}

	/**
	 * 汎用コード一覧照会の下りマッピング処理を行います。
	 * <br>
	 * @param msgList
	 * @param param
	 * @param fixedText
	 * @param dchskmstNoList データ抽出項目設定番号格納リスト
	 * @param dspDchskmCdList 表示用データ抽出項目コードリスト
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK1391B501(
			Map<?, ?> msgList,
			IRequestParameterReadWrite param,
			String fixedText,
			ArrayList dchskmstNoList,
			ArrayList dspDchskmCdList) throws Exception
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (null == workMap)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}

		HashMap wribWorkAreaMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		if (wribWorkAreaMap == null)
		{
			wribWorkAreaMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME, wribWorkAreaMap);
		}

		HashMap workDchskmCdMap = (HashMap)wribWorkAreaMap.get(WORK_AREA_KEY_DCHSKM_CD);
		if (workDchskmCdMap == null)
		{
			workDchskmCdMap = new HashMap();
			wribWorkAreaMap.put(WORK_AREA_KEY_DCHSKM_CD, workDchskmCdMap);
		}

		HashMap workAreaHanyoCdMap = (HashMap)wribWorkAreaMap.get(WORK_AREA_HANYO_CD);
		if (workAreaHanyoCdMap == null)
		{
			workAreaHanyoCdMap = new HashMap();
			wribWorkAreaMap.put(WORK_AREA_HANYO_CD, workAreaHanyoCdMap);
		}

		HashMap dataMap = (HashMap)param.getData(fixedText);
		if (null == dataMap)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}
		
		CAANMsg[] templateArray = template.getCAANMsgList(EKK1391B501CBSMsg.EKK1391B501CBSMSG1LIST);
		ArrayList dataList = (ArrayList)dataMap.get("EKK1391B501CBSMsg1List");

		if (null == dataList)
		{
			dataList = new ArrayList();
		}
		
		if (null != templateArray && 0 != templateArray.length)
		{
			int optSize = dataList.size();
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];
				if (i + optSize >= dataList.size())
				{
					dataList.add(new HashMap());
				}

				HashMap childDataMap = (HashMap)dataList.get(i + optSize);

				// データ抽出項目設定番号
				setOutData(childDataMap, "dchskmst_no", childTemplate, EKK1391B501CBSMsg1List.DCHSKMST_NO);
				// データ抽出項目コード
				setOutData(childDataMap, "dchskm_cd", childTemplate, EKK1391B501CBSMsg1List.DCHSKM_CD);
				// 申込明細番号
				setOutData(childDataMap, "mskm_dtl_no", childTemplate, EKK1391B501CBSMsg1List.MSKM_DTL_NO);
				// 異動区分
				setOutData(childDataMap, "ido_div", childTemplate, EKK1391B501CBSMsg1List.IDO_DIV);
				// データ抽出項目設定登録契機コード
				setOutData(childDataMap, "dchskmst_add_opty_cd", childTemplate, EKK1391B501CBSMsg1List.DCHSKMST_ADD_OPTY_CD);
				// 表示用データ抽出項目コード
				setOutData(childDataMap, "dsp_dchskm_cd", childTemplate, EKK1391B501CBSMsg1List.DSP_DCHSKM_CD);
				// データ抽出項目名
				setOutData(childDataMap, "dchskm_nm", childTemplate, EKK1391B501CBSMsg1List.DCHSKM_NM);
				// 設定可能開始年月日時分
				setOutData(childDataMap, "set_psb_sta_ymdhm", childTemplate, EKK1391B501CBSMsg1List.SET_PSB_STA_YMDHM);
				// 設定可能終了年月日時分
				setOutData(childDataMap, "set_psb_end_ymdhm", childTemplate, EKK1391B501CBSMsg1List.SET_PSB_END_YMDHM);
				// データ抽出登録条件コード
				setOutData(childDataMap, "dchs_add_joken_cd", childTemplate, EKK1391B501CBSMsg1List.DCHS_ADD_JOKEN_CD);
				// データ抽出タイプコード
				setOutData(childDataMap, "dchs_type_cd", childTemplate, EKK1391B501CBSMsg1List.DCHS_TYPE_CD);

				if (!dchskmstNoList.contains(childTemplate.getString(EKK1391B501CBSMsg1List.DCHSKMST_NO)))
				{
					dchskmstNoList.add(childTemplate.getString(EKK1391B501CBSMsg1List.DCHSKMST_NO));
				}

				if (!dspDchskmCdList.contains(childTemplate.getString(EKK1391B501CBSMsg1List.DSP_DCHSKM_CD)))
				{
					dspDchskmCdList.add(childTemplate.getString(EKK1391B501CBSMsg1List.DSP_DCHSKM_CD));
				}

				// ワークにデータ抽出項目コード
				workDchskmCdMap.put(childTemplate.getString(EKK1391B501CBSMsg1List.DCHSKMST_NO),
						childTemplate.getString(EKK1391B501CBSMsg1List.DCHSKM_CD));

				// ワークに格納
				HashMap dchskmCdMap = new HashMap();
				// 申込明細番号
				dchskmCdMap.put("mskm_dtl_no", childTemplate.getString(EKK1391B501CBSMsg1List.MSKM_DTL_NO));
				// データ抽出項目設定登録契機コード
				dchskmCdMap.put("dchskmst_add_opty_cd", childTemplate.getString(EKK1391B501CBSMsg1List.DCHSKMST_ADD_OPTY_CD));
				workAreaHanyoCdMap.put(childTemplate.getString(EKK1391B501CBSMsg1List.DCHSKM_CD), dchskmCdMap);
			}
		}
		dataMap.put("EKK1391B501CBSMsg1List", dataList);
		
		// エラー情報の設定
		editErrInfoEKK1391B501(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 iparam
	 * @param template
	 * @param returnCode
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK1391B501(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode, String fixedText)
			throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK1391B501CBSMsg.STATUS), returnCode);
		
		HashMap inMap = (HashMap)param.getData(fixedText);
		
		// ＫＥＹ＿SYSID のエラー情報返却
		if (!template.isNull(EKK1391B501CBSMsg.KEY_SYSID_ERR))
		{
			if (!inMap.containsKey("key_sysid_err"))
			{
				inMap.put("key_sysid_err", template.getString(EKK1391B501CBSMsg.KEY_SYSID_ERR));
			}
		}
		
		// ＫＥＹ＿申込明細番号 のエラー情報返却
		if (!template.isNull(EKK1391B501CBSMsg.KEY_MSKM_DTL_NO_ERR))
		{
			if (!inMap.containsKey("key_mskm_dtl_no_err"))
			{
				inMap.put("key_mskm_dtl_no_err", template.getString(EKK1391B501CBSMsg.KEY_MSKM_DTL_NO_ERR));
			}
		}
		
		return param;
	}

	/**
	 * 割引サービス対象契約登録制御用一覧照会の上りマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param wribSvcKeiNo 割引サービス契約番号
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0481B502(IRequestParameterReadWrite param, String fixedText, String wribSvcKeiNo) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0481B502CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0481B502CBSMsg.TEMPLATEID, "EKK0481B502");
		
		// 機能コード（デフォルト：１）
		template.set(EKK0481B502CBSMsg.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);
		
		HashMap inMap = (HashMap)param.getData(fixedText);
		
		// 機能コード
		if (null != inMap)
		{
			template.set(EKK0481B502CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));
		}

		// ＫＥＹ＿割引サービス契約番号
		if (wribSvcKeiNo == null)
		{
			template.setNull(EKK0481B502CBSMsg.KEY_WRIB_SVC_KEI_NO);
		}
		else
		{
			template.set(EKK0481B502CBSMsg.KEY_WRIB_SVC_KEI_NO, wribSvcKeiNo);
		}

		return template;
	}

	/**
	 * 割引サービス対象契約登録制御用一覧照会明細の下りマッピング処理を行います。
	 * <br>
	 * @param msgList
	 * @param param
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK0481B502(Map<?, ?> msgList, IRequestParameterReadWrite param, 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);
		
		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (null == workMap)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}

		HashMap dataMap = (HashMap)param.getData(fixedText);
		if (null == dataMap)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}
		
		CAANMsg[] templateArray = template.getCAANMsgList(EKK0481B502CBSMsg.EKK0481B502CBSMSG1LIST);
		ArrayList dataList = (ArrayList)dataMap.get("EKK0481B502CBSMsg1List");

		if (null == dataList)
		{
			dataList = new ArrayList();
		}
		
		if (null != templateArray && 0 != templateArray.length)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];
				HashMap childDataMap = new HashMap();
				dataList.add(childDataMap);

				// 割引サービス契約番号
				setOutData(childDataMap, "wrib_svc_kei_no", childTemplate, EKK0481B502CBSMsg1List.WRIB_SVC_KEI_NO);
				// サービス契約番号
				setOutData(childDataMap, "svc_kei_no", childTemplate, EKK0481B502CBSMsg1List.SVC_KEI_NO);
				// サービス契約内訳番号
				setOutData(childDataMap, "svc_kei_ucwk_no", childTemplate, EKK0481B502CBSMsg1List.SVC_KEI_UCWK_NO);
				// オプションサービス契約番号
				setOutData(childDataMap, "op_svc_kei_no", childTemplate, EKK0481B502CBSMsg1List.OP_SVC_KEI_NO);
				// サブオプションサービス契約番号
				setOutData(childDataMap, "sbop_svc_kei_no", childTemplate, EKK0481B502CBSMsg1List.SBOP_SVC_KEI_NO);
				// 機器提供サービス契約番号
				setOutData(childDataMap, "kktk_svc_kei_no", childTemplate, EKK0481B502CBSMsg1List.KKTK_SVC_KEI_NO);
				// 機器オプションサービス契約番号
				setOutData(childDataMap, "kkop_svc_kei_no", childTemplate, EKK0481B502CBSMsg1List.KKOP_SVC_KEI_NO);
				// 請求オプションサービス契約番号
				setOutData(childDataMap, "seiopsvc_kei_no", childTemplate, EKK0481B502CBSMsg1List.SEIOPSVC_KEI_NO);
				// 更新年月日時分秒（更新前）
				setOutData(childDataMap, "upd_dtm_bf", childTemplate, EKK0481B502CBSMsg1List.UPD_DTM_BF);

				// ワークエリアに割引サービス対象サービスコードに紐づくサービス契約番号を格納する
				setWorkWribTrgetSvc(param, childTemplate.getString(
						EKK0481B502CBSMsg1List.WRIB_SVC_TRGT_SVC_CD), childTemplate.getString(EKK0481B502CBSMsg1List.SVC_KEI_NO),
						WORK_AREA_ITEM.SVC_KEI_NO);
				// ワークエリアに割引サービス対象サービスコードに紐づくサービス契約内訳番号を格納する
				setWorkWribTrgetSvc(param, childTemplate.getString(
						EKK0481B502CBSMsg1List.WRIB_SVC_TRGT_SVC_CD), childTemplate.getString(EKK0481B502CBSMsg1List.SVC_KEI_UCWK_NO),
						WORK_AREA_ITEM.SVC_KEI_UCWK_NO);
				// ワークエリアに割引サービス対象サービスコードに紐づくオプションサービス契約番号を格納する
				setWorkWribTrgetSvc(param, childTemplate.getString(
						EKK0481B502CBSMsg1List.WRIB_SVC_TRGT_SVC_CD), childTemplate.getString(EKK0481B502CBSMsg1List.OP_SVC_KEI_NO),
						WORK_AREA_ITEM.OP_SVC_KEI_NO);
				// ワークエリアに割引サービス対象サービスコードに紐づくサブオプションサービス契約番号を格納する
				setWorkWribTrgetSvc(param, childTemplate.getString(
						EKK0481B502CBSMsg1List.WRIB_SVC_TRGT_SVC_CD), childTemplate.getString(EKK0481B502CBSMsg1List.SBOP_SVC_KEI_NO),
						WORK_AREA_ITEM.SBOP_SVC_KEI_NO);
				// ワークエリアに割引サービス対象サービスコードに紐づく機器提供サービス契約番号を格納する
				setWorkWribTrgetSvc(param, childTemplate.getString(
						EKK0481B502CBSMsg1List.WRIB_SVC_TRGT_SVC_CD), childTemplate.getString(EKK0481B502CBSMsg1List.KKTK_SVC_KEI_NO),
						WORK_AREA_ITEM.KKTK_SVC_KEI_NO);
				// ワークエリアに割引サービス対象サービスコードに紐づく機器オプションサービス契約番号を格納する
				setWorkWribTrgetSvc(param, childTemplate.getString(
						EKK0481B502CBSMsg1List.WRIB_SVC_TRGT_SVC_CD), childTemplate.getString(EKK0481B502CBSMsg1List.KKOP_SVC_KEI_NO),
						WORK_AREA_ITEM.KKOP_SVC_KEI_NO);
			}
		}

		dataMap.put("EKK0481B502CBSMsg1List", dataList);
		
		// エラー情報の設定
		editErrInfoEKK0481B502(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 iparam
	 * @param template
	 * @param returnCode
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0481B502(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode, String fixedText)
			throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK0481B502CBSMsg.STATUS), returnCode);
		
		HashMap dataMap = (HashMap)param.getData(fixedText);
		ArrayList dataList = (ArrayList)dataMap.get("EKK0481B502ERRLIST");

		if (dataList == null)
		{
			dataList = new ArrayList();
			dataMap.put("EKK0481B502ERRLIST", dataList);
		}

		HashMap errMap = new HashMap();
		dataList.add(errMap);

		// ＫＥＹ＿割引サービス契約番号
		setErrInfo(errMap, "key_wrib_svc_kei_no", template, EKK0481B502CBSMsg.KEY_WRIB_SVC_KEI_NO);
		// ＫＥＹ＿割引サービス契約番号エラー
		setErrInfo(errMap, "key_wrib_svc_kei_no_err", template, EKK0481B502CBSMsg.KEY_WRIB_SVC_KEI_NO_ERR);

		return param;
	}

	/**
	 * データ抽出項目設定対象契約登録制御用一覧照会の上りマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param dchskmstNo データ抽出項目設定番号
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK1401B501(IRequestParameterReadWrite param, String fixedText, String dchskmstNo) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK1401B501CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK1401B501CBSMsg.TEMPLATEID, "EKK1401B501");
		
		// 機能コード（デフォルト：１）
		template.set(EKK1401B501CBSMsg.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);
		
		HashMap inMap = (HashMap)param.getData(fixedText);
		
		// 機能コード
		if (null != inMap)
		{
			template.set(EKK1401B501CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));
		}

		// ＫＥＹ＿データ抽出項目設定番号
		if (dchskmstNo == null)
		{
			template.setNull(EKK1401B501CBSMsg.KEY_DCHSKMST_NO);
		}
		else
		{
			template.set(EKK1401B501CBSMsg.KEY_DCHSKMST_NO, dchskmstNo);
		}

		return template;
	}

	/**
	 * データ抽出項目設定対象契約登録制御用一覧照会明細の下りマッピング処理を行います。
	 * <br>
	 * @param msgList
	 * @param param
	 * param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK1401B501(Map<?, ?> msgList, IRequestParameterReadWrite param, 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);
		
		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (null == workMap)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}

		HashMap wribWorkAreaMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		if (wribWorkAreaMap == null)
		{
			wribWorkAreaMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME, wribWorkAreaMap);
		}

		HashMap workDchskmCdMap = (HashMap)wribWorkAreaMap.get(WORK_AREA_KEY_DCHSKM_CD);
		if (workDchskmCdMap == null)
		{
			workDchskmCdMap = new HashMap();
			wribWorkAreaMap.put(WORK_AREA_KEY_DCHSKM_CD, workDchskmCdMap);
		}

		HashMap workHanyoTrgetMap = (HashMap)wribWorkAreaMap.get(WORK_AREA_KEY_HANYO_TRGET_SVC);
		if (workHanyoTrgetMap == null)
		{
			workHanyoTrgetMap = new HashMap();
			wribWorkAreaMap.put(WORK_AREA_KEY_HANYO_TRGET_SVC, workHanyoTrgetMap);
		}

		HashMap dataMap = (HashMap)param.getData(fixedText);
		if (null == dataMap)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}
		
		CAANMsg[] templateArray = template.getCAANMsgList(EKK1401B501CBSMsg.EKK1401B501CBSMSG1LIST);
		ArrayList dataList = (ArrayList)dataMap.get("EKK1401B501CBSMsg1List");

		if (null == dataList)
		{
			dataList = new ArrayList();
		}
		
		if (null != templateArray && 0 != templateArray.length)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];
				HashMap childDataMap = new HashMap();
				dataList.add(childDataMap);

				// データ抽出項目設定番号
				setOutData(childDataMap, "dchskmst_no", childTemplate, EKK1401B501CBSMsg1List.DCHSKMST_NO);
				// データ抽出項目設定対象契約番号
				setOutData(childDataMap, "dchskmst_tg_kei_no", childTemplate, EKK1401B501CBSMsg1List.DCHSKMST_TG_KEI_NO);
				// 対象契約識別コード
				setOutData(childDataMap, "tg_kei_skbt_cd", childTemplate, EKK1401B501CBSMsg1List.TG_KEI_SKBT_CD);
				// サービス契約番号
				setOutData(childDataMap, "svc_kei_no", childTemplate, EKK1401B501CBSMsg1List.SVC_KEI_NO);
				// サービス契約内訳番号
				setOutData(childDataMap, "svc_kei_ucwk_no", childTemplate, EKK1401B501CBSMsg1List.SVC_KEI_UCWK_NO);
				// オプションサービス契約番号
				setOutData(childDataMap, "op_svc_kei_no", childTemplate, EKK1401B501CBSMsg1List.OP_SVC_KEI_NO);
				// サブオプションサービス契約番号
				setOutData(childDataMap, "sbop_svc_kei_no", childTemplate, EKK1401B501CBSMsg1List.SBOP_SVC_KEI_NO);
				// 機器提供サービス契約番号
				setOutData(childDataMap, "kktk_svc_kei_no", childTemplate, EKK1401B501CBSMsg1List.KKTK_SVC_KEI_NO);
				// 請求オプションサービス契約番号
				setOutData(childDataMap, "seiopsvc_kei_no", childTemplate, EKK1401B501CBSMsg1List.SEIOPSVC_KEI_NO);
				// データ抽出項目設定対象契約適用開始年月日
				setOutData(childDataMap, "dchskmst_tg_kei_tstaymd", childTemplate, EKK1401B501CBSMsg1List.DCHSKMST_TG_KEI_TSTAYMD);
				// データ抽出項目設定対象契約適用終了年月日
				setOutData(childDataMap, "dchskmst_tg_kei_tendymd", childTemplate, EKK1401B501CBSMsg1List.DCHSKMST_TG_KEI_TENDYMD);
				// 更新年月日時分秒（更新前）
				setOutData(childDataMap, "upd_dtm_bf", childTemplate, EKK1401B501CBSMsg1List.UPD_DTM_BF);

				String dchskmstCd = (String)workDchskmCdMap.get(childTemplate.getString(EKK1401B501CBSMsg1List.DCHSKMST_NO));
				String allSvcKeiNo = (String)workHanyoTrgetMap.get(dchskmstCd);
				if (allSvcKeiNo == null || "".equals(allSvcKeiNo))
				{
					workHanyoTrgetMap.put(dchskmstCd, childTemplate.getString(EKK1401B501CBSMsg1List.SVC_KEI_NO));
				}
				else
				{
					allSvcKeiNo = setAllSvcKeiNo(allSvcKeiNo, childTemplate.getString(EKK1401B501CBSMsg1List.SVC_KEI_NO));
					workHanyoTrgetMap.put(dchskmstCd, allSvcKeiNo);
				}
			}
		}

		dataMap.put("EKK1401B501CBSMsg1List", dataList);
		
		// エラー情報の設定
		editErrInfoEKK1401B501(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 iparam
	 * @param template
	 * @param returnCode
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK1401B501(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode, String fixedText)
			throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK1401B501CBSMsg.STATUS), returnCode);

		HashMap dataMap = (HashMap)param.getData(fixedText);
		ArrayList dataList = (ArrayList)dataMap.get("EKK1401B501ERRLIST");

		if (dataList == null)
		{
			dataList = new ArrayList();
			dataMap.put("EKK1401B501ERRLIST", dataList);
		}

		HashMap errMap = new HashMap();
		dataList.add(errMap);

		// ＫＥＹ＿データ抽出項目設定番号
		setErrInfo(errMap, "key_wrib_svc_kei_no", template, EKK1401B501CBSMsg.KEY_DCHSKMST_NO);
		// ＫＥＹ＿データ抽出項目設定番号エラー
		setErrInfo(errMap, "key_wrib_svc_kei_no_err", template, EKK1401B501CBSMsg.KEY_DCHSKMST_NO_ERR);

		return param;
	}

	/**
	 * ユーザデータ情報に値を設定します。<br>
	 * 　※CAANMsg内のデータがNullの場合、空文字を設定します。<br>
	 * @param dataMap ユーザデータ情報
	 * @param setKey ユーザデータ情報に設定するキー名
	 * @param template メッセージキャリア
	 * @param getKey メッセージキャリアより取得するキー名
	 */
	private void setOutData(HashMap<String, Object> dataMap, String setKey, CAANMsg template, String getKey)
	{
		if (template.isNull(getKey))
		{
			dataMap.put(setKey, "");
		}
		else
		{
			dataMap.put(setKey, template.getString(getKey));
		}
	}

	/**
	 * 割引サービス登録制御一覧照会の上りマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param dspCampaignCd 表示用キャンペーンコード
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0841B510(IRequestParameterReadWrite param, String fixedText, String dspCampaignCd) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0841B510CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK0841B510CBSMsg.TEMPLATEID, "EKK0841B510");
		
		// 機能コード（デフォルト：１）
		template.set(EKK0841B510CBSMsg.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);
		
		HashMap inMap = (HashMap)param.getData(fixedText);
		
		// 機能コード
		if (null != inMap)
		{
			template.set(EKK0841B510CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));
		}

		// ＫＥＹ＿表示用キャンペーンコード
		if (dspCampaignCd == null)
		{
			template.setNull(EKK0841B510CBSMsg.KEY_DSP_CAMPAIGN_CD);
		}
		else
		{
			template.set(EKK0841B510CBSMsg.KEY_DSP_CAMPAIGN_CD, dspCampaignCd);
		}

		return template;
	}

	/**
	 * 割引サービス登録制御一覧照会明細の下りマッピング処理を行います。
	 * <br>
	 * @param msgList
	 * @param param
	 * param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK0841B510(Map<?, ?> msgList, IRequestParameterReadWrite param, 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);
		
		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (null == workMap)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}

		HashMap wribWorkAreaMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		if (wribWorkAreaMap == null)
		{
			wribWorkAreaMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME, wribWorkAreaMap);
		}

		HashMap workDspWribMap = (HashMap)wribWorkAreaMap.get(WORK_AREA_KEY_DSP_WRIB);
		if (workDspWribMap == null)
		{
			workDspWribMap = new HashMap();
			wribWorkAreaMap.put(WORK_AREA_KEY_DSP_WRIB, workDspWribMap);
		}

		HashMap workTrgetSvcMap = (HashMap)wribWorkAreaMap.get(WORK_AREA_KEY_WRIB_TRGET_SVC);
		if (workTrgetSvcMap == null)
		{
			workTrgetSvcMap = new HashMap();
			wribWorkAreaMap.put(WORK_AREA_KEY_WRIB_TRGET_SVC, workTrgetSvcMap);
		}

		HashMap workAreaWribCampaign = (HashMap)wribWorkAreaMap.get(WORK_AREA_WRIB_CAMPAIGN);
		if (workAreaWribCampaign == null)
		{
			workAreaWribCampaign = new HashMap();
			wribWorkAreaMap.put(WORK_AREA_WRIB_CAMPAIGN, workAreaWribCampaign);
		}

		HashMap dataMap = (HashMap)param.getData(fixedText);
		if (null == dataMap)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}
		
		CAANMsg[] templateArray = template.getCAANMsgList(EKK0841B510CBSMsg.EKK0841B510CBSMSG1LIST);
		ArrayList dataList = (ArrayList)dataMap.get("wribCtrlList");

		if (null == dataList)
		{
			dataList = new ArrayList();
		}
		
		if (null != templateArray && 0 != templateArray.length)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];
				HashMap childDataMap = new HashMap();
				dataList.add(childDataMap);

				// 割引サービスコード
				setOutData(childDataMap, "wrib_svc_cd", childTemplate, EKK0841B510CBSMsg1List.WRIB_SVC_CD);
				// 割引サービス種別コード
				setOutData(childDataMap, "wrib_svc_sbt_cd", childTemplate, EKK0841B510CBSMsg1List.WRIB_SVC_SBT_CD);
				// 割引タイプコード
				setOutData(childDataMap, "wrib_type_cd", childTemplate, EKK0841B510CBSMsg1List.WRIB_TYPE_CD);
				// 表示用キャンペーンコード
				setOutData(childDataMap, "dsp_campaign_cd", childTemplate, EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD);
				// 割引サービス名
				setOutData(childDataMap, "wrib_svc_nm", childTemplate, EKK0841B510CBSMsg1List.WRIB_SVC_NM);
				// 受付開始年月日時分
				setOutData(childDataMap, "uk_sta_ymdhm", childTemplate, EKK0841B510CBSMsg1List.UK_STA_YMDHM);
				// 受付終了年月日時分
				setOutData(childDataMap, "uk_end_ymdhm", childTemplate, EKK0841B510CBSMsg1List.UK_END_YMDHM);
				// 割引適用契機コード
				setOutData(childDataMap, "wrib_aply_optnty_cd", childTemplate, EKK0841B510CBSMsg1List.WRIB_APLY_OPTNTY_CD);
				// 割引解除契機コード
				setOutData(childDataMap, "wrib_rls_optnty_cd", childTemplate, EKK0841B510CBSMsg1List.WRIB_RLS_OPTNTY_CD);
				// 上限適用回数
				setOutData(childDataMap, "uppl_aply_cnt", childTemplate, EKK0841B510CBSMsg1List.UPPL_APLY_CNT);
				// 割引エイジング期間
				setOutData(childDataMap, "wrib_aging_prd", childTemplate, EKK0841B510CBSMsg1List.WRIB_AGING_PRD);
				// 上限契約数
				setOutData(childDataMap, "uppl_kei_cnt", childTemplate, EKK0841B510CBSMsg1List.UPPL_KEI_CNT);
				// 表示順
				setOutData(childDataMap, "dsp_jun", childTemplate, EKK0841B510CBSMsg1List.DSP_JUN);
				// 割引優先順位型コード
				setOutData(childDataMap, "yusen_jun_mdl_cd", childTemplate, EKK0841B510CBSMsg1List.YUSEN_JUN_MDL_CD);
				// 割引優先順位種類コード
				setOutData(childDataMap, "yusen_jun_kind_cd", childTemplate, EKK0841B510CBSMsg1List.YUSEN_JUN_KIND_CD);
				// 割引優先順位タイプコード
				setOutData(childDataMap, "yusen_jun_type_cd", childTemplate, EKK0841B510CBSMsg1List.YUSEN_JUN_TYPE_CD);
				// 割引優先順位タイプ順位
				setOutData(childDataMap, "yusen_jun_type_jun", childTemplate, EKK0841B510CBSMsg1List.YUSEN_JUN_TYPE_JUN);
				// 条件適用開始年月日
				setOutData(childDataMap, "joken_tstaymd", childTemplate, EKK0841B510CBSMsg1List.JOKEN_TSTAYMD);
				// 条件適用終了年月日
				setOutData(childDataMap, "joken_tendymd", childTemplate, EKK0841B510CBSMsg1List.JOKEN_TENDYMD);
				// 適用条件コード
				setOutData(childDataMap, "aply_joken_cd", childTemplate, EKK0841B510CBSMsg1List.APLY_JOKEN_CD);
				// 割引登録条件コード
				setOutData(childDataMap, "wrib_add_joken_cd", childTemplate, EKK0841B510CBSMsg1List.WRIB_ADD_JOKEN_CD);
				// 予約適用年月日（割引サービス）
				setOutData(childDataMap, "kk0841_rsv_aply_ymd", childTemplate, EKK0841B510CBSMsg1List.KK0841_RSV_APLY_YMD);
				// 割引サービス適用開始年月日
				setOutData(childDataMap, "wrib_svc_tstaymd", childTemplate, EKK0841B510CBSMsg1List.WRIB_SVC_TSTAYMD);
				// 割引サービス適用終了年月日
				setOutData(childDataMap, "wrib_svc_tendymd", childTemplate, EKK0841B510CBSMsg1List.WRIB_SVC_TENDYMD);
				// 後続業務依頼基準年月日
				setOutData(childDataMap, "kzkwrk_req_stdard_ymd", childTemplate, EKK0841B510CBSMsg1List.KZKWRK_REQ_STDARD_YMD);
				// 後続業務依頼基準期間
				setOutData(childDataMap, "kzkwrk_req_stdard_prd", childTemplate, EKK0841B510CBSMsg1List.KZKWRK_REQ_STDARD_PRD);
				// 更新年月日時分秒
				setOutData(childDataMap, "upd_dtm", childTemplate, EKK0841B510CBSMsg1List.UPD_DTM);
				// 割引サービス対象サービスコード
				setOutData(childDataMap, "wrib_svc_trgt_svc_cd", childTemplate, EKK0841B510CBSMsg1List.WRIB_SVC_TRGT_SVC_CD);
				// 割引サービス対象サービス種別コード
				setOutData(childDataMap, "wrib_svc_trgt_svc_sbt_cd", childTemplate, EKK0841B510CBSMsg1List.WRIB_SVC_TRGT_SVC_SBT_CD);
				// 適用条件グループ
				setOutData(childDataMap, "aply_joken_grp", childTemplate, EKK0841B510CBSMsg1List.APLY_JOKEN_GRP);
				// サービスコード
				setOutData(childDataMap, "svc_cd", childTemplate, EKK0841B510CBSMsg1List.SVC_CD);
				// 料金グループコード
				setOutData(childDataMap, "prc_grp_cd", childTemplate, EKK0841B510CBSMsg1List.PRC_GRP_CD);
				// 料金コースコード
				setOutData(childDataMap, "pcrs_cd", childTemplate, EKK0841B510CBSMsg1List.PCRS_CD);
				// 料金プランコード
				setOutData(childDataMap, "pplan_cd", childTemplate, EKK0841B510CBSMsg1List.PPLAN_CD);
				// オプションサービスコード
				setOutData(childDataMap, "op_svc_cd", childTemplate, EKK0841B510CBSMsg1List.OP_SVC_CD);
				// サブオプションサービスコード
				setOutData(childDataMap, "sbop_svc_cd", childTemplate, EKK0841B510CBSMsg1List.SBOP_SVC_CD);
				// 機器提供サービスコード
				setOutData(childDataMap, "kktk_svc_cd", childTemplate, EKK0841B510CBSMsg1List.KKTK_SVC_CD);
				// 機器提供種別コード
				setOutData(childDataMap, "kktk_sbt_cd", childTemplate, EKK0841B510CBSMsg1List.KKTK_SBT_CD);
				// 機器オプションサービスコード
				setOutData(childDataMap, "kkop_svc_cd", childTemplate, EKK0841B510CBSMsg1List.KKOP_SVC_CD);
				// 請求オプションサービスコード
				setOutData(childDataMap, "seiopsvc_cd", childTemplate, EKK0841B510CBSMsg1List.SEIOPSVC_CD);
				// サービス契約年数
				setOutData(childDataMap, "svc_kei_year_cnt", childTemplate, EKK0841B510CBSMsg1List.SVC_KEI_YEAR_CNT);
				// 対象契約サービス数
				setOutData(childDataMap, "trgt_kei_svc_cnt", childTemplate, EKK0841B510CBSMsg1List.TRGT_KEI_SVC_CNT);
				// 対象契約サービス上限
				setOutData(childDataMap, "trgt_kei_svc_uppl", childTemplate, EKK0841B510CBSMsg1List.TRGT_KEI_SVC_UPPL);
				// 対象サービス判別コード
				setOutData(childDataMap, "trgt_svc_hambet_cd", childTemplate, EKK0841B510CBSMsg1List.TRGT_SVC_HAMBET_CD);
				// 上限超適用可否
				setOutData(childDataMap, "uppl_auto_aply_kh", childTemplate, EKK0841B510CBSMsg1List.UPPL_AUTO_APLY_KH);
				// 予約適用年月日（割引サービス対象サービス）
				setOutData(childDataMap, "kk0851_rsv_aply_ymd", childTemplate, EKK0841B510CBSMsg1List.KK0851_RSV_APLY_YMD);
				// 割引サービス対象サービス適用開始年月日
				setOutData(childDataMap, "wrib_svc_trgt_svc_tstaymd", childTemplate, EKK0841B510CBSMsg1List.WRIB_SVC_TRGT_SVC_TSTAYMD);
				// 割引サービス対象サービス適用終了年月日
				setOutData(childDataMap, "wrib_svc_trgt_svc_tendymd", childTemplate, EKK0841B510CBSMsg1List.WRIB_SVC_TRGT_SVC_TENDYMD);
				// 変更前サービスコード
				setOutData(childDataMap, "chge_bf_svc_cd", childTemplate, EKK0841B510CBSMsg1List.CHGE_BF_SVC_CD);
				// 変更前料金グループコード
				setOutData(childDataMap, "chge_bf_prc_grp_cd", childTemplate, EKK0841B510CBSMsg1List.CHGE_BF_PRC_GRP_CD);
				// 変更前料金コースコード
				setOutData(childDataMap, "chge_bf_pcrs_cd", childTemplate, EKK0841B510CBSMsg1List.CHGE_BF_PCRS_CD);
				// 変更前料金プランコード
				setOutData(childDataMap, "chge_bf_pplan_cd", childTemplate, EKK0841B510CBSMsg1List.CHGE_BF_PPLAN_CD);
				// 変更前オプションサービスコード
				setOutData(childDataMap, "chge_bf_op_svc_cd", childTemplate, EKK0841B510CBSMsg1List.CHGE_BF_OP_SVC_CD);
				// 変更前サブオプションサービスコード
				setOutData(childDataMap, "chge_bf_sbop_svc_cd", childTemplate, EKK0841B510CBSMsg1List.CHGE_BF_SBOP_SVC_CD);
				// 変更前機器提供サービスコード
				setOutData(childDataMap, "chge_bf_kktk_svc_cd", childTemplate, EKK0841B510CBSMsg1List.CHGE_BF_KKTK_SVC_CD);
				// 変更前機器提供種別コード
				setOutData(childDataMap, "chge_bf_kktk_sbt_cd", childTemplate, EKK0841B510CBSMsg1List.CHGE_BF_KKTK_SBT_CD);
				// 変更前機器オプションサービスコード
				setOutData(childDataMap, "chge_bf_kkop_svc_cd", childTemplate, EKK0841B510CBSMsg1List.CHGE_BF_KKOP_SVC_CD);
				// 変更前請求オプションサービスコード
				setOutData(childDataMap, "chge_bf_seiopsvc_cd", childTemplate, EKK0841B510CBSMsg1List.CHGE_BF_SEIOPSVC_CD);
				// 割引画面制御コード
				setOutData(childDataMap, "wrib_screen_ctrl_cd", childTemplate, EKK0841B510CBSMsg1List.WRIB_SCREEN_CTRL_CD);

				HashMap workSvcMap = (HashMap)workTrgetSvcMap.get(childTemplate.getString(EKK0841B510CBSMsg1List.WRIB_SVC_TRGT_SVC_CD));
				String allSvcKeiNo = "";
				String allSvcKeiUcwkNo = "";
				String allOpSvcKeiNo = "";
				String allSbopSvcKeiNo = "";
				String allKktkSvcKeiNo = "";
				String allKkopSvcKeiNo = "";
				if(!JKKCommonUtil.isNull(workSvcMap))
				{
					allSvcKeiNo = (String)workSvcMap.get(WORK_AREA_ITEM.SVC_KEI_NO.name());
					allSvcKeiUcwkNo = (String)workSvcMap.get(WORK_AREA_ITEM.SVC_KEI_UCWK_NO.name());
					allOpSvcKeiNo = (String)workSvcMap.get(WORK_AREA_ITEM.OP_SVC_KEI_NO.name());
					allSbopSvcKeiNo = (String)workSvcMap.get(WORK_AREA_ITEM.SBOP_SVC_KEI_NO.name());
					allKktkSvcKeiNo = (String)workSvcMap.get(WORK_AREA_ITEM.KKTK_SVC_KEI_NO.name());
					allKkopSvcKeiNo = (String)workSvcMap.get(WORK_AREA_ITEM.KKOP_SVC_KEI_NO.name());
				}
				if (null != allKkopSvcKeiNo && !"".equals(allKkopSvcKeiNo))
				{
					// 機器オプションサービス契約番号(カンマ区切り)
					childDataMap.put("all_kkop_svc_kei_no", allKkopSvcKeiNo);
					HashMap workdspWribMap = (HashMap)workDspWribMap.get(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD));
					if (workdspWribMap == null || workdspWribMap.get("all_kkop_svc_kei_no") == null || "".equals(workdspWribMap.get("all_kkop_svc_kei_no")))
					{
						workDspWribMap.put(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD), childDataMap);
					}
				}
				else if (null != allKktkSvcKeiNo && !"".equals(allKktkSvcKeiNo))
				{
					// 機器提供サービス契約番号(カンマ区切り)
					childDataMap.put("all_kktk_svc_kei_no", allKktkSvcKeiNo);
					HashMap workdspWribMap = (HashMap)workDspWribMap.get(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD));
					if (workdspWribMap == null || workdspWribMap.get("all_kktk_svc_kei_no") == null || "".equals(workdspWribMap.get("all_kktk_svc_kei_no")))
					{
						workDspWribMap.put(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD), childDataMap);
					}
				}
				else if (null != allSbopSvcKeiNo && !"".equals(allSbopSvcKeiNo))
				{
					// サブオプションサービス契約番号(カンマ区切り)
					childDataMap.put("all_sbop_svc_kei_no", allSbopSvcKeiNo);
					HashMap workdspWribMap = (HashMap)workDspWribMap.get(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD));
					if (workdspWribMap == null || workdspWribMap.get("all_sbop_svc_kei_no") == null || "".equals(workdspWribMap.get("all_sbop_svc_kei_no")))
					{
						workDspWribMap.put(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD), childDataMap);
					}
				}
				else if (null != allOpSvcKeiNo && !"".equals(allOpSvcKeiNo))
				{
					// オプションサービス契約番号(カンマ区切り)
					childDataMap.put("all_op_svc_kei_no", allOpSvcKeiNo);
					HashMap workdspWribMap = (HashMap)workDspWribMap.get(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD));
					if (workdspWribMap == null || workdspWribMap.get("all_op_svc_kei_no") == null || "".equals(workdspWribMap.get("all_op_svc_kei_no")))
					{
						workDspWribMap.put(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD), childDataMap);
					}
				}
				else if(null != allSvcKeiUcwkNo && !"".equals(allSvcKeiUcwkNo))
				{
					// サービス契約番号(カンマ区切り)
					childDataMap.put("all_svc_kei_ucwk_no", allSvcKeiUcwkNo);
					HashMap workdspWribMap = (HashMap)workDspWribMap.get(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD));
					if (workdspWribMap == null || workdspWribMap.get("all_svc_kei_ucwk_no") == null || "".equals(workdspWribMap.get("all_svc_kei_ucwk_no")))
					{
						workDspWribMap.put(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD), childDataMap);
					}
				}
				else if (allSvcKeiNo != null && !"".equals(allSvcKeiNo))
				{
					// サービス契約番号(カンマ区切り)
					childDataMap.put("all_svc_kei_no", allSvcKeiNo);
					HashMap workdspWribMap = (HashMap)workDspWribMap.get(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD));
					if (workdspWribMap == null || workdspWribMap.get("all_svc_kei_no") == null || "".equals(workdspWribMap.get("all_svc_kei_no")))
					{
						workDspWribMap.put(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD), childDataMap);
					}
				}
				// 一番最初に取得したマップをワークに格納する
				else if (i == 0)
				{
					workDspWribMap.put(childTemplate.getString(EKK0841B510CBSMsg1List.DSP_CAMPAIGN_CD), childDataMap);
				}

				HashMap wribSvcMap = (HashMap)workAreaWribCampaign.get(childTemplate.getString(EKK0841B510CBSMsg1List.WRIB_SVC_CD));

				if (wribSvcMap != null)
				{
					// 申込明細番号
					childDataMap.put("mskm_dtl_no", wribSvcMap.get("mskm_dtl_no"));
					// 登録契機コード
					childDataMap.put("wrib_add_opty_cd", wribSvcMap.get("wrib_add_opty_cd"));
				}
				
			}
		}

		dataMap.put("wribCtrlList", dataList);
		
		// エラー情報の設定
		editErrInfoEKK0841B510(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 iparam
	 * @param template
	 * @param returnCode
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0841B510(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode, String fixedText)
			throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK0841B510CBSMsg.STATUS), returnCode);
		
		HashMap dataMap = (HashMap)param.getData(fixedText);
		ArrayList dataList = (ArrayList)dataMap.get("EKK0841B510ERRLIST");

		if (dataList == null)
		{
			dataList = new ArrayList();
			dataMap.put("EKK0841B510ERRLIST", dataList);
		}

		HashMap errMap = new HashMap();
		dataList.add(errMap);

		// ＫＥＹ＿表示用キャンペーンコード
		setErrInfo(errMap, "key_dsp_campaign_cd", template, EKK0841B510CBSMsg.KEY_DSP_CAMPAIGN_CD);
		// ＫＥＹ＿表示用キャンペーンコードエラー
		setErrInfo(errMap, "key_dsp_campaign_cd_err", template, EKK0841B510CBSMsg.KEY_DSP_CAMPAIGN_CD_ERR);

		return param;
	}

	/**
	 * データ抽出項目一覧照会（表示データ抽出項目ＣＤ）の上りマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param dspCampaignCd 表示用データ抽出項目コード
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK1351B501(IRequestParameterReadWrite param, String fixedText, String dspCampaignCd) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK1351B501CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK1351B501CBSMsg.TEMPLATEID, "EKK1351B501");
		
		// 機能コード（デフォルト：１）
		template.set(EKK1351B501CBSMsg.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);
		
		HashMap inMap = (HashMap)param.getData(fixedText);
		
		// 機能コード
		if (null != inMap)
		{
			template.set(EKK1351B501CBSMsg.FUNC_CODE, inMap.get(JCMConstants.FUNC_CODE_KEY));
		}

		// ＫＥＹ＿表示用データ抽出項目コード
		if (dspCampaignCd == null)
		{
			template.setNull(EKK1351B501CBSMsg.KEY_DSP_DCHSKM_CD);
		}
		else
		{
			template.set(EKK1351B501CBSMsg.KEY_DSP_DCHSKM_CD, dspCampaignCd);
		}

		return template;
	}

	/**
	 * データ抽出項目一覧照会（表示データ抽出項目ＣＤ）明細の下りマッピング処理を行います。
	 * <br>
	 * @param msgList
	 * @param param
	 * param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK1351B501(Map<?, ?> msgList, IRequestParameterReadWrite param, 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);
		
		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (null == workMap)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}

		HashMap wribWorkAreaMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		if (wribWorkAreaMap == null)
		{
			wribWorkAreaMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME, wribWorkAreaMap);
		}

		HashMap workDspHanyoMap = (HashMap)wribWorkAreaMap.get(WORK_AREA_KEY_DSP_HANYO);
		if (workDspHanyoMap == null)
		{
			workDspHanyoMap = new HashMap();
			wribWorkAreaMap.put(WORK_AREA_KEY_DSP_HANYO, workDspHanyoMap);
		}

		HashMap workHanyoTrgetMap = (HashMap)wribWorkAreaMap.get(WORK_AREA_KEY_HANYO_TRGET_SVC);
		if (workHanyoTrgetMap == null)
		{
			workHanyoTrgetMap = new HashMap();
			wribWorkAreaMap.put(WORK_AREA_KEY_HANYO_TRGET_SVC, workHanyoTrgetMap);
		}

		HashMap workAreaHanyoCdMap = (HashMap)wribWorkAreaMap.get(WORK_AREA_HANYO_CD);
		if (workAreaHanyoCdMap == null)
		{
			workAreaHanyoCdMap = new HashMap();
			wribWorkAreaMap.put(WORK_AREA_HANYO_CD, workAreaHanyoCdMap);
		}

		HashMap dataMap = (HashMap)param.getData(fixedText);
		if (null == dataMap)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}
		
		CAANMsg[] templateArray = template.getCAANMsgList(EKK1351B501CBSMsg.EKK1351B501CBSMSG1LIST);
		ArrayList dataList = (ArrayList)dataMap.get("hanyoCtrlList");

		if (null == dataList)
		{
			dataList = new ArrayList();
		}
		
		if (null != templateArray && 0 != templateArray.length)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];
				HashMap childDataMap = new HashMap();
				dataList.add(childDataMap);

				// データ抽出項目コード
				setOutData(childDataMap, "dchskm_cd", childTemplate, EKK1351B501CBSMsg1List.DCHSKM_CD);
				// データ抽出タイプコード
				setOutData(childDataMap, "dchs_type_cd", childTemplate, EKK1351B501CBSMsg1List.DCHS_TYPE_CD);
				// 表示用データ抽出項目コード
				setOutData(childDataMap, "dsp_dchskm_cd", childTemplate, EKK1351B501CBSMsg1List.DSP_DCHSKM_CD);
				// データ抽出項目名
				setOutData(childDataMap, "dchskm_nm", childTemplate, EKK1351B501CBSMsg1List.DCHSKM_NM);
				// 設定可能開始年月日時分
				setOutData(childDataMap, "set_psb_sta_ymdhm", childTemplate, EKK1351B501CBSMsg1List.SET_PSB_STA_YMDHM);
				// 設定可能終了年月日時分
				setOutData(childDataMap, "set_psb_end_ymdhm", childTemplate, EKK1351B501CBSMsg1List.SET_PSB_END_YMDHM);
				// データ抽出適用契機コード
				setOutData(childDataMap, "dchs_aply_optnty_cd", childTemplate, EKK1351B501CBSMsg1List.DCHS_APLY_OPTNTY_CD);
				// データ抽出解除契機コード
				setOutData(childDataMap, "dchs_rls_optnty_cd", childTemplate, EKK1351B501CBSMsg1List.DCHS_RLS_OPTNTY_CD);
				// データ抽出種別コード
				setOutData(childDataMap, "dchs_sbt_cd", childTemplate, EKK1351B501CBSMsg1List.DCHS_SBT_CD);
				// データ抽出項目開始コード
				setOutData(childDataMap, "dchskm_sta_cd", childTemplate, EKK1351B501CBSMsg1List.DCHSKM_STA_CD);
				// 開始調整コード
				setOutData(childDataMap, "sta_adj_cd", childTemplate, EKK1351B501CBSMsg1List.STA_ADJ_CD);
				// 開始調整期間
				setOutData(childDataMap, "sta_adj_prd", childTemplate, EKK1351B501CBSMsg1List.STA_ADJ_PRD);
				// データ抽出項目終了コード
				setOutData(childDataMap, "dchskm_end_cd", childTemplate, EKK1351B501CBSMsg1List.DCHSKM_END_CD);
				// 上限適用回数
				setOutData(childDataMap, "uppl_aply_cnt", childTemplate, EKK1351B501CBSMsg1List.UPPL_APLY_CNT);
				// データ抽出項目エイジング期間
				setOutData(childDataMap, "dchskm_aging_prd", childTemplate, EKK1351B501CBSMsg1List.DCHSKM_AGING_PRD);
				// 上限契約数
				setOutData(childDataMap, "uppl_kei_cnt", childTemplate, EKK1351B501CBSMsg1List.UPPL_KEI_CNT);
				// 表示順
				setOutData(childDataMap, "dsp_jun", childTemplate, EKK1351B501CBSMsg1List.DSP_JUN);
				// 条件適用開始年月日
				setOutData(childDataMap, "joken_tstaymd", childTemplate, EKK1351B501CBSMsg1List.JOKEN_TSTAYMD);
				// 条件適用終了年月日
				setOutData(childDataMap, "joken_tendymd", childTemplate, EKK1351B501CBSMsg1List.JOKEN_TENDYMD);
				// 適用数判別コード
				setOutData(childDataMap, "aply_cnt_hambet_cd", childTemplate, EKK1351B501CBSMsg1List.APLY_CNT_HAMBET_CD);
				// 適用数
				setOutData(childDataMap, "aply_cnt", childTemplate, EKK1351B501CBSMsg1List.APLY_CNT);
				// 適用条件コード
				setOutData(childDataMap, "aply_joken_cd", childTemplate, EKK1351B501CBSMsg1List.APLY_JOKEN_CD);
				// データ抽出登録条件コード
				setOutData(childDataMap, "dchs_add_joken_cd", childTemplate, EKK1351B501CBSMsg1List.DCHS_ADD_JOKEN_CD);
				// 予約適用年月日（データ抽出項目）
				setOutData(childDataMap, "kk1351_rsv_aply_ymd", childTemplate, EKK1351B501CBSMsg1List.KK1351_RSV_APLY_YMD);
				// データ抽出項目適用開始年月日
				setOutData(childDataMap, "dchskm_tstaymd", childTemplate, EKK1351B501CBSMsg1List.DCHSKM_TSTAYMD);
				// データ抽出項目適用終了年月日
				setOutData(childDataMap, "dchskm_tendymd", childTemplate, EKK1351B501CBSMsg1List.DCHSKM_TENDYMD);
				// 更新年月日時分秒
				setOutData(childDataMap, "upd_dtm", childTemplate, EKK1351B501CBSMsg1List.UPD_DTM);
				// データ抽出項目対象サービスコード
				setOutData(childDataMap, "dchskm_tg_svc_cd", childTemplate, EKK1351B501CBSMsg1List.DCHSKM_TG_SVC_CD);
				// 適用条件グループ
				setOutData(childDataMap, "aply_joken_grp", childTemplate, EKK1351B501CBSMsg1List.APLY_JOKEN_GRP);
				// サービスコード
				setOutData(childDataMap, "svc_cd", childTemplate, EKK1351B501CBSMsg1List.SVC_CD);
				// 料金グループコード
				setOutData(childDataMap, "prc_grp_cd", childTemplate, EKK1351B501CBSMsg1List.PRC_GRP_CD);
				// 料金コースコード
				setOutData(childDataMap, "pcrs_cd", childTemplate, EKK1351B501CBSMsg1List.PCRS_CD);
				// 料金プランコード
				setOutData(childDataMap, "pplan_cd", childTemplate, EKK1351B501CBSMsg1List.PPLAN_CD);
				// オプションサービスコード
				setOutData(childDataMap, "op_svc_cd", childTemplate, EKK1351B501CBSMsg1List.OP_SVC_CD);
				// サブオプションサービスコード
				setOutData(childDataMap, "sbop_svc_cd", childTemplate, EKK1351B501CBSMsg1List.SBOP_SVC_CD);
				// 機器提供サービスコード
				setOutData(childDataMap, "kktk_svc_cd", childTemplate, EKK1351B501CBSMsg1List.KKTK_SVC_CD);
				// 機器提供種別コード
				setOutData(childDataMap, "kktk_sbt_cd", childTemplate, EKK1351B501CBSMsg1List.KKTK_SBT_CD);
				// 請求オプションサービスコード
				setOutData(childDataMap, "seiopsvc_cd", childTemplate, EKK1351B501CBSMsg1List.SEIOPSVC_CD);
				// サービス契約年数
				setOutData(childDataMap, "svc_kei_year_cnt", childTemplate, EKK1351B501CBSMsg1List.SVC_KEI_YEAR_CNT);
				// 対象契約サービス数
				setOutData(childDataMap, "trgt_kei_svc_cnt", childTemplate, EKK1351B501CBSMsg1List.TRGT_KEI_SVC_CNT);
				// 対象契約サービス上限
				setOutData(childDataMap, "trgt_kei_svc_uppl", childTemplate, EKK1351B501CBSMsg1List.TRGT_KEI_SVC_UPPL);
				// 対象サービス判別コード
				setOutData(childDataMap, "trgt_svc_hambet_cd", childTemplate, EKK1351B501CBSMsg1List.TRGT_SVC_HAMBET_CD);
				// 上限超適用可否
				setOutData(childDataMap, "uppl_auto_aply_kh", childTemplate, EKK1351B501CBSMsg1List.UPPL_AUTO_APLY_KH);
				// 予約適用年月日（データ抽出項目対象サービス）
				setOutData(childDataMap, "kk1371_rsv_aply_ymd", childTemplate, EKK1351B501CBSMsg1List.KK1371_RSV_APLY_YMD);
				// データ抽出項目対象サービス適用開始年月日
				setOutData(childDataMap, "dchskm_tg_svc_tstaymd", childTemplate, EKK1351B501CBSMsg1List.DCHSKM_TG_SVC_TSTAYMD);
				// データ抽出項目対象サービス適用終了年月日
				setOutData(childDataMap, "dchskm_tg_svc_tendymd", childTemplate, EKK1351B501CBSMsg1List.DCHSKM_TG_SVC_TENDYMD);
				// 変更前サービスコード
				setOutData(childDataMap, "chge_bf_svc_cd", childTemplate, EKK1351B501CBSMsg1List.CHGE_BF_SVC_CD);
				// 変更前料金グループコード
				setOutData(childDataMap, "chge_bf_prc_grp_cd", childTemplate, EKK1351B501CBSMsg1List.CHGE_BF_PRC_GRP_CD);
				// 変更前料金コースコード
				setOutData(childDataMap, "chge_bf_pcrs_cd", childTemplate, EKK1351B501CBSMsg1List.CHGE_BF_PCRS_CD);
				// 変更前料金プランコード
				setOutData(childDataMap, "chge_bf_pplan_cd", childTemplate, EKK1351B501CBSMsg1List.CHGE_BF_PPLAN_CD);
				// 変更前オプションサービスコード
				setOutData(childDataMap, "chge_bf_op_svc_cd", childTemplate, EKK1351B501CBSMsg1List.CHGE_BF_OP_SVC_CD);
				// 変更前サブオプションサービスコード
				setOutData(childDataMap, "chge_bf_sbop_svc_cd", childTemplate, EKK1351B501CBSMsg1List.CHGE_BF_SBOP_SVC_CD);
				// 変更前機器提供サービスコード
				setOutData(childDataMap, "chge_bf_kktk_svc_cd", childTemplate, EKK1351B501CBSMsg1List.CHGE_BF_KKTK_SVC_CD);
				// 変更前機器提供種別コード
				setOutData(childDataMap, "chge_bf_kktk_sbt_cd", childTemplate, EKK1351B501CBSMsg1List.CHGE_BF_KKTK_SBT_CD);
				// 変更前請求オプションサービスコード
				setOutData(childDataMap, "chge_bf_seiopsvc_cd", childTemplate, EKK1351B501CBSMsg1List.CHGE_BF_SEIOPSVC_CD);

				String allSvcKeiNo = (String)workHanyoTrgetMap.get(childTemplate.getString(EKK1351B501CBSMsg1List.DCHSKM_CD));
				if (allSvcKeiNo != null && !"".equals(allSvcKeiNo))
				{
					// サービス契約番号(カンマ区切り)
					childDataMap.put("all_svc_kei_no", allSvcKeiNo);
					HashMap workdspWribMap = (HashMap)workDspHanyoMap.get(childTemplate.getString(EKK1351B501CBSMsg1List.DSP_DCHSKM_CD));
					if (workdspWribMap == null || workdspWribMap.get("all_svc_kei_no") == null || "".equals(workdspWribMap.get("all_svc_kei_no")))
					{
						workDspHanyoMap.put(childTemplate.getString(EKK1351B501CBSMsg1List.DSP_DCHSKM_CD), childDataMap);
					}
				}
				// 一番最初に取得したマップをワークに格納する
				else if (i == 0)
				{
					workDspHanyoMap.put(childTemplate.getString(EKK1351B501CBSMsg1List.DSP_DCHSKM_CD), childDataMap);
				}

				HashMap dchskmCdMap = (HashMap)workAreaHanyoCdMap.get(childTemplate.getString(EKK1351B501CBSMsg1List.DCHSKM_CD));
				if (dchskmCdMap != null)
				{
					// 申込明細番号
					childDataMap.put("mskm_dtl_no", dchskmCdMap.get("mskm_dtl_no"));
					// データ抽出項目設定登録契機コード
					childDataMap.put("dchskmst_add_opty_cd", dchskmCdMap.get("dchskmst_add_opty_cd"));
				}
			}
		}

		dataMap.put("hanyoCtrlList", dataList);
		
		// エラー情報の設定
		editErrInfoEKK1351B501(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 iparam
	 * @param template
	 * @param returnCode
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK1351B501(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode, String fixedText)
			throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK1351B501CBSMsg.STATUS), returnCode);
		
		HashMap dataMap = (HashMap)param.getData(fixedText);
		ArrayList dataList = (ArrayList)dataMap.get("EKK1351B501ERRLIST");

		if (dataList == null)
		{
			dataList = new ArrayList();
			dataMap.put("EKK1351B501ERRLIST", dataList);
		}

		HashMap errMap = new HashMap();
		dataList.add(errMap);

		// ＫＥＹ＿表示用データ抽出項目コード
		setErrInfo(errMap, "key_dsp_dchskm_cd", template, EKK1351B501CBSMsg.KEY_DSP_DCHSKM_CD);
		// ＫＥＹ＿表示用データ抽出項目コードエラー
		setErrInfo(errMap, "key_dsp_dchskm_cd_err", template, EKK1351B501CBSMsg.KEY_DSP_DCHSKM_CD_ERR);

		return param;
	}

	/**
	 * ユーザデータ情報にエラー情報を設定します。<br>
	 * 　※ユーザデータ情報内にすでにキーが存在する場合、値は設定されません。<br>
	 * @param inMap	 ユーザデータ情報
	 * @param setKey ユーザデータ情報に設定するキー名
	 * @param template メッセージキャリア
	 * @param getKey メッセージキャリアより取得するキー名
	 */
	private void setErrInfo(HashMap<String, Object> inMap, String setKey, CAANMsg template, String getKey)
	{
		if (!template.isNull(getKey))
		{
			if (!inMap.containsKey(setKey))
			{
				inMap.put(setKey, template.getString(getKey));
			}
		}
	}

	/**
	 * 表示用割引マップリスト設定処理。<br>
	 * @param param
	 * @param dspCdList 表示用リスト
	 * @param wrokAreaKeyDsp ワークエリアＫＥＹ（表示用マップ）
	 * @return 表示用割引マップリスト
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private ArrayList setDspWribList(
			IRequestParameterReadWrite param,
			ArrayList dspCdList,
			String wrokAreaKeyDsp) throws RequestParameterException
	{
		ArrayList<HashMap> resultList = new ArrayList<HashMap>();

		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (null == workMap)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}

		HashMap wribWorkAreaMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		if (wribWorkAreaMap == null)
		{
			wribWorkAreaMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME, wribWorkAreaMap);
		}

		HashMap workDspMap = (HashMap)wribWorkAreaMap.get(wrokAreaKeyDsp);
		if (workDspMap == null)
		{
			workDspMap = new HashMap();
			wribWorkAreaMap.put(wrokAreaKeyDsp, workDspMap);
		}

		for (String dspKey : (ArrayList<String>)dspCdList)
		{
			resultList.add((HashMap)workDspMap.get(dspKey));
		}

		return resultList;
	}

	/**
	 * 割引サービス対象サービスコードに紐づくサービス情報を格納する。<br>
	 * @param param
	 * @param wribSvcTrgtSvcCd 割引サービス対象サービスコード
	 * @param wribSvcKeiNo サービス契約番号／サービス契約内訳番号
	 * @param workareaitem ワークエリア設定項目
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setWorkWribTrgetSvc(
			IRequestParameterReadWrite param,
			String wribSvcTrgtSvcCd,
			String wribSvcKeiNo,
			WORK_AREA_ITEM workareaitem) throws RequestParameterException
	{
		if (wribSvcTrgtSvcCd == null || "".equals(wribSvcTrgtSvcCd))
		{
			return;
		}
		else if (wribSvcKeiNo == null || "".equals(wribSvcKeiNo))
		{
			return;
		}

		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (null == workMap)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}

		HashMap wribWorkAreaMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		if (wribWorkAreaMap == null)
		{
			wribWorkAreaMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME, wribWorkAreaMap);
		}

		HashMap workTrgetSvcMap = (HashMap)wribWorkAreaMap.get(WORK_AREA_KEY_WRIB_TRGET_SVC);
		if (workTrgetSvcMap == null)
		{
			workTrgetSvcMap = new HashMap();
			wribWorkAreaMap.put(WORK_AREA_KEY_WRIB_TRGET_SVC, workTrgetSvcMap);
		}

		HashMap workSvcCdMap =  (HashMap)workTrgetSvcMap.get(wribSvcTrgtSvcCd);
		if (workSvcCdMap == null)
		{
			workSvcCdMap = new HashMap();
			workTrgetSvcMap.put(wribSvcTrgtSvcCd, workSvcCdMap);
		}
		
		String allWribSvcKeiNo =  (String)workSvcCdMap.get(workareaitem.name());
		if (allWribSvcKeiNo == null || "".equals(allWribSvcKeiNo))
		{
			allWribSvcKeiNo = wribSvcKeiNo;
			workSvcCdMap.put(workareaitem.name(), allWribSvcKeiNo);
		}
		else
		{
			allWribSvcKeiNo = setAllSvcKeiNo(allWribSvcKeiNo, wribSvcKeiNo);
			workSvcCdMap.put(workareaitem.name(), allWribSvcKeiNo);
		}
	}

	/**
	 * カンマ区切りサービス契約番号設定。<br>
	 * @param allSvcKeiNo カンマ区切りサービス契約番号
	 * @param addSvcKeiNo 追加サービス契約番号
	 * @return カンマ区切りサービス契約番号
	 */
	private String setAllSvcKeiNo(String allSvcKeiNo, String addSvcKeiNo)
	{
		String result = allSvcKeiNo;

		if (addSvcKeiNo == null)
		{
			return result;
		}

		if (result == null)
		{
			result = "";
		}

		String[] allSvcKeiNoH = result.split(",");
		boolean isSvcKeiNo = true;

		for (int i = 0; i < allSvcKeiNoH.length; i++)
		{
			if (addSvcKeiNo.equals(allSvcKeiNoH[i]))
			{
				isSvcKeiNo = false;
			}
		}

		if (isSvcKeiNo)
		{
			result = allSvcKeiNo + "," + addSvcKeiNo;
		}

		return result;
	}
}
