/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCNContRkSnshoCC
*   ソースファイル名：JCNContRkSnshoCC.java
*   作成者          ：FJ
*   日付            ：2023年09月07日
*＜機能概要＞
*   オプションサービス契約の予約取消を行う
*＜修正履歴＞
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*	v65.00.00	2023/09/07	FJ渋谷	【ANK-4346-00-00】【eo定期】CCMG再構築対応
*	v65.00.01	2024/02/09	FJ渋谷	【ANK-4346-00-01】更新者名設定値の不具合
*	v65.00.02	2024/02/10	FJ渋谷	【ANK-4346-15-00】変更前変更後の訂正内容の取得追加
*	v65.00.03	2024/02/14	FJ渋谷	【IT1-2024-0000004】変更前変更後の訂正内容の取得追加
**********************************************************************/
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.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
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.JCNStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JCNStringUtil;
import eo.ejb.cbs.cbsmsg.ECNA0170001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECNA0170001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECNA0170001CBSMsg4List;
import eo.ejb.cbs.cbsmsg.ECNA0180001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECNA0180001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECNA0180001CBSMsg2List;
import eo.ejb.cbs.cbsmsg.ECNA0270001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECNA0270001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECNA0270001CBSMsg2List;
import eo.ejb.cbs.cbsmsg.ECNA0280001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECNA0280001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECNA0280001CBSMsg2List;
import eo.ejb.cbs.cbsmsg.EZM0051A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0051A010CBSMsg1List;

/**
 * コンテンツ履歴参照部品です。<p>
 * <br>
 * @author 富士通
 */
public class JCNContRkSnshoCC extends AbstractCommonComponent
{

	/** ラジオボタン設定 */
	private static String radio_bottan = "";

	
	
	/*
	 * =============
	 * テンプレートID
	 * =============
	 */
	/** テンプレートID 契約変更履歴参照 */
	private static final String TEMPLATEID_ECNA0280001 = "ECNA0280001";
	
	/** テンプレートID 料金訂正履歴参照 */
	private static final String TEMPLATEID_ECNA0270001 = "ECNA0270001";
	
	/** テンプレートID 料金訂正履歴参照 */
	private static final String TEMPLATEID_ECNA0170001 = "ECNA0170001";
	
	/** テンプレートID ユーザー */
	private static final String TEMPLATEID_EZM0051A010 = "EZM0051A010";
	// ANK-4346-15-00 ADD START
	
	/** テンプレートID 課金参照 */
	private static final String TEMPLATEID_ECNA0180001 = "ECNA0180001";
	
	// ANK-4346-15-00 ADD END
	
	/*
	 * ======
	 * 固定値
	 * ======
	 */
	/** １ページに表示する件数  */
	private static final String PER_PAGE = "5";
	
	/** 契約履歴参照 ソート順 （更新日時）*/
	private static final String KK_RRK_SORT = "2";
	
	/** 料金訂正履歴参照 ソート順 （更新日時）*/
	private static final String PRC_RRK = "3";
	
	/** 昇順/降順*/
	private static final String SORT_ORDER = "1";
	
	/** ラジオボタン設定値（契約履歴参照） */
	private static final String KK_RK_SNSHO = "0";
	
	/** リターンメッセージ取得キー */
	private static final String RETURN_MESSAGE_STRING = "RETURN_MESSAGE_";
	
	/** リターンメッセージの書式指定文字列 */
	private static final String RETURN_MESSAGE_FORMAT = "%1$04d";
	
	/** エラー項目接尾辞 */
	private static final String ERRITEM_SUFFIX = "_err";
	
	/** エラー機能識別コード 1（契約異動変更履歴） */
	private static final String ERR_SKBT_CD_1 = "1";
	
	/** エラー機能識別コード 2（料金訂正履歴）*/
	private static final String ERR_SKBT_CD_2 = "2";
	
	/** エラー機能識別コード 3（契約一覧情報取得）*/
	private static final String ERR_SKBT_CD_3 = "3";
	
	// ANK-4346-15-00 ADD START
	/** エラー機能識別コード 4（課金参照）*/
	private static final String ERR_SKBT_CD_4 = "4";
	// ANK-4346-15-00 ADD END
	
	/** 要否フラグ (不要: 0)*/
	private static final String FLG_0 = "0";
	
	/** 要否フラグ (要: 1)*/
	private static final String FLG_1 = "1";
	
	/** エラーコード（正常） */
	private static final String ERR_CD_SEIJO = "00000";
	
	// ANK-4346-15-00 ADD START
	/** ソート (課金参照用)*/
	private static final String SORT = "4,2";
	// ANK-4346-15-00 ADD END
	
	/** 最大件数 */
	private static final int MAX_TOTAL = 100;
	
	/** 契約異動変更履歴参照用 履歴コード変換マップ */
	private static final Map<String, String> KK_RRK_CD_MAP = new HashMap<String, String>();
	static
	{
		KK_RRK_CD_MAP.put("1", "契約");
		KK_RRK_CD_MAP.put("2", "数量変更");
		KK_RRK_CD_MAP.put("3", "決済方法変更");
		KK_RRK_CD_MAP.put("4", "契約状態変更");
		KK_RRK_CD_MAP.put("5", "解約");
		KK_RRK_CD_MAP.put("6", "強制解約");
		KK_RRK_CD_MAP.put("7", "マスター設定終了");
	}
	
	/** 料金訂正参照用 履歴コード変換マップ */
	private static final Map<String, String> PRC_RRK_CD_MAP = new HashMap<String, String>();
	static
	{
		PRC_RRK_CD_MAP.put("1", "課金訂正:取消");
		PRC_RRK_CD_MAP.put("2", "課金訂正:売上減");
	}
	
	// ANK-4346-15-00 ADD START
	/** 訂正区分（取消） */
	private static final String CORRECTED_DIVISION_1 = "1";
	
	/** 訂正区分（売上減） */
	private static final String CORRECTED_DIVISION_2 = "2";
	// ANK-4346-15-00 ADD END
	
	/** 契約異動変更履歴参照用 リクエスト用履歴コード変換マップ */
	private static final Map<String, String> RQ_KK_RRK_CD_MAP = new HashMap<String, String>();
	static
	{
		RQ_KK_RRK_CD_MAP.put("01", "1");
		RQ_KK_RRK_CD_MAP.put("02", "2");
		RQ_KK_RRK_CD_MAP.put("03", "3");
		RQ_KK_RRK_CD_MAP.put("04", "4");
		RQ_KK_RRK_CD_MAP.put("05", "5");
		RQ_KK_RRK_CD_MAP.put("06", "6");
		RQ_KK_RRK_CD_MAP.put("07", "7");
	}
	
	/** 料金訂正参照用 履歴コード変換マップ */
	private static final Map<String, String> RQ_PRC_RRK_CD_MAP = new HashMap<String, String>();
	static
	{
		RQ_PRC_RRK_CD_MAP.put("51", "2");
		RQ_PRC_RRK_CD_MAP.put("53", "1");
	}
	
	/*
	 * =============
	 * 出力パラメータ
	 * =============
	 */
	/** エラーコード */
	private static final String PARAM_ERR_CD = "err_cd";
	/** 総件数 */
	private static final String PARAM_TOTAL = "total";
	/** 総ページ番号 */
	private static final String PARAM_TOTAL_PAGE = "total_page";
	/** 現在のページ番号 */
	private static final String PARAM_PAGE = "page";
	
