/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKKikiIchiranKishuChgCC
*	ソースファイル名：JKKKikiIchiranKishuChgCC.java
*	作成者			：FJ
*	日付			：2012年06月09日
*＜機能概要＞
*	機器一覧機種変更処理の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/06/09	FJ			新規作成
*	v4.01.00	2012/08/08	FJ）古田	【ANK-0398-00-00】住所管理に伴う「例外登録」の管理追加対応
*	v4.02.00	2013/02/05	FJ）鳩本	【IT1-2012-0000185】障害対応
*   v5.00.00    2013/02/23  FJ) 辛      【ANK-1439-00-00】機器の「契約日」対応
*	v4.03.00	2013/02/26	FJ）野口	【ST3-2013-0000040】住所最下層チェックWA対応
*	v5.01.00	2013/03/06	FJ）古田	【ANK-1438-00-00】
*	v5.02.00	2013/03/14	FJ）古田	【IT1-2013-0000466】回線データの排他エラー
*	v5.03.00	2013/05/29	FJ）鳩本	【IT1-2013-0001246】障害対応
*   v5.04.00	2013/09/05	FJ）辛   	【OM-2013-0001562】障害対応
*   v5.05.00	2013/09/13	FJ）鳩本	【OM-2013-0002045】障害対応
*   v9.00.00	2014/07/08	FJ）田原	【OM-2013-0002198】障害対応
*   v10.00.02   2014/08/13  FJ) 高井    【ANK-2141-00-00】対応
*   v27.00.00   2016/09/15  FJ) 黒田    【ANK-2985-00-00】消費者保護STEP3対応
*   v39.00.00   2018/09/18  FJ) 謝      【ANK-3488-00-00】４KSTB（ACASチップ）導入対応
*   v61.00.00	2022/01/31	FJ) 永江	【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応
***********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
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.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.util.JPCFomatString;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0171A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0171A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg1List;


/**
 * 機器一覧機種変更処理を行います。<p>
 * <BR>
 * @author 富士通
 */
public class JKKKikiIchiranKishuChgCC extends AbstractCommonComponent
{
	// 入力インターフェース(JKKKikiIchiranKishuChgCC)
	/** 入力IF：機能コード */
	public static final String IN_FUNC_CODE                   = "func_code";
	/** 入力IF：チェック画面ＩＤ */
	public static final String IN_CHECK_SCRN_ID               = "check_scrn_id";
	/** 入力IF：サービス契約データ */
	public static final String IN_SVC_KEI_DATA                = "svc_kei_data";
	/** 入力IF：機器提供サービス契約データ */
	public static final String IN_KKTK_SVC_KEI_DATA           = "kktk_svc_kei_data";
	/** 入力IF：サービス契約番号 */
	public static final String IN_SVC_KEI_NO                  = "svc_kei_no";
	/** 入力IF：異動区分 */
	public static final String IN_IDO_DIV                     = "ido_div";
	/** 入力IF：機器送付先名 */
	public static final String IN_KIKI_SOHUS_NM               = "kiki_sohus_nm";
	/** 入力IF：機器送付先カナ名 */
	public static final String IN_KIKI_SOHUS_KANA             = "kiki_sohus_kana";
	/** 入力IF：機器送付先住所コード */
	public static final String IN_KIKI_SOHUS_AD_CD            = "kiki_sohus_ad_cd";
	/** 入力IF：機器送付先郵便番号 */
	public static final String IN_KIKI_SOHUS_PCD              = "kiki_sohus_pcd";
	/** 入力IF：機器送付先都道府県名 */
	public static final String IN_KIKI_SOHUS_STATE_NM         = "kiki_sohus_state_nm";
	/** 入力IF：機器送付先市区町村名 */
	public static final String IN_KIKI_SOHUS_CITY_NM          = "kiki_sohus_city_nm";
	/** 入力IF：機器送付先大字通称名 */
	public static final String IN_KIKI_SOHUS_OAZTSU_NM        = "kiki_sohus_oaztsu_nm";
	/** 入力IF：機器送付先字丁目名 */
	public static final String IN_KIKI_SOHUS_AZCHO_NM         = "kiki_sohus_azcho_nm";
	/** 入力IF：機器送付先番地号 */
	public static final String IN_KIKI_SOHUS_BNCHIGO          = "kiki_sohus_bnchigo";
	/** 入力IF：機器送付先住所補記・建物名 */
	public static final String IN_KIKI_SOHUS_ADRTTM           = "kiki_sohus_adrttm";
	/** 入力IF：機器送付先住所補記・部屋番号 */
	public static final String IN_KIKI_SOHUS_ADRRM            = "kiki_sohus_adrrm";
	/** 入力IF：機器送付先電話番号 */
	public static final String IN_KIKI_SOHUS_TELNO            = "kiki_sohus_telno";
	/** 入力IF：配送依頼指定年月日 */
	public static final String IN_HAISO_REQ_SHITEI_YMD        = "haiso_req_shitei_ymd";
	/** 入力IF：機器型式コード */
	public static final String IN_TAKNKIKI_MODEL_CD           = "taknkiki_model_cd";
	/** 入力IF：基準日 */
	public static final String IN_STD_YMD                     = "std_ymd";
	/** 入力IF：配送ステータス */
	public static final String IN_HAISO_STAT                  = "haiso_stat";
	/** 入力IF：配送区分コード */
	public static final String IN_HAISO_DIV_CD                = "haiso_div_cd";
	/** 入力IF：販売種別コード */
	public static final String IN_HAMBAI_SBT                  = "hambai_sbt";
	/** 入力IF：管理場所コード */
	public static final String IN_KEY_KNRI_PLC_CD             = "key_knri_plc_cd";
	/** 入力IF：機器提供種別コード */
	public static final String IN_KKTK_SBT_CD                 = "kktk_sbt_cd";
	/** 入力IF：更新年月日時分秒（サービス契約） */
	public static final String IN_UPD_DTM_SVC_KEI             = "upd_dtm_svc_kei";
	/** 入力IF：機器提供サービス契約番号 */
	public static final String IN_KKTK_SVC_KEI_NO             = "kktk_svc_kei_no";
	/** 入力IF：配送方法コード */
	public static final String IN_HAISO_WAY_CD                = "haiso_way_cd";
	/** 入力IF：機器製造番号 */
	public static final String IN_KIKI_SEIZO_NO               = "kiki_seizo_no";
	/** 入力IF：機器送料有無 */
	public static final String IN_KIKI_SORYO_UM               = "kiki_soryo_um";
	/** 入力IF：機器付加情報コード */
	public static final String IN_KIKI_HUKA_INFO_CD           = "kiki_huka_info_cd";
	/** 入力IF：機器送付先住所手動入力フラグ */
	public static final String IN_KIKI_SHS_AD_MAN_INPUT_FLG   = "kiki_shs_ad_man_input_flg";
	/** 入力IF：一覧インデックス */
	public static final String IN_ICHIRANINDEX                = "ichiranIndex";
	/** 入力IF：返却日 */
	public static final String IN_HENKYAKU_YMD                = "henkyaku_ymd";
	/** 入力IF：ＯＰＭＳルータ種別コード */
	public static final String IN_OPMS_ROUTER_KIND_CD         = "opms_router_kind_cd";
	/** 入力IF：工事会社コード */
	public static final String IN_KOJI_COMP_CD                = "koji_comp_cd";
	/** 入力IF：工事案件番号 */
	public static final String IN_KOJIAK_NO                   = "kojiak_no";
	/** 入力IF：配送作成済フラグ */
	public static final String IN_HAISO_SAKSEI_ZUMI_FLG       = "haiso_saksei_zumi_flg";
	/** 入力IF：ＳＴＢ機器提供サービスコード */
	public static final String IN_STB_KKTK_SVC_CD             = "stb_kktk_svc_cd";
	/** 入力IF：ＢＣＡＳ機器提供サービスコード */
	public static final String IN_BCAS_KKTK_SVC_CD            = "bcas_kktk_svc_cd";
	/** 入力IF：ＣＣＡＳ機器提供サービスコード */
	public static final String IN_CCAS_KKTK_SVC_CD            = "ccas_kktk_svc_cd";
	/** 入力IF：ＳＴＢ宅内機器種別コード */
	public static final String IN_TK_SBT_CD_STB               = "tk_sbt_cd_stb";
	/** 入力IF：ＣＣＡＳ宅内機器種別コード */
	public static final String IN_TK_SBT_CD_CCAS              = "tk_sbt_cd_ccas";
	/** 入力IF：ＢＣＡＳ宅内機器種別コード */
	public static final String IN_TK_SBT_CD_BCAS              = "tk_sbt_cd_bcas";
	/** 入力IF：宅内機器種別コード */
	public static final String IN_TK_SBT_CD                   = "tk_sbt_cd";
	/** 入力IF：ＢＢＲ機器提供サービスコード */
	public static final String IN_BBR_KKTK_SVC_CD             = "bbr_kktk_svc_cd";
	/** 入力IF：ＯＰＭＳルータ種別ベーシックルータ */
	public static final String IN_OPMS_ROUT_SBT_BASIC         = "opms_rout_sbt_basic";
	/** 入力IF：管理場所識別コード */
	public static final String IN_KRIPLACE_SKCD               = "kriplace_skcd";

	/** 入力IF：異動理由明細 */
	public static final String IN_LIST_EKK1091D010CBSMSG1     = "EKK1091D010CBSMsg1List";
	/** 入力IF：異動理由明細.異動理由コード */
	public static final String IN_IDO_RSN_CD                  = "ido_rsn_cd";
// ANK-3488-00-00 ADD START
	/** 入力IF：提供方式契約番号 */
	public static final String IN_TK_HOSHIKI_KEI_NO           = "tk_hoshiki_kei_no";
	/** 入力IF：宅内機器型式コード（ＶＯＮＵ） */
	public static final String IN_TAKNKIKI_MODEL_CD_VONU      = "taknkiki_model_cd_vonu";
// ANK-3488-00-00 ADD END
	
	/* ++++++++++ v4.03.00 追加開始 ++++++++++ */
	/** 住所最下層チェックレベル（機器送付先） */
	public static final String KIKI_SOHUS_AD_CHK_LV = "kiki_sohus_ad_chk_lv";
	/* ++++++++++ v4.03.00 追加終了 ++++++++++ */
	
	/* ++++++++++ v10.00.02 追加開始 ++++++++++ */
	/** 編集交換希望日聞取有無 */
	public static final String IN_KOKAN_KIBOBI_KKTR_UM = "kokan_kibobi_kktr_um";
	/** 編集交換希望日 */
	public static final String IN_KOKAN_KIBOBI = "kokan_kibobi";
	/* ++++++++++ v10.00.02 追加終了 ++++++++++ */
	
	// 出力インターフェース(JKKKikiIchiranKishuChgCC)
	/** 出力IF：倉庫棚コード */
	public static final String OUT_SOKO_TANA_CD         = "soko_tana_cd";
	/** 出力IF：倉庫棚名称 */ 
	public static final String OUT_SOKO_TANA_NM         = "soko_tana_nm";
	/** 出力IF：宅内機器型式名 */
	public static final String OUT_TAKNKIKI_MODEL_NM    = "taknkiki_model_nm";
	/** 出力IF：機器提供サービコード */
	public static final String OUT_KKTK_SVC_CD          = "kktk_svc_cd";
	/** 出力IF：機器提供サービコード名 */ 
	public static final String OUT_KKTK_SVC_NM          = "kktk_svc_nm";
// ANK-2985-00-00 ADD START
	/** 出力IF：HDD容量コード */
	public static final String OUT_HDD_CAPA_CD          = "hdd_capa_cd";
	/** 出力IF：異動区分*/ 
	public static final String OUT_IDO_DIV              = "ido_div";
// ANK-2985-00-00 ADD END

	/** 機能コード（チェック＆登録） */
	private static final String FUNC_CODE_1 = "1";
	/** 機能コード（チェックのみ） */
	private static final String FUNC_CODE_2 = "2";
	
	// temporaryData用
	/** temporaryData：サービス契約一意照会情報(変更前) */
	private static final String TMP_KK_T_SVC_KEI           = "TEMP_KK_T_SVC_KEI";
	/** temporaryData：機器提供サービス契約一意照会情報(変更前) */
	private static final String TMP_KK_T_KKTK_SVC_KEI      = "TEMP_KK_T_KKTK_SVC_KEI";
	/** temporaryData：宅内機器型式一意照会情報(変更前) */
	private static final String TMP_TAKNKIKI_MODEL_BF      = "TEMP_ZM_M_TAKNKIKI_MODEL";
	/** temporaryData：宅内機器型式一意照会情報(変更後) */
	private static final String TMP_TAKNKIKI_MODEL_AF      = "TEMP_ZM_M_TAKNKIKI_MODEL_AF";
	/** temporaryData：料金コース情報で取得した情報(変更後) */
	private static final String TMP_PCRS_DATA_AF           = "TEMP_PCRS_DATA_AF";
	/** temporaryData：返却値情報 */
	private static final String TMP_OUTPUT                 = "TEMP_OUTPUT";
	/** temporaryData：最終更新年月日時分秒 */
	private static final String TMP_END_UPD_DATE_TIME      = "最終更新年月日時分秒";
	/** temporaryData：機器提供サービス契約番号 */
	private static final String TMP_KKTK_SVC_KEI_NO_NEW    = "kktk_svc_kei_no_new";
	/** temporaryData：機器変更番号 */
	private static final String TMP_KIKI_CHG_NO_NEW        = "kiki_chg_no_new";
	/** temporaryData：料金コース情報．機器提供サービスコード */
	private static final String PCRS_KKTK_SVC_CD           = "kktk_svc_cd";
	/** temporaryData：料金コース情報．機器提供サービスコード名 */
	private static final String PCRS_KKTK_SVC_NM           = "kktk_svc_nm";
	
