/*******************************************************************************
* All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
* システム名        ：eo顧客基幹システム
* モジュール名      ：JKKDenwaChoCC
* ソースファイル名  ：JKKDenwaChoCC.java
* 作成者            ：富士通
* 日付              ：2013年12月07日
*＜機能概要＞
* 電話帳申込機能 部品
*＜修正履歴＞
*   バージョン    修正日      修正者      修正内容
*   v6.00       2013/12/07    FJ)鈴木    【OM-2013-0004732】工事日に番ポ工事確定日を表示する対応 
*
********************************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
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 com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.ETU0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ETU0011B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0011B010CBSMsg1List;

/**
 * 電話帳申込機能 部品クラス
 * @author FJ
 *
 */
public class JKKDenwaChoCC extends AbstractCommonComponent 
{

	//--------------------------------------------------
	// 当コモンコンポーネント固有定義
	//--------------------------------------------------
	/** StringクラスのEmpty値 */
	public static final String STR_EMPTY = new String();

	//--------------------------------------------------
	// エラーメッセージ
	//--------------------------------------------------
	/** エラーメッセージ: 実行結果エラーあり */
	public static final String ERR_STR_RESULT_CD = "サービスコンポーネントの実行結果にエラーがあります";
	/** エラーメッセージ: 入力項目異常 */
	public static final String ERR_MI_INPUT_CD = "入力項目が設定されていません";

	//--------------------------------------------------
	// 入力情報マップ設定項目キー
	//--------------------------------------------------
	/** 入力情報マップ:リクエストパラメータ */
	private static final String IN_INF_KEY_REQ_PARAM = "req_param";
	/** 入力情報マップ:ユーザ任意文字列 */
	private static final String IN_INF_KEY_FIXED_TEXT = "fixed_text";

	//--------------------------------------------------
	// サービスI/Fマッピング共通情報マップ設定項目キー
	//--------------------------------------------------
	/** サービスI/Fマッピング共通情報マップ[上り]:CBSMsgクラス */
	private static final String SVC_IF_CMN_INF_KEY_USE_CBSMSG = "use_cbsmsg";
	/** サービスI/Fマッピング共通情報マップ[上り]:テンプレートID(キー名) */
	private static final String SVC_IF_CMN_INF_KEY_USE_TEMP_ID_KEY = "use_temp_id_key";
	/** サービスI/Fマッピング共通情報マップ[上り]:テンプレートID(設定値) */
	private static final String SVC_IF_CMN_INF_KEY_USE_TEMP_ID_VAL = "use_temp_id_val";
	/** サービスI/Fマッピング共通情報マップ[上り]:機能コード(キー名) */
	private static final String SVC_IF_CMN_INF_KEY_USE_FUNC_CD_KEY = "use_func_cd_key";
	/** サービスI/Fマッピング共通情報マップ[上り]:機能コード(設定値) */
	private static final String SVC_IF_CMN_INF_KEY_USE_FUNC_CD_VAL = "use_func_cd_val";
	/** サービスI/Fマッピング共通情報マップ[下り]:明細リスト名 */
	private static final String SVC_IF_CMN_INF_KEY_USE_DTL_LST_NM = "use_dtl_lst_nm";
	/** サービスI/Fマッピング共通情報マップ[下り]:param <---> サービスI/F 変換マップ名 */
	private static final String SVC_IF_CMN_INF_KEY_USE_CONV_MAP_NM = "use_conv_map_nm";
	/** サービスI/Fマッピング共通情報マップ[下り]:ステータス項目名 */
	private static final String SVC_IF_CMN_INF_KEY_USE_STS_COLUM_NM = "use_sts_colum_nm";

	/** ETU0011B010 番ポ工事一覧照会 */
	private static final String TEMPLATE_ID_ETU0011B010 = "ETU0011B010";
	/** ETU0011A010 番ポ工事一意照会 */
	private static final String TEMPLATE_ID_ETU0011A010 = "ETU0011A010";
	/** ETU0011A010 番ポ工事一意照会 */
	private static final String ETU0011A010_MAP = "tu0011_a010_map";

	/** 検索条件格納マップ用キー項目:サービス契約番号 */
	public static final String COND_KEY_SVC_KEI_NO = "cond_key_svc_kei_no";
	
	/** 検索条件格納マップ用キー項目:電話番号 */
	public static final String COND_KEY_TELNO = "telno";
	/** 検索条件格納マップ用キー項目:サービス契約内訳番号 */
	public static final String COND_KEY_SVC_KEI_UCWK_NO = "svc_kei_ucwk_no";

	/** ETU0011B010 番ポ工事一覧照会 */
	private static final String ETU0011B010_MAP = "tu0011_b010_map";

	//--------------------------------------------------
	// リターンコード
	//--------------------------------------------------
	/** リターンコード: -1 */
	private static final Integer RTN_CODE_MINUS = -1;
	/** リターンコード: 0000 */
	private static final Integer RTN_CODE_0000 = 0;
	/** リターンコード: 9000 */
	private static final Integer RTN_CODE_9000 = 9000;
	/** リターンメッセージ: "RETURN_MESSAGE_" */
	private static final String RETURN_MSG_ = "RETURN_MESSAGE_";
	/** リターンメッセージ: フォーマット(%1$04d) */
	private static final String RETURN_MSG_FORMAT = "%1$04d";

	/** 照会系サービスI/F 機能コード: 2 (カレント) */
	private static final String SEL_IF_FUNC_CD_CUR = "2";

	/**
	 * コンストラクタ.
	 * <br>
	 */
	public JKKDenwaChoCC() {
	}
	

	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd>デバッグログを出力します<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param dumpObj 出力するオブジェクト
	 */
	private void printlnEjbLog(Object dumpObj) {
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), dumpObj, null, null, null);
	}

	/**
	 * 番ポ工事スキーマ検索処理.
	 * 電話番号を元に番ポ工事照会を行う。
	 * 番ポ工事確定日を返却する。
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite searchBampo( SessionHandle handle, IRequestParameterReadWrite param, String fixedText ) throws Exception
	{
		printlnEjbLog("＃＃＃＃JKKDenwaChoCC.searchBampo() start");
	
		/** 事前準備 */
		HashMap<String, Object> reqMap;
		HashMap<String, String> condMap = new HashMap<String, String>();
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
		Map<?, ?> resMap;