	/** 契約番号 */
	private static final String PARAM_CONTRACT_NO = "cont_kei_no";
	/** 履歴番号 */
	private static final String PARAM_RECORD_NO = "record_no";
	/** 変更履歴コード */
	private static final String PARAM_CHANGE_RECORD_CD_NM = "ido_rireki_cd_nm";
	/** 更新日時 */
	private static final String PARAM_CHANGE_DATE = "chge_dtm";
	/** 変更前情報 */
	private static final String PARAM_CHANGE_BEFORE = "chge_bf_data";
	/** 変更後情報 */
	private static final String PARAM_CHANGE_AFTER = "chge_af_data";
	/** データ更新者ＩＤ */
	private static final String PARAM_UPDATE_ID = "ccmg_data_ksnsha_id";
	/** データ更新者名 */
	private static final String PARAM_UPDATE_NAME = "ccmg_data_ksnsha_nm";
	/** 対象年月 */
	private static final String PARAM_TARGET_DATE = "target_date";
	/** 処理コード */
	private static final String PARAM_OPERATION_CD = "operation_cd";
	/** 変更前訂正区分 */
	private static final String PARAM_BEFORE_CORRECTED_DIVISION = "before_corrected_division";
	/** 変更前値引額 */
	private static final String PARAM_BEFORE_DISCOUNT_AMOUNT = "before_discount_amount";
	/** 変更前訂正記事 */
	private static final String PARAM_BEFORE_CORRECTED_NOTES = "before_corrected_notes";
	/** 変更後訂正区分 */
	private static final String PARAM_AFTER_CORRECTED_DIVISION = "after_corrected_division";
	/** 変更後値引額 */
	private static final String PARAM_AFTER_DISCOUNT_AMOUNT = "after_discount_amount";
	/** 変更後訂正記事 */
	private static final String PARAM_AFTER_CORRECTED_NOTES = "chrg_teise_rsn_memo";
	
	/** コンテンツサービスID */
	private static final String PARAM_SERVICE_ID = "cont_svc_cd";
	/** コンテンツサービス名称 */
	private static final String PARAM_SERVICE_NAME = "cont_svc_nm";
	/** コンテンツ名称 */
	private static final String PARAM_CONTENTS_NAME = "cont_nm";
	
	/** エラー機能識別コード */
	public static final String ERR_SKBT_CODE = "err_skbt_code";
	/** 処理結果コード */
	public static final String RETURN_CODE = "return_code";
	/** 検索エラーフラグ */
	public static final String SEARCH_ERR_FLG = "search_err_flg";
	
	/** CC出力パラメータ：総件数 */
	public static final String TOTAL_COUNT = "total_search_num";

	/** CC出力パラメータ：総ページ番号 */
	public static final String TOTAL_PAGE = "total_page_num";

	/** CC出力パラメータ：050番号 */
	public static final String LALACALL_NUMBER = "n_050_telno";
	/*
	 * =============
	 * 退避用hashMap
	 * =============
	 */
	/** LaLaCall情報(key:クレジットカードＩＤ) */
	private HashMap<String, String> serchResltLaLaCall = new HashMap<String, String>();
	
	/**
	 * コンテンツ履歴参照実行処理です。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle, 
			IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		
		// 作業用マップ
		HashMap<String, Object> workMap = new HashMap<String, Object>();
		
		// 参照結果マップ
		CAANMsg SanshoResultMap = null;
		
		HashMap inMap = null;
		inMap = (HashMap)param.getData(fixedText);
		
		// 参照結果
		boolean SanshoResult = false;
		// ラジオボタンの設定値を初期化
		radio_bottan = (String) inMap.get("select_radio");
		String errCode = "";
		
		try {		
			if(KK_RK_SNSHO.equals(radio_bottan))
			{
				// CNIFE052_契約変更履歴参照
				SanshoResultMap = getECNA0280001_map(handle, param, fixedText, workMap);
				
				if(SanshoResultMap.getCAANMsgList(ECNA0280001CBSMsg.ECNA0280001CBSMSG1LIST) != null)
				{
					// 契約異動変更履歴参照の取得
					CAANMsg[] ecna0280001Msg1List = (CAANMsg[])SanshoResultMap.getCAANMsgList(ECNA0280001CBSMsg.ECNA0280001CBSMSG1LIST);
					if(ecna0280001Msg1List != null && ecna0280001Msg1List.length > 0)
					{
						errCode = ecna0280001Msg1List[0].getString(ECNA0280001CBSMsg1List.ERR_CD);
						inMap.put(PARAM_ERR_CD, errCode);
						// 処理結果が正常以外の場合エラー情報を設定して処理終了
						if(!ERR_CD_SEIJO.equals(errCode) )
						{
							// エラー識別コードに "1":契約異動変更履歴参照でのエラー を設定
							inMap.put(ERR_SKBT_CODE , ERR_SKBT_CD_1);
							// データ取得フラグを設定
							inMap.put(SEARCH_ERR_FLG , JPCModelConstant.SEARCH_ERR_FLG_ZERO );		// 検索エラーフラグ
							inMap.put(TOTAL_COUNT, "0");											// 総件数
							inMap.put(TOTAL_PAGE,"0");												// 総ページ番号
							// システムエラーを設定する
							param.setControlMapData(SCControlMapKeys.RETURN_CODE, errCode);
							param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
							return param;
						}
					}
					else
					{
						inMap.put(SEARCH_ERR_FLG , JPCModelConstant.SEARCH_ERR_FLG_ZERO );		// 検索エラーフラグ
						inMap.put(TOTAL_COUNT, "0");											// 総件数
						inMap.put(TOTAL_PAGE,"0");												// 総ページ番号
						// システムエラーを設定する
						param.setControlMapData(SCControlMapKeys.RETURN_CODE, errCode);
						param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
						return param;
					}
				}
				else
				{
					// データ取得フラグを設定
					setNoData(inMap);
				}
				
				
			}
			else
			{
				// CNIFE051_料金訂正履歴参照ECNA0270001
				SanshoResultMap = getECNA0270001_map(handle, param, fixedText, workMap);
				if(SanshoResultMap.getCAANMsgList(ECNA0270001CBSMsg.ECNA0270001CBSMSG1LIST) != null)
				{
					// 料金訂正履歴参照の取得
					CAANMsg[] ecna0270001Msg1List = (CAANMsg[])SanshoResultMap.getCAANMsgList(ECNA0270001CBSMsg.ECNA0270001CBSMSG1LIST);
					if(ecna0270001Msg1List != null && ecna0270001Msg1List.length > 0)
					{
						errCode = ecna0270001Msg1List[0].getString(ECNA0270001CBSMsg1List.ERR_CD);
						inMap.put(PARAM_ERR_CD, errCode);
						if(!ERR_CD_SEIJO.equals(errCode) )
						{
							// エラー識別コードに"2":料金訂正履歴参照でのエラー を設定
							inMap.put(ERR_SKBT_CODE , ERR_SKBT_CD_2);
							// データ取得フラグを設定
							inMap.put(SEARCH_ERR_FLG , JPCModelConstant.SEARCH_ERR_FLG_ZERO );		// 検索エラーフラグ
							inMap.put(TOTAL_COUNT, "0");											// 総件数
							inMap.put(TOTAL_PAGE,"0");												// 総ページ番号
							// システムエラーを設定する
							param.setControlMapData(SCControlMapKeys.RETURN_CODE, errCode);
							param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
							return param;
						}
					}
					else
					{
						// エラー識別コードに"2":料金訂正履歴参照でのエラー を設定
						inMap.put(ERR_SKBT_CODE , ERR_SKBT_CD_2);
						// データ取得フラグを設定
						inMap.put(SEARCH_ERR_FLG , JPCModelConstant.SEARCH_ERR_FLG_ZERO );		// 検索エラーフラグ
						inMap.put(TOTAL_COUNT, "0");											// 総件数
						inMap.put(TOTAL_PAGE,"0");												// 総ページ番号
						// システムエラーを設定する
						param.setControlMapData(SCControlMapKeys.RETURN_CODE, errCode);
						param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
						return param;
					}
				}
				else
				{
					// データ取得フラグを設定
					setNoData(inMap);
				}
			}
			
				
			// 結果格納
			SanshoResult = editResult(handle, param, fixedText, workMap, SanshoResultMap);

			
			if(SanshoResult)
			{
				// 正常終了
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, "00000");
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);

			}
			
		} catch (Throwable e) {
			
			// 正常終了
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_9000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
		}
		return param;

	}

	/**
	 * CNIFE052_契約変更履歴参照呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param workMap (I) 作業用マップ
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private CAANMsg getECNA0280001_map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, HashMap<String, Object> workMap) throws Throwable
	{
		HashMap inMap = null;
		inMap = (HashMap)param.getData(fixedText);

		/* ◇上りマッピング処理 */
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		Object[][] paramMap = editInMsgECNA0280001(inMap);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// サービスI/F実行
		CAANMsg ecna0280001Msg = callSC(handle, scCall, param, fixedText, paramMap);
		