	// エラーチェック
	/** エラーフラグ */
	private static final String ERR_FLG      = "err_flg";
	/** エラーフラグ（エラー）*/
	private static final String ERR_FLG_ERR  = "E";
	/** メッセージリスト */
	private static final String MESSAGE_LIST = "message_list";
	
	// 呼び出すＣＣ
	/** 機器提供サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0341A010 = "EKK0341A010";
	/** 進捗登録 */
	private static final String TEMPLATE_ID_EKK1091D010 = "EKK1091D010";
	/** 宅内機器型式一意照会 */
	private static final String TEMPLATE_ID_EZM0411A010 = "EZM0411A010";
	/** サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	/** コード名称管理一意照会 */
	private static final String TEMPLATE_ID_EZM0171A010 = "EZM0171A010";
	/** コード名称管理一意照会用のコード種別：有無 */
	private static final String CD_SBT_CD_00002 = "CD00002";
	
	/** 機器一覧機器登録部品CC（機器登録） */
	private static final String JKK_KIKIICHIRAN_KKCREATE_CC   = "JKKKikiIchiranKkCreateCC";
	/** 機器一覧解約キャンセルCC（解約キャンセル） */
	private static final String JKK_KIKIICHIRAN_KAIYAKUCAN_CC = "JKKKikiIchiranCancelCC";
	
	/** 機器提供サービス契約情報サーバーチェックCCキー */
	private static final String KIKI_SERVERCHKCC_KEY = "JKKKikiInfoServerChkCC";
	/** 機器変更CCキー */
	private static final String KIKI_CHGCC_KEY = "JKKKikiChgCC";
	/** 工事CC連携用データ格納キー */
	private static final String KOJI_RENKEI_MAP_KEY = "kojifixtext";
	/** サービス契約の更新タイムスタンプ格納キー */
	private static final String KK_COM_SVC_UP_DTM = "KK_COM_SVC_UP_DTM";
	
	/* ++++++++++ v4.02.00 追加開始 ++++++++++ */
	/** 機器登録CC内で使用する異動登録時の更新タイムスタンプ格納キー */
	private static final String KK_COM_IDO_UP_DTM = "KK_COM_IDO_UP_DTM";
	/* ++++++++++ v4.02.00 追加完了 ++++++++++ */
	
	/** 作業領域より取得する名称 */
	private static final String WORK_TEMPLATE_ID_EKK0341D010 = "EKK0341D010WORK";
	
	/** 機器一覧画面ID（チェック実行抑止で使用） */
	private static final String SCRN_ID_KKW033 = "KKW033";
	
	/* ++++++++++ v5.03.00 修正開始 ++++++++++ */
	/** 進捗ステータス 機種変更申込受付 */
//	private static final String PRG_STAT_3502 = "3502";
	private static final String PRG_STAT_3501 = "3501";
	/* ++++++++++ v5.03.00 修正完了 ++++++++++ */
	
	/** サービス契約ステータス */
	private static final String SVC_KEI_STAT_010 = "010";
	/** 機器提供種別コード：買取 */
	private static final String KKT_SBT_CD_PURCHASE = "01";
	/** 機器提供種別コード：レンタル */
	private static final String KKT_SBT_CD_RENTAL = "02";
	/** 配送ステータス：出荷済 */
	private static final String HAISO_STAT_SHUKA_ZUMI = "003";
	/* ++++++++++ v5.05.00 追加開始 ++++++++++ */
	/** 配送ステータス：完了済 */
	private static final String HAISO_STAT_KANRYO_ZUMI = "004";
	/* ++++++++++ v5.05.00 追加完了 ++++++++++ */
	/** 配送区分：直送 */
	private static final String HAISO_DIV_TYOKUSO = "00";
	/** ルータ事務手数料：有 */
	private static final String ROUTER_JIMU_ARI = "1";
	
	/** 進捗特記事項_連結文字 */
	private static final String PRG_STAT_DELIMITA = "　";
	/** 進捗特記事項_変更前 */
	private static final String PRG_STAT_BEFORE = "(変更前)";
	/** 進捗特記事項_変更後 */
	private static final String PRG_STAT_AFTER = "(変更後)";
	/** 進捗特記事項_型番 */
	private static final String PRG_STAT_KIKI_MODEL_CD = "型番：";
	/** 進捗特記事項_通番 */
	private static final String PRG_STAT_KIKI_CHG_NO = "通番：";
	/** 進捗特記事項_送付手数料 */
	private static final String PRG_STAT_SORYO_UM = "、ルータ送付手数料：";
	/** 進捗特記事項_出荷指定日 */
	private static final String PRG_STAT_SHUKA_SITEI = "機器出荷指定日：(変更前)";
	/** 進捗特記事項_機器送付情報 */
	private static final String PRG_STAT_SOFU_INFO = "機器送付情報(変更前)";
	/** 進捗特記事項_郵便番号 */
	private static final String PRG_STAT_POST = "郵便番号：";
	/** 進捗特記事項_住所コード */
	private static final String PRG_STAT_ADDRESS_CD = "住所コード：";
	/** 進捗特記事項_住所 */
	private static final String PRG_STAT_ADDRESS = "住所：";
	/** 進捗特記事項_電話番号 */
	private static final String PRG_STAT_TEL = "電話番号：";
	/** 進捗特記事項_送付先名 */
	private static final String PRG_STAT_NAME = "送付先名：";
	/** 進捗特記事項_送付先名(カナ) */
	private static final String PRG_STAT_KANA = "送付先名(カナ)：";
	
	/** 機器送付情報比較項目：郵便番号 */
	private static final String[][] PRG_STAT_CHECK_POST = {
		{EKK0341A010CBSMsg1List.KIKI_SOHUS_PCD,       IN_KIKI_SOHUS_PCD}
	};
	/** 機器送付情報比較項目：住所コード */
	private static final String[][] PRG_STAT_CHECK_AD_CD = {
		{EKK0341A010CBSMsg1List.KIKI_SOHUS_AD_CD,     IN_KIKI_SOHUS_AD_CD}
	};
	/** 機器送付情報比較項目：住所 */
	private static final String[][] PRG_STAT_CHECK_ADDRESS = {
		{EKK0341A010CBSMsg1List.KIKI_SOHUS_STATE_NM,  IN_KIKI_SOHUS_STATE_NM},
		{EKK0341A010CBSMsg1List.KIKI_SOHUS_CITY_NM,   IN_KIKI_SOHUS_CITY_NM},
		{EKK0341A010CBSMsg1List.KIKI_SOHUS_OAZTSU_NM, IN_KIKI_SOHUS_OAZTSU_NM },
		{EKK0341A010CBSMsg1List.KIKI_SOHUS_AZCHO_NM,  IN_KIKI_SOHUS_AZCHO_NM},
		{EKK0341A010CBSMsg1List.KIKI_SOHUS_BNCHIGO,   IN_KIKI_SOHUS_BNCHIGO},
		{EKK0341A010CBSMsg1List.KIKI_SOHUS_ADRTTM,    IN_KIKI_SOHUS_ADRTTM},
		{EKK0341A010CBSMsg1List.KIKI_SOHUS_ADRRM,     IN_KIKI_SOHUS_ADRRM},
	};
	/** 機器送付情報比較項目：電話番号 */
	private static final String[][] PRG_STAT_CHECK_TEL = {
		{EKK0341A010CBSMsg1List.KIKI_SOHUS_TELNO,     IN_KIKI_SOHUS_TELNO},
	};
	/** 機器送付情報比較項目：送付先名 */
	private static final String[][] PRG_STAT_CHECK_NAME = {
		{EKK0341A010CBSMsg1List.KIKI_SOHUS_NM,        IN_KIKI_SOHUS_NM},
	};
	/** 機器送付情報比較項目：送付先名(カナ) */
	private static final String[][] PRG_STAT_CHECK_KANA = {
		{EKK0341A010CBSMsg1List.KIKI_SOHUS_KANA,      IN_KIKI_SOHUS_KANA},
	};
	
	/* ++++++++++ v4.03.00 追加開始 ++++++++++ */
	/** 住所最下層チェック用マップKEY */
	public static final String AD_CHK_ERR_KEY = "kiki_sohus_ad_chk_lv_err";
	/* ++++++++++ v4.03.00 追加終了 ++++++++++ */
	
	/* ++++++++++ v5.02.00 変更開始 ++++++++++ */
	/** 入力IF：更新年月日時分秒（サービス契約） */
	public static final String IN_UPD_DTM_SVC_KEI_KAISEN = "upd_dtm_svc_kei_kaisen_ucwk";
	/* ++++++++++ v5.02.00 変更完了 ++++++++++ */
	
	/* ++++++++++ v5.03.00 追加開始 ++++++++++ */
	/** 進捗情報出力判定情報保持  */
	private static final String KKW03301_PRG_WORK = "KKW03301_PRG_WORK";
	/* ++++++++++ v5.03.00 追加完了 ++++++++++ */
	
	/**
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execKishuChg(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
// ANK-2985-00-00 ADD START
		return execKishuChg(handle, param, fixedText, new HashMap<String, Object>());
	}
	
	/**
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param ccOutputMap
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execKishuChg(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
	HashMap<String, Object> ccOutputMap) throws Throwable
	{
// ANK-2985-00-00 ADD END
		// *********************************************************
		//          情報の取得
		// *********************************************************
		
		String dataMapKey = fixedText;
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		JKKKikiInfoServerChkCC jkkKikiInfoServerChkCC = new JKKKikiInfoServerChkCC();
		JKKKikiChgCC kikiChgCC = new JKKKikiChgCC();
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// 一時領域データ
		HashMap<String, Object> temporaryData = new HashMap<String, Object>();
		
		/* ++++++++++ v5.02.00 変更開始 ++++++++++ */
//		initializeTempData(ccMsg, temporaryData, param);
		/* ++++++++++ v5.02.00 変更完了 ++++++++++ */
		
		HashMap<String, Object> outMap = null;
		HashMap<String, Object> kikiChgMap = null;
		HashMap childMap = null;
		ArrayList list = new ArrayList();
		