//		// 住所変更登録CCマッピングクラスインスタンスを取得
//		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// 判定結果初期化：番ポ工事確定日
		paramMap.put( "bmp_koji_fix_ymdh", "" );
		
		// 電話番号がある場合処理を行う。
		String telNo = (String)paramMap.get( COND_KEY_TELNO );
		String svc_kei_ucwk_no_in = (String)paramMap.get( COND_KEY_SVC_KEI_UCWK_NO );
		printlnEjbLog("＃＃＃＃JKKDenwaChoCC.searchBampo() 電話番号＝" + telNo);
		printlnEjbLog("＃＃＃＃JKKDenwaChoCC.searchBampo() サービス契約内訳番号＝" + svc_kei_ucwk_no_in);
		
		if( JKKStringUtil.isNullBlank(telNo) ){
			// 未入力なのでチェックせずにリターン。
			printlnEjbLog("＃＃＃＃JKKDenwaChoCC.searchBampo() 電話番号が未入力のため、チェック終了");
			return param;
		}

		// ETU0011B010  番ポ工事一覧照会
		condMap.put( COND_KEY_TELNO, telNo );
		
		reqMap = setETU0011B010( param, fixedText, condMap );
		resMap = scCall.run( reqMap, handle );
		List<HashMap<String, Object>> tu0011b001List = getETU0011B010( param, fixedText, resMap );
		scResultCheck( param );

		// 検索０件の場合、リターン。
		if (tu0011b001List == null || tu0011b001List.isEmpty()) {
			// ０件
			printlnEjbLog("＃＃＃＃JKKDenwaChoCC.searchBampo() ETU0011B010  番ポ工事一覧照会が0件。");
			return param;
		}

		HashMap<String, Object> tu0001_a010 = null;
		HashMap<String, Object> tu0011_b001_map = null;
		
		String bmpKojiNo="";
		String bmpKojiKktYmdhMax = "";
		String svcKeiUcwkNo="";
		
		for (int j = 0; j < tu0011b001List.size(); j++) {
			tu0011_b001_map = tu0011b001List.get(j);
			// 番ポ工事番号を取得
			bmpKojiNo = (String)tu0011_b001_map.get(ETU0011B010CBSMsg1List.BMP_KOJI_NO);
			// サービス契約内訳番号を取得
			svcKeiUcwkNo = (String)tu0011_b001_map.get(ETU0011B010CBSMsg1List.SVC_KEI_UCWK_NO);

			if(!JKKStringUtil.isNullBlank(svc_kei_ucwk_no_in) && !JKKStringUtil.isNullBlank(svcKeiUcwkNo)) {
				if (!svc_kei_ucwk_no_in.equals(svcKeiUcwkNo)) {
					// 入力のサービス契約内訳番号と異なる場合は、読み捨て
					continue;
				}
			}
			
			// 番ポ工事一意照会
			// リクエストパラメータの展開
			condMap.clear();
			condMap.put( "key_bmp_koji_no", bmpKojiNo);
			reqMap = setETU0011A010( param, fixedText, condMap );
			resMap = scCall.run( reqMap, handle );
			tu0001_a010 = getETU0011A010( param, fixedText, resMap );
			scResultCheck( param );
			
			String bmpKojiKktYmdh = (String)tu0001_a010.get(ETU0011A010CBSMsg1List.BMP_KOJI_FIX_YMDH);
			if (!JKKStringUtil.isNullBlank(bmpKojiKktYmdh)) {
				if (bmpKojiKktYmdh.compareTo(bmpKojiKktYmdhMax) > 0) {
					bmpKojiKktYmdhMax = bmpKojiKktYmdh;
				}
			}
		}
		
		// 番ポ工事確定日
		paramMap.put( "bmp_koji_fix_ymdh", bmpKojiKktYmdhMax );

		printlnEjbLog("＃＃＃＃JKKDenwaChoCC.searchBampo() end. bmpKojiKktYmdhMax=" + bmpKojiKktYmdhMax);
		return param;
	}

	/**
	 * ETU0011B010 番ポ工事一覧照会 上りマッピング.
	 * <br>
	 * @param   reqParam   モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   condMap    検索条件格納マップ
	 * @throws  Exception  例外が発生した場合
	 * @return  サービスIF実行用のマッピング情報
	 */
	public HashMap<String, Object> setETU0011B010( IRequestParameterReadWrite reqParam, String fixedText, HashMap<String, String> condMap ) throws RequestParameterException {

		/** 入力情報マップ 生成 */
		HashMap<String, Object> inInfoMap = new HashMap<String, Object>();
		inInfoMap.put( IN_INF_KEY_REQ_PARAM, reqParam );
		inInfoMap.put( IN_INF_KEY_FIXED_TEXT, fixedText );

		/** サービスI/Fマッピング共通情報マップ 生成 */
		HashMap<String, Object> svcIfCmnInfMap = new HashMap<String, Object>();
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_CBSMSG, ETU0011B010CBSMsg.class );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_TEMP_ID_KEY, ETU0011B010CBSMsg.TEMPLATEID );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_TEMP_ID_VAL, TEMPLATE_ID_ETU0011B010 );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_FUNC_CD_KEY, ETU0011B010CBSMsg.FUNC_CODE );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_FUNC_CD_VAL, JPCModelConstant.FUNC_CD_1 );

		/** 設定値格納マップ 生成  ※検索条件を格納 */
		HashMap<String, Object> setDtMap = new HashMap<String, Object>();
		// ETU0011B010.検索処理パターン
		setDtMap.put( ETU0011B010CBSMsg.SEARCH_TYPE, String.valueOf(JPCModelConstant.SAERCH_TYPE_BBN) );
		// ETU0011B010.最大検索件数
		setDtMap.put( ETU0011B010CBSMsg.MAX_SEARCH_NUM, String.valueOf("10000") );
		// ETU0011B010.表示件数
		setDtMap.put( ETU0011B010CBSMsg.DISPLAY_NUM, String.valueOf("10000") );
		// ETU0011B010.表示ページ番号
		setDtMap.put( ETU0011B010CBSMsg.DISPLAY_PAGE_NUM, String.valueOf("1") );
