/**********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JFUHakkoSODCC
 *   ソースファイル名：JFUHakkoSODCC.java
 *   作成者          ：FJ
 *   日付            ：2020年07月03日
 *＜機能概要＞
 *   照査時およびコース変更時に、契約内容によってサービスオーダ発行を行う
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *  v50.00.00    2020/07/03   FJ)張本     ANK-3862-00-00_【CMP】WEB電話オプション外出し対応
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKHakkoSODConstCC;
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.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
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.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B008CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1081D011CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1551D011CBSMsg;

/**
 * サービスオーダ発行部品
 * <p>
 * <br>
 * 指定されたサービス契約番号に紐づく契約内容よりサービスオーダ発行を実施する <br>
 * <br>
 * 【使用するサービスIF】<br>
 * 　・オプションサービス契約一覧照会（サービス契約番号）<br>
 * 　・オプションサービス契約＜ISP＞一意照会<br>
 * 　・サブオプションサービス契約一覧照会<br>
 * 　・サービス契約内訳一覧照会<br>
 * 　・サービス契約内訳一覧照会（SYSID）<br>
 * 　・サービス契約内訳一意照会<br>
 * 　・機器提供サービス契約一覧照会（サービス契約番号）<br>
 * 　・オーダ発行条件登録<br>
 * 　・オーダ情報作成ワーク登録
 * <br>
 * @author FJ
 */
public class JFUHakkoSODCC extends JKKHakkoSODCC
{

	/** サービスインターフェースのリターンコード領域キー識別子 */
	private static final String STATUS = "STATUS";
	/** サービスインターフェースの入力領域キー識別子 */
	private static final String IN_MAP = "IN_MAP";
	/** サービスインターフェースの結果領域キー識別子 */
	private static final String OUT_MAP = "OUT_MAP";

	/** サービスインターフェースの保持領域 */
	HashMap<String, Object> mapSC = new HashMap<String, Object>();

	private static boolean equals(Object obj1, Object obj2)
	{
		if (obj1 == null && obj2 == null)
		{
			return true;
		}
		if (obj1 != null && obj1.equals(obj2))
		{
			return true;
		}
		return false;
	}

	@SuppressWarnings("unchecked")
	private HashMap<String, Object> getMapSC(String scId, String funcCode)
	{

		HashMap<String, Object> map = (HashMap<String, Object>)mapSC.get(scId + JFUStrConst.HALF_UNDER_BAR + funcCode);

		if (map == null)
		{
			map = new HashMap<String, Object>();
		}
		return map;
	}