		// サービス契約データが存在しない場合取得します。(変更前)
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)ccMsg.get(IN_SVC_KEI_DATA);
		if(ekk0081a010cbsMsg == null)
		{
			// ***** EKK0081A010（サービス契約一意照会）*****
			Object[][] ekk0081a010IN = {
				{EKK0081A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0081A010},
				{EKK0081A010CBSMsg.FUNC_CODE,        FUNC_CODE_2},
				{EKK0081A010CBSMsg.KEY_SVC_KEI_NO,   ccMsg.get(IN_SVC_KEI_NO)},
				{EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, ""},
				{EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, ccMsg.get(IN_STD_YMD)},
			};
			
			ekk0081a010cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk0081a010IN).getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST)[0];
		}
		temporaryData.put(TMP_KK_T_SVC_KEI, ekk0081a010cbsMsg);
		
		
		// 機器提供サービス契約データが存在しない場合取得します。(変更前)
		CAANMsg ekk0341a010cbsMsg = (CAANMsg)ccMsg.get(IN_KKTK_SVC_KEI_DATA);
		if(ekk0341a010cbsMsg == null)
		{
			// ***** EKK0341A010（機器提供サービス契約一意照会）*****
			Object[][] ekk0341a010IN = {
				{EKK0341A010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341A010},
				{EKK0341A010CBSMsg.FUNC_CODE,           FUNC_CODE_2},
				{EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, ccMsg.get(IN_KKTK_SVC_KEI_NO)},
				{EKK0341A010CBSMsg.KEY_GENE_ADD_DTM,    ""},
				{EKK0341A010CBSMsg.KEY_RSV_APLY_YMD,    ccMsg.get(IN_STD_YMD)}
			};
			CAANMsg[] ekk0341a010OUT = callSC(handle, scCall, param, dataMapKey, ekk0341a010IN).getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
			
			ekk0341a010cbsMsg = ekk0341a010OUT[0];
		}
		temporaryData.put(TMP_KK_T_KKTK_SVC_KEI, ekk0341a010cbsMsg);
		
		/* ++++++++++ v5.02.00 変更開始 ++++++++++ */
		initializeTempData(ccMsg, temporaryData, param);
		/* ++++++++++ v5.02.00 変更完了 ++++++++++ */
		
		// 宅内機器型式一意照会（変更前）
		CAANMsg ezm0411a010cbsMsg1_bf = getTknKikiKataShokai(handle, scCall, param, dataMapKey, 
													getNullToStr((String)ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD)));
		temporaryData.put(TMP_TAKNKIKI_MODEL_BF, ezm0411a010cbsMsg1_bf);
		
		// 変更後情報取得
		// 宅内機器型式一意照会（変更後）
		CAANMsg ezm0411a010cbsMsg1_af = getTknKikiKataShokai(handle, scCall, param, dataMapKey, 
													getNullToStr((String)ccMsg.get(IN_TAKNKIKI_MODEL_CD)));
		temporaryData.put(TMP_TAKNKIKI_MODEL_AF, ezm0411a010cbsMsg1_af);
		
		// 料金コース情報取得(変更後)
		Map<String, Object> pcrsData = getPcrsData(handle, param, ccMsg);
		temporaryData.put(TMP_PCRS_DATA_AF, pcrsData);
		
		
		// *********************************************************
		//          メイン処理の実施
		// *********************************************************
		
		//チェック処理
		// 子画面（KKW035）から呼び出された場合のみチェックを実行します。
		if(!SCRN_ID_KKW033.equals(ccMsg.get(IN_CHECK_SCRN_ID)))
		{
			// 機器提供サービス契約情報サーバーチェックCC実行処理
			param.setData(KIKI_SERVERCHKCC_KEY, new HashMap<String, Object>());
			outMap = (HashMap<String, Object>)param.getData(KIKI_SERVERCHKCC_KEY);
			
			// 機能コード
			outMap.put("func_code", ccMsg.get(IN_FUNC_CODE));
			// チェック画面ＩＤ
			outMap.put("check_scrn_id", ccMsg.get(IN_CHECK_SCRN_ID));
			// サービス契約番号
			outMap.put("svc_kei_no", ccMsg.get(IN_SVC_KEI_NO));
			// 宅内機器型式コード
			outMap.put("taknkiki_model_cd", ccMsg.get(IN_TAKNKIKI_MODEL_CD));
			// 基準日
			outMap.put("std_ymd", ccMsg.get(IN_STD_YMD));
			// 配送ステータス
			outMap.put("haiso_stat", ccMsg.get(IN_HAISO_STAT));
			// 配送区分コード
			outMap.put("haiso_div_cd", ccMsg.get(IN_HAISO_DIV_CD));
			// 販売種別コード
			outMap.put("hambai_sbt", ccMsg.get(IN_HAMBAI_SBT));
			// 機器型式コード(旧)
			outMap.put("tk_mdl_cd_bf", ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD));
			//機器製造番号
			outMap.put("kk_seizo_no", ccMsg.get(IN_KIKI_SEIZO_NO));
			//機器製造番号（前）
			outMap.put("kk_seizo_no_bf", ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO));
			//ＳＴＢ機器提供サービスコード
			outMap.put("stb_kktk_svc_cd", "");
			//ＢＣＡＳ機器提供サービスコード
			outMap.put("bcas_kktk_svc_cd", "");
			//ＣＣＡＳ機器提供サービスコード
			outMap.put("ccas_kktk_svc_cd", "");
			//管理場所コード（前）   => 在庫処理を実施するため、変更前の値に空を設定
			outMap.put("key_knri_plc_cd_bf", "");
			//管理場所棚コード（前） => 在庫処理を実施するため、変更前の値に空を設定
			outMap.put("knri_plc_slf_cd_bf", "");
			//管理場所コード
			outMap.put("key_knri_plc_cd", ccMsg.get(IN_KEY_KNRI_PLC_CD));
			
			// 管理場所識別コード（前）
			outMap.put("kriplace_skcd_bf", ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_STI_JI_KRIPLACE_SKCD));
			// 管理場所識別コード
			outMap.put("kriplace_skcd", ccMsg.get(IN_KRIPLACE_SKCD));
			
			//MACアドレス
			outMap.put("mac_ad", "");
			//世代登録年月日時分秒（機器提供サービス契約）
			outMap.put("kktk_gene_add_dtm", ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.GENE_ADD_DTM));
			//工事案件番号
			outMap.put("kojiak_no", "");
			//ＩＤ登録書有無
			outMap.put("id_tourokusho_um", "");
			//宅内機器種別コード
			outMap.put("tk_sbt_cd", "");
			//宅内機器種別コード（前）
			outMap.put("tk_sbt_cd_bf", "");
			//ＣＣＡＳ宅内機器種別コード
			outMap.put("tk_sbt_cd_ccas", "");
			//ＢＣＡＳ宅内機器種別コード
			outMap.put("tk_sbt_cd_bcas", "");
			//ＳＴＢ宅内機器種別コード
			outMap.put("tk_sbt_cd_stb", "");
			//機器提供種別コード
			outMap.put("kktk_sbt_cd", ccMsg.get(IN_KKTK_SBT_CD));
			//配送作成済フラグ
			outMap.put("haiso_saksei_zumi_flg", "");
			//サービス契約ステータス
			outMap.put("svc_kei_stat", "");
			// サービス契約データ
			outMap.put("svc_kei_data", ekk0081a010cbsMsg);
// ANK-3488-00-00 ADD START
			// 提供方式契約番号
			outMap.put("tk_hoshiki_kei_no", ccMsg.get(IN_TK_HOSHIKI_KEI_NO));
			// 宅内機器型式コード（ＶＯＮＵ）
			outMap.put("taknkiki_model_cd_vonu", ccMsg.get(IN_TAKNKIKI_MODEL_CD_VONU));
// ANK-3488-00-00 ADD END
			
			// 機器提供サービス契約情報サーバーチェック呼出
			jkkKikiInfoServerChkCC.checkKktkSvcInfo(handle, param, KIKI_SERVERCHKCC_KEY);
			// チェック結果取得
			outMap = (HashMap<String, Object>)param.getData(KIKI_SERVERCHKCC_KEY);
			
			// チェック結果を格納します。
			String err_flg = (String)outMap.get(ERR_FLG);
			ccMsg.put(ERR_FLG, err_flg);
			ccMsg.put(MESSAGE_LIST, outMap.get(MESSAGE_LIST));
			param.removeData(KIKI_SERVERCHKCC_KEY);
			
			// エラーの場合
			if (ERR_FLG_ERR.equals(err_flg))
			{
				return param;
			}
		}
		
		/* ++++++++++ v5.01.00 変更開始 ++++++++++ */
//		//回収機器有無を取得
//		String kaishuKikiUm = getKaishuKikiUm(handle, scCall, param, dataMapKey, temporaryData);
		String kaishuKikiUm = "";
		// ＢＢＲ機器提供サービスコード
		String bbrList = getNullToStr((String)ccMsg.get(IN_BBR_KKTK_SVC_CD));
		
		String kktkSvcCd = ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD);
		
		// ルーターの場合のみ設定するため判断文追加
		if(bbrList.equals(kktkSvcCd))
		{
			//回収機器有無を取得
			kaishuKikiUm = getKaishuKikiUm(handle, scCall, param, dataMapKey, temporaryData);
		}
		/* ++++++++++ v5.01.00 変更完了 ++++++++++ */

		
		//サービス仕様が異なる場合、機器解約、機器登録を実施する
		if(isNotService(handle, scCall, param, dataMapKey, temporaryData))
		{
			
			// ***** 機器解約CC *****
			// 機器解約キャンセル部品CCを実行
			if(!isExecKaiyakuCancel(handle, scCall, param, dataMapKey, temporaryData, kaishuKikiUm))
			{
				return param;
			}
			
			// ***** 機器登録CC *****
			// 機器登録部品CCを実行
// ANK-4315-00-00 MOD START
//			if(!isExecKikiIchiranKkCreate(handle, scCall, param, dataMapKey, temporaryData))
			if(!isExecKikiIchiranKkCreate(handle, scCall, param, dataMapKey, temporaryData, ccOutputMap))
// ANK-4315-00-00 MOD START
			{
				return param;
			}
			
			// 変更後の値をtemporaryData領域に設定するため、値を取得
			//   機器登録CCのWORK領域より情報を取得し、WORK領域に再設定
			Map<Object, Object> workMap = param.getMappingWorkArea();
			Map<String, Object> ekk0341d010MapAf = (Map<String, Object>)workMap.get(WORK_TEMPLATE_ID_EKK0341D010);
			String kktkSvcKeiNoNew = "";
			String kikiChgNoNew = "";
			if(ekk0341d010MapAf != null && !ekk0341d010MapAf.isEmpty())
			{
				kktkSvcKeiNoNew = (String)ekk0341d010MapAf.get(EKK0341D010CBSMsg.KKTK_SVC_KEI_NO);
				kikiChgNoNew = (String)ekk0341d010MapAf.get(EKK0341D010CBSMsg.KIKI_CHG_NO);
			}
			
			// ***** temporaryData領域に設定 *****
			// 機器提供サービス契約番号
			temporaryData.put(TMP_KKTK_SVC_KEI_NO_NEW, kktkSvcKeiNoNew);
			// 機器変更番号
			temporaryData.put(TMP_KIKI_CHG_NO_NEW, kikiChgNoNew);
		}
		// それ以外の場合、機器変更を実施する
		else
		{
			// ***** 機器変更CC *****
			// 機器変更CCパラメータ設定
			childMap = new HashMap();
			// 機器提供サービス契約番号
			childMap.put("kktk_svc_kei_no",      ccMsg.get(IN_KKTK_SVC_KEI_NO));
			// 世代登録年月日時分秒（機器提供サービス契約番号）
			childMap.put("kktk_gene_add_dtm",    ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.GENE_ADD_DTM));
			// 機器提供種別コード
			childMap.put("kktk_sbt_cd",          ccMsg.get(IN_KKTK_SBT_CD));
			// 販売種別コード
			childMap.put("hambai_sbt_cd",        ccMsg.get(IN_HAMBAI_SBT));
			// 配送区分
			childMap.put("haiso_div",            ccMsg.get(IN_HAISO_DIV_CD));
			// 配送方法コード
			childMap.put("haiso_way_cd",         ccMsg.get(IN_HAISO_WAY_CD));
			// 宅内機器型式コード
			childMap.put("taknkiki_model_cd",    ccMsg.get(IN_TAKNKIKI_MODEL_CD));
			// 機器製造番号
			childMap.put("kiki_seizo_no",        ccMsg.get(IN_KIKI_SEIZO_NO));
			
			// 倉庫コード
			childMap.put("soko_cd",              ccMsg.get(IN_KEY_KNRI_PLC_CD));
			// 機器送料有無
			childMap.put("kiki_soryo_um",        ccMsg.get(IN_KIKI_SORYO_UM));
			// 機器送付先名
			childMap.put("kiki_sohus_nm",        ccMsg.get(IN_KIKI_SOHUS_NM));
			// 機器送付先カナ名
			childMap.put("kiki_sohus_kana",      ccMsg.get(IN_KIKI_SOHUS_KANA));
			// 機器送付先住所コード
			childMap.put("kiki_sohus_ad_cd",     ccMsg.get(IN_KIKI_SOHUS_AD_CD));
			// 機器送付先郵便番号
			childMap.put("kiki_sohus_pcd",       ccMsg.get(IN_KIKI_SOHUS_PCD));
			// 機器送付先都道府県名
			childMap.put("kiki_sohus_state_nm",  ccMsg.get(IN_KIKI_SOHUS_STATE_NM));
			// 機器送付先市区町村名
			childMap.put("kiki_sohus_city_nm",   ccMsg.get(IN_KIKI_SOHUS_CITY_NM));
			// 機器送付先大字通称名
			childMap.put("kiki_sohus_oaztsu_nm", ccMsg.get(IN_KIKI_SOHUS_OAZTSU_NM));
			// 機器送付先字丁目名
			childMap.put("kiki_sohus_azcho_nm",  ccMsg.get(IN_KIKI_SOHUS_AZCHO_NM));
			// 機器送付先番地号
			childMap.put("kiki_sohus_bnchigo",   ccMsg.get(IN_KIKI_SOHUS_BNCHIGO));
			// 機器送付先住所補記・建物名
			childMap.put("kiki_sohus_adrttm",    ccMsg.get(IN_KIKI_SOHUS_ADRTTM));
			// 機器送付先住所補記・部屋番号
			childMap.put("kiki_sohus_adrrm",     ccMsg.get(IN_KIKI_SOHUS_ADRRM));
			// 機器送付先電話番号
			childMap.put("kiki_sohus_telno",     ccMsg.get(IN_KIKI_SOHUS_TELNO));
			// 機器送付先住所手動入力フラグ
			childMap.put("kiki_shs_ad_man_input_flg", ccMsg.get(IN_KIKI_SHS_AD_MAN_INPUT_FLG));
			// 機器付加情報コード
			childMap.put("kiki_huka_info_cd",    ccMsg.get(IN_KIKI_HUKA_INFO_CD));
			// 配送依頼指定年月日
			childMap.put("haiso_req_shitei_ymd", ccMsg.get(IN_HAISO_REQ_SHITEI_YMD));
			// 回収機器有無
			childMap.put("kaishu_kiki_um", kaishuKikiUm);
			
			// 管理場所識別コード
			childMap.put("kriplace_skcd", ccMsg.get(IN_KRIPLACE_SKCD));
			/* ++++++++++ v5.01.00 変更開始 ++++++++++ */
			//工事案件番号
			childMap.put("kojiak_no", ccMsg.get(IN_KOJIAK_NO));
			//配送作成済フラグ
			childMap.put("haiso_saksei_zumi_flg", ccMsg.get(IN_HAISO_SAKSEI_ZUMI_FLG));
			/* ++++++++++ v5.01.00 変更完了 ++++++++++ */
			
			list.add(childMap);
			
			// 機器変更CC実行処理
			param.setData(KIKI_CHGCC_KEY, new HashMap<String, Object>());
			kikiChgMap = (HashMap<String, Object>)param.getData(KIKI_CHGCC_KEY);
			
			// 機能コード
			kikiChgMap.put("func_code", ccMsg.get(IN_FUNC_CODE));
			// 工事CC連携用データ格納キー
			kikiChgMap.put(KOJI_RENKEI_MAP_KEY, KOJI_RENKEI_MAP_KEY);
			// サービス契約番号
			kikiChgMap.put("key_svc_kei_no", ccMsg.get(IN_SVC_KEI_NO));
			// 異動区分
			kikiChgMap.put("ido_div", ccMsg.get(IN_IDO_DIV));
			// 更新年月日時分秒
			kikiChgMap.put("upd_dtm",  temporaryData.get(TMP_END_UPD_DATE_TIME));
			kikiChgMap.put("ichiranIndex", ccMsg.get(IN_ICHIRANINDEX));
			kikiChgMap.put("chg_kiki_list", list);
			
			/* ++++++++++ v10.00.02 追加開始 ++++++++++ */
			// 交換希望日聞取有無
			kikiChgMap.put("kokan_kibobi_kktr_um", ccMsg.get(IN_KOKAN_KIBOBI_KKTR_UM));
			// 交換希望日
			kikiChgMap.put("kokan_kibobi", ccMsg.get(IN_KOKAN_KIBOBI));
			/* ++++++++++ v10.00.02 追加完了 ++++++++++ */
			
			/* ++++++++++ v4.03.00 追加開始 ++++++++++ */
			//機器送付先住所手動入力フラグが0(手動なし)のとき
			//機器送付先の住所を行なうフラグをセットする
			if ("0".equals(ccMsg.get(IN_KIKI_SHS_AD_MAN_INPUT_FLG))) {
				kikiChgMap.put(KIKI_SOHUS_AD_CHK_LV, "1");
			} else if ("1".equals(ccMsg.get(IN_KIKI_SHS_AD_MAN_INPUT_FLG))) {
				kikiChgMap.put(KIKI_SOHUS_AD_CHK_LV, "0");
			}
			/* ++++++++++ v4.03.00 追加終了 ++++++++++ */
			
			/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
			kikiChgMap.put("adchg_mskm_dtl_no", ccMsg.get("adchg_mskm_dtl_no"));
			/* ++++++++++ v9.00.00 追加終了 ++++++++++ */
			
			// 機器変更CC呼出
			kikiChgCC.chgKikiInfo(handle, param, KIKI_CHGCC_KEY);
			