//		// condMap.サービス契約番号 ⇒ ETU0011B010.ＫＥＹ＿サービス契約番号
//		setDtMap.put( ETU0011B010CBSMsg.KEY_SVC_KEI_NO, condMap.get( COND_KEY_SVC_KEI_NO ) );
		// condMap.ＮＴＴ契約電話回線番号 ⇒ ＫＥＹ＿ＮＴＴ契約電話回線番号
		setDtMap.put( ETU0011B010CBSMsg.KEY_NTT_KEI_TEL_KAISEN_NO, condMap.get( COND_KEY_TELNO ) );

		/** 上りマッピング実施 */
		return setUppMapping( inInfoMap, svcIfCmnInfMap, setDtMap );
	}

	/**
	 * ETU0011B010 番ポ工事一覧照会 下りマッピング.
	 * <br>
	 * @param   reqParam   モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   resultMap  サービスIFの結果が格納されているマップ情報
	 * @throws  Exception  例外が発生した場合
	 * @return  下りマッピング項目
	 */
	public ArrayList<HashMap<String, Object>> getETU0011B010( IRequestParameterReadWrite reqParam, String fixedText, Map<?, ?> resultMap ) throws Exception {

		/** 事前準備 */
		// 返却データ項目名
		String[] resDataColums = {
				// 番ポ工事番号
				ETU0011B010CBSMsg1List.BMP_KOJI_NO,
				// 番ポ工事ステータス
				ETU0011B010CBSMsg1List.BMP_KOJI_STAT,
				// サービス契約内訳番号
				ETU0011B010CBSMsg1List.SVC_KEI_UCWK_NO,
				// 世代登録年月日時分秒
				ETU0011B010CBSMsg1List.GENE_ADD_DTM,
				// 更新年月日時分秒
				ETU0011B010CBSMsg1List.UPD_DTM
		};

		// エラー項目へ割付するデータ項目名
		String[] errMappingDataColums = {
				// ＫＥＹ＿サービス契約番号
				ETU0011B010CBSMsg.KEY_SVC_KEI_NO_ERR,
				// ＫＥＹ＿ＮＴＴ契約電話回線番号
				ETU0011B010CBSMsg.KEY_NTT_KEI_TEL_KAISEN_NO_ERR
		};

		/** 入力情報マップ 生成 */
		HashMap<String, Object> inInfoMap = new HashMap<String, Object>();
		inInfoMap.put( IN_INF_KEY_REQ_PARAM, reqParam );
		inInfoMap.put( IN_INF_KEY_FIXED_TEXT, fixedText );

		/** サービスI/Fマッピング共通情報マップ 生成 */
		HashMap<String, Object> svcIfCmnInfMap = new HashMap<String, Object>();
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_CONV_MAP_NM, ETU0011B010_MAP );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_DTL_LST_NM, ETU0011B010CBSMsg.ETU0011B010CBSMSG1LIST );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_STS_COLUM_NM, ETU0011B010CBSMsg.STATUS );

		/** 返却データ項目名リスト 生成 */
		ArrayList<String> resDtLst = new ArrayList<String>();
		for( int i=0; i < resDataColums.length; i++ ){
			resDtLst.add( resDataColums[i] );
		}

		/** エラー項目へ割付するデータ項目名リスト 生成 */
		ArrayList<String> errDtLst = new ArrayList<String>();
		for( int i=0; i < errMappingDataColums.length; i++ ){
			errDtLst.add( errMappingDataColums[i] );
		}

		/** 下りマッピング実施 */
		return setSelDwnMappingToLst( inInfoMap, svcIfCmnInfMap, resultMap, resDtLst, errDtLst );
	}

	/**
	 * ETU0011A010 番ポ工事一意照会 上りマッピング.
	 * <br>
	 * @param   reqParam   モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   condMap    検索条件格納マップ
	 * @throws  Exception  例外が発生した場合
	 * @return  サービスIF実行用のマッピング情報
	 */
	public HashMap<String, Object> setETU0011A010( IRequestParameterReadWrite reqParam, String fixedText, HashMap<String, String> condMap ) throws RequestParameterException {

		/** 入力情報マップ 生成 */
		HashMap<String, Object> inInfoMap = new HashMap<String, Object>();
		inInfoMap.put( IN_INF_KEY_REQ_PARAM, reqParam );
		inInfoMap.put( IN_INF_KEY_FIXED_TEXT, fixedText );

		/** サービスI/Fマッピング共通情報マップ 生成 */
		HashMap<String, Object> svcIfCmnInfMap = new HashMap<String, Object>();
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_CBSMSG, ETU0011A010CBSMsg.class );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_TEMP_ID_KEY, ETU0011A010CBSMsg.TEMPLATEID );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_TEMP_ID_VAL, TEMPLATE_ID_ETU0011A010 );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_FUNC_CD_KEY, ETU0011A010CBSMsg.FUNC_CODE );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_FUNC_CD_VAL, SEL_IF_FUNC_CD_CUR );

		/** 設定値格納マップ 生成  ※検索条件を格納 */
		HashMap<String, Object> setDtMap = new HashMap<String, Object>();
		// condMap.key_bmp_koji_no ⇒ ETU0011A010.ＫＥＹ＿番ポ工事番号
		setDtMap.put( ETU0011A010CBSMsg.KEY_BMP_KOJI_NO, condMap.get( "key_bmp_koji_no" ) );

		/** 上りマッピング実施 */
		return setUppMapping( inInfoMap, svcIfCmnInfMap, setDtMap );
	}

	/**
	 * ECK0011A010 お客様一意照会 下りマッピング.
	 * <br>
	 * @param   reqParam   モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   resultMap  サービスIFの結果が格納されているマップ情報
	 * @throws  Exception  例外が発生した場合
	 * @return  下りマッピング項目
	 */
	public HashMap<String, Object> getETU0011A010( IRequestParameterReadWrite reqParam, String fixedText, Map<?, ?> resultMap ) throws Exception {

		/** 事前準備 */
		// 返却データ項目名
		String[] resDataColums = {
			     // 番ポ工事番号
			    ETU0011A010CBSMsg1List.BMP_KOJI_NO,
			    // 世代登録年月日時分秒
			    ETU0011A010CBSMsg1List.GENE_ADD_DTM,
			    // 番ポ工事ステータス
			    ETU0011A010CBSMsg1List.BMP_KOJI_STAT,
			    // サービス契約内訳番号
			    ETU0011A010CBSMsg1List.SVC_KEI_UCWK_NO,
			    // 法人サービス契約受付番号
			    ETU0011A010CBSMsg1List.HOJIN_SVC_KEI_UK_NO,
			    // 法人ｅｏ読替サービス契約番号
			    ETU0011A010CBSMsg1List.HJIN_EO_YKAE_SVKEI_NO,
			    // 法人個人コード
			    ETU0011A010CBSMsg1List.HOJIN_KOJIN_CD,
			    // お客様申込年月日
			    ETU0011A010CBSMsg1List.CUST_MSKM_YMD,
			    // 番ポ申込書タイプコード
			    ETU0011A010CBSMsg1List.BMP_MSKMSHO_TYPE_CD,
			    // 同時工事有無
			    ETU0011A010CBSMsg1List.DOJI_KOJI_UM,
			    // 同番移転有無
			    ETU0011A010CBSMsg1List.DOBANITEN_UM,
			    // ＮＴＴ契約電話回線番号
			    ETU0011A010CBSMsg1List.NTT_KEI_TEL_KAISEN_NO,
			    // 契約者回線番号
			    ETU0011A010CBSMsg1List.TA_JGYOSHA_UR_NO,
			    // ルーティング番号
			    ETU0011A010CBSMsg1List.ROUTING_NO,
			    // ＮＴＴ契約者名
			    ETU0011A010CBSMsg1List.NTT_KEISHA_NM,
			    // ＮＴＴ契約者カナ名
			    ETU0011A010CBSMsg1List.NTT_KSH_KANA,
			    // ＮＴＴ契約者住所手動入力フラグ
			    ETU0011A010CBSMsg1List.NKYS_AD_MAN_INPUT_FLG,
			    // ＮＴＴ契約者住所コード
			    ETU0011A010CBSMsg1List.NTT_KEISHA_AD_CD,
			    // ＮＴＴ契約者郵便番号
			    ETU0011A010CBSMsg1List.NTT_KEISHA_PCD,
			    // ＮＴＴ契約者都道府県名
			    ETU0011A010CBSMsg1List.NTT_KEISHA_STATE_NM,
			    // ＮＴＴ契約者市区町村名
			    ETU0011A010CBSMsg1List.NTT_KEISHA_CITY_NM,
			    // ＮＴＴ契約者大字通称名
			    ETU0011A010CBSMsg1List.NTT_KEISHA_OAZTSU_NM,
			    // ＮＴＴ契約者字丁目名
			    ETU0011A010CBSMsg1List.NTT_KEISHA_AZCHO_NM,
			    // ＮＴＴ契約者番地号
			    ETU0011A010CBSMsg1List.NTT_KEISHA_BNCHIGO,
			    // ＮＴＴ契約者住所補記・建物名
			    ETU0011A010CBSMsg1List.NTT_KEISHA_ADRTTM,
			    // ＮＴＴ契約者住所補記・部屋番号
			    ETU0011A010CBSMsg1List.NTT_KEISHA_ADRRM,
			    // 連絡先電話番号
			    ETU0011A010CBSMsg1List.RRKS_TELNO,
			    // 設置場所住所手動入力フラグ
			    ETU0011A010CBSMsg1List.SETPLACE_AD_MAN_INPUT_FLG,
			    // 設置場所住所コード
			    ETU0011A010CBSMsg1List.SETPLACE_AD_CD,
			    // 設置場所郵便番号
			    ETU0011A010CBSMsg1List.SETPLACE_PCD,
			    // 設置場所都道府県名
			    ETU0011A010CBSMsg1List.SETPLACE_STATE_NM,
			    // 設置場所市区町村名
			    ETU0011A010CBSMsg1List.SETPLACE_CITY_NM,
			    // 設置場所大字通称名
			    ETU0011A010CBSMsg1List.SETPLACE_OAZTSU_NM,
			    // 設置場所字丁目名
			    ETU0011A010CBSMsg1List.SETPLACE_AZCHO_NM,
			    // 設置場所番地号
			    ETU0011A010CBSMsg1List.SETPLACE_BNCHIGO,
			    // 設置場所住所補記・建物名
			    ETU0011A010CBSMsg1List.SETPLACE_ADRTTM,
			    // 設置場所住所補記・部屋番号
			    ETU0011A010CBSMsg1List.SETPLACE_ADRRM,
			    // 番ポ工事受付年月日
			    ETU0011A010CBSMsg1List.BMP_KOJI_UK_YMD,
			    // 番ポ工事希望年月日時
			    ETU0011A010CBSMsg1List.BMP_KOJI_KIBO_YMDH,
			    // 番ポ工事希望時間帯コード
			    ETU0011A010CBSMsg1List.BMPKJ_KIBO_TIME_CD,
			    // 番ポ工事希望年月日保留フラグ
			    ETU0011A010CBSMsg1List.BMPKJ_KIBO_YMD_PDING_FLG,
			    // 番ポ受付担当ユーザーＩＤ
			    ETU0011A010CBSMsg1List.BMP_UK_TNT_USER_ID,
			    // 番ポ工事担当ユーザーＩＤ
			    ETU0011A010CBSMsg1List.BMPKJ_TNT_USER_ID,
			    // 休止票送付先コード
			    ETU0011A010CBSMsg1List.PAUSE_HYO_SOHUS_CD,
			    // 電話加入権取扱コード
			    ETU0011A010CBSMsg1List.TEL_KNKN_TRAT_CD,
			    // 電話加入権取扱その他メモ
			    ETU0011A010CBSMsg1List.TEL_KNKN_TRAT_OTR_MEMO,
			    // 加入権移転先住所手動入力フラグ
			    ETU0011A010CBSMsg1List.KNKN_ITNSAD_MAN_INPUT_FLG,
			    // 加入権移転先住所コード
			    ETU0011A010CBSMsg1List.KANYKN_ITENS_AD_CD,
			    // 加入権移転先郵便番号
			    ETU0011A010CBSMsg1List.KANYKN_ITENS_PCD,
			    // 加入権移転先都道府県名
			    ETU0011A010CBSMsg1List.KANYKN_ITENS_STATE_NM,
			    // 加入権移転先市区町村名
			    ETU0011A010CBSMsg1List.KANYKN_ITENS_CITY_NM,
			    // 加入権移転先大字通称名
			    ETU0011A010CBSMsg1List.KANYKN_ITENS_OAZTSU_NM,
			    // 加入権移転先字丁目名
			    ETU0011A010CBSMsg1List.KANYKN_ITENS_AZCHO_NM,
			    // 加入権移転先番地号
			    ETU0011A010CBSMsg1List.KANYKN_ITENS_BNCHIGO,
			    // 加入権移転先住所補記・建物名
			    ETU0011A010CBSMsg1List.KANYKN_ITENS_ADRTTM,
			    // 加入権移転先住所補記・部屋番号
			    ETU0011A010CBSMsg1List.KANYKN_ITENS_ADRRM,
			    // 移転元通信事業者コード
			    ETU0011A010CBSMsg1List.ITNM_TSJGS_CD,
			    // 移転元通信事業者拠点コード
			    ETU0011A010CBSMsg1List.ITNM_TSJGS_KTN_CD,
			    // 申込事業者使用コード
			    ETU0011A010CBSMsg1List.MSKMJIG_USE_CD,
			    // 番ポ工事申込元通信事業者コード
			    ETU0011A010CBSMsg1List.BMPKJ_MSKM_MT_TSJGS_CD,
			    // 複数回線番号ポータビリティー有無
			    ETU0011A010CBSMsg1List.HUKUSU_KAISEN_BMP_UM,
			    // 複数回線番号ポータビリティー数
			    ETU0011A010CBSMsg1List.HUKUSU_KAISEN_BMP_CNT,
			    // 複数回線グループＩＤ
			    ETU0011A010CBSMsg1List.HUKUSU_KAISEN_GRP_ID,
			    // 申込事業者所内工事有無
			    ETU0011A010CBSMsg1List.MSKMJIG_SNAI_KOJI_UM,
			    // 申込事業者所外工事有無
			    ETU0011A010CBSMsg1List.MSKMJIG_SGAI_KOJI_UM,
			    // 申込事業者記事欄１
			    ETU0011A010CBSMsg1List.MSKMJIG_KIJIRAN_1,
			    // 申込事業者記事欄２
			    ETU0011A010CBSMsg1List.MSKMJIG_KIJIRAN_2,
			    // 申込事業者申込年月日時分
			    ETU0011A010CBSMsg1List.MSKMJIG_MSKM_YMDHM,
			    // 番ポ工事調査依頼年月日
			    ETU0011A010CBSMsg1List.BMP_KOJI_CHOSA_REQYMD,
			    // 他事業者連携送信年月日時分秒
			    ETU0011A010CBSMsg1List.TAJGS_RNKI_SEND_DTM,
			    // 他事業者依頼回数
			    ETU0011A010CBSMsg1List.TA_JGS_REQ_CNT,
			    // 他事業者連携方法コード
			    ETU0011A010CBSMsg1List.TA_JGYOSHA_RNKI_WAY_CD,
			    // 事業者間調整識別番号
			    ETU0011A010CBSMsg1List.JGSHAK_RTRN_ADJ_SKBT_NO,
			    // ＮＴＴ連携送信年月日時分秒
			    ETU0011A010CBSMsg1List.NTT_RNKI_SEND_DTM,
			    // ＮＴＴ依頼回数
			    ETU0011A010CBSMsg1List.NTT_REQ_CNT,
			    // ＮＴＴ連携方法コード
			    ETU0011A010CBSMsg1List.NTT_RNKI_WAY_CD,
			    // ＮＴＴ依頼識別番号
			    ETU0011A010CBSMsg1List.NTT_REQ_SKBT_NO,
			    // 変更元オーダ識別番号
			    ETU0011A010CBSMsg1List.CHGE_MOTO_ORDER_SKBT_NO,
			    // ＮＴＴ依頼オーダ変更理由メモ
			    ETU0011A010CBSMsg1List.NTT_REQ_ORDER_CHGRE_MEMO,
			    // 提供可否回答年月日
			    ETU0011A010CBSMsg1List.TK_KH_ANS_YMD,
			    // 番ポ工事可否
			    ETU0011A010CBSMsg1List.BMP_KOJI_KH,
			    // 番ポ工事確定年月日時
			    ETU0011A010CBSMsg1List.BMP_KOJI_FIX_YMDH,
			    // 番ポ工事確定時間帯コード
			    ETU0011A010CBSMsg1List.BMPKJ_FIX_TIME_CD,
			    // 提供不可理由コード
			    ETU0011A010CBSMsg1List.TK_FAIL_RSN_CD,
			    // 提供不可理由メモ
			    ETU0011A010CBSMsg1List.TK_FAIL_RSN_MEMO,
			    // 他事業者未確認フラグ
			    ETU0011A010CBSMsg1List.TA_JIGYOSHA_MI_CFM_FLG,
			    // 番ポ工事依頼年月日
			    ETU0011A010CBSMsg1List.BMP_KOJI_REQYMD,
			    // 番ポ工事依頼結果コード
			    ETU0011A010CBSMsg1List.BMP_KOJI_REQ_RSLT_CD,
			    // 他事業者受付番号
			    ETU0011A010CBSMsg1List.TAJGS_UK_NO,
			    // 他事業者担当者名
			    ETU0011A010CBSMsg1List.TAJGS_TNTSHA_NM,
			    // 他事業者電話番号
			    ETU0011A010CBSMsg1List.TAJGS_TELNO,
			    // 他事業者ＦＡＸ番号
			    ETU0011A010CBSMsg1List.TAJGS_FAX_NO,
			    // 他事業者記事欄
			    ETU0011A010CBSMsg1List.TAJGS_KIJIRAN,
			    // 他事業者受付年月日
			    ETU0011A010CBSMsg1List.TAJGS_UK_YMD,
			    // 他事業者オーダー種別コード
			    ETU0011A010CBSMsg1List.TA_JIGYOSHA_ODR_SBT_CD,
			    // 他事業者組織名
			    ETU0011A010CBSMsg1List.TA_JIGYOSHA_ORG_NM,
			    // ＮＴＴ受付番号
			    ETU0011A010CBSMsg1List.NTT_UK_NO,
			    // ＮＴＴ担当者名
			    ETU0011A010CBSMsg1List.NTT_TNTSHA_NM,
			    // ＮＴＴ電話番号
			    ETU0011A010CBSMsg1List.NTT_TELNO,
			    // ＮＴＴＦＡＸ番号
			    ETU0011A010CBSMsg1List.NTT_FAX_NO,
			    // ＮＴＴ所内工事有無
			    ETU0011A010CBSMsg1List.NTT_SNAI_KOJI_UM,
			    // ＮＴＴ所外工事有無
			    ETU0011A010CBSMsg1List.NTT_SGAI_KOJI_UM,
			    // ＮＴＴ記事欄
			    ETU0011A010CBSMsg1List.NTT_KIJIRAN,
			    // ＮＴＴ受付年月日
			    ETU0011A010CBSMsg1List.NTT_UK_YMD,
			    // 番ポ工事完了年月日
			    ETU0011A010CBSMsg1List.BMP_KOJI_FIN_YMD,
			    // 番ポ申込事業所番号
			    ETU0011A010CBSMsg1List.BMP_MSKM_JIGSHO_NO,
			    // 番ポ工事申込事業所番号
			    ETU0011A010CBSMsg1List.BMP_KOJI_MSKM_JIGSHO_NO,
			    // 番ポ工事中止コード
			    ETU0011A010CBSMsg1List.BMP_KOJI_STP_CD,
			    // 番ポ工事中止年月日
			    ETU0011A010CBSMsg1List.BMP_KOJI_STP_YMD,
			    // 法人結果出力済フラグ
			    ETU0011A010CBSMsg1List.HOJIN_RSLT_OPUT_ZUMI_FLG,
			    // 対応記録連携情報作成済フラグ
			    ETU0011A010CBSMsg1List.TIOKR_RNK_INF_SKSI_ZM_FLG,
			    // 登録年月日時分秒
			    ETU0011A010CBSMsg1List.ADD_DTM,
			    // 登録オペレータアカウント
			    ETU0011A010CBSMsg1List.ADD_OPEACNT,
			    // 更新年月日時分秒
			    ETU0011A010CBSMsg1List.UPD_DTM,
			    // 更新オペレータアカウント
			    ETU0011A010CBSMsg1List.UPD_OPEACNT,
			    // 削除年月日時分秒
			    ETU0011A010CBSMsg1List.DEL_DTM,
			    // 削除オペレータアカウント
			    ETU0011A010CBSMsg1List.DEL_OPEACNT,
			    // 無効フラグ
			    ETU0011A010CBSMsg1List.MK_FLG,
			    // 番ポ工事ステータス名称
			    ETU0011A010CBSMsg1List.BMP_KOJI_STAT_NM,
			    // 法人個人コード名称
			    ETU0011A010CBSMsg1List.HOJIN_KOJIN_CD_NM,
			    // 番ポ申込書タイプコード名称
			    ETU0011A010CBSMsg1List.BMP_MSKMSHO_TYPE_CD_NM,
			    // 同時工事有無名称
			    ETU0011A010CBSMsg1List.DOJI_KOJI_UM_NM,
			    // 同番移転有無名称
			    ETU0011A010CBSMsg1List.DOBANITEN_UM_NM,
			    // 番ポ工事希望時間帯コード名称
			    ETU0011A010CBSMsg1List.BMPKJ_KIBO_TIME_CD_NM,
			    // 番ポ工事希望年月日保留フラグ名称
			    ETU0011A010CBSMsg1List.BMPKJ_KIBO_YMD_PDING_FLG_NM,
			    // 番ポ受付担当ユーザー名
			    ETU0011A010CBSMsg1List.BMP_UK_TNT_USER_ID_NM,
			    // 番ポ工事担当ユーザー名
			    ETU0011A010CBSMsg1List.BMPKJ_TNT_USER_ID_NM,
			    // 休止票送付先コード名称
			    ETU0011A010CBSMsg1List.PAUSE_HYO_SOHUS_CD_NM,
			    // 電話加入権取扱コード名称
			    ETU0011A010CBSMsg1List.TEL_KNKN_TRAT_CD_NM,
			    // 移転元通信事業者コード名称
			    ETU0011A010CBSMsg1List.ITNM_TSJGS_CD_NM,
			    // 移転元通信事業者拠点コード名称
			    ETU0011A010CBSMsg1List.ITNM_TSJGS_KTN_CD_NM,
			    // 番ポ工事申込元通信事業者コード名称
			    ETU0011A010CBSMsg1List.BMPKJ_MSKM_MT_TSJGS_CD_NM,
			    // 申込事業者所内工事有無名称
			    ETU0011A010CBSMsg1List.MSKMJIG_SNAI_KOJI_UM_NM,
			    // 申込事業者所外工事有無名称
			    ETU0011A010CBSMsg1List.MSKMJIG_SGAI_KOJI_UM_NM,
			    // 番ポ工事確定時間帯コード名称
			    ETU0011A010CBSMsg1List.BMPKJ_FIX_TIME_CD_NM,
			    // 他事業者未確認フラグ名称
			    ETU0011A010CBSMsg1List.TA_JIGYOSHA_MI_CFM_FLG_NM,
			    // 他事業者オーダー種別コード名称
			    ETU0011A010CBSMsg1List.TA_JIGYOSHA_ODR_SBT_CD_NM,
			    // 番ポ申込事業所名称
			    ETU0011A010CBSMsg1List.BMP_MSKM_JIGSHO_NM,
			    // 番ポ工事申込事業所名称
			    ETU0011A010CBSMsg1List.BMP_KOJI_MSKM_JIGSHO_NM,
			    // 法人結果出力済フラグ名称
			    ETU0011A010CBSMsg1List.HOJIN_RSLT_OPUT_ZUMI_FLG_NM,
			    // 対応記録連携情報作成済フラグ名称
			    ETU0011A010CBSMsg1List.TIOKR_RNK_INF_SKSI_ZM_FLG_NM,
			    // ＮＴＴ契約者住所手動入力フラグ名称
			    ETU0011A010CBSMsg1List.NKYS_AD_MAN_INPUT_FLG_NM,
			    // 設置場所住所手動入力フラグ名称
			    ETU0011A010CBSMsg1List.SETPLACE_AD_MAN_INPUT_FLG_NM,
			    // 加入権移転先住所手動入力フラグ名称
			    ETU0011A010CBSMsg1List.KNKN_ITNSAD_MAN_INPUT_FLG_NM,
			    // 登録オペレータ名
			    ETU0011A010CBSMsg1List.ADD_OPEACNT_NM,
			    // 更新オペレータ名
			    ETU0011A010CBSMsg1List.UPD_OPEACNT_NM,
			    // 削除オペレータ名
			    ETU0011A010CBSMsg1List.DEL_OPEACNT_NM,
			    // 番ポ申込担当者電話番号
			    ETU0011A010CBSMsg1List.BMP_MSKM_TNTSHA_TELNO,
			    // 番ポ申込担当者FAX番号
			    ETU0011A010CBSMsg1List.BMP_MSKM_TNTSHA_FAX_NO,
			    // 番ポ工事申込担当者電話番号
			    ETU0011A010CBSMsg1List.BMP_KOJI_MSKM_TNTSHA_TELNO,
			    // 番ポ工事申込担当者FAX番号
			    ETU0011A010CBSMsg1List.BMP_KOJI_MSKM_TNTSHA_FAX_NO,
			    // 同時工事判定コード
			    ETU0011A010CBSMsg1List.DOJI_KOJI_JDG_CD,
			    // 宅内工事予定日反映年月日
			    ETU0011A010CBSMsg1List.TNKJ_RSVD_HANEI_YMD,
			    // 宅内工事予定日反映済フラグ
			    ETU0011A010CBSMsg1List.TNKJ_RSVD_HANEI_ZM_FLG,
			    // 同時工事判定コード名称
			    ETU0011A010CBSMsg1List.DOJI_KOJI_JDG_CD_NM,
			    // 宅内工事予定日反映済フラグ名称
			    ETU0011A010CBSMsg1List.TNKJ_RSVD_HANEI_ZM_FLG_NM
		};

		// エラー項目へ割付するデータ項目名
		String[] errMappingDataColums = {
				// ＫＥＹ＿番ポ工事番号
				ETU0011A010CBSMsg.KEY_BMP_KOJI_NO_ERR
		};

		/** 入力情報マップ 生成 */
		HashMap<String, Object> inInfoMap = new HashMap<String, Object>();
		inInfoMap.put( IN_INF_KEY_REQ_PARAM, reqParam );
		inInfoMap.put( IN_INF_KEY_FIXED_TEXT, fixedText );

		/** サービスI/Fマッピング共通情報マップ 生成 */
		HashMap<String, Object> svcIfCmnInfMap = new HashMap<String, Object>();
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_CONV_MAP_NM, ETU0011A010_MAP );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_DTL_LST_NM, ETU0011A010CBSMsg.ETU0011A010CBSMSG1LIST );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_STS_COLUM_NM, ETU0011A010CBSMsg.STATUS );

		/** 返却データ項目名リスト 生成 */
		ArrayList<String> resDtLst = new ArrayList<String>();
		for( int i=0; i < resDataColums.length; i++ ){
			resDtLst.add( resDataColums[i] );
		}

		/** エラー項目へ割付するデータ項目名リスト 生成 */
		ArrayList<String> errDtLst = new ArrayList<String>();
		for( int i=0; i < errMappingDataColums.length; i++ ){
			errDtLst.add( errMappingDataColums[i] );
		}

		/** 下りマッピング実施 */
		return setSelDwnMappingToOne( inInfoMap, svcIfCmnInfMap, resultMap, resDtLst, errDtLst );
	}
	
	/**
	 * 上りマッピング共通処理[照会系,更新系].
	 * <br>
	 * @param   inInfMap        入力情報マップ
	 * @param   svcIfCmnInfMap  サービスI/Fマッピング共通情報マップ
	 * @param   setDtMap        設定値格納マップ
	 * @throws  Exception       例外が発生した場合
	 * @return  サービスIF実行用のマッピング情報
	 */
	private HashMap<String, Object> setUppMapping( HashMap<String, Object> inInfMap,
													HashMap<String, Object> svcIfCmnInfMap,
													HashMap<String, Object> setDtMap ) throws RequestParameterException {

		/** 事前処理 */
		// リクエストパラメータを取得
		IRequestParameterReadWrite reqParam = (IRequestParameterReadWrite)inInfMap.get( IN_INF_KEY_REQ_PARAM );

		// 使用するCBSMsgクラスを取得
		Class<?> cbsMsg = (Class<?>)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_CBSMSG );

		// 使用するテンプレートIDを取得
		String templateIdKey = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_TEMP_ID_KEY );
		String templateIdVal = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_TEMP_ID_VAL );

		// 使用する機能コードを取得
		String funcCdKey = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_FUNC_CD_KEY );
		String funcCdVal = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_FUNC_CD_VAL );


		/** パラメータマップ設定 */
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		// 電文ID
		paramMap.put( JCMConstants.TRANZACTION_ID_KEY, reqParam.getTelegramID() );
		// ユースケースID
		paramMap.put( JCMConstants.USECASE_ID_KEY, reqParam.getUsecaseID() );
		// オペレーションID
		paramMap.put( JCMConstants.OPERATION_ID_KEY, reqParam.getOperationID() );
		// サービス呼出し区分
		paramMap.put( JCMConstants.CALL_TYPE_KEY, reqParam.getCallType() );
		// 依頼先ホスト名
		paramMap.put( JCMConstants.CLIENT_HOST_NAME_KEY, reqParam.getControlMapData( SCControlMapKeys.REQ_HOSTNAME ) );
		// 依頼元IPアドレス
		paramMap.put( JCMConstants.CLIENT_IP_ADDRESS_KEY, reqParam.getControlMapData( SCControlMapKeys.REQ_HOSTIP ) );
		// 依頼元画面ID
		paramMap.put( JCMConstants.INVOKE_GAMEN_ID_KEY, reqParam.getControlMapData( SCControlMapKeys.REQ_VIEWID ) );
		// オペレータID
		paramMap.put( JCMConstants.OPERATOR_ID_KEY, reqParam.getControlMapData( SCControlMapKeys.OPERATOR_ID ) );

		/** テンプレート設定 */
		CAANMsg template = new CAANMsg( cbsMsg.getName() );
		// オペレータID
		template.set( JCMConstants.OPERATOR_ID_KEY, reqParam.getControlMapData( SCControlMapKeys.OPERATOR_ID ) );
		// 運用日付
		template.set( JCMConstants.OPERATE_DATE_KEY, reqParam.getControlMapData( SCControlMapKeys.OPE_DATE ) );
		// 運用日時
		template.set( JCMConstants.OPERATE_DATETIME_KEY, reqParam.getControlMapData( SCControlMapKeys.OPE_TIME ) );
		// テンプレートID
		template.set( templateIdKey, templateIdVal );
		// 機能コード
		template.set( funcCdKey, funcCdVal );


		/** 上りマッピング */
		Iterator<Map.Entry<String, Object>> setDtMapIte = setDtMap.entrySet().iterator();
		while( setDtMapIte.hasNext() ){
			Map.Entry<String, Object> entry = (Map.Entry<String, Object>)setDtMapIte.next();

			/** nullチェック */
			if( entry.getValue() == null ){
				template.setNull( entry.getKey() );
				continue;
			}

			/** 単項目チェック */
			if( entry.getValue() instanceof String ) {
				String val = (String)entry.getValue();

				if( StringUtils.isEmpty( val )){
					template.setNull( entry.getKey() );
				} else {
					template.set( entry.getKey(), val );
				}
			}

			/** 一覧項目チェック */
			if( entry.getValue() instanceof ArrayList ){

				/** テンプレートへの追加する為のchildテンプレートリストの生成 */
				ArrayList<CAANMsg> child_template_lst = new ArrayList<CAANMsg>();

				/** 使用する明細リスト名を取得 */
				String dtlLstNm = (String)entry.getKey();

				/** 設定項目リストの格納域を取得 */
				ArrayList<HashMap<String, Object>> listDt = (ArrayList<HashMap<String, Object>>)entry.getValue();

				/** 設定項目リストの件数分、繰り返し */
				Iterator<HashMap<String, Object>> listDtIte = listDt.iterator();
				while(listDtIte.hasNext()){

					HashMap<String, Object> listDtMap = listDtIte.next();

					/** 使用するCBSMsgクラスを取得 */
					Class<?> childCbsMsg = (Class<?>)listDtMap.get( SVC_IF_CMN_INF_KEY_USE_CBSMSG );

					/** テンプレートへの追加する為のchildテンプレート生成 */
					CAANMsg childTemplate = new CAANMsg(childCbsMsg.getName());

					Iterator<Map.Entry<String, Object>> childEntryIte = listDtMap.entrySet().iterator();
					while( childEntryIte.hasNext() ){

						Map.Entry<String, Object> childEntry = (Map.Entry<String, Object>)childEntryIte.next();

						/** nullチェック */
						if( childEntry.getValue() == null ){
							childTemplate.setNull( childEntry.getKey() );
							continue;
						}

						/** 単項目チェック */
						if( childEntry.getValue() instanceof String ) {
							String val = (String)childEntry.getValue();

							if( StringUtils.isEmpty( val )){
								childTemplate.setNull( childEntry.getKey() );
							} else {
								childTemplate.set( childEntry.getKey(), val );
							}
						}
					}

					/** childテンプレートをchildテンプレートリストへ追加 */
					child_template_lst.add( childTemplate );
				}

				/** 一覧項目をテンプレートに追加 */
				if( child_template_lst.size() > 0 ){
					template.set( dtlLstNm, child_template_lst.toArray( new CAANMsg[0] ));
				}
			}
		}

		/** パラメータマップとテンプレートのマッピング */
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put( JCMConstants.TEMPLATE_LIST_KEY, templates );

		return paramMap;
	}

	/**
	 * 下りマッピング処理[照会系(一覧照会)].
	 * <br>
	 * @param   inInfMap        入力情報マップ
	 * @param   svcIfCmnInfMap  サービスI/Fマッピング共通情報マップ
	 * @param   svcResMap       サービスIFの結果が格納されているマップ情報
	 * @param   resDtLst        返却データ項目名リスト
	 * @param   errDtLst        エラー項目へ割付するデータ項目名リスト
	 * @throws  Exception       例外が発生した場合
	 * @return  下りマッピング項目
	 */
	private ArrayList<HashMap<String, Object>> setSelDwnMappingToLst( HashMap<String, Object> inInfMap,
																	   HashMap<String, Object> svcIfCmnInfMap,
																	   Map<?, ?> svcResMap,
																	   ArrayList<String> resDtLst, 
																	   ArrayList<String> errDtLst ) throws Exception {

		/** 事前処理 */
		// リクエストパラメータを取得
		IRequestParameterReadWrite reqParam = (IRequestParameterReadWrite)inInfMap.get( IN_INF_KEY_REQ_PARAM );

		// ユーザ任意文字列を取得
		String fixedText = (String)inInfMap.get( IN_INF_KEY_FIXED_TEXT );

		// 使用するparam <---> サービスI/F 変換マップ名を取得
		String convMapNm = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_CONV_MAP_NM );

		// 使用する明細リスト名を取得
		String dtlLstNm = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_DTL_LST_NM );

		// 使用するステータス項目名を取得
		String stsColumNm = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_STS_COLUM_NM );


		/** サービスIFの戻り値 */
		CAANMsg[] templates = null;
		CAANMsg template = null;
		if ( svcResMap.containsKey( JCMConstants.TEMPLATE_LIST_KEY ) ) {
			templates = (CAANMsg[])( svcResMap.get( JCMConstants.TEMPLATE_LIST_KEY ) );
			template = templates[0];
		}

		/** リクエストパラメータ作業領域 */
		Map<Object, Object> paramWorkMap = reqParam.getMappingWorkArea();
		if ( paramWorkMap == null ) {
			paramWorkMap = new HashMap<Object, Object>();
			reqParam.setMappingWorkArea( paramWorkMap );
		}

		/** マップ項目の生成 */
		HashMap<Object, Object> parent_map = (HashMap<Object, Object>)( paramWorkMap.get( convMapNm ) );
		if ( parent_map == null ) {
			parent_map = new HashMap<Object, Object>();
			paramWorkMap.put( convMapNm, parent_map );
		}

		CAANMsg[] templateArray = null;
		ArrayList<HashMap<String, Object>> parent_map_list = null;

		/** 下りマッピング */
		templateArray = template.getCAANMsgList( dtlLstNm );
		parent_map_list = (ArrayList<HashMap<String, Object>>)( parent_map.get( dtlLstNm ) );
		if ( parent_map_list == null ) {
			parent_map_list = new ArrayList<HashMap<String, Object>>();
		}
		if ( templateArray != null ) {
			// 明細
			for ( int i = 0; i < templateArray.length; i ++ ) {
				if ( i >= parent_map_list.size() ) {
					parent_map_list.add( new HashMap<String, Object>() );
				}
				CAANMsg child_template = templateArray[i];
				HashMap<String, Object> child_map = (HashMap<String, Object>)( parent_map_list.get(i) );

				/** 返却データ項目を取得 */
				Iterator<String> resDtLstIte = resDtLst.iterator();
				while( resDtLstIte.hasNext() ){
					String resDt = resDtLstIte.next();
					if ( child_template.isNull( resDt ) ) {
						child_map.put( resDt, STR_EMPTY );
					} else {
						child_map.put( resDt, child_template.getString( resDt ) );
					}
				}
			}
		}

		/** リターンコード・メッセージの設定 */
		Object returnCode = svcResMap.get( JCMConstants.RET_CD_INT_KEY );
		scResultStat(reqParam, template, Integer.parseInt( returnCode.toString() ), stsColumNm );

		/** エラーマッピング */
		HashMap<Object, Object> errMap = (HashMap<Object, Object>)( reqParam.getData( fixedText ) );

		// エラー項目へ割付するデータ項目名リストに設定されている全情報を
		// マッピングする
		Iterator<String> errDtLstIte = errDtLst.iterator();
		while( errDtLstIte.hasNext() )
		{
			String errDt = errDtLstIte.next();
			if ( ( !template.isNull( errDt ) ) && ( !errMap.containsKey( errDt ) ) ) {
				errMap.put( errDt, template.getString( errDt ) );
			}
		}

		/** エラー情報の適用 */
		ArrayList<Object> errMapList = (ArrayList<Object>)( reqParam.getControlMapData( SCControlMapKeys.ERROR_INFO ) );
		if ( errMapList == null ) {
			errMapList = new ArrayList<Object>();
		}
		reqParam.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo( svcResMap, errMapList ) );

		return parent_map_list;
	}

	/**
	 * 下りマッピング処理[照会系(一意照会)].
	 * <br>
	 * @param   inInfMap        入力情報マップ
	 * @param   svcIfCmnInfMap  サービスI/Fマッピング共通情報マップ
	 * @param   svcResMap       サービスIFの結果が格納されているマップ情報
	 * @param   resDtLst        返却データ項目名リスト
	 * @param   errDtLst        エラー項目へ割付するデータ項目名リスト
	 * @throws  Exception       例外が発生した場合
	 * @return  下りマッピング項目
	 */
	private HashMap<String, Object> setSelDwnMappingToOne( HashMap<String, Object> inInfMap,
															HashMap<String, Object> svcIfCmnInfMap,
															Map<?, ?> svcResMap,
															ArrayList<String> resDtLst, 
															ArrayList<String> errDtLst ) throws Exception {

		/** 下りマッピング処理[照会系(一覧照会)]を内部的に呼出し */
		ArrayList<HashMap<String, Object>> dwnMappingLst = setSelDwnMappingToLst( inInfMap, svcIfCmnInfMap, svcResMap, resDtLst, errDtLst );

		/** 先頭のデータのみを呼び元へ返却 */
		if ( (dwnMappingLst == null) || (dwnMappingLst.isEmpty()) ) {
			return new HashMap<String, Object>();
		}

		return (HashMap<String, Object>)( dwnMappingLst.get(0) );
	}
	/**
	 * リターンコード・メッセージの設定.
	 * <br>
	 * @param   reqParam   モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   template   テンプレート情報
	 * @param   returnCd   リターンコード
	 * @param   statusKey  ステータス取得キー
	 * @throws  Exception  例外が発生した場合
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	private IRequestParameterReadWrite scResultStat( IRequestParameterReadWrite reqParam, CAANMsg template, int returnCode, String statusKey ) throws RequestParameterException {

		/** リターンコード・メッセージの設定 */
		int templateStatus = template.getInt( statusKey );
		if ( returnCode != 0 ) {
			templateStatus = RTN_CODE_9000;
		}
		if ( JCMAPLConstMgr.getString( RETURN_MSG_.concat( String.format( RETURN_MSG_FORMAT, templateStatus ) ) ) == null ) {
			templateStatus = RTN_CODE_0000;
		}

		int bpStatus = RTN_CODE_0000;
		Object obj = reqParam.getControlMapData( SCControlMapKeys.RETURN_CODE );
		if ( obj == null ) {
			bpStatus = RTN_CODE_MINUS;
		} else {
			bpStatus = Integer.parseInt(reqParam.getControlMapData( SCControlMapKeys.RETURN_CODE ).toString() );
		}

		if ( templateStatus > bpStatus ) {
			String returnCdStr = String.format( RETURN_MSG_FORMAT, templateStatus );
			String returnMsgString = JCMAPLConstMgr.getString( RETURN_MSG_.concat( returnCdStr ) );
			reqParam.setControlMapData( SCControlMapKeys.RETURN_CODE, returnCdStr );
			reqParam.setControlMapData( SCControlMapKeys.RETURN_MESSAGE, returnMsgString );
		}

		return reqParam;
	}
	
	/**
	 * サービスコンポーネント実行結果確認.
	 * <br>
	 * @param   reqParam   モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @throws  Exception  例外が発生した場合
	 */
	public void scResultCheck( IRequestParameterReadWrite reqParam ) throws CCException, RequestParameterException {
		int scReturnCode = Integer.parseInt( reqParam.getControlMapData( SCControlMapKeys.RETURN_CODE ).toString() );

		// サービスコンポーネントの実行結果に単項目以上のエラーがある場合、例外とする
		if ( scReturnCode >= JPCModelConstant.SINGLEDATA_ERR ) {
			throw new CCException( ERR_STR_RESULT_CD, new Exception() );
		}
	}

}