	/**
	 * サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースのリターンコード
	 * @throws Exception 
	 */
	@Override
	@SuppressWarnings("unchecked")
	protected int callEKK0191A010SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash, String funcCode) throws Exception
	{
		int status;

		HashMap<String, Object> map = getMapSC(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0191A010, funcCode);

		if (!equals(map.get(JKKHakkoSODConstCC.SVC_KEI_UCWK_NO), inHash.get(JKKHakkoSODConstCC.SVC_KEI_UCWK_NO))
				|| (funcCode.equals("1") && !equals(map.get(JKKHakkoSODConstCC.GENE_ADD_DTM), inHash.get(JKKHakkoSODConstCC.GENE_ADD_DTM))))
		{
			status = super.callEKK0191A010SC(param, handle, inHash, resultHash, funcCode);

			map.put(STATUS, status);
			map.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_NO, inHash.get(JKKHakkoSODConstCC.SVC_KEI_UCWK_NO));
			map.put(JKKHakkoSODConstCC.GENE_ADD_DTM, inHash.get(JKKHakkoSODConstCC.GENE_ADD_DTM));
			map.put(OUT_MAP, resultHash);
			mapSC.put(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0191A010 + JFUStrConst.HALF_UNDER_BAR + funcCode, map);

		}
		else
		{
			status = (Integer)map.get(STATUS);
			resultHash.putAll((HashMap<String, Object>)map.get(OUT_MAP));
		}

		return status;
	}

	/**
	 * EKK0341B008_機器提供サービス契約一覧照会(履歴照会)処理
	 * <br>
	 * 機器提供サービス契約一覧照会サービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param funcCd 機能コード
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @return 機器提供サービス契約一覧照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	@Override
	protected CAANMsg[] callEKK0341B008SCRireki(SessionHandle handle, IRequestParameterReadWrite param, String funcCd, String svcKeiNo,
			String kktkSvcKeiNo) throws Throwable
	{
		CAANMsg[] result = new CAANMsg[0];

		HashMap<String, Object> map = getMapSC(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0341B008, funcCd);

		if (!equals(map.get(EKK0341B008CBSMsg.KEY_SVC_KEI_NO), svcKeiNo) || !equals(map.get(EKK0341B008CBSMsg.KEY_KKTK_SVC_KEI_NO), kktkSvcKeiNo))
		{
			result = super.callEKK0341B008SCRireki(handle, param, funcCd, svcKeiNo, kktkSvcKeiNo);

			map.put(EKK0341B008CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
			map.put(EKK0341B008CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
			map.put(OUT_MAP, result);
			mapSC.put(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0341B008 + JFUStrConst.HALF_UNDER_BAR + funcCd, map);

		}
		else
		{
			result = (CAANMsg[])map.get(OUT_MAP);
		}

		return result;
	}

	/**
	 * サービス契約一意照会処理<br>
	 * <br>
	 * サービス契約一意照会サービスインターフェイスにより<br>
	 * サービス契約情報（世代登録年月日時分秒）を取得します。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @return サービス契約世代登録年月日時分秒
	 * @throws Throwable 
	 */
	@Override
	@SuppressWarnings("unchecked")
	protected HashMap<String, Object> getSvcKeiInfo(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{

		// 上りマッピング
		HashMap<String, Object> inHash = editInMsg_EKK0081A010CBS(param);
		HashMap<String, Object> resultHash = new HashMap<String, Object>();

		CAANMsg[] templates = (CAANMsg[])inHash.get(JCMConstants.TEMPLATE_LIST_KEY);

		String funcCd = templates[0].getString(EKK0081A010CBSMsg.FUNC_CODE);

		HashMap<String, Object> map = getMapSC(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0081A010, funcCd);

		if (map.isEmpty())
		{
			resultHash = super.getSvcKeiInfo(handle, param);

			map.put(IN_MAP, templates[0]);
			map.put(OUT_MAP, resultHash);
			mapSC.put(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0081A010 + JFUStrConst.HALF_UNDER_BAR + funcCd, map);

		}
		else
		{
			resultHash.putAll((HashMap<String, Object>)map.get(OUT_MAP));
		}

		return resultHash;
	}

	/**
	 * Z1オーダにかかるＳＯＤ４種がオーダ受付済か否かを照会します。（サービス契約内訳単位）<br>
	 * <pre>
	 * チェック対象ＳＯＤ： 「電話サービスオーダコード／オーダ内容コード」
	 * 　　20ＯＬＳ　　207ＯＬＳ設定・登録
	 * 　　21ＳＩＰ　　218ＳＩＰ・登録
	 * 　　23Radius　　202Radius認証・登録
	 * 　　24緊急通報　250緊急通報・登録
	 * </pre>
	 * @param	param					リクエストパラメータ一式
	 * @param	handle					セッションハンドル
	 * @param	svc_kei_no				サービス契約番号
	 * @param	trgt_svc_kei_ucwk_no	サービス契約内訳番号
	 * @return							チェックしたSOD件数
	 * @throws	Exception				任意の例外
	 */
	@Override
	protected int findZ1OrderAtKK1041SvcKeiUcwk(IRequestParameterReadWrite param, SessionHandle handle, String svc_kei_no, String trgt_svc_kei_ucwk_no) throws Throwable
	{
		int isOrderedZ1;

		HashMap<String, Object> map = getMapSC("findZ1OrderAtKK1041SvcKeiUcwk", "");

		if (!equals(map.get("svc_kei_no"), svc_kei_no) ||
				!equals(map.get("trgt_svc_kei_ucwk_no"), trgt_svc_kei_ucwk_no))
		{
			isOrderedZ1 = super.findZ1OrderAtKK1041SvcKeiUcwk(param,handle,svc_kei_no,trgt_svc_kei_ucwk_no);

			map.put("isOrderedZ1", isOrderedZ1);
			map.put("svc_kei_no", svc_kei_no);
			map.put("trgt_svc_kei_ucwk_no", trgt_svc_kei_ucwk_no);
			mapSC.put("findZ1OrderAtKK1041SvcKeiUcwk" + JFUStrConst.HALF_UNDER_BAR + "", map);

		}
		else
		{
			isOrderedZ1 = (Integer)map.get("isOrderedZ1");
		}

		return isOrderedZ1;
	}

	/**
	 * 多機能ルーター情報ルータ機能有無チェック<br>
	 * <br>
	 * サービス契約番号に紐付いている多機能ルータのルータ機能設定有無
	 * 
	 * <br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @return 0:有効な多機能ルーターなし(解約済、キャンセル済、サービスに対応した機器オプションなし)
	 * @return 1;ルータ機能のみ利用中
	 * @return 2:多機能ルーター設定・新規オーダ発行対象(最新要求種別コードが08)
	 * @return 4:多機能ルーター設定・変更オーダ発行対象(最新要求種別コードが02・04)
	 * @return 3:多機能ルーター設定・解約、消去オーダ発行対象(多機能ルータが異動を起因に解約された場合)
	 * @return 9:多機能ルーター設定・新規オーダ発行未
	 * @throws Throwable 
	 */
	@Override
	protected int checkTakinoRT(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable
	{
		int status;

		HashMap<String, Object> map = getMapSC("checkTakinoRT", "");

		if (map.get(STATUS) == null)
		{
			status = super.checkTakinoRT(handle, param);

			map.put(STATUS, status);
			mapSC.put("checkTakinoRT" + JFUStrConst.HALF_UNDER_BAR + "", map);

		}
		else
		{
			status = (Integer)map.get(STATUS);
		}

		return status;
	}

	
	/**
	 * オーダ発行条件登録実行処理<br>
	 * <br>
	 * オーダ発行条件登録サービスIFを実行します。<br>
	 * <br>
	 * 【使用するサービスIF】<br>
	 * 　・オーダ発行条件登録<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 
	 */
	@Override
	protected IRequestParameterReadWrite executeOdrHakkoJokenAdd(SessionHandle handle,
			IRequestParameterReadWrite param) throws Throwable
	{
		// 上りマッピング
		HashMap<String, Object> paramMap = editInMsg_EKK1081D011CBS(param);
		
		// SC呼び出し部品のインスタンス生成
		//（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// SC呼出
		Map<?, ?> result = scCall.run(paramMap, handle);

		// 下りマッピング
		editResultRP_EKK1081D011CBS(result, param);
		
		return param;
	}

	/**
	 * オーダ情報作成ワーク登録実行処理<br>
	 * <br>
	 * オーダ情報作成ワーク登録サービスIFを実行します。<br>
	 * <br>
	 * 【使用するサービスIF】<br>
	 * 　・オーダ情報作成ワーク登録<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 
	 */
	@Override
	protected IRequestParameterReadWrite executeOdrInfoSakseiWkAdd(SessionHandle handle,
			IRequestParameterReadWrite param) throws Throwable
	{
		// 上りマッピング
		HashMap<String, Object> paramMap = editInMsg_EKK1551D011CBS(param);
		
		// SC呼び出し部品のインスタンス生成
		//（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// SC呼出
		Map<?, ?> result = scCall.run(paramMap, handle);

		// 下りマッピング
		editResultRP_EKK1551D011CBS(result, param);
		
		return param;
	}

	/**
	 * 上りマッピング（オーダ発行条件登録）<br>
	 * <br>
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @return サービスコンポーネント実行用CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editInMsg_EKK1081D011CBS(IRequestParameterReadOnly param) throws RequestParameterException
	{
		String template_id = "EKK1081D011";

		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 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));

		CAANMsg template = new CAANMsg(EKK1081D011CBSMsg.class.getName());
		HashMap inMap = null;

		// テンプレートID
		template.set(EKK1081D011CBSMsg.TEMPLATEID, template_id);

		// 機能コード（チェック＆登録）
		template.set(EKK1081D011CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 共通部を設定
		editBasicCmn(param, template);

		// ユーザデータ情報
		inMap = (HashMap)param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP);

		// オーダ発行条件登録マップ.サービス契約番号 → サービス契約番号
		if (inMap == null || inMap.get("svc_kei_no") == null || "".equals(inMap.get("svc_kei_no")))
		{
			template.setNull(EKK1081D011CBSMsg.SVC_KEI_NO);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.SVC_KEI_NO, (String)inMap.get("svc_kei_no"));
		}

		// オーダ発行条件登録マップ.サービス契約内訳番号 → サービス契約内訳番号
		if (inMap == null || inMap.get("svc_kei_ucwk_no") == null || "".equals(inMap.get("svc_kei_ucwk_no")))
		{
			template.setNull(EKK1081D011CBSMsg.SVC_KEI_UCWK_NO);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.SVC_KEI_UCWK_NO, (String)inMap.get("svc_kei_ucwk_no"));
		}

		// オーダ発行条件登録マップ.機器提供サービス契約番号 → 機器提供サービス契約番号
		if (inMap == null || inMap.get("kktk_svc_kei_no") == null || "".equals(inMap.get("kktk_svc_kei_no")))
		{
			template.setNull(EKK1081D011CBSMsg.KKTK_SVC_KEI_NO);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.KKTK_SVC_KEI_NO, (String)inMap.get("kktk_svc_kei_no"));
		}

		// オーダ発行条件登録マップ.オプションサービス契約番号 → オプションサービス契約番号
		if (inMap == null || inMap.get("op_svc_kei_no") == null || "".equals(inMap.get("op_svc_kei_no")))
		{
			template.setNull(EKK1081D011CBSMsg.OP_SVC_KEI_NO);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.OP_SVC_KEI_NO, (String)inMap.get("op_svc_kei_no"));
		}

		// オーダ発行条件登録マップ.サブオプションサービス契約番号 → サブオプションサービス契約番号
		if (inMap == null || inMap.get("sbop_svc_kei_no") == null || "".equals(inMap.get("sbop_svc_kei_no")))
		{
			template.setNull(EKK1081D011CBSMsg.SBOP_SVC_KEI_NO);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.SBOP_SVC_KEI_NO, (String)inMap.get("sbop_svc_kei_no"));
		}

		// オーダ発行条件登録マップ.請求オプションサービス契約番号 → 請求オプションサービス契約番号
		if (inMap == null || inMap.get("seiopsvc_kei_no") == null || "".equals(inMap.get("seiopsvc_kei_no")))
		{
			template.setNull(EKK1081D011CBSMsg.SEIOPSVC_KEI_NO);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.SEIOPSVC_KEI_NO, (String)inMap.get("seiopsvc_kei_no"));
		}

		// オーダ発行条件登録マップ.オーダ種別コード → オーダ種別コード
		if (inMap == null || inMap.get("order_sbt_cd") == null || "".equals(inMap.get("order_sbt_cd")))
		{
			template.setNull(EKK1081D011CBSMsg.ORDER_SBT_CD);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.ORDER_SBT_CD, (String)inMap.get("order_sbt_cd"));
		}

		// オーダ発行条件登録マップ.サービスオーダコード → サービスオーダコード
		if (inMap == null || inMap.get("svc_order_cd") == null || "".equals(inMap.get("svc_order_cd")))
		{
			template.setNull(EKK1081D011CBSMsg.SVC_ORDER_CD);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.SVC_ORDER_CD, (String)inMap.get("svc_order_cd"));
		}

		// オーダ発行条件登録マップ.要求種別コード → 要求種別コード
		if (inMap == null || inMap.get("yokyu_sbt_cd") == null || "".equals(inMap.get("yokyu_sbt_cd")))
		{
			template.setNull(EKK1081D011CBSMsg.YOKYU_SBT_CD);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.YOKYU_SBT_CD, (String)inMap.get("yokyu_sbt_cd"));
		}

		// オーダ発行条件登録マップ.オーダ発行条件コード → オーダ発行条件コード
		if (inMap == null || inMap.get("odr_hakko_joken_cd") == null || "".equals(inMap.get("odr_hakko_joken_cd")))
		{
			template.setNull(EKK1081D011CBSMsg.ODR_HAKKO_JOKEN_CD);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.ODR_HAKKO_JOKEN_CD, (String)inMap.get("odr_hakko_joken_cd"));
		}

		// オーダ発行条件登録マップ.同一処理番号 → 同一処理番号
		if (inMap == null || inMap.get("same_trn_no") == null || "".equals(inMap.get("same_trn_no")))
		{
			template.setNull(EKK1081D011CBSMsg.SAME_TRN_NO);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.SAME_TRN_NO, (String)inMap.get("same_trn_no"));
		}

		// オーダ発行条件登録マップ.宅内機器型式コード → 宅内機器型式コード
		if (inMap == null || inMap.get("taknkiki_model_cd") == null || "".equals(inMap.get("taknkiki_model_cd")))
		{
			template.setNull(EKK1081D011CBSMsg.TAKNKIKI_MODEL_CD);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.TAKNKIKI_MODEL_CD, (String)inMap.get("taknkiki_model_cd"));
		}

		// オーダ発行条件登録マップ.機器製造番号 → 機器製造番号
		if (inMap == null || inMap.get("kiki_seizo_no") == null || "".equals(inMap.get("kiki_seizo_no")))
		{
			template.setNull(EKK1081D011CBSMsg.KIKI_SEIZO_NO);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.KIKI_SEIZO_NO, (String)inMap.get("kiki_seizo_no"));
		}

		// オーダ発行条件登録マップ.メールアドレス → メールアドレス
		if (inMap == null || inMap.get("mlad") == null || "".equals(inMap.get("mlad")))
		{
			template.setNull(EKK1081D011CBSMsg.MLAD);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.MLAD, (String)inMap.get("mlad"));
		}

		// オーダ発行条件登録マップ.スポットログインＳＹＳＩＤ → スポットログインＳＹＳＩＤ
		if (inMap == null || inMap.get("spot_login_sysid") == null || "".equals(inMap.get("spot_login_sysid")))
		{
			template.setNull(EKK1081D011CBSMsg.SPOT_LOGIN_SYSID);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.SPOT_LOGIN_SYSID, (String)inMap.get("spot_login_sysid"));
		}

		// オーダ発行条件登録マップ.送信依頼完了年月日時分秒 → 送信依頼完了年月日時分秒
		if (inMap == null || inMap.get("send_req_fin_dtm") == null || "".equals(inMap.get("send_req_fin_dtm")))
		{
			template.setNull(EKK1081D011CBSMsg.SEND_REQ_FIN_DTM);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.SEND_REQ_FIN_DTM, (String)inMap.get("send_req_fin_dtm"));
		}
		
		// サービス契約回線内訳番号
		if (inMap == null || inMap.get("svc_kei_kaisen_ucwk_no") == null || "".equals(inMap.get("svc_kei_kaisen_ucwk_no")))
		{
			template.setNull(EKK1081D011CBSMsg.SVC_KEI_KAISEN_UCWK_NO);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.SVC_KEI_KAISEN_UCWK_NO, (String)inMap.get("svc_kei_kaisen_ucwk_no"));
		}
		
		// 契約サービス制御要求オーダ識別コード
		if (inMap == null || inMap.get("kei_svc_ctl_yokyu_odr_skcd") == null || "".equals(inMap.get("kei_svc_ctl_yokyu_odr_skcd")))
		{
			template.setNull(EKK1081D011CBSMsg.KEI_SVC_CTL_YOKYU_ODR_SKCD);
		}
		else
		{
			template.set(EKK1081D011CBSMsg.KEI_SVC_CTL_YOKYU_ODR_SKCD, (String)inMap.get("kei_svc_ctl_yokyu_odr_skcd"));
		}

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}
	
	/**
	 * 下りマッピング（オーダ発行条件登録）
	 * <br>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングします<br>
	 * <br>
	 * @param msgList CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editResultRP_EKK1081D011CBS(Map<?, ?> msgList,
			IRequestParameterReadWrite param) throws Throwable
	{

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域の取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = null;

		// 業務データ設定
		dataMap = (HashMap)param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP);
		if (dataMap == null) 
		{
			dataMap = new HashMap();
			param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, dataMap);
		}
		// オーダ発行条件登録マップ.オーダ発行条件番号 ← オーダ発行条件番号
		if (parentTemplate.isNull(EKK1081D011CBSMsg.ODR_HAKKO_JOKEN_NO))
		{
			dataMap.put("odr_hakko_joken_no", "");
		}
		else
		{
			dataMap.put("odr_hakko_joken_no", parentTemplate.getString(EKK1081D011CBSMsg.ODR_HAKKO_JOKEN_NO));
		}

		// エラー情報の設定
		param = editErrorInfo_EKK1081D011CBS(param, templates, (Integer)return_code);

		//エラー情報のマップを取得
		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));

		// エラー発生時はExceptionを設定
		if (errList != null && !errList.isEmpty())
		{
			throw new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK1081D011CBSMsg.STATUS)));
		}

		return param;
	}

	/**
	 * サービスインターフェイス処理結果(エラー情報)の取得（オーダ発行条件登録）<br>
	 * <br>
	 * サービスインターフェイス処理結果(エラー情報)を取得し、サービスに格納します。<br>
	 * <br>
	 * @param param 業務データ取得・書込用I/F
	 * @param templates CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfo_EKK1081D011CBS(IRequestParameterReadWrite param,
			CAANMsg[] templates, int returnCode) throws Throwable
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(EKK1081D011CBSMsg.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 = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// ユーザデータ情報
		inMap = (HashMap)param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP);
		if (inMap == null)
		{
			inMap = new HashMap();
			param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap);
		}

		// オーダ発行条件登録マップ.サービス契約番号 → サービス契約番号 のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("svc_kei_no_err"))
			{
				inMap.put("svc_kei_no_err", template.getString(EKK1081D011CBSMsg.SVC_KEI_NO_ERR));
			}
		}
		// オーダ発行条件登録マップ.サービス契約内訳番号 → サービス契約内訳番号 のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.SVC_KEI_UCWK_NO_ERR))
		{
			if (!inMap.containsKey("svc_kei_ucwk_no_err"))
			{
				inMap.put("svc_kei_ucwk_no_err", template.getString(EKK1081D011CBSMsg.SVC_KEI_UCWK_NO_ERR));
			}
		}
		// オーダ発行条件登録マップ.機器提供サービス契約番号 → 機器提供サービス契約番号 のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.KKTK_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("kktk_svc_kei_no_err"))
			{
				inMap.put("kktk_svc_kei_no_err", template.getString(EKK1081D011CBSMsg.KKTK_SVC_KEI_NO_ERR));
			}
		}
		// オーダ発行条件登録マップ.オプションサービス契約番号 → オプションサービス契約番号 のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.OP_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("op_svc_kei_no_err"))
			{
				inMap.put("op_svc_kei_no_err", template.getString(EKK1081D011CBSMsg.OP_SVC_KEI_NO_ERR));
			}
		}
		// オーダ発行条件登録マップ.サブオプションサービス契約番号 → サブオプションサービス契約番号 のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.SBOP_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("sbop_svc_kei_no_err"))
			{
				inMap.put("sbop_svc_kei_no_err", template.getString(EKK1081D011CBSMsg.SBOP_SVC_KEI_NO_ERR));
			}
		}
		// オーダ発行条件登録マップ.請求オプションサービス契約番号 → 請求オプションサービス契約番号 のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.SEIOPSVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("seiopsvc_kei_no_err"))
			{
				inMap.put("seiopsvc_kei_no_err", template.getString(EKK1081D011CBSMsg.SEIOPSVC_KEI_NO_ERR));
			}
		}
		// オーダ発行条件登録マップ.オーダ種別コード → オーダ種別コード のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.ORDER_SBT_CD_ERR))
		{
			if (!inMap.containsKey("order_sbt_cd_err"))
			{
				inMap.put("order_sbt_cd_err", template.getString(EKK1081D011CBSMsg.ORDER_SBT_CD_ERR));
			}
		}
		// オーダ発行条件登録マップ.サービスオーダコード → サービスオーダコード のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.SVC_ORDER_CD_ERR))
		{
			if (!inMap.containsKey("svc_order_cd_err"))
			{
				inMap.put("svc_order_cd_err", template.getString(EKK1081D011CBSMsg.SVC_ORDER_CD_ERR));
			}
		}
		// オーダ発行条件登録マップ.要求種別コード → 要求種別コード のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.YOKYU_SBT_CD_ERR))
		{
			if (!inMap.containsKey("yokyu_sbt_cd_err"))
			{
				inMap.put("yokyu_sbt_cd_err", template.getString(EKK1081D011CBSMsg.YOKYU_SBT_CD_ERR));
			}
		}
		// オーダ発行条件登録マップ.オーダ発行条件コード → オーダ発行条件コード のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.ODR_HAKKO_JOKEN_CD_ERR))
		{
			if (!inMap.containsKey("odr_hakko_joken_cd_err"))
			{
				inMap.put("odr_hakko_joken_cd_err", template.getString(EKK1081D011CBSMsg.ODR_HAKKO_JOKEN_CD_ERR));
			}
		}
		// オーダ発行条件登録マップ.同一処理番号 → 同一処理番号 のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.SAME_TRN_NO_ERR))
		{
			if (!inMap.containsKey("same_trn_no_err"))
			{
				inMap.put("same_trn_no_err", template.getString(EKK1081D011CBSMsg.SAME_TRN_NO_ERR));
			}
		}
		// オーダ発行条件登録マップ.宅内機器型式コード → 宅内機器型式コード のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.TAKNKIKI_MODEL_CD_ERR))
		{
			if (!inMap.containsKey("taknkiki_model_cd_err"))
			{
				inMap.put("taknkiki_model_cd_err", template.getString(EKK1081D011CBSMsg.TAKNKIKI_MODEL_CD_ERR));
			}
		}
		// オーダ発行条件登録マップ.機器製造番号 → 機器製造番号 のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.KIKI_SEIZO_NO_ERR))
		{
			if (!inMap.containsKey("kiki_seizo_no_err"))
			{
				inMap.put("kiki_seizo_no_err", template.getString(EKK1081D011CBSMsg.KIKI_SEIZO_NO_ERR));
			}
		}
		// オーダ発行条件登録マップ.メールアドレス → メールアドレス のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.MLAD_ERR))
		{
			if (!inMap.containsKey("mlad_err"))
			{
				inMap.put("mlad_err", template.getString(EKK1081D011CBSMsg.MLAD_ERR));
			}
		}
		// オーダ発行条件登録マップ.スポットログインＳＹＳＩＤ → スポットログインＳＹＳＩＤ のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.SPOT_LOGIN_SYSID_ERR))
		{
			if (!inMap.containsKey("spot_login_sysid_err"))
			{
				inMap.put("spot_login_sysid_err", template.getString(EKK1081D011CBSMsg.SPOT_LOGIN_SYSID_ERR));
			}
		}
		// オーダ発行条件登録マップ.送信依頼完了年月日時分秒 → 送信依頼完了年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1081D011CBSMsg.SEND_REQ_FIN_DTM_ERR))
		{
			if (!inMap.containsKey("send_req_fin_dtm_err"))
			{
				inMap.put("send_req_fin_dtm_err", template.getString(EKK1081D011CBSMsg.SEND_REQ_FIN_DTM_ERR));
			}
		}
		return param;
	}

	/**
	 * 上りマッピング（オーダ情報作成ワーク登録）<br>
	 * <br>
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングします。
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @return サービスコンポーネント実行用CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editInMsg_EKK1551D011CBS(IRequestParameterReadOnly param) throws RequestParameterException
	{
		String template_id = "EKK1551D011";

		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 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));

		CAANMsg template = new CAANMsg(EKK1551D011CBSMsg.class.getName());

		HashMap inMap = null;

		// テンプレートID
		template.set(EKK1551D011CBSMsg.TEMPLATEID, template_id);

		// 機能コード（チェック＆登録）
		template.set(EKK1551D011CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 共通部を設定
		editBasicCmn(param, template);

		// ユーザデータ情報
		inMap = (HashMap)param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP);
		
		// オーダ情報作成ワーク登録.オーダ発行条件番号 → オーダ発行条件番号
		if (inMap == null || inMap.get("odr_hakko_joken_no") == null || "".equals(inMap.get("odr_hakko_joken_no")))
		{
			template.setNull(EKK1551D011CBSMsg.ODR_HAKKO_JOKEN_NO);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.ODR_HAKKO_JOKEN_NO, (String)inMap.get("odr_hakko_joken_no"));
		}

		// オーダ情報作成ワーク登録.オーダ内容コード → オーダ内容コード
		if (inMap == null || inMap.get("odr_naiyo_cd") == null || "".equals(inMap.get("odr_naiyo_cd")))
		{
			template.setNull(EKK1551D011CBSMsg.ODR_NAIYO_CD);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.ODR_NAIYO_CD, (String)inMap.get("odr_naiyo_cd"));
		}

		// オーダ情報作成ワーク登録.サービス契約番号 → サービス契約番号
		if (inMap == null || inMap.get("svc_kei_no") == null || "".equals(inMap.get("svc_kei_no")))
		{
			template.setNull(EKK1551D011CBSMsg.SVC_KEI_NO);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.SVC_KEI_NO, (String)inMap.get("svc_kei_no"));
		}

		// オーダ情報作成ワーク登録.サービス契約世代登録年月日時分秒 → サービス契約世代登録年月日時分秒
		if (inMap == null || inMap.get("svkei_gadtm") == null || "".equals(inMap.get("svkei_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.SVKEI_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.SVKEI_GADTM, (String)inMap.get("svkei_gadtm"));
		}

		// オーダ情報作成ワーク登録.サービス契約内訳番号 → サービス契約内訳番号
		if (inMap == null || inMap.get("svc_kei_ucwk_no") == null || "".equals(inMap.get("svc_kei_ucwk_no")))
		{
			template.setNull(EKK1551D011CBSMsg.SVC_KEI_UCWK_NO);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.SVC_KEI_UCWK_NO, (String)inMap.get("svc_kei_ucwk_no"));
		}

		// オーダ情報作成ワーク登録.サービス契約内訳世代登録年月日時分秒 → サービス契約内訳世代登録年月日時分秒
		if (inMap == null || inMap.get("svkeiuw_gadtm") == null || "".equals(inMap.get("svkeiuw_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.SVKEIUW_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.SVKEIUW_GADTM, (String)inMap.get("svkeiuw_gadtm"));
		}

		// オーダ情報作成ワーク登録.機器提供サービス契約番号 → 機器提供サービス契約番号
		if (inMap == null || inMap.get("kktk_svc_kei_no") == null || "".equals(inMap.get("kktk_svc_kei_no")))
		{
			template.setNull(EKK1551D011CBSMsg.KKTK_SVC_KEI_NO);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.KKTK_SVC_KEI_NO, (String)inMap.get("kktk_svc_kei_no"));
		}

		// オーダ情報作成ワーク登録.機器提供サービス契約世代登録年月日時分秒 → 機器提供サービス契約世代登録年月日時分秒
		if (inMap == null || inMap.get("kktsvkei_gadtm") == null || "".equals(inMap.get("kktsvkei_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.KKTSVKEI_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.KKTSVKEI_GADTM, (String)inMap.get("kktsvkei_gadtm"));
		}

		// オーダ情報作成ワーク登録.オプションサービス契約番号 → オプションサービス契約番号
		if (inMap == null || inMap.get("op_svc_kei_no") == null || "".equals(inMap.get("op_svc_kei_no")))
		{
			template.setNull(EKK1551D011CBSMsg.OP_SVC_KEI_NO);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.OP_SVC_KEI_NO, (String)inMap.get("op_svc_kei_no"));
		}

		// オーダ情報作成ワーク登録.オプションサービス契約世代登録年月日時分秒 → オプションサービス契約世代登録年月日時分秒
		if (inMap == null || inMap.get("opsvkei_gadtm") == null || "".equals(inMap.get("opsvkei_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.OPSVKEI_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.OPSVKEI_GADTM, (String)inMap.get("opsvkei_gadtm"));
		}

		// オーダ情報作成ワーク登録.サブオプションサービス契約番号 → サブオプションサービス契約番号
		if (inMap == null || inMap.get("sbop_svc_kei_no") == null || "".equals(inMap.get("sbop_svc_kei_no")))
		{
			template.setNull(EKK1551D011CBSMsg.SBOP_SVC_KEI_NO);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.SBOP_SVC_KEI_NO, (String)inMap.get("sbop_svc_kei_no"));
		}

		// オーダ情報作成ワーク登録.サブオプションサービス契約世代登録年月日時分秒 → サブオプションサービス契約世代登録年月日時分秒
		if (inMap == null || inMap.get("sbopsvkei_gadtm") == null || "".equals(inMap.get("sbopsvkei_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.SBOPSVKEI_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.SBOPSVKEI_GADTM, (String)inMap.get("sbopsvkei_gadtm"));
		}

		// オーダ情報作成ワーク登録.請求オプションサービス契約番号 → 請求オプションサービス契約番号
		if (inMap == null || inMap.get("seiopsvc_kei_no") == null || "".equals(inMap.get("seiopsvc_kei_no")))
		{
			template.setNull(EKK1551D011CBSMsg.SEIOPSVC_KEI_NO);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.SEIOPSVC_KEI_NO, (String)inMap.get("seiopsvc_kei_no"));
		}

		// オーダ情報作成ワーク登録.請求オプションサービス契約世代登録年月日時分秒 → 請求オプションサービス契約世代登録年月日時分秒
		if (inMap == null || inMap.get("seiopsvkei_gadtm") == null || "".equals(inMap.get("seiopsvkei_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.SEIOPSVKEI_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.SEIOPSVKEI_GADTM, (String)inMap.get("seiopsvkei_gadtm"));
		}

		// オーダ情報作成ワーク登録.付加情報契約番号 → 付加情報契約番号
		if (inMap == null || inMap.get("huka_inf_kei_no") == null || "".equals(inMap.get("huka_inf_kei_no")))
		{
			template.setNull(EKK1551D011CBSMsg.HUKA_INF_KEI_NO);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.HUKA_INF_KEI_NO, (String)inMap.get("huka_inf_kei_no"));
		}

		// オーダ情報作成ワーク登録.付加情報契約世代登録年月日時分秒 → 付加情報契約世代登録年月日時分秒
		if (inMap == null || inMap.get("huka_inf_kei_gadtm") == null || "".equals(inMap.get("huka_inf_kei_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.HUKA_INF_KEI_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.HUKA_INF_KEI_GADTM, (String)inMap.get("huka_inf_kei_gadtm"));
		}

		// オーダ情報作成ワーク登録.変更前サービス契約世代登録年月日時分秒 → 変更前サービス契約世代登録年月日時分秒
		if (inMap == null || inMap.get("chbf_svkei_gadtm") == null || "".equals(inMap.get("chbf_svkei_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.CHBF_SVKEI_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.CHBF_SVKEI_GADTM, (String)inMap.get("chbf_svkei_gadtm"));
		}

		// オーダ情報作成ワーク登録.変更前サービス契約内訳世代登録年月日時分秒 → 変更前サービス契約内訳世代登録年月日時分秒
		if (inMap == null || inMap.get("chbf_svkeiuw_gadtm") == null || "".equals(inMap.get("chbf_svkeiuw_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.CHBF_SVKEIUW_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.CHBF_SVKEIUW_GADTM, (String)inMap.get("chbf_svkeiuw_gadtm"));
		}

		// オーダ情報作成ワーク登録.変更前機器提供サービス契約世代登録年月日時分秒 → 変更前機器提供サービス契約世代登録年月日時分秒
		if (inMap == null || inMap.get("chbf_kktsvkei_gadtm") == null || "".equals(inMap.get("chbf_kktsvkei_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.CHBF_KKTSVKEI_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.CHBF_KKTSVKEI_GADTM, (String)inMap.get("chbf_kktsvkei_gadtm"));
		}

		// オーダ情報作成ワーク登録.変更前オプションサービス契約世代登録年月日時分秒 → 変更前オプションサービス契約世代登録年月日時分秒
		if (inMap == null || inMap.get("chbf_opsvkei_gadtm") == null || "".equals(inMap.get("chbf_opsvkei_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.CHBF_OPSVKEI_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.CHBF_OPSVKEI_GADTM, (String)inMap.get("chbf_opsvkei_gadtm"));
		}

		// オーダ情報作成ワーク登録.変更前サブオプション契約世代登録年月日時分秒 → 変更前サブオプション契約世代登録年月日時分秒
		if (inMap == null || inMap.get("chbf_sbopsvkei_gadtm") == null || "".equals(inMap.get("chbf_sbopsvkei_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.CHBF_SBOPSVKEI_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.CHBF_SBOPSVKEI_GADTM, (String)inMap.get("chbf_sbopsvkei_gadtm"));
		}

		// オーダ情報作成ワーク登録.変更前請求オプション契約世代登録年月日時分秒 → 変更前請求オプション契約世代登録年月日時分秒
		if (inMap == null || inMap.get("chbf_seiopsvkei_gadtm") == null || "".equals(inMap.get("chbf_seiopsvkei_gadtm")))
		{
			template.setNull(EKK1551D011CBSMsg.CHBF_SEIOPSVKEI_GADTM);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.CHBF_SEIOPSVKEI_GADTM, (String)inMap.get("chbf_seiopsvkei_gadtm"));
		}

		// オーダ情報作成ワーク登録.機器オプションサービス契約番号１ → 機器オプションサービス契約番号１
		if (inMap == null || inMap.get("kkop_svc_kei_no_1") == null || "".equals(inMap.get("kkop_svc_kei_no_1")))
		{
			template.setNull(EKK1551D011CBSMsg.KKOP_SVC_KEI_NO_1);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.KKOP_SVC_KEI_NO_1, (String)inMap.get("kkop_svc_kei_no_1"));
		}
		// オーダ情報作成ワーク登録.機器オプションサービス契約世代登録年月日時分秒１ → 機器オプションサービス契約世代登録年月日時分秒１
		if (inMap == null || inMap.get("kkosvkei_gadtm_1") == null || "".equals(inMap.get("kkosvkei_gadtm_1")))
		{
			template.setNull(EKK1551D011CBSMsg.KKOSVKEI_GADTM_1);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.KKOSVKEI_GADTM_1, (String)inMap.get("kkosvkei_gadtm_1"));
		}
		// オーダ情報作成ワーク登録.機器オプションサービス契約番号２ → 機器オプションサービス契約番号２
		if (inMap == null || inMap.get("kkop_svc_kei_no_2") == null || "".equals(inMap.get("kkop_svc_kei_no_2")))
		{
			template.setNull(EKK1551D011CBSMsg.KKOP_SVC_KEI_NO_2);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.KKOP_SVC_KEI_NO_2, (String)inMap.get("kkop_svc_kei_no_2"));
		}
		// オーダ情報作成ワーク登録.機器オプションサービス契約世代登録年月日時分秒２ → 機器オプションサービス契約世代登録年月日時分秒２
		if (inMap == null || inMap.get("kkosvkei_gadtm_2") == null || "".equals(inMap.get("kkosvkei_gadtm_2")))
		{
			template.setNull(EKK1551D011CBSMsg.KKOSVKEI_GADTM_2);
		}
		else
		{
			template.set(EKK1551D011CBSMsg.KKOSVKEI_GADTM_2, (String)inMap.get("kkosvkei_gadtm_2"));
		}

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * 下りマッピング（オーダ情報作成ワーク登録）
	 * <br>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングします<br>
	 * <br>
	 * @param msgList CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editResultRP_EKK1551D011CBS(Map<?, ?> msgList,
			IRequestParameterReadWrite param) throws Throwable
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = null;

		// 業務データ設定
		dataMap = (HashMap)param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP);
		if (dataMap == null)
		{
			dataMap = new HashMap();
			param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, dataMap);
		}

		// オーダ情報作成ワーク登録.オーダ情報作成ワーク番号 ← オーダ情報作成ワーク番号
		if (parentTemplate.isNull(EKK1551D011CBSMsg.ODR_INF_SKSI_WK_NO))
		{
			dataMap.put("odr_inf_sksi_wk_no", "");
		}
		else
		{
			dataMap.put("odr_inf_sksi_wk_no", parentTemplate.getString(EKK1551D011CBSMsg.ODR_INF_SKSI_WK_NO));
		}

		// エラー情報の設定
		param = editErrorInfo_EKK1551D011CBS(param, templates, (Integer)return_code);

		//エラー情報のマップを取得
		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));

		// エラー発生時はExceptionを設定
		if (errList != null && !errList.isEmpty())
		{
			throw new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK1551D011CBSMsg.STATUS)));
		}
		
		return param;
	}

	/**
	 * サービスインターフェイス処理結果(エラー情報)の取得（オーダ情報作成ワーク登録）<br>
	 * <br>
	 * サービスインターフェイス処理結果(エラー情報)を取得し、サービスに格納します。<br>
	 * <br>
	 * @param param 業務データ取得・書込用I/F
	 * @param templates CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfo_EKK1551D011CBS(IRequestParameterReadWrite param,
			CAANMsg[] templates, int returnCode) throws Throwable
	{
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(EKK1551D011CBSMsg.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;
		
		// ユーザデータ情報
		inMap = (HashMap)param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP);
		if (inMap == null)
		{
			inMap = new HashMap();
			param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap);
		}

		// オーダ情報作成ワーク登録.オーダ発行条件番号 → オーダ発行条件番号 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.ODR_HAKKO_JOKEN_NO_ERR))
		{
			if (!inMap.containsKey("odr_hakko_joken_no_err"))
			{
				inMap.put("odr_hakko_joken_no_err", template.getString(EKK1551D011CBSMsg.ODR_HAKKO_JOKEN_NO_ERR));
			}
		}
		// オーダ情報作成ワーク登録.オーダ内容コード → オーダ内容コード のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.ODR_NAIYO_CD_ERR))
		{
			if (!inMap.containsKey("odr_naiyo_cd_err"))
			{
				inMap.put("odr_naiyo_cd_err", template.getString(EKK1551D011CBSMsg.ODR_NAIYO_CD_ERR));
			}
		}
		// オーダ情報作成ワーク登録.サービス契約番号 → サービス契約番号 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("svc_kei_no_err"))
			{
				inMap.put("svc_kei_no_err", template.getString(EKK1551D011CBSMsg.SVC_KEI_NO_ERR));
			}
		}
		// オーダ情報作成ワーク登録.サービス契約世代登録年月日時分秒 → サービス契約世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.SVKEI_GADTM_ERR))
		{
			if (!inMap.containsKey("svkei_gadtm_err"))
			{
				inMap.put("svkei_gadtm_err", template.getString(EKK1551D011CBSMsg.SVKEI_GADTM_ERR));
			}
		}
		// オーダ情報作成ワーク登録.サービス契約内訳番号 → サービス契約内訳番号 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.SVC_KEI_UCWK_NO_ERR))
		{
			if (!inMap.containsKey("svc_kei_ucwk_no_err"))
			{
				inMap.put("svc_kei_ucwk_no_err", template.getString(EKK1551D011CBSMsg.SVC_KEI_UCWK_NO_ERR));
			}
		}
		// オーダ情報作成ワーク登録.サービス契約内訳世代登録年月日時分秒 → サービス契約内訳世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.SVKEIUW_GADTM_ERR))
		{
			if (!inMap.containsKey("svkeiuw_gadtm_err"))
			{
				inMap.put("svkeiuw_gadtm_err", template.getString(EKK1551D011CBSMsg.SVKEIUW_GADTM_ERR));
			}
		}
		// オーダ情報作成ワーク登録.機器提供サービス契約番号 → 機器提供サービス契約番号 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.KKTK_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("kktk_svc_kei_no_err"))
			{
				inMap.put("kktk_svc_kei_no_err", template.getString(EKK1551D011CBSMsg.KKTK_SVC_KEI_NO_ERR));
			}
		}
		// オーダ情報作成ワーク登録.機器提供サービス契約世代登録年月日時分秒 → 機器提供サービス契約世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.KKTSVKEI_GADTM_ERR))
		{
			if (!inMap.containsKey("kktsvkei_gadtm_err"))
			{
				inMap.put("kktsvkei_gadtm_err", template.getString(EKK1551D011CBSMsg.KKTSVKEI_GADTM_ERR));
			}
		}
		// オーダ情報作成ワーク登録.オプションサービス契約番号 → オプションサービス契約番号 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.OP_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("op_svc_kei_no_err"))
			{
				inMap.put("op_svc_kei_no_err", template.getString(EKK1551D011CBSMsg.OP_SVC_KEI_NO_ERR));
			}
		}
		// オーダ情報作成ワーク登録.オプションサービス契約世代登録年月日時分秒 → オプションサービス契約世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.OPSVKEI_GADTM_ERR))
		{
			if (!inMap.containsKey("opsvkei_gadtm_err"))
			{
				inMap.put("opsvkei_gadtm_err", template.getString(EKK1551D011CBSMsg.OPSVKEI_GADTM_ERR));
			}
		}
		// オーダ情報作成ワーク登録.サブオプションサービス契約番号 → サブオプションサービス契約番号 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.SBOP_SVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("sbop_svc_kei_no_err"))
			{
				inMap.put("sbop_svc_kei_no_err", template.getString(EKK1551D011CBSMsg.SBOP_SVC_KEI_NO_ERR));
			}
		}
		// オーダ情報作成ワーク登録.サブオプションサービス契約世代登録年月日時分秒 → サブオプションサービス契約世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.SBOPSVKEI_GADTM_ERR))
		{
			if (!inMap.containsKey("sbopsvkei_gadtm_err"))
			{
				inMap.put("sbopsvkei_gadtm_err", template.getString(EKK1551D011CBSMsg.SBOPSVKEI_GADTM_ERR));
			}
		}
		// オーダ情報作成ワーク登録.請求オプションサービス契約番号 → 請求オプションサービス契約番号 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.SEIOPSVC_KEI_NO_ERR))
		{
			if (!inMap.containsKey("seiopsvc_kei_no_err"))
			{
				inMap.put("seiopsvc_kei_no_err", template.getString(EKK1551D011CBSMsg.SEIOPSVC_KEI_NO_ERR));
			}
		}
		// オーダ情報作成ワーク登録.請求オプションサービス契約世代登録年月日時分秒 → 請求オプションサービス契約世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.SEIOPSVKEI_GADTM_ERR))
		{
			if (!inMap.containsKey("seiopsvkei_gadtm_err"))
			{
				inMap.put("seiopsvkei_gadtm_err", template.getString(EKK1551D011CBSMsg.SEIOPSVKEI_GADTM_ERR));
			}
		}
		// オーダ情報作成ワーク登録.付加情報契約番号 → 付加情報契約番号 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.HUKA_INF_KEI_NO_ERR))
		{
			if (!inMap.containsKey("huka_inf_kei_no_err"))
			{
				inMap.put("huka_inf_kei_no_err", template.getString(EKK1551D011CBSMsg.HUKA_INF_KEI_NO_ERR));
			}
		}
		// オーダ情報作成ワーク登録.付加情報契約世代登録年月日時分秒 → 付加情報契約世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.HUKA_INF_KEI_GADTM_ERR))
		{
			if (!inMap.containsKey("huka_inf_kei_gadtm_err"))
			{
				inMap.put("huka_inf_kei_gadtm_err", template.getString(EKK1551D011CBSMsg.HUKA_INF_KEI_GADTM_ERR));
			}
		}
		// オーダ情報作成ワーク登録.変更前サービス契約世代登録年月日時分秒 → 変更前サービス契約世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.CHBF_SVKEI_GADTM_ERR))
		{
			if (!inMap.containsKey("chbf_svkei_gadtm_err"))
			{
				inMap.put("chbf_svkei_gadtm_err", template.getString(EKK1551D011CBSMsg.CHBF_SVKEI_GADTM_ERR));
			}
		}
		// オーダ情報作成ワーク登録.変更前サービス契約内訳世代登録年月日時分秒 → 変更前サービス契約内訳世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.CHBF_SVKEIUW_GADTM_ERR))
		{
			if (!inMap.containsKey("chbf_svkeiuw_gadtm_err"))
			{
				inMap.put("chbf_svkeiuw_gadtm_err", template.getString(EKK1551D011CBSMsg.CHBF_SVKEIUW_GADTM_ERR));
			}
		}
		// オーダ情報作成ワーク登録.変更前機器提供サービス契約世代登録年月日時分秒 → 変更前機器提供サービス契約世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.CHBF_KKTSVKEI_GADTM_ERR))
		{
			if (!inMap.containsKey("chbf_kktsvkei_gadtm_err"))
			{
				inMap.put("chbf_kktsvkei_gadtm_err", template.getString(EKK1551D011CBSMsg.CHBF_KKTSVKEI_GADTM_ERR));
			}
		}
		// オーダ情報作成ワーク登録.変更前オプションサービス契約世代登録年月日時分秒 → 変更前オプションサービス契約世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.CHBF_OPSVKEI_GADTM_ERR))
		{
			if (!inMap.containsKey("chbf_opsvkei_gadtm_err"))
			{
				inMap.put("chbf_opsvkei_gadtm_err", template.getString(EKK1551D011CBSMsg.CHBF_OPSVKEI_GADTM_ERR));
			}
		}
		// オーダ情報作成ワーク登録.変更前サブオプション契約世代登録年月日時分秒 → 変更前サブオプション契約世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.CHBF_SBOPSVKEI_GADTM_ERR))
		{
			if (!inMap.containsKey("chbf_sbopsvkei_gadtm_err"))
			{
				inMap.put("chbf_sbopsvkei_gadtm_err", template.getString(EKK1551D011CBSMsg.CHBF_SBOPSVKEI_GADTM_ERR));
			}
		}
		// オーダ情報作成ワーク登録.変更前請求オプション契約世代登録年月日時分秒 → 変更前請求オプション契約世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK1551D011CBSMsg.CHBF_SEIOPSVKEI_GADTM_ERR))
		{
			if (!inMap.containsKey("chbf_seiopsvkei_gadtm_err"))
			{
				inMap.put("chbf_seiopsvkei_gadtm_err", template.getString(EKK1551D011CBSMsg.CHBF_SEIOPSVKEI_GADTM_ERR));
			}
		}
		return param;
	}

}