// ANK-2985-00-00 ADD START
			HashMap<String, Object> ccOutMap = new HashMap<String, Object>();
			
			ccOutMap.put(OUT_HDD_CAPA_CD, (String)kikiChgMap.get("out_hdd_capa_cd"));
			ccOutMap.put(OUT_IDO_DIV, (String)kikiChgMap.get("out_ido_div"));
			ccOutputMap.put(TMP_OUTPUT, ccOutMap);
// ANK-2985-00-00 ADD END
			
			// 返却項目の設定
			setReturnData(param, dataMapKey);
			
			// 変更後の値をWORK領域に設定するため、値を取得
			//   機器変更CCで更新したデータを取得
			ArrayList<HashMap<String, Object>> resultKKTKInfo 
							= (ArrayList<HashMap<String, Object>>)kikiChgMap.get("kktk_upd_list");
			String kktkSvcKeiNoNew = "";
			String kikiChgNoNew = "";
			if(resultKKTKInfo != null && 0 < resultKKTKInfo.size())
			{
				//機器提供サービス契約番号
				kktkSvcKeiNoNew = (String)resultKKTKInfo.get(0).get("kktk_svc_kei_no");
				//機器変更番号
				kikiChgNoNew = (String)resultKKTKInfo.get(0).get("kiki_chg_no");
			}
			
			// ***** WORK領域に設定 *****
			// 機器提供サービス契約番号
			temporaryData.put(TMP_KKTK_SVC_KEI_NO_NEW, kktkSvcKeiNoNew);
			// 機器変更番号
			temporaryData.put(TMP_KIKI_CHG_NO_NEW, kikiChgNoNew);
			
			/* ++++++++++ v4.03.00 追加開始 ++++++++++ */
			//修理受付CCのマップから住所最下層チェックのワーニングフラグを退避
			//画面返却用マップにつめなおす
			if(!(kikiChgMap.get(AD_CHK_ERR_KEY) == null) && !("".equals(kikiChgMap.get(AD_CHK_ERR_KEY)))) {
				ccMsg.put(AD_CHK_ERR_KEY, kikiChgMap.get(AD_CHK_ERR_KEY));
			}
			/* ++++++++++ v4.03.00 追加終了 ++++++++++ */
			
			//クリア
			param.removeData(KIKI_CHGCC_KEY);
		}
		
		// サービス契約ステータスが受付済以外の場合 
		if (!SVC_KEI_STAT_010.equals(ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT)))
		{
			// ***** 進捗情報CC *****
			// 進捗情報CC実行
			if(!isExecPrgInfo(handle, scCall, param, dataMapKey, temporaryData))
			{
				return param;
			}
		}
		
		
		// *********************************************************
		//          返却データの作成
		// *********************************************************
		
		// ***** 宅内機器型式一意照会CC ******
		// 名称データ等取得し返却します。
		setScrnReturnData(handle, scCall, param, dataMapKey, temporaryData);
		
		return param;
	}
	
	/**
	 * <pre>
	 * サービス仕様が異なるかを確認する。
	 * 
	 * </pre>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable 
	 * @return true：サービス仕様が異なる、false：サービス仕様が同じ
	 */
	@SuppressWarnings("unchecked")
	private boolean isNotService(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		// 機器提供サービス契約情報(変更前)
		CAANMsg ekk0341a010cbsMsg = (CAANMsg)temporaryData.get(TMP_KK_T_KKTK_SVC_KEI);
		// 料金コース情報(変更後)
		Map<String, Object> pcrsData = (Map<String, Object>)temporaryData.get(TMP_PCRS_DATA_AF);
		
		// *************************************************
		//                  比較処理
		// *************************************************
		
		//機器契約区分(機器提供種別コード)の変更チェックを実施
		String hambaiSbt_bf = getNullToStr((String)ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SBT_CD));
		String hambaiSbt_af = getNullToStr((String)ccMsg.get(IN_KKTK_SBT_CD));
		
		/* ++++++++++ v5.01.00 変更開始 ++++++++++ */
		// ＢＢＲ機器提供サービスコード
		String bbrList = getNullToStr((String)ccMsg.get(IN_BBR_KKTK_SVC_CD));
		String kktkSvcCd = ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD);
		
		// ルーターの場合のみ設定するため判断文追加
		if(!bbrList.equals(kktkSvcCd))
		{
			return false;
		}
		/* ++++++++++ v5.01.00 変更完了 ++++++++++ */
		
		
		// レンタル＝＞買取に変更
		if(KKT_SBT_CD_RENTAL.equals(hambaiSbt_bf) && KKT_SBT_CD_PURCHASE.equals(hambaiSbt_af))
		{
			return true;
		}
		// 買取＝＞レンタルに変更
		if(KKT_SBT_CD_PURCHASE.equals(hambaiSbt_bf) && KKT_SBT_CD_RENTAL.equals(hambaiSbt_af))
		{
			return true;
		}
		
		//型番（無線ルータ＜＝＞有線ルータ）の変更チェック
		// 機器提供サービスコード
		String kktkSvcCd_bf = getNullToStr((String)ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
		String kktkSvcCd_af = getNullToStr((String)pcrsData.get(PCRS_KKTK_SVC_CD));
		
		/* ++++++++++ v5.01.00 変更開始 ++++++++++ */
//		// ＢＢＲ機器提供サービスコード
//		String bbrList = getNullToStr((String)ccMsg.get(IN_BBR_KKTK_SVC_CD));
		/* ++++++++++ v5.01.00 変更完了 ++++++++++ */
		
		// 宅内機器型式一意照会
		CAANMsg tknKiki_bf = getTknKikiKataShokai(handle, scCall, param, dataMapKey, 
										getNullToStr((String)ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD)));
		// OPMSルーター種類コード
		String opmsRouter_bf = getNullToStr(tknKiki_bf.getString(EZM0411A010CBSMsg1List.OPMS_ROUTER_KIND_CD));
		String opmsRouter_af = getNullToStr((String)ccMsg.get(IN_OPMS_ROUTER_KIND_CD));
		// ＯＰＭＳルータ種別ベーシックルータ
		String opmsList = getNullToStr((String)ccMsg.get(IN_OPMS_ROUT_SBT_BASIC));
		
		// ルータ判定処理
		// (旧)ルータの判定を実施
		if(!isRuter(bbrList, kktkSvcCd_bf))
		{
			// ルータでない
			return false;
		}
		// (新)ルータの判定を実施
		if(!isRuter(bbrList, kktkSvcCd_af))
		{
			// ルータでない
			return false;
		}
		
		// (旧)(新)OPMSルーター種類コードより、有線・無線ルータの判定
		boolean yusenROld = isYusenRuter(opmsList, opmsRouter_bf);
		boolean yusenRNew = isYusenRuter(opmsList, opmsRouter_af);
		// (旧)有線ルータ、(新)無線ルータの場合、サービス仕様が異なる
		if(yusenROld == true && yusenRNew == false)
		{
			return true;
		}
		// (旧)無線ルータ、(新)有線ルータの場合、サービス仕様が異なる
		else if(yusenROld == false && yusenRNew == true)
		{
			return true;
		}
		
		// それ以外
		return false;
	}
	
	/**
	 * ルータのチェック<br>
	 * 
	 * @param bbrList ＢＢＲリスト
	 * @param kktkSvcCd 機器提供サービスコード
	 * @return true：ルータである、false；ルータでない
	 */
	private boolean isRuter(String bbrList, String kktkSvcCd)
	{
		// 機器提供サービスコードが設定されていないため、ルータ以外と判断
		if ("".equals(kktkSvcCd))
		{
			return false;
		}
		
		// BBRを","で分割
		String[] bbrArray = bbrList.split(",");
		
		for (int i = 0; i < bbrArray.length; i++)
		{
			if (kktkSvcCd.equals(bbrArray[i]))
			{
				// BBRリストと機器提供サービスコードが一致したため、
				// ルータと判断する
				return true;
			}
		}
		return false;
	}
	
	
	/**
	 * <pre>
	 * 有線ルータ（ベーシックルーター）であるかを判別する。
	 * 
	 * </pre>
	 * @param opmsList OPMSリスト(ベーシックルーター判別（OPMSルーター種別コード）)
	 * @param opmsRouter OPMSルーター種別コード
	 * @return true：有線ルータである、false：無線ルータである
	 */
	private boolean isYusenRuter(String opmsList, String opmsRouter)
	{
		// OPMSルーター種別コードが設定されていないため、無線ルータと判断
		if ("".equals(opmsRouter))
		{
			return false;
		}
		
		// OPMSリストを","で分割
		String[] opmsArray = opmsList.split(",");
		
		for (int i = 0; i < opmsArray.length; i++)
		{
			if (opmsRouter.equals(opmsArray[i]))
			{
				// OPMSリストとOPMSルーター種別コードが一致したため、
				// 「有線ルータ」と判断
				return true;
			}
		}
		return false;
	}
	
	/**
	 * <pre>
	 * 回収機器有無を取得する。
	 * 
	 * </pre>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return 回収機器有無フラグ（1：有, 0：無, ""：設定しない）
	 * @throws Throwable
	 */
	private String  getKaishuKikiUm(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		// 機器提供サービス契約情報(変更前)
		CAANMsg ekk0341a010cbsMsg = (CAANMsg)temporaryData.get(TMP_KK_T_KKTK_SVC_KEI);
		
		// 「工事会社」が選択されている場合、対象外とする
		String kojiCompCd = getNullToStr((String)ccMsg.get(IN_KOJI_COMP_CD));
		if(!"".equals(kojiCompCd))
		{
			return "";
		}
		
		// 配送ステータス（変更前と変更後は同じ値が入るため）
		String haisoSt = getNullToStr((String)ccMsg.get(IN_HAISO_STAT));
		// 返却日
		String henkyakuYMD = getNullToStr((String)ccMsg.get(IN_HENKYAKU_YMD));
		// 配送区分(新)
		String haisoDiv = getNullToStr((String)ccMsg.get(IN_HAISO_DIV_CD));
		// 契約区分
		String kktkSbt = getNullToStr((String)ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SBT_CD));
		
		/* ++++++++++ v5.05.00 修正開始 ++++++++++ */
		// 配送ステータス(前)が「出荷済」　かつ　返却日が「空白」(未返却)
		// かつ　配送区分(新)が「直送」
		// かつ　契約区分(旧)が「レンタル」
