/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKCancelSvcWribCC
*   ソースファイル名：JKKCancelSvcWribCC.java
*   作成者          ：富士通
*   日付            ：2011年06月03日
*＜機能概要＞
*   キャンセル部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/11/28   FJ）佐藤    新規作成
*   v5.00.00    2013/04/26   FJ) 中山    【TAI-2013-0000025】Findbugsの指摘修正
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
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.ejb.cbs.cbsmsg.EKK0451C070CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1391C040CBSMsg;


/**
 * 割引情報のキャンセル及び、キャンセル確認(入力チェック)を行う。
 * <br>
 * @author 富士通
 */
public class JKKCancelSvcWribCC extends AbstractCommonComponent
{

	/** エラー用 */
	private static final String SC_ERROR_STRING = "サービスコンポーネントエラー";
	
	/** 割引情報キャンセル用CCワーク */
	private static final String CC_WORK_AREA_NAME_WRIB = "JKKCancelSvcWribCCWork";
	
	/** サービス契約排他制御用ワーク */
	private static final String CC_WORK_AREA_NAME_SVKEI_EXC_CTRL = "svkei_exc_ctrl";
	
	/** サービス契約番号に対する最終更新日時分秒（割引サービス） */
	private final HashMap<String, String> wribSvcKei = new HashMap<String, String>();

	/** サービス契約番号に対する最終更新日時分秒（汎用） */
	private final HashMap<String, String> hanyoSvcKei = new HashMap<String, String>();
	
	/**
	 * キャンセルメイン処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite cancelSvcWrib(SessionHandle handle, IRequestParameterReadWrite param, String ccName) throws Throwable
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		CAANMsg template = null;
		
		// エラーフラグ(実行判定用)
		String errFlgCc = "0";
		
		Map<?, ?> result = null;
		
		// 下りユーザデータ
		Map resUserMap = new HashMap();
		
		/***************************************************/
		/** 入力パラメータの取得                           */
		/***************************************************/
		
		HashMap inMap = (HashMap)param.getData(ccName);
		if (inMap == null)
		{
			return param;
		}
		
		int wribSvcCdListCnt = ((ArrayList)inMap.get("wribSvcCdList")).size();
		int hanyoCdListCnt = ((ArrayList)inMap.get("hanyoCdList")).size();
		
		ArrayList wribSvcCdList = ((ArrayList)inMap.get("wribSvcCdList"));
		ArrayList hanyoCdList = ((ArrayList)inMap.get("hanyoCdList"));
		
		String func_code = "1";
		// 機能コード
		if (inMap != null)
		{
			func_code = (String)inMap.get(JCMConstants.FUNC_CODE_KEY);
		}
		
		HashMap workBeanListMap1 = null;
		HashMap workBeanListMap2 = null;
		//HashMap workBeanListMap3 = null;
		String oldListNo = "";
		
		for (int i = 0; i < wribSvcCdListCnt; i++)
		{
			workBeanListMap1 = (HashMap)(wribSvcCdList).get(i);
			String listNo = (String)workBeanListMap1.get("list_no");
			
			if (!oldListNo.equals(listNo))
			{
				template = editInEKK0451C070(param, workBeanListMap1, func_code, listNo, wribSvcCdList); // 上りマッピング
				result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
				editRetEKK0451C070(result, param, ccName); // 下りマッピング
				if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
				{ // ステータスが単項目エラー以上であれば例外をスロー
					throw new CCException(SC_ERROR_STRING, new Exception());
				}
			}
			oldListNo = listNo;
		}
		
		oldListNo = "";
		for (int i = 0; i < hanyoCdListCnt; i++)
		{
			workBeanListMap2 = (HashMap)(hanyoCdList).get(i);
			String listNo = (String)workBeanListMap2.get("list_no");
			
			if (!oldListNo.equals(listNo))
			{
				ArrayList<HashMap> workList = new ArrayList<HashMap>();
				workList.add((HashMap)workBeanListMap2);
				
				template = editInEKK1391C040(param, workBeanListMap2, func_code, listNo, workList); // 上りマッピング
				result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
				editRetEKK1391C040(result, param, ccName); // 下りマッピング
				if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
				{ // ステータスが単項目エラー以上であれば例外をスロー
					throw new CCException(SC_ERROR_STRING, new Exception());
				}
			}
			oldListNo = listNo;
		}
		
		/***************************************************/
		/** 下りユーザデータマッピング処理開始             */
		/***************************************************/
		JKKBpCommon.setResultUserData(param, ccName, resUserMap);
		if ("0".equals(errFlgCc))
		{
			JKKBpCommon.setResultCtrlData(param, result, ccName , 0, 0);
		}
		else
		{
			String errMsg = "割引情報キャンセルチェックCCで例外が発生しました";
			throw new CCException(errMsg, new Exception(errMsg));
		}