		return ecna0280001Msg;
	}
	/**
	 * CAANMsgに必要なデータをマッピングします。<br>
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param fixedText ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private Object[][] editInMsgECNA0280001( HashMap inMap)
	throws RequestParameterException
	{

		Object[][] ecna0280001In = {
				{ECNA0280001CBSMsg.TEMPLATEID, 					TEMPLATEID_ECNA0280001},
				{ECNA0280001CBSMsg.FUNC_CODE, 					JPCModelConstant.FUNC_CD_1},
				{ECNA0280001CBSMsg.KEY_SYSID, 					JCNStringUtil.nullToBlank((String)inMap.get("sysid")) },										// ＫＥＹ＿ＳＹＳＩＤ
				{ECNA0280001CBSMsg.KEY_CHANGE_RECODE_CD, 		JCNStringUtil.nullToBlank(RQ_KK_RRK_CD_MAP.get(inMap.get("change_recode_cd"))) },				// ＫＥＹ＿変更履歴コード
				{ECNA0280001CBSMsg.KEY_CHANGE_FROM, 			JCNStringUtil.nullToBlank((String)inMap.get("change_from")) },									// ＫＥＹ＿変更日時(開始)
				{ECNA0280001CBSMsg.KEY_CHANGE_TO, 				JCNStringUtil.nullToBlank((String)inMap.get("change_to")) },									// ＫＥＹ＿変更日時(終了)
				{ECNA0280001CBSMsg.KEY_PAGE, 					JCNStringUtil.nullToBlank((String)inMap.get("page"))},											// ＫＥＹ＿ページ番号
				{ECNA0280001CBSMsg.KEY_PER_PAGE,  				PER_PAGE},																						// ＫＥＹ＿１ページに表示する件数
				{ECNA0280001CBSMsg.KEY_SORT,  					KK_RRK_SORT},																							// ＫＥＹ＿ソート順
				{ECNA0280001CBSMsg.KEY_SORT_ORDER,  			SORT_ORDER },																					// ＫＥＹ＿昇順/降順
		};
		return ecna0280001In;
	}
	/**
	 * CAANMsgに必要なデータをマッピングします。<br>
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param fixedText ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private Object[][] editInMsgECNA0270001( HashMap inMap)
	throws RequestParameterException
	{
		Object[][] ecna0270001In = {
				{ECNA0270001CBSMsg.TEMPLATEID, 							TEMPLATEID_ECNA0270001},
				{ECNA0270001CBSMsg.FUNC_CODE, 							JPCModelConstant.FUNC_CD_1},
				{ECNA0270001CBSMsg.KEY_SYSID, 							JCNStringUtil.nullToBlank((String)inMap.get("sysid")) },									// ＫＥＹ＿ＳＹＳＩＤ
				{ECNA0270001CBSMsg.KEY_AFTER_CORRECTED_DIVISION, 		JCNStringUtil.nullToBlank(RQ_PRC_RRK_CD_MAP.get(inMap.get("change_recode_cd"))) },			// ＫＥＹ＿変更履歴コード
				{ECNA0270001CBSMsg.KEY_UPDATE_DATE_FROM, 				JCNStringUtil.nullToBlank((String)inMap.get("change_from")) },								// ＫＥＹ＿変更日時(開始)
				{ECNA0270001CBSMsg.KEY_UPDATE_DATE_TO, 					JCNStringUtil.nullToBlank((String)inMap.get("change_to")) },								// ＫＥＹ＿変更日時(終了)
				{ECNA0270001CBSMsg.KEY_PAGE, 							JCNStringUtil.nullToBlank((String)inMap.get("page"))},										// ＫＥＹ＿ページ番号
				{ECNA0270001CBSMsg.KEY_PER_PAGE,  						PER_PAGE},																					// ＫＥＹ＿１ページに表示する件数
				{ECNA0270001CBSMsg.KEY_SORT,  							PRC_RRK},																						// ＫＥＹ＿ソート順
				{ECNA0270001CBSMsg.KEY_SORT_ORDER,  					SORT_ORDER },																				// ＫＥＹ＿昇順/降順
		};


		return ecna0270001In;

	}
	
	/**
	 * CAANMsgに必要なデータをマッピングします。<br>
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param fixedText ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private Object[][] editInMsgECNA0170001( HashMap inMap, String contractNo)
	throws RequestParameterException
	{

		Object[][] ecna0170001In = {
				{ECNA0170001CBSMsg.TEMPLATEID, 							TEMPLATEID_ECNA0170001},
				{ECNA0170001CBSMsg.FUNC_CODE, 							JPCModelConstant.FUNC_CD_1},
				{ECNA0170001CBSMsg.CONTRACT_NO, 						contractNo},						// 契約番号
				{ECNA0170001CBSMsg.RETURN_CONTRACT, 					FLG_0 },							// コンテンツ契約情報要否
				{ECNA0170001CBSMsg.RETURN_CHARGE, 						FLG_0 },							// 直近課金情報要否
				{ECNA0170001CBSMsg.RETURN_CONTRACT_ADDS, 				FLG_1 },							// 契約付加情報要否
		};
		return ecna0170001In;
	}
	/**
	 * CAANMsgに必要なデータをマッピングします。<br>
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param fixedText ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private Object[][] editInMsgEZM0051A0101( HashMap inMap, String UserID)
	throws RequestParameterException
	{

		Object[][] ezm0051a010In = {
				{EZM0051A010CBSMsg.TEMPLATEID, 							TEMPLATEID_EZM0051A010},
				{EZM0051A010CBSMsg.FUNC_CODE, 							JPCModelConstant.FUNC_CD_1},
				{EZM0051A010CBSMsg.KEY_USER_ID, 						UserID},						// ＫＥＹ＿ユーザーID
		};
		return ezm0051a010In;
	}
	
	
	/**	
	 * 結果格納処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param workMap (I) 作業用マップ
	 * @return 処理結果を返却
	 * @throws Throwable 
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private boolean editResult(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, HashMap<String, Object> workMap, CAANMsg SanshoResultMap) throws Throwable
	{

		
		
		// 履歴参照情報取得（CCMG）CCマップ
		// 結果を詰めるマップを取得。
		HashMap<String, Object> workDataMap = new HashMap<String, Object>();
		CAANMsg ecna0170001Result = null;
		// ANK-4346-15-00 ADD START
		CAANMsg ecna0180001Result = null;
		// ANK-4346-15-00 ADD END
		CAANMsg ezm0051a010Result = null;
		List<Map<String, Object>> rrkRsltRecord = new ArrayList<Map<String, Object>>();
		
		HashMap<String, Object> inMap =  new HashMap<String, Object>();
		inMap = (HashMap)param.getData(fixedText);
		
		if(SanshoResultMap == null)
		{
			// データ取得フラグを設定
			setNoData(inMap);
			return false;
		}
		
		// ==================================
		// ==== レスポンス情報返却処理 ======
		// ==================================
		if(KK_RK_SNSHO.equals(radio_bottan))
		{
			
			// 契約異動変更履歴の取得
			CAANMsg[] ecna0280001Msg1List = (CAANMsg[])SanshoResultMap.getCAANMsgList(ECNA0280001CBSMsg.ECNA0280001CBSMSG1LIST);
			
			CAANMsg ecna0280001Msg1ListMap = new CAANMsg();
			
			if (ecna0280001Msg1List != null && ecna0280001Msg1List.length != 0)
			{
				
				ecna0280001Msg1ListMap = ecna0280001Msg1List[0];
				
				inMap.put(PARAM_ERR_CD,					JCNStringUtil.nullToBlank(ecna0280001Msg1ListMap.getString(ECNA0280001CBSMsg1List.ERR_CD)));
				int total = 0;
				//総件数取得
				if(!JCNStringUtil.isNullBlank(ecna0280001Msg1ListMap.getString(ECNA0280001CBSMsg1List.TOTAL)))
				{
					total = Integer.valueOf(ecna0280001Msg1ListMap.getString(ECNA0280001CBSMsg1List.TOTAL));
				}
				// 最大取得件数を超えた場合
				if (MAX_TOTAL < total)
				{
					setMaxData(inMap,ecna0280001Msg1ListMap);
					return false;
				}
				else if (total == 0)
				{
					// データ取得フラグを設定
					setNoData(inMap);
					return false;
				}
				inMap.put(TOTAL_COUNT,					nullOrBlankToZero(ecna0280001Msg1ListMap.getString(ECNA0280001CBSMsg1List.TOTAL)));
				inMap.put(TOTAL_PAGE,					nullOrBlankToZero(ecna0280001Msg1ListMap.getString(ECNA0280001CBSMsg1List.TOTAL_PAGE)));
				inMap.put(PARAM_PAGE,					nullOrBlankToZero(ecna0280001Msg1ListMap.getString(ECNA0280001CBSMsg1List.PAGE)));
			}

			CAANMsg[] ecna0280001Msg2List = (CAANMsg[])ecna0280001Msg1ListMap.getCAANMsgList(ECNA0280001CBSMsg1List.ECNA0280001CBSMSG2LIST);
			
			if (ecna0280001Msg2List != null && ecna0280001Msg2List.length != 0)
			{
				for(CAANMsg result2 : ecna0280001Msg2List)
				{
					workDataMap = new HashMap<String, Object>();
					
					workDataMap.put(PARAM_CONTRACT_NO,				JCNStringUtil.nullToBlank(result2.getString(ECNA0280001CBSMsg2List.CONTRACT_NO)));										// 契約番号
					workDataMap.put(PARAM_CHANGE_RECORD_CD_NM,			JCNStringUtil.nullToBlank(KK_RRK_CD_MAP.get(result2.getString(ECNA0280001CBSMsg2List.CHANGE_RECORD_CD))));		// 変更履歴コード
					workDataMap.put(PARAM_CHANGE_DATE, 				JCNStringUtil.nullToBlank(result2.getString(ECNA0280001CBSMsg2List.CHANGE_DATE)));										// 更新日時
					workDataMap.put(PARAM_CHANGE_BEFORE, 			JCNStringUtil.nullToBlank(result2.getString(ECNA0280001CBSMsg2List.CHANGE_BEFORE)));									// 変更前情報
					workDataMap.put(PARAM_CHANGE_AFTER,				JCNStringUtil.nullToBlank(result2.getString(ECNA0280001CBSMsg2List.CHANGE_AFTER)));										// 変更後情報
					workDataMap.put(PARAM_UPDATE_ID,				JCNStringUtil.nullToBlank(result2.getString(ECNA0280001CBSMsg2List.UPDATE_ID)));										// データ更新者ＩＤ
					
					/* ユーザースキーマからユーザー名を取得 */
					String UpdateNm = "";
					if(!JCNStringUtil.isNullBlank(result2.getString(ECNA0280001CBSMsg2List.UPDATE_ID)))
					{
						ezm0051a010Result = getEZM0051A010_map(handle, param, fixedText, result2.getString(ECNA0280001CBSMsg2List.UPDATE_ID));
						CAANMsg[] ezm0051a010Msg1List = (CAANMsg[])ezm0051a010Result.getCAANMsgList(EZM0051A010CBSMsg.EZM0051A010CBSMSG1LIST);
						if(ezm0051a010Msg1List != null && ezm0051a010Msg1List.length != 0)
						{
							workDataMap.put(PARAM_UPDATE_NAME,	ezm0051a010Msg1List[0].getString(EZM0051A010CBSMsg1List.USER_NM));			// データ更新者名
						}
						else
						{
							// ANK-4346-00-01 MOD START
//							// 更新者名が取得できなければ、更新者IDを設定する
//							workDataMap.put(PARAM_UPDATE_NAME,	JCNStringUtil.nullToBlank(result2.getString(ECNA0280001CBSMsg2List.UPDATE_ID)));			// データ更新者名
							// ユーザースキーマから更新者名が取得できなければ、レスポンスの更新者名を設定する
							workDataMap.put(PARAM_UPDATE_NAME,	JCNStringUtil.nullToBlank(result2.getString(ECNA0280001CBSMsg2List.UPDATE_NAME)));			// データ更新者名
							// ANK-4346-00-01 MOD END
						}
					}
					else
					{
						// ANK-4346-00-01 MOD START
//						workDataMap.put(PARAM_UPDATE_NAME,		JCNStrConst.S_BLANK);
						// ユーザースキーマから更新者名が取得できなければ、レスポンスの更新者名を設定する
						workDataMap.put(PARAM_UPDATE_NAME,	JCNStringUtil.nullToBlank(result2.getString(ECNA0280001CBSMsg2List.UPDATE_NAME)));			// データ更新者名
						// ANK-4346-00-01 MOD END
					}
					// 契約一覧情報取得API実行
					ecna0170001Result = getECNA0170001_map(handle, param, fixedText, result2);
					
					String errCode = ecna0170001Result.getString(ECNA0170001CBSMsg.ERR_CD);
					inMap.put(PARAM_ERR_CD, errCode);
					if(!ERR_CD_SEIJO.equals(errCode))
					{
						// エラー識別コードに "3":契約一覧情報取得でのエラー を設定
						inMap.put(ERR_SKBT_CODE , ERR_SKBT_CD_3);
						// データ取得フラグを設定
						setNoData(inMap);
						// システムエラーを設定する
						param.setControlMapData(SCControlMapKeys.RETURN_CODE, errCode);
						param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
						return false;
					}
					
					// 契約一覧情報の取得
					CAANMsg[] ecna0170001Msg1List = (CAANMsg[])ecna0170001Result.getCAANMsgList(ECNA0170001CBSMsg.ECNA0170001CBSMSG1LIST);
					if (ecna0170001Msg1List != null && ecna0170001Msg1List.length != 0)
					{
						for(CAANMsg result3 : ecna0170001Msg1List)
						{
							workDataMap.put(PARAM_SERVICE_ID,				JCNStringUtil.nullToBlank(result3.getString(ECNA0170001CBSMsg1List.CONTRACTS_SERVICE_ID)));		// コンテンツサービスID
							workDataMap.put(PARAM_SERVICE_NAME,				JCNStringUtil.nullToBlank(result3.getString(ECNA0170001CBSMsg1List.SERVICE_NAME)));				// コンテンツサービス名称
							workDataMap.put(PARAM_CONTENTS_NAME,			JCNStringUtil.nullToBlank(result3.getString(ECNA0170001CBSMsg1List.CONTENTS_NAME)));			// コンテンツ名称
							if(JCNStrConst.CN0011_CONT_SVC_CD_050.equals(result3.getString(ECNA0170001CBSMsg1List.CONTRACTS_SERVICE_ID)))
							{
								// 取得したサービスコードの中にLaLaCallが存在する場合、契約付加情報リストを取得する
								if(!getLaLaCallTELNoList(handle, param, fixedText))
								{
									// API実行に失敗した場合は処理を終了する。
									return false;
								}
								// 契約付加情報リストの取得(LaLaCallの場合のみ取得)
								CAANMsg[] ecna0170001Msg4List = ecna0170001Msg1List[0].getCAANMsgList(ECNA0170001CBSMsg1List.ECNA0170001CBSMSG4LIST);
								if (ecna0170001Msg4List != null && ecna0170001Msg4List.length > 0)
								{
										CAANMsg ecna0170001Msg4ListMap = ecna0170001Msg4List[0];
										// 項目名
										String itemName = JCNStringUtil.nullToBlank(ecna0170001Msg4ListMap.getString(ECNA0170001CBSMsg4List.ITEM_NAME));
										// 設定値
										String value = ecna0170001Msg4ListMap.getString(ECNA0170001CBSMsg4List.VALUE);
										
										// LaLaCallの項目名が「月額基本料契約番号」の場合
										if("MONTHLY_CONTRACT_NO".equals(itemName))
										{
											// 契約番号からLaLaCall電話番号を取得する。
											workDataMap.put(LALACALL_NUMBER, serchResltLaLaCall.get(value));
										}
										else
										{
											workDataMap.put(LALACALL_NUMBER, ecna0170001Msg4ListMap.getString(ECNA0170001CBSMsg4List.VALUE));
										}
								}
								else
								{
									//  050電話番号
									workDataMap.put(LALACALL_NUMBER , JCNStrConst.S_BLANK);
								}
							}
						
						}
					}
				rrkRsltRecord.add(workDataMap);
				}
				
			}
			else
			{
				// データ取得フラグを設定
				setNoData(inMap);
				return false;
			}
		}
		else 
		{
			// 料金訂正履歴の取得
			CAANMsg[] ecna0270001Msg1List = (CAANMsg[])SanshoResultMap.getCAANMsgList(ECNA0270001CBSMsg.ECNA0270001CBSMSG1LIST);
			
			CAANMsg ecna0270001Msg1ListMap = new CAANMsg();
			
			if (ecna0270001Msg1List != null && ecna0270001Msg1List.length != 0)
			{
				ecna0270001Msg1ListMap = ecna0270001Msg1List[0];
				
				inMap.put(PARAM_ERR_CD,					JCNStringUtil.nullToBlank(ecna0270001Msg1ListMap.getString(ECNA0270001CBSMsg1List.ERR_CD)));
				int total = 0;
				//総件数取得
				if(!JCNStringUtil.isNullBlank(ecna0270001Msg1ListMap.getString(ECNA0270001CBSMsg1List.TOTAL)))
				{
					total = Integer.valueOf(ecna0270001Msg1ListMap.getString(ECNA0270001CBSMsg1List.TOTAL));
				}
				// 最大取得件数を超えた場合
				if (MAX_TOTAL < total)
				{
					setMaxData(inMap,ecna0270001Msg1ListMap);
					return false;
				}
				else if (total == 0)
				{
					// データ取得フラグを設定
					setNoData(inMap);
					return false;
				}
				inMap.put(TOTAL_COUNT,					nullOrBlankToZero(ecna0270001Msg1ListMap.getString(ECNA0270001CBSMsg1List.TOTAL)));
				inMap.put(TOTAL_PAGE,					nullOrBlankToZero(ecna0270001Msg1ListMap.getString(ECNA0270001CBSMsg1List.TOTAL_PAGE)));
				inMap.put(PARAM_PAGE,					nullOrBlankToZero(ecna0270001Msg1ListMap.getString(ECNA0270001CBSMsg1List.PAGE)));
			}
			CAANMsg[] ecna0270001Msg2List = (CAANMsg[])ecna0270001Msg1ListMap.getCAANMsgList(ECNA0270001CBSMsg1List.ECNA0270001CBSMSG2LIST);
			
			if (ecna0270001Msg2List != null && ecna0270001Msg2List.length != 0)
			{
				for(CAANMsg result4 : ecna0270001Msg2List)
				{
					workDataMap = new HashMap<String, Object>();
					
					workDataMap.put(PARAM_CONTRACT_NO,							JCNStringUtil.nullToBlank(result4.getString(ECNA0270001CBSMsg2List.CONTRACT_NO)));								// 契約番号
					// ANK-4346-15-00 DEL START
//					workDataMap.put(PARAM_CHANGE_BEFORE,				JCNStringUtil.nullToBlank(result4.getString(ECNA0270001CBSMsg2List.BEFORE_DISCOUNT_AMOUNT)));							// 変更前値引額
					// ANK-4346-15-00 DEL END
					workDataMap.put(PARAM_CHANGE_RECORD_CD_NM,				JCNStringUtil.nullToBlank(PRC_RRK_CD_MAP.get(result4.getString(ECNA0270001CBSMsg2List.AFTER_CORRECTED_DIVISION))));		// 変更後訂正区分
					// ANK-4346-15-00 DEL START
//					workDataMap.put(PARAM_CHANGE_AFTER,				JCNStringUtil.nullToBlank(result4.getString(ECNA0270001CBSMsg2List.AFTER_DISCOUNT_AMOUNT)));								// 変更後値引額
					// ANK-4346-15-00 DEL END
					workDataMap.put(PARAM_AFTER_CORRECTED_NOTES,				JCNStringUtil.nullToBlank(result4.getString(ECNA0270001CBSMsg2List.AFTER_CORRECTED_NOTES)));					// 変更後訂正記事
					workDataMap.put(PARAM_CHANGE_DATE,							JCNStringUtil.nullToBlank(result4.getString(ECNA0270001CBSMsg2List.UPDATE_DATE)));								// 更新日時
					workDataMap.put(PARAM_UPDATE_ID,							JCNStringUtil.nullToBlank(result4.getString(ECNA0270001CBSMsg2List.UPDATE_ID)));								// データ更新者ＩＤ
					
					/* ユーザースキーマからユーザー名を取得 */
					String UpdateNm = "";
					if(!JCNStringUtil.isNullBlank(result4.getString(ECNA0270001CBSMsg2List.UPDATE_ID)))
					{
						ezm0051a010Result = getEZM0051A010_map(handle, param, fixedText, result4.getString(ECNA0270001CBSMsg2List.UPDATE_ID));
						CAANMsg[] ezm0051a010Msg1List = (CAANMsg[])ezm0051a010Result.getCAANMsgList(EZM0051A010CBSMsg.EZM0051A010CBSMSG1LIST);
						if(ezm0051a010Msg1List != null && ezm0051a010Msg1List.length != 0)
						{
							workDataMap.put(PARAM_UPDATE_NAME,	ezm0051a010Msg1List[0].getString(EZM0051A010CBSMsg1List.USER_NM));			// データ更新者名
						}
						else
						{
							// ANK-4346-00-01 MOD START
//							// 更新者名が取得できなければ、更新者IDを設定する
//							workDataMap.put(PARAM_UPDATE_NAME,	JCNStringUtil.nullToBlank(result4.getString(ECNA0270001CBSMsg2List.UPDATE_ID)));			// データ更新者名
							// ユーザースキーマから更新者名が取得できなければ、レスポンスの更新者名を設定する
							workDataMap.put(PARAM_UPDATE_NAME,	JCNStringUtil.nullToBlank(result4.getString(ECNA0270001CBSMsg2List.UPDATE_NAME)));			// データ更新者名
							// ANK-4346-00-01 MOD END
						}
					}
					else
					{
						// ANK-4346-00-01 MOD START
//						workDataMap.put(PARAM_UPDATE_NAME,		JCNStrConst.S_BLANK);
						// ユーザースキーマから更新者名が取得できなければ、レスポンスの更新者名を設定する
						workDataMap.put(PARAM_UPDATE_NAME,	JCNStringUtil.nullToBlank(result4.getString(ECNA0270001CBSMsg2List.UPDATE_NAME)));			// データ更新者名
						// ANK-4346-00-01 MOD END

					}
					// ANK-4346-15-00 ADD START
					//課金参照API実行
					ecna0180001Result = getECNA0180001_map(handle, param, fixedText, result4);
					
					String errCode = ecna0180001Result.getString(ECNA0180001CBSMsg.ERR_CD);
					inMap.put(PARAM_ERR_CD, errCode);
					if(!ERR_CD_SEIJO.equals(errCode))
					{
						// エラー識別コードに "4":課金参照でのエラー を設定
						inMap.put(ERR_SKBT_CODE , ERR_SKBT_CD_4);
						// データ取得フラグを設定
						setNoData(inMap);
						// システムエラーを設定する
						param.setControlMapData(SCControlMapKeys.RETURN_CODE, errCode);
						param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
						return false;
					}
					
					// 課金参照の取得
					CAANMsg[] ecna0180001Msg1List = (CAANMsg[])ecna0180001Result.getCAANMsgList(ECNA0180001CBSMsg.ECNA0180001CBSMSG1LIST);
					if (ecna0180001Msg1List != null && ecna0180001Msg1List.length != 0)
					{
						// 課金額
						String rst_charge_amount = ecna0180001Msg1List[0].getString(ECNA0180001CBSMsg1List.CHARGE_AMOUNT);
						// 課金訂正情報を取得する
						CAANMsg[] ecna0180001Msg2List = ecna0180001Msg1List[0].getCAANMsgList(ECNA0180001CBSMsg1List.ECNA0180001CBSMSG2LIST);
						if(ecna0180001Msg2List != null && ecna0180001Msg2List.length > 0)
						{
							for(CAANMsg result5 : ecna0180001Msg2List)
							{
								
								if(CORRECTED_DIVISION_1.equals(result4.getString(ECNA0270001CBSMsg2List.AFTER_CORRECTED_DIVISION)))
								{
									workDataMap.put(PARAM_CHANGE_AFTER,		"0");	// 変更後値引額
								}
								else if(CORRECTED_DIVISION_2.equals(result4.getString(ECNA0270001CBSMsg2List.AFTER_CORRECTED_DIVISION)))
								{
									// IT1-2024-0000004 MOD START
									// 料金訂正履歴.値引額
//									String rslt_divount_amount = result5.getString(ECNA0180001CBSMsg2List.DISCOUNT_AMOUNT);
									String rslt_divount_amount = result4.getString(ECNA0270001CBSMsg2List.AFTER_DISCOUNT_AMOUNT);
									// IT1-2024-0000004 MOD END
									// 課金額と値引額がNULLまたは空ではない場合
									if(!JCNStringUtil.isNullBlank(rslt_divount_amount)  && !JCNStringUtil.isNullBlank(rst_charge_amount))
									{
										// 値引額
										int discount_amount = Integer.parseInt(rslt_divount_amount);
										// 課金額
										int charge_amount = Integer.parseInt(rst_charge_amount);
										// 課金額-値引額を設定
										workDataMap.put(PARAM_CHANGE_AFTER,		Integer.toString(charge_amount-discount_amount));	// 変更後値引額
									}
								}
							}
						}
						else
						{
							workDataMap.put(PARAM_CHANGE_AFTER,		JCNStrConst.S_BLANK);	// 変更後値引額
						}
						
						workDataMap.put(PARAM_CHANGE_BEFORE,	rst_charge_amount);	// 変更前値引額
					}
					else
					{
						workDataMap.put(PARAM_CHANGE_BEFORE,	JCNStrConst.S_BLANK);	// 変更前値引額
						workDataMap.put(PARAM_CHANGE_AFTER,		JCNStrConst.S_BLANK);	// 変更後値引額
					}
					// ANK-4346-15-00 ADD END
					// 契約一覧情報取得API実行
					ecna0170001Result = getECNA0170001_map(handle, param, fixedText, result4);
					
					// ANK-4346-15-00 MOD START
//					String errCode = ecna0170001Result.getString(ECNA0170001CBSMsg.ERR_CD);
					errCode = ecna0170001Result.getString(ECNA0170001CBSMsg.ERR_CD);
					// ANK-4346-15-00 MOD END
					inMap.put(PARAM_ERR_CD, errCode);
					if(!ERR_CD_SEIJO.equals(errCode))
					{
						// エラー識別コードに "3":契約一覧情報取得でのエラー を設定
						inMap.put(ERR_SKBT_CODE , ERR_SKBT_CD_3);
						// データ取得フラグを設定
						setNoData(inMap);
						// システムエラーを設定する
						param.setControlMapData(SCControlMapKeys.RETURN_CODE, errCode);
						param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
						return false;
					}
					
					// 契約一覧情報の取得
					CAANMsg[] ecna0170001Msg1List = (CAANMsg[])ecna0170001Result.getCAANMsgList(ECNA0170001CBSMsg.ECNA0170001CBSMSG1LIST);
					if (ecna0170001Msg1List != null && ecna0170001Msg1List.length != 0)
					{
						for(CAANMsg result3 : ecna0170001Msg1List)
						{
							workDataMap.put(PARAM_SERVICE_ID,				JCNStringUtil.nullToBlank(result3.getString(ECNA0170001CBSMsg1List.CONTRACTS_SERVICE_ID)));		// コンテンツサービスID
							workDataMap.put(PARAM_SERVICE_NAME,				JCNStringUtil.nullToBlank(result3.getString(ECNA0170001CBSMsg1List.SERVICE_NAME)));				// コンテンツサービス名称
							workDataMap.put(PARAM_CONTENTS_NAME,			JCNStringUtil.nullToBlank(result3.getString(ECNA0170001CBSMsg1List.CONTENTS_NAME)));			// コンテンツ名称
							if(JCNStrConst.CN0011_CONT_SVC_CD_050.equals(result3.getString(ECNA0170001CBSMsg1List.CONTRACTS_SERVICE_ID)))
							{
								// 取得したサービスコードの中にLaLaCallが存在する場合、契約付加情報リストを取得する
								if(!getLaLaCallTELNoList(handle, param, fixedText))
								{
									// API実行に失敗した場合は処理を終了する。
									return false;
								}
								// 契約付加情報リストの取得(LaLaCallの場合のみ取得)
								CAANMsg[] ecna0170001Msg4List = ecna0170001Msg1List[0].getCAANMsgList(ECNA0170001CBSMsg1List.ECNA0170001CBSMSG4LIST);
								if (ecna0170001Msg4List != null && ecna0170001Msg4List.length > 0)
								{
										CAANMsg ecna0170001Msg4ListMap = ecna0170001Msg4List[0];
										// 項目名
										String itemName = JCNStringUtil.nullToBlank(ecna0170001Msg4ListMap.getString(ECNA0170001CBSMsg4List.ITEM_NAME));
										// 設定値
										String value = ecna0170001Msg4ListMap.getString(ECNA0170001CBSMsg4List.VALUE);
										
										// LaLaCallの項目名が「月額基本料契約番号」の場合
										if("MONTHLY_CONTRACT_NO".equals(itemName))
										{
											// 契約番号からLaLaCall電話番号を取得する。
											workDataMap.put(LALACALL_NUMBER, serchResltLaLaCall.get(value));
										}
										else
										{
											workDataMap.put(LALACALL_NUMBER, ecna0170001Msg4ListMap.getString(ECNA0170001CBSMsg4List.VALUE));
										}
								}
								else
								{
									//  050電話番号
									workDataMap.put(LALACALL_NUMBER , JCNStrConst.S_BLANK);
								}
							}
						}
					}
				rrkRsltRecord.add(workDataMap);
				}
				
			}
			else
			{
				// データ取得フラグを設定
				setNoData(inMap);
				return false;
			}

		}
		
		inMap.put("contract_histories",rrkRsltRecord);
		return true;
	}
	
	/**
	 * 取得結果０件設定処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param workMap (I) 作業用マップ
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private void setNoData(HashMap<String, Object> inMap) throws Throwable
	{
		
		// データ取得フラグを設定
		inMap.put(SEARCH_ERR_FLG , JPCModelConstant.SEARCH_ERR_FLG_ZERO );	// 検索エラーフラグ(0件) 
		inMap.put(TOTAL_COUNT, "0");										// 総件数
		inMap.put(TOTAL_PAGE,"0");											// 総ページ番号
		
	}
	/**
	 * 最大件数越え設定処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param workMap (I) 作業用マップ
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private void setMaxData(HashMap<String, Object> inMap,CAANMsg ecna0280001Msg1ListMap) throws Throwable
	{
		
		// データ取得フラグを設定
		inMap.put(SEARCH_ERR_FLG , 		JPCModelConstant.SEARCH_ERR_FLG_OVERMAX );													// 検索エラーフラグ(最大件数以上) 
		inMap.put(TOTAL_COUNT, 			nullOrBlankToZero(ecna0280001Msg1ListMap.getString(ECNA0280001CBSMsg1List.TOTAL)));			// 総件数
		inMap.put(TOTAL_PAGE,			nullOrBlankToZero(ecna0280001Msg1ListMap.getString(ECNA0280001CBSMsg1List.TOTAL_PAGE)));	// 総ページ番号
		
	}
	/**
	 * CNIFE051_料金訂正履歴参照呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param workMap (I) 作業用マップ
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private CAANMsg getECNA0270001_map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, HashMap<String, Object> workMap) throws Throwable
	{
		
		HashMap inMap = null;
		inMap = (HashMap)param.getData(fixedText);

		/* ◇上りマッピング処理 */
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		Object[][] paramMap = editInMsgECNA0270001(inMap);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// サービスI/F実行
		CAANMsg ecna0270001Msg = callSC(handle, scCall, param, fixedText, paramMap);
		
		return ecna0270001Msg;
	}
	
	/**
	 * CNIFE047_契約一覧情報取得呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private CAANMsg getECNA0170001_map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, CAANMsg result) throws Throwable
	{
		String contractNo = JCNStringUtil.nullToBlank(result.getString(ECNA0280001CBSMsg2List.CONTRACT_NO));
		
		HashMap inMap = null;
		inMap = (HashMap)param.getData(fixedText);

		/* ◇上りマッピング処理 */
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		Object[][] paramMap = editInMsgECNA0170001(inMap, contractNo);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// サービスI/F実行
		CAANMsg ecna0170001Msg = callSC(handle, scCall, param, fixedText, paramMap);
		
		return ecna0170001Msg;
	}
	/**
	 * ユーザースキーマ一意照会呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private CAANMsg getEZM0051A010_map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, String userId) throws Throwable
	{
		
		HashMap inMap = null;
		inMap = (HashMap)param.getData(fixedText);

		/* ◇上りマッピング処理 */
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		Object[][] paramMap = editInMsgEZM0051A0101(inMap, userId);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// サービスI/F実行
		CAANMsg ezm0051a010Msg = callSC(handle, scCall, param, fixedText, paramMap);
		
		return ezm0051a010Msg;
	}

	/**
	 * メッセージ共通部の設定。<br>
	 * <br>
	 * @param param (I) 業務データ取得用I/F
	 * @param paramMap (O) メッセージ共通部
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private void setCommonParamMap(IRequestParameterReadOnly 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));

	}
	
	/**
	 * CNIFE047_契約一覧情報取得APIの実行判定処理。<br>
	 * @return 実行判定結果
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private boolean jikkouJudge(CAANMsg SanshoResultMap ,HashMap inMap) throws Exception
	{
		// エラーコード
		String err_cd ;
		
		// 契約変更履歴参照の場合
		if(KK_RK_SNSHO.equals(radio_bottan))
		{
			// 契約異動変更履歴参照の取得
			CAANMsg[] ecna0280001Msg1List = (CAANMsg[])SanshoResultMap.getCAANMsgList(ECNA0280001CBSMsg.ECNA0280001CBSMSG1LIST);
			err_cd = ecna0280001Msg1List[0].getString(ECNA0280001CBSMsg1List.ERR_CD);
			if(ERR_CD_SEIJO.equals(err_cd) )
			{
				return true;
			}
			else
			{
				// エラー識別コードに "1":契約異動変更履歴参照でのエラー を設定
				inMap.put(ERR_SKBT_CODE , ERR_SKBT_CD_1);
				// データ取得フラグを設定
				inMap.put(SEARCH_ERR_FLG , JPCModelConstant.SEARCH_ERR_FLG_ZERO );
				inMap.put(TOTAL_COUNT, "0");				// 総件数
				inMap.put(TOTAL_PAGE,"0");					// 総ページ番号
				return false;
			}
		}
		// 料金訂正履歴参照の場合
		else
		{
			// 料金訂正履歴参照の取得
			CAANMsg[] ecna0270001Msg1List = (CAANMsg[])SanshoResultMap.getCAANMsgList(ECNA0270001CBSMsg.ECNA0270001CBSMSG1LIST);
			err_cd = ecna0270001Msg1List[0].getString(ECNA0270001CBSMsg1List.ERR_CD);
			if(ERR_CD_SEIJO.equals(err_cd) )
			{
				return true;
			}
			else
			{
				// エラー識別コードに "2":料金訂正履歴参照でのエラー を設定
				inMap.put(ERR_SKBT_CODE , ERR_SKBT_CD_2);
				// データ取得フラグを設定
				inMap.put(SEARCH_ERR_FLG , JPCModelConstant.SEARCH_ERR_FLG_ZERO );
				inMap.put(TOTAL_COUNT, "0");				// 総件数
				inMap.put(TOTAL_PAGE,"0");					// 総ページ番号
				return false;
			}
		}
	}
	
	/**
	 * APIのエラーコードを取得し、正常終了か判定する<br>
	 * <br>
	 * @param param (I) 業務データ取得用I/F
	 * @param template (O) サービスインターフェイス
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private void getErrCode(IRequestParameterReadOnly param, CAANMsg template)
	throws RequestParameterException
	{
		// オペレータ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);

	}	
	/**
	 * SC(サービスインターフェイス）を呼び出します。
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param dataMapKey パラメータキー
	 * @param mappingData マッピングデータ
	 * @return サービスインターフェイス実行結果
	 * @throws Throwable 例外が発生した場合
	 */
	private CAANMsg callSC(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String dataMapKey,
							Object[][] mappingData)
	throws Throwable
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		Object RETURN_CODE = result.get(JCMConstants.RET_CD_INT_KEY);
		
		editErrorInfoCom(param, templates, (Integer)RETURN_CODE, dataMapKey);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		
		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		// SCCallExceptionはスローしない
		
		return msg;
	}
	/**
	 * 共通項目のメッセージを作成します。
	 * @param param リクエストパラメータ
	 * @param mappingData マッピングデータ
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param, Object[][] mappingData)
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文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));
		
		String svcIf = (String)mappingData[0][1];
		
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		
		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if (mappingData[i][1] instanceof CAANMsg[])
			{
				template.set((String)mappingData[i][0], (CAANMsg[])mappingData[i][1]);
			}
			else
			{
				if ("".equals(mappingData[i][1]))
				{
					template.setNull((String)mappingData[i][0]);
				}
				else
				{
					template.set((String)mappingData[i][0], mappingData[i][1]);
				}
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		
		templates[0] = template;
		
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	/**
	 * エラー情報を取得します。
	 * @param param リクエストパラメータ
	 * @param templates CAANMsgクラス
	 * @param errorCode リターンコード
	 * @param dataMapKey パラメータキー
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param, CAANMsg[] templates, int errorCode, String dataMapKey)
	throws RequestParameterException
	{
		CAANMsg template = templates[0];
		
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (0 != errorCode)
		{
			templateStatus = 9000;
		}
		
		if (null == JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)))
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		if (null == obj)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		// ユーザデータ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(dataMapKey);
		
		HashMap map = template.getHashMap();
		Iterator it = map.keySet().iterator();
		while (it.hasNext())
		{
			String key = (String)it.next();
			Object value = map.get(key);
			if (value instanceof HashMap[])
			{
				HashMap[] childMapList = (HashMap[])value;
				for (HashMap childMap : childMapList)
				{
					Iterator childIt = childMap.keySet().iterator();
					while (childIt.hasNext())
					{
						String childKey = (String)childIt.next();
						if (childKey.endsWith(ERRITEM_SUFFIX))
						{
							int keyIdx = childKey.lastIndexOf(ERRITEM_SUFFIX);
							if (inMap.containsKey(childKey.substring(0, keyIdx)))
							{
								inMap.put(childKey, childMap.get(childKey));
							}
						}
					}
				}
			}
			else
			{
				if (key.endsWith(ERRITEM_SUFFIX))
				{
					int keyIdx = key.lastIndexOf(ERRITEM_SUFFIX);
					if (inMap.containsKey(key.substring(0, keyIdx)))
					{
						inMap.put(key, map.get(key));
					}
				}
			}
		}
		
		return param;
	}
	
	/**
	 * NULLまたは空の場合、0を返却
	 * @param param リクエストパラメータ
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private String nullOrBlankToZero(String total)
	{
		if(JCNStringUtil.isNullBlank(total))
		{
			return "0";
		}
		return total;
	}
	
	/***
	 * SYSIDに紐づくLaLaCall契約情報を取得します。
	 * 何らかのエラーにより取得に失敗した場合、falseを返却します。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	private boolean getLaLaCallTELNoList(
			SessionHandle handle
			, IRequestParameterReadWrite param
			, String fixedText
		) throws Throwable {
		
		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// CCパラメータ
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(fixedText);
		
		String errCd = JCNStrConst.S_BLANK;
		
		/**********************/
		/** 契約一覧情報取得 **/
		/**********************/
		Object[][] ecna0170001inLaLaCall =
		{
			  {ECNA0170001CBSMsg.TEMPLATEID, TEMPLATEID_ECNA0170001}				// テンプレートＩＤ
			, {ECNA0170001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}				// 機能コード
			, {ECNA0170001CBSMsg.SYSID, ccMsg.get("sysid")}							// ＳＹＳＩＤ
			, {ECNA0170001CBSMsg.SERVICE_ID, JCNStrConst.CN0011_CONT_SVC_CD_050}	// コンテンツサービスＩＤ
			, {ECNA0170001CBSMsg.RETURN_CONTRACT, "0"}								// コンテンツ契約情報要否
			, {ECNA0170001CBSMsg.RETURN_CHARGE, "0"}								// 直近課金情報要否
			, {ECNA0170001CBSMsg.RETURN_CONTRACT_ADDS, "1"}							// 契約付加情報要否
		};
		
		// サービスIF実行
		// 契約一覧情報取得明細
		CAANMsg ecna0170001MsgLaLaCall = callSC(handle, scCall, param, fixedText, ecna0170001inLaLaCall);
		
		// =====実行結果取得=====
		// API実行結果の取得
		errCd = ecna0170001MsgLaLaCall.getString(ECNA0170001CBSMsg.ERR_CD);
		// リターンコードを設定
		ccMsg.put(PARAM_ERR_CD , errCd);
		// リターンコードが正常終了以外の場合、後続処理を実施しない。
		if ( !ERR_CD_SEIJO.equals(errCd) )
		{
			ccMsg.put(ERR_SKBT_CODE , ERR_SKBT_CD_3);
			return false;
		}
		
		// =====取得結果退避=====
		// 契約一覧情報取得 コンテンツ情報リスト明細
		CAANMsg[] ecna0170001Msg1ListLaLaCall = ecna0170001MsgLaLaCall.getCAANMsgList(ECNA0170001CBSMsg.ECNA0170001CBSMSG1LIST);
		
		// 結果が取得できていれば取得する。
		if (ecna0170001Msg1ListLaLaCall != null && ecna0170001Msg1ListLaLaCall.length > 0)
		{
			for(CAANMsg ecna0170001Msg1ListLaLaCallMap  : ecna0170001Msg1ListLaLaCall)
			{
				// 契約一覧情報取得 契約付加情報リスト明細
				CAANMsg[] ecna0170001Msg4ListLaLaCall = ecna0170001Msg1ListLaLaCallMap.getCAANMsgList(ECNA0170001CBSMsg1List.ECNA0170001CBSMSG4LIST);
				
				if (ecna0170001Msg4ListLaLaCall != null && ecna0170001Msg4ListLaLaCall.length > 0)
				{
					CAANMsg ecna0170001Msg4ListLaLaCallMap = ecna0170001Msg4ListLaLaCall[0];
					
					// 契約番号
					String contractNo = JCNStringUtil.nullToBlank(ecna0170001Msg1ListLaLaCallMap.getString(ECNA0170001CBSMsg1List.CONTRACTS_CONTRACT_NO));
					// 項目名
					String itemName = JCNStringUtil.nullToBlank(ecna0170001Msg4ListLaLaCallMap.getString(ECNA0170001CBSMsg4List.ITEM_NAME));
					// 設定値
					String value = ecna0170001Msg4ListLaLaCallMap.getString(ECNA0170001CBSMsg4List.VALUE);
					
					// LaLaCallの項目名が「電話番号」の場合
					if("TELEPHONE_NO".equals(itemName))
					{
						// 契約番号と電話番号を退避する。
						serchResltLaLaCall.put(contractNo, value);
					}
				}
			}
		}
		return true;
	}
	
	// ANK-4346-15-00 ADD START
	/**
	 * CNIFE047_契約一覧情報取得呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private CAANMsg getECNA0180001_map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, CAANMsg result) throws Throwable
	{
		String contractNo = JCNStringUtil.nullToBlank(result.getString(ECNA0280001CBSMsg2List.CONTRACT_NO));
		
		HashMap inMap = null;
		inMap = (HashMap)param.getData(fixedText);

		/* ◇上りマッピング処理 */
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		Object[][] paramMap = editInMsgECNA0180001(inMap, result, param,fixedText);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// サービスI/F実行
		CAANMsg ecna0180001Msg = callSC(handle, scCall, param, fixedText, paramMap);
		
		return ecna0180001Msg;
	}
	
	/**
	 * CAANMsgに必要なデータをマッピングします。<br>
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param fixedText ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private Object[][] editInMsgECNA0180001( HashMap inMap, CAANMsg result,IRequestParameterReadWrite param,String fixedText)
	throws RequestParameterException
	{
		
		// CCパラメータ
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(fixedText);

		Object[][] ecna0180001In = {
				{ECNA0180001CBSMsg.TEMPLATEID, 							TEMPLATEID_ECNA0180001},
				{ECNA0180001CBSMsg.FUNC_CODE, 							JPCModelConstant.FUNC_CD_1},
				{ECNA0180001CBSMsg.KEY_SYSID, 								ccMsg.get("sysid")},										// SYSID
				{ECNA0180001CBSMsg.KEY_CONTRACT_NO, 					result.getString(ECNA0270001CBSMsg2List.CONTRACT_NO) },		// 契約番号
				{ECNA0180001CBSMsg.KEY_TARGET_DATE, 					result.getString(ECNA0270001CBSMsg2List.TARGET_DATE)  },	// 対象年月
				{ECNA0180001CBSMsg.KEY_SORT, 							SORT },														// ソート
		};
		return ecna0180001In;
	}
	// ANK-4346-15-00 ADD END

}