//		if(HAISO_STAT_SHUKA_ZUMI.equals(haisoSt) && "".equals(henkyakuYMD)
//				&& HAISO_DIV_TYOKUSO.equals(haisoDiv)
//				&& KKT_SBT_CD_RENTAL.equals(kktkSbt))
//		{
//			return "1";
//		}
//		return "0";
		
		// 配送ステータス(前)が「出荷済」または「完了済」
		// かつ　返却日が「空白」(未返却)
		// かつ　配送区分(新)が「直送」
		// かつ　契約区分(旧)が「レンタル」
		if((HAISO_STAT_SHUKA_ZUMI.equals(haisoSt) || HAISO_STAT_KANRYO_ZUMI.equals(haisoSt))
				&& "".equals(henkyakuYMD)
				&& HAISO_DIV_TYOKUSO.equals(haisoDiv)
				&& KKT_SBT_CD_RENTAL.equals(kktkSbt))
		{
			return "1";
		}
		return "0";
		/* ++++++++++ v5.05.00 修正完了 ++++++++++ */
	}
	
	/**
	 * 機器一覧解約キャンセル部品CC（解約・キャンセル）実行メソッド
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param kaishuKikiUm 回収機器有無
	 * @return boolean
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
		private boolean isExecKaiyakuCancel(SessionHandle handle, 
											ServiceComponentRequestInvoker scCall, 
											IRequestParameterReadWrite param, 
											String dataMapKey,
											HashMap<String, Object> temporaryData,
											String kaishuKikiUm) throws Throwable
	{
		param.setData(JKK_KIKIICHIRAN_KAIYAKUCAN_CC, new HashMap<String, Object>());
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(JKK_KIKIICHIRAN_KAIYAKUCAN_CC);
		
		//機能コード
		outMap.put("func_code",         ccMsg.get(IN_FUNC_CODE));
		//チェック画面ＩＤ
		outMap.put("check_scrn_id",     ccMsg.get(IN_CHECK_SCRN_ID));
		//サービス契約データ
		outMap.put("svc_kei_data",      ccMsg.get(IN_SVC_KEI_DATA));
		//機器提供サービス契約情報データ
		outMap.put("kktk_svc_kei_data", ccMsg.get(IN_KKTK_SVC_KEI_DATA));

		//異動区分
		outMap.put("ido_div",           ccMsg.get(IN_IDO_DIV));
		//サービス契約番号
		outMap.put("svc_kei_no",        ccMsg.get(IN_SVC_KEI_NO));
		//機器提供サービス契約番号
		outMap.put("kktk_svc_kei_no",   ccMsg.get(IN_KKTK_SVC_KEI_NO));
		//運用日付
		outMap.put("unyo_ymd",          ccMsg.get(IN_STD_YMD));
		//機器提供終了年月日（解約日）
		outMap.put("svc_chrg_endymd",   ccMsg.get(IN_STD_YMD));
		//更新年月日時分秒
		outMap.put("upd_dtm_bf",        ccMsg.get(IN_UPD_DTM_SVC_KEI));
		//配送ステータス
		outMap.put("haiso_stat",        ccMsg.get(IN_HAISO_STAT));
//		//停止ＳＯＤ送信年月日
//		outMap.put("stp_sod_send_ymd", "");
		// 異動理由明細
		ArrayList<HashMap<String, Object>> idoRsnList = getIdoRsnList(ccMsg);
		outMap.put("EKK1091D010CBSMsg1List", idoRsnList);
		//回収機器有無
		//   値が設定されていない場合、設定しない。
		if(!"".equals(kaishuKikiUm))
		{
			outMap.put("kaishu_kiki_um", kaishuKikiUm);
		}
		
		/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
		outMap.put("adchg_mskm_dtl_no", ccMsg.get("adchg_mskm_dtl_no"));
		/* ++++++++++ v9.00.00 追加終了 ++++++++++ */
		
		JKKKikiIchiranCancelCC jKkkikiCancelCC = new JKKKikiIchiranCancelCC();
		jKkkikiCancelCC.updKktkSvcCancel(handle, param, JKK_KIKIICHIRAN_KAIYAKUCAN_CC);
		
		param.removeData(JKK_KIKIICHIRAN_KAIYAKUCAN_CC);
		
		return true;
	}
	
	/**
	 * 機器一覧機器登録部品CC（機器登録）実行メソッド
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean isExecKikiIchiranKkCreate(SessionHandle handle, 
												ServiceComponentRequestInvoker scCall, 
												IRequestParameterReadWrite param, 
												String dataMapKey,
// ANK-4315-00-00 MOD START
//												HashMap<String, Object> temporaryData) throws Throwable
												HashMap<String, Object> temporaryData, HashMap<String, Object> ccOutputMap) throws Throwable
// ANK-4315-00-00 MOD END
	{
		param.setData(JKK_KIKIICHIRAN_KKCREATE_CC, new HashMap<String, Object>());
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(JKK_KIKIICHIRAN_KKCREATE_CC);
		
		// 以下、「JKKKikiIchiranIkkatsuCC」にて「JKKKikiIchiranKkCreateCC」を呼ぶときに使用しているパラメータを設定する
		
		//機能コード
		outMap.put("func_code", ccMsg.get(IN_FUNC_CODE));
		//チェック画面ＩＤ
		outMap.put("check_scrn_id", ccMsg.get(IN_CHECK_SCRN_ID));
		//サービス契約データ
		outMap.put("svc_kei_data", ccMsg.get(IN_SVC_KEI_DATA));
		//機器提供サービス契約情報データ
		outMap.put("kktk_svc_kei_data", ccMsg.get(IN_KKTK_SVC_KEI_DATA));
		
		//サービス契約番号
		outMap.put("svc_kei_no", ccMsg.get(IN_SVC_KEI_NO));
		//宅内機器型式コード
		outMap.put("taknkiki_model_cd", ccMsg.get(IN_TAKNKIKI_MODEL_CD));
		//運用日付
		outMap.put("unyo_ymd", ccMsg.get(IN_STD_YMD));
		//配送ステータス
		outMap.put("haiso_stat", ccMsg.get(IN_HAISO_STAT));
		//配送区分コード
		outMap.put("haiso_div_cd", ccMsg.get(IN_HAISO_DIV_CD));
		//販売種別
		outMap.put("hambai_sbt", ccMsg.get(IN_HAMBAI_SBT));
		//機器製造番号
		outMap.put("kk_seizo_no", ccMsg.get(IN_KIKI_SEIZO_NO));
		//ＳＴＢ機器提供サービスコード
		outMap.put("stb_kktk_svc_cd", ccMsg.get(IN_STB_KKTK_SVC_CD));
		//ＢＣＡＳ機器提供サービスコード
		outMap.put("bcas_kktk_svc_cd", ccMsg.get(IN_BCAS_KKTK_SVC_CD));
		//ＣＣＡＳ機器提供サービスコード
		outMap.put("ccas_kktk_svc_cd", ccMsg.get(IN_CCAS_KKTK_SVC_CD));
		//建物情報
		outMap.put("soko_info", ccMsg.get(IN_KEY_KNRI_PLC_CD));
		
		//工事案件番号
		outMap.put("kojiak_no", ccMsg.get(IN_KOJIAK_NO));
		//配送作成済フラグ
		outMap.put("haiso_saksei_zumi_flg", ccMsg.get(IN_HAISO_SAKSEI_ZUMI_FLG));
		//宅内機器種別コード
		outMap.put("tk_sbt_cd", ccMsg.get(IN_TK_SBT_CD));
		//ＳＴＢ宅内機器種別コード
		outMap.put("tk_sbt_cd_stb", ccMsg.get(IN_TK_SBT_CD_STB));
		//ＢＣＡＳ宅内機器種別コード
		outMap.put("tk_sbt_cd_bcas", ccMsg.get(IN_TK_SBT_CD_BCAS));
		//ＣＣＡＳ宅内機器種別コード
		outMap.put("tk_sbt_cd_ccas", ccMsg.get(IN_TK_SBT_CD_CCAS));
		//機器提供種別コード
		outMap.put("kktk_sbt_cd", ccMsg.get(IN_KKTK_SBT_CD));
		//配送方法区分
		outMap.put("haiso_way_cd", ccMsg.get(IN_HAISO_WAY_CD));
		//異動区分
		outMap.put("ido_div", ccMsg.get(IN_IDO_DIV));
		
		//郵便番号（機器送付先情報）
		outMap.put("kiki_sofu_pcd", ccMsg.get(IN_KIKI_SOHUS_PCD));
		// 機器送付先住所手動入力フラグ
		outMap.put("syudo_nyuryoku", ccMsg.get(IN_KIKI_SHS_AD_MAN_INPUT_FLG));
		//住所コード（機器送付先情報）
		outMap.put("kiki_sofu_ad_cd", ccMsg.get(IN_KIKI_SOHUS_AD_CD));
		//都道府県（機器送付先情報）
		outMap.put("kiki_sofu_state", ccMsg.get(IN_KIKI_SOHUS_STATE_NM));
		//市区町村（機器送付先情報）
		outMap.put("kiki_sofu_city", ccMsg.get(IN_KIKI_SOHUS_CITY_NM));
		//大字通称（機器送付先情報）
		outMap.put("kiki_sofu_oaztsu", ccMsg.get(IN_KIKI_SOHUS_OAZTSU_NM));
		//字丁目（機器送付先情報）
		outMap.put("kiki_sofu_azcho", ccMsg.get(IN_KIKI_SOHUS_AZCHO_NM));
		//番地・号（機器送付先情報）
		outMap.put("kiki_sofu_bnchigo", ccMsg.get(IN_KIKI_SOHUS_BNCHIGO));
		//建物名（機器送付先情報）
		outMap.put("kiki_sofu_adrttm", ccMsg.get(IN_KIKI_SOHUS_ADRTTM));
		//部屋番号（機器送付先情報）
		outMap.put("kiki_sofu_adrrm", ccMsg.get(IN_KIKI_SOHUS_ADRRM));
		//電話番号（機器送付先情報）
		outMap.put("kiki_sofu_telno", ccMsg.get(IN_KIKI_SOHUS_TELNO));
		//送付先名（機器送付先情報）
		outMap.put("kiki_sofu_shs_nm", ccMsg.get(IN_KIKI_SOHUS_NM));
		//送付先名カナ（機器送付先情報）
		outMap.put("kiki_sofu_shs_kana", ccMsg.get(IN_KIKI_SOHUS_KANA));
		//機器送料有無
		outMap.put("kiki_souryo_um", ccMsg.get(IN_KIKI_SORYO_UM));
		//付加情報
		outMap.put("huka_info", ccMsg.get(IN_KIKI_HUKA_INFO_CD));
		
		//運用年月日時分秒
		outMap.put("unyo_dtm", JPCBPCommon.getOpeDateTimeStamp(null));
		//更新年月日時分秒（サービス契約）
		outMap.put("upd_dtm_svc_kei", ccMsg.get(IN_UPD_DTM_SVC_KEI));
//		//元トムソンケース番号
//		outMap.put("kinkyu_moto_tomson_cd", "");
		// 配送依頼指定年月日
		outMap.put("haiso_req_shitei_ymd", ccMsg.get(IN_HAISO_REQ_SHITEI_YMD));
		// 一覧Indx（ワーク領域のIchiranShoriListに格納するインデックス）
		outMap.put("ichiranIndex", ccMsg.get(IN_ICHIRANINDEX));
		
		// 管理場所識別コード
		outMap.put("kriplace_skcd", ccMsg.get(IN_KRIPLACE_SKCD));
		
		// 異動理由明細
		ArrayList<HashMap<String, Object>> idoRsnList = getIdoRsnList(ccMsg);
		outMap.put("EKK1091D010CBSMsg1List", idoRsnList);
		
		if(idoRsnList == null || idoRsnList.isEmpty())
		{
			outMap.put("ido_rsn_cd", "");
		}
		else
		{
			outMap.put("ido_rsn_cd", idoRsnList.get(0).get(IN_IDO_RSN_CD));
		}
		
/* ++++++++++ v5.04.00 変更開始 ++++++++++ */
		// 機器提供サービス契約情報(変更前)
//		CAANMsg ekk0341a010cbsMsg = (CAANMsg)temporaryData.get(TMP_KK_T_KKTK_SVC_KEI);
		// サービス開始起算年月日
//		outMap.put("keiyaku_ymd", (String)ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.SVC_STA_KISAN_YMD));
		//@配送区分コードが「直送」の場合、契約日に「空白」を設定。
		//A配送区分コードが「手渡し」の場合、契約日に「運用日付」を設定。
		if("01".equals(ccMsg.get(IN_HAISO_DIV_CD)))
		{
			outMap.put("keiyaku_ymd", ccMsg.get(IN_STD_YMD));
		}
		else
		{
			outMap.put("keiyaku_ymd", "");
		}
		
/* ++++++++++ v5.04.00 変更終了 ++++++++++ */		

		/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
		outMap.put("adchg_mskm_dtl_no", ccMsg.get("adchg_mskm_dtl_no"));
		/* ++++++++++ v9.00.00 追加終了 ++++++++++ */
		
		// 機器登録部品呼び出し
		JKKKikiIchiranKkCreateCC jKkKCreateCC = new JKKKikiIchiranKkCreateCC();
		jKkKCreateCC.execKikiIchiranKikiCreate(handle, param, JKK_KIKIICHIRAN_KKCREATE_CC);
		
		// チェックは不要のため、コメント
		// チェック結果取得
		outMap = (HashMap<String, Object>)param.getData(JKK_KIKIICHIRAN_KKCREATE_CC);
//		
//		// エラーチェック実施
//		// チェック結果を格納します。
//		String err_flg = (String)outMap.get(ERR_FLG);
//		ccMsg.put(ERR_FLG, err_flg);
//		ccMsg.put(MESSAGE_LIST, outMap.get(MESSAGE_LIST));
		
// ANK-4315-00-00 ADD START
		HashMap<String, Object> ccOutMap = new HashMap<String, Object>();
		ccOutMap.put(OUT_HDD_CAPA_CD, (String)outMap.get("out_hdd_capa_cd"));
		ccOutMap.put(OUT_IDO_DIV, (String)outMap.get("out_ido_div"));
		ccOutputMap.put(TMP_OUTPUT, ccOutMap);