		return param;
	}

	/**
	 * 割引サービス契約キャンセルの上りマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param fixedText
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK0451C070(IRequestParameterReadWrite param, HashMap workBeanListMap, 
			String func_code, String listNo, ArrayList wribSvcCdList) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0451C070CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK0451C070CBSMsg.TEMPLATEID, "EKK0451C070");

		// 機能コード
		template.set(EKK0451C070CBSMsg.FUNC_CODE, func_code);

		// オペレータ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);

		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 割引サービス契約番号 → 割引サービス契約番号
		if (workBeanListMap == null || workBeanListMap.get("wrib_svc_kei_no") == null || "".equals(workBeanListMap.get("wrib_svc_kei_no")))
		{
			template.setNull(EKK0451C070CBSMsg.WRIB_SVC_KEI_NO);
		}
		else
		{
			template.set(EKK0451C070CBSMsg.WRIB_SVC_KEI_NO, (String)workBeanListMap.get("wrib_svc_kei_no"));
		}
		// 申込明細番号 → 申込明細番号
		if (workBeanListMap == null || workBeanListMap.get("mskm_dtl_no") == null || "".equals(workBeanListMap.get("mskm_dtl_no")))
		{
			template.setNull(EKK0451C070CBSMsg.MSKM_DTL_NO);
		}
		else
		{
			template.set(EKK0451C070CBSMsg.MSKM_DTL_NO, (String)workBeanListMap.get("mskm_dtl_no"));
		}
		// サービスキャンセル理由コード → サービスキャンセル理由コード
		if (workBeanListMap == null || workBeanListMap.get("svc_cancel_rsn_cd") == null || "".equals(workBeanListMap.get("svc_cancel_rsn_cd")))
		{
			template.setNull(EKK0451C070CBSMsg.SVC_CANCEL_RSN_CD);
		}
		else
		{
			template.set(EKK0451C070CBSMsg.SVC_CANCEL_RSN_CD, (String)workBeanListMap.get("svc_cancel_rsn_cd"));
		}
		// 異動区分 → 異動区分
		if (workBeanListMap == null || workBeanListMap.get("ido_div") == null || "".equals(workBeanListMap.get("ido_div")))
		{
			template.setNull(EKK0451C070CBSMsg.IDO_DIV);
		}
		else
		{
			template.set(EKK0451C070CBSMsg.IDO_DIV, (String)workBeanListMap.get("ido_div"));
		}
		// 割引解約キャンセル契機コード → 割引解約キャンセル契機コード
		if (workBeanListMap == null || workBeanListMap.get("wrib_dsl_cncl_opty_cd") == null || "".equals(workBeanListMap.get("wrib_dsl_cncl_opty_cd")))
		{
			template.setNull(EKK0451C070CBSMsg.WRIB_DSL_CNCL_OPTY_CD);
		}
		else
		{
			template.set(EKK0451C070CBSMsg.WRIB_DSL_CNCL_OPTY_CD, (String)workBeanListMap.get("wrib_dsl_cncl_opty_cd"));
		}
		
		// 最終更新日が最大のサービス契約番号を取得
		String maxDtm = getDtmMax(param, 1, listNo, wribSvcCdList);
		
		// 更新年月日時分秒(更新前) → 更新年月日時分秒(更新前)
		if ("".equals(maxDtm))
		{
			if (workBeanListMap == null || workBeanListMap.get("upd_dtm_bf") == null || "".equals(workBeanListMap.get("upd_dtm_bf")))
			{
				template.setNull(EKK0451C070CBSMsg.UPD_DTM_BF);
			}
			else
			{
				template.set(EKK0451C070CBSMsg.UPD_DTM_BF, (String)workBeanListMap.get("upd_dtm_bf"));
			}
		}
		else
		{
			template.set(EKK0451C070CBSMsg.UPD_DTM_BF, maxDtm);
		}
		
		return template;
	}
	
//	/**
//	 * データ抽出項目設定対象契約変更の上りマッピング処理を行います。
//	 * <br>
//	 * @param param
//	 * @param fixedText
//	 * @return CAANMsg
//	 * @throws RequestParameterException
//	 */
//	@SuppressWarnings("unchecked")
//	private CAANMsg editInEKK1401C010(IRequestParameterReadWrite param, HashMap workBeanListMap3, 
//			String func_code, String listNo, ArrayList hanyoSvcCdList) throws RequestParameterException
//	{
//		CAANMsg template = new CAANMsg(EKK1401C010CBSMsg.class.getName());
//
//		// テンプレートID
//		template.set(EKK1401C010CBSMsg.TEMPLATEID, "EKK1401C010");
//
//		// 機能コード
//		template.set(EKK1401C010CBSMsg.FUNC_CODE, func_code);
//
//		// オペレータ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);
//
//		// 作業領域のマップを取得
//		Map workMap = param.getMappingWorkArea();
//		if (workMap == null)
//		{
//			workMap = new HashMap();
//			param.setMappingWorkArea(workMap);
//		}
//		
//		// データ抽出項目設定番号 → データ抽出項目設定番号
//		if (workBeanListMap3 == null || workBeanListMap3.get("dchskmst_no") == null || "".equals(workBeanListMap3.get("dchskmst_no")))
//		{
//			template.setNull(EKK1401C010CBSMsg.DCHSKMST_NO);
//		}
//		else
//		{
//			template.set(EKK1401C010CBSMsg.DCHSKMST_NO, (String)workBeanListMap3.get("dchskmst_no"));
//		}
//		
//		// データ抽出項目設定対象契約番号 → データ抽出項目設定対象契約番号
//		if (workBeanListMap3 == null || workBeanListMap3.get("dchskmst_tg_kei_no") == null || "".equals(workBeanListMap3.get("dchskmst_tg_kei_no")))
//		{
//			template.setNull(EKK1401C010CBSMsg.DCHSKMST_TG_KEI_NO);
//		}
//		else
//		{
//			template.set(EKK1401C010CBSMsg.DCHSKMST_TG_KEI_NO, (String)workBeanListMap3.get("dchskmst_tg_kei_no"));
//		}
//		
//		// データ抽出項目設定対象契約適用開始年月日 → データ抽出項目設定対象契約適用開始年月日
//		if (workBeanListMap3 == null || workBeanListMap3.get("dchskmst_tg_kei_tstaymd") == null || "".equals(workBeanListMap3.get("dchskmst_tg_kei_tstaymd")))
//		{
//			template.setNull(EKK1401C010CBSMsg.DCHSKMST_TG_KEI_TSTAYMD);
//		}
//		else
//		{
//			template.set(EKK1401C010CBSMsg.DCHSKMST_TG_KEI_TSTAYMD, (String)workBeanListMap3.get("dchskmst_tg_kei_tstaymd"));
//		}
//		
//		// データ抽出項目設定対象契約適用終了年月日 → データ抽出項目設定対象契約適用終了年月日
//		if (workBeanListMap3 == null || workBeanListMap3.get("dchskmst_tg_kei_tendymd") == null || "".equals(workBeanListMap3.get("dchskmst_tg_kei_tendymd")))
//		{
//			template.setNull(EKK1401C010CBSMsg.DCHSKMST_TG_KEI_TENDYMD);
//		}
//		else
//		{
//			template.set(EKK1401C010CBSMsg.DCHSKMST_TG_KEI_TENDYMD, (String)workBeanListMap3.get("dchskmst_tg_kei_tendymd"));
//		}
//		
//		// 最終更新日が最大のサービス契約番号を取得
//		String maxDtm = getDtmMax(param, 2, listNo, hanyoSvcCdList);
//		
//		// 更新年月日時分秒(更新前) → 更新年月日時分秒(更新前)
//		if ("".equals(maxDtm))
//		{
//			if (workBeanListMap3 == null || workBeanListMap3.get("upd_dtm_bf") == null || "".equals(workBeanListMap3.get("upd_dtm_bf")))
//			{
//				template.setNull(EKK1401C010CBSMsg.UPD_DTM_BF);
//			}
//			else
//			{
//				template.set(EKK1401C010CBSMsg.UPD_DTM_BF, (String)workBeanListMap3.get("upd_dtm_bf"));
//			}
//		}
//		else
//		{
//			template.set(EKK1401C010CBSMsg.UPD_DTM_BF, maxDtm);
//		}
//		
//		return template;
//	}

	/**
	 * データ抽出項目設定完了の上りマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param fixedText
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK1391C040(IRequestParameterReadWrite param, HashMap workBeanListMap3, 
			String func_code, String listNo, ArrayList hanyoSvcCdList) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK1391C040CBSMsg.class.getName());

		// テンプレートID
		template.set(EKK1391C040CBSMsg.TEMPLATEID, "EKK1391C040");

		// 機能コード
		template.set(EKK1391C040CBSMsg.FUNC_CODE, func_code);

		// オペレータ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);

		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// データ抽出項目設定番号 → データ抽出項目設定番号
		if (workBeanListMap3 == null || workBeanListMap3.get("dchskmst_no") == null || "".equals(workBeanListMap3.get("dchskmst_no")))
		{
			template.setNull(EKK1391C040CBSMsg.DCHSKMST_NO);
		}
		else
		{
			template.set(EKK1391C040CBSMsg.DCHSKMST_NO, (String)workBeanListMap3.get("dchskmst_no"));
		}

		// データ抽出項目設定完了種別コード → データ抽出項目設定完了種別コード
		if (workBeanListMap3 == null || workBeanListMap3.get("dchskmst_fin_sbt_cd") == null || "".equals(workBeanListMap3.get("dchskmst_fin_sbt_cd")))
		{
			template.setNull(EKK1391C040CBSMsg.DCHSKMST_FIN_SBT_CD);
		}
		else
		{
			template.set(EKK1391C040CBSMsg.DCHSKMST_FIN_SBT_CD, (String)workBeanListMap3.get("dchskmst_fin_sbt_cd"));
		}

		// データ抽出項目設定終了年月日 → データ抽出項目設定終了年月日
		if (workBeanListMap3 == null || workBeanListMap3.get("dchskmst_end_ymd") == null || "".equals(workBeanListMap3.get("dchskmst_end_ymd")))
		{
			template.setNull(EKK1391C040CBSMsg.DCHSKMST_END_YMD);
		}
		else
		{
			template.set(EKK1391C040CBSMsg.DCHSKMST_END_YMD, (String)workBeanListMap3.get("dchskmst_end_ymd"));
		}
		
		// 異動区分 → 異動区分
		if (workBeanListMap3 == null || workBeanListMap3.get("ido_div") == null || "".equals(workBeanListMap3.get("ido_div")))
		{
			template.setNull(EKK1391C040CBSMsg.IDO_DIV);
		}
		else
		{
			template.set(EKK1391C040CBSMsg.IDO_DIV, (String)workBeanListMap3.get("ido_div"));
		}
		// データ抽出項目設定完了契機コード → データ抽出項目設定完了契機コード
		if (workBeanListMap3 == null || workBeanListMap3.get("dchskmst_fin_opty_cd") == null || "".equals(workBeanListMap3.get("dchskmst_fin_opty_cd")))
		{
			template.setNull(EKK1391C040CBSMsg.DCHSKMST_FIN_OPTY_CD);
		}
		else
		{
			template.set(EKK1391C040CBSMsg.DCHSKMST_FIN_OPTY_CD, (String)workBeanListMap3.get("dchskmst_fin_opty_cd"));
		}
		
		// 最終更新日が最大のサービス契約番号を取得
		// IT1-2012-0000811（データ抽出項目設定もサービス契約の排他制御に含むように変更）
		String maxDtm = getDtmMax(param, 2, listNo, hanyoSvcCdList);
		
		// 更新年月日時分秒(更新前) → 更新年月日時分秒(更新前)
		if ("".equals(maxDtm))
		{
			if (workBeanListMap3 == null || workBeanListMap3.get("upd_dtm_bf") == null || "".equals(workBeanListMap3.get("upd_dtm_bf")))
			{
				template.setNull(EKK1391C040CBSMsg.UPD_DTM_BF);
			}
			else
			{
				template.set(EKK1391C040CBSMsg.UPD_DTM_BF, (String)workBeanListMap3.get("upd_dtm_bf"));
			}
		}
		else
		{
			template.set(EKK1391C040CBSMsg.UPD_DTM_BF, maxDtm);
		}
		
		return template;
	}
	
	/**
	 * 割引サービス契約キャンセルの下りマッピング処理を行います。
	 * <br>
	 * @param msgList
	 * @param param
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK0451C070(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 (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = null;
		
		HashMap workDataMap = (HashMap)workMap.get(CC_WORK_AREA_NAME_WRIB);
		if (workDataMap == null)
		{
			workDataMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME_WRIB, workDataMap);
		}
		
		HashMap workSvkeiExcCtrlMap = (HashMap)workMap.get(CC_WORK_AREA_NAME_SVKEI_EXC_CTRL);
		if (workSvkeiExcCtrlMap == null)
		{
			workSvkeiExcCtrlMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME_SVKEI_EXC_CTRL, workSvkeiExcCtrlMap);
		}
		
		dataMap = (HashMap)param.getData(fixedText);
		if (dataMap == null)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}
		
		
		// 世代登録年月日時分秒 ← 世代登録年月日時分秒
		if (template.isNull(EKK0451C070CBSMsg.GENE_ADD_DTM))
		{
			dataMap.put("gene_add_dtm", new String());
		}
		else
		{
			dataMap.put("gene_add_dtm", template.getString(EKK0451C070CBSMsg.GENE_ADD_DTM));
			workDataMap.put("gene_add_dtm", template.getString(EKK0451C070CBSMsg.GENE_ADD_DTM));
		}
		
		// 割引サービス契約ステータス ← 割引サービス契約ステータス
		if (template.isNull(EKK0451C070CBSMsg.WRIB_SVC_KEI_STAT))
		{
			dataMap.put("wrib_svc_kei_stat", new String());
		}
		else
		{
			dataMap.put("wrib_svc_kei_stat", template.getString(EKK0451C070CBSMsg.WRIB_SVC_KEI_STAT));
			workDataMap.put("wrib_svc_kei_stat", template.getString(EKK0451C070CBSMsg.WRIB_SVC_KEI_STAT));
		}
		
		// 予約適用年月日 ← 予約適用年月日
		if (template.isNull(EKK0451C070CBSMsg.RSV_APLY_YMD))
		{
			dataMap.put("rsv_aply_ymd", new String());
		}
		else
		{
			dataMap.put("rsv_aply_ymd", template.getString(EKK0451C070CBSMsg.RSV_APLY_YMD));
			workDataMap.put("rsv_aply_ymd", template.getString(EKK0451C070CBSMsg.RSV_APLY_YMD));
		}
		
		// 予約適用コード ← 予約適用コード
		if (template.isNull(EKK0451C070CBSMsg.RSV_APLY_CD))
		{
			dataMap.put("rsv_aply_cd", new String());
		}
		else
		{
			dataMap.put("rsv_aply_cd", template.getString(EKK0451C070CBSMsg.RSV_APLY_CD));
			workDataMap.put("rsv_aply_cd", template.getString(EKK0451C070CBSMsg.RSV_APLY_CD));
		}
		
		// サービスキャンセル年月日 ← サービスキャンセル年月日
		if (template.isNull(EKK0451C070CBSMsg.SVC_CANCEL_YMD))
		{
			dataMap.put("svc_cancel_ymd", new String());
		}
		else
		{
			dataMap.put("svc_cancel_ymd", template.getString(EKK0451C070CBSMsg.SVC_CANCEL_YMD));
			workDataMap.put("svc_cancel_ymd", template.getString(EKK0451C070CBSMsg.SVC_CANCEL_YMD));
		}
		
		// サービスキャンセル取消年月日 ← サービスキャンセル取消年月日
		if (template.isNull(EKK0451C070CBSMsg.SVC_CANCEL_CL_YMD))
		{
			dataMap.put("svc_cancel_cl_ymd", new String());
		}
		else
		{
			dataMap.put("svc_cancel_cl_ymd", template.getString(EKK0451C070CBSMsg.SVC_CANCEL_CL_YMD));
			workDataMap.put("svc_cancel_cl_ymd", template.getString(EKK0451C070CBSMsg.SVC_CANCEL_CL_YMD));
		}
		
		// 登録年月日時分秒 ← 登録年月日時分秒
		if (template.isNull(EKK0451C070CBSMsg.ADD_DTM))
		{
			dataMap.put("add_dtm", new String());
		}
		else
		{
			dataMap.put("add_dtm", template.getString(EKK0451C070CBSMsg.ADD_DTM));
			workDataMap.put("add_dtm", template.getString(EKK0451C070CBSMsg.ADD_DTM));
		}
		
		// 登録オペレータアカウント ← 登録オペレータアカウント
		if (template.isNull(EKK0451C070CBSMsg.ADD_OPEACNT))
		{
			dataMap.put("add_opeacnt", new String());
		}
		else
		{
			dataMap.put("add_opeacnt", template.getString(EKK0451C070CBSMsg.ADD_OPEACNT));
			workDataMap.put("add_opeacnt", template.getString(EKK0451C070CBSMsg.ADD_OPEACNT));
		}
		
		// 更新年月日時分秒 ← 更新年月日時分秒
		if (template.isNull(EKK0451C070CBSMsg.UPD_DTM))
		{
			dataMap.put("upd_dtm", new String());
		}
		else
		{
			dataMap.put("upd_dtm", template.getString(EKK0451C070CBSMsg.UPD_DTM));
			workDataMap.put("upd_dtm", template.getString(EKK0451C070CBSMsg.UPD_DTM));
			
			// 処理対象となったサービス契約番号の最終更新日をセットする（作業領域に対して）
			Iterator<Map.Entry<String, String>> iterator = wribSvcKei.entrySet().iterator();
			while (iterator.hasNext()) {
				Map.Entry<String, String> mapEntry = iterator.next();
				JKKBpCommon.setLastDtmBySvcKeiNo(param, mapEntry.getKey(), template.getString(EKK0451C070CBSMsg.UPD_DTM));
			}
		}
		
		// 更新オペレータアカウント ← 更新オペレータアカウント
		if (template.isNull(EKK0451C070CBSMsg.UPD_OPEACNT))
		{
			dataMap.put("upd_opeacnt", new String());
		}
		else
		{
			dataMap.put("upd_opeacnt", template.getString(EKK0451C070CBSMsg.UPD_OPEACNT));
			workDataMap.put("upd_opeacnt", template.getString(EKK0451C070CBSMsg.UPD_OPEACNT));
		}
		
		// 無効フラグ ← 無効フラグ
		if (template.isNull(EKK0451C070CBSMsg.MK_FLG))
		{
			dataMap.put("mk_flg", new String());
		}
		else
		{
			dataMap.put("mk_flg", template.getString(EKK0451C070CBSMsg.MK_FLG));
			workDataMap.put("mk_flg", template.getString(EKK0451C070CBSMsg.MK_FLG));
		}
		
		// エラー情報の設定
		editErrInfoEKK0451C070(param, templates, (Integer)returnCode, fixedText);

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}

//	/**
//	 * データ抽出項目設定対象契約変更の下りマッピング処理を行います。
//	 * <br>
//	 * @param msgList
//	 * @param param
//	 * @param fixedText
//	 * @return リクエストパラメータ
//	 * @throws Exception
//	 */
//	@SuppressWarnings("unchecked")
//	private IRequestParameterReadWrite editRetEKK1401C010(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 (workMap == null)
//		{
//			workMap = new HashMap();
//			param.setMappingWorkArea(workMap);
//		}
//		
//		// 結果を詰めるマップを取得。
//		HashMap dataMap = null;
//		
//		HashMap workDataMap = (HashMap)workMap.get(CC_WORK_AREA_NAME_WRIB);
//		if (workDataMap == null)
//		{
//			workDataMap = new HashMap();
//			workMap.put(CC_WORK_AREA_NAME_WRIB, workDataMap);
//		}
//		
//		dataMap = (HashMap)param.getData(fixedText);
//		if (dataMap == null)
//		{
//			dataMap = new HashMap();
//			param.setData(fixedText, dataMap);
//		}
//		
//		// 世代登録年月日時分秒 ← 世代登録年月日時分秒
//		if (template.isNull(EKK1401C010CBSMsg.GENE_ADD_DTM))
//		{
//			dataMap.put("gene_add_dtm", new String());
//		}
//		else
//		{
//			dataMap.put("gene_add_dtm", template.getString(EKK1401C010CBSMsg.GENE_ADD_DTM));
//			workDataMap.put("gene_add_dtm", template.getString(EKK1401C010CBSMsg.GENE_ADD_DTM));
//		}
//		
//		// 登録年月日時分秒 ← 登録年月日時分秒
//		if (template.isNull(EKK1401C010CBSMsg.ADD_DTM))
//		{
//			dataMap.put("add_dtm", new String());
//		}
//		else
//		{
//			dataMap.put("add_dtm", template.getString(EKK1401C010CBSMsg.ADD_DTM));
//			workDataMap.put("add_dtm", template.getString(EKK1401C010CBSMsg.ADD_DTM));
//		}
//		
//		// 登録オペレータアカウント ← 登録オペレータアカウント
//		if (template.isNull(EKK1401C010CBSMsg.ADD_OPEACNT))
//		{
//			dataMap.put("add_opeacnt", new String());
//		}
//		else
//		{
//			dataMap.put("add_opeacnt", template.getString(EKK1401C010CBSMsg.ADD_OPEACNT));
//			workDataMap.put("add_opeacnt", template.getString(EKK1401C010CBSMsg.ADD_OPEACNT));
//		}
//		
//		// 更新年月日時分秒 ← 更新年月日時分秒
//		if (template.isNull(EKK1401C010CBSMsg.UPD_DTM))
//		{
//			dataMap.put("upd_dtm", new String());
//		}
//		else
//		{
//			dataMap.put("upd_dtm", template.getString(EKK1401C010CBSMsg.UPD_DTM));
//			workDataMap.put("upd_dtm", template.getString(EKK1401C010CBSMsg.UPD_DTM));
//			
//			// 処理対象となったサービス契約番号の最終更新日をセットする（作業領域に対して）
//			Iterator<Map.Entry<String, String>> iterator = hanyoSvcKei.entrySet().iterator();
//			while (iterator.hasNext()) {
//				Map.Entry<String, String> mapEntry = iterator.next();
//				JKKBpCommon.setLastDtmBySvcKeiNo(param, mapEntry.getKey(), template.getString(EKK1401C010CBSMsg.UPD_DTM));
//			}
//		}
//		
//		// 更新オペレータアカウント ← 更新オペレータアカウント
//		if (template.isNull(EKK1401C010CBSMsg.UPD_OPEACNT))
//		{
//			dataMap.put("upd_opeacnt", new String());
//		}
//		else
//		{
//			dataMap.put("upd_opeacnt", template.getString(EKK1401C010CBSMsg.UPD_OPEACNT));
//			workDataMap.put("upd_opeacnt", template.getString(EKK1401C010CBSMsg.UPD_OPEACNT));
//		}
//		
//		// 無効フラグ ← 無効フラグ
//		if (template.isNull(EKK1401C010CBSMsg.MK_FLG))
//		{
//			dataMap.put("mk_flg", new String());
//		}
//		else
//		{
//			dataMap.put("mk_flg", template.getString(EKK1401C010CBSMsg.MK_FLG));
//			workDataMap.put("mk_flg", template.getString(EKK1401C010CBSMsg.MK_FLG));
//		}
//		
//		// エラー情報の設定
//		editErrInfoEKK1401C010(param, templates, (Integer)returnCode, fixedText);
//
//		// エラー情報のマップを取得
//		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
//		if (errList == null)
//		{
//			errList = new ArrayList<Object>();
//		}
//		// コントロールマップに設定
//		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
//
//		return param;
//	}

	/**
	 * データ抽出項目設定完了の下りマッピング処理を行います。
	 * <br>
	 * @param msgList
	 * @param param
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK1391C040(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 (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = null;
		
		HashMap workDataMap = (HashMap)workMap.get(CC_WORK_AREA_NAME_WRIB);
		if (workDataMap == null)
		{
			workDataMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME_WRIB, workDataMap);
		}
		
		dataMap = (HashMap)param.getData(fixedText);
		if (dataMap == null)
		{
			dataMap = new HashMap();
			param.setData(fixedText, dataMap);
		}
		
		// 世代登録年月日時分秒 ← 世代登録年月日時分秒
		if (template.isNull(EKK1391C040CBSMsg.GENE_ADD_DTM))
		{
			dataMap.put("gene_add_dtm", new String());
		}
		else
		{
			dataMap.put("gene_add_dtm", template.getString(EKK1391C040CBSMsg.GENE_ADD_DTM));
			workDataMap.put("gene_add_dtm", template.getString(EKK1391C040CBSMsg.GENE_ADD_DTM));
		}
		
		// データ抽出項目設定ステータス ← データ抽出項目設定ステータス
		if (template.isNull(EKK1391C040CBSMsg.DCHSKMST_STAT))
		{
			dataMap.put("dchskmst_stat", new String());
		}
		else
		{
			dataMap.put("dchskmst_stat", template.getString(EKK1391C040CBSMsg.DCHSKMST_STAT));
			workDataMap.put("dchskmst_stat", template.getString(EKK1391C040CBSMsg.DCHSKMST_STAT));
		}
		
		// 登録年月日時分秒 ← 登録年月日時分秒
		if (template.isNull(EKK1391C040CBSMsg.ADD_DTM))
		{
			dataMap.put("add_dtm", new String());
		}
		else
		{
			dataMap.put("add_dtm", template.getString(EKK1391C040CBSMsg.ADD_DTM));
			workDataMap.put("add_dtm", template.getString(EKK1391C040CBSMsg.ADD_DTM));
		}
		
		// 登録オペレータアカウント ← 登録オペレータアカウント
		if (template.isNull(EKK1391C040CBSMsg.ADD_OPEACNT))
		{
			dataMap.put("add_opeacnt", new String());
		}
		else
		{
			dataMap.put("add_opeacnt", template.getString(EKK1391C040CBSMsg.ADD_OPEACNT));
			workDataMap.put("add_opeacnt", template.getString(EKK1391C040CBSMsg.ADD_OPEACNT));
		}
		
		// 更新年月日時分秒 ← 更新年月日時分秒
		if (template.isNull(EKK1391C040CBSMsg.UPD_DTM))
		{
			dataMap.put("upd_dtm", new String());
		}
		else
		{
			dataMap.put("upd_dtm", template.getString(EKK1391C040CBSMsg.UPD_DTM));
			workDataMap.put("upd_dtm", template.getString(EKK1391C040CBSMsg.UPD_DTM));
			
			// 処理対象となったサービス契約番号の最終更新日をセットする（作業領域に対して）
			Iterator<Map.Entry<String, String>> iterator = hanyoSvcKei.entrySet().iterator();
			while (iterator.hasNext()) {
				Map.Entry<String, String> mapEntry = iterator.next();
				JKKBpCommon.setLastDtmBySvcKeiNo(param, mapEntry.getKey(), template.getString(EKK1391C040CBSMsg.UPD_DTM));
			}
		}
		
		// 更新オペレータアカウント ← 更新オペレータアカウント
		if (template.isNull(EKK1391C040CBSMsg.UPD_OPEACNT))
		{
			dataMap.put("upd_opeacnt", new String());
		}
		else
		{
			dataMap.put("upd_opeacnt", template.getString(EKK1391C040CBSMsg.UPD_OPEACNT));
			workDataMap.put("upd_opeacnt", template.getString(EKK1391C040CBSMsg.UPD_OPEACNT));
		}
		
		// 無効フラグ ← 無効フラグ
		if (template.isNull(EKK1391C040CBSMsg.MK_FLG))
		{
			dataMap.put("mk_flg", new String());
		}
		else
		{
			dataMap.put("mk_flg", template.getString(EKK1391C040CBSMsg.MK_FLG));
			workDataMap.put("mk_flg", template.getString(EKK1391C040CBSMsg.MK_FLG));
		}
		
		// エラー情報の設定
		editErrInfoEKK1391C040(param, templates, (Integer)returnCode, fixedText);

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}
	
	/**
	 * 単一CAANMsgのマッピング処理
	 * <br>
	 * @param paramMap
	 * @param template
	 * @return putParamMap
	 * @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;
	}

	/**
	 * 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 handle
	 * @param param
	 * @param fixedText
	 * @return HashMap
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	public HashMap getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		return JKKBpCommon.createBpNotCheckParam();
	}

	/**
	 * ＢＰチェック結果を編集する。
	 * <br />
	 * @param param リクエストパラメータ
	 * @param caanMsgs サービスインターフェイス用のパラメータ配列
	 * @param returnCode リターンコード
	 * @return リクエストパラメータ
	 * @throws Throwable 
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] caanMsgs, Integer returnCode) throws Throwable
	{
		return JKKBpCommon.editErrorInfo(param, caanMsgs, returnCode);
	}

	/**
	 * ＢＰチェック結果を編集する。
	 * <br />
	 * @param param リクエストパラメータ
	 * @param caanMsgs サービスインターフェイス用のパラメータ配列
	 * @param returnCode リターンコード
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws Throwable 
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] caanMsgs, Integer returnCode, String fixedText)
			throws Throwable
	{
		return editErrorInfo(param, caanMsgs, returnCode);
	}

	/**
	 * SCの実行ステータスの取得処理を行います。
	 * <br>
	 * @param param
	 * @return SCの実行ステータス
	 * @throws Exception
	 */
	private int getReturnCode(IRequestParameterReadWrite param) throws Exception
	{
		return Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
	}
	
	/**
	 * 割引サービス契約キャンセルのエラー情報マッピング処理を行います。
	 * <br>
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK0451C070(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
			throws RequestParameterException
	{
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(EKK0451C070CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		HashMap inMap = null;

		// 作業項目領域
		Map workMap = (Map)param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}

		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);

		// 割引サービス契約番号 のエラー情報返却
		if (!template.isNull(EKK0451C070CBSMsg.WRIB_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("wrib_svc_kei_no_err"))
			{
				inMap.put("wrib_svc_kei_no_err", template.getString(EKK0451C070CBSMsg.WRIB_SVC_KEI_NO_ERR));
			}
		}
		
		// 申込明細番号 のエラー情報返却
		if (!template.isNull(EKK0451C070CBSMsg.MSKM_DTL_NO_ERR))
		{
			if (!inMap.containsKey("mskm_dtl_no_err"))
			{
				inMap.put("mskm_dtl_no_err", template.getString(EKK0451C070CBSMsg.MSKM_DTL_NO_ERR));
			}
		}
		
		// サービスキャンセル理由コード のエラー情報返却
		if (!template.isNull(EKK0451C070CBSMsg.SVC_CANCEL_RSN_CD_ERR))
		{
			if (!inMap.containsKey("svc_cancel_rsn_cd_err"))
			{
				inMap.put("svc_cancel_rsn_cd_err", template.getString(EKK0451C070CBSMsg.SVC_CANCEL_RSN_CD_ERR));
			}
		}
		
		// 異動区分 のエラー情報返却
		if (!template.isNull(EKK0451C070CBSMsg.IDO_DIV_ERR))
		{
			if (!inMap.containsKey("ido_div_err"))
			{
				inMap.put("ido_div_err", template.getString(EKK0451C070CBSMsg.IDO_DIV_ERR));
			}
		}
		
		// 更新年月日時分秒(更新前) のエラー情報返却
		if (!template.isNull(EKK0451C070CBSMsg.UPD_DTM_BF))
		{
			if (!inMap.containsKey("upd_dtm_bf_err"))
			{
				inMap.put("upd_dtm_bf_err", template.getString(EKK0451C070CBSMsg.UPD_DTM_BF));
			}
		}
		
		return param;
	}

//	/**
//	 * データ抽出項目設定対象契約変更のエラー情報マッピング処理を行います。
//	 * <br>
//	 * @param param
//	 * @param templates
//	 * @param returnCode
//	 * @param fixedText
//	 * @return リクエストパラメータ
//	 * @throws RequestParameterException
//	 */
//	@SuppressWarnings("unchecked")
//	private IRequestParameterReadWrite editErrInfoEKK1401C010(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
//			throws RequestParameterException
//	{
//		CAANMsg template = templates[0];
//		int templateStatus = template.getInt(EKK1401C010CBSMsg.STATUS);
//		if (returnCode != 0)
//		{
//			templateStatus = 9000;
//		}
//		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
//		{
//			templateStatus = 0;
//		}
//
//		int bpStatus = 0;
//		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
//		if (obj == null)
//		{
//			bpStatus = -1;
//		}
//		else
//		{
//			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
//		}
//
//		if (templateStatus > bpStatus)
//		{
//			// BPにサービスコンポーネントのステータスを設定する。
//			String formatStatus = String.format("%1$04d", templateStatus);
//			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
//			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
//			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
//		}
//
//		HashMap inMap = null;
//
//		// 作業項目領域
//		Map workMap = (Map)param.getMappingWorkArea();
//		if (workMap == null)
//		{
//			workMap = new HashMap();
//			param.setMappingWorkArea(workMap);
//		}
//
//		/* ユーザデータ情報 */
//		inMap = (HashMap)param.getData(fixedText);
//
//		// データ抽出項目設定番号エラー情報返却
//		if (!template.isNull(EKK1401C010CBSMsg.DCHSKMST_NO_ERR))
//		{
//			if (!inMap.containsKey("dchskmst_no_err"))
//			{
//				inMap.put("dchskmst_no_err", template.getString(EKK1401C010CBSMsg.DCHSKMST_NO_ERR));
//			}
//		}
//		
//		// データ抽出項目設定対象契約番号エラー情報返却
//		if (!template.isNull(EKK1401C010CBSMsg.DCHSKMST_TG_KEI_NO_ERR))
//		{
//			if (!inMap.containsKey("dchskmst_tg_kei_no_err"))
//			{
//				inMap.put("dchskmst_tg_kei_no_err", template.getString(EKK1401C010CBSMsg.DCHSKMST_TG_KEI_NO_ERR));
//			}
//		}
//		
//		// データ抽出項目設定対象契約適用開始年月日エラー情報返却
//		if (!template.isNull(EKK1401C010CBSMsg.DCHSKMST_TG_KEI_TSTAYMD_ERR))
//		{
//			if (!inMap.containsKey("dchskmst_tg_kei_tstaymd_err"))
//			{
//				inMap.put("dchskmst_tg_kei_tstaymd_err", template.getString(EKK1401C010CBSMsg.DCHSKMST_TG_KEI_TSTAYMD_ERR));
//			}
//		}
//		
//		// データ抽出項目設定対象契約適用終了年月日エラー情報返却
//		if (!template.isNull(EKK1401C010CBSMsg.DCHSKMST_TG_KEI_TENDYMD_ERR))
//		{
//			if (!inMap.containsKey("dchskmst_tg_kei_tendymd_err"))
//			{
//				inMap.put("dchskmst_tg_kei_tendymd_err", template.getString(EKK1401C010CBSMsg.DCHSKMST_TG_KEI_TENDYMD_ERR));
//			}
//		}
//		
//		// 更新年月日時分秒(更新前)エラー情報返却
//		if (!template.isNull(EKK1401C010CBSMsg.UPD_DTM_BF_ERR))
//		{
//			if (!inMap.containsKey("upd_dtm_bf_err"))
//			{
//				inMap.put("upd_dtm_bf_err", template.getString(EKK1401C010CBSMsg.UPD_DTM_BF_ERR));
//			}
//		}
//		
//		return param;
//	}

	/**
	 * データ抽出項目設定完了のエラー情報マッピング処理を行います。
	 * <br>
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK1391C040(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
			throws RequestParameterException
	{
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(EKK1391C040CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		HashMap inMap = null;

		// 作業項目領域
		Map workMap = (Map)param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}

		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);

		// データ抽出項目設定番号エラー情報返却
		if (!template.isNull(EKK1391C040CBSMsg.DCHSKMST_NO_ERR))
		{
			if (!inMap.containsKey("dchskmst_no_err"))
			{
				inMap.put("dchskmst_no_err", template.getString(EKK1391C040CBSMsg.DCHSKMST_NO_ERR));
			}
		}

		// データ抽出項目設定完了種別コード
		if (!template.isNull(EKK1391C040CBSMsg.DCHSKMST_FIN_SBT_CD_ERR))
		{
			if (!inMap.containsKey("dchskmst_fin_sbt_cd_err"))
			{
				inMap.put("dchskmst_fin_sbt_cd_err", template.getString(EKK1391C040CBSMsg.DCHSKMST_FIN_SBT_CD_ERR));
			}
		}

		// データ抽出項目設定終了年月日
		if (!template.isNull(EKK1391C040CBSMsg.DCHSKMST_END_YMD_ERR))
		{
			if (!inMap.containsKey("dchskmst_end_ymd_err"))
			{
				inMap.put("dchskmst_end_ymd_err", template.getString(EKK1391C040CBSMsg.DCHSKMST_END_YMD_ERR));
			}
		}

		// 異動区分
		if (!template.isNull(EKK1391C040CBSMsg.IDO_DIV_ERR))
		{
			if (!inMap.containsKey("ido_div_err"))
			{
				inMap.put("ido_div_err", template.getString(EKK1391C040CBSMsg.IDO_DIV_ERR));
			}
		}

		// データ抽出項目設定完了契機コード
		if (!template.isNull(EKK1391C040CBSMsg.DCHSKMST_FIN_OPTY_CD_ERR))
		{
			if (!inMap.containsKey("dchskmst_fin_opty_cd_err"))
			{
				inMap.put("dchskmst_fin_opty_cd_err", template.getString(EKK1391C040CBSMsg.DCHSKMST_FIN_OPTY_CD_ERR));
			}
		}

		// 更新年月日時分秒(更新前)エラー情報返却
		if (!template.isNull(EKK1391C040CBSMsg.UPD_DTM_BF_ERR))
		{
			if (!inMap.containsKey("upd_dtm_bf_err"))
			{
				inMap.put("upd_dtm_bf_err", template.getString(EKK1391C040CBSMsg.UPD_DTM_BF_ERR));
			}
		}
		
		return param;
	}
	
	/**
	 * 最終更新日が最大のサービス契約番号を取得
	 * <br>
	 * @param kbn 1:割引 2:汎用
	 * @param listNo
	 * @param svcCdList
	 * @return String サービス契約番号
	 * @throws RequestParameterException 
	 */
	@SuppressWarnings("unchecked")
	private String getDtmMax(IRequestParameterReadWrite param, int kbn, String listNo, ArrayList svcCdList) throws RequestParameterException
	{
		int svcCdListCnt = svcCdList.size();
		HashMap workBeanListMap1 = null;
		String prevRecDtm = "";
		String maxSvcKeiNo = "";
		String maxDtm = "";
		
		for (int iCnt = 0; iCnt < svcCdListCnt; iCnt++)
		{
			workBeanListMap1 = (HashMap)(svcCdList).get(iCnt);
			String addlistNo = (String)workBeanListMap1.get("list_no");
			if (listNo.equals(addlistNo))
			{
//				// サービス契約番号
//				if (workBeanListMap1 == null || workBeanListMap1.get("svc_kei_no") == null || "".equals(workBeanListMap1.get("svc_kei_no")))
//				{
					// 作業領域から更新年月日時分秒を取得する
					String lastDtm = JKKBpCommon.getLastDtmBySvcKeiNo(param, (String)workBeanListMap1.get("svc_kei_no"),
							(String)workBeanListMap1.get("upd_dtm_bf"));
					
					
					// 更新日が最大のサービス契約番号を取得するため、前レコードの更新日と比較する
					if (0 < lastDtm.compareTo(prevRecDtm))
					{
						// 最大の更新日を持つサービス契約番号として保存する
						maxSvcKeiNo = (String)workBeanListMap1.get("svc_kei_no");
						maxDtm = lastDtm;
					}
					
					// 割引の場合
					if (1 == kbn)
					{
						// 更新対象のサービス契約番号をメンバ変数に保存（割引/キャンペーン）
						wribSvcKei.put((String)workBeanListMap1.get("svc_kei_no"), lastDtm);
					}
					// 汎用の場合
					else if (2 == kbn)
					{
						// 更新対象のサービス契約番号をメンバ変数に保存（汎用）
						hanyoSvcKei.put((String)workBeanListMap1.get("svc_kei_no"), lastDtm);
					}
					
					prevRecDtm = lastDtm;
//				}
			}
		}
		
		return maxDtm;
	}
}