// ANK-4315-00-00 ADD END
		// 返却値を設定
		HashMap<String, Object> outTmpMap = new HashMap<String, Object>();
		outTmpMap.put(OUT_SOKO_TANA_CD, (String)outMap.get("soko_tana_cd"));
		outTmpMap.put(OUT_SOKO_TANA_NM, (String)outMap.get("soko_tana_nm"));
		outTmpMap.put(OUT_TAKNKIKI_MODEL_NM, (String)outMap.get("taknkiki_model_nm"));
		outTmpMap.put(OUT_KKTK_SVC_CD, (String)outMap.get("kktk_svc_cd"));
		outTmpMap.put(OUT_KKTK_SVC_NM, (String)outMap.get("kktk_svc_nm"));
		temporaryData.put(TMP_OUTPUT, outTmpMap);
		
		// クリア
		param.removeData(JKK_KIKIICHIRAN_KKCREATE_CC);
		
//		// エラーの場合処理終了
//		if(ERR_FLG_ERR.equals(err_flg))
//		{
//			return false;
//		}
		
		return true;
	}
	
	/**
	 * 進捗情報CC実行メソッド
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean isExecPrgInfo(SessionHandle handle, 
											ServiceComponentRequestInvoker scCall, 
											IRequestParameterReadWrite param, 
											String dataMapKey,
											HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		// 進捗特記事項 の文字取得
		String prgTkjk = getPrgStat(handle, scCall, param, dataMapKey, temporaryData);
		String prgTkjk1 = "";
		String prgTkjk2 = "";
		if(prgTkjk.length() < 129)
		{
			prgTkjk1 = prgTkjk;
			prgTkjk2 = "";
		}
		else if(prgTkjk.length() < 257)
		{
			prgTkjk1 = prgTkjk.substring(0, 128);
			prgTkjk2 = prgTkjk.substring(128);
		}
		else
		{
			prgTkjk1 = prgTkjk.substring(0, 128);
			prgTkjk2 = prgTkjk.substring(128, 256);
		}
		
		/* ++++++++++ v5.03.00 追加開始 ++++++++++ */
		// 進捗ステータスに該当する進捗レコードが出力済みか判定する。
		if(!isExecShinchokuToroku(param, PRG_STAT_3501, prgTkjk))
		{
			return true;
		}
		/* ++++++++++ v5.03.00 追加完了 ++++++++++ */
		
		// ***** EKK1091D010（進捗登録）*****
		Object[][] ekk1091d010IN = {
			{EKK1091D010CBSMsg.TEMPLATEID,             TEMPLATE_ID_EKK1091D010},
			{EKK1091D010CBSMsg.FUNC_CODE,              ccMsg.get(IN_FUNC_CODE)},
			/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
			//{EKK1091D010CBSMsg.MSKM_DTL_NO,            workMap.get("mskm_dtl_no")},
			{EKK1091D010CBSMsg.MSKM_DTL_NO,            getMskmDtlNo(param, ccMsg)},
			/* ++++++++++ v9.00.00 追加終了 ++++++++++ */
			{EKK1091D010CBSMsg.SEIKY_KEI_NO,           ""},
			{EKK1091D010CBSMsg.SEIKY_WAY_NO_KOZA,      ""},
			{EKK1091D010CBSMsg.SEIKY_WAY_NO_CRECARD,   ""},
			{EKK1091D010CBSMsg.SVC_KEI_NO,             ccMsg.get(IN_SVC_KEI_NO)},
			{EKK1091D010CBSMsg.SVC_KEI_UCWK_NO,        ""},
			{EKK1091D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO, ""},
			{EKK1091D010CBSMsg.KKTK_SVC_KEI_NO,        ""},
			{EKK1091D010CBSMsg.OP_SVC_KEI_NO,          ""},
			{EKK1091D010CBSMsg.SEIOPSVC_KEI_NO,        ""},
			{EKK1091D010CBSMsg.SBOP_SVC_KEI_NO,        ""},
			{EKK1091D010CBSMsg.WRIB_SVC_KEI_NO,        ""},
			{EKK1091D010CBSMsg.IDO_DIV,                ccMsg.get(IN_IDO_DIV)},
			
			/* ++++++++++ v4.02.00 修正開始 ++++++++++ */
//			{EKK1091D010CBSMsg.IDO_DTM,                JPCBPCommon.getSysDateTimeStamp()},
			{EKK1091D010CBSMsg.IDO_DTM,                getIdoUpDtm(param)},
			/* ++++++++++ v4.02.00 修正完了 ++++++++++ */
			/* ++++++++++ v5.03.00 修正開始 ++++++++++ */
//			{EKK1091D010CBSMsg.PRG_STAT,               PRG_STAT_3502},
			{EKK1091D010CBSMsg.PRG_STAT,               PRG_STAT_3501},
			/* ++++++++++ v5.03.00 修正完了 ++++++++++ */
			{EKK1091D010CBSMsg.PRG_MEMO,               ""},
			{EKK1091D010CBSMsg.PRG_TKJK_1,             prgTkjk1},
			{EKK1091D010CBSMsg.PRG_TKJK_2,             prgTkjk2}
		};
		
		// 異動理由明細
		ArrayList<HashMap<String, Object>> idoRsnList = getIdoRsnList(ccMsg);
		callSCArray(handle, scCall, param, dataMapKey, ekk1091d010IN, "EKK1091D010CBSMsg1List", idoRsnList);
		
		/* ++++++++++ v5.03.00 追加開始 ++++++++++ */
		setShinchokuTkjk(param, PRG_STAT_3501, prgTkjk);
		/* ++++++++++ v5.03.00 追加完了 ++++++++++ */
		
		return true;
	}
	
	/* ++++++++++ v5.03.00 追加開始 ++++++++++ */
	/**
	 * 進捗出力内容から進捗情報を出力するか判定します。
	 * <br>
	 * @param param
	 * @param dataMapKey
	 * @return true:出力する false:出力しない。
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private boolean isExecShinchokuToroku(IRequestParameterReadWrite param, 
											String prg_stat,
											String prg_tkjk) throws Throwable
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		// ワーク領域より処理一覧を取得
		HashMap<String, Object> prg_work_map = (HashMap<String, Object>)workMap.get(KKW03301_PRG_WORK);
		
		// 未設定の場合、進捗未出力として進捗登録を行う。
		if(prg_work_map == null)
		{
			return true;
		}
		
		// 進捗ステータスの存在チェック
		if(!prg_work_map.containsKey(prg_stat))
		{
			// 該当進捗ステータス未出力として進捗登録を行う。
			return true;
		}
		else
		{
			HashMap<String, Object> prg_stat_map = (HashMap<String, Object>)prg_work_map.get(prg_stat);
			
			if(prg_stat_map.containsKey(prg_tkjk))
			{
				// 進捗ステータス+特記事項が存在するため進捗登録は行わない
				return false;
			}
		}
		
		return true;
	}
	
	/**
	 * 進捗情報をworkMapに保持します。
	 * 
	 * @param param
	 * @param prg_stat
	 * @param prg_tkjk
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void setShinchokuTkjk(IRequestParameterReadWrite param, 
									String prg_stat,
									String prg_tkjk) throws Throwable
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		// ワーク領域より処理一覧を取得
		HashMap<String, Object> prg_work_map = (HashMap<String, Object>)workMap.get(KKW03301_PRG_WORK);
		
		// 未設定の場合、初期化後再設定
		if(prg_work_map == null)
		{
			prg_work_map = new HashMap<String, Object>();
			workMap.put(KKW03301_PRG_WORK, prg_work_map);
		}
		
		if(prg_work_map.containsKey(prg_stat))
		{
			// key_進捗ステータスが存在する場合、追加する。
			HashMap<String, Object> prg_stat_map = (HashMap<String, Object>)prg_work_map.get(prg_stat);
			
			prg_stat_map.put(prg_tkjk, "");
		}
		else
		{
			// key_進捗ステータスが存在しない場合、新規追加する。
			HashMap<String, Object> prg_stat_map = new HashMap<String, Object>();
			
			prg_stat_map.put(prg_tkjk, "");
			
			prg_work_map.put(prg_stat, prg_stat_map);
			
		}
	}
	/* ++++++++++ v5.03.00 追加完了 ++++++++++ */
	
	/**
	 * 進捗登録・特記事項表示項目を編集する。
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return 編集文字列
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String getPrgStat(SessionHandle handle,
								ServiceComponentRequestInvoker scCall,
								IRequestParameterReadWrite param,
								String dataMapKey,
								HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		StringBuilder prgTkjk = new  StringBuilder();
		// 各文字列を連結
		prgTkjk.append(getPrgStatModel(handle, scCall, param, dataMapKey, temporaryData, ccMsg))
				/* ++++++++++ v5.03.00 削除開始 ++++++++++ */
//				.append(getPrgStatShukaShitei(ccMsg, temporaryData))
				/* ++++++++++ v5.03.00 削除完了 ++++++++++ */
				.append(getPrgStatSofuInfo(ccMsg, temporaryData));
		
		return JPCUtilCommon.trim(prgTkjk.toString());
	}
	
	/**
	 * 進捗登録・特記事項表示：型番関連の文字列を作成する。<br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param ccMsg
	 * @return 型番関連文字列
	 * @throws Throwable
	 */
	private String getPrgStatModel(SessionHandle handle,
									ServiceComponentRequestInvoker scCall,
									IRequestParameterReadWrite param,
									String dataMapKey,
									HashMap<String, Object> temporaryData,
									HashMap<String, Object> ccMsg) throws Throwable
	{
		// 変更前情報を取得する
		String taknkikiModelCd_bf = "";								//宅内機器モデルコード
		String kikiChgNo_bf = "";									//機器変更番号
		CAANMsg ekk0341a010cbsMsg = (CAANMsg)temporaryData.get(TMP_KK_T_KKTK_SVC_KEI);
		if(ekk0341a010cbsMsg != null)
		{
			taknkikiModelCd_bf = ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD);
			kikiChgNo_bf = ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_CHG_NO);
		}
		
		// 変更後情報を取得する
		String taknkikiModelCd_af = (String)ccMsg.get(IN_TAKNKIKI_MODEL_CD);
		String kikiChgNo_af = (String)temporaryData.get(TMP_KIKI_CHG_NO_NEW);
		
		// *********************************************
		// 文字を連結
		StringBuilder prgTkjk = new  StringBuilder();
		// （変更前）を表示するか判定
		if(isPrgTkjkDisp(taknkikiModelCd_bf) || isPrgTkjkDisp(kikiChgNo_bf))
		{
			prgTkjk.append(PRG_STAT_BEFORE);
		}
		// 変更前：型番
		if(isPrgTkjkDisp(taknkikiModelCd_bf))
		{
			prgTkjk.append(PRG_STAT_KIKI_MODEL_CD).append(taknkikiModelCd_bf).append(PRG_STAT_DELIMITA);
		}
		// 変更前：機器変更番号
		if(isPrgTkjkDisp(kikiChgNo_bf))
		{
			prgTkjk.append(PRG_STAT_KIKI_CHG_NO).append(kikiChgNo_bf).append(PRG_STAT_DELIMITA);
		}
		// （変更後）を表示するか判定
		if(isPrgTkjkDisp(taknkikiModelCd_af) || isPrgTkjkDisp(kikiChgNo_af))
		{
			prgTkjk.append(PRG_STAT_AFTER);
		}
		// 変更後：型番
		if(isPrgTkjkDisp(taknkikiModelCd_af))
		{
			prgTkjk.append(PRG_STAT_KIKI_MODEL_CD).append(taknkikiModelCd_af).append(PRG_STAT_DELIMITA);
		}
		// 変更後：機器変更番号
		if(isPrgTkjkDisp(kikiChgNo_af))
		{
			prgTkjk.append(PRG_STAT_KIKI_CHG_NO).append(kikiChgNo_af).append(PRG_STAT_DELIMITA);
		}
		
		// 送付先手数料
		//無料ルータの追加登録時( (新)機器がベーシックルータの場合 )に　進捗特記事項を追加
		//   判定処理用のOPMSルータ種別コードリスト
		String opmsList = getNullToStr((String)ccMsg.get(IN_OPMS_ROUT_SBT_BASIC));
		//   ＯＰＭＳルータ種別コード(変更後)
		String opmsRouter_af = getNullToStr((String)ccMsg.get(IN_OPMS_ROUTER_KIND_CD));
		if(isYusenRuter(opmsList, opmsRouter_af))
		{
			// 
			//   ルータ事務手数料の有無を取得
			String umu = getCodeNameMgm(handle, scCall, param, dataMapKey, temporaryData, 
										CD_SBT_CD_00002, (String)ccMsg.get(IN_KIKI_SORYO_UM));
			
			// ルータ事務手数料の有無を
			prgTkjk.append(PRG_STAT_SORYO_UM).append(umu).append(PRG_STAT_DELIMITA);
		}
		return prgTkjk.toString();
	}
	
	/* ++++++++++ v5.03.00 削除開始 ++++++++++ */
//	/**
//	 * 進捗登録・特記事項表示：機器出荷指定日の文字列を作成する。<br>
//	 * @param ccMsg
//	 * @param temporaryData
//	 * @return 機器出荷指定日の文字列
//	 */
//	private String getPrgStatShukaShitei(HashMap<String, Object> ccMsg,
//			HashMap<String, Object> temporaryData)
//	{
//		// 変更前：配送依頼指定年月日
//		String shiteiDate_bf = "";
//		CAANMsg ekk0341a010cbsMsg = (CAANMsg)temporaryData.get(TMP_KK_T_KKTK_SVC_KEI);
//		if(ekk0341a010cbsMsg != null)
//		{
//			shiteiDate_bf = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.HAISO_REQ_SHITEI_YMD));
//		}
//		
//		// 変更後：配送依頼指定年月日
//		String shiteiDate_af = getNullToStr((String)ccMsg.get(IN_HAISO_REQ_SHITEI_YMD));
//		
//		// *********************************************
//		// 文字を連結
//		StringBuilder prgTkjk = new  StringBuilder();
//		if(!shiteiDate_af.equals(shiteiDate_bf))
//		{
//			prgTkjk.append(PRG_STAT_SHUKA_SITEI).append(JPCFomatString.formatDate(shiteiDate_bf)).append(PRG_STAT_DELIMITA);
//		}
//		return prgTkjk.toString();
//	}
	/* ++++++++++ v5.03.00 削除完了 ++++++++++ */
	
	/**
	 * 進捗登録・特記事項表示：機器送付情報の文字列を作成する。<br>
	 * @param ccMsg
	 * @param temporaryData
	 * @return 機器出荷指定日の文字列
	 */
	private String getPrgStatSofuInfo(HashMap<String, Object> ccMsg,
			HashMap<String, Object> temporaryData)
	{
		// 機器送付先情報の変更対象リスト
		Object[] checkList = {
				PRG_STAT_CHECK_POST,
				PRG_STAT_CHECK_AD_CD,
				PRG_STAT_CHECK_ADDRESS,
				PRG_STAT_CHECK_TEL,
				PRG_STAT_CHECK_NAME,
				PRG_STAT_CHECK_KANA
		};
		
		CAANMsg ekk0341a010cbsMsg = (CAANMsg)temporaryData.get(TMP_KK_T_KKTK_SVC_KEI);
		// 機器送付情報に変更箇所があるか確認
		boolean bChangeNasi = true;
		for(int i = 0; i < checkList.length; i++)
		{
			if(isChangeData(ekk0341a010cbsMsg, ccMsg, (String[][])checkList[i]))
			{
				bChangeNasi = false;
				break;
			}
		}
		if(bChangeNasi)
		{
			// 変更なし
			return "";
		}
		
		// *********************************************
		// 文字を連結
		StringBuilder prgTkjk = new  StringBuilder();
		prgTkjk.append(PRG_STAT_SOFU_INFO);
		
		// 郵便番号
		if(isChangeData(ekk0341a010cbsMsg, ccMsg, PRG_STAT_CHECK_POST))
		{
			prgTkjk.append(PRG_STAT_POST)
					.append(JPCFomatString.hyhunPcd(getStringCbsMsg(ekk0341a010cbsMsg, EKK0341A010CBSMsg1List.KIKI_SOHUS_PCD)))
					.append(PRG_STAT_DELIMITA);
		}
		
		// 住所コード
		if(isChangeData(ekk0341a010cbsMsg, ccMsg, PRG_STAT_CHECK_AD_CD))
		{
			prgTkjk.append(PRG_STAT_ADDRESS_CD)
					.append(JPCFomatString.hyhunAdCd(getStringCbsMsg(ekk0341a010cbsMsg, EKK0341A010CBSMsg1List.KIKI_SOHUS_AD_CD)))
					.append(PRG_STAT_DELIMITA);
		}
		
		// 住所
		if(isChangeData(ekk0341a010cbsMsg, ccMsg, PRG_STAT_CHECK_ADDRESS))
		{
			prgTkjk.append(PRG_STAT_ADDRESS);
			for(int i = 0; i < PRG_STAT_CHECK_ADDRESS.length; i++)
			{
				prgTkjk.append(getStringCbsMsg(ekk0341a010cbsMsg, PRG_STAT_CHECK_ADDRESS[i][0]));
			}
			prgTkjk.append(PRG_STAT_DELIMITA);
		}
		
		// 電話番号
		if(isChangeData(ekk0341a010cbsMsg, ccMsg, PRG_STAT_CHECK_TEL))
		{
			prgTkjk.append(PRG_STAT_TEL)
					.append(getStringCbsMsg(ekk0341a010cbsMsg, EKK0341A010CBSMsg1List.KIKI_SOHUS_TELNO))
					.append(PRG_STAT_DELIMITA);
		}
		
		// 送付先名
		if(isChangeData(ekk0341a010cbsMsg, ccMsg, PRG_STAT_CHECK_NAME))
		{
			prgTkjk.append(PRG_STAT_NAME)
					.append(getStringCbsMsg(ekk0341a010cbsMsg, EKK0341A010CBSMsg1List.KIKI_SOHUS_NM))
					.append(PRG_STAT_DELIMITA);
		}
		
		// 送付先名(カナ)
		if(isChangeData(ekk0341a010cbsMsg, ccMsg, PRG_STAT_CHECK_KANA))
		{
			prgTkjk.append(PRG_STAT_KANA)
					.append(getStringCbsMsg(ekk0341a010cbsMsg, EKK0341A010CBSMsg1List.KIKI_SOHUS_KANA))
					.append(PRG_STAT_DELIMITA);
		}
		
		return prgTkjk.toString();
	}
	
	/**
	 * <pre>
	 * 値の変更をチェックをする。
	 * １．cbsMsgがNULLの場合、空文字で比較を実施。
	 * ２．それ以外は、取得した値にて比較を実施。
	 * </pre>
	 * @param cbsMsg CAANMsg
	 * @param ccMsg 入力インターフェース群
	 * @param chkData チェック項目の配列（[][0]：CAANMsgの項目、[][1]：ccMsgの項目）
	 * @return true：変更あり、false：変更なし
	 */
	private boolean isChangeData(CAANMsg cbsMsg, HashMap<String, Object> ccMsg, 
			String[][] chkData)
	{
		// データチェック
		String strBefor = "";
		for(int i = 0; i < chkData.length; i++)
		{
			if(cbsMsg != null)
			{
				strBefor = getNullToStr(cbsMsg.getString(chkData[i][0]));
			}
			
			// 変更前と変更後に変更ある場合
			if(!strBefor.equals(getNullToStr((String)ccMsg.get(chkData[i][1]))))
			{
				return true;
			}
		}
		return false;
	}
	
	/**
	 * CAANMsgより、対象の項目値を取得する。<br>
	 * @param cbsMsg CAANMsg
	 * @param name 取得する項目名
	 * @return 取得した文字列
	 */
	private String getStringCbsMsg(CAANMsg cbsMsg, String name)
	{
		if(cbsMsg == null)
		{
			return "";
		}
		return getNullToStr(cbsMsg.getString(name));
	}
	
	/**
	 * 入力項目を進捗登録・特記事項に表示するか判定します。
	 * <br>
	 * @param arg0 進捗登録に表示する項目の設定値
	 * @return true:表示する false:表示しない
	 */
	private boolean isPrgTkjkDisp(String arg0)
	{
		if(!(arg0 == null) && !("".equals(arg0)))
		{
			return true;
		}
		return false;
	}
	
	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String dataMapKey,
							Object[][] mappingData) throws Exception
	{
		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);
		Integer status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		editErrorInfoCom(param, templates, (Integer)return_code, dataMapKey, mappingData);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(return_code.toString()) && 0 == status.intValue()))
		{
			/* ++++++++++ v4.03.00 追加開始 ++++++++++ */
			// 警告の場合、例外をスローしない
			if(!("0".equals(return_code.toString()) && 4 == status.intValue()))
			{
			/* ++++++++++ v4.03.00 追加終了 ++++++++++ */
				throw new SCCallException("戻り値不正", return_code.toString(), status);
			/* ++++++++++ v4.03.00 追加開始 ++++++++++ */
			}
			/* ++++++++++ v4.03.00 追加終了 ++++++++++ */
		}
		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));
		
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", (String)mappingData[0][1]));
		
		// オペレータ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 ("".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
	 * @param returnCode
	 * @param dataMapKey
	 * @param mappingData
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param,
														CAANMsg[] templates, 
														int returnCode,
														String dataMapKey,
														Object[][] mappingData) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		HashMap<String, String> inMap = null;
		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData(dataMapKey);
		
		for (int i = 0; i < mappingData.length; i++)
		{
			/* ++++++++++ v4.03.00 削除開始 ++++++++++ */
//			if (((String)mappingData[i][0]).startsWith("key_"))
//			{
			/* ++++++++++ v4.03.00 削除終了 ++++++++++ */
				if (!template.isNull(mappingData[i][0] + "_err"))
				{
					if (!inMap.containsKey(mappingData[i][0] + "_err"))
					{
						inMap.put(mappingData[i][0] + "_err", template.getString(mappingData[i][0] + "_err"));
					}
				}
			/* ++++++++++ v4.03.00 削除開始 ++++++++++ */
//			}
			/* ++++++++++ v4.03.00 削除終了 ++++++++++ */
		}
		return param;
	}

	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param dataMapKey
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param,
														CAANMsg[] templates, 
														int returnCode,
														String dataMapKey) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		HashMap<String, String> inMap = null;
		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData(dataMapKey);
		
		Iterator<String> it = inMap.keySet().iterator();
		while (it.hasNext())
		{
			String key = it.next();
			if (key.endsWith("_err"))
			{
				if (!template.isNull(key))
				{
					if (!inMap.containsKey(key))
					{
						inMap.put(key, template.getString(key));
					}
				}
			}
		}
		return param;
	}

	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @param inListMsgName
	 * @param inList
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSCArray(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey, 
									Object[][] mappingData, 
									String inListMsgName, 
									ArrayList<HashMap<String, Object>> inList) throws Exception
	{
		HashMap<String, Object> paramMap = editInArrayMsg(param, mappingData, inListMsgName, inList);
		
		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);
		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		editErrorInfoComArray(param, templates, (Integer)return_code, dataMapKey, mappingData, inListMsgName, inList);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(return_code.toString()) && 0 == status))
		{
			/* ++++++++++ v4.03.00 追加開始 ++++++++++ */
			// 警告の場合、例外をスローしない
			if(!("0".equals(return_code.toString()) && 4 == status))
			{
			/* ++++++++++ v4.03.00 追加終了 ++++++++++ */
				throw new SCCallException("戻り値不正", return_code.toString(), status);
			/* ++++++++++ v4.03.00 追加開始 ++++++++++ */
			}
			/* ++++++++++ v4.03.00 追加終了 ++++++++++ */
		}
		return msg;
	}

	/**
	 * @param param
	 * @param mappingData
	 * @param inListMsgName
	 * @param inList
	 * @return HashMap
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editInArrayMsg(IRequestParameterReadWrite param,
													Object[][] mappingData, 
													String inListMsgName, 
													ArrayList<HashMap<String, Object>> inList) 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 ("".equals(mappingData[i][1]))
			{
				template.setNull((String)mappingData[i][0]);
			}
			else
			{
				template.set((String)mappingData[i][0], mappingData[i][1]);
			}
		}
		
		CAANMsg[] templateArray = template.getCAANMsgList(inListMsgName);
		
		if (templateArray == null)
		{
			templateArray = new CAANMsg[inList.size()];
		}
		
		for (int i = 0; i < inList.size(); i++)
		{
			HashMap childMap = (HashMap)inList.get(i);
			CAANMsg childTemplate = templateArray[i];
			if (childTemplate == null)
			{
				childTemplate = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg1List", svcIf));
			}
			
			Iterator it = childMap.keySet().iterator();
			while (it.hasNext())
			{
				String key = (String)it.next();
				
				if ("".equals(childMap.get(key)))
				{
					childTemplate.setNull(key);
				}
				else
				{
					childTemplate.set(key, (String)childMap.get(key));
				}
			}
			templateArray[i] = childTemplate;
		}
		template.set(inListMsgName, templateArray);
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		return paramMap;
	}

	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param dataMapKey
	 * @param mappingData
	 * @param inListMsgName
	 * @param inList
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoComArray(IRequestParameterReadWrite param,
														CAANMsg[] templates, 
														int returnCode,
														String dataMapKey,
														Object[][] mappingData,
														String inListMsgName, 
														ArrayList<HashMap<String, Object>> inList) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		HashMap<String, String> inMap = (HashMap<String, String>)param.getData(dataMapKey);
		CAANMsg[] templateArray = template.getCAANMsgList(inListMsgName);
		
		for (int i = 0; i < inList.size(); i++)
		{
			HashMap childMap = (HashMap)inList.get(i);
			CAANMsg childTemplate = templateArray[i];
			
			Iterator it = childMap.keySet().iterator();
			while (it.hasNext())
			{
				String key = (String)it.next();
				if (!childTemplate.isNull(key + "_err"))
				{
					if (!inMap.containsKey(key + "_err"))
					{
						inMap.put(key + "_err", childTemplate.getString(key + "_err"));
					}
				}
			}
		}
		if (!template.isNull(inListMsgName + "_err"))
		{
			if (!inMap.containsKey(inListMsgName + "_err"))
			{
				inMap.put(inListMsgName + "_err", template.getString(inListMsgName + "_err"));
			}
		}
		return param;
	}

	/**
	 * チェック処理用サービスインターフェイス作成。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	public  HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		List<CAANMsg> templates = new ArrayList<CAANMsg>();
		
		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文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));
		
		// チェック用サービスインターフェイス
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, Arrays.asList(templates));
		return paramMap;
	}

	/**
	 * IRequestParameterReadWriteにエラー情報をマッピングする。<br>
	 * <br>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
	throws RequestParameterException
	{
		for (int i = 0; i < templates.length; i++)
		{
			editErrorInfoCom(param, templates, returnCode, fixedText);
		}
		return param;
	}

	/**
	 * 
	 * @param ccMsg
	 * @param tempData
	 * @param param
	 * @throws RequestParameterException 
	 */
	private void initializeTempData(HashMap<String, Object> ccMsg, HashMap<String, Object> tempData, IRequestParameterReadWrite param) 
		throws RequestParameterException
	{
		/* ++++++++++ v5.02.00 変更開始 ++++++++++ */
//		// 作業領域の取得
//		Map<Object, Object> workMap = param.getMappingWorkArea();
//		
//		if (workMap.get(KK_COM_SVC_UP_DTM) == null || "".equals(workMap.get(KK_COM_SVC_UP_DTM)))
//		{
//			tempData.put(TMP_END_UPD_DATE_TIME, ccMsg.get(IN_UPD_DTM_SVC_KEI));
//		}
//		else
//		{
//			tempData.put(TMP_END_UPD_DATE_TIME, (String)workMap.get(KK_COM_SVC_UP_DTM));
//		}

		// 機器提供サービス契約データを取得します。
		CAANMsg ekk0341a010cbsMsg = (CAANMsg)tempData.get(TMP_KK_T_KKTK_SVC_KEI);
		String svcKeiUcwkNo = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO));
		
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		if (workMap.get(KK_COM_SVC_UP_DTM) == null || "".equals(workMap.get(KK_COM_SVC_UP_DTM)))
		{
			if(!"".equals(svcKeiUcwkNo))
			{
				tempData.put(TMP_END_UPD_DATE_TIME, ccMsg.get(IN_UPD_DTM_SVC_KEI_KAISEN));
			}
			else
			{
				tempData.put(TMP_END_UPD_DATE_TIME, ccMsg.get(IN_UPD_DTM_SVC_KEI));
			}
			
		}
		else
		{
			tempData.put(TMP_END_UPD_DATE_TIME, (String)workMap.get(KK_COM_SVC_UP_DTM));
		}

		/* ++++++++++ v5.02.00 変更完了 ++++++++++ */
	}
	
	/* ++++++++++ v4.02.00 修正開始 ++++++++++ */
	/**
	 * ワーク領域に保持している異動年月日時分秒を取得します。
	 * 設定値がない場合は共通部品より取得します。
	 * <br>
	 * @param param リクエストパラメータ
	 * @return UpDtm 更新時間
	 * @throws Exception
	 */
	private String getIdoUpDtm(IRequestParameterReadWrite param) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		if("".equals(getNullToStr((String)workMap.get(KK_COM_IDO_UP_DTM))))
		{
			// 未設定時のみworkMapに新規格納
			workMap.put(KK_COM_IDO_UP_DTM, (JPCBPCommon.getSysDateTimeStamp()));
		}
		// workMapから取得
		return (String)workMap.get(KK_COM_IDO_UP_DTM);
	}
	/* ++++++++++ v4.02.00 修正完了 ++++++++++ */
	
	/**
	 * 返却値設定メソッド
	 * @param param
	 * @param dataMapKey
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private void setReturnData(IRequestParameterReadWrite param, String dataMapKey) throws Exception
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		HashMap<String, Object> kikiChgCCMap = (HashMap<String, Object>)param.getData(KIKI_CHGCC_KEY);
		ArrayList<HashMap<String, Object>> kiki_list = (ArrayList<HashMap<String, Object>>)kikiChgCCMap.get("chg_kiki_list");
		
		// 1件のみ設定のため0番目を取得。
		HashMap<String, Object> childMap = kiki_list.get(0);
		
		
		ccMsg.put(OUT_SOKO_TANA_CD, getNullToStr((String)childMap.get("soko_tana_cd")));
		ccMsg.put(OUT_SOKO_TANA_NM, getNullToStr((String)childMap.get("soko_tana_nm")));
		
	}
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		if (str == null || "".equals(str.trim()))
		{
			return "";
		}
		return str;
	}
	
	/**
	 * 返却値設定メソッド
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean
	 * @throws Throwable 
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void setScrnReturnData(SessionHandle handle, 
											ServiceComponentRequestInvoker scCall, 
											IRequestParameterReadWrite param, 
											String dataMapKey,
											HashMap<String, Object> temporaryData) throws Throwable
	{
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		HashMap<String, Object> outTmpMap = (HashMap<String, Object>)temporaryData.get(TMP_OUTPUT);
		// 解約登録処理ルート
		if(outTmpMap != null && !outTmpMap.isEmpty())
		{
			ccMsg.put(OUT_SOKO_TANA_CD, (String)outTmpMap.get(OUT_SOKO_TANA_CD));
			ccMsg.put(OUT_SOKO_TANA_NM, (String)outTmpMap.get(OUT_SOKO_TANA_NM));
			ccMsg.put(OUT_TAKNKIKI_MODEL_NM, (String)outTmpMap.get(OUT_TAKNKIKI_MODEL_NM));
			ccMsg.put(OUT_KKTK_SVC_CD, (String)outTmpMap.get(OUT_KKTK_SVC_CD));
			ccMsg.put(OUT_KKTK_SVC_NM, (String)outTmpMap.get(OUT_KKTK_SVC_NM));
		}
		// 変更処理ルート
		else
		{
			// 料金コース情報(変更後)
			Map<String, Object> pcrsData = (Map<String, Object>)temporaryData.get(TMP_PCRS_DATA_AF);
			
			// 機器提供サービスコード
			ccMsg.put(OUT_KKTK_SVC_CD, pcrsData.get(PCRS_KKTK_SVC_CD));
			// 機器提供サービスコード名
			ccMsg.put(OUT_KKTK_SVC_NM, pcrsData.get(PCRS_KKTK_SVC_NM));
			
			// 宅内機器型式名
			ccMsg.put(OUT_TAKNKIKI_MODEL_NM, getTknKikiKataNm(handle, scCall, param, dataMapKey));
		}
	}
	
	/**
	 * 宅内機器型式取得メソッド
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean
	 * @throws Throwable 
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private String getTknKikiKataNm(SessionHandle handle, 
											ServiceComponentRequestInvoker scCall, 
											IRequestParameterReadWrite param, 
											String dataMapKey) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// ***** EZM0411A010（宅内機器型式一意照会）******
		Object[][] ezm0411a010IN = {
			{EZM0411A010CBSMsg.TEMPLATEID,            TEMPLATE_ID_EZM0411A010},
			{EZM0411A010CBSMsg.FUNC_CODE,             "1"},
			{EZM0411A010CBSMsg.KEY_TAKNKIKI_MODEL_CD, ccMsg.get(IN_TAKNKIKI_MODEL_CD)}
		};
		
		// 宅内機器型式一意照会サービスインターフェイスの実行
		CAANMsg[] ezm0411a010cbsMsg1list 
			= callSC(handle, scCall, param, dataMapKey, ezm0411a010IN).getCAANMsgList(EZM0411A010CBSMsg.EZM0411A010CBSMSG1LIST);
		
		
		return ezm0411a010cbsMsg1list[0].getString(EZM0411A010CBSMsg1List.TAKNKIKI_MODEL_NM);
	}
	
	/**
	 * 宅内機器型式一意照会取得メソッド
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param modelCd 宅内機器型式コード
	 * @return CAANMsg
	 * @throws Throwable 
	 * @throws Exception
	 */
	private CAANMsg getTknKikiKataShokai(SessionHandle handle, 
											ServiceComponentRequestInvoker scCall, 
											IRequestParameterReadWrite param, 
											String dataMapKey,
											String modelCd) throws Throwable
	{
		// ***** EZM0411A010（宅内機器型式一意照会）******
		Object[][] ezm0411a010IN = {
			{EZM0411A010CBSMsg.TEMPLATEID,            TEMPLATE_ID_EZM0411A010},
			{EZM0411A010CBSMsg.FUNC_CODE,             "1"},
			{EZM0411A010CBSMsg.KEY_TAKNKIKI_MODEL_CD, modelCd}
		};
		
		// 宅内機器型式一意照会サービスインターフェイスの実行
		CAANMsg[] ezm0411a010cbsMsg1list 
			= callSC(handle, scCall, param, dataMapKey, ezm0411a010IN).getCAANMsgList(EZM0411A010CBSMsg.EZM0411A010CBSMSG1LIST);
		
		return ezm0411a010cbsMsg1list[0];
	}
	
	/**
	 * 料金コース取得メソッド
	 * 
	 * @param handle
	 * @param param
	 * @param ccMsg
	 * @return Map
	 * @throws Throwable 
	 */
	private Map<String, Object> getPcrsData(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> ccMsg) throws Throwable
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// 共通情報のマッピング
		paramMap.put("func_code",         ccMsg.get(IN_FUNC_CODE));
		// 宅内機器型式コード
		paramMap.put("taknkiki_model_cd", ccMsg.get(IN_TAKNKIKI_MODEL_CD));
		// 機器提供種別コード
		paramMap.put("kktk_sbt_cd",       ccMsg.get(IN_KKTK_SBT_CD));
		//販売種別コード
		paramMap.put("hambai_sbt_cd",     ccMsg.get(IN_HAMBAI_SBT));
		// 基準日
		paramMap.put("stdardymd",         ccMsg.get(IN_STD_YMD));
		
		Map<String, Object> jkkpcrDataMap = JKKBpCommon.getPcrsData(handle, param, paramMap);
		
		return jkkpcrDataMap;
		
	}
	
	/**
	 * 異動理由明細を取得。
	 * 
	 * @param ccMsg
	 * @return ArrayList 
	 */
	private ArrayList<HashMap<String, Object>> getIdoRsnList(HashMap<String, Object> ccMsg)
	{
		ArrayList<HashMap<String, Object>> inList = new ArrayList<HashMap<String, Object>>();
		ArrayList<HashMap<String, Object>> outList = (ArrayList)ccMsg.get(IN_LIST_EKK1091D010CBSMSG1);
		if (outList != null)
		{
			HashMap childMap = null;
			HashMap<String, Object> inMap = null;
			inList = new ArrayList<HashMap<String, Object>>();
			for (int j = 0; j < outList.size(); j++)
			{
				childMap = (HashMap)outList.get(j);
				inMap = new HashMap<String, Object>();
				// 異動理由コード
				inMap.put(EKK1091D010CBSMsg1List.IDO_RSN_CD,   childMap.get(IN_IDO_RSN_CD));
				// 異動理由メモ
				inMap.put(EKK1091D010CBSMsg1List.IDO_RSN_MEMO, "");
				inList.add(inMap);
			}
		}
		
		return inList;
	}
	
	/**
	 * <pre>
	 * コード名称管理より、対象の名称を取得する。
	 * 処理：
	 * 　コード名称管理より、一意照会を実施して、対象の名称を返却する。
	 * 　対象が存在しない場合、空を返却する。
	 * </pre>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param cdSbtCd コード種別コード
	 * @param cdDiv コード区分
	 * @return 編集後文字列
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String getCodeNameMgm(SessionHandle handle, 
								ServiceComponentRequestInvoker scCall, 
								IRequestParameterReadWrite param, 
								String dataMapKey,
								HashMap<String, Object> temporaryData,
								String cdSbtCd, String cdDiv) throws Throwable
	{
		// 出力文字列格納用
		String output = "";
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// 割賦契約が一括か割賦か取得する。
		// ***** EZM0171A010（コード名称管理一意照会）*****
		Object[][] ezm0171a010IN = {
			{EZM0171A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EZM0171A010},
			{EZM0171A010CBSMsg.FUNC_CODE,        FUNC_CODE_1},
			{EZM0171A010CBSMsg.KEY_CD_SBT_CD,    cdSbtCd},
			{EZM0171A010CBSMsg.KEY_CD_DIV,       cdDiv},
		};
		
		// サービスインターフェース実行
		CAANMsg ezm0171a010OUT = callSC(handle, scCall, param, dataMapKey, ezm0171a010IN).getCAANMsgList(EZM0171A010CBSMsg.EZM0171A010CBSMSG1LIST)[0];
		// サービスインターフェース取得結果からコード名称を取得する。
		if(ezm0171a010OUT == null)
		{
			return output;
		}
		output = getNullToStr(ezm0171a010OUT.getString(EZM0171A010CBSMsg1List.CD_DIV_NM));
		
		return output;
	}
	
	/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
	/**
	 * 申込明細番号を取得します。
	 * @param param リクエストパラメータ
	 * @param ekk0081a010cbsMsg
	 * @return String
	 * @throws Exception 
	 */
	private String getMskmDtlNo(IRequestParameterReadWrite param, HashMap<String, Object> ccMsg) throws Exception
	{
		// 住所変更中申込明細番号
		String adchg_mskm_dtl_no = getNullToStr((String)ccMsg.get("adchg_mskm_dtl_no"));
		
		// 住所変更中申込明細番号がある場合、返却します。
		if(!"".equals(adchg_mskm_dtl_no))
		{
			return adchg_mskm_dtl_no;
		}
		
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		String mskmDtlNo = getNullToStr((String)workMap.get("mskm_dtl_no"));
		
		return mskmDtlNo;
	}
	/* ++++++++++ v9.00.00 追加終了 ++++++++++ */
}
